summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Legler <alex@a3li.li>2016-01-06 21:47:22 +0100
committerAlex Legler <alex@a3li.li>2016-01-06 21:47:22 +0100
commit058ee4ffba20b377ad1e154c7c9095d38d3a8706 (patch)
tree2afabdf00f82a2dfaa08e642e24ab848d1eebe98
parentRemove AntiSpoof and AbuseFilter as these seem to be no longer bundled (diff)
downloadextensions-058ee4ffba20b377ad1e154c7c9095d38d3a8706.tar.gz
extensions-058ee4ffba20b377ad1e154c7c9095d38d3a8706.tar.bz2
extensions-058ee4ffba20b377ad1e154c7c9095d38d3a8706.zip
Add AntiSpoof
-rw-r--r--AntiSpoof/.gitignore5
-rw-r--r--AntiSpoof/.gitreview5
-rw-r--r--AntiSpoof/AntiSpoof.i18n.php35
-rw-r--r--AntiSpoof/AntiSpoof.php69
-rw-r--r--AntiSpoof/AntiSpoofHooks.php182
-rw-r--r--AntiSpoof/AntiSpoof_body.php426
-rw-r--r--AntiSpoof/COPYING339
-rw-r--r--AntiSpoof/Gruntfile.js18
-rw-r--r--AntiSpoof/SpoofUser.php179
-rw-r--r--AntiSpoof/api/ApiAntiSpoof.php95
-rw-r--r--AntiSpoof/composer.json11
-rw-r--r--AntiSpoof/composer.lock116
-rw-r--r--AntiSpoof/equivset.php9163
-rw-r--r--AntiSpoof/equivset.ser1
-rw-r--r--AntiSpoof/i18n/aeb.json21
-rw-r--r--AntiSpoof/i18n/af.json22
-rw-r--r--AntiSpoof/i18n/aln.json21
-rw-r--r--AntiSpoof/i18n/an.json22
-rw-r--r--AntiSpoof/i18n/ang.json9
-rw-r--r--AntiSpoof/i18n/ar.json31
-rw-r--r--AntiSpoof/i18n/arc.json10
-rw-r--r--AntiSpoof/i18n/arz.json23
-rw-r--r--AntiSpoof/i18n/as.json25
-rw-r--r--AntiSpoof/i18n/ast.json27
-rw-r--r--AntiSpoof/i18n/avk.json10
-rw-r--r--AntiSpoof/i18n/awa.json22
-rw-r--r--AntiSpoof/i18n/az.json22
-rw-r--r--AntiSpoof/i18n/azb.json24
-rw-r--r--AntiSpoof/i18n/ba.json24
-rw-r--r--AntiSpoof/i18n/bar.json21
-rw-r--r--AntiSpoof/i18n/bcc.json23
-rw-r--r--AntiSpoof/i18n/bcl.json23
-rw-r--r--AntiSpoof/i18n/be-tarask.json25
-rw-r--r--AntiSpoof/i18n/be.json22
-rw-r--r--AntiSpoof/i18n/bg.json25
-rw-r--r--AntiSpoof/i18n/bho.json8
-rw-r--r--AntiSpoof/i18n/bjn.json22
-rw-r--r--AntiSpoof/i18n/bn.json25
-rw-r--r--AntiSpoof/i18n/bqi.json8
-rw-r--r--AntiSpoof/i18n/br.json24
-rw-r--r--AntiSpoof/i18n/bs.json23
-rw-r--r--AntiSpoof/i18n/ca.json26
-rw-r--r--AntiSpoof/i18n/ce.json11
-rw-r--r--AntiSpoof/i18n/ckb.json9
-rw-r--r--AntiSpoof/i18n/co.json4
-rw-r--r--AntiSpoof/i18n/cs.json25
-rw-r--r--AntiSpoof/i18n/cy.json22
-rw-r--r--AntiSpoof/i18n/da.json28
-rw-r--r--AntiSpoof/i18n/de-ch.json8
-rw-r--r--AntiSpoof/i18n/de-formal.json10
-rw-r--r--AntiSpoof/i18n/de.json30
-rw-r--r--AntiSpoof/i18n/diq.json26
-rw-r--r--AntiSpoof/i18n/dsb.json22
-rw-r--r--AntiSpoof/i18n/dtp.json8
-rw-r--r--AntiSpoof/i18n/el.json27
-rw-r--r--AntiSpoof/i18n/en-gb.json8
-rw-r--r--AntiSpoof/i18n/en.json27
-rw-r--r--AntiSpoof/i18n/eo.json24
-rw-r--r--AntiSpoof/i18n/es.json40
-rw-r--r--AntiSpoof/i18n/et.json25
-rw-r--r--AntiSpoof/i18n/eu.json14
-rw-r--r--AntiSpoof/i18n/fa.json32
-rw-r--r--AntiSpoof/i18n/fi.json27
-rw-r--r--AntiSpoof/i18n/fo.json22
-rw-r--r--AntiSpoof/i18n/fr.json35
-rw-r--r--AntiSpoof/i18n/frc.json18
-rw-r--r--AntiSpoof/i18n/frp.json22
-rw-r--r--AntiSpoof/i18n/frr.json26
-rw-r--r--AntiSpoof/i18n/gd.json22
-rw-r--r--AntiSpoof/i18n/gl.json28
-rw-r--r--AntiSpoof/i18n/gor.json10
-rw-r--r--AntiSpoof/i18n/grc.json11
-rw-r--r--AntiSpoof/i18n/gsw.json23
-rw-r--r--AntiSpoof/i18n/gu.json24
-rw-r--r--AntiSpoof/i18n/hak.json17
-rw-r--r--AntiSpoof/i18n/he.json29
-rw-r--r--AntiSpoof/i18n/hi.json28
-rw-r--r--AntiSpoof/i18n/hif-latn.json26
-rw-r--r--AntiSpoof/i18n/hr.json22
-rw-r--r--AntiSpoof/i18n/hrx.json11
-rw-r--r--AntiSpoof/i18n/hsb.json22
-rw-r--r--AntiSpoof/i18n/ht.json18
-rw-r--r--AntiSpoof/i18n/hu.json25
-rw-r--r--AntiSpoof/i18n/ia.json22
-rw-r--r--AntiSpoof/i18n/id.json27
-rw-r--r--AntiSpoof/i18n/ig.json9
-rw-r--r--AntiSpoof/i18n/ilo.json25
-rw-r--r--AntiSpoof/i18n/is.json23
-rw-r--r--AntiSpoof/i18n/it.json29
-rw-r--r--AntiSpoof/i18n/ja.json34
-rw-r--r--AntiSpoof/i18n/jut.json18
-rw-r--r--AntiSpoof/i18n/jv.json25
-rw-r--r--AntiSpoof/i18n/ka.json26
-rw-r--r--AntiSpoof/i18n/khw.json9
-rw-r--r--AntiSpoof/i18n/kk-arab.json12
-rw-r--r--AntiSpoof/i18n/kk-cyrl.json20
-rw-r--r--AntiSpoof/i18n/kk-latn.json12
-rw-r--r--AntiSpoof/i18n/km.json18
-rw-r--r--AntiSpoof/i18n/kn.json14
-rw-r--r--AntiSpoof/i18n/ko.json25
-rw-r--r--AntiSpoof/i18n/krc.json8
-rw-r--r--AntiSpoof/i18n/ksh.json26
-rw-r--r--AntiSpoof/i18n/ky.json19
-rw-r--r--AntiSpoof/i18n/la.json8
-rw-r--r--AntiSpoof/i18n/lad.json12
-rw-r--r--AntiSpoof/i18n/lb.json23
-rw-r--r--AntiSpoof/i18n/lez.json9
-rw-r--r--AntiSpoof/i18n/li.json23
-rw-r--r--AntiSpoof/i18n/lo.json11
-rw-r--r--AntiSpoof/i18n/lrc.json26
-rw-r--r--AntiSpoof/i18n/lt.json31
-rw-r--r--AntiSpoof/i18n/lv.json17
-rw-r--r--AntiSpoof/i18n/mai.json20
-rw-r--r--AntiSpoof/i18n/map-bms.json23
-rw-r--r--AntiSpoof/i18n/mg.json15
-rw-r--r--AntiSpoof/i18n/min.json9
-rw-r--r--AntiSpoof/i18n/mk.json27
-rw-r--r--AntiSpoof/i18n/ml.json26
-rw-r--r--AntiSpoof/i18n/mn.json21
-rw-r--r--AntiSpoof/i18n/mr.json29
-rw-r--r--AntiSpoof/i18n/ms.json24
-rw-r--r--AntiSpoof/i18n/mt.json22
-rw-r--r--AntiSpoof/i18n/myv.json10
-rw-r--r--AntiSpoof/i18n/nah.json8
-rw-r--r--AntiSpoof/i18n/nap.json26
-rw-r--r--AntiSpoof/i18n/nb.json27
-rw-r--r--AntiSpoof/i18n/nds-nl.json22
-rw-r--r--AntiSpoof/i18n/nds.json21
-rw-r--r--AntiSpoof/i18n/ne.json21
-rw-r--r--AntiSpoof/i18n/nl.json31
-rw-r--r--AntiSpoof/i18n/nn.json24
-rw-r--r--AntiSpoof/i18n/nso.json12
-rw-r--r--AntiSpoof/i18n/oc.json22
-rw-r--r--AntiSpoof/i18n/olo.json9
-rw-r--r--AntiSpoof/i18n/or.json23
-rw-r--r--AntiSpoof/i18n/os.json10
-rw-r--r--AntiSpoof/i18n/pa.json11
-rw-r--r--AntiSpoof/i18n/pag.json6
-rw-r--r--AntiSpoof/i18n/pam.json15
-rw-r--r--AntiSpoof/i18n/pfl.json22
-rw-r--r--AntiSpoof/i18n/pl.json26
-rw-r--r--AntiSpoof/i18n/pms.json27
-rw-r--r--AntiSpoof/i18n/pnb.json21
-rw-r--r--AntiSpoof/i18n/ps.json13
-rw-r--r--AntiSpoof/i18n/pt-br.json34
-rw-r--r--AntiSpoof/i18n/pt.json27
-rw-r--r--AntiSpoof/i18n/qqq.json35
-rw-r--r--AntiSpoof/i18n/qu.json22
-rw-r--r--AntiSpoof/i18n/ro.json27
-rw-r--r--AntiSpoof/i18n/roa-tara.json27
-rw-r--r--AntiSpoof/i18n/ru.json29
-rw-r--r--AntiSpoof/i18n/rue.json22
-rw-r--r--AntiSpoof/i18n/sa.json24
-rw-r--r--AntiSpoof/i18n/sah.json22
-rw-r--r--AntiSpoof/i18n/sat.json20
-rw-r--r--AntiSpoof/i18n/scn.json29
-rw-r--r--AntiSpoof/i18n/sco.json25
-rw-r--r--AntiSpoof/i18n/sh.json22
-rw-r--r--AntiSpoof/i18n/shn.json23
-rw-r--r--AntiSpoof/i18n/si.json24
-rw-r--r--AntiSpoof/i18n/sk.json22
-rw-r--r--AntiSpoof/i18n/sl.json23
-rw-r--r--AntiSpoof/i18n/sq.json23
-rw-r--r--AntiSpoof/i18n/sr-ec.json29
-rw-r--r--AntiSpoof/i18n/sr-el.json26
-rw-r--r--AntiSpoof/i18n/stq.json21
-rw-r--r--AntiSpoof/i18n/su.json21
-rw-r--r--AntiSpoof/i18n/sv.json29
-rw-r--r--AntiSpoof/i18n/sw.json11
-rw-r--r--AntiSpoof/i18n/szl.json8
-rw-r--r--AntiSpoof/i18n/ta.json24
-rw-r--r--AntiSpoof/i18n/te.json24
-rw-r--r--AntiSpoof/i18n/tg-cyrl.json17
-rw-r--r--AntiSpoof/i18n/tg-latn.json17
-rw-r--r--AntiSpoof/i18n/tk.json21
-rw-r--r--AntiSpoof/i18n/tl.json26
-rw-r--r--AntiSpoof/i18n/to.json9
-rw-r--r--AntiSpoof/i18n/tr.json28
-rw-r--r--AntiSpoof/i18n/tzm.json8
-rw-r--r--AntiSpoof/i18n/ug-arab.json24
-rw-r--r--AntiSpoof/i18n/uk.json31
-rw-r--r--AntiSpoof/i18n/ur.json12
-rw-r--r--AntiSpoof/i18n/vec.json23
-rw-r--r--AntiSpoof/i18n/vep.json10
-rw-r--r--AntiSpoof/i18n/vi.json27
-rw-r--r--AntiSpoof/i18n/vo.json22
-rw-r--r--AntiSpoof/i18n/yi.json18
-rw-r--r--AntiSpoof/i18n/yo.json12
-rw-r--r--AntiSpoof/i18n/yue.json28
-rw-r--r--AntiSpoof/i18n/zea.json19
-rw-r--r--AntiSpoof/i18n/zh-hans.json33
-rw-r--r--AntiSpoof/i18n/zh-hant.json34
-rw-r--r--AntiSpoof/maintenance/BatchAntiSpoofClass.php78
-rw-r--r--AntiSpoof/maintenance/Makefile16
-rw-r--r--AntiSpoof/maintenance/batchAntiSpoof.php5
-rw-r--r--AntiSpoof/maintenance/equivset.head34
-rw-r--r--AntiSpoof/maintenance/equivset.in5397
-rw-r--r--AntiSpoof/maintenance/equivset.txt3825
-rw-r--r--AntiSpoof/maintenance/generateEquivset.php170
-rw-r--r--AntiSpoof/package.json14
-rw-r--r--AntiSpoof/sql/patch-antispoof.mysql.sql21
-rw-r--r--AntiSpoof/sql/patch-antispoof.postgres.sql17
-rw-r--r--AntiSpoof/sql/patch-antispoof.sqlite.sql21
-rw-r--r--AntiSpoof/tests/AntiSpoofTest.php30
-rw-r--r--AntiSpoof/tests/SpoofUserTest.php86
-rw-r--r--AntiSpoof/vendor/autoload.php7
-rw-r--r--AntiSpoof/vendor/composer/ClassLoader.php413
-rw-r--r--AntiSpoof/vendor/composer/autoload_classmap.php9
-rw-r--r--AntiSpoof/vendor/composer/autoload_namespaces.php10
-rw-r--r--AntiSpoof/vendor/composer/autoload_psr4.php9
-rw-r--r--AntiSpoof/vendor/composer/autoload_real.php50
-rw-r--r--AntiSpoof/vendor/composer/installed.json102
-rw-r--r--AntiSpoof/vendor/composer/installers/.editorconfig10
-rw-r--r--AntiSpoof/vendor/composer/installers/.gitignore3
-rw-r--r--AntiSpoof/vendor/composer/installers/.travis.yml21
-rw-r--r--AntiSpoof/vendor/composer/installers/LICENSE19
-rw-r--r--AntiSpoof/vendor/composer/installers/README.md193
-rw-r--r--AntiSpoof/vendor/composer/installers/composer.json80
-rw-r--r--AntiSpoof/vendor/composer/installers/phpunit.xml.dist25
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/AglInstaller.php21
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php45
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php135
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php89
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php84
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php12
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php35
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php21
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php50
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php16
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php14
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/GravInstaller.php30
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php25
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/Installer.php176
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php15
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php16
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php50
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php111
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php56
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php46
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php21
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php32
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/Plugin.php17
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php22
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php58
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php36
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php26
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php14
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php38
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php12
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php14
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php9
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php11
-rw-r--r--AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php10
-rw-r--r--AntiSpoof/vendor/composer/installers/src/bootstrap.php13
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/AsgardInstallerTest.php61
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php115
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php83
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php89
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php63
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php428
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php66
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php66
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php44
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php63
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php64
-rw-r--r--AntiSpoof/vendor/composer/installers/tests/bootstrap.php4
-rw-r--r--AntiSpoof/version4
293 files changed, 27828 insertions, 0 deletions
diff --git a/AntiSpoof/.gitignore b/AntiSpoof/.gitignore
new file mode 100644
index 00000000..4bf4869f
--- /dev/null
+++ b/AntiSpoof/.gitignore
@@ -0,0 +1,5 @@
+.svn
+*~
+*.kate-swp
+.*.swp
+node_modules/
diff --git a/AntiSpoof/.gitreview b/AntiSpoof/.gitreview
new file mode 100644
index 00000000..905e91cc
--- /dev/null
+++ b/AntiSpoof/.gitreview
@@ -0,0 +1,5 @@
+[gerrit]
+host=gerrit.wikimedia.org
+port=29418
+project=mediawiki/extensions/AntiSpoof.git
+defaultbranch=REL1_26
diff --git a/AntiSpoof/AntiSpoof.i18n.php b/AntiSpoof/AntiSpoof.i18n.php
new file mode 100644
index 00000000..38b82bba
--- /dev/null
+++ b/AntiSpoof/AntiSpoof.i18n.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * This is a backwards-compatibility shim, generated by:
+ * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
+ *
+ * Beginning with MediaWiki 1.23, translation strings are stored in json files,
+ * and the EXTENSION.i18n.php file only exists to provide compatibility with
+ * older releases of MediaWiki. For more information about this migration, see:
+ * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
+ *
+ * This shim maintains compatibility back to MediaWiki 1.17.
+ */
+$messages = array();
+if ( !function_exists( 'wfJsonI18nShimbede5ec98f77749a' ) ) {
+ function wfJsonI18nShimbede5ec98f77749a( $cache, $code, &$cachedData ) {
+ $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
+ foreach ( $codeSequence as $csCode ) {
+ $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
+ if ( is_readable( $fileName ) ) {
+ $data = FormatJson::decode( file_get_contents( $fileName ), true );
+ foreach ( array_keys( $data ) as $key ) {
+ if ( $key === '' || $key[0] === '@' ) {
+ unset( $data[$key] );
+ }
+ }
+ $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
+ }
+
+ $cachedData['deps'][] = new FileDependency( $fileName );
+ }
+ return true;
+ }
+
+ $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShimbede5ec98f77749a';
+}
diff --git a/AntiSpoof/AntiSpoof.php b/AntiSpoof/AntiSpoof.php
new file mode 100644
index 00000000..f5f665ae
--- /dev/null
+++ b/AntiSpoof/AntiSpoof.php
@@ -0,0 +1,69 @@
+<?php
+if ( !defined( 'MEDIAWIKI' ) ) {
+ exit( 1 );
+}
+
+$wgExtensionCredits['antispam'][] = array(
+ 'path' => __FILE__,
+ 'name' => 'AntiSpoof',
+ 'url' => 'https://www.mediawiki.org/wiki/Extension:AntiSpoof',
+ 'author' => 'Brion Vibber',
+ 'descriptionmsg' => 'antispoof-desc',
+);
+
+/**
+ * Set this to false to disable the active checks;
+ * items will be logged but invalid or conflicting
+ * accounts will not be stopped.
+ *
+ * Logged items will be marked with 'LOGGING' for
+ * easier review of old logs' effect.
+ */
+$wgAntiSpoofAccounts = true;
+
+/**
+ * Blacklisted character codes.
+ */
+$wgAntiSpoofBlacklist = array(
+ 0x0337, # Combining short solidus overlay
+ 0x0338, # Combining long solidus overlay
+ 0x2044, # Fraction slash
+ 0x2215, # Division slash
+ 0x23AE, # Integral extension
+ 0x29F6, # Solidus with overbar
+ 0x29F8, # Big solidus
+ 0x2AFB, # Triple solidus binary relation
+ 0x2AFD, # Double solidus operator
+ 0xFF0F # Fullwidth solidus
+);
+
+/**
+ * Allow sysops and bureaucrats to override the spoofing checks
+ * and create accounts for people which hit false positives.
+ */
+$wgGroupPermissions['sysop']['override-antispoof'] = true;
+$wgGroupPermissions['bureaucrat']['override-antispoof'] = true;
+$wgAvailableRights[] = 'override-antispoof';
+
+$dir = __DIR__;
+
+$wgMessagesDirs['AntiSpoof'] = __DIR__ . '/i18n';
+$wgExtensionMessagesFiles['AntiSpoof'] = "$dir/AntiSpoof.i18n.php";
+
+$wgAutoloadClasses['AntiSpoof'] = "$dir/AntiSpoof_body.php";
+$wgAutoloadClasses['AntiSpoofHooks'] = "$dir/AntiSpoofHooks.php";
+$wgAutoloadClasses['SpoofUser'] = "$dir/SpoofUser.php";
+
+// Register the API method
+$wgAutoloadClasses['ApiAntiSpoof'] = "$dir/api/ApiAntiSpoof.php";
+$wgAPIModules['antispoof'] = 'ApiAntiSpoof';
+
+$wgHooks['LoadExtensionSchemaUpdates'][] = 'AntiSpoofHooks::asUpdateSchema';
+$wgHooks['AbortNewAccount'][] = 'AntiSpoofHooks::asAbortNewAccountHook';
+$wgHooks['UserCreateForm'][] = 'AntiSpoofHooks::asUserCreateFormHook';
+$wgHooks['AddNewAccount'][] = 'AntiSpoofHooks::asAddNewAccountHook';
+$wgHooks['RenameUserComplete'][] = 'AntiSpoofHooks::asAddRenameUserHook';
+$wgHooks['DeleteAccount'][] = 'AntiSpoofHooks::asDeleteAccount';
+$wgHooks['UnitTestsList'][] = 'AntiSpoofHooks::asUnitTestsList';
+$wgHooks['APIGetAllowedParams'][] = 'AntiSpoofHooks::onAPIGetAllowedParams';
+$wgHooks['AddNewAccountApiForm'][] = 'AntiSpoofHooks::addNewAccountApiForm';
diff --git a/AntiSpoof/AntiSpoofHooks.php b/AntiSpoof/AntiSpoofHooks.php
new file mode 100644
index 00000000..bc604d57
--- /dev/null
+++ b/AntiSpoof/AntiSpoofHooks.php
@@ -0,0 +1,182 @@
+<?php
+
+class AntiSpoofHooks {
+ /**
+ * @param $updater DatabaseUpdater
+ * @return bool
+ */
+ public static function asUpdateSchema( DatabaseUpdater $updater ) {
+ $updater->addExtensionTable( 'spoofuser',
+ __DIR__ . '/sql/patch-antispoof.' . $updater->getDB()->getType() . '.sql' );
+ return true;
+ }
+
+ /**
+ * Can be used to cancel user account creation
+ *
+ * @param $user User
+ * @param $message string
+ * @return bool true to continue, false to abort user creation
+ */
+ public static function asAbortNewAccountHook( $user, &$message ) {
+ global $wgAntiSpoofAccounts, $wgUser, $wgRequest;
+
+ if ( !$wgAntiSpoofAccounts ) {
+ $mode = 'LOGGING ';
+ $active = false;
+ } elseif ( $wgRequest->getCheck( 'wpIgnoreAntiSpoof' ) &&
+ $wgUser->isAllowed( 'override-antispoof' ) ) {
+ $mode = 'OVERRIDE ';
+ $active = false;
+ } else {
+ $mode = '';
+ $active = true;
+ }
+
+ $name = $user->getName();
+ $spoof = new SpoofUser( $name );
+ if ( $spoof->isLegal() ) {
+ $normalized = $spoof->getNormalized();
+ $conflicts = $spoof->getConflicts();
+ if ( empty( $conflicts ) ) {
+ wfDebugLog( 'antispoof', "{$mode}PASS new account '$name' [$normalized]" );
+ } else {
+ wfDebugLog( 'antispoof', "{$mode}CONFLICT new account '$name' [$normalized] spoofs " . implode( ',', $conflicts ) );
+ if ( $active ) {
+ $numConflicts = count( $conflicts );
+ $message = wfMessage( 'antispoof-conflict-top', $name )
+ ->numParams( $numConflicts )->escaped();
+ $message .= '<ul>';
+ foreach ( $conflicts as $simUser ) {
+ $message .= '<li>' . wfMessage( 'antispoof-conflict-item', $simUser )->escaped() . '</li>';
+ }
+ $message .= '</ul>' . wfMessage( 'antispoof-conflict-bottom' )->escaped();
+ return false;
+ }
+ }
+ } else {
+ $error = $spoof->getError();
+ wfDebugLog( 'antispoof', "{$mode}ILLEGAL new account '$name' $error" );
+ if ( $active ) {
+ $message = wfMessage( 'antispoof-name-illegal', $name, $error )->text();
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Set the ignore spoof thingie
+ * (Manipulate the user create form)
+ *
+ * @param $template UsercreateTemplate
+ * @return bool
+ */
+ public static function asUserCreateFormHook( &$template ) {
+ global $wgRequest, $wgAntiSpoofAccounts, $wgUser;
+
+ if ( $wgAntiSpoofAccounts && $wgUser->isAllowed( 'override-antispoof' ) ) {
+ $template->addInputItem( 'wpIgnoreAntiSpoof',
+ $wgRequest->getCheck( 'wpIgnoreAntiSpoof' ),
+ 'checkbox', 'antispoof-ignore' );
+ }
+ return true;
+ }
+
+ /**
+ * On new account creation, record the username's thing-bob.
+ * (Called after a user account is created)
+ *
+ * @param $user User
+ * @return bool
+ */
+ public static function asAddNewAccountHook( $user ) {
+ $spoof = new SpoofUser( $user->getName() );
+ $spoof->record();
+ return true;
+ }
+
+ /**
+ * On rename, remove the old entry and add the new
+ * (After a sucessful user rename)
+ *
+ * @param $uid
+ * @param $oldName string
+ * @param $newName string
+ * @return bool
+ */
+ public static function asAddRenameUserHook( $uid, $oldName, $newName ) {
+ $spoof = new SpoofUser( $newName );
+ $spoof->update( $oldName );
+ return true;
+ }
+
+ public static function asDeleteAccount( User &$oldUser ) {
+ $spoof = new SpoofUser( $oldUser->getName() );
+ $spoof->remove();
+ return true;
+ }
+
+ /**
+ * Register tests
+ *
+ * @param array $files
+ * @return bool
+ */
+ public static function asUnitTestsList( array &$files ) {
+ // @codeCoverageIgnoreStart
+ $directoryIterator = new RecursiveDirectoryIterator( __DIR__ . '/tests/' );
+
+ /**
+ * @var SplFileInfo $fileInfo
+ */
+ $ourFiles = array();
+ foreach ( new RecursiveIteratorIterator( $directoryIterator ) as $fileInfo ) {
+ if ( substr( $fileInfo->getFilename(), -8 ) === 'Test.php' ) {
+ $ourFiles[] = $fileInfo->getPathname();
+ }
+ }
+
+ $files = array_merge( $files, $ourFiles );
+ return true;
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * @param ApiBase $module
+ * @param array $params
+ * @return bool
+ */
+ public static function onAPIGetAllowedParams( &$module, &$params ) {
+ if ( $module instanceof ApiCreateAccount ) {
+ $params['ignoreantispoof'] = array(
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DFLT => false
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * Pass API parameter on to the login form when using
+ * API account creation.
+ *
+ * @param ApiBase $apiModule
+ * @param LoginForm $loginForm
+ * @return hook return value
+ */
+ public static function addNewAccountApiForm( $apiModule, $loginForm ) {
+ global $wgRequest;
+ $main = $apiModule->getMain();
+
+ if ( $main->getVal( 'ignoreantispoof' ) !== null ) {
+ $wgRequest->setVal( 'wpIgnoreAntiSpoof', '1' );
+
+ // Suppress "unrecognized parameter" warning:
+ $main->getVal( 'wpIgnoreAntiSpoof' );
+ }
+
+ return true;
+ }
+}
diff --git a/AntiSpoof/AntiSpoof_body.php b/AntiSpoof/AntiSpoof_body.php
new file mode 100644
index 00000000..50b77062
--- /dev/null
+++ b/AntiSpoof/AntiSpoof_body.php
@@ -0,0 +1,426 @@
+<?php
+# AntiSpoof.php
+# Username spoofing prevention for MediaWiki
+# Version 0.04
+
+# Copyright (C) Neil Harris 2006
+# Python->PHP conversion by Brion Vibber <brion@pobox.com>
+
+# 2006-06-30 Handles non-CJK scripts as per UTR #39 + my extensions
+# 2006-07-01 Now handles Simplified <-> Traditional Chinese rules, as
+# per JET Guidelines for Internationalized Domain Names,
+# and the ICANN language registry values for .cn
+# 2006-09-14 Now handles 'rn' etc better, and uses stdin for input
+# 2006-09-18 Added exception handling for nasty cases, eg BiDi violations
+# 2006-09-19 Converted to PHP for easier integration into a MW extension
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+class AntiSpoof {
+ # Define script tag codes for various Unicode codepoint ranges
+ # If it does not have a code here, it does not have a script assignment
+ # NB: Braille is not in this list since it is a transliteration system, not a script;
+ # this does not disadvantage blind people, who will use Braille input/output methods
+ # and not raw Braille...
+ # NB: Middle dot is included in SCRIPT_LATIN for use in Catalan
+ # NB: All scripts described by the Unicode Consortium as "Other Scripts" or "Ancient Scripts"
+ # are commented out: these are either not in modern use, or only used for specialized
+ # religious purposes, or only of literary interest
+ private static $script_ranges = array(
+ array( 0x0020, 0x002F, "SCRIPT_ASCII_PUNCTUATION" ), # ASCII Punctuation 1, Hyphen, ASCII Punctuation 2
+ array( 0x0030, 0x0039, "SCRIPT_ASCII_DIGITS" ), # ASCII Digits
+ array( 0x003A, 0x0040, "SCRIPT_ASCII_PUNCTUATION" ), # Colon, ASCII Punctuation 3
+ array( 0x0041, 0x005A, "SCRIPT_LATIN" ), # ASCII Uppercase
+ array( 0x005B, 0x0060, "SCRIPT_ASCII_PUNCTUATION" ), # ASCII Punctuation 4, Underscore, ASCII Punctuation 5
+ array( 0x0061, 0x007A, "SCRIPT_LATIN" ), # ASCII Lowercase
+ array( 0x007B, 0x007E, "SCRIPT_ASCII_PUNCTUATION" ), # ASCII Punctuation 5
+ array( 0x00B7, 0x00B7, "SCRIPT_LATIN" ), # Middle Dot
+ array( 0x00C0, 0x00D6, "SCRIPT_LATIN" ), # Latin-1 Letters 1
+ array( 0x00D8, 0x00F6, "SCRIPT_LATIN" ), # Latin-1 Letters 2
+ array( 0x00F8, 0x02AF, "SCRIPT_LATIN" ), # Latin-1 Letters 3, Latin Extended-A, Latin Extended-B, IPA Extensions
+ array( 0x0300, 0x036F, "SCRIPT_COMBINING_MARKS" ), # Combining Diacritical Marks
+ array( 0x0370, 0x03E1, "SCRIPT_GREEK" ), # Greek and Coptic (Greek)
+ array( 0x03E2, 0x03EF, "SCRIPT_COPTIC_EXTRAS" ), # Greek and Coptic (Coptic-unique)
+ array( 0x03F0, 0x03FF, "SCRIPT_GREEK" ), # Greek and Coptic (Greek)
+ array( 0x0400, 0x052F, "SCRIPT_CYRILLIC" ), # Cyrillic, Cyrillic Supplement
+ array( 0x0530, 0x058F, "SCRIPT_ARMENIAN" ), # Armenian
+ array( 0x0590, 0x05FF, "SCRIPT_HEBREW" ), # Hebrew
+ array( 0x0600, 0x06FF, "SCRIPT_ARABIC" ), # Arabic
+ array( 0x0700, 0x074F, "SCRIPT_SYRIAC" ), # Syriac
+ array( 0x0750, 0x077F, "SCRIPT_ARABIC" ), # Arabic Supplement
+ array( 0x0780, 0x07BF, "SCRIPT_THAANA" ), # Thaana
+ array( 0x0900, 0x097F, "SCRIPT_DEVANAGARI" ), # Devanagari
+ array( 0x0980, 0x09FF, "SCRIPT_BENGALI" ), # Bengali
+ array( 0x0A00, 0x0A7F, "SCRIPT_GURMUKHI" ), # Gurmukhi
+ array( 0x0A80, 0x0AFF, "SCRIPT_GUJARATI" ), # Gujarati
+ array( 0x0B00, 0x0B7F, "SCRIPT_ORIYA" ), # Oriya
+ array( 0x0B80, 0x0BFF, "SCRIPT_TAMIL" ), # Tamil
+ array( 0x0C00, 0x0C7F, "SCRIPT_TELUGU" ), # Telugu
+ array( 0x0C80, 0x0CFF, "SCRIPT_KANNADA" ), # Kannada
+ array( 0x0D00, 0x0D7F, "SCRIPT_MALAYALAM" ), # Malayalam
+ array( 0x0D80, 0x0DFF, "SCRIPT_SINHALA" ), # Sinhala
+ array( 0x0E00, 0x0E7F, "SCRIPT_THAI" ), # Thai
+ array( 0x0E80, 0x0EFF, "SCRIPT_LAO" ), # Lao
+ array( 0x0F00, 0x0FFF, "SCRIPT_TIBETAN" ), # Tibetan
+ array( 0x1000, 0x109F, "SCRIPT_MYANMAR" ), # Myanmar
+ array( 0x10A0, 0x10FF, "SCRIPT_GEORGIAN" ), # Georgian
+ array( 0x1100, 0x11FF, "SCRIPT_HANGUL" ), # Hangul Jamo
+ array( 0x1200, 0x139F, "SCRIPT_ETHIOPIC" ), # Ethiopic, Ethiopic Supplement
+ array( 0x13A0, 0x13FF, "SCRIPT_CHEROKEE" ), # Cherokee
+ array( 0x1400, 0x167F, "SCRIPT_CANADIAN_ABORIGINAL" ), # Unified Canadian Aboriginal Syllabics
+ # array( 0x1680, 0x169F, "SCRIPT_OGHAM" ), # Ogham
+ # array( 0x16A0, 0x16FF, "SCRIPT_RUNIC" ), # Runic
+ array( 0x1700, 0x171F, "SCRIPT_TAGALOG" ), # Tagalog
+ array( 0x1720, 0x173F, "SCRIPT_HANUNOO" ), # Hanunoo
+ array( 0x1740, 0x175F, "SCRIPT_BUHID" ), # Buhid
+ array( 0x1760, 0x177F, "SCRIPT_TAGBANWA" ), # Tagbanwa
+ array( 0x1780, 0x17FF, "SCRIPT_KHMER" ), # Khmer
+ array( 0x1800, 0x18AF, "SCRIPT_MONGOLIAN" ), # Mongolian
+ array( 0x1900, 0x194F, "SCRIPT_LIMBU" ), # Limbu
+ array( 0x1950, 0x197F, "SCRIPT_TAI_LE" ), # Tai Le
+ array( 0x1980, 0x19DF, "SCRIPT_NEW_TAI_LUE" ), # New Tai Lue
+ array( 0x1A00, 0x1A1F, "SCRIPT_BUGINESE" ), # Buginese
+ array( 0x1E00, 0x1EFF, "SCRIPT_LATIN" ), # Latin Extended Additional
+ array( 0x1F00, 0x1FFF, "SCRIPT_GREEK" ), # Greek Extended
+ # array( 0x2C00, 0x2C5F, "SCRIPT_GLAGOLITIC" ), # Glagolitic
+ array( 0x2C80, 0x2CFF, "SCRIPT_COPTIC" ), # Coptic
+ array( 0x2D00, 0x2D2F, "SCRIPT_GEORGIAN" ), # Georgian Supplement
+ array( 0x2D30, 0x2D7F, "SCRIPT_TIFINAGH" ), # Tifinagh
+ array( 0x2D80, 0x2DDF, "SCRIPT_ETHIOPIC" ), # Ethiopic Extended
+ array( 0x2E80, 0x2FDF, "SCRIPT_DEPRECATED" ), # CJK Radicals Supplement, Kangxi Radicals
+ array( 0x3040, 0x309F, "SCRIPT_HIRAGANA" ), # Hiragana
+ array( 0x30A0, 0x30FF, "SCRIPT_KATAKANA" ), # Katakana
+ array( 0x3100, 0x312F, "SCRIPT_BOPOMOFO" ), # Bopomofo
+ array( 0x3130, 0x318F, "SCRIPT_HANGUL" ), # Hangul Compatibility Jamo
+ array( 0x31A0, 0x31BF, "SCRIPT_BOPOMOFO" ), # Bopomofo Extended
+ array( 0x3400, 0x4DBF, "SCRIPT_HAN" ), # CJK Unified Ideographs Extension A
+ array( 0x4E00, 0x9FFF, "SCRIPT_HAN" ), # CJK Unified Ideographs
+ array( 0xA000, 0xA4CF, "SCRIPT_YI" ), # Yi Syllables, Yi Radicals
+ array( 0xA800, 0xA82F, "SCRIPT_SYLOTI_NAGRI" ), # Syloti Nagri
+ array( 0xAC00, 0xD7AF, "SCRIPT_HANGUL" ), # Hangul Syllables
+ array( 0xF900, 0xFAFF, "SCRIPT_DEPRECATED" ), # CJK Compatibility Ideographs
+ # array( 0x10000, 0x100FF, "SCRIPT_LINEAR_B" ), # Linear B Syllabary, Linear B Ideograms
+ # array( 0x10140, 0x1018F, "SCRIPT_GREEK" ), # Ancient Greek Numbers
+ # array( 0x10300, 0x1032F, "SCRIPT_OLD_ITALIC" ), # Old Italic
+ array( 0x10330, 0x1034F, "SCRIPT_GOTHIC" ), # Gothic
+ # array( 0x10380, 0x1039F, "SCRIPT_UGARITIC" ), # Ugaritic
+ # array( 0x103A0, 0x103DF, "SCRIPT_OLD_PERSIAN" ), # Old Persian
+ # array( 0x10400, 0x1044F, "SCRIPT_DESERET" ), # Deseret
+ # array( 0x10450, 0x1047F, "SCRIPT_SHAVIAN" ), # Shavian
+ # array( 0x10480, 0x104AF, "SCRIPT_OSMANYA" ), # Osmanya
+ # array( 0x10800, 0x1083F, "SCRIPT_CYPRIOT" ), # Cypriot Syllabary
+ array( 0x10A00, 0x10A5F, "SCRIPT_KHAROSHTHI" ), # Kharoshthi
+ array( 0x20000, 0x2A6DF, "SCRIPT_HAN" ), # CJK Unified Ideographs Extension B
+ array( 0x2F800, 0x2FA1F, "SCRIPT_DEPRECATED" ) # CJK Compatibility Ideographs Supplement
+ );
+
+ # Equivalence sets
+ private static $equivset = null;
+
+ static function initEquivSet() {
+ if ( is_null( self::$equivset ) ) {
+ self::$equivset = unserialize( file_get_contents(
+ __DIR__ . '/equivset.ser' ) );
+ }
+ }
+
+ /**
+ * @param $ch
+ * @return string
+ */
+ private static function getScriptCode( $ch ) {
+ # Linear search: binary chop would be faster...
+ foreach ( self::$script_ranges as $range ) {
+ if ( $ch >= $range[0] && $ch <= $range[1] ) {
+ return $range[2];
+ }
+ }
+ # Otherwise...
+ return "SCRIPT_UNASSIGNED";
+ }
+
+ /**
+ * From the name of a script, get a script descriptor, if valid,
+ * otherwise return None
+ *
+ * @param $name
+ * @return null|string
+ */
+ private static function getScriptTag( $name ) {
+ $name = "SCRIPT_" . strtoupper( trim( $name ) );
+ # Linear search
+ foreach ( self::$script_ranges as $range ) {
+ if ( $name == $range[2] ) {
+ return $range[2];
+ }
+ }
+ # Otherwise...
+ return null;
+ }
+
+ /**
+ * @param $aList array
+ * @param $bList array
+ * @return bool
+ */
+ private static function isSubsetOf( $aList, $bList ) {
+ return count( array_diff( $aList, $bList ) ) == 0;
+ }
+
+ /**
+ * Is this an allowed script mixture?
+ *
+ * @param $scriptList
+ * @return bool
+ */
+ private static function isAllowedScriptCombination( $scriptList ) {
+ $allowedScriptCombinations = array(
+ array( "SCRIPT_COPTIC", "SCRIPT_COPTIC_EXTRAS" ), # Coptic, using old Greek chars
+ array( "SCRIPT_GREEK", "SCRIPT_COPTIC_EXTRAS" ), # Coptic, using new Coptic chars
+ array( "SCRIPT_HAN", "SCRIPT_BOPOMOFO" ), # Chinese
+ array( "SCRIPT_HAN", "SCRIPT_HANGUL" ), # Korean
+ array( "SCRIPT_HAN", "SCRIPT_KATAKANA", "SCRIPT_HIRAGANA" ) # Japanese
+ );
+ foreach ( $allowedScriptCombinations as $allowedCombo ) {
+ if ( self::isSubsetOf( $scriptList, $allowedCombo ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Convert string into array of Unicode code points as integers
+ * @param $str
+ * @return array
+ */
+ public static function stringToList( $str ) {
+ $ar = array();
+ if ( !preg_match_all( '/./us', $str, $ar ) ) {
+ return array();
+ }
+ $out = array();
+ foreach ( $ar[0] as $char ) {
+ $out[] = utf8ToCodepoint( $char );
+ }
+ return $out;
+ }
+
+ /**
+ * @param $list array
+ * @return string
+ */
+ public static function listToString( $list ) {
+ $out = '';
+ foreach ( $list as $cp ) {
+ $out .= codepointToUtf8( $cp );
+ }
+ return $out;
+ }
+
+ /**
+ * @param $a_list array
+ * @return string
+ */
+ private static function hardjoin( $a_list ) {
+ return implode( '', $a_list );
+ }
+
+ /**
+ * @param $testName
+ * @return array
+ */
+ public static function equivString( $testName ) {
+ $out = array();
+ self::initEquivSet();
+ foreach ( $testName as $codepoint ) {
+ if ( isset( self::$equivset[$codepoint] ) ) {
+ $out[] = self::$equivset[$codepoint];
+ } else {
+ $out[] = $codepoint;
+ }
+ }
+ return $out;
+ }
+
+ /**
+ * @param $text
+ * @param $pair
+ * @param $result
+ * @return array
+ */
+ private static function mergePairs( $text, $pair, $result ) {
+ $out = array();
+ for ( $i = 0; $i < count( $text ); $i++ ) {
+ if ( $text[$i] == $pair[0] && @$text[$i + 1] == $pair[1] ) {
+ $out[] = $result[0];
+ $i++;
+ } else {
+ $out[] = $text[$i];
+ }
+ }
+ return $out;
+ }
+
+ /**
+ * @param $text
+ * @param $script
+ * @return array
+ */
+ private static function stripScript( $text, $script ) {
+ $scripts = array_map( array( 'AntiSpoof', 'getScriptCode' ), $text );
+ $out = array();
+ foreach ( $text as $index => $char ) {
+ if ( $scripts[$index] !== $script ) {
+ $out[] = $char;
+ }
+ }
+ return $out;
+ }
+
+ /*
+ * Helper function for checkUnicodeString: Return an error on a bad character.
+ * @todo I would like to show Unicode character name, but it is not clear how to get it.
+ * @param $msgId -- string, message identifier.
+ * @param $point -- number, codepoint of the bad character.
+ * @return Formatted error message.
+ */
+ private static function badCharErr( $msgId, $point ) {
+ $symbol = codepointToUtf8( $point );
+ // Combining marks are combined with the previous character. If abusing character is a
+ // combining mark, prepend it with space to show them correctly.
+ if ( self::getScriptCode( $point ) == "SCRIPT_COMBINING_MARKS" ) {
+ $symbol = ' ' . $symbol;
+ }
+ $code = sprintf( 'U+%04X', $point );
+ if ( preg_match( '/\A\p{C}\z/u', $symbol ) ) {
+ $char = wfMessage( 'antispoof-bad-char-non-printable', $code )->text();
+ } else {
+ $char = wfMessage( 'antispoof-bad-char', $symbol, $code )->text();
+ }
+ return array( "ERROR", wfMessage( $msgId, $char )->text() );
+ }
+
+ /**
+ * TODO: does too much in one routine, refactor...
+ * @param $testName
+ * @return array
+ */
+ public static function checkUnicodeString( $testName ) {
+ global $wgAntiSpoofBlacklist;
+
+ # Start with some sanity checking
+ if ( !is_array( $wgAntiSpoofBlacklist ) ) {
+ throw new MWException( '$wgAntiSpoofBlacklist should be an array!' );
+ }
+ if ( !is_string( $testName ) ) {
+ return array( "ERROR", wfMessage( 'antispoof-badtype' )->text() );
+ }
+
+ if ( strlen( $testName ) == 0 ) {
+ return array( "ERROR", wfMessage( 'antispoof-empty' )->text() );
+ }
+
+ foreach ( self::stringToList( $testName ) as $char ) {
+ if ( in_array( $char, $wgAntiSpoofBlacklist ) ) {
+ return self::badCharErr( 'antispoof-blacklisted', $char );
+ }
+ }
+
+ # Perform Unicode _compatibility_ decomposition
+ $testName = UtfNormal::toNFKD( $testName );
+ $testChars = self::stringToList( $testName );
+
+ # Be paranoid: check again, just in case Unicode normalization code changes...
+ foreach ( $testChars as $char ) {
+ if ( in_array( $char, $wgAntiSpoofBlacklist ) ) {
+ return self::badCharErr( 'antispoof-blacklisted', $char );
+ }
+ }
+
+ # Check for this: should not happen in any valid Unicode string
+ if ( self::getScriptCode( $testChars[0] ) == "SCRIPT_COMBINING_MARKS" ) {
+ return self::badCharErr( 'antispoof-combining', $testChars[0] );
+ }
+
+ # Strip all combining characters in order to crudely strip accents
+ # Note: NFKD normalization should have decomposed all accented chars earlier
+ $testChars = self::stripScript( $testChars, "SCRIPT_COMBINING_MARKS" );
+
+ $testScripts = array_map( array( 'AntiSpoof', 'getScriptCode' ), $testChars );
+ $unassigned = array_search( "SCRIPT_UNASSIGNED", $testScripts );
+ if ( $unassigned !== False ) {
+ return self::badCharErr( 'antispoof-unassigned', $testChars[$unassigned] );
+ }
+ $deprecated = array_search( "SCRIPT_DEPRECATED", $testScripts );
+ if ( $deprecated !== False ) {
+ return self::badCharErr( 'antispoof-deprecated', $testChars[$deprecated] );
+ }
+ $testScripts = array_unique( $testScripts );
+
+ # We don't mind ASCII punctuation or digits
+ $testScripts = array_diff( $testScripts,
+ array( "SCRIPT_ASCII_PUNCTUATION", "SCRIPT_ASCII_DIGITS" ) );
+
+ if ( !$testScripts ) {
+ return array( "ERROR", wfMessage( 'antispoof-noletters' )->text() );
+ }
+
+ if ( count( $testScripts ) > 1 && !self::isAllowedScriptCombination( $testScripts ) ) {
+ return array( "ERROR", wfMessage( 'antispoof-mixedscripts' )->text() );
+ }
+
+ # At this point, we should probably check for BiDi violations if they aren't
+ # caught above...
+
+ # Replace characters in confusables set with equivalence chars
+ $testChars = self::equivString( $testChars );
+
+ # Do very simple sequence processing: "vv" -> "w", "rn" -> "m"...
+ # Not exhaustive, but ups the ante...
+ # Do this _after_ canonicalization: looks weird, but needed for consistency
+ $testChars = self::mergePairs( $testChars,
+ self::equivString( self::stringToList( "VV" ) ),
+ self::equivString( self::stringToList( "W" ) ) );
+ $testChars = self::mergePairs( $testChars,
+ self::equivString( self::stringToList( "RN" ) ),
+ self::equivString( self::stringToList( "M" ) ) );
+
+ # Squeeze out all punctuation chars
+ # TODO: almost the same code occurs twice, refactor into own routine
+ $testChars = self::stripScript( $testChars, "SCRIPT_ASCII_PUNCTUATION" );
+
+ $testName = self::listToString( $testChars );
+
+ # Remove all remaining spaces, just in case any have snuck through...
+ $testName = self::hardjoin( explode( " ", $testName ) );
+
+ # Reduce repeated char sequences to single character
+ # BUG: TODO: implement this
+
+ if ( strlen( $testName ) < 1 ) {
+ return array( "ERROR", wfMessage( 'antispoof-tooshort' )->text() );
+ }
+
+ # Don't ASCIIfy: we assume we are UTF-8 capable on output
+
+ # Prepend version string, for futureproofing if this algorithm changes
+ $testName = "v2:" . $testName;
+
+ # And return the canonical version of the name
+ return array( "OK", $testName );
+ }
+}
diff --git a/AntiSpoof/COPYING b/AntiSpoof/COPYING
new file mode 100644
index 00000000..d159169d
--- /dev/null
+++ b/AntiSpoof/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) 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; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, 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 executable. However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+ 5. 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 Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+ 7. 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 Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. 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 program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/AntiSpoof/Gruntfile.js b/AntiSpoof/Gruntfile.js
new file mode 100644
index 00000000..ca899ded
--- /dev/null
+++ b/AntiSpoof/Gruntfile.js
@@ -0,0 +1,18 @@
+/*!
+ * Grunt file
+ *
+ * @package AntiSpoof
+ */
+
+/*jshint node:true */
+module.exports = function ( grunt ) {
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.initConfig( {
+ banana: {
+ all: ["i18n/"]
+ }
+ } );
+
+ grunt.registerTask( 'test', [ 'banana' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/AntiSpoof/SpoofUser.php b/AntiSpoof/SpoofUser.php
new file mode 100644
index 00000000..e39430d5
--- /dev/null
+++ b/AntiSpoof/SpoofUser.php
@@ -0,0 +1,179 @@
+<?php
+
+class SpoofUser {
+
+ /**
+ * @param $name string
+ */
+ public function __construct( $name ) {
+ $this->mName = strval( $name );
+ list( $ok, $normalized ) = AntiSpoof::checkUnicodeString( $this->mName );
+ $this->mLegal = ( $ok == 'OK' );
+ if ( $this->mLegal ) {
+ $this->mNormalized = $normalized;
+ $this->mError = null;
+ } else {
+ $this->mNormalized = null;
+ $this->mError = $normalized;
+ }
+ }
+
+ /**
+ * Does the username pass Unicode legality and script-mixing checks?
+ * @return bool
+ */
+ public function isLegal() {
+ return $this->mLegal;
+ }
+
+ /**
+ * Describe the error.
+ * @return null|string
+ */
+ public function getError() {
+ return $this->mError;
+ }
+
+ /**
+ * Get the normalized key form
+ * @return string|null
+ */
+ public function getNormalized() {
+ return $this->mNormalized;
+ }
+
+ /**
+ * @return string
+ */
+ protected function getTableName() {
+ return 'user';
+ }
+
+ /**
+ * @return string
+ */
+ protected function getUserColumn() {
+ return 'user_name';
+ }
+
+ /**
+ * Does the username pass Unicode legality and script-mixing checks?
+ *
+ * @return array empty if no conflict, or array containing conflicting usernames
+ */
+ public function getConflicts() {
+ $dbr = $this->getDBSlave();
+
+ // Join against the user table to ensure that we skip stray
+ // entries left after an account is renamed or otherwise munged.
+ $spoofedUsers = $dbr->select(
+ array( 'spoofuser', $this->getTableName() ),
+ array( 'su_name' ), // Same thing due to the join. Saves extra variableness
+ array(
+ 'su_normalized' => $this->mNormalized,
+ 'su_name = ' . $this->getUserColumn(),
+ ),
+ __METHOD__,
+ array(
+ 'LIMIT' => 5
+ ) );
+
+ $spoofs = array();
+ foreach ( $spoofedUsers as $row ) {
+ array_push( $spoofs, $row->su_name );
+ }
+ return $spoofs;
+ }
+
+ /**
+ * Record the username's normalized form into the database
+ * for later comparison of future names...
+ * @return bool
+ */
+ public function record() {
+ return self::batchRecord( $this->getDBMaster(), array( $this ) );
+ }
+
+ /**
+ * @return array
+ */
+ private function insertFields() {
+ return array(
+ 'su_name' => $this->mName,
+ 'su_normalized' => $this->mNormalized,
+ 'su_legal' => $this->mLegal ? 1 : 0,
+ 'su_error' => $this->mError,
+ );
+ }
+
+ /**
+ * Insert a batch of spoof normalization records into the database.
+ * @param $dbw DatabaseBase
+ * @param $items array of SpoofUser
+ * @return bool
+ */
+ public static function batchRecord( $dbw, $items ) {
+ if ( !count( $items ) ) {
+ return false;
+ }
+ $fields = array();
+ /**
+ * @var $item SpoofUser
+ */
+ foreach ( $items as $item ) {
+ $fields[] = $item->insertFields();
+ }
+ $dbw->replace(
+ 'spoofuser',
+ array( 'su_name' ),
+ $fields,
+ __METHOD__ );
+ return true;
+ }
+
+ /**
+ * @param $oldName
+ */
+ public function update( $oldName ) {
+ $that = $this;
+ $method = __METHOD__;
+ $dbw = $this->getDBMaster();
+ // Avoid user rename triggered deadlocks
+ $dbw->onTransactionPreCommitOrIdle(
+ function() use ( $dbw, $that, $method, $oldName ) {
+ if( $that->record() ) {
+ $dbw->delete(
+ 'spoofuser',
+ array( 'su_name' => $oldName ),
+ $method
+ );
+ }
+ }
+ );
+ }
+
+ /**
+ * Remove a user from the spoofuser table
+ */
+ public function remove() {
+ $this->getDBMaster()->delete(
+ 'spoofuser',
+ array( 'su_name' => $this->mName ),
+ __METHOD__
+ );
+ }
+
+ /**
+ * @return DatabaseBase
+ */
+ protected function getDBSlave() {
+ return wfGetDB( DB_SLAVE );
+ }
+
+ /**
+ * @return DatabaseBase
+ */
+ protected function getDBMaster() {
+ return wfGetDB( DB_MASTER );
+ }
+}
diff --git a/AntiSpoof/api/ApiAntiSpoof.php b/AntiSpoof/api/ApiAntiSpoof.php
new file mode 100644
index 00000000..b0e3b920
--- /dev/null
+++ b/AntiSpoof/api/ApiAntiSpoof.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * API module to check a username against the AntiSpoof normalisation checks
+ *
+ * @ingroup API
+ * @ingroup Extensions
+ */
+class ApiAntiSpoof extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $res = $this->getResult();
+ $res->addValue( null, $this->getModuleName(), array( 'username' => $params['username'] ) );
+
+ $spoof = new SpoofUser( $params['username'] );
+
+ if ( $spoof->isLegal() ) {
+ $normalized = $spoof->getNormalized();
+ $res->addValue( null, $this->getModuleName(), array( 'normalised' => $normalized ) );
+
+ $unfilteredConflicts = $spoof->getConflicts();
+ if ( empty( $unfilteredConflicts ) ) {
+ $res->addValue( null, $this->getModuleName(), array( 'result' => 'pass' ) );
+ } else {
+ $hasSuppressed = false;
+ $conflicts = array();
+ foreach ( $unfilteredConflicts as $conflict )
+ {
+ if ( !User::newFromName( $conflict )->isHidden() ) {
+ $conflicts[] = $conflict;
+ } else {
+ $hasSuppressed = true;
+ }
+ }
+
+ if ( $hasSuppressed ) {
+ $res->addValue( null, $this->getModuleName(), array( 'suppressed' => 'true' ) );
+ }
+
+ $res->addValue( null, $this->getModuleName(), array( 'result' => 'conflict' ) );
+
+ $res->setIndexedTagName( $conflicts, 'u' );
+ $res->addValue( array( $this->getModuleName() ), 'users', $conflicts );
+ }
+ } else {
+ $error = $spoof->getError();
+ $res->addValue( 'antispoof', 'result', 'error' );
+ $res->addValue( 'antispoof', 'error', $error );
+ }
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'username' => array(
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ );
+ }
+
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
+ public function getParamDescription() {
+ return array(
+ 'username' => 'The username to check against AntiSpoof',
+ );
+ }
+
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
+ public function getDescription() {
+ return 'Check a username against AntiSpoof\'s normalisation checks.';
+ }
+
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
+ public function getExamples() {
+ return array(
+ 'api.php?action=antispoof&username=Foo',
+ );
+ }
+
+ /**
+ * @see ApiBase::getExamplesMessages()
+ */
+ protected function getExamplesMessages() {
+ return array(
+ 'action=antispoof&username=Foo'
+ => 'apihelp-antispoof-example-1',
+ );
+ }
+}
diff --git a/AntiSpoof/composer.json b/AntiSpoof/composer.json
new file mode 100644
index 00000000..cac88aad
--- /dev/null
+++ b/AntiSpoof/composer.json
@@ -0,0 +1,11 @@
+{
+ "name": "mediawiki/anti-spoof",
+ "type": "mediawiki-extension",
+ "description": "The AntiSpoof extension is an extension for preventing confusable usernames from being created. It blocks the creation of accounts with mixed-script, confusing and similar usernames.",
+ "homepage": "https://www.mediawiki.org/wiki/Extension:AntiSpoof",
+ "license" : "GPL-2.0+",
+
+ "require": {
+ "composer/installers" : "*"
+ }
+}
diff --git a/AntiSpoof/composer.lock b/AntiSpoof/composer.lock
new file mode 100644
index 00000000..45561f95
--- /dev/null
+++ b/AntiSpoof/composer.lock
@@ -0,0 +1,116 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "35b10af76d12abc2f68b64502f18e328",
+ "packages": [
+ {
+ "name": "composer/installers",
+ "version": "v1.0.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/installers.git",
+ "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/installers/zipball/bd9b14f094c89c8b5804a4e41edeb7853bb85046",
+ "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "1.0.0"
+ },
+ "replace": {
+ "roundcube/plugin-installer": "*",
+ "shama/baton": "*"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "phpunit/phpunit": "4.1.*"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Composer\\Installers\\Plugin",
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Composer\\Installers\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kyle Robinson Young",
+ "email": "kyle@dontkry.com",
+ "homepage": "https://github.com/shama"
+ }
+ ],
+ "description": "A multi-framework Composer library installer",
+ "homepage": "http://composer.github.com/installers/",
+ "keywords": [
+ "Craft",
+ "Dolibarr",
+ "Hurad",
+ "MODX Evo",
+ "OXID",
+ "SMF",
+ "Thelia",
+ "WolfCMS",
+ "agl",
+ "aimeos",
+ "annotatecms",
+ "bitrix",
+ "cakephp",
+ "chef",
+ "codeigniter",
+ "concrete5",
+ "croogo",
+ "dokuwiki",
+ "drupal",
+ "elgg",
+ "fuelphp",
+ "grav",
+ "installer",
+ "joomla",
+ "kohana",
+ "laravel",
+ "lithium",
+ "magento",
+ "mako",
+ "mediawiki",
+ "modulework",
+ "moodle",
+ "phpbb",
+ "piwik",
+ "ppi",
+ "puppet",
+ "roundcube",
+ "shopware",
+ "silverstripe",
+ "symfony",
+ "typo3",
+ "wordpress",
+ "zend",
+ "zikula"
+ ],
+ "time": "2015-10-29 23:28:48"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": []
+}
diff --git a/AntiSpoof/equivset.php b/AntiSpoof/equivset.php
new file mode 100644
index 00000000..937ed308
--- /dev/null
+++ b/AntiSpoof/equivset.php
@@ -0,0 +1,9163 @@
+<?php
+# This file is generated by generateEquivset.php
+# It contains a map of characters, encoded in UTF-8, such that running strtr()
+# on a string with this map will cause confusable characters to be reduced to
+# a canonical representation. The same array is also available in serialized
+# form, in equivset.ser.
+$equivset = array (
+ 'E' => 'E',
+ 3 => 'E',
+ 'A' => 'A',
+ 4 => 'A',
+ 'G' => 'G',
+ 6 => 'G',
+ 1 => '1',
+ 'I' => '1',
+ 'L' => '1',
+ 0 => '0',
+ 'O' => '0',
+ 5 => '5',
+ 'S' => '5',
+ 'a' => 'A',
+ 'B' => 'B',
+ 'b' => 'B',
+ 'C' => 'C',
+ 'c' => 'C',
+ 'D' => 'D',
+ 'd' => 'D',
+ 'e' => 'E',
+ 'F' => 'F',
+ 'f' => 'F',
+ 'g' => 'G',
+ 'H' => 'H',
+ 'h' => 'H',
+ 'i' => '1',
+ 'J' => 'J',
+ 'j' => 'J',
+ 'K' => 'K',
+ 'k' => 'K',
+ 'l' => '1',
+ 'M' => 'M',
+ 'm' => 'M',
+ 'N' => 'N',
+ 'n' => 'N',
+ 'o' => '0',
+ 'P' => 'P',
+ 'p' => 'P',
+ 'Q' => 'Q',
+ 'q' => 'Q',
+ 'R' => 'R',
+ 'r' => 'R',
+ 's' => '5',
+ 'T' => 'T',
+ 't' => 'T',
+ 'U' => 'U',
+ 'u' => 'U',
+ 'V' => 'V',
+ 'v' => 'V',
+ 'W' => 'W',
+ 'w' => 'W',
+ 'X' => 'X',
+ 'x' => 'X',
+ 'Y' => 'Y',
+ 'y' => 'Y',
+ 'Z' => 'Z',
+ 'z' => 'Z',
+ '|' => '1',
+ '¢' => 'C',
+ '®' => 'R',
+ 'Ð' => 'D',
+ 'ß' => 'B',
+ 'à' => 'A',
+ 'á' => 'A',
+ 'â' => 'A',
+ 'ã' => 'A',
+ 'ä' => 'A',
+ 'å' => 'A',
+ 'Æ' => 'Æ',
+ 'æ' => 'A',
+ 'ç' => 'C',
+ 'è' => 'E',
+ 'é' => 'E',
+ 'ë' => 'E',
+ 'ð' => 'D',
+ 'ñ' => 'N',
+ 'Ø' => 'Ø',
+ 'ø' => 'Ø',
+ 'ù' => 'U',
+ 'ú' => 'U',
+ 'û' => 'U',
+ 'ü' => 'U',
+ 'ý' => 'Y',
+ 'þ' => 'P',
+ 'ÿ' => 'Y',
+ 'ā' => 'A',
+ 'ă' => 'A',
+ 'ą' => 'A',
+ 'ć' => 'C',
+ 'ĉ' => 'C',
+ 'ċ' => 'C',
+ 'č' => 'C',
+ 'ď' => 'D',
+ 'Đ' => 'D',
+ 'đ' => 'D',
+ 'ē' => 'E',
+ 'ĕ' => 'E',
+ 'ė' => 'E',
+ 'ę' => 'E',
+ 'ě' => 'E',
+ 'ĝ' => 'G',
+ 'ğ' => 'G',
+ 'ġ' => 'G',
+ 'ģ' => 'G',
+ 'ĥ' => 'H',
+ 'Ħ' => 'H',
+ 'ħ' => 'H',
+ 'ı' => '1',
+ 'IJ' => 'IJ',
+ 'ij' => 'IJ',
+ 'ķ' => 'K',
+ 'ĸ' => 'K',
+ 'Ŀ' => 'Ŀ',
+ 'ŀ' => 'Ŀ',
+ 'Ł' => '1',
+ 'ł' => '1',
+ 'ń' => 'N',
+ 'Ņ' => 'N',
+ 'ņ' => 'N',
+ 'ň' => 'N',
+ 'Œ' => 'Œ',
+ 'œ' => 'Œ',
+ 'ŕ' => 'R',
+ 'ŗ' => 'R',
+ 'ř' => 'R',
+ 'Ţ' => 'Ţ',
+ 'ţ' => 'T',
+ 'ť' => 'T',
+ 'Ŧ' => 'T',
+ 'ŧ' => 'T',
+ 'ũ' => 'U',
+ 'ū' => 'U',
+ 'ŭ' => 'U',
+ 'ů' => 'U',
+ 'ű' => 'U',
+ 'ų' => 'U',
+ 'ŵ' => 'W',
+ 'ŷ' => 'Y',
+ 'ź' => 'Z',
+ 'ż' => 'Z',
+ 'ž' => 'Z',
+ 'ƀ' => 'B',
+ 'Ɓ' => 'B',
+ 'Ƃ' => 'B',
+ 'ƃ' => 'B',
+ 'Ƅ' => 'B',
+ 'ƅ' => 'B',
+ 'Ƈ' => 'C',
+ 'ƈ' => 'C',
+ 'Ɖ' => 'D',
+ 'Ɗ' => 'D',
+ 'Ƌ' => 'D',
+ 'ƌ' => 'D',
+ 'ǝ' => 'ǝ',
+ 'Ə' => 'ǝ',
+ 'Ɛ' => 'E',
+ 'Ƒ' => 'F',
+ 'ƒ' => 'F',
+ 'Ɠ' => 'G',
+ 'Ɩ' => '1',
+ 'Ɨ' => '1',
+ 'Ƙ' => 'K',
+ 'ƙ' => 'K',
+ 'ƚ' => '1',
+ 'Ɲ' => 'N',
+ 'Ơ' => 'Ơ',
+ 'ơ' => 'Ơ',
+ 'Ƥ' => 'P',
+ 'ƥ' => 'P',
+ 'Ʀ' => 'R',
+ 2 => '2',
+ 'Ƨ' => '2',
+ 'ƨ' => '2',
+ 'ƫ' => 'T',
+ 'Ƭ' => 'T',
+ 'ƭ' => 'T',
+ 'Ʈ' => 'T',
+ 'Ʊ' => 'U',
+ 'Ʋ' => 'U',
+ 'Ƴ' => 'Y',
+ 'ƴ' => 'Y',
+ 'Ƶ' => 'Z',
+ 'ƶ' => 'Z',
+ 'Ʒ' => 'E',
+ 'Ƽ' => '5',
+ 'ƽ' => '5',
+ 'ƿ' => 'P',
+ 'ǀ' => '1',
+ '!' => '!',
+ 'ǃ' => '!',
+ 'DZ' => 'DZ',
+ 'DŽ' => 'DZ',
+ 'dz' => 'DZ',
+ 'dž' => 'dz',
+ 'LJ' => 'LJ',
+ 'lj' => 'LJ',
+ 'NJ' => 'NJ',
+ 'nj' => 'NJ',
+ 'ǔ' => 'U',
+ 'ǖ' => 'U',
+ 'ǘ' => 'U',
+ 'ǚ' => 'U',
+ 'ǜ' => 'U',
+ 'ǟ' => 'A',
+ 'ǡ' => 'A',
+ 'Ǥ' => 'G',
+ 'ǥ' => 'G',
+ 'ǧ' => 'G',
+ 'ǵ' => 'G',
+ 'Ƿ' => 'P',
+ 'ǻ' => 'A',
+ 'Ǿ' => 'Ø',
+ 'ǿ' => 'Ø',
+ 'ȁ' => 'A',
+ 'ȅ' => 'E',
+ 'ȇ' => 'E',
+ 'ȑ' => 'R',
+ 'ȓ' => 'R',
+ 'Ț' => 'T',
+ 'ț' => 'T',
+ 'Ȝ' => 'E',
+ 'ȝ' => 'E',
+ 'Ȟ' => 'H',
+ 'Ƞ' => 'N',
+ 8 => '8',
+ 'Ȣ' => '8',
+ 'ȣ' => '8',
+ 'Ȥ' => 'Z',
+ 'ȥ' => 'Z',
+ 'Ȩ' => 'E',
+ 'ȩ' => 'E',
+ 'Ȳ' => 'Y',
+ 'Ɋ' => 'Q',
+ 'ɑ' => 'A',
+ 'ɓ' => 'B',
+ 'ɖ' => 'D',
+ 'ɗ' => 'D',
+ 'ɘ' => 'ǝ',
+ 'ə' => 'E',
+ 'ɚ' => 'ǝ',
+ 'ɛ' => 'E',
+ 'ɜ' => 'E',
+ 'ɠ' => 'G',
+ 'ɡ' => 'G',
+ 'ɢ' => 'G',
+ 'ɦ' => 'H',
+ 'ɨ' => '1',
+ 'ɩ' => '1',
+ 'ɫ' => '1',
+ 'ɭ' => '1',
+ 'ɯ' => 'M',
+ 'ɱ' => 'M',
+ 'ɲ' => 'N',
+ 'ɳ' => 'N',
+ 'Ɵ' => 'Ɵ',
+ 'ɵ' => 'Ɵ',
+ 'ɼ' => 'R',
+ 'ɽ' => 'R',
+ 'ʀ' => 'R',
+ 'ʂ' => '5',
+ 'ʃ' => 'C',
+ 'ʈ' => 'T',
+ 'ʊ' => 'Y',
+ 'ʋ' => 'U',
+ 'ʐ' => 'Z',
+ 'ʒ' => 'E',
+ '?' => '?',
+ 'ʔ' => '?',
+ 'ʙ' => 'B',
+ 'ʜ' => 'H',
+ 'ʠ' => 'Q',
+ 'ʰ' => 'H',
+ 'ʱ' => 'H',
+ 'ʳ' => 'R',
+ 'ʴ' => 'R',
+ 'ʵ' => 'R',
+ 'ʶ' => 'R',
+ 'ʸ' => 'Y',
+ 'Α' => 'A',
+ 'Β' => 'B',
+ 'Γ' => 'R',
+ 'Ε' => 'E',
+ 'Ζ' => 'Z',
+ 'Η' => 'H',
+ 'Θ' => '0',
+ 'Ι' => '1',
+ 'Κ' => 'K',
+ 'Μ' => 'M',
+ 'Ν' => 'N',
+ 'Ο' => '0',
+ 'Ρ' => 'P',
+ 'Τ' => 'T',
+ 'Υ' => 'Y',
+ 'ɸ' => 'ɸ',
+ 'Φ' => 'ɸ',
+ 'Χ' => 'X',
+ 'ά' => 'A',
+ 'ή' => 'H',
+ 'α' => 'A',
+ 'β' => 'B',
+ 'Δ' => 'Δ',
+ 'δ' => 'Δ',
+ 'ε' => 'E',
+ 'η' => 'H',
+ 'θ' => 'Ɵ',
+ 'ι' => '1',
+ 'κ' => 'K',
+ 'Λ' => 'Λ',
+ 'λ' => 'Λ',
+ 'μ' => 'M',
+ 'ν' => 'N',
+ 'Ξ' => 'Ξ',
+ 'ξ' => 'Ξ',
+ 'ο' => '0',
+ 'Π' => 'Π',
+ 'π' => 'Π',
+ 'ρ' => 'P',
+ 'ς' => 'C',
+ 'τ' => 'T',
+ 'υ' => 'Y',
+ 'φ' => 'ɸ',
+ 'χ' => 'X',
+ 'Ψ' => 'Ψ',
+ 'ψ' => 'Ψ',
+ 'ω' => 'W',
+ 'ϋ' => 'Y',
+ 'ύ' => 'Y',
+ 'ϒ' => 'Y',
+ 'ϓ' => 'Y',
+ 'ϕ' => 'ɸ',
+ 'Ϝ' => 'F',
+ 'ϝ' => 'F',
+ 'Ϩ' => '2',
+ 'ϩ' => '2',
+ 'ϲ' => 'C',
+ 'ϳ' => 'J',
+ 'ϴ' => 'Ɵ',
+ 'Ϲ' => 'C',
+ 'Є' => 'E',
+ 'Ѕ' => '5',
+ 'І' => '1',
+ 'Ј' => 'J',
+ 'Ћ' => 'H',
+ 'А' => 'A',
+ 'Б' => 'G',
+ 'В' => 'B',
+ 'Г' => 'R',
+ 'Е' => 'E',
+ 'З' => 'E',
+ 'К' => 'K',
+ 'М' => 'M',
+ 'Н' => 'H',
+ 'О' => '0',
+ 'П' => 'Π',
+ 'Р' => 'P',
+ 'С' => 'C',
+ 'Т' => 'T',
+ 'У' => 'Y',
+ 'Ф' => 'ɸ',
+ 'Х' => 'X',
+ 'Ъ' => 'B',
+ 'Ь' => 'B',
+ 'а' => 'A',
+ 'б' => 'B',
+ 'в' => 'B',
+ 'г' => 'R',
+ 'е' => 'E',
+ 'Ж' => 'Ж',
+ 'ж' => 'Ж',
+ 'з' => 'E',
+ 'И' => 'И',
+ 'и' => 'И',
+ 'к' => 'K',
+ 'Л' => 'Л',
+ 'л' => 'Л',
+ 'м' => 'M',
+ 'н' => 'H',
+ 'о' => '0',
+ 'п' => 'Π',
+ 'р' => 'P',
+ 'с' => 'C',
+ 'т' => 'T',
+ 'у' => 'Y',
+ 'ф' => 'ɸ',
+ 'х' => 'X',
+ 'ц' => 'U',
+ 'ъ' => 'B',
+ 'Ы' => 'Ы',
+ 'ы' => 'Ы',
+ 'ь' => 'B',
+ 'Я' => 'Я',
+ 'я' => 'R',
+ 'є' => 'E',
+ 'ѕ' => '5',
+ 'і' => '1',
+ 'ј' => 'J',
+ 'њ' => 'H',
+ 'ћ' => 'H',
+ 'ќ' => 'K',
+ 'Ѣ' => 'B',
+ 'ѣ' => 'B',
+ 'Ѳ' => 'Ɵ',
+ 'ѳ' => 'Ɵ',
+ 'Ѵ' => 'V',
+ 'ѵ' => 'V',
+ 'Ѽ' => 'Ѽ',
+ 'ѽ' => 'Ѽ',
+ 'Ҋ' => 'И',
+ 'ҋ' => 'И',
+ 'Ҍ' => 'B',
+ 'ҍ' => 'B',
+ 'Ґ' => 'Ґ',
+ 'ґ' => 'Ґ',
+ 'Ғ' => 'F',
+ 'ғ' => 'F',
+ 'Җ' => 'Ж',
+ 'җ' => 'Ж',
+ 'Ҙ' => 'E',
+ 'ҙ' => 'E',
+ 'Қ' => 'K',
+ 'қ' => 'K',
+ 'ҝ' => 'K',
+ 'Ҟ' => 'K',
+ 'ҟ' => 'K',
+ 'ҡ' => 'K',
+ 'Ң' => 'H',
+ 'ң' => 'H',
+ 'Ҫ' => 'C',
+ 'ҫ' => 'C',
+ 'Ҭ' => 'T',
+ 'ҭ' => 'T',
+ 'Ү' => 'Y',
+ 'ү' => 'Y',
+ 'Ұ' => 'Y',
+ 'ұ' => 'Y',
+ 'Ҳ' => 'X',
+ 'ҳ' => 'X',
+ 'Ҷ' => 'Y',
+ 'ҷ' => 'Y',
+ 'Һ' => 'H',
+ 'һ' => 'H',
+ 'Ҽ' => 'Ҽ',
+ 'ҽ' => 'Ҽ',
+ 'Ҿ' => 'Ҽ',
+ 'ҿ' => 'Ҽ',
+ 'Ӏ' => '1',
+ 'ӄ' => 'K',
+ 'Ӆ' => 'Л',
+ 'ӆ' => 'Л',
+ 'Ӈ' => 'H',
+ 'ӈ' => 'H',
+ 'Ӊ' => 'H',
+ 'ӊ' => 'H',
+ 'Ӌ' => 'Y',
+ 'ӌ' => 'Y',
+ 'Ӎ' => 'M',
+ 'ӎ' => 'M',
+ 'Ӕ' => 'Æ',
+ 'ӕ' => 'Æ',
+ 'Ә' => 'ǝ',
+ 'ә' => 'ǝ',
+ 'Ӡ' => 'E',
+ 'ӡ' => 'E',
+ 'Ө' => 'Ɵ',
+ 'ө' => 'Ɵ',
+ 'Ԁ' => 'D',
+ 'ԁ' => 'D',
+ 'ԋ' => 'H',
+ 'Ԍ' => 'G',
+ 'ԍ' => 'G',
+ 'ա' => 'ա',
+ 'Ա' => 'U',
+ 'բ' => 'բ',
+ 'Բ' => 'բ',
+ 'գ' => 'Q',
+ 'Գ' => 'Q',
+ 'դ' => 'դ',
+ 'Դ' => 'դ',
+ 'ե' => 'ե',
+ 'Ե' => 'ե',
+ 'զ' => 'Q',
+ 'Զ' => 'զ',
+ 'է' => 'է',
+ 'Է' => 'է',
+ 'ը' => 'ը',
+ 'Ը' => 'ը',
+ 'թ' => 'թ',
+ 'Թ' => 'թ',
+ 'ժ' => 'ժ',
+ 'Ժ' => 'ժ',
+ 'ի' => 'ի',
+ 'Ի' => 'ի',
+ 'լ' => 'լ',
+ 'Լ' => 'լ',
+ 'խ' => 'խ',
+ 'Խ' => 'խ',
+ 'ծ' => 'ծ',
+ 'Ծ' => 'ծ',
+ 'կ' => 'կ',
+ 'Կ' => 'կ',
+ 'հ' => 'H',
+ 'Հ' => 'հ',
+ 'ձ' => 'ձ',
+ 'Ձ' => 'ձ',
+ 'ղ' => 'ղ',
+ 'Ղ' => 'ղ',
+ 'ճ' => 'ճ',
+ 'Ճ' => 'ճ',
+ 'մ' => 'մ',
+ 'Մ' => 'U',
+ 'յ' => 'J',
+ 'Յ' => 'E',
+ 'ն' => 'ն',
+ 'Ն' => 'ն',
+ 'շ' => 'շ',
+ 'Շ' => 'շ',
+ 'ո' => 'N',
+ 'Ո' => 'ո',
+ 'չ' => 'չ',
+ 'Չ' => 'չ',
+ 'պ' => 'պ',
+ 'Պ' => 'պ',
+ 'ջ' => 'ջ',
+ 'Ջ' => 'ջ',
+ 'ռ' => 'N',
+ 'Ռ' => 'ռ',
+ 'ս' => 'U',
+ 'Ս' => 'U',
+ 'վ' => 'վ',
+ 'Վ' => 'վ',
+ 'տ' => 'տ',
+ 'Տ' => 'տ',
+ 'ր' => 'ր',
+ 'Ր' => 'ր',
+ 'ց' => 'G',
+ 'Ց' => 'ց',
+ 'ւ' => 'ւ',
+ 'Ւ' => 'ւ',
+ 'փ' => 'փ',
+ 'Փ' => 'փ',
+ 'ք' => 'P',
+ 'Ք' => 'ք',
+ 'օ' => '0',
+ 'Օ' => '0',
+ 'ֆ' => 'ֆ',
+ 'Ֆ' => 'ֆ',
+ ':' => ':',
+ '։' => ':',
+ '́' => '́',
+ '֜' => '́',
+ '̊' => '̊',
+ '֯' => '̊',
+ '̇' => '̇',
+ 'ֹ' => '̇',
+ 'ׁ' => '̇',
+ 'ׂ' => '̇',
+ '׃' => ':',
+ 'ׄ' => '̇',
+ '\'' => '\'',
+ '׳' => '\'',
+ '"' => '"',
+ '״' => '"',
+ 'ع' => 'E',
+ 'ى' => 'ى',
+ 'ي' => 'ى',
+ '̓' => '̓',
+ 'ُ' => '̓',
+ '٩' => 'A',
+ '،' => '،',
+ '٬' => '،',
+ 'ٔ' => 'ٔ',
+ 'ٴ' => 'ٔ',
+ 'ڠ' => 'E',
+ 'ك' => 'ك',
+ 'ک' => 'ك',
+ 'ٹ' => 'ٹ',
+ 'ڻ' => 'ٹ',
+ 'ه' => 'ه',
+ 'ھ' => 'ه',
+ 'ہ' => 'ه',
+ 'ی' => 'ى',
+ 'ٻ' => 'ٻ',
+ 'ې' => 'ٻ',
+ 'ە' => 'ه',
+ 'ۦ' => 'ۦ',
+ 'ۧ' => 'ۦ',
+ '۟' => '۟',
+ '۬' => '۟',
+ '٠' => '٠',
+ '۰' => '٠',
+ '١' => '١',
+ '۱' => '١',
+ '٢' => '٢',
+ '۲' => '٢',
+ '٣' => '٣',
+ '۳' => '٣',
+ '٧' => '٧',
+ '۷' => '٧',
+ '٨' => '٨',
+ '۸' => '٨',
+ '۹' => 'A',
+ '.' => '.',
+ '܂' => '.',
+ '݁' => '̇',
+ 'ܼ' => 'ܼ',
+ '݂' => 'ܼ',
+ '݇' => '́',
+ 'ं' => '̇',
+ '̣' => '̣',
+ '़' => '̣',
+ '̠' => '̠',
+ '॒' => '̠',
+ '̀' => '̀',
+ '॓' => '̀',
+ '॔' => '́',
+ '०' => '0',
+ '়' => '̣',
+ '০' => '0',
+ '৪' => '8',
+ 9 => '9',
+ '৭' => '9',
+ 'ਂ' => '̇',
+ 'ঃ' => 'ঃ',
+ 'ਃ' => 'ঃ',
+ '਼' => '̣',
+ 'ॆ' => 'ॆ',
+ 'ੋ' => 'ॆ',
+ '्' => '्',
+ '੍' => '्',
+ '੦' => '0',
+ '੧' => '9',
+ '੪' => '8',
+ 'ં' => '̇',
+ '઼' => '̣',
+ 'ऽ' => 'ऽ',
+ 'ઽ' => 'ऽ',
+ 'ु' => 'ु',
+ 'ુ' => 'ु',
+ 'ू' => 'ू',
+ 'ૂ' => 'ू',
+ '્' => '्',
+ '૦' => '0',
+ '२' => '२',
+ '૨' => '२',
+ '३' => '३',
+ '૩' => '३',
+ '४' => '४',
+ '૪' => '४',
+ '८' => '८',
+ '૮' => '८',
+ 'ଃ' => '8',
+ '଼' => '̣',
+ '୦' => '0',
+ '୨' => '9',
+ 'ஂ' => '̊',
+ 'ஐ' => 'ஐ',
+ 'ஜ' => 'ஐ',
+ 'ஈ' => 'ஈ',
+ 'ர' => 'ஈ',
+ 'ா' => 'ஈ',
+ 'ன' => 'ன',
+ 'ை' => 'ன',
+ '்' => '̇',
+ 'ள' => 'ள',
+ 'ௗ' => 'ள',
+ '௦' => '0',
+ 'க' => 'க',
+ '௧' => 'க',
+ 'உ' => 'உ',
+ '௨' => 'உ',
+ 'ச' => 'ச',
+ '௪' => 'ச',
+ 'எ' => 'எ',
+ '௭' => 'எ',
+ 'அ' => 'அ',
+ '௮' => 'அ',
+ 'ய' => 'ய',
+ '௰' => 'ய',
+ '௳' => '௳',
+ '௵' => '௳',
+ 'ஷ' => 'ஷ',
+ '௸' => 'ஷ',
+ 'ం' => '0',
+ 'ః' => 'ঃ',
+ 'డ' => 'డ',
+ 'ఢ' => 'డ',
+ 'బ' => 'బ',
+ 'భ' => 'బ',
+ 'వ' => 'వ',
+ 'ష' => 'వ',
+ '౦' => '0',
+ 'ಂ' => '0',
+ 'ಃ' => 'ঃ',
+ 'అ' => 'అ',
+ 'ಅ' => 'అ',
+ 'ఆ' => 'ఆ',
+ 'ಆ' => 'ఆ',
+ 'ఇ' => 'ఇ',
+ 'ಇ' => 'ఇ',
+ 'ఒ' => 'ఒ',
+ 'ಒ' => 'ఒ',
+ 'ఓ' => 'ఓ',
+ 'ಓ' => 'ఓ',
+ 'ఔ' => 'ఔ',
+ 'ಔ' => 'ఔ',
+ 'జ' => 'జ',
+ 'ಜ' => 'జ',
+ 'ఞ' => 'ఞ',
+ 'ಞ' => 'ఞ',
+ 'ణ' => 'ణ',
+ 'ಣ' => 'ణ',
+ 'య' => 'య',
+ 'ಯ' => 'య',
+ 'ఱ' => 'ఱ',
+ 'ಱ' => 'ఱ',
+ 'ల' => 'ల',
+ 'ಲ' => 'ల',
+ '೦' => '0',
+ '౧' => '౧',
+ '೧' => '౧',
+ '౨' => '౨',
+ '೨' => '౨',
+ '౯' => '౯',
+ '೯' => '౯',
+ 'ം' => '0',
+ 'ഉ' => 'உ',
+ 'ജ' => 'ஐ',
+ 'ഠ' => '0',
+ 'ண' => 'ண',
+ 'ണ' => 'ண',
+ 'ര' => 'ര',
+ 'റ' => 'ര',
+ 'ழ' => 'ழ',
+ 'ഴ' => 'ழ',
+ 'ஶ' => 'ஶ',
+ 'ശ' => 'ஶ',
+ 'ி' => 'ி',
+ 'ി' => 'ி',
+ 'ീ' => 'ி',
+ 'ூ' => 'ூ',
+ 'ു' => 'ூ',
+ 'ൂ' => 'ூ',
+ 'ൃ' => 'ூ',
+ 'ഞ' => 'ഞ',
+ 'ൡ' => 'ഞ',
+ 'ข' => 'ข',
+ 'ฃ' => 'ข',
+ 'ช' => 'ช',
+ 'ซ' => 'ช',
+ 'ฎ' => 'ฎ',
+ 'ฏ' => 'ฎ',
+ 'ค' => 'ค',
+ 'ด' => 'ค',
+ 'ต' => 'ค',
+ 'ฑ' => 'ฑ',
+ 'ท' => 'ฑ',
+ 'ฆ' => 'ฆ',
+ 'ม' => 'ฆ',
+ '฿' => 'B',
+ 'า' => 'า',
+ 'ๅ' => 'า',
+ 'ํ' => '̊',
+ '๐' => '0',
+ 'จ' => 'จ',
+ 'ຈ' => 'จ',
+ 'ย' => 'ย',
+ 'ຍ' => 'ย',
+ 'บ' => 'บ',
+ 'ບ' => 'บ',
+ 'ป' => 'ป',
+ 'ປ' => 'ป',
+ 'ฝ' => 'ฝ',
+ 'ຝ' => 'ฝ',
+ 'พ' => 'พ',
+ 'ພ' => 'พ',
+ 'ฟ' => 'ฟ',
+ 'ຟ' => 'ฟ',
+ 'ุ' => 'ุ',
+ 'ຸ' => 'ุ',
+ 'ู' => 'ู',
+ 'ູ' => 'ู',
+ '่' => '่',
+ '່' => '่',
+ '้' => '้',
+ '້' => '้',
+ '๊' => '๊',
+ '໊' => '๊',
+ '๋' => '๋',
+ '໋' => '๋',
+ 'ໍ' => '̊',
+ '໐' => '0',
+ '་' => '་',
+ '༌' => '་',
+ 'ဝ' => '0',
+ 'ံ' => '̊',
+ '၀' => '0',
+ 'ყ' => 'Y',
+ 'ჳ' => 'E',
+ 'Ꭱ' => 'R',
+ 'Ꭵ' => '1',
+ 'Ꭹ' => 'Y',
+ 'Ꭺ' => 'A',
+ 'Ꭻ' => 'J',
+ 'Ꭼ' => 'E',
+ 'Ꮁ' => 'R',
+ 'Ꮃ' => 'W',
+ 'Ꮇ' => 'M',
+ 'Ꮋ' => 'H',
+ 'Ꮍ' => 'Y',
+ 'Ꮎ' => 'Ɵ',
+ 'Ꮐ' => 'G',
+ 'Ꮒ' => 'H',
+ 'Ꮓ' => 'Z',
+ 'Ꮞ' => 'A',
+ 'Ꮟ' => 'B',
+ 'Ꮢ' => 'R',
+ 'Ꮤ' => 'W',
+ 'Ꮥ' => '5',
+ 'Ꮩ' => 'V',
+ 'Ꮪ' => '5',
+ 'Ꮮ' => '1',
+ 'Ꮯ' => 'C',
+ 'Ꮲ' => 'P',
+ 'Ꮶ' => 'K',
+ 'Ꮷ' => 'J',
+ 'Ᏺ' => 'H',
+ 'Ᏻ' => 'G',
+ 'Ᏼ' => 'B',
+ 'ᐃ' => 'Δ',
+ '·' => '·',
+ 'ᐧ' => '·',
+ 'ᐯ' => 'V',
+ 'ᑭ' => 'P',
+ 'ᑯ' => 'D',
+ 'ᒍ' => 'J',
+ 'ᒿ' => '2',
+ 'ᐡ' => 'ᐡ',
+ 'ᓑ' => 'ᐡ',
+ 'ᕁ' => 'X',
+ 'ᕷ' => 'Δ',
+ 'ᕼ' => 'H',
+ 'ᕽ' => 'X',
+ 'ᖇ' => 'R',
+ 'ᖯ' => 'B',
+ 'ᖴ' => 'F',
+ 'ᗅ' => 'A',
+ 'ᗞ' => 'D',
+ 'ᗪ' => 'D',
+ 'ᗯ' => 'W',
+ 'ᗰ' => 'M',
+ 'ᗷ' => 'B',
+ 'ᒐ' => 'ᒐ',
+ 'ᘂ' => 'ᒐ',
+ 'ᒉ' => 'ᒉ',
+ 'ᘃ' => 'ᒉ',
+ 'ᓓ' => 'ᓓ',
+ 'ᘄ' => 'ᓓ',
+ 'ᓚ' => 'ᓚ',
+ 'ᘇ' => 'ᓚ',
+ 'ᕃ' => 'ᕃ',
+ 'ᘢ' => 'ᕃ',
+ 'ᕆ' => 'ᕆ',
+ 'ᘣ' => 'ᕆ',
+ 'ᕊ' => 'ᕊ',
+ 'ᘤ' => 'ᕊ',
+ 'Ω' => 'Ω',
+ 'ᘯ' => 'Ω',
+ 'ᘮ' => 'ᘮ',
+ 'ᘴ' => 'U',
+ 'ᘵ' => 'Ω',
+ '᙭' => 'X',
+ '᙮' => 'X',
+ 'អ' => 'អ',
+ 'ឣ' => 'អ',
+ 'ิ' => 'ิ',
+ 'ិ' => 'ิ',
+ 'ี' => 'ี',
+ 'ី' => 'ี',
+ 'ึ' => 'ึ',
+ 'ឹ' => 'ึ',
+ 'ื' => 'ื',
+ 'ឺ' => 'ื',
+ 'ំ' => '̊',
+ '់' => '่',
+ '៓' => '̊',
+ 'ฯ' => 'ฯ',
+ '។' => 'ฯ',
+ '๚' => '๚',
+ '៕' => '๚',
+ '๏' => '๏',
+ '៙' => '๏',
+ '๛' => '๛',
+ '៚' => '๛',
+ '᠐' => '0',
+ 'ᡜ' => 'ᡜ',
+ 'ᢖ' => 'ᡜ',
+ 'ḁ' => 'A',
+ 'ḍ' => 'D',
+ 'ḗ' => 'E',
+ 'ḙ' => 'E',
+ 'ḛ' => 'E',
+ 'ḝ' => 'E',
+ 'ḡ' => 'G',
+ 'ḣ' => 'H',
+ 'ḥ' => 'H',
+ 'ḧ' => 'H',
+ 'ḩ' => 'H',
+ 'ḫ' => 'H',
+ 'ḿ' => 'M',
+ 'ṁ' => 'M',
+ 'ṃ' => 'M',
+ 'ṇ' => 'N',
+ 'ṕ' => 'P',
+ 'ṗ' => 'P',
+ 'ṙ' => 'R',
+ 'ṛ' => 'R',
+ 'ṝ' => 'R',
+ 'ṟ' => 'R',
+ 'ṭ' => 'T',
+ 'ẁ' => 'W',
+ 'ẃ' => 'W',
+ 'ẅ' => 'W',
+ 'ẇ' => 'W',
+ 'ẉ' => 'W',
+ 'ẏ' => 'Y',
+ 'ạ' => 'A',
+ 'ả' => 'A',
+ 'ấ' => 'A',
+ 'ầ' => 'A',
+ 'ẩ' => 'A',
+ 'ẫ' => 'A',
+ 'ậ' => 'A',
+ 'ắ' => 'A',
+ 'ằ' => 'A',
+ 'ẳ' => 'A',
+ 'ẵ' => 'A',
+ 'ặ' => 'A',
+ 'ẹ' => 'E',
+ 'ẻ' => 'E',
+ 'ẽ' => 'E',
+ 'ế' => 'E',
+ 'ề' => 'E',
+ 'ể' => 'E',
+ 'ễ' => 'E',
+ 'ệ' => 'E',
+ 'ỳ' => 'Y',
+ 'ỵ' => 'Y',
+ 'ỷ' => 'Y',
+ 'ỹ' => 'Y',
+ 'ἁ' => 'A',
+ 'ἂ' => 'A',
+ 'ἃ' => 'A',
+ 'ἄ' => 'A',
+ 'ἅ' => 'A',
+ 'ἆ' => 'A',
+ 'ἇ' => 'A',
+ 'ἠ' => 'H',
+ 'ἡ' => 'H',
+ 'ἢ' => 'H',
+ 'ἣ' => 'H',
+ 'ἤ' => 'H',
+ 'ἥ' => 'H',
+ 'ἦ' => 'H',
+ 'ἧ' => 'H',
+ 'ὑ' => 'Y',
+ 'ὓ' => 'Y',
+ 'ὕ' => 'Y',
+ 'ὗ' => 'Y',
+ 'ὰ' => 'A',
+ 'ὴ' => 'H',
+ 'ὺ' => 'Y',
+ 'ᾀ' => 'A',
+ 'ᾁ' => 'A',
+ 'ᾂ' => 'A',
+ 'ᾃ' => 'A',
+ 'ᾄ' => 'A',
+ 'ᾅ' => 'A',
+ 'ᾆ' => 'A',
+ 'ᾇ' => 'A',
+ 'ᾐ' => 'H',
+ 'ᾳ' => 'A',
+ 'ῠ' => 'Y',
+ 'ῡ' => 'Y',
+ '₣' => 'F',
+ '₥' => 'M',
+ '₦' => 'N',
+ '₧' => 'P',
+ '₩' => 'W',
+ '' => '',
+ '​' => '',
+ '℧' => 'U',
+ 'ⅆ' => 'D',
+ 'Ⱨ' => 'H',
+ 'ⴱ' => 'Ɵ',
+ 'ⴹ' => 'E',
+ 'ⵔ' => '0',
+ 'へ' => 'へ',
+ 'ヘ' => 'へ',
+ '㑇' => '㑇',
+ '㑳' => '㑇',
+ '㘎' => '㘎',
+ '㘚' => '㘎',
+ '㤘' => '㤘',
+ '㥮' => '㤘',
+ '㧐' => '㧐',
+ '㩳' => '㧐',
+ '㖈' => '㖈',
+ '䎛' => '㖈',
+ '䎬' => '䎬',
+ '䎱' => '䎬',
+ '㬻' => '㬻',
+ '䐠' => '㬻',
+ '䙌' => '䙌',
+ '䙡' => '䙌',
+ '䝼' => '䝼',
+ '䞍' => '䝼',
+ '䥇' => '䥇',
+ '䦂' => '䥇',
+ '䦛' => '䦛',
+ '䦶' => '䦛',
+ '䦟' => '䦟',
+ '䦷' => '䦟',
+ '䱷' => '䱷',
+ '䲣' => '䱷',
+ '丄' => '丄',
+ '上' => '丄',
+ '丅' => '丅',
+ '下' => '丅',
+ '丏' => '丏',
+ '丐' => '丏',
+ '世' => '世',
+ '丗' => '世',
+ '丘' => '丘',
+ '丠' => '丘',
+ '丟' => '丟',
+ '丢' => '丟',
+ '両' => '両',
+ '两' => '両',
+ '丨' => '1',
+ '久' => '久',
+ '乆' => '久',
+ '乗' => '乗',
+ '乘' => '乗',
+ '乱' => '乱',
+ '乿' => '乱',
+ '乾' => '乾',
+ '亁' => '乾',
+ '亂' => '乱',
+ '丌' => '丌',
+ '亓' => '丌',
+ '丼' => '丼',
+ '井' => '丼',
+ '亘' => '亘',
+ '亙' => '亘',
+ '亚' => '亚',
+ '亜' => '亚',
+ '亞' => '亚',
+ '享' => '享',
+ '亯' => '享',
+ '京' => '京',
+ '亰' => '京',
+ '亡' => '亡',
+ '亾' => '亡',
+ '仙' => '仙',
+ '仚' => '仙',
+ '仩' => '丄',
+ '五' => '五',
+ '伍' => '五',
+ '伫' => '伫',
+ '佇' => '伫',
+ '仰' => '仰',
+ '佒' => '仰',
+ '仏' => '仏',
+ '佛' => '仏',
+ '伲' => '伲',
+ '你' => '伲',
+ '並' => '並',
+ '併' => '並',
+ '仑' => '仑',
+ '侖' => '仑',
+ '价' => '价',
+ '価' => '价',
+ '佞' => '佞',
+ '侫' => '佞',
+ '侣' => '侣',
+ '侶' => '侣',
+ '伣' => '伣',
+ '俔' => '伣',
+ '侠' => '侠',
+ '俠' => '侠',
+ '伩' => '伩',
+ '信' => '伩',
+ '俁' => '俁',
+ '俣' => '俁',
+ '伡' => '伡',
+ '俥' => '伡',
+ '俛' => '俛',
+ '俯' => '俛',
+ '伥' => '伥',
+ '倀' => '伥',
+ '倂' => '並',
+ '伜' => '伜',
+ '倅' => '伜',
+ '俩' => '俩',
+ '倆' => '俩',
+ '俫' => '俫',
+ '倈' => '俫',
+ '仓' => '仓',
+ '倉' => '仓',
+ '个' => '个',
+ '個' => '个',
+ '们' => '们',
+ '們' => '们',
+ '仿' => '仿',
+ '倣' => '仿',
+ '伦' => '伦',
+ '倫' => '伦',
+ '俱' => '俱',
+ '倶' => '俱',
+ '俭' => '俭',
+ '倹' => '俭',
+ '値' => '値',
+ '值' => '値',
+ '伟' => '伟',
+ '偉' => '伟',
+ '侧' => '侧',
+ '側' => '侧',
+ '侦' => '侦',
+ '偵' => '侦',
+ '偷' => '偷',
+ '偸' => '偷',
+ '俻' => '俻',
+ '偹' => '俻',
+ '伪' => '伪',
+ '偽' => '伪',
+ '伧' => '伧',
+ '傖' => '伧',
+ '伞' => '伞',
+ '傘' => '伞',
+ '備' => '俻',
+ '俲' => '俲',
+ '傚' => '俲',
+ '佣' => '佣',
+ '傭' => '佣',
+ '偬' => '偬',
+ '傯' => '偬',
+ '传' => '传',
+ '傳' => '传',
+ '伛' => '伛',
+ '傴' => '伛',
+ '债' => '债',
+ '債' => '债',
+ '伤' => '伤',
+ '傷' => '伤',
+ '倾' => '倾',
+ '傾' => '倾',
+ '偻' => '偻',
+ '僂' => '偻',
+ '仅' => '仅',
+ '僅' => '仅',
+ '佥' => '佥',
+ '僉' => '佥',
+ '僊' => '仙',
+ '侨' => '侨',
+ '僑' => '侨',
+ '仆' => '仆',
+ '僕' => '仆',
+ '僞' => '伪',
+ '侥' => '侥',
+ '僥' => '侥',
+ '偾' => '偾',
+ '僨' => '偾',
+ '僣' => '僣',
+ '僭' => '僣',
+ '價' => '价',
+ '仪' => '仪',
+ '儀' => '仪',
+ '俊' => '俊',
+ '儁' => '俊',
+ '侬' => '侬',
+ '儂' => '侬',
+ '亿' => '亿',
+ '億' => '亿',
+ '侩' => '侩',
+ '儈' => '侩',
+ '儉' => '俭',
+ '儌' => '侥',
+ '傻' => '傻',
+ '儍' => '傻',
+ '傤' => '傤',
+ '儎' => '傤',
+ '傧' => '傧',
+ '儐' => '傧',
+ '俦' => '俦',
+ '儔' => '俦',
+ '侪' => '侪',
+ '儕' => '侪',
+ '儞' => '伲',
+ '偿' => '偿',
+ '償' => '偿',
+ '优' => '优',
+ '優' => '优',
+ '储' => '储',
+ '儲' => '储',
+ '倏' => '倏',
+ '儵' => '倏',
+ '俪' => '俪',
+ '儷' => '俪',
+ '傩' => '傩',
+ '儺' => '傩',
+ '傥' => '傥',
+ '儻' => '傥',
+ '俨' => '俨',
+ '儼' => '俨',
+ '儿' => '儿',
+ '児' => '儿',
+ '兌' => '兌',
+ '兑' => '兌',
+ '兒' => '儿',
+ '兎' => '兎',
+ '兔' => '兎',
+ '兖' => '兖',
+ '兗' => '兖',
+ '兦' => '亡',
+ '兩' => '両',
+ '俞' => '俞',
+ '兪' => '俞',
+ '其' => '丌',
+ '內' => '內',
+ '内' => '內',
+ '冊' => '冊',
+ '册' => '冊',
+ '冐' => '冐',
+ '冒' => '冐',
+ '净' => '净',
+ '凈' => '净',
+ '冻' => '冻',
+ '凍' => '冻',
+ '准' => '准',
+ '凖' => '准',
+ '凛' => '凛',
+ '凜' => '凛',
+ '凡' => '凡',
+ '凢' => '凡',
+ '凣' => '凡',
+ '凯' => '凯',
+ '凱' => '凯',
+ '凭' => '凭',
+ '凴' => '凭',
+ '兇' => '兇',
+ '凶' => '兇',
+ '函' => '函',
+ '凾' => '函',
+ '刀' => '刀',
+ '刂' => '刀',
+ '刃' => '刃',
+ '刄' => '刃',
+ '刊' => '刊',
+ '刋' => '刊',
+ '删' => '删',
+ '刪' => '删',
+ '別' => '別',
+ '别' => '別',
+ '创' => '创',
+ '刱' => '创',
+ '倦' => '倦',
+ '券' => '倦',
+ '刦' => '刦',
+ '刼' => '刦',
+ '刺' => '刺',
+ '刾' => '刺',
+ '刴' => '刴',
+ '剁' => '刴',
+ '刭' => '刭',
+ '剄' => '刭',
+ '则' => '则',
+ '則' => '则',
+ '克' => '克',
+ '剋' => '克',
+ '刹' => '刹',
+ '剎' => '刹',
+ '刬' => '刬',
+ '剗' => '刬',
+ '剙' => '创',
+ '倳' => '倳',
+ '剚' => '倳',
+ '刚' => '刚',
+ '剛' => '刚',
+ '剑' => '剑',
+ '剣' => '剑',
+ '剂' => '剂',
+ '剤' => '剂',
+ '剝' => '剝',
+ '剥' => '剝',
+ '剐' => '剐',
+ '剮' => '剐',
+ '剩' => '剩',
+ '剰' => '剩',
+ '剀' => '剀',
+ '剴' => '剀',
+ '創' => '创',
+ '剷' => '刬',
+ '刮' => '刮',
+ '劀' => '刮',
+ '划' => '划',
+ '劃' => '划',
+ '剳' => '剳',
+ '劄' => '剳',
+ '剧' => '剧',
+ '劇' => '剧',
+ '刘' => '刘',
+ '劉' => '刘',
+ '刽' => '刽',
+ '劊' => '刽',
+ '剿' => '剿',
+ '劋' => '剿',
+ '刿' => '刿',
+ '劌' => '刿',
+ '劍' => '剑',
+ '劑' => '剂',
+ '劒' => '剑',
+ '劔' => '剑',
+ '働' => '働',
+ '动' => '働',
+ '劫' => '刦',
+ '劳' => '劳',
+ '労' => '劳',
+ '劵' => '倦',
+ '効' => '俲',
+ '劲' => '劲',
+ '勁' => '劲',
+ '劾' => '劾',
+ '勓' => '劾',
+ '動' => '働',
+ '勖' => '勖',
+ '勗' => '勖',
+ '务' => '务',
+ '務' => '务',
+ '勋' => '勋',
+ '勛' => '勋',
+ '勞' => '劳',
+ '势' => '势',
+ '勢' => '势',
+ '勦' => '剿',
+ '劝' => '劝',
+ '勧' => '劝',
+ '勚' => '勚',
+ '勩' => '勚',
+ '劢' => '劢',
+ '勱' => '劢',
+ '勲' => '勋',
+ '勳' => '勋',
+ '励' => '励',
+ '勵' => '励',
+ '勸' => '劝',
+ '勻' => '勻',
+ '匀' => '勻',
+ '匢' => '匢',
+ '匫' => '匢',
+ '匦' => '匦',
+ '匭' => '匦',
+ '匮' => '匮',
+ '匱' => '匮',
+ '区' => '区',
+ '區' => '区',
+ '仟' => '仟',
+ '千' => '仟',
+ '卋' => '世',
+ '劦' => '劦',
+ '协' => '劦',
+ '卍' => '卍',
+ '卐' => '卍',
+ '卆' => '卆',
+ '卒' => '卆',
+ '協' => '劦',
+ '单' => '单',
+ '単' => '单',
+ '佔' => '佔',
+ '占' => '佔',
+ '却' => '却',
+ '卻' => '却',
+ '即' => '即',
+ '卽' => '即',
+ '厍' => '厍',
+ '厙' => '厍',
+ '厅' => '厅',
+ '厛' => '厅',
+ '厕' => '厕',
+ '厠' => '厕',
+ '历' => '历',
+ '厤' => '历',
+ '厌' => '厌',
+ '厭' => '厌',
+ '厂' => '厂',
+ '厰' => '厂',
+ '厉' => '厉',
+ '厲' => '厉',
+ '严' => '严',
+ '厳' => '严',
+ '厣' => '厣',
+ '厴' => '厣',
+ '叁' => '叁',
+ '参' => '叁',
+ '參' => '叁',
+ '叄' => '叁',
+ '叜' => '叜',
+ '叟' => '叜',
+ '丛' => '丛',
+ '叢' => '丛',
+ '勾' => '勾',
+ '句' => '勾',
+ '仝' => '仝',
+ '同' => '仝',
+ '吳' => '吳',
+ '吴' => '吳',
+ '吕' => '吕',
+ '呂' => '吕',
+ '吻' => '吻',
+ '呅' => '吻',
+ '呉' => '吳',
+ '吿' => '吿',
+ '告' => '吿',
+ '吶' => '吶',
+ '呐' => '吶',
+ '吞' => '吞',
+ '呑' => '吞',
+ '呡' => '吻',
+ '呪' => '呪',
+ '咒' => '呪',
+ '偺' => '偺',
+ '咱' => '偺',
+ '呙' => '呙',
+ '咼' => '呙',
+ '呱' => '呱',
+ '哌' => '呱',
+ '员' => '员',
+ '員' => '员',
+ '呗' => '呗',
+ '唄' => '呗',
+ '哑' => '哑',
+ '唖' => '哑',
+ '吣' => '吣',
+ '唚' => '吣',
+ '启' => '启',
+ '啓' => '启',
+ '啔' => '启',
+ '咷' => '咷',
+ '啕' => '咷',
+ '啖' => '啖',
+ '啗' => '啖',
+ '啞' => '哑',
+ '啟' => '启',
+ '唡' => '唡',
+ '啢' => '唡',
+ '哲' => '哲',
+ '喆' => '哲',
+ '㖞' => '㖞',
+ '喎' => '㖞',
+ '喒' => '偺',
+ '唤' => '唤',
+ '喚' => '唤',
+ '唧' => '唧',
+ '喞' => '唧',
+ '吅' => '吅',
+ '喧' => '吅',
+ '丧' => '丧',
+ '喪' => '丧',
+ '吃' => '吃',
+ '喫' => '吃',
+ '乔' => '乔',
+ '喬' => '乔',
+ '單' => '单',
+ '哟' => '哟',
+ '喲' => '哟',
+ '喩' => '喩',
+ '喻' => '喩',
+ '呛' => '呛',
+ '嗆' => '呛',
+ '啬' => '啬',
+ '嗇' => '啬',
+ '唝' => '唝',
+ '嗊' => '唝',
+ '吗' => '吗',
+ '嗎' => '吗',
+ '呜' => '呜',
+ '嗚' => '呜',
+ '唢' => '唢',
+ '嗩' => '唢',
+ '呵' => '呵',
+ '嗬' => '呵',
+ '哔' => '哔',
+ '嗶' => '哔',
+ '叫' => '叫',
+ '嘂' => '叫',
+ '叹' => '叹',
+ '嘆' => '叹',
+ '傮' => '傮',
+ '嘈' => '傮',
+ '喽' => '喽',
+ '嘍' => '喽',
+ '呼' => '呼',
+ '嘑' => '呼',
+ '啯' => '啯',
+ '嘓' => '啯',
+ '呕' => '呕',
+ '嘔' => '呕',
+ '啧' => '啧',
+ '嘖' => '啧',
+ '唛' => '唛',
+ '嘜' => '唛',
+ '啸' => '啸',
+ '嘨' => '啸',
+ '哗' => '哗',
+ '嘩' => '哗',
+ '唠' => '唠',
+ '嘮' => '唠',
+ '嘯' => '啸',
+ '叽' => '叽',
+ '嘰' => '叽',
+ '喟' => '喟',
+ '嘳' => '喟',
+ '咀' => '咀',
+ '嘴' => '咀',
+ '哓' => '哓',
+ '嘵' => '哓',
+ '呒' => '呒',
+ '嘸' => '呒',
+ '啴' => '啴',
+ '嘽' => '啴',
+ '噉' => '啖',
+ '嘘' => '嘘',
+ '噓' => '嘘',
+ '噅' => '噅',
+ '噕' => '噅',
+ '咝' => '咝',
+ '噝' => '咝',
+ '哒' => '哒',
+ '噠' => '哒',
+ '哝' => '哝',
+ '噥' => '哝',
+ '哕' => '哕',
+ '噦' => '哕',
+ '噐' => '噐',
+ '器' => '噐',
+ '嗳' => '嗳',
+ '噯' => '嗳',
+ '哙' => '哙',
+ '噲' => '哙',
+ '喷' => '喷',
+ '噴' => '喷',
+ '吨' => '吨',
+ '噸' => '吨',
+ '喑' => '喑',
+ '噾' => '喑',
+ '咛' => '咛',
+ '嚀' => '咛',
+ '吓' => '吓',
+ '嚇' => '吓',
+ '哜' => '哜',
+ '嚌' => '哜',
+ '嘗' => '嘗',
+ '嚐' => '嘗',
+ '嚏' => '嚏',
+ '嚔' => '嚏',
+ '噜' => '噜',
+ '嚕' => '噜',
+ '啮' => '啮',
+ '嚙' => '啮',
+ '咽' => '咽',
+ '嚥' => '咽',
+ '呖' => '呖',
+ '嚦' => '呖',
+ '咙' => '咙',
+ '嚨' => '咙',
+ '嚪' => '啖',
+ '向' => '向',
+ '嚮' => '向',
+ '亸' => '亸',
+ '嚲' => '亸',
+ '喾' => '喾',
+ '嚳' => '喾',
+ '嚴' => '严',
+ '嘤' => '嘤',
+ '嚶' => '嘤',
+ '嚣' => '嚣',
+ '嚻' => '嚣',
+ '啜' => '啜',
+ '嚽' => '啜',
+ '啭' => '啭',
+ '囀' => '啭',
+ '嗫' => '嗫',
+ '囁' => '嗫',
+ '囂' => '嚣',
+ '冁' => '冁',
+ '囅' => '冁',
+ '呓' => '呓',
+ '囈' => '呓',
+ '啰' => '啰',
+ '囉' => '啰',
+ '嘱' => '嘱',
+ '囑' => '嘱',
+ '囓' => '啮',
+ '囘' => '囘',
+ '回' => '囘',
+ '团' => '团',
+ '団' => '团',
+ '冏' => '冏',
+ '囧' => '冏',
+ '囬' => '囘',
+ '囪' => '囪',
+ '囱' => '囪',
+ '囲' => '囲',
+ '围' => '囲',
+ '囯' => '囯',
+ '国' => '囯',
+ '図' => '図',
+ '图' => '図',
+ '圀' => '囯',
+ '円' => '円',
+ '圆' => '円',
+ '囵' => '囵',
+ '圇' => '囵',
+ '國' => '囯',
+ '圍' => '囲',
+ '圎' => '円',
+ '圈' => '圈',
+ '圏' => '圈',
+ '园' => '园',
+ '園' => '园',
+ '圓' => '円',
+ '圖' => '図',
+ '團' => '团',
+ '压' => '压',
+ '圧' => '压',
+ '凷' => '凷',
+ '块' => '凷',
+ '坏' => '坏',
+ '坯' => '坏',
+ '坵' => '丘',
+ '垄' => '垄',
+ '垅' => '垄',
+ '垛' => '垛',
+ '垜' => '垛',
+ '圻' => '圻',
+ '垠' => '圻',
+ '圣' => '圣',
+ '垩' => '圣',
+ '坝' => '坝',
+ '垻' => '坝',
+ '垂' => '垂',
+ '埀' => '垂',
+ '埒' => '埒',
+ '埓' => '埒',
+ '垭' => '垭',
+ '埡' => '垭',
+ '坤' => '坤',
+ '堃' => '坤',
+ '坚' => '坚',
+ '堅' => '坚',
+ '堊' => '圣',
+ '垴' => '垴',
+ '堖' => '垴',
+ '埚' => '埚',
+ '堝' => '埚',
+ '垚' => '垚',
+ '堯' => '垚',
+ '场' => '场',
+ '場' => '场',
+ '塊' => '凷',
+ '垲' => '垲',
+ '塏' => '垲',
+ '埘' => '埘',
+ '塒' => '埘',
+ '凃' => '凃',
+ '塗' => '凃',
+ '冢' => '冢',
+ '塚' => '冢',
+ '坞' => '坞',
+ '塢' => '坞',
+ '埙' => '埙',
+ '塤' => '埙',
+ '塡' => '塡',
+ '填' => '塡',
+ '塲' => '场',
+ '塜' => '塜',
+ '塳' => '塜',
+ '堋' => '堋',
+ '塴' => '堋',
+ '堑' => '堑',
+ '塹' => '堑',
+ '垫' => '垫',
+ '墊' => '垫',
+ '塈' => '塈',
+ '墍' => '塈',
+ '塔' => '塔',
+ '墖' => '塔',
+ '坠' => '坠',
+ '墜' => '坠',
+ '増' => '増',
+ '增' => '増',
+ '地' => '地',
+ '墬' => '地',
+ '堕' => '堕',
+ '墮' => '堕',
+ '墯' => '堕',
+ '坟' => '坟',
+ '墳' => '坟',
+ '墙' => '墙',
+ '墻' => '墙',
+ '垦' => '垦',
+ '墾' => '垦',
+ '坛' => '坛',
+ '壇' => '坛',
+ '壊' => '坏',
+ '垱' => '垱',
+ '壋' => '垱',
+ '壎' => '埙',
+ '壓' => '压',
+ '堧' => '堧',
+ '壖' => '堧',
+ '垒' => '垒',
+ '壘' => '垒',
+ '圹' => '圹',
+ '壙' => '圹',
+ '垆' => '垆',
+ '壚' => '垆',
+ '壞' => '坏',
+ '壟' => '垄',
+ '壠' => '垄',
+ '坜' => '坜',
+ '壢' => '坜',
+ '喦' => '喦',
+ '壧' => '喦',
+ '壨' => '垒',
+ '壩' => '坝',
+ '塆' => '塆',
+ '壪' => '塆',
+ '壮' => '壮',
+ '壯' => '壮',
+ '一' => '一',
+ '壱' => '一',
+ '卖' => '卖',
+ '売' => '卖',
+ '壶' => '壶',
+ '壷' => '壶',
+ '壹' => '一',
+ '壺' => '壶',
+ '壸' => '壸',
+ '壼' => '壸',
+ '墫' => '墫',
+ '壿' => '墫',
+ '壽' => '壽',
+ '夀' => '壽',
+ '备' => '俻',
+ '变' => '变',
+ '変' => '变',
+ '卯' => '卯',
+ '夘' => '卯',
+ '多' => '多',
+ '夛' => '多',
+ '亱' => '亱',
+ '夜' => '亱',
+ '够' => '够',
+ '夠' => '够',
+ '伙' => '伙',
+ '夥' => '伙',
+ '伕' => '伕',
+ '夫' => '伕',
+ '侇' => '侇',
+ '夷' => '侇',
+ '夹' => '夹',
+ '夾' => '夹',
+ '匳' => '匳',
+ '奁' => '匳',
+ '奂' => '奂',
+ '奐' => '奂',
+ '奥' => '奥',
+ '奧' => '奥',
+ '奖' => '奖',
+ '奨' => '奖',
+ '奩' => '匳',
+ '夺' => '夺',
+ '奪' => '夺',
+ '奬' => '奖',
+ '奋' => '奋',
+ '奮' => '奋',
+ '奶' => '伲',
+ '䚶' => '䚶',
+ '妖' => '䚶',
+ '妆' => '妆',
+ '妝' => '妆',
+ '妒' => '妒',
+ '妬' => '妒',
+ '妳' => '伲',
+ '姉' => '姉',
+ '姊' => '姉',
+ '姍' => '姍',
+ '姗' => '姍',
+ '妊' => '妊',
+ '姙' => '妊',
+ '奸' => '奸',
+ '姦' => '奸',
+ '侄' => '侄',
+ '姪' => '侄',
+ '姫' => '姫',
+ '姬' => '姫',
+ '妍' => '妍',
+ '姸' => '妍',
+ '奼' => '奼',
+ '姹' => '奼',
+ '喃' => '喃',
+ '娚' => '喃',
+ '姢' => '姢',
+ '娟' => '姢',
+ '娛' => '娛',
+ '娯' => '娛',
+ '娱' => '娛',
+ '娿' => '娿',
+ '婀' => '娿',
+ '娄' => '娄',
+ '婁' => '娄',
+ '倇' => '倇',
+ '婉' => '倇',
+ '姻' => '姻',
+ '婣' => '姻',
+ '妇' => '妇',
+ '婦' => '妇',
+ '娅' => '娅',
+ '婭' => '娅',
+ '婾' => '偷',
+ '姐' => '姐',
+ '媎' => '姐',
+ '娲' => '娲',
+ '媧' => '娲',
+ '保' => '保',
+ '媬' => '保',
+ '媮' => '偷',
+ '妫' => '妫',
+ '媯' => '妫',
+ '媪' => '媪',
+ '媼' => '媪',
+ '妈' => '妈',
+ '媽' => '妈',
+ '妪' => '妪',
+ '嫗' => '妪',
+ '妩' => '妩',
+ '嫵' => '妩',
+ '媠' => '媠',
+ '嫷' => '媠',
+ '媌' => '媌',
+ '嫹' => '媌',
+ '娴' => '娴',
+ '嫺' => '娴',
+ '嫻' => '娴',
+ '婳' => '婳',
+ '嫿' => '婳',
+ '嬀' => '妫',
+ '媭' => '媭',
+ '嬃' => '媭',
+ '娆' => '娆',
+ '嬈' => '娆',
+ '婵' => '婵',
+ '嬋' => '婵',
+ '娇' => '娇',
+ '嬌' => '娇',
+ '嫱' => '嫱',
+ '嬙' => '嫱',
+ '嫋' => '嫋',
+ '嬝' => '嫋',
+ '嫒' => '嫒',
+ '嬡' => '嫒',
+ '娘' => '娘',
+ '嬢' => '娘',
+ '嫔' => '嫔',
+ '嬪' => '嫔',
+ '嬭' => '伲',
+ '婴' => '婴',
+ '嬰' => '婴',
+ '嬤' => '嬤',
+ '嬷' => '嬤',
+ '婶' => '婶',
+ '嬸' => '婶',
+ '孃' => '娘',
+ '娈' => '娈',
+ '孌' => '娈',
+ '孙' => '孙',
+ '孫' => '孙',
+ '孚' => '孚',
+ '孵' => '孚',
+ '孳' => '孳',
+ '孶' => '孳',
+ '学' => '学',
+ '學' => '学',
+ '孼' => '孼',
+ '孽' => '孼',
+ '孪' => '孪',
+ '孿' => '孪',
+ '冗' => '冗',
+ '宂' => '冗',
+ '侒' => '侒',
+ '安' => '侒',
+ '吰' => '吰',
+ '宏' => '吰',
+ '冝' => '冝',
+ '宜' => '冝',
+ '实' => '实',
+ '実' => '实',
+ '宫' => '宫',
+ '宮' => '宫',
+ '傢' => '傢',
+ '家' => '傢',
+ '冤' => '冤',
+ '寃' => '冤',
+ '宻' => '宻',
+ '密' => '宻',
+ '冦' => '冦',
+ '寇' => '冦',
+ '冨' => '冨',
+ '富' => '冨',
+ '宁' => '宁',
+ '寍' => '宁',
+ '寕' => '宁',
+ '宽' => '宽',
+ '寛' => '宽',
+ '寜' => '宁',
+ '寑' => '寑',
+ '寝' => '寑',
+ '嗼' => '嗼',
+ '寞' => '嗼',
+ '寢' => '寑',
+ '實' => '实',
+ '寧' => '宁',
+ '审' => '审',
+ '審' => '审',
+ '写' => '写',
+ '寫' => '写',
+ '寬' => '宽',
+ '寱' => '呓',
+ '宝' => '宝',
+ '寳' => '宝',
+ '宠' => '宠',
+ '寵' => '宠',
+ '寶' => '宝',
+ '寿' => '壽',
+ '尅' => '克',
+ '将' => '将',
+ '將' => '将',
+ '专' => '专',
+ '專' => '专',
+ '寻' => '寻',
+ '尋' => '寻',
+ '对' => '对',
+ '對' => '对',
+ '导' => '导',
+ '導' => '导',
+ '尒' => '尒',
+ '尓' => '尒',
+ '尔' => '尒',
+ '塵' => '塵',
+ '尘' => '塵',
+ '尙' => '尙',
+ '尚' => '尙',
+ '尝' => '嘗',
+ '尟' => '尟',
+ '尠' => '尟',
+ '尧' => '垚',
+ '尪' => '尪',
+ '尫' => '尪',
+ '尭' => '垚',
+ '尴' => '尴',
+ '尷' => '尴',
+ '儘' => '儘',
+ '尽' => '儘',
+ '侷' => '侷',
+ '局' => '侷',
+ '屆' => '屆',
+ '届' => '屆',
+ '尸' => '尸',
+ '屍' => '尸',
+ '屃' => '屃',
+ '屓' => '屃',
+ '屏' => '屏',
+ '屛' => '屏',
+ '屡' => '屡',
+ '屢' => '屡',
+ '层' => '层',
+ '層' => '层',
+ '屦' => '屦',
+ '屨' => '屦',
+ '属' => '属',
+ '屬' => '属',
+ '屭' => '屃',
+ '出' => '出',
+ '岀' => '出',
+ '亗' => '亗',
+ '岁' => '亗',
+ '冈' => '冈',
+ '岗' => '冈',
+ '岡' => '冈',
+ '坡' => '坡',
+ '岥' => '坡',
+ '岩' => '喦',
+ '岭' => '岭',
+ '岺' => '岭',
+ '峨' => '峨',
+ '峩' => '峨',
+ '峯' => '峯',
+ '峰' => '峯',
+ '岘' => '岘',
+ '峴' => '岘',
+ '岛' => '岛',
+ '島' => '岛',
+ '峡' => '峡',
+ '峽' => '峡',
+ '崇' => '崇',
+ '崈' => '崇',
+ '华' => '华',
+ '崋' => '华',
+ '崃' => '崃',
+ '崍' => '崃',
+ '埼' => '埼',
+ '崎' => '埼',
+ '岷' => '岷',
+ '崏' => '岷',
+ '崐' => '崐',
+ '崑' => '崐',
+ '崕' => '崕',
+ '崖' => '崕',
+ '崗' => '冈',
+ '崘' => '仑',
+ '崙' => '仑',
+ '峥' => '峥',
+ '崢' => '峥',
+ '岽' => '岽',
+ '崬' => '岽',
+ '嵆' => '嵆',
+ '嵇' => '嵆',
+ '岚' => '岚',
+ '嵐' => '岚',
+ '嵒' => '喦',
+ '嵏' => '嵏',
+ '嵕' => '嵏',
+ '嵯' => '嵯',
+ '嵳' => '嵯',
+ '嵝' => '嵝',
+ '嶁' => '嵝',
+ '崭' => '崭',
+ '嶄' => '崭',
+ '岖' => '岖',
+ '嶇' => '岖',
+ '嶋' => '岛',
+ '嶌' => '岛',
+ '嵚' => '嵚',
+ '嶔' => '嵚',
+ '崂' => '崂',
+ '嶗' => '崂',
+ '峤' => '峤',
+ '嶠' => '峤',
+ '峣' => '峣',
+ '嶢' => '峣',
+ '峄' => '峄',
+ '嶧' => '峄',
+ '峃' => '峃',
+ '嶨' => '峃',
+ '峱' => '峱',
+ '嶩' => '峱',
+ '崄' => '崄',
+ '嶮' => '崄',
+ '嵘' => '嵘',
+ '嶸' => '嵘',
+ '嶺' => '岭',
+ '屿' => '屿',
+ '嶼' => '屿',
+ '岳' => '岳',
+ '嶽' => '岳',
+ '岿' => '岿',
+ '巋' => '岿',
+ '巌' => '喦',
+ '峦' => '峦',
+ '巒' => '峦',
+ '巅' => '巅',
+ '巓' => '巅',
+ '巔' => '巅',
+ '巖' => '喦',
+ '巢' => '巢',
+ '巣' => '巢',
+ '巯' => '巯',
+ '巰' => '巯',
+ '卮' => '卮',
+ '巵' => '卮',
+ '卷' => '卷',
+ '巻' => '卷',
+ '巺' => '巺',
+ '巽' => '巺',
+ '佈' => '佈',
+ '布' => '佈',
+ '帅' => '帅',
+ '帥' => '帅',
+ '师' => '师',
+ '師' => '师',
+ '带' => '带',
+ '帯' => '带',
+ '帡' => '帡',
+ '帲' => '帡',
+ '帐' => '帐',
+ '帳' => '帐',
+ '帶' => '带',
+ '帧' => '帧',
+ '幀' => '帧',
+ '冪' => '冪',
+ '幂' => '冪',
+ '帏' => '帏',
+ '幃' => '帏',
+ '帮' => '帮',
+ '幇' => '帮',
+ '帼' => '帼',
+ '幗' => '帼',
+ '帻' => '帻',
+ '幘' => '帻',
+ '幕' => '幕',
+ '幙' => '幕',
+ '幚' => '帮',
+ '帜' => '帜',
+ '幟' => '帜',
+ '币' => '币',
+ '幣' => '币',
+ '幤' => '币',
+ '幫' => '帮',
+ '帱' => '帱',
+ '幬' => '帱',
+ '干' => '乾',
+ '并' => '並',
+ '幷' => '並',
+ '倖' => '倖',
+ '幸' => '倖',
+ '幹' => '乾',
+ '么' => '么',
+ '幺' => '么',
+ '几' => '几',
+ '幾' => '几',
+ '庁' => '厅',
+ '仄' => '仄',
+ '庂' => '仄',
+ '广' => '广',
+ '広' => '广',
+ '庅' => '么',
+ '厎' => '厎',
+ '底' => '厎',
+ '坫' => '坫',
+ '店' => '坫',
+ '厐' => '厐',
+ '庞' => '厐',
+ '坐' => '坐',
+ '座' => '坐',
+ '库' => '库',
+ '庫' => '库',
+ '庰' => '屏',
+ '庶' => '庶',
+ '庻' => '庶',
+ '寓' => '寓',
+ '庽' => '寓',
+ '庙' => '庙',
+ '庿' => '庙',
+ '廁' => '厕',
+ '厢' => '厢',
+ '廂' => '厢',
+ '废' => '废',
+ '廃' => '废',
+ '厩' => '厩',
+ '廄' => '厩',
+ '厦' => '厦',
+ '廈' => '厦',
+ '亷' => '亷',
+ '廉' => '亷',
+ '庼' => '庼',
+ '廎' => '庼',
+ '廏' => '厩',
+ '廐' => '厩',
+ '席' => '席',
+ '廗' => '席',
+ '厨' => '厨',
+ '廚' => '厨',
+ '厮' => '厮',
+ '廝' => '厮',
+ '廟' => '庙',
+ '廠' => '厂',
+ '庑' => '庑',
+ '廡' => '庑',
+ '廢' => '废',
+ '廣' => '广',
+ '廩' => '廩',
+ '廪' => '廩',
+ '庐' => '庐',
+ '廬' => '庐',
+ '廰' => '厅',
+ '廳' => '厅',
+ '巡' => '巡',
+ '廵' => '巡',
+ '廻' => '囘',
+ '乃' => '乃',
+ '廼' => '乃',
+ '廽' => '囘',
+ '卄' => '卄',
+ '廿' => '卄',
+ '弌' => '一',
+ '二' => '二',
+ '弍' => '二',
+ '弑' => '弑',
+ '弒' => '弑',
+ '吊' => '吊',
+ '弔' => '吊',
+ '冞' => '冞',
+ '弥' => '冞',
+ '弪' => '弪',
+ '弳' => '弪',
+ '张' => '张',
+ '張' => '张',
+ '強' => '強',
+ '强' => '強',
+ '弹' => '弹',
+ '弾' => '弹',
+ '发' => '发',
+ '彂' => '发',
+ '彆' => '別',
+ '彈' => '弹',
+ '彊' => '強',
+ '彌' => '冞',
+ '彉' => '彉',
+ '彍' => '彉',
+ '弯' => '弯',
+ '彎' => '弯',
+ '彐' => '彐',
+ '彑' => '彐',
+ '帰' => '帰',
+ '归' => '帰',
+ '噹' => '噹',
+ '当' => '噹',
+ '彔' => '彔',
+ '录' => '彔',
+ '匯' => '匯',
+ '彙' => '匯',
+ '彚' => '匯',
+ '彛' => '彛',
+ '彜' => '彛',
+ '彝' => '彛',
+ '彞' => '彛',
+ '彟' => '彟',
+ '彠' => '彟',
+ '彥' => '彥',
+ '彦' => '彥',
+ '份' => '份',
+ '彬' => '份',
+ '彨' => '彨',
+ '彲' => '彨',
+ '彷' => '仿',
+ '彿' => '仏',
+ '往' => '往',
+ '徃' => '往',
+ '佷' => '佷',
+ '很' => '佷',
+ '佪' => '佪',
+ '徊' => '佪',
+ '后' => '后',
+ '後' => '后',
+ '径' => '径',
+ '徑' => '径',
+ '从' => '从',
+ '従' => '从',
+ '從' => '从',
+ '徕' => '徕',
+ '徠' => '徕',
+ '复' => '复',
+ '復' => '复',
+ '傍' => '傍',
+ '徬' => '傍',
+ '傜' => '傜',
+ '徭' => '傜',
+ '征' => '征',
+ '徴' => '征',
+ '徵' => '征',
+ '徳' => '徳',
+ '德' => '徳',
+ '彻' => '彻',
+ '徹' => '彻',
+ '徺' => '侥',
+ '仁' => '仁',
+ '忈' => '仁',
+ '刌' => '刌',
+ '忖' => '刌',
+ '应' => '应',
+ '応' => '应',
+ '唸' => '唸',
+ '念' => '唸',
+ '佝' => '佝',
+ '怐' => '佝',
+ '忣' => '忣',
+ '急' => '忣',
+ '匆' => '匆',
+ '怱' => '匆',
+ '他' => '他',
+ '怹' => '他',
+ '恊' => '劦',
+ '怳' => '怳',
+ '恍' => '怳',
+ '恆' => '恆',
+ '恒' => '恆',
+ '卹' => '卹',
+ '恤' => '卹',
+ '噁' => '噁',
+ '恶' => '噁',
+ '吝' => '吝',
+ '悋' => '吝',
+ '恂' => '恂',
+ '悛' => '恂',
+ '悤' => '匆',
+ '悅' => '悅',
+ '悦' => '悅',
+ '悪' => '噁',
+ '悞' => '悞',
+ '悮' => '悞',
+ '悳' => '徳',
+ '忰' => '忰',
+ '悴' => '忰',
+ '怅' => '怅',
+ '悵' => '怅',
+ '悹' => '悹',
+ '悺' => '悹',
+ '凄' => '凄',
+ '悽' => '凄',
+ '悐' => '悐',
+ '惕' => '悐',
+ '恵' => '恵',
+ '惠' => '恵',
+ '惡' => '噁',
+ '惪' => '徳',
+ '恼' => '恼',
+ '惱' => '恼',
+ '恽' => '恽',
+ '惲' => '恽',
+ '恻' => '恻',
+ '惻' => '恻',
+ '恪' => '恪',
+ '愘' => '恪',
+ '惬' => '惬',
+ '愜' => '惬',
+ '媿' => '媿',
+ '愧' => '媿',
+ '悫' => '悫',
+ '愨' => '悫',
+ '怆' => '怆',
+ '愴' => '怆',
+ '恺' => '恺',
+ '愷' => '恺',
+ '博' => '博',
+ '愽' => '博',
+ '忾' => '忾',
+ '愾' => '忾',
+ '恿' => '恿',
+ '慂' => '恿',
+ '态' => '态',
+ '態' => '态',
+ '愠' => '愠',
+ '慍' => '愠',
+ '愼' => '愼',
+ '慎' => '愼',
+ '剽' => '剽',
+ '慓' => '剽',
+ '惨' => '惨',
+ '慘' => '惨',
+ '惭' => '惭',
+ '慙' => '惭',
+ '慚' => '惭',
+ '恸' => '恸',
+ '慟' => '恸',
+ '惯' => '惯',
+ '慣' => '惯',
+ '慤' => '悫',
+ '怄' => '怄',
+ '慪' => '怄',
+ '怂' => '怂',
+ '慫' => '怂',
+ '悭' => '悭',
+ '慳' => '悭',
+ '慑' => '慑',
+ '慴' => '慑',
+ '嫞' => '嫞',
+ '慵' => '嫞',
+ '庆' => '庆',
+ '慶' => '庆',
+ '忧' => '忧',
+ '憂' => '忧',
+ '憅' => '恸',
+ '惫' => '惫',
+ '憊' => '惫',
+ '憋' => '別',
+ '怜' => '怜',
+ '憐' => '怜',
+ '憑' => '凭',
+ '愦' => '愦',
+ '憒' => '愦',
+ '憓' => '恵',
+ '慭' => '慭',
+ '憖' => '慭',
+ '喜' => '喜',
+ '憙' => '喜',
+ '惮' => '惮',
+ '憚' => '惮',
+ '愤' => '愤',
+ '憤' => '愤',
+ '憇' => '憇',
+ '憩' => '憇',
+ '悯' => '悯',
+ '憫' => '悯',
+ '怃' => '怃',
+ '憮' => '怃',
+ '宪' => '宪',
+ '憲' => '宪',
+ '忆' => '忆',
+ '憶' => '忆',
+ '儆' => '儆',
+ '憼' => '儆',
+ '勤' => '勤',
+ '懃' => '勤',
+ '恳' => '恳',
+ '懇' => '恳',
+ '應' => '应',
+ '怿' => '怿',
+ '懌' => '怿',
+ '怀' => '怀',
+ '懐' => '怀',
+ '嬾' => '嬾',
+ '懒' => '嬾',
+ '懍' => '懍',
+ '懔' => '懍',
+ '怼' => '怼',
+ '懟' => '怼',
+ '懑' => '懑',
+ '懣' => '懑',
+ '懦' => '懦',
+ '懧' => '懦',
+ '恹' => '恹',
+ '懨' => '恹',
+ '惩' => '惩',
+ '懲' => '惩',
+ '懶' => '嬾',
+ '懷' => '怀',
+ '悬' => '悬',
+ '懸' => '悬',
+ '忏' => '忏',
+ '懺' => '忏',
+ '惧' => '惧',
+ '懼' => '惧',
+ '懾' => '慑',
+ '恋' => '恋',
+ '戀' => '恋',
+ '戆' => '戆',
+ '戇' => '戆',
+ '戋' => '戋',
+ '戔' => '戋',
+ '戛' => '戛',
+ '戞' => '戛',
+ '战' => '战',
+ '戦' => '战',
+ '戗' => '戗',
+ '戧' => '戗',
+ '戩' => '戩',
+ '戬' => '戩',
+ '戏' => '戏',
+ '戯' => '戏',
+ '戰' => '战',
+ '戱' => '戏',
+ '戲' => '戏',
+ '戶' => '戶',
+ '户' => '戶',
+ '戸' => '戶',
+ '戼' => '卯',
+ '戻' => '戻',
+ '戾' => '戻',
+ '扎' => '剳',
+ '執' => '執',
+ '执' => '執',
+ '于' => '于',
+ '扵' => '于',
+ '刔' => '刔',
+ '抉' => '刔',
+ '伔' => '伔',
+ '抌' => '伔',
+ '報' => '報',
+ '报' => '報',
+ '扺' => '扺',
+ '抵' => '扺',
+ '伸' => '伸',
+ '抻' => '伸',
+ '払' => '払',
+ '拂' => '払',
+ '抚' => '抚',
+ '拊' => '抚',
+ '抛' => '抛',
+ '拋' => '抛',
+ '抜' => '抜',
+ '拔' => '抜',
+ '拕' => '拕',
+ '拖' => '拕',
+ '抃' => '抃',
+ '拚' => '抃',
+ '拜' => '拜',
+ '拝' => '拜',
+ '儗' => '儗',
+ '拟' => '儗',
+ '扩' => '扩',
+ '拡' => '扩',
+ '択' => '択',
+ '择' => '択',
+ '拏' => '拏',
+ '拿' => '拏',
+ '挅' => '挅',
+ '挆' => '挅',
+ '举' => '举',
+ '挙' => '举',
+ '挟' => '挟',
+ '挾' => '挟',
+ '八' => '八',
+ '捌' => '八',
+ '扞' => '扞',
+ '捍' => '扞',
+ '拽' => '拽',
+ '捙' => '拽',
+ '挩' => '挩',
+ '捝' => '挩',
+ '扪' => '扪',
+ '捫' => '扪',
+ '拠' => '拠',
+ '据' => '拠',
+ '捲' => '卷',
+ '总' => '总',
+ '捴' => '总',
+ '扫' => '扫',
+ '掃' => '扫',
+ '抡' => '抡',
+ '掄' => '抡',
+ '㧏' => '㧏',
+ '掆' => '㧏',
+ '挜' => '挜',
+ '掗' => '挜',
+ '挣' => '挣',
+ '掙' => '挣',
+ '挂' => '挂',
+ '掛' => '挂',
+ '匊' => '匊',
+ '掬' => '匊',
+ '拣' => '拣',
+ '揀' => '拣',
+ '扬' => '扬',
+ '揚' => '扬',
+ '换' => '换',
+ '換' => '换',
+ '揪' => '揪',
+ '揫' => '揪',
+ '掲' => '掲',
+ '揭' => '掲',
+ '挥' => '挥',
+ '揮' => '挥',
+ '愋' => '愋',
+ '援' => '愋',
+ '插' => '插',
+ '揷' => '插',
+ '偝' => '偝',
+ '揹' => '偝',
+ '搃' => '总',
+ '揯' => '揯',
+ '搄' => '揯',
+ '捁' => '捁',
+ '搅' => '捁',
+ '冓' => '冓',
+ '搆' => '冓',
+ '㩁' => '㩁',
+ '搉' => '㩁',
+ '扠' => '扠',
+ '搋' => '扠',
+ '损' => '损',
+ '損' => '损',
+ '揺' => '揺',
+ '搖' => '揺',
+ '捣' => '捣',
+ '搗' => '捣',
+ '捜' => '捜',
+ '搜' => '捜',
+ '扼' => '扼',
+ '搤' => '扼',
+ '捶' => '捶',
+ '搥' => '捶',
+ '扇' => '扇',
+ '搧' => '扇',
+ '搨' => '搨',
+ '搭' => '搨',
+ '掏' => '掏',
+ '搯' => '掏',
+ '揾' => '揾',
+ '搵' => '揾',
+ '抢' => '抢',
+ '搶' => '抢',
+ '搹' => '扼',
+ '捂' => '捂',
+ '摀' => '捂',
+ '扛' => '扛',
+ '摃' => '扛',
+ '挕' => '挕',
+ '摄' => '挕',
+ '捈' => '捈',
+ '摅' => '捈',
+ '摇' => '揺',
+ '掴' => '掴',
+ '摑' => '掴',
+ '掼' => '掼',
+ '摜' => '掼',
+ '搂' => '搂',
+ '摟' => '搂',
+ '摠' => '总',
+ '拓' => '拓',
+ '摭' => '拓',
+ '挚' => '挚',
+ '摯' => '挚',
+ '抠' => '抠',
+ '摳' => '抠',
+ '抟' => '抟',
+ '摶' => '抟',
+ '折' => '折',
+ '摺' => '折',
+ '掺' => '掺',
+ '摻' => '掺',
+ '挳' => '挳',
+ '摼' => '挳',
+ '击' => '击',
+ '撃' => '击',
+ '掘' => '掘',
+ '撅' => '掘',
+ '捞' => '捞',
+ '撈' => '捞',
+ '挦' => '挦',
+ '撏' => '挦',
+ '撐' => '撐',
+ '撑' => '撐',
+ '挠' => '挠',
+ '撓' => '挠',
+ '撘' => '搨',
+ '捻' => '捻',
+ '撚' => '捻',
+ '挢' => '挢',
+ '撟' => '挢',
+ '掸' => '掸',
+ '撣' => '掸',
+ '拨' => '拨',
+ '撥' => '拨',
+ '扯' => '扯',
+ '撦' => '扯',
+ '撫' => '抚',
+ '扑' => '扑',
+ '撲' => '扑',
+ '揿' => '揿',
+ '撳' => '揿',
+ '撹' => '捁',
+ '挞' => '挞',
+ '撻' => '挞',
+ '挝' => '挝',
+ '撾' => '挝',
+ '捡' => '捡',
+ '撿' => '捡',
+ '擀' => '扞',
+ '拥' => '拥',
+ '擁' => '拥',
+ '掳' => '掳',
+ '擄' => '掳',
+ '擇' => '択',
+ '擊' => '击',
+ '挡' => '挡',
+ '擋' => '挡',
+ '㧟' => '㧟',
+ '擓' => '㧟',
+ '担' => '担',
+ '擔' => '担',
+ '據' => '拠',
+ '挤' => '挤',
+ '擠' => '挤',
+ '擣' => '捣',
+ '擧' => '举',
+ '擪' => '擪',
+ '擫' => '擪',
+ '擬' => '儗',
+ '摈' => '摈',
+ '擯' => '摈',
+ '拧' => '拧',
+ '擰' => '拧',
+ '搁' => '搁',
+ '擱' => '搁',
+ '掷' => '掷',
+ '擲' => '掷',
+ '擴' => '扩',
+ '撷' => '撷',
+ '擷' => '撷',
+ '摆' => '摆',
+ '擺' => '摆',
+ '擞' => '擞',
+ '擻' => '擞',
+ '撸' => '撸',
+ '擼' => '撸',
+ '扰' => '扰',
+ '擾' => '扰',
+ '攄' => '捈',
+ '撵' => '撵',
+ '攆' => '撵',
+ '拢' => '拢',
+ '攏' => '拢',
+ '攅' => '攅',
+ '攒' => '攅',
+ '拦' => '拦',
+ '攔' => '拦',
+ '撄' => '撄',
+ '攖' => '撄',
+ '搀' => '搀',
+ '攙' => '搀',
+ '撺' => '撺',
+ '攛' => '撺',
+ '携' => '携',
+ '攜' => '携',
+ '攝' => '挕',
+ '攢' => '攅',
+ '挛' => '挛',
+ '攣' => '挛',
+ '摊' => '摊',
+ '攤' => '摊',
+ '攪' => '捁',
+ '揽' => '揽',
+ '攬' => '揽',
+ '搘' => '搘',
+ '支' => '搘',
+ '攴' => '扑',
+ '収' => '収',
+ '收' => '収',
+ '合' => '合',
+ '敆' => '合',
+ '效' => '俲',
+ '叙' => '叙',
+ '敍' => '叙',
+ '敓' => '夺',
+ '敘' => '叙',
+ '敎' => '敎',
+ '教' => '敎',
+ '敠' => '敠',
+ '敪' => '敠',
+ '愍' => '愍',
+ '敯' => '愍',
+ '敌' => '敌',
+ '敵' => '敌',
+ '尃' => '尃',
+ '敷' => '尃',
+ '数' => '数',
+ '數' => '数',
+ '夐' => '夐',
+ '敻' => '夐',
+ '敛' => '敛',
+ '斂' => '敛',
+ '敩' => '敩',
+ '斅' => '敩',
+ '斆' => '敩',
+ '斈' => '学',
+ '亝' => '亝',
+ '斉' => '亝',
+ '斋' => '斋',
+ '斎' => '斋',
+ '庾' => '庾',
+ '斔' => '庾',
+ '斓' => '斓',
+ '斕' => '斓',
+ '亹' => '亹',
+ '斖' => '亹',
+ '斞' => '庾',
+ '斩' => '斩',
+ '斬' => '斩',
+ '断' => '断',
+ '斷' => '断',
+ '於' => '于',
+ '旌' => '旌',
+ '旍' => '旌',
+ '旂' => '旂',
+ '旗' => '旂',
+ '既' => '既',
+ '旣' => '既',
+ '恉' => '恉',
+ '旨' => '恉',
+ '旭' => '旭',
+ '旮' => '旭',
+ '反' => '反',
+ '昄' => '反',
+ '昆' => '崐',
+ '升' => '升',
+ '昇' => '升',
+ '昚' => '愼',
+ '昊' => '昊',
+ '昦' => '昊',
+ '是' => '是',
+ '昰' => '是',
+ '时' => '时',
+ '時' => '时',
+ '晃' => '晃',
+ '晄' => '晃',
+ '晉' => '晉',
+ '晋' => '晉',
+ '晜' => '崐',
+ '昼' => '昼',
+ '晝' => '昼',
+ '䀿' => '䀿',
+ '晣' => '䀿',
+ '晚' => '晚',
+ '晩' => '晚',
+ '晓' => '晓',
+ '暁' => '晓',
+ '晕' => '晕',
+ '暈' => '晕',
+ '晖' => '晖',
+ '暉' => '晖',
+ '映' => '映',
+ '暎' => '映',
+ '晻' => '晻',
+ '暗' => '晻',
+ '旸' => '旸',
+ '暘' => '旸',
+ '暦' => '历',
+ '暂' => '暂',
+ '暫' => '暂',
+ '昵' => '昵',
+ '暱' => '昵',
+ '了' => '了',
+ '暸' => '了',
+ '暨' => '暨',
+ '曁' => '暨',
+ '晔' => '晔',
+ '曄' => '晔',
+ '曅' => '晔',
+ '曆' => '历',
+ '昙' => '昙',
+ '曇' => '昙',
+ '曉' => '晓',
+ '昲' => '昲',
+ '曊' => '昲',
+ '曏' => '向',
+ '暧' => '暧',
+ '曖' => '暧',
+ '旷' => '旷',
+ '曠' => '旷',
+ '叠' => '叠',
+ '曡' => '叠',
+ '昽' => '昽',
+ '曨' => '昽',
+ '晒' => '晒',
+ '曬' => '晒',
+ '曳' => '曳',
+ '曵' => '曳',
+ '㫚' => '㫚',
+ '曶' => '㫚',
+ '书' => '书',
+ '書' => '书',
+ '曹' => '曹',
+ '曺' => '曹',
+ '会' => '会',
+ '會' => '会',
+ '朖' => '朖',
+ '朗' => '朖',
+ '朞' => '朞',
+ '期' => '朞',
+ '望' => '望',
+ '朢' => '望',
+ '夲' => '夲',
+ '本' => '夲',
+ '札' => '剳',
+ '朮' => '朮',
+ '术' => '朮',
+ '朵' => '朵',
+ '朶' => '朵',
+ '朿' => '刺',
+ '圬' => '圬',
+ '杇' => '圬',
+ '來' => '來',
+ '来' => '來',
+ '傑' => '傑',
+ '杰' => '傑',
+ '东' => '东',
+ '東' => '东',
+ '松' => '松',
+ '枀' => '松',
+ '构' => '冓',
+ '朼' => '朼',
+ '枇' => '朼',
+ '拐' => '拐',
+ '枴' => '拐',
+ '杮' => '杮',
+ '枾' => '杮',
+ '奈' => '奈',
+ '柰' => '奈',
+ '查' => '查',
+ '査' => '查',
+ '柩' => '柩',
+ '柾' => '柩',
+ '柿' => '杮',
+ '柵' => '柵',
+ '栅' => '柵',
+ '枣' => '枣',
+ '栆' => '枣',
+ '墂' => '墂',
+ '标' => '墂',
+ '尌' => '尌',
+ '树' => '尌',
+ '契' => '契',
+ '栔' => '契',
+ '慄' => '慄',
+ '栗' => '慄',
+ '挍' => '挍',
+ '校' => '挍',
+ '柏' => '柏',
+ '栢' => '柏',
+ '桑' => '桑',
+ '桒' => '桑',
+ '杯' => '杯',
+ '桮' => '杯',
+ '柒' => '柒',
+ '桼' => '柒',
+ '杆' => '杆',
+ '桿' => '杆',
+ '杍' => '杍',
+ '梓' => '杍',
+ '栀' => '栀',
+ '梔' => '栀',
+ '枧' => '枧',
+ '梘' => '枧',
+ '条' => '条',
+ '條' => '条',
+ '枭' => '枭',
+ '梟' => '枭',
+ '夢' => '夢',
+ '梦' => '夢',
+ '梲' => '梲',
+ '棁' => '梲',
+ '弃' => '弃',
+ '棄' => '弃',
+ '棊' => '棊',
+ '棋' => '棊',
+ '枨' => '枨',
+ '棖' => '枨',
+ '棗' => '枣',
+ '栋' => '栋',
+ '棟' => '栋',
+ '㭎' => '㭎',
+ '棡' => '㭎',
+ '栈' => '栈',
+ '棧' => '栈',
+ '栖' => '栖',
+ '棲' => '栖',
+ '梾' => '梾',
+ '棶' => '梾',
+ '桌' => '桌',
+ '棹' => '桌',
+ '桠' => '桠',
+ '椏' => '桠',
+ '检' => '检',
+ '検' => '检',
+ '撱' => '撱',
+ '椭' => '撱',
+ '棕' => '棕',
+ '椶' => '棕',
+ '枮' => '枮',
+ '椹' => '枮',
+ '楂' => '查',
+ '杨' => '杨',
+ '楊' => '杨',
+ '揆' => '揆',
+ '楑' => '揆',
+ '枫' => '枫',
+ '楓' => '枫',
+ '楕' => '撱',
+ '椘' => '椘',
+ '楚' => '椘',
+ '枏' => '枏',
+ '楠' => '枏',
+ '桢' => '桢',
+ '楨' => '桢',
+ '业' => '业',
+ '業' => '业',
+ '梅' => '梅',
+ '楳' => '梅',
+ '极' => '极',
+ '極' => '极',
+ '乐' => '乐',
+ '楽' => '乐',
+ '楡' => '楡',
+ '榆' => '楡',
+ '桹' => '桹',
+ '榔' => '桹',
+ '桀' => '桀',
+ '榤' => '桀',
+ '榦' => '乾',
+ '搾' => '搾',
+ '榨' => '搾',
+ '杩' => '杩',
+ '榪' => '杩',
+ '栄' => '栄',
+ '榮' => '栄',
+ '榅' => '榅',
+ '榲' => '榅',
+ '榷' => '㩁',
+ '桤' => '桤',
+ '榿' => '桤',
+ '核' => '核',
+ '槅' => '核',
+ '構' => '冓',
+ '枪' => '枪',
+ '槍' => '枪',
+ '杠' => '杠',
+ '槓' => '杠',
+ '样' => '样',
+ '様' => '样',
+ '槇' => '槇',
+ '槙' => '槇',
+ '榎' => '榎',
+ '槚' => '榎',
+ '梹' => '梹',
+ '槟' => '梹',
+ '梿' => '梿',
+ '槤' => '梿',
+ '椠' => '椠',
+ '槧' => '椠',
+ '椁' => '椁',
+ '槨' => '椁',
+ '概' => '概',
+ '槪' => '概',
+ '桨' => '桨',
+ '槳' => '桨',
+ '椝' => '椝',
+ '槼' => '椝',
+ '桩' => '桩',
+ '樁' => '桩',
+ '樂' => '乐',
+ '枞' => '枞',
+ '樅' => '枞',
+ '梁' => '梁',
+ '樑' => '梁',
+ '楼' => '楼',
+ '樓' => '楼',
+ '標' => '墂',
+ '朻' => '朻',
+ '樛' => '朻',
+ '枢' => '枢',
+ '樞' => '枢',
+ '樣' => '样',
+ '榝' => '榝',
+ '樧' => '榝',
+ '权' => '权',
+ '権' => '权',
+ '桪' => '桪',
+ '樳' => '桪',
+ '朴' => '朴',
+ '樸' => '朴',
+ '樹' => '尌',
+ '桦' => '桦',
+ '樺' => '桦',
+ '榛' => '榛',
+ '樼' => '榛',
+ '樽' => '墫',
+ '椫' => '椫',
+ '樿' => '椫',
+ '桥' => '桥',
+ '橇' => '桥',
+ '桡' => '桡',
+ '橈' => '桡',
+ '橋' => '桥',
+ '樘' => '樘',
+ '橕' => '樘',
+ '机' => '机',
+ '機' => '机',
+ '橢' => '撱',
+ '横' => '横',
+ '橫' => '横',
+ '樐' => '樐',
+ '橹' => '樐',
+ '槥' => '槥',
+ '檅' => '槥',
+ '槜' => '槜',
+ '檇' => '槜',
+ '柽' => '柽',
+ '檉' => '柽',
+ '档' => '档',
+ '檔' => '档',
+ '枰' => '枰',
+ '檘' => '枰',
+ '檚' => '椘',
+ '桧' => '桧',
+ '檜' => '桧',
+ '檟' => '榎',
+ '檢' => '检',
+ '樯' => '樯',
+ '檣' => '樯',
+ '檁' => '檁',
+ '檩' => '檁',
+ '梼' => '梼',
+ '檮' => '梼',
+ '台' => '台',
+ '檯' => '台',
+ '檳' => '梹',
+ '柠' => '柠',
+ '檸' => '柠',
+ '槛' => '槛',
+ '檻' => '槛',
+ '檃' => '檃',
+ '檼' => '檃',
+ '櫂' => '桌',
+ '柜' => '柜',
+ '櫃' => '柜',
+ '櫓' => '樐',
+ '榈' => '榈',
+ '櫚' => '榈',
+ '栉' => '栉',
+ '櫛' => '栉',
+ '椟' => '椟',
+ '櫝' => '椟',
+ '橼' => '橼',
+ '櫞' => '橼',
+ '栎' => '栎',
+ '櫟' => '栎',
+ '橱' => '橱',
+ '櫥' => '橱',
+ '槠' => '槠',
+ '櫧' => '槠',
+ '栌' => '栌',
+ '櫨' => '栌',
+ '枥' => '枥',
+ '櫪' => '枥',
+ '橥' => '橥',
+ '櫫' => '橥',
+ '榇' => '榇',
+ '櫬' => '榇',
+ '栊' => '栊',
+ '櫳' => '栊',
+ '榉' => '榉',
+ '櫸' => '榉',
+ '樱' => '樱',
+ '櫻' => '樱',
+ '櫽' => '檃',
+ '栏' => '栏',
+ '欄' => '栏',
+ '欉' => '丛',
+ '權' => '权',
+ '椤' => '椤',
+ '欏' => '椤',
+ '栾' => '栾',
+ '欒' => '栾',
+ '榄' => '榄',
+ '欖' => '榄',
+ '欗' => '栏',
+ '棂' => '棂',
+ '欞' => '棂',
+ '懽' => '懽',
+ '欢' => '懽',
+ '慾' => '慾',
+ '欲' => '慾',
+ '欳' => '喟',
+ '嗽' => '嗽',
+ '欶' => '嗽',
+ '歎' => '叹',
+ '欧' => '欧',
+ '歐' => '欧',
+ '歓' => '懽',
+ '歕' => '喷',
+ '歛' => '敛',
+ '欤' => '欤',
+ '歟' => '欤',
+ '歡' => '懽',
+ '岐' => '岐',
+ '歧' => '岐',
+ '步' => '步',
+ '歩' => '步',
+ '歲' => '亗',
+ '歳' => '亗',
+ '歴' => '历',
+ '歷' => '历',
+ '歸' => '帰',
+ '歹' => '歹',
+ '歺' => '歹',
+ '夭' => '夭',
+ '殀' => '夭',
+ '歿' => '歿',
+ '殁' => '歿',
+ '残' => '残',
+ '殘' => '残',
+ '殒' => '殒',
+ '殞' => '殒',
+ '殇' => '殇',
+ '殤' => '殇',
+ '㱮' => '㱮',
+ '殨' => '㱮',
+ '殚' => '殚',
+ '殫' => '殚',
+ '僵' => '僵',
+ '殭' => '僵',
+ '殓' => '殓',
+ '殮' => '殓',
+ '殡' => '殡',
+ '殯' => '殡',
+ '歼' => '歼',
+ '殲' => '歼',
+ '杸' => '杸',
+ '殳' => '杸',
+ '慇' => '慇',
+ '殷' => '慇',
+ '杀' => '杀',
+ '殺' => '杀',
+ '壳' => '壳',
+ '殻' => '壳',
+ '殼' => '壳',
+ '毀' => '毀',
+ '毁' => '毀',
+ '敲' => '敲',
+ '毃' => '敲',
+ '殴' => '殴',
+ '毆' => '殴',
+ '医' => '医',
+ '毉' => '医',
+ '毎' => '毎',
+ '每' => '毎',
+ '毗' => '毗',
+ '毘' => '毗',
+ '斃' => '斃',
+ '毙' => '斃',
+ '毤' => '毤',
+ '毻' => '毤',
+ '毵' => '毵',
+ '毿' => '毵',
+ '毡' => '毡',
+ '氈' => '毡',
+ '氇' => '氇',
+ '氌' => '氇',
+ '气' => '气',
+ '氣' => '气',
+ '氢' => '氢',
+ '氫' => '氢',
+ '氩' => '氩',
+ '氬' => '氩',
+ '氲' => '氲',
+ '氳' => '氲',
+ '冰' => '冰',
+ '氷' => '冰',
+ '汇' => '匯',
+ '氾' => '氾',
+ '汎' => '氾',
+ '汙' => '汙',
+ '汚' => '汙',
+ '污' => '汙',
+ '汏' => '汏',
+ '汰' => '汏',
+ '决' => '决',
+ '決' => '决',
+ '沈' => '沈',
+ '沉' => '沈',
+ '冱' => '冱',
+ '沍' => '冱',
+ '冲' => '冲',
+ '沖' => '冲',
+ '伂' => '伂',
+ '沛' => '伂',
+ '沒' => '沒',
+ '没' => '沒',
+ '沱' => '沱',
+ '沲' => '沱',
+ '况' => '况',
+ '況' => '况',
+ '泛' => '氾',
+ '桴' => '桴',
+ '泭' => '桴',
+ '泊' => '泊',
+ '泺' => '泊',
+ '沢' => '沢',
+ '泽' => '沢',
+ '冽' => '冽',
+ '洌' => '冽',
+ '汜' => '汜',
+ '洍' => '汜',
+ '伊' => '伊',
+ '洢' => '伊',
+ '泄' => '泄',
+ '洩' => '泄',
+ '洁' => '洁',
+ '洯' => '洁',
+ '汹' => '汹',
+ '洶' => '汹',
+ '冾' => '冾',
+ '洽' => '冾',
+ '泒' => '泒',
+ '派' => '泒',
+ '浄' => '净',
+ '嚠' => '嚠',
+ '浏' => '嚠',
+ '汻' => '汻',
+ '浒' => '汻',
+ '浃' => '浃',
+ '浹' => '浃',
+ '涂' => '凃',
+ '泾' => '泾',
+ '涇' => '泾',
+ '泪' => '泪',
+ '涙' => '泪',
+ '涗' => '涗',
+ '涚' => '涗',
+ '凉' => '凉',
+ '涼' => '凉',
+ '淒' => '凄',
+ '汸' => '汸',
+ '淓' => '汸',
+ '泦' => '泦',
+ '淗' => '泦',
+ '淚' => '泪',
+ '浙' => '浙',
+ '淛' => '浙',
+ '倪' => '倪',
+ '淣' => '倪',
+ '淨' => '净',
+ '凌' => '凌',
+ '淩' => '凌',
+ '沦' => '沦',
+ '淪' => '沦',
+ '婬' => '婬',
+ '淫' => '婬',
+ '涞' => '涞',
+ '淶' => '涞',
+ '凊' => '凊',
+ '淸' => '凊',
+ '浅' => '浅',
+ '淺' => '浅',
+ '清' => '凊',
+ '济' => '济',
+ '済' => '济',
+ '涉' => '涉',
+ '渉' => '涉',
+ '淵' => '淵',
+ '渊' => '淵',
+ '涩' => '涩',
+ '渋' => '涩',
+ '淥' => '淥',
+ '渌' => '淥',
+ '巉' => '巉',
+ '渐' => '巉',
+ '渕' => '淵',
+ '渖' => '沈',
+ '涣' => '涣',
+ '渙' => '涣',
+ '减' => '减',
+ '減' => '减',
+ '沨' => '沨',
+ '渢' => '沨',
+ '涡' => '涡',
+ '渦' => '涡',
+ '渫' => '泄',
+ '测' => '测',
+ '測' => '测',
+ '渇' => '渇',
+ '渴' => '渇',
+ '浑' => '浑',
+ '渾' => '浑',
+ '湆' => '湆',
+ '湇' => '湆',
+ '凑' => '凑',
+ '湊' => '凑',
+ '浈' => '浈',
+ '湞' => '浈',
+ '涌' => '涌',
+ '湧' => '涌',
+ '汤' => '汤',
+ '湯' => '汤',
+ '沩' => '沩',
+ '溈' => '沩',
+ '厵' => '厵',
+ '源' => '厵',
+ '準' => '准',
+ '溙' => '汏',
+ '沟' => '沟',
+ '溝' => '沟',
+ '温' => '温',
+ '溫' => '温',
+ '浉' => '浉',
+ '溮' => '浉',
+ '泝' => '泝',
+ '溯' => '泝',
+ '涢' => '涢',
+ '溳' => '涢',
+ '尿' => '尿',
+ '溺' => '尿',
+ '湿' => '湿',
+ '溼' => '湿',
+ '沧' => '沧',
+ '滄' => '沧',
+ '汽' => '汽',
+ '滊' => '汽',
+ '涤' => '涤',
+ '滌' => '涤',
+ '滙' => '匯',
+ '満' => '満',
+ '满' => '満',
+ '浜' => '浜',
+ '滨' => '浜',
+ '沪' => '沪',
+ '滬' => '沪',
+ '滞' => '滞',
+ '滯' => '滞',
+ '渗' => '渗',
+ '滲' => '渗',
+ '卤' => '卤',
+ '滷' => '卤',
+ '滸' => '汻',
+ '浐' => '浐',
+ '滻' => '浐',
+ '滚' => '滚',
+ '滾' => '滚',
+ '滿' => '満',
+ '渔' => '渔',
+ '漁' => '渔',
+ '漅' => '巢',
+ '漆' => '柒',
+ '溇' => '溇',
+ '漊' => '溇',
+ '溉' => '溉',
+ '漑' => '溉',
+ '沤' => '沤',
+ '漚' => '沤',
+ '汉' => '汉',
+ '漢' => '汉',
+ '涟' => '涟',
+ '漣' => '涟',
+ '洼' => '洼',
+ '漥' => '洼',
+ '漧' => '乾',
+ '渍' => '渍',
+ '漬' => '渍',
+ '涨' => '涨',
+ '漲' => '涨',
+ '溆' => '溆',
+ '漵' => '溆',
+ '漸' => '巉',
+ '浆' => '浆',
+ '漿' => '浆',
+ '漎' => '漎',
+ '潀' => '漎',
+ '滫' => '滫',
+ '潃' => '滫',
+ '漱' => '漱',
+ '潄' => '漱',
+ '泼' => '泼',
+ '潑' => '泼',
+ '潔' => '洁',
+ '潙' => '沩',
+ '潛' => '潛',
+ '潜' => '潛',
+ '润' => '润',
+ '潤' => '润',
+ '溱' => '溱',
+ '潧' => '溱',
+ '潨' => '漎',
+ '浔' => '浔',
+ '潯' => '浔',
+ '溃' => '溃',
+ '潰' => '溃',
+ '滗' => '滗',
+ '潷' => '滗',
+ '涠' => '涠',
+ '潿' => '涠',
+ '澀' => '涩',
+ '澁' => '涩',
+ '澂' => '澂',
+ '澄' => '澂',
+ '浇' => '浇',
+ '澆' => '浇',
+ '涝' => '涝',
+ '澇' => '涝',
+ '溜' => '溜',
+ '澑' => '溜',
+ '浩' => '浩',
+ '澔' => '浩',
+ '涧' => '涧',
+ '澗' => '涧',
+ '潟' => '潟',
+ '澙' => '潟',
+ '渑' => '渑',
+ '澠' => '渑',
+ '浣' => '浣',
+ '澣' => '浣',
+ '澤' => '沢',
+ '滪' => '滪',
+ '澦' => '滪',
+ '泶' => '泶',
+ '澩' => '泶',
+ '泠' => '泠',
+ '澪' => '泠',
+ '漫' => '漫',
+ '澫' => '漫',
+ '浍' => '浍',
+ '澮' => '浍',
+ '淀' => '淀',
+ '澱' => '淀',
+ '淡' => '淡',
+ '澹' => '淡',
+ '㳠' => '㳠',
+ '澾' => '㳠',
+ '浊' => '浊',
+ '濁' => '浊',
+ '浓' => '浓',
+ '濃' => '浓',
+ '濄' => '涡',
+ '濇' => '涩',
+ '沵' => '沵',
+ '濔' => '沵',
+ '濕' => '湿',
+ '泞' => '泞',
+ '濘' => '泞',
+ '溁' => '溁',
+ '濚' => '溁',
+ '懞' => '懞',
+ '濛' => '懞',
+ '浕' => '浕',
+ '濜' => '浕',
+ '濟' => '济',
+ '涛' => '涛',
+ '濤' => '涛',
+ '滥' => '滥',
+ '濫' => '滥',
+ '浚' => '浚',
+ '濬' => '浚',
+ '潍' => '潍',
+ '濰' => '潍',
+ '濱' => '浜',
+ '濳' => '潛',
+ '溅' => '溅',
+ '濺' => '溅',
+ '濼' => '泊',
+ '滤' => '滤',
+ '濾' => '滤',
+ '漾' => '漾',
+ '瀁' => '漾',
+ '澛' => '澛',
+ '瀂' => '澛',
+ '滢' => '滢',
+ '瀅' => '滢',
+ '渎' => '渎',
+ '瀆' => '渎',
+ '汪' => '汪',
+ '瀇' => '汪',
+ '泻' => '泻',
+ '瀉' => '泻',
+ '瀋' => '沈',
+ '瀏' => '嚠',
+ '瀒' => '涩',
+ '濒' => '濒',
+ '瀕' => '濒',
+ '泸' => '泸',
+ '瀘' => '泸',
+ '沥' => '沥',
+ '瀝' => '沥',
+ '潇' => '潇',
+ '瀟' => '潇',
+ '潆' => '潆',
+ '瀠' => '潆',
+ '濻' => '濻',
+ '瀢' => '濻',
+ '潴' => '潴',
+ '瀦' => '潴',
+ '泷' => '泷',
+ '瀧' => '泷',
+ '濑' => '濑',
+ '瀨' => '濑',
+ '瀬' => '濑',
+ '瀰' => '冞',
+ '潋' => '潋',
+ '瀲' => '潋',
+ '澜' => '澜',
+ '瀾' => '澜',
+ '灁' => '淵',
+ '沣' => '沣',
+ '灃' => '沣',
+ '滠' => '滠',
+ '灄' => '滠',
+ '潅' => '潅',
+ '灌' => '潅',
+ '洒' => '洒',
+ '灑' => '洒',
+ '滟' => '滟',
+ '灔' => '滟',
+ '漓' => '漓',
+ '灕' => '漓',
+ '滩' => '滩',
+ '灘' => '滩',
+ '灏' => '灏',
+ '灝' => '灏',
+ '湾' => '湾',
+ '灣' => '湾',
+ '滦' => '滦',
+ '灤' => '滦',
+ '灧' => '滟',
+ '灩' => '滟',
+ '滅' => '滅',
+ '灭' => '滅',
+ '光' => '光',
+ '灮' => '光',
+ '災' => '災',
+ '灾' => '災',
+ '炅' => '炅',
+ '炔' => '炅',
+ '匟' => '匟',
+ '炕' => '匟',
+ '炚' => '光',
+ '曌' => '曌',
+ '炤' => '曌',
+ '炮' => '炮',
+ '炰' => '炮',
+ '昺' => '昺',
+ '炳' => '昺',
+ '奌' => '奌',
+ '点' => '奌',
+ '为' => '为',
+ '為' => '为',
+ '乌' => '乌',
+ '烏' => '乌',
+ '烖' => '災',
+ '灴' => '灴',
+ '烘' => '灴',
+ '烡' => '光',
+ '炯' => '炯',
+ '烱' => '炯',
+ '烃' => '烃',
+ '烴' => '烃',
+ '烺' => '朖',
+ '烉' => '烉',
+ '焕' => '烉',
+ '炃' => '炃',
+ '焚' => '炃',
+ '无' => '无',
+ '無' => '无',
+ '惸' => '惸',
+ '焭' => '惸',
+ '炼' => '炼',
+ '煉' => '炼',
+ '炜' => '炜',
+ '煒' => '炜',
+ '暖' => '暖',
+ '煖' => '暖',
+ '烟' => '烟',
+ '煙' => '烟',
+ '烬' => '烬',
+ '煡' => '烬',
+ '煢' => '惸',
+ '煥' => '烉',
+ '照' => '曌',
+ '烦' => '烦',
+ '煩' => '烦',
+ '炀' => '炀',
+ '煬' => '炀',
+ '煑' => '煑',
+ '煮' => '煑',
+ '煴' => '煴',
+ '熅' => '煴',
+ '炝' => '炝',
+ '熗' => '炝',
+ '熈' => '熈',
+ '熙' => '熈',
+ '热' => '热',
+ '熱' => '热',
+ '熹' => '熹',
+ '熺' => '熹',
+ '炽' => '炽',
+ '熾' => '炽',
+ '烨' => '烨',
+ '燁' => '烨',
+ '焰' => '焰',
+ '燄' => '焰',
+ '焌' => '焌',
+ '燇' => '焌',
+ '灯' => '灯',
+ '燈' => '灯',
+ '炖' => '炖',
+ '燉' => '炖',
+ '烧' => '烧',
+ '燒' => '烧',
+ '烂' => '烂',
+ '燗' => '烂',
+ '烫' => '烫',
+ '燙' => '烫',
+ '煚' => '煚',
+ '燛' => '煚',
+ '焖' => '焖',
+ '燜' => '焖',
+ '営' => '営',
+ '營' => '営',
+ '煰' => '煰',
+ '燥' => '煰',
+ '灿' => '灿',
+ '燦' => '灿',
+ '烛' => '烛',
+ '燭' => '烛',
+ '煨' => '煨',
+ '燰' => '煨',
+ '烩' => '烩',
+ '燴' => '烩',
+ '燣' => '燣',
+ '燷' => '燣',
+ '熏' => '熏',
+ '燻' => '熏',
+ '燼' => '烬',
+ '焘' => '焘',
+ '燾' => '焘',
+ '曜' => '曜',
+ '燿' => '曜',
+ '烁' => '烁',
+ '爍' => '烁',
+ '炉' => '炉',
+ '爐' => '炉',
+ '燨' => '燨',
+ '爔' => '燨',
+ '爛' => '烂',
+ '爁' => '爁',
+ '爦' => '爁',
+ '燯' => '燯',
+ '爧' => '燯',
+ '争' => '争',
+ '爭' => '争',
+ '愛' => '愛',
+ '爱' => '愛',
+ '爲' => '为',
+ '爷' => '爷',
+ '爺' => '爷',
+ '俎' => '俎',
+ '爼' => '俎',
+ '慡' => '慡',
+ '爽' => '慡',
+ '爾' => '尒',
+ '丬' => '丬',
+ '爿' => '丬',
+ '床' => '床',
+ '牀' => '床',
+ '牆' => '墙',
+ '榜' => '榜',
+ '牓' => '榜',
+ '牍' => '牍',
+ '牘' => '牍',
+ '牚' => '撐',
+ '它' => '它',
+ '牠' => '它',
+ '氂' => '氂',
+ '牦' => '氂',
+ '牴' => '扺',
+ '牵' => '牵',
+ '牽' => '牵',
+ '犁' => '犁',
+ '犂' => '犁',
+ '奔' => '奔',
+ '犇' => '奔',
+ '犛' => '氂',
+ '犊' => '犊',
+ '犢' => '犊',
+ '牺' => '牺',
+ '犧' => '牺',
+ '状' => '状',
+ '狀' => '状',
+ '狂' => '狂',
+ '狅' => '狂',
+ '仲' => '仲',
+ '狆' => '仲',
+ '佬' => '佬',
+ '狫' => '佬',
+ '狭' => '狭',
+ '狹' => '狭',
+ '狈' => '狈',
+ '狽' => '狈',
+ '猒' => '厌',
+ '狰' => '狰',
+ '猙' => '狰',
+ '犹' => '犹',
+ '猶' => '犹',
+ '狲' => '狲',
+ '猻' => '狲',
+ '狯' => '狯',
+ '猾' => '狯',
+ '犸' => '犸',
+ '獁' => '犸',
+ '呆' => '呆',
+ '獃' => '呆',
+ '狱' => '狱',
+ '獄' => '狱',
+ '狮' => '狮',
+ '獅' => '狮',
+ '獉' => '榛',
+ '獎' => '奖',
+ '僮' => '僮',
+ '獞' => '僮',
+ '狷' => '狷',
+ '獧' => '狷',
+ '独' => '独',
+ '獨' => '独',
+ '獪' => '狯',
+ '猃' => '猃',
+ '獫' => '猃',
+ '狝' => '狝',
+ '獮' => '狝',
+ '狞' => '狞',
+ '獰' => '狞',
+ '猎' => '猎',
+ '獵' => '猎',
+ '犷' => '犷',
+ '獷' => '犷',
+ '兽' => '兽',
+ '獸' => '兽',
+ '獭' => '獭',
+ '獺' => '獭',
+ '献' => '献',
+ '獻' => '献',
+ '猕' => '猕',
+ '獼' => '猕',
+ '猡' => '猡',
+ '玀' => '猡',
+ '玁' => '猃',
+ '妙' => '妙',
+ '玅' => '妙',
+ '兹' => '兹',
+ '玆' => '兹',
+ '玟' => '玟',
+ '珉' => '玟',
+ '珍' => '珍',
+ '珎' => '珍',
+ '圭' => '圭',
+ '珪' => '圭',
+ '佩' => '佩',
+ '珮' => '佩',
+ '现' => '现',
+ '現' => '现',
+ '毬' => '毬',
+ '球' => '毬',
+ '琝' => '玟',
+ '彫' => '彫',
+ '琱' => '彫',
+ '珲' => '珲',
+ '琿' => '珲',
+ '珶' => '珶',
+ '瑅' => '珶',
+ '玮' => '玮',
+ '瑋' => '玮',
+ '玚' => '玚',
+ '瑒' => '玚',
+ '琐' => '琐',
+ '瑣' => '琐',
+ '玛' => '玛',
+ '瑪' => '玛',
+ '琅' => '琅',
+ '瑯' => '琅',
+ '玱' => '玱',
+ '瑲' => '玱',
+ '瑤' => '瑤',
+ '瑶' => '瑤',
+ '琍' => '琍',
+ '璃' => '琍',
+ '琁' => '琁',
+ '璇' => '琁',
+ '琏' => '琏',
+ '璉' => '琏',
+ '璗' => '玚',
+ '琼' => '琼',
+ '璚' => '琼',
+ '琎' => '琎',
+ '璡' => '琎',
+ '玑' => '玑',
+ '璣' => '玑',
+ '瑷' => '瑷',
+ '璦' => '瑷',
+ '珰' => '珰',
+ '璫' => '珰',
+ '环' => '环',
+ '環' => '环',
+ '玙' => '玙',
+ '璵' => '玙',
+ '瑸' => '瑸',
+ '璸' => '瑸',
+ '玺' => '玺',
+ '璽' => '玺',
+ '璿' => '琁',
+ '瓊' => '琼',
+ '珑' => '珑',
+ '瓏' => '珑',
+ '璎' => '璎',
+ '瓔' => '璎',
+ '瓒' => '瓒',
+ '瓚' => '瓒',
+ '瓡' => '執',
+ '瓶' => '瓶',
+ '甁' => '瓶',
+ '瓷' => '瓷',
+ '甆' => '瓷',
+ '瓯' => '瓯',
+ '甌' => '瓯',
+ '瓮' => '瓮',
+ '甕' => '瓮',
+ '甇' => '甇',
+ '甖' => '甇',
+ '甛' => '甛',
+ '甜' => '甛',
+ '甞' => '嘗',
+ '产' => '产',
+ '產' => '产',
+ '産' => '产',
+ '囌' => '囌',
+ '甦' => '囌',
+ '圢' => '圢',
+ '町' => '圢',
+ '氓' => '氓',
+ '甿' => '氓',
+ '暢' => '暢',
+ '畅' => '暢',
+ '亩' => '亩',
+ '畆' => '亩',
+ '堺' => '堺',
+ '界' => '堺',
+ '畍' => '堺',
+ '甽' => '甽',
+ '畎' => '甽',
+ '愄' => '愄',
+ '畏' => '愄',
+ '畄' => '畄',
+ '留' => '畄',
+ '畝' => '亩',
+ '毕' => '毕',
+ '畢' => '毕',
+ '略' => '略',
+ '畧' => '略',
+ '画' => '画',
+ '畫' => '画',
+ '畬' => '畬',
+ '畭' => '畬',
+ '畮' => '亩',
+ '异' => '异',
+ '異' => '异',
+ '畲' => '畬',
+ '畵' => '画',
+ '當' => '噹',
+ '墥' => '墥',
+ '畽' => '墥',
+ '疃' => '墥',
+ '畴' => '畴',
+ '疇' => '畴',
+ '疉' => '叠',
+ '疊' => '叠',
+ '匹' => '匹',
+ '疋' => '匹',
+ '恫' => '恫',
+ '痌' => '恫',
+ '痖' => '哑',
+ '痉' => '痉',
+ '痙' => '痉',
+ '疿' => '疿',
+ '痱' => '疿',
+ '淋' => '淋',
+ '痲' => '淋',
+ '痳' => '淋',
+ '悸' => '悸',
+ '痵' => '悸',
+ '疪' => '疪',
+ '痹' => '疪',
+ '痺' => '疪',
+ '瘂' => '哑',
+ '愈' => '愈',
+ '瘉' => '愈',
+ '疯' => '疯',
+ '瘋' => '疯',
+ '疡' => '疡',
+ '瘍' => '疡',
+ '痪' => '痪',
+ '瘓' => '痪',
+ '瘖' => '喑',
+ '瘗' => '瘗',
+ '瘞' => '瘗',
+ '疮' => '疮',
+ '瘡' => '疮',
+ '瘣' => '坏',
+ '疟' => '疟',
+ '瘧' => '疟',
+ '瘆' => '瘆',
+ '瘮' => '瘆',
+ '疭' => '疭',
+ '瘲' => '疭',
+ '瘘' => '瘘',
+ '瘺' => '瘘',
+ '瘻' => '瘘',
+ '瘽' => '勤',
+ '疗' => '疗',
+ '療' => '疗',
+ '痨' => '痨',
+ '癆' => '痨',
+ '痫' => '痫',
+ '癇' => '痫',
+ '癈' => '废',
+ '瘅' => '瘅',
+ '癉' => '瘅',
+ '癒' => '愈',
+ '疠' => '疠',
+ '癘' => '疠',
+ '癛' => '癛',
+ '癝' => '癛',
+ '瘪' => '瘪',
+ '癟' => '瘪',
+ '痴' => '痴',
+ '癡' => '痴',
+ '痒' => '痒',
+ '癢' => '痒',
+ '疖' => '疖',
+ '癤' => '疖',
+ '症' => '症',
+ '癥' => '症',
+ '疬' => '疬',
+ '癧' => '疬',
+ '癞' => '癞',
+ '癩' => '癞',
+ '瘨' => '瘨',
+ '癫' => '瘨',
+ '癣' => '癣',
+ '癬' => '癣',
+ '瘿' => '瘿',
+ '癭' => '瘿',
+ '瘾' => '瘾',
+ '癮' => '瘾',
+ '痈' => '痈',
+ '癰' => '痈',
+ '瘫' => '瘫',
+ '癱' => '瘫',
+ '癲' => '瘨',
+ '發' => '发',
+ '皁' => '皁',
+ '皂' => '皁',
+ '皈' => '帰',
+ '皋' => '皋',
+ '皐' => '皋',
+ '暠' => '暠',
+ '皓' => '暠',
+ '晥' => '晥',
+ '皖' => '晥',
+ '皑' => '皑',
+ '皚' => '皑',
+ '皜' => '暠',
+ '皎' => '皎',
+ '皦' => '皎',
+ '疱' => '疱',
+ '皰' => '疱',
+ '皲' => '皲',
+ '皸' => '皲',
+ '皱' => '皱',
+ '皺' => '皱',
+ '皷' => '皷',
+ '皼' => '皷',
+ '盃' => '杯',
+ '盅' => '冲',
+ '盇' => '盇',
+ '盍' => '盇',
+ '琖' => '琖',
+ '盏' => '琖',
+ '塩' => '塩',
+ '盐' => '塩',
+ '洀' => '洀',
+ '盘' => '洀',
+ '盗' => '盗',
+ '盜' => '盗',
+ '盞' => '琖',
+ '盡' => '儘',
+ '监' => '监',
+ '監' => '监',
+ '盤' => '洀',
+ '卢' => '卢',
+ '盧' => '卢',
+ '潒' => '潒',
+ '盪' => '潒',
+ '盭' => '戻',
+ '盲' => '盲',
+ '盳' => '盲',
+ '眘' => '愼',
+ '眞' => '眞',
+ '真' => '眞',
+ '众' => '众',
+ '眾' => '众',
+ '困' => '困',
+ '睏' => '困',
+ '睁' => '睁',
+ '睜' => '睁',
+ '睐' => '睐',
+ '睞' => '睐',
+ '眷' => '眷',
+ '睠' => '眷',
+ '睪' => '睪',
+ '睾' => '睪',
+ '叡' => '叡',
+ '睿' => '叡',
+ '偢' => '偢',
+ '瞅' => '偢',
+ '眯' => '眯',
+ '瞇' => '眯',
+ '眍' => '眍',
+ '瞘' => '眍',
+ '䁖' => '䁖',
+ '瞜' => '䁖',
+ '瞒' => '瞒',
+ '瞞' => '瞒',
+ '瞚' => '瞚',
+ '瞬' => '瞚',
+ '瞭' => '了',
+ '瞆' => '瞆',
+ '瞶' => '瞆',
+ '睑' => '睑',
+ '瞼' => '睑',
+ '矇' => '懞',
+ '矈' => '矈',
+ '矏' => '矈',
+ '眬' => '眬',
+ '矓' => '眬',
+ '瞰' => '瞰',
+ '矙' => '瞰',
+ '瞩' => '瞩',
+ '矚' => '瞩',
+ '榘' => '榘',
+ '矩' => '榘',
+ '矫' => '矫',
+ '矯' => '矫',
+ '揅' => '揅',
+ '研' => '揅',
+ '柱' => '柱',
+ '砫' => '柱',
+ '砲' => '炮',
+ '朱' => '朱',
+ '硃' => '朱',
+ '硏' => '揅',
+ '硁' => '硁',
+ '硜' => '硁',
+ '硖' => '硖',
+ '硤' => '硖',
+ '砗' => '砗',
+ '硨' => '砗',
+ '峺' => '峺',
+ '硬' => '峺',
+ '塙' => '塙',
+ '确' => '塙',
+ '砚' => '砚',
+ '硯' => '砚',
+ '碁' => '棊',
+ '椗' => '椗',
+ '碇' => '椗',
+ '砕' => '砕',
+ '碎' => '砕',
+ '碕' => '埼',
+ '碞' => '喦',
+ '砣' => '砣',
+ '碢' => '砣',
+ '硙' => '硙',
+ '碨' => '硙',
+ '硕' => '硕',
+ '碩' => '硕',
+ '砧' => '砧',
+ '碪' => '砧',
+ '砀' => '砀',
+ '碭' => '砀',
+ '瑙' => '瑙',
+ '碯' => '瑙',
+ '掽' => '掽',
+ '碰' => '掽',
+ '硷' => '硷',
+ '碱' => '硷',
+ '砜' => '砜',
+ '碸' => '砜',
+ '確' => '塙',
+ '碻' => '塙',
+ '码' => '码',
+ '碼' => '码',
+ '滑' => '滑',
+ '磆' => '滑',
+ '磑' => '硙',
+ '砖' => '砖',
+ '磚' => '砖',
+ '碌' => '碌',
+ '磟' => '碌',
+ '硵' => '硵',
+ '磠' => '硵',
+ '碜' => '碜',
+ '磣' => '碜',
+ '磊' => '磊',
+ '磥' => '磊',
+ '碛' => '碛',
+ '磧' => '碛',
+ '矶' => '矶',
+ '磯' => '矶',
+ '燐' => '燐',
+ '磷' => '燐',
+ '硗' => '硗',
+ '磽' => '硗',
+ '硚' => '硚',
+ '礄' => '硚',
+ '礆' => '硷',
+ '础' => '础',
+ '礎' => '础',
+ '碍' => '碍',
+ '礙' => '碍',
+ '碝' => '碝',
+ '礝' => '碝',
+ '矿' => '矿',
+ '礦' => '矿',
+ '砺' => '砺',
+ '礪' => '砺',
+ '砾' => '砾',
+ '礫' => '砾',
+ '矾' => '矾',
+ '礬' => '矾',
+ '礭' => '塙',
+ '礮' => '炮',
+ '砻' => '砻',
+ '礱' => '砻',
+ '礤' => '礤',
+ '礸' => '礤',
+ '礹' => '喦',
+ '祅' => '䚶',
+ '祌' => '冲',
+ '柴' => '柴',
+ '祡' => '柴',
+ '旅' => '旅',
+ '祣' => '旅',
+ '祝' => '祝',
+ '祩' => '祝',
+ '禀' => '廩',
+ '祿' => '祿',
+ '禄' => '祿',
+ '祸' => '祸',
+ '禍' => '祸',
+ '祯' => '祯',
+ '禎' => '祯',
+ '祎' => '祎',
+ '禕' => '祎',
+ '祃' => '祃',
+ '禡' => '祃',
+ '祺' => '祺',
+ '禥' => '祺',
+ '御' => '御',
+ '禦' => '御',
+ '禅' => '禅',
+ '禪' => '禅',
+ '礼' => '礼',
+ '禮' => '礼',
+ '祢' => '祢',
+ '禰' => '祢',
+ '祷' => '祷',
+ '禱' => '祷',
+ '礿' => '礿',
+ '禴' => '礿',
+ '厶' => '厶',
+ '私' => '厶',
+ '禿' => '禿',
+ '秃' => '禿',
+ '年' => '年',
+ '秊' => '年',
+ '祇' => '祇',
+ '秖' => '祇',
+ '祕' => '祕',
+ '秘' => '祕',
+ '偁' => '偁',
+ '称' => '偁',
+ '希' => '希',
+ '稀' => '希',
+ '秆' => '秆',
+ '稈' => '秆',
+ '稅' => '稅',
+ '税' => '稅',
+ '棱' => '棱',
+ '稜' => '棱',
+ '稟' => '廩',
+ '秸' => '秸',
+ '稭' => '秸',
+ '种' => '种',
+ '種' => '种',
+ '稱' => '偁',
+ '稲' => '稲',
+ '稻' => '稲',
+ '乩' => '乩',
+ '稽' => '乩',
+ '稾' => '稾',
+ '稿' => '稾',
+ '䅟' => '䅟',
+ '穇' => '䅟',
+ '稚' => '稚',
+ '穉' => '稚',
+ '稑' => '稑',
+ '穋' => '稑',
+ '稣' => '稣',
+ '穌' => '稣',
+ '积' => '积',
+ '積' => '积',
+ '秋' => '秋',
+ '穐' => '秋',
+ '穂' => '穂',
+ '穗' => '穂',
+ '穟' => '穂',
+ '秾' => '秾',
+ '穠' => '秾',
+ '穑' => '穑',
+ '穡' => '穑',
+ '秽' => '秽',
+ '穢' => '秽',
+ '稳' => '稳',
+ '穩' => '稳',
+ '獲' => '獲',
+ '穫' => '獲',
+ '穞' => '穞',
+ '穭' => '穞',
+ '岤' => '岤',
+ '穴' => '岤',
+ '挖' => '挖',
+ '穵' => '挖',
+ '宇' => '宇',
+ '穻' => '宇',
+ '窓' => '窓',
+ '窗' => '窓',
+ '堷' => '堷',
+ '窨' => '堷',
+ '窝' => '窝',
+ '窩' => '窝',
+ '窪' => '洼',
+ '寠' => '寠',
+ '窭' => '寠',
+ '穷' => '穷',
+ '窮' => '穷',
+ '窑' => '窑',
+ '窯' => '窑',
+ '窰' => '窑',
+ '窎' => '窎',
+ '窵' => '窎',
+ '窶' => '寠',
+ '窥' => '窥',
+ '窺' => '窥',
+ '窜' => '窜',
+ '竄' => '窜',
+ '窍' => '窍',
+ '竅' => '窍',
+ '窦' => '窦',
+ '竇' => '窦',
+ '灶' => '灶',
+ '竈' => '灶',
+ '窃' => '窃',
+ '竊' => '窃',
+ '奇' => '奇',
+ '竒' => '奇',
+ '竝' => '並',
+ '俟' => '俟',
+ '竢' => '俟',
+ '竑' => '竑',
+ '竤' => '竑',
+ '竖' => '竖',
+ '竪' => '竖',
+ '竞' => '竞',
+ '競' => '竞',
+ '竸' => '竞',
+ '竺' => '竺',
+ '笁' => '竺',
+ '巴' => '巴',
+ '笆' => '巴',
+ '咲' => '咲',
+ '笑' => '咲',
+ '矢' => '矢',
+ '笶' => '矢',
+ '牋' => '牋',
+ '笺' => '牋',
+ '笔' => '笔',
+ '筆' => '笔',
+ '笻' => '笻',
+ '筇' => '笻',
+ '笅' => '笅',
+ '筊' => '笅',
+ '斤' => '斤',
+ '筋' => '斤',
+ '笋' => '笋',
+ '筍' => '笋',
+ '畣' => '畣',
+ '答' => '畣',
+ '策' => '策',
+ '筞' => '策',
+ '笕' => '笕',
+ '筧' => '笕',
+ '筒' => '筒',
+ '筩' => '筒',
+ '祘' => '祘',
+ '筭' => '祘',
+ '笮' => '笮',
+ '筰' => '笮',
+ '筴' => '策',
+ '筱' => '筱',
+ '筿' => '筱',
+ '箇' => '个',
+ '箋' => '牋',
+ '竾' => '竾',
+ '箎' => '竾',
+ '筝' => '筝',
+ '箏' => '筝',
+ '算' => '祘',
+ '箚' => '剳',
+ '拑' => '拑',
+ '箝' => '拑',
+ '棰' => '棰',
+ '箠' => '棰',
+ '筦' => '筦',
+ '管' => '筦',
+ '筑' => '筑',
+ '築' => '筑',
+ '箧' => '箧',
+ '篋' => '箧',
+ '筼' => '筼',
+ '篔' => '筼',
+ '箬' => '箬',
+ '篛' => '箬',
+ '篠' => '筱',
+ '笃' => '笃',
+ '篤' => '笃',
+ '筛' => '筛',
+ '篩' => '筛',
+ '篪' => '竾',
+ '笼' => '笼',
+ '篭' => '笼',
+ '筣' => '筣',
+ '篱' => '筣',
+ '彗' => '彗',
+ '篲' => '彗',
+ '筚' => '筚',
+ '篳' => '筚',
+ '笛' => '笛',
+ '篴' => '笛',
+ '箦' => '箦',
+ '簀' => '箦',
+ '筘' => '筘',
+ '簆' => '筘',
+ '箳' => '箳',
+ '簈' => '箳',
+ '篓' => '篓',
+ '簍' => '篓',
+ '篡' => '篡',
+ '簒' => '篡',
+ '箫' => '箫',
+ '簘' => '箫',
+ '箪' => '箪',
+ '簞' => '箪',
+ '简' => '简',
+ '簡' => '简',
+ '篑' => '篑',
+ '簣' => '篑',
+ '簫' => '箫',
+ '檐' => '檐',
+ '簷' => '檐',
+ '筜' => '筜',
+ '簹' => '筜',
+ '篝' => '篝',
+ '簼' => '篝',
+ '签' => '签',
+ '簽' => '签',
+ '帘' => '帘',
+ '簾' => '帘',
+ '篮' => '篮',
+ '籃' => '篮',
+ '籉' => '台',
+ '筹' => '筹',
+ '籌' => '筹',
+ '籖' => '签',
+ '籐' => '籐',
+ '籘' => '籐',
+ '箓' => '箓',
+ '籙' => '箓',
+ '篯' => '篯',
+ '籛' => '篯',
+ '箨' => '箨',
+ '籜' => '箨',
+ '篽' => '篽',
+ '籞' => '篽',
+ '籁' => '籁',
+ '籟' => '籁',
+ '籠' => '笼',
+ '籤' => '签',
+ '笾' => '笾',
+ '籩' => '笾',
+ '簖' => '簖',
+ '籪' => '簖',
+ '籬' => '筣',
+ '箩' => '箩',
+ '籮' => '箩',
+ '吁' => '吁',
+ '籲' => '吁',
+ '番' => '番',
+ '籵' => '番',
+ '秈' => '秈',
+ '籼' => '秈',
+ '秶' => '秶',
+ '粢' => '秶',
+ '粤' => '粤',
+ '粵' => '粤',
+ '粋' => '粋',
+ '粹' => '粋',
+ '稗' => '稗',
+ '粺' => '稗',
+ '粈' => '粈',
+ '糅' => '粈',
+ '稰' => '稰',
+ '糈' => '稰',
+ '粽' => '粽',
+ '糉' => '粽',
+ '爢' => '爢',
+ '糜' => '爢',
+ '糁' => '糁',
+ '糝' => '糁',
+ '粪' => '粪',
+ '糞' => '粪',
+ '穅' => '穅',
+ '糠' => '穅',
+ '粮' => '粮',
+ '糧' => '粮',
+ '糭' => '粽',
+ '糰' => '团',
+ '粝' => '粝',
+ '糲' => '粝',
+ '籴' => '籴',
+ '糴' => '籴',
+ '糱' => '糱',
+ '糵' => '糱',
+ '粜' => '粜',
+ '糶' => '粜',
+ '丝' => '丝',
+ '糸' => '丝',
+ '糹' => '丝',
+ '係' => '係',
+ '系' => '係',
+ '糺' => '糺',
+ '糾' => '糺',
+ '帋' => '帋',
+ '紙' => '帋',
+ '榡' => '榡',
+ '素' => '榡',
+ '紥' => '剳',
+ '䌷' => '䌷',
+ '紬' => '䌷',
+ '紮' => '剳',
+ '弦' => '弦',
+ '絃' => '弦',
+ '紲' => '紲',
+ '絏' => '紲',
+ '絋' => '絋',
+ '絖' => '絋',
+ '毧' => '毧',
+ '絨' => '毧',
+ '累' => '累',
+ '絫' => '累',
+ '絲' => '丝',
+ '絕' => '絕',
+ '絶' => '絕',
+ '紖' => '紖',
+ '絼' => '紖',
+ '紼' => '紼',
+ '綍' => '紼',
+ '捆' => '捆',
+ '綑' => '捆',
+ '経' => '経',
+ '經' => '経',
+ '綢' => '䌷',
+ '棨' => '棨',
+ '綮' => '棨',
+ '彩' => '彩',
+ '綵' => '彩',
+ '紧' => '紧',
+ '緊' => '紧',
+ '綏' => '綏',
+ '緌' => '綏',
+ '総' => '总',
+ '綠' => '綠',
+ '緑' => '綠',
+ '緒' => '緒',
+ '緖' => '緒',
+ '綫' => '綫',
+ '線' => '綫',
+ '緣' => '緣',
+ '縁' => '緣',
+ '縂' => '总',
+ '緪' => '緪',
+ '縆' => '緪',
+ '縍' => '帮',
+ '緼' => '緼',
+ '縕' => '緼',
+ '絛' => '絛',
+ '縚' => '絛',
+ '县' => '县',
+ '縣' => '县',
+ '縧' => '絛',
+ '摍' => '摍',
+ '縮' => '摍',
+ '縦' => '縦',
+ '縱' => '縦',
+ '孅' => '孅',
+ '縴' => '孅',
+ '絷' => '絷',
+ '縶' => '絷',
+ '總' => '总',
+ '勣' => '勣',
+ '績' => '勣',
+ '緐' => '緐',
+ '繁' => '緐',
+ '綳' => '綳',
+ '繃' => '綳',
+ '綉' => '綉',
+ '繍' => '綉',
+ '繖' => '伞',
+ '繡' => '綉',
+ '絵' => '絵',
+ '繢' => '絵',
+ '繈' => '繈',
+ '繦' => '繈',
+ '縄' => '縄',
+ '繩' => '縄',
+ '繪' => '絵',
+ '繫' => '係',
+ '継' => '継',
+ '繼' => '継',
+ '纊' => '絋',
+ '纍' => '累',
+ '纎' => '孅',
+ '纏' => '纏',
+ '纒' => '纏',
+ '才' => '才',
+ '纔' => '才',
+ '纖' => '孅',
+ '纉' => '纉',
+ '纘' => '纉',
+ '纟' => '丝',
+ '纠' => '糺',
+ '紆' => '紆',
+ '纡' => '紆',
+ '紅' => '紅',
+ '红' => '紅',
+ '紂' => '紂',
+ '纣' => '紂',
+ '纤' => '孅',
+ '紇' => '紇',
+ '纥' => '紇',
+ '約' => '約',
+ '约' => '約',
+ '級' => '級',
+ '级' => '級',
+ '紈' => '紈',
+ '纨' => '紈',
+ '纩' => '絋',
+ '紀' => '紀',
+ '纪' => '紀',
+ '紉' => '紉',
+ '纫' => '紉',
+ '緯' => '緯',
+ '纬' => '緯',
+ '紜' => '紜',
+ '纭' => '紜',
+ '紘' => '紘',
+ '纮' => '紘',
+ '純' => '純',
+ '纯' => '純',
+ '紕' => '紕',
+ '纰' => '紕',
+ '紗' => '紗',
+ '纱' => '紗',
+ '綱' => '綱',
+ '纲' => '綱',
+ '納' => '納',
+ '纳' => '納',
+ '紝' => '紝',
+ '纴' => '紝',
+ '纵' => '縦',
+ '綸' => '綸',
+ '纶' => '綸',
+ '紛' => '紛',
+ '纷' => '紛',
+ '纸' => '帋',
+ '紋' => '紋',
+ '纹' => '紋',
+ '紡' => '紡',
+ '纺' => '紡',
+ '紵' => '紵',
+ '纻' => '紵',
+ '纼' => '紖',
+ '紐' => '紐',
+ '纽' => '紐',
+ '紓' => '紓',
+ '纾' => '紓',
+ '线' => '綫',
+ '紺' => '紺',
+ '绀' => '紺',
+ '绁' => '紲',
+ '紱' => '紱',
+ '绂' => '紱',
+ '練' => '練',
+ '练' => '練',
+ '組' => '組',
+ '组' => '組',
+ '紳' => '紳',
+ '绅' => '紳',
+ '細' => '細',
+ '细' => '細',
+ '織' => '織',
+ '织' => '織',
+ '終' => '終',
+ '终' => '終',
+ '縐' => '縐',
+ '绉' => '縐',
+ '絆' => '絆',
+ '绊' => '絆',
+ '绋' => '紼',
+ '絀' => '絀',
+ '绌' => '絀',
+ '紹' => '紹',
+ '绍' => '紹',
+ '繹' => '繹',
+ '绎' => '繹',
+ '经' => '経',
+ '紿' => '紿',
+ '绐' => '紿',
+ '綁' => '綁',
+ '绑' => '綁',
+ '绒' => '毧',
+ '結' => '結',
+ '结' => '結',
+ '絝' => '絝',
+ '绔' => '絝',
+ '繞' => '繞',
+ '绕' => '繞',
+ '絰' => '絰',
+ '绖' => '絰',
+ '絎' => '絎',
+ '绗' => '絎',
+ '绘' => '絵',
+ '給' => '給',
+ '给' => '給',
+ '絢' => '絢',
+ '绚' => '絢',
+ '絳' => '絳',
+ '绛' => '絳',
+ '絡' => '絡',
+ '络' => '絡',
+ '绝' => '絕',
+ '絞' => '絞',
+ '绞' => '絞',
+ '統' => '統',
+ '统' => '統',
+ '綆' => '綆',
+ '绠' => '綆',
+ '綃' => '綃',
+ '绡' => '綃',
+ '絹' => '絹',
+ '绢' => '絹',
+ '绣' => '綉',
+ '綌' => '綌',
+ '绤' => '綌',
+ '绥' => '綏',
+ '绦' => '絛',
+ '继' => '継',
+ '綈' => '綈',
+ '绨' => '綈',
+ '绩' => '勣',
+ '绪' => '緒',
+ '綾' => '綾',
+ '绫' => '綾',
+ '續' => '續',
+ '续' => '續',
+ '綺' => '綺',
+ '绮' => '綺',
+ '緋' => '緋',
+ '绯' => '緋',
+ '綽' => '綽',
+ '绰' => '綽',
+ '緔' => '緔',
+ '绱' => '緔',
+ '緄' => '緄',
+ '绲' => '緄',
+ '绳' => '縄',
+ '維' => '維',
+ '维' => '維',
+ '綿' => '綿',
+ '绵' => '綿',
+ '綬' => '綬',
+ '绶' => '綬',
+ '绷' => '綳',
+ '绸' => '䌷',
+ '綯' => '綯',
+ '绹' => '綯',
+ '綹' => '綹',
+ '绺' => '綹',
+ '綣' => '綣',
+ '绻' => '綣',
+ '綜' => '綜',
+ '综' => '綜',
+ '綻' => '綻',
+ '绽' => '綻',
+ '綰' => '綰',
+ '绾' => '綰',
+ '绿' => '綠',
+ '綴' => '綴',
+ '缀' => '綴',
+ '緇' => '緇',
+ '缁' => '緇',
+ '緙' => '緙',
+ '缂' => '緙',
+ '緗' => '緗',
+ '缃' => '緗',
+ '緘' => '緘',
+ '缄' => '緘',
+ '緬' => '緬',
+ '缅' => '緬',
+ '纜' => '纜',
+ '缆' => '纜',
+ '緹' => '緹',
+ '缇' => '緹',
+ '緲' => '緲',
+ '缈' => '緲',
+ '緝' => '緝',
+ '缉' => '緝',
+ '缊' => '緼',
+ '缋' => '絵',
+ '緦' => '緦',
+ '缌' => '緦',
+ '綞' => '綞',
+ '缍' => '綞',
+ '緞' => '緞',
+ '缎' => '緞',
+ '緶' => '緶',
+ '缏' => '緶',
+ '缐' => '綫',
+ '緱' => '緱',
+ '缑' => '緱',
+ '縋' => '縋',
+ '缒' => '縋',
+ '緩' => '緩',
+ '缓' => '緩',
+ '締' => '締',
+ '缔' => '締',
+ '縷' => '縷',
+ '缕' => '縷',
+ '編' => '編',
+ '编' => '編',
+ '緡' => '緡',
+ '缗' => '緡',
+ '缘' => '緣',
+ '縉' => '縉',
+ '缙' => '縉',
+ '縛' => '縛',
+ '缚' => '縛',
+ '縟' => '縟',
+ '缛' => '縟',
+ '縝' => '縝',
+ '缜' => '縝',
+ '縫' => '縫',
+ '缝' => '縫',
+ '縗' => '縗',
+ '缞' => '縗',
+ '縞' => '縞',
+ '缟' => '縞',
+ '缠' => '纏',
+ '縭' => '縭',
+ '缡' => '縭',
+ '縊' => '縊',
+ '缢' => '縊',
+ '縑' => '縑',
+ '缣' => '縑',
+ '繽' => '繽',
+ '缤' => '繽',
+ '縹' => '縹',
+ '缥' => '縹',
+ '縵' => '縵',
+ '缦' => '縵',
+ '縲' => '縲',
+ '缧' => '縲',
+ '纓' => '纓',
+ '缨' => '纓',
+ '缩' => '摍',
+ '繆' => '繆',
+ '缪' => '繆',
+ '繅' => '繅',
+ '缫' => '繅',
+ '纈' => '纈',
+ '缬' => '纈',
+ '繚' => '繚',
+ '缭' => '繚',
+ '繕' => '繕',
+ '缮' => '繕',
+ '繒' => '繒',
+ '缯' => '繒',
+ '繮' => '繮',
+ '缰' => '繮',
+ '繾' => '繾',
+ '缱' => '繾',
+ '繰' => '繰',
+ '缲' => '繰',
+ '繯' => '繯',
+ '缳' => '繯',
+ '繳' => '繳',
+ '缴' => '繳',
+ '缵' => '纉',
+ '卸' => '卸',
+ '缷' => '卸',
+ '堈' => '堈',
+ '缸' => '堈',
+ '缾' => '瓶',
+ '罂' => '甇',
+ '罃' => '甇',
+ '罇' => '墫',
+ '罈' => '坛',
+ '罋' => '瓮',
+ '罌' => '甇',
+ '罎' => '坛',
+ '罏' => '垆',
+ '網' => '網',
+ '网' => '網',
+ '罣' => '挂',
+ '罘' => '罘',
+ '罦' => '罘',
+ '寘' => '寘',
+ '置' => '寘',
+ '罚' => '罚',
+ '罰' => '罚',
+ '傌' => '傌',
+ '罵' => '傌',
+ '罢' => '罢',
+ '罷' => '罢',
+ '罸' => '罚',
+ '罼' => '毕',
+ '罶' => '罶',
+ '羀' => '罶',
+ '罥' => '罥',
+ '羂' => '罥',
+ '羃' => '冪',
+ '罗' => '罗',
+ '羅' => '罗',
+ '罴' => '罴',
+ '羆' => '罴',
+ '羁' => '羁',
+ '羇' => '羁',
+ '羈' => '羁',
+ '媺' => '媺',
+ '美' => '媺',
+ '义' => '义',
+ '羛' => '义',
+ '羝' => '扺',
+ '羢' => '毧',
+ '羣' => '羣',
+ '群' => '羣',
+ '羟' => '羟',
+ '羥' => '羟',
+ '羡' => '羡',
+ '羨' => '羡',
+ '義' => '义',
+ '羮' => '羮',
+ '羹' => '羮',
+ '翄' => '翄',
+ '翅' => '翄',
+ '习' => '习',
+ '習' => '习',
+ '翆' => '翆',
+ '翠' => '翆',
+ '纛' => '纛',
+ '翢' => '纛',
+ '翨' => '翄',
+ '翚' => '翚',
+ '翬' => '翚',
+ '翭' => '翭',
+ '翵' => '翭',
+ '翱' => '翱',
+ '翶' => '翱',
+ '翘' => '翘',
+ '翹' => '翘',
+ '翺' => '翱',
+ '繙' => '繙',
+ '翻' => '繙',
+ '翙' => '翙',
+ '翽' => '翙',
+ '耀' => '曜',
+ '老' => '老',
+ '耂' => '老',
+ '攷' => '攷',
+ '考' => '攷',
+ '耇' => '耇',
+ '耈' => '耇',
+ '耉' => '耇',
+ '端' => '端',
+ '耑' => '端',
+ '秏' => '秏',
+ '耗' => '秏',
+ '秐' => '秐',
+ '耘' => '秐',
+ '刞' => '刞',
+ '耝' => '刞',
+ '枷' => '枷',
+ '耞' => '枷',
+ '借' => '借',
+ '耤' => '借',
+ '耧' => '耧',
+ '耬' => '耧',
+ '耢' => '耢',
+ '耮' => '耢',
+ '櫌' => '櫌',
+ '耰' => '櫌',
+ '恥' => '恥',
+ '耻' => '恥',
+ '聖' => '圣',
+ '婿' => '婿',
+ '聟' => '婿',
+ '联' => '联',
+ '聨' => '联',
+ '聡' => '聡',
+ '聪' => '聡',
+ '聫' => '联',
+ '聮' => '联',
+ '聯' => '联',
+ '聰' => '聡',
+ '声' => '声',
+ '聲' => '声',
+ '耸' => '耸',
+ '聳' => '耸',
+ '听' => '听',
+ '聴' => '听',
+ '聩' => '聩',
+ '聵' => '聩',
+ '聂' => '聂',
+ '聶' => '聂',
+ '职' => '职',
+ '職' => '职',
+ '聍' => '聍',
+ '聹' => '聍',
+ '聼' => '听',
+ '聽' => '听',
+ '聋' => '聋',
+ '聾' => '聋',
+ '聿' => '聿',
+ '肀' => '聿',
+ '粛' => '粛',
+ '肃' => '粛',
+ '肅' => '粛',
+ '四' => '四',
+ '肆' => '四',
+ '宍' => '宍',
+ '肉' => '宍',
+ '疘' => '疘',
+ '肛' => '疘',
+ '肣' => '函',
+ '朌' => '朌',
+ '肦' => '朌',
+ '肯' => '肯',
+ '肻' => '肯',
+ '冑' => '冑',
+ '胄' => '冑',
+ '肺' => '肺',
+ '胇' => '肺',
+ '朐' => '朐',
+ '胊' => '朐',
+ '背' => '偝',
+ '朏' => '朏',
+ '胐' => '朏',
+ '肢' => '肢',
+ '胑' => '肢',
+ '勝' => '勝',
+ '胜' => '勝',
+ '縃' => '縃',
+ '胥' => '縃',
+ '朧' => '朧',
+ '胧' => '朧',
+ '肐' => '肐',
+ '胳' => '肐',
+ '㬵' => '㬵',
+ '胶' => '㬵',
+ '胷' => '胷',
+ '胸' => '胷',
+ '朓' => '朓',
+ '脁' => '朓',
+ '胁' => '胁',
+ '脅' => '胁',
+ '脇' => '胁',
+ '脈' => '脈',
+ '脉' => '脈',
+ '胫' => '胫',
+ '脛' => '胫',
+ '唇' => '唇',
+ '脣' => '唇',
+ '朘' => '朘',
+ '脧' => '朘',
+ '修' => '修',
+ '脩' => '修',
+ '脫' => '脫',
+ '脱' => '脫',
+ '胀' => '胀',
+ '脹' => '胀',
+ '胼' => '胼',
+ '腁' => '胼',
+ '倎' => '倎',
+ '腆' => '倎',
+ '肾' => '肾',
+ '腎' => '肾',
+ '胨' => '胨',
+ '腖' => '胨',
+ '傶' => '傶',
+ '腠' => '傶',
+ '脶' => '脶',
+ '腡' => '脶',
+ '脑' => '脑',
+ '腦' => '脑',
+ '肿' => '肿',
+ '腫' => '肿',
+ '脚' => '脚',
+ '腳' => '脚',
+ '肠' => '肠',
+ '腸' => '肠',
+ '腽' => '腽',
+ '膃' => '腽',
+ '嗉' => '嗉',
+ '膆' => '嗉',
+ '瘠' => '瘠',
+ '膌' => '瘠',
+ '膓' => '肠',
+ '腘' => '腘',
+ '膕' => '腘',
+ '肤' => '肤',
+ '膚' => '肤',
+ '䏝' => '䏝',
+ '膞' => '䏝',
+ '膠' => '㬵',
+ '朣' => '朣',
+ '膧' => '朣',
+ '腻' => '腻',
+ '膩' => '腻',
+ '脆' => '脆',
+ '膬' => '脆',
+ '羶' => '羶',
+ '膻' => '羶',
+ '胆' => '胆',
+ '膽' => '胆',
+ '脍' => '脍',
+ '膾' => '脍',
+ '脓' => '脓',
+ '膿' => '脓',
+ '肊' => '肊',
+ '臆' => '肊',
+ '腊' => '腊',
+ '臈' => '腊',
+ '脸' => '脸',
+ '臉' => '脸',
+ '脐' => '脐',
+ '臍' => '脐',
+ '膑' => '膑',
+ '臏' => '膑',
+ '膘' => '膘',
+ '臕' => '膘',
+ '臘' => '腊',
+ '胭' => '胭',
+ '臙' => '胭',
+ '胪' => '胪',
+ '臚' => '胪',
+ '脏' => '脏',
+ '臟' => '脏',
+ '脔' => '脔',
+ '臠' => '脔',
+ '臜' => '臜',
+ '臢' => '臜',
+ '卧' => '卧',
+ '臥' => '卧',
+ '临' => '临',
+ '臨' => '临',
+ '殠' => '殠',
+ '臭' => '殠',
+ '臮' => '暨',
+ '緻' => '緻',
+ '致' => '緻',
+ '臺' => '台',
+ '抭' => '抭',
+ '舀' => '抭',
+ '舃' => '舃',
+ '舄' => '舃',
+ '与' => '与',
+ '與' => '与',
+ '兴' => '兴',
+ '興' => '兴',
+ '舉' => '举',
+ '旧' => '旧',
+ '舊' => '旧',
+ '捨' => '捨',
+ '舍' => '捨',
+ '舎' => '捨',
+ '檥' => '檥',
+ '舣' => '檥',
+ '舡' => '舡',
+ '舩' => '舡',
+ '桁' => '桁',
+ '航' => '桁',
+ '柁' => '柁',
+ '舵' => '柁',
+ '船' => '舡',
+ '舶' => '舶',
+ '艊' => '舶',
+ '艐' => '屆',
+ '舱' => '舱',
+ '艙' => '舱',
+ '艣' => '樐',
+ '艤' => '檥',
+ '舰' => '舰',
+ '艦' => '舰',
+ '艪' => '樐',
+ '舻' => '舻',
+ '艫' => '舻',
+ '艰' => '艰',
+ '艱' => '艰',
+ '艳' => '艳',
+ '艶' => '艳',
+ '艷' => '艳',
+ '兿' => '兿',
+ '艺' => '兿',
+ '節' => '節',
+ '节' => '節',
+ '羋' => '羋',
+ '芈' => '羋',
+ '笀' => '笀',
+ '芒' => '笀',
+ '刍' => '刍',
+ '芻' => '刍',
+ '刈' => '刈',
+ '苅' => '刈',
+ '苏' => '囌',
+ '芀' => '芀',
+ '苕' => '芀',
+ '芶' => '芶',
+ '苟' => '芶',
+ '瘔' => '瘔',
+ '苦' => '瘔',
+ '苎' => '苎',
+ '苧' => '苎',
+ '偀' => '偀',
+ '英' => '偀',
+ '範' => '範',
+ '范' => '範',
+ '茅' => '茅',
+ '茆' => '茅',
+ '塋' => '塋',
+ '茔' => '塋',
+ '茕' => '惸',
+ '繭' => '繭',
+ '茧' => '繭',
+ '汒' => '汒',
+ '茫' => '汒',
+ '茲' => '兹',
+ '荅' => '畣',
+ '艸' => '艸',
+ '草' => '艸',
+ '荆' => '荆',
+ '荊' => '荆',
+ '茘' => '茘',
+ '荔' => '茘',
+ '庄' => '庄',
+ '荘' => '庄',
+ '荡' => '潒',
+ '荣' => '栄',
+ '滎' => '滎',
+ '荥' => '滎',
+ '犖' => '犖',
+ '荦' => '犖',
+ '熒' => '熒',
+ '荧' => '熒',
+ '廕' => '廕',
+ '荫' => '廕',
+ '梪' => '梪',
+ '荳' => '梪',
+ '莊' => '庄',
+ '荇' => '荇',
+ '莕' => '荇',
+ '茎' => '茎',
+ '莖' => '茎',
+ '荚' => '荚',
+ '莢' => '荚',
+ '苋' => '苋',
+ '莧' => '苋',
+ '获' => '獲',
+ '瑩' => '瑩',
+ '莹' => '瑩',
+ '茻' => '茻',
+ '莽' => '茻',
+ '苽' => '苽',
+ '菇' => '苽',
+ '苿' => '苿',
+ '菋' => '苿',
+ '渮' => '渮',
+ '菏' => '渮',
+ '果' => '果',
+ '菓' => '果',
+ '卜' => '卜',
+ '菔' => '卜',
+ '堇' => '堇',
+ '菫' => '堇',
+ '華' => '华',
+ '菰' => '苽',
+ '庵' => '庵',
+ '菴' => '庵',
+ '帚' => '帚',
+ '菷' => '帚',
+ '菸' => '烟',
+ '春' => '春',
+ '萅' => '春',
+ '苌' => '苌',
+ '萇' => '苌',
+ '莱' => '莱',
+ '萊' => '莱',
+ '荽' => '荽',
+ '萎' => '荽',
+ '荠' => '荠',
+ '萕' => '荠',
+ '营' => '営',
+ '縈' => '縈',
+ '萦' => '縈',
+ '万' => '万',
+ '萬' => '万',
+ '萱' => '萱',
+ '萲' => '萱',
+ '荝' => '荝',
+ '萴' => '荝',
+ '莴' => '莴',
+ '萵' => '莴',
+ '菹' => '菹',
+ '葅' => '菹',
+ '叶' => '叶',
+ '葉' => '叶',
+ '菅' => '菅',
+ '葌' => '菅',
+ '荭' => '荭',
+ '葒' => '荭',
+ '着' => '着',
+ '著' => '着',
+ '葠' => '叁',
+ '盖' => '盖',
+ '葢' => '盖',
+ '荮' => '荮',
+ '葤' => '荮',
+ '苇' => '苇',
+ '葦' => '苇',
+ '荸' => '荸',
+ '葧' => '荸',
+ '塟' => '塟',
+ '葬' => '塟',
+ '椴' => '椴',
+ '葮' => '椴',
+ '药' => '药',
+ '葯' => '药',
+ '荤' => '荤',
+ '葷' => '荤',
+ '莼' => '莼',
+ '蒓' => '莼',
+ '莳' => '莳',
+ '蒔' => '莳',
+ '蒙' => '懞',
+ '莅' => '莅',
+ '蒞' => '莅',
+ '苍' => '苍',
+ '蒼' => '苍',
+ '荪' => '荪',
+ '蓀' => '荪',
+ '蓆' => '席',
+ '蓋' => '盖',
+ '簑' => '簑',
+ '蓑' => '簑',
+ '蓡' => '叁',
+ '莲' => '莲',
+ '蓮' => '莲',
+ '苁' => '苁',
+ '蓯' => '苁',
+ '蓳' => '堇',
+ '蓴' => '莼',
+ '蓺' => '兿',
+ '荜' => '荜',
+ '蓽' => '荜',
+ '菱' => '菱',
+ '蔆' => '菱',
+ '蔇' => '暨',
+ '蓘' => '蓘',
+ '蔉' => '蓘',
+ '粗' => '粗',
+ '蔍' => '粗',
+ '蔒' => '荤',
+ '蔔' => '卜',
+ '蒌' => '蒌',
+ '蔞' => '蒌',
+ '蒋' => '蒋',
+ '蔣' => '蒋',
+ '葱' => '葱',
+ '蔥' => '葱',
+ '茑' => '茑',
+ '蔦' => '茑',
+ '蔭' => '廕',
+ '蔮' => '帼',
+ '蔱' => '榝',
+ '蔴' => '淋',
+ '蒍' => '蒍',
+ '蔿' => '蒍',
+ '荨' => '荨',
+ '蕁' => '荨',
+ '萌' => '萌',
+ '蕄' => '萌',
+ '蒇' => '蒇',
+ '蕆' => '蒇',
+ '橤' => '橤',
+ '蕊' => '橤',
+ '蕋' => '橤',
+ '荞' => '荞',
+ '蕎' => '荞',
+ '荬' => '荬',
+ '蕒' => '荬',
+ '芸' => '芸',
+ '蕓' => '芸',
+ '莸' => '莸',
+ '蕕' => '莸',
+ '荛' => '荛',
+ '蕘' => '荛',
+ '萼' => '萼',
+ '蕚' => '萼',
+ '蒉' => '蒉',
+ '蕢' => '蒉',
+ '蕩' => '潒',
+ '芜' => '芜',
+ '蕪' => '芜',
+ '董' => '董',
+ '蕫' => '董',
+ '萧' => '萧',
+ '蕭' => '萧',
+ '稍' => '稍',
+ '蕱' => '稍',
+ '蓣' => '蓣',
+ '蕷' => '蓣',
+ '蕰' => '蕰',
+ '薀' => '蕰',
+ '荟' => '荟',
+ '薈' => '荟',
+ '薉' => '秽',
+ '蓟' => '蓟',
+ '薊' => '蓟',
+ '芗' => '芗',
+ '薌' => '芗',
+ '蔑' => '蔑',
+ '薎' => '蔑',
+ '姜' => '姜',
+ '薑' => '姜',
+ '蔷' => '蔷',
+ '薔' => '蔷',
+ '荙' => '荙',
+ '薘' => '荙',
+ '剃' => '剃',
+ '薙' => '剃',
+ '蕵' => '蕵',
+ '薞' => '蕵',
+ '莶' => '莶',
+ '薟' => '莶',
+ '荐' => '荐',
+ '薦' => '荐',
+ '萨' => '萨',
+ '薩' => '萨',
+ '薬' => '药',
+ '籔' => '籔',
+ '薮' => '籔',
+ '薫' => '薫',
+ '薰' => '薫',
+ '薺' => '荠',
+ '藂' => '丛',
+ '藉' => '借',
+ '蓝' => '蓝',
+ '藍' => '蓝',
+ '荩' => '荩',
+ '藎' => '荩',
+ '蔵' => '蔵',
+ '藏' => '蔵',
+ '蕅' => '蕅',
+ '藕' => '蕅',
+ '蔾' => '蔾',
+ '藜' => '蔾',
+ '藝' => '兿',
+ '荻' => '荻',
+ '藡' => '荻',
+ '藤' => '籐',
+ '藥' => '药',
+ '籓' => '籓',
+ '藩' => '籓',
+ '藪' => '籔',
+ '䓖' => '䓖',
+ '藭' => '䓖',
+ '蕴' => '蕴',
+ '藴' => '蕴',
+ '苈' => '苈',
+ '藶' => '苈',
+ '薯' => '薯',
+ '藷' => '薯',
+ '蕏' => '蕏',
+ '藸' => '蕏',
+ '蔼' => '蔼',
+ '藹' => '蔼',
+ '蔺' => '蔺',
+ '藺' => '蔺',
+ '藽' => '榇',
+ '萚' => '萚',
+ '蘀' => '萚',
+ '蘂' => '橤',
+ '蕲' => '蕲',
+ '蘄' => '蕲',
+ '芦' => '芦',
+ '蘆' => '芦',
+ '蘇' => '囌',
+ '蘊' => '蕴',
+ '苹' => '苹',
+ '蘋' => '苹',
+ '蘓' => '囌',
+ '蘏' => '蘏',
+ '蘔' => '蘏',
+ '櫱' => '櫱',
+ '蘖' => '櫱',
+ '檗' => '檗',
+ '蘗' => '檗',
+ '藓' => '藓',
+ '蘚' => '藓',
+ '菊' => '菊',
+ '蘜' => '菊',
+ '蔹' => '蔹',
+ '蘞' => '蔹',
+ '茏' => '茏',
+ '蘢' => '茏',
+ '花' => '花',
+ '蘤' => '花',
+ '兰' => '兰',
+ '蘭' => '兰',
+ '蘯' => '潒',
+ '蓠' => '蓠',
+ '蘺' => '蓠',
+ '櫐' => '櫐',
+ '蘽' => '櫐',
+ '萝' => '萝',
+ '蘿' => '萝',
+ '蘷' => '蘷',
+ '虁' => '蘷',
+ '慮' => '慮',
+ '虑' => '慮',
+ '处' => '处',
+ '處' => '处',
+ '虖' => '呼',
+ '虚' => '虚',
+ '虛' => '虚',
+ '虏' => '虏',
+ '虜' => '虏',
+ '号' => '号',
+ '號' => '号',
+ '暴' => '暴',
+ '虣' => '暴',
+ '亏' => '亏',
+ '虧' => '亏',
+ '虬' => '虬',
+ '虯' => '虬',
+ '蘬' => '蘬',
+ '虺' => '蘬',
+ '硥' => '硥',
+ '蚌' => '硥',
+ '痐' => '痐',
+ '蚘' => '痐',
+ '蚔' => '蚔',
+ '蚳' => '蚔',
+ '蛄' => '蛄',
+ '蛌' => '蛄',
+ '蛔' => '痐',
+ '蛩' => '蛩',
+ '蛬' => '蛩',
+ '蛱' => '蛱',
+ '蛺' => '蛱',
+ '蜃' => '蜃',
+ '蜄' => '蜃',
+ '蚬' => '蚬',
+ '蜆' => '蚬',
+ '蜑' => '蜑',
+ '蜒' => '蜑',
+ '蛻' => '蛻',
+ '蜕' => '蛻',
+ '蜖' => '痐',
+ '瘑' => '瘑',
+ '蜗' => '瘑',
+ '蚣' => '蚣',
+ '蜙' => '蚣',
+ '蚋' => '蚋',
+ '蜹' => '蚋',
+ '蛪' => '蛪',
+ '蜺' => '蛪',
+ '蚀' => '蚀',
+ '蝕' => '蚀',
+ '猬' => '猬',
+ '蝟' => '猬',
+ '虾' => '虾',
+ '蝦' => '虾',
+ '虱' => '虱',
+ '蝨' => '虱',
+ '猿' => '猿',
+ '蝯' => '猿',
+ '玳' => '玳',
+ '蝳' => '玳',
+ '蜨' => '蜨',
+ '蝶' => '蜨',
+ '蝸' => '瘑',
+ '蜋' => '蜋',
+ '螂' => '蜋',
+ '蛳' => '蛳',
+ '螄' => '蛳',
+ '蚁' => '蚁',
+ '螘' => '蚁',
+ '蚂' => '蚂',
+ '螞' => '蚂',
+ '蚊' => '蚊',
+ '螡' => '蚊',
+ '萤' => '萤',
+ '螢' => '萤',
+ '螗' => '螗',
+ '螳' => '螗',
+ '蝼' => '蝼',
+ '螻' => '蝼',
+ '螀' => '螀',
+ '螿' => '螀',
+ '蟁' => '蚊',
+ '蛰' => '蛰',
+ '蟄' => '蛰',
+ '蟆' => '蟆',
+ '蟇' => '蟆',
+ '蝈' => '蝈',
+ '蟈' => '蝈',
+ '螨' => '螨',
+ '蟎' => '螨',
+ '虮' => '虮',
+ '蟣' => '虮',
+ '蝉' => '蝉',
+ '蟬' => '蝉',
+ '蛲' => '蛲',
+ '蟯' => '蛲',
+ '虫' => '虫',
+ '蟲' => '虫',
+ '蛏' => '蛏',
+ '蟶' => '蛏',
+ '蟻' => '蚁',
+ '蚃' => '蚃',
+ '蠁' => '蚃',
+ '蝇' => '蝇',
+ '蠅' => '蝇',
+ '虿' => '虿',
+ '蠆' => '虿',
+ '蝎' => '蝎',
+ '蠍' => '蝎',
+ '蟒' => '蟒',
+ '蠎' => '蟒',
+ '蟹' => '蟹',
+ '蠏' => '蟹',
+ '蛴' => '蛴',
+ '蠐' => '蛴',
+ '蝾' => '蝾',
+ '蠑' => '蝾',
+ '蚝' => '蚝',
+ '蠔' => '蚝',
+ '蝡' => '蝡',
+ '蠕' => '蝡',
+ '蜡' => '蜡',
+ '蠟' => '蜡',
+ '惷' => '惷',
+ '蠢' => '惷',
+ '蛎' => '蛎',
+ '蠣' => '蛎',
+ '蟏' => '蟏',
+ '蠨' => '蟏',
+ '蝫' => '蝫',
+ '蠩' => '蝫',
+ '劙' => '劙',
+ '蠫' => '劙',
+ '蛊' => '蛊',
+ '蠱' => '蛊',
+ '蚕' => '蚕',
+ '蠶' => '蚕',
+ '蠧' => '蠧',
+ '蠹' => '蠧',
+ '蛮' => '蛮',
+ '蠻' => '蛮',
+ '蠷' => '蠷',
+ '蠼' => '蠷',
+ '衂' => '衂',
+ '衄' => '衂',
+ '衆' => '众',
+ '衊' => '蔑',
+ '術' => '朮',
+ '啣' => '啣',
+ '衔' => '啣',
+ '衕' => '仝',
+ '弄' => '弄',
+ '衖' => '弄',
+ '胡' => '胡',
+ '衚' => '胡',
+ '卫' => '卫',
+ '衛' => '卫',
+ '衝' => '冲',
+ '衞' => '卫',
+ '紁' => '紁',
+ '衩' => '紁',
+ '緷' => '緷',
+ '衮' => '緷',
+ '衶' => '冲',
+ '只' => '只',
+ '衹' => '只',
+ '袅' => '嫋',
+ '毠' => '毠',
+ '袈' => '毠',
+ '袌' => '袌',
+ '袍' => '袌',
+ '衪' => '衪',
+ '袘' => '衪',
+ '袞' => '緷',
+ '帙' => '帙',
+ '袟' => '帙',
+ '裊' => '嫋',
+ '裌' => '夹',
+ '袬' => '袬',
+ '裕' => '袬',
+ '帬' => '帬',
+ '裙' => '帬',
+ '补' => '补',
+ '補' => '补',
+ '装' => '装',
+ '裝' => '装',
+ '裠' => '帬',
+ '裏' => '裏',
+ '裡' => '裏',
+ '袴' => '袴',
+ '裤' => '袴',
+ '裴' => '裴',
+ '裵' => '裴',
+ '臝' => '臝',
+ '裸' => '臝',
+ '制' => '制',
+ '製' => '制',
+ '帺' => '帺',
+ '褀' => '帺',
+ '裹' => '裹',
+ '褁' => '裹',
+ '複' => '复',
+ '惼' => '惼',
+ '褊' => '惼',
+ '裈' => '裈',
+ '褌' => '裈',
+ '袖' => '袖',
+ '褎' => '袖',
+ '副' => '副',
+ '褔' => '副',
+ '袆' => '袆',
+ '褘' => '袆',
+ '褞' => '緼',
+ '褢' => '怀',
+ '褭' => '嫋',
+ '褱' => '怀',
+ '褲' => '袴',
+ '裢' => '裢',
+ '褳' => '裢',
+ '繿' => '繿',
+ '褴' => '繿',
+ '褵' => '縭',
+ '褛' => '褛',
+ '褸' => '褛',
+ '亵' => '亵',
+ '褻' => '亵',
+ '褒' => '褒',
+ '襃' => '褒',
+ '裥' => '裥',
+ '襇' => '裥',
+ '襉' => '裥',
+ '袯' => '袯',
+ '襏' => '袯',
+ '幱' => '幱',
+ '襕' => '幱',
+ '袄' => '袄',
+ '襖' => '袄',
+ '裣' => '裣',
+ '襝' => '裣',
+ '裆' => '裆',
+ '襠' => '裆',
+ '袒' => '袒',
+ '襢' => '袒',
+ '襤' => '繿',
+ '袜' => '袜',
+ '襪' => '袜',
+ '襬' => '摆',
+ '衬' => '衬',
+ '襯' => '衬',
+ '袭' => '袭',
+ '襲' => '袭',
+ '襴' => '幱',
+ '襾' => '襾',
+ '覀' => '襾',
+ '覆' => '复',
+ '覈' => '核',
+ '覉' => '羁',
+ '覊' => '羁',
+ '規' => '椝',
+ '瞥' => '瞥',
+ '覕' => '瞥',
+ '斍' => '斍',
+ '覚' => '斍',
+ '眺' => '眺',
+ '覜' => '眺',
+ '覝' => '亷',
+ '亲' => '亲',
+ '親' => '亲',
+ '覌' => '覌',
+ '観' => '覌',
+ '覵' => '覵',
+ '覸' => '覵',
+ '覺' => '斍',
+ '覧' => '覧',
+ '覽' => '覧',
+ '觀' => '覌',
+ '見' => '見',
+ '见' => '見',
+ '观' => '覌',
+ '覎' => '覎',
+ '觃' => '覎',
+ '规' => '椝',
+ '覓' => '覓',
+ '觅' => '覓',
+ '視' => '視',
+ '视' => '視',
+ '覘' => '覘',
+ '觇' => '覘',
+ '览' => '覧',
+ '觉' => '斍',
+ '覬' => '覬',
+ '觊' => '覬',
+ '覡' => '覡',
+ '觋' => '覡',
+ '覿' => '覿',
+ '觌' => '覿',
+ '覥' => '覥',
+ '觍' => '覥',
+ '覦' => '覦',
+ '觎' => '覦',
+ '覯' => '覯',
+ '觏' => '覯',
+ '覲' => '覲',
+ '觐' => '覲',
+ '覷' => '覷',
+ '觑' => '覷',
+ '觔' => '斤',
+ '觕' => '粗',
+ '伋' => '伋',
+ '觙' => '伋',
+ '觝' => '扺',
+ '解' => '解',
+ '觧' => '解',
+ '觪' => '觪',
+ '觲' => '觪',
+ '觞' => '觞',
+ '觴' => '觞',
+ '觯' => '觯',
+ '觶' => '觯',
+ '触' => '触',
+ '觸' => '触',
+ '燕' => '燕',
+ '觾' => '燕',
+ '言' => '言',
+ '訁' => '言',
+ '托' => '托',
+ '託' => '托',
+ '訞' => '䚶',
+ '䜣' => '䜣',
+ '訢' => '䜣',
+ '尤' => '尤',
+ '訧' => '尤',
+ '哅' => '哅',
+ '訩' => '哅',
+ '愬' => '愬',
+ '訴' => '愬',
+ '訶' => '呵',
+ '注' => '注',
+ '註' => '注',
+ '訾' => '訾',
+ '訿' => '訾',
+ '呧' => '呧',
+ '詆' => '呧',
+ '咏' => '咏',
+ '詠' => '咏',
+ '察' => '察',
+ '詧' => '察',
+ '侘' => '侘',
+ '詫' => '侘',
+ '咯' => '咯',
+ '詻' => '咯',
+ '訮' => '訮',
+ '詽' => '訮',
+ '夸' => '夸',
+ '誇' => '夸',
+ '忌' => '忌',
+ '誋' => '忌',
+ '志' => '志',
+ '誌' => '志',
+ '欸' => '欸',
+ '誒' => '欸',
+ '悖' => '悖',
+ '誖' => '悖',
+ '誤' => '悞',
+ '說' => '說',
+ '説' => '說',
+ '訚' => '訚',
+ '誾' => '訚',
+ '訰' => '訰',
+ '諄' => '訰',
+ '諅' => '忌',
+ '話' => '話',
+ '諙' => '話',
+ '諠' => '吅',
+ '諌' => '諌',
+ '諫' => '諌',
+ '咨' => '咨',
+ '諮' => '咨',
+ '諵' => '喃',
+ '誊' => '誊',
+ '謄' => '誊',
+ '啼' => '啼',
+ '謕' => '啼',
+ '諡' => '諡',
+ '謚' => '諡',
+ '謠' => '謠',
+ '謡' => '謠',
+ '商' => '商',
+ '謪' => '商',
+ '詛' => '詛',
+ '謯' => '詛',
+ '謶' => '庶',
+ '謼' => '呼',
+ '譁' => '哗',
+ '嘻' => '嘻',
+ '譆' => '嘻',
+ '憝' => '憝',
+ '譈' => '憝',
+ '証' => '証',
+ '證' => '証',
+ '訛' => '訛',
+ '譌' => '訛',
+ '譍' => '应',
+ '噊' => '噊',
+ '譎' => '噊',
+ '噂' => '噂',
+ '譐' => '噂',
+ '譑' => '挢',
+ '撰' => '撰',
+ '譔' => '撰',
+ '謨' => '謨',
+ '譕' => '謨',
+ '諩' => '諩',
+ '譜' => '諩',
+ '噪' => '噪',
+ '譟' => '噪',
+ '譪' => '蔼',
+ '譭' => '毀',
+ '善' => '善',
+ '譱' => '善',
+ '护' => '护',
+ '護' => '护',
+ '譹' => '号',
+ '譻' => '嘤',
+ '誉' => '誉',
+ '譽' => '誉',
+ '謭' => '謭',
+ '譾' => '謭',
+ '慧' => '慧',
+ '譿' => '慧',
+ '變' => '变',
+ '詟' => '詟',
+ '讋' => '詟',
+ '䜩' => '䜩',
+ '讌' => '䜩',
+ '仇' => '仇',
+ '讎' => '仇',
+ '讆' => '讆',
+ '讏' => '讆',
+ '讐' => '仇',
+ '譋' => '譋',
+ '讕' => '譋',
+ '讙' => '懽',
+ '讃' => '讃',
+ '讚' => '讃',
+ '讠' => '言',
+ '計' => '計',
+ '计' => '計',
+ '訂' => '訂',
+ '订' => '訂',
+ '訃' => '訃',
+ '讣' => '訃',
+ '認' => '認',
+ '认' => '認',
+ '譏' => '譏',
+ '讥' => '譏',
+ '訐' => '訐',
+ '讦' => '訐',
+ '訌' => '訌',
+ '讧' => '訌',
+ '討' => '討',
+ '讨' => '討',
+ '讓' => '讓',
+ '让' => '讓',
+ '訕' => '訕',
+ '讪' => '訕',
+ '訖' => '訖',
+ '讫' => '訖',
+ '讬' => '托',
+ '訓' => '訓',
+ '训' => '訓',
+ '議' => '議',
+ '议' => '議',
+ '訊' => '訊',
+ '讯' => '訊',
+ '記' => '記',
+ '记' => '記',
+ '訒' => '訒',
+ '讱' => '訒',
+ '講' => '講',
+ '讲' => '講',
+ '諱' => '諱',
+ '讳' => '諱',
+ '謳' => '謳',
+ '讴' => '謳',
+ '詎' => '詎',
+ '讵' => '詎',
+ '訝' => '訝',
+ '讶' => '訝',
+ '訥' => '訥',
+ '讷' => '訥',
+ '許' => '許',
+ '许' => '許',
+ '讹' => '訛',
+ '論' => '論',
+ '论' => '論',
+ '讻' => '哅',
+ '訟' => '訟',
+ '讼' => '訟',
+ '諷' => '諷',
+ '讽' => '諷',
+ '設' => '設',
+ '设' => '設',
+ '訪' => '訪',
+ '访' => '訪',
+ '訣' => '訣',
+ '诀' => '訣',
+ '证' => '証',
+ '詁' => '詁',
+ '诂' => '詁',
+ '诃' => '呵',
+ '評' => '評',
+ '评' => '評',
+ '诅' => '詛',
+ '識' => '識',
+ '识' => '識',
+ '詗' => '詗',
+ '诇' => '詗',
+ '詐' => '詐',
+ '诈' => '詐',
+ '诉' => '愬',
+ '診' => '診',
+ '诊' => '診',
+ '诋' => '呧',
+ '謅' => '謅',
+ '诌' => '謅',
+ '詞' => '詞',
+ '词' => '詞',
+ '詘' => '詘',
+ '诎' => '詘',
+ '詔' => '詔',
+ '诏' => '詔',
+ '詖' => '詖',
+ '诐' => '詖',
+ '譯' => '譯',
+ '译' => '譯',
+ '詒' => '詒',
+ '诒' => '詒',
+ '誆' => '誆',
+ '诓' => '誆',
+ '誄' => '誄',
+ '诔' => '誄',
+ '試' => '試',
+ '试' => '試',
+ '詿' => '詿',
+ '诖' => '詿',
+ '詩' => '詩',
+ '诗' => '詩',
+ '詰' => '詰',
+ '诘' => '詰',
+ '詼' => '詼',
+ '诙' => '詼',
+ '誠' => '誠',
+ '诚' => '誠',
+ '誅' => '誅',
+ '诛' => '誅',
+ '詵' => '詵',
+ '诜' => '詵',
+ '话' => '話',
+ '誕' => '誕',
+ '诞' => '誕',
+ '詬' => '詬',
+ '诟' => '詬',
+ '詮' => '詮',
+ '诠' => '詮',
+ '詭' => '詭',
+ '诡' => '詭',
+ '詢' => '詢',
+ '询' => '詢',
+ '詣' => '詣',
+ '诣' => '詣',
+ '諍' => '諍',
+ '诤' => '諍',
+ '該' => '該',
+ '该' => '該',
+ '詳' => '詳',
+ '详' => '詳',
+ '诧' => '侘',
+ '諢' => '諢',
+ '诨' => '諢',
+ '詡' => '詡',
+ '诩' => '詡',
+ '譸' => '譸',
+ '诪' => '譸',
+ '誡' => '誡',
+ '诫' => '誡',
+ '誣' => '誣',
+ '诬' => '誣',
+ '語' => '語',
+ '语' => '語',
+ '誚' => '誚',
+ '诮' => '誚',
+ '误' => '悞',
+ '誥' => '誥',
+ '诰' => '誥',
+ '誘' => '誘',
+ '诱' => '誘',
+ '誨' => '誨',
+ '诲' => '誨',
+ '誑' => '誑',
+ '诳' => '誑',
+ '说' => '說',
+ '誦' => '誦',
+ '诵' => '誦',
+ '诶' => '欸',
+ '請' => '請',
+ '请' => '請',
+ '諸' => '諸',
+ '诸' => '諸',
+ '諏' => '諏',
+ '诹' => '諏',
+ '諾' => '諾',
+ '诺' => '諾',
+ '讀' => '讀',
+ '读' => '讀',
+ '諑' => '諑',
+ '诼' => '諑',
+ '誹' => '誹',
+ '诽' => '誹',
+ '課' => '課',
+ '课' => '課',
+ '諉' => '諉',
+ '诿' => '諉',
+ '諛' => '諛',
+ '谀' => '諛',
+ '誰' => '誰',
+ '谁' => '誰',
+ '諗' => '諗',
+ '谂' => '諗',
+ '調' => '調',
+ '调' => '調',
+ '諂' => '諂',
+ '谄' => '諂',
+ '諒' => '諒',
+ '谅' => '諒',
+ '谆' => '訰',
+ '誶' => '誶',
+ '谇' => '誶',
+ '談' => '談',
+ '谈' => '談',
+ '讅' => '讅',
+ '谉' => '讅',
+ '誼' => '誼',
+ '谊' => '誼',
+ '謀' => '謀',
+ '谋' => '謀',
+ '諶' => '諶',
+ '谌' => '諶',
+ '諜' => '諜',
+ '谍' => '諜',
+ '謊' => '謊',
+ '谎' => '謊',
+ '谏' => '諌',
+ '諧' => '諧',
+ '谐' => '諧',
+ '謔' => '謔',
+ '谑' => '謔',
+ '謁' => '謁',
+ '谒' => '謁',
+ '謂' => '謂',
+ '谓' => '謂',
+ '諤' => '諤',
+ '谔' => '諤',
+ '諭' => '諭',
+ '谕' => '諭',
+ '諼' => '諼',
+ '谖' => '諼',
+ '讒' => '讒',
+ '谗' => '讒',
+ '谘' => '咨',
+ '諳' => '諳',
+ '谙' => '諳',
+ '諺' => '諺',
+ '谚' => '諺',
+ '諦' => '諦',
+ '谛' => '諦',
+ '謎' => '謎',
+ '谜' => '謎',
+ '諞' => '諞',
+ '谝' => '諞',
+ '諝' => '諝',
+ '谞' => '諝',
+ '谟' => '謨',
+ '讜' => '讜',
+ '谠' => '讜',
+ '謖' => '謖',
+ '谡' => '謖',
+ '謝' => '謝',
+ '谢' => '謝',
+ '谣' => '謠',
+ '謗' => '謗',
+ '谤' => '謗',
+ '谥' => '諡',
+ '謙' => '謙',
+ '谦' => '謙',
+ '謐' => '謐',
+ '谧' => '謐',
+ '謹' => '謹',
+ '谨' => '謹',
+ '謾' => '謾',
+ '谩' => '謾',
+ '謫' => '謫',
+ '谪' => '謫',
+ '谫' => '謭',
+ '謬' => '謬',
+ '谬' => '謬',
+ '譚' => '譚',
+ '谭' => '譚',
+ '譖' => '譖',
+ '谮' => '譖',
+ '譙' => '譙',
+ '谯' => '譙',
+ '谰' => '譋',
+ '谱' => '諩',
+ '谲' => '噊',
+ '讞' => '讞',
+ '谳' => '讞',
+ '譴' => '譴',
+ '谴' => '譴',
+ '譫' => '譫',
+ '谵' => '譫',
+ '讖' => '讖',
+ '谶' => '讖',
+ '穀' => '穀',
+ '谷' => '穀',
+ '溪' => '溪',
+ '谿' => '溪',
+ '豆' => '梪',
+ '岂' => '岂',
+ '豈' => '岂',
+ '丰' => '丰',
+ '豊' => '丰',
+ '登' => '登',
+ '豋' => '登',
+ '豎' => '竖',
+ '豐' => '丰',
+ '豔' => '艳',
+ '拻' => '拻',
+ '豗' => '拻',
+ '像' => '像',
+ '象' => '像',
+ '豜' => '豜',
+ '豣' => '豜',
+ '猪' => '猪',
+ '豬' => '猪',
+ '豮' => '豮',
+ '豶' => '豮',
+ '犲' => '犲',
+ '豺' => '犲',
+ '狢' => '狢',
+ '貉' => '狢',
+ '皃' => '皃',
+ '貌' => '皃',
+ '狸' => '狸',
+ '貍' => '狸',
+ '猫' => '猫',
+ '貓' => '猫',
+ '玃' => '玃',
+ '貜' => '玃',
+ '貮' => '二',
+ '貳' => '二',
+ '买' => '买',
+ '買' => '买',
+ '賉' => '卹',
+ '戝' => '戝',
+ '賊' => '戝',
+ '賅' => '賅',
+ '賌' => '賅',
+ '宾' => '宾',
+ '賓' => '宾',
+ '賔' => '宾',
+ '串' => '串',
+ '賗' => '串',
+ '賛' => '讃',
+ '琛' => '琛',
+ '賝' => '琛',
+ '賣' => '卖',
+ '貭' => '貭',
+ '質' => '貭',
+ '賬' => '帐',
+ '賸' => '剩',
+ '贊' => '讃',
+ '賮' => '賮',
+ '贐' => '賮',
+ '贋' => '贋',
+ '贗' => '贋',
+ '灨' => '灨',
+ '贛' => '灨',
+ '贓' => '贓',
+ '贜' => '贓',
+ '貝' => '貝',
+ '贝' => '貝',
+ '貞' => '貞',
+ '贞' => '貞',
+ '負' => '負',
+ '负' => '負',
+ '貟' => '貟',
+ '贠' => '貟',
+ '貢' => '貢',
+ '贡' => '貢',
+ '財' => '財',
+ '财' => '財',
+ '責' => '責',
+ '责' => '責',
+ '賢' => '賢',
+ '贤' => '賢',
+ '敗' => '敗',
+ '败' => '敗',
+ '账' => '帐',
+ '貨' => '貨',
+ '货' => '貨',
+ '质' => '貭',
+ '販' => '販',
+ '贩' => '販',
+ '貪' => '貪',
+ '贪' => '貪',
+ '貧' => '貧',
+ '贫' => '貧',
+ '貶' => '貶',
+ '贬' => '貶',
+ '購' => '購',
+ '购' => '購',
+ '貯' => '貯',
+ '贮' => '貯',
+ '貫' => '貫',
+ '贯' => '貫',
+ '贰' => '二',
+ '賤' => '賤',
+ '贱' => '賤',
+ '賁' => '賁',
+ '贲' => '賁',
+ '貰' => '貰',
+ '贳' => '貰',
+ '貼' => '貼',
+ '贴' => '貼',
+ '貴' => '貴',
+ '贵' => '貴',
+ '貺' => '貺',
+ '贶' => '貺',
+ '貸' => '貸',
+ '贷' => '貸',
+ '貿' => '貿',
+ '贸' => '貿',
+ '費' => '費',
+ '费' => '費',
+ '賀' => '賀',
+ '贺' => '賀',
+ '貽' => '貽',
+ '贻' => '貽',
+ '贼' => '戝',
+ '贄' => '贄',
+ '贽' => '贄',
+ '賈' => '賈',
+ '贾' => '賈',
+ '賄' => '賄',
+ '贿' => '賄',
+ '貲' => '貲',
+ '赀' => '貲',
+ '賃' => '賃',
+ '赁' => '賃',
+ '賂' => '賂',
+ '赂' => '賂',
+ '赃' => '贓',
+ '資' => '資',
+ '资' => '資',
+ '赅' => '賅',
+ '赆' => '賮',
+ '賕' => '賕',
+ '赇' => '賕',
+ '賑' => '賑',
+ '赈' => '賑',
+ '賚' => '賚',
+ '赉' => '賚',
+ '賒' => '賒',
+ '赊' => '賒',
+ '賦' => '賦',
+ '赋' => '賦',
+ '賭' => '賭',
+ '赌' => '賭',
+ '賫' => '賫',
+ '赍' => '賫',
+ '贖' => '贖',
+ '赎' => '贖',
+ '賞' => '賞',
+ '赏' => '賞',
+ '賜' => '賜',
+ '赐' => '賜',
+ '贔' => '贔',
+ '赑' => '贔',
+ '賙' => '賙',
+ '赒' => '賙',
+ '賡' => '賡',
+ '赓' => '賡',
+ '賠' => '賠',
+ '赔' => '賠',
+ '賧' => '賧',
+ '赕' => '賧',
+ '賴' => '賴',
+ '赖' => '賴',
+ '賵' => '賵',
+ '赗' => '賵',
+ '贅' => '贅',
+ '赘' => '贅',
+ '賻' => '賻',
+ '赙' => '賻',
+ '賺' => '賺',
+ '赚' => '賺',
+ '賽' => '賽',
+ '赛' => '賽',
+ '賾' => '賾',
+ '赜' => '賾',
+ '赝' => '贋',
+ '赞' => '讃',
+ '贇' => '贇',
+ '赟' => '贇',
+ '贈' => '贈',
+ '赠' => '贈',
+ '贍' => '贍',
+ '赡' => '贍',
+ '贏' => '贏',
+ '赢' => '贏',
+ '赣' => '灨',
+ '竀' => '竀',
+ '赪' => '竀',
+ '赬' => '竀',
+ '走' => '走',
+ '赱' => '走',
+ '趁' => '趁',
+ '趂' => '趁',
+ '赿' => '赿',
+ '趆' => '赿',
+ '趋' => '趋',
+ '趍' => '趋',
+ '赶' => '赶',
+ '趕' => '赶',
+ '赵' => '赵',
+ '趙' => '赵',
+ '趨' => '趋',
+ '趱' => '趱',
+ '趲' => '趱',
+ '趒' => '趒',
+ '跳' => '趒',
+ '跥' => '跥',
+ '跺' => '跥',
+ '跼' => '侷',
+ '疏' => '疏',
+ '踈' => '疏',
+ '践' => '践',
+ '踐' => '践',
+ '踂' => '踂',
+ '踙' => '踂',
+ '蜷' => '蜷',
+ '踡' => '蜷',
+ '殕' => '殕',
+ '踣' => '殕',
+ '跴' => '跴',
+ '踩' => '跴',
+ '踨' => '踨',
+ '踪' => '踨',
+ '踫' => '掽',
+ '踊' => '踊',
+ '踴' => '踊',
+ '禸' => '禸',
+ '蹂' => '禸',
+ '跄' => '跄',
+ '蹌' => '跄',
+ '蹔' => '暂',
+ '跸' => '跸',
+ '蹕' => '跸',
+ '蹖' => '桩',
+ '趟' => '趟',
+ '蹚' => '趟',
+ '跬' => '跬',
+ '蹞' => '跬',
+ '跡' => '跡',
+ '蹟' => '跡',
+ '跖' => '跖',
+ '蹠' => '跖',
+ '蹒' => '蹒',
+ '蹣' => '蹒',
+ '蹤' => '踨',
+ '糟' => '糟',
+ '蹧' => '糟',
+ '蹯' => '番',
+ '蹲' => '墫',
+ '跷' => '跷',
+ '蹺' => '跷',
+ '蹻' => '跷',
+ '趮' => '趮',
+ '躁' => '趮',
+ '跶' => '跶',
+ '躂' => '跶',
+ '趸' => '趸',
+ '躉' => '趸',
+ '踌' => '踌',
+ '躊' => '踌',
+ '跻' => '跻',
+ '躋' => '跻',
+ '跃' => '跃',
+ '躍' => '跃',
+ '踯' => '踯',
+ '躑' => '踯',
+ '跞' => '跞',
+ '躒' => '跞',
+ '踬' => '踬',
+ '躓' => '踬',
+ '蹰' => '蹰',
+ '躕' => '蹰',
+ '跹' => '跹',
+ '躚' => '跹',
+ '躗' => '躗',
+ '躛' => '躗',
+ '蹑' => '蹑',
+ '躡' => '蹑',
+ '蹿' => '蹿',
+ '躥' => '蹿',
+ '躜' => '躜',
+ '躦' => '躜',
+ '躏' => '躏',
+ '躪' => '躏',
+ '耽' => '耽',
+ '躭' => '耽',
+ '体' => '体',
+ '躰' => '体',
+ '躱' => '躱',
+ '躲' => '躱',
+ '躯' => '躯',
+ '軀' => '躯',
+ '軆' => '体',
+ '军' => '军',
+ '軍' => '军',
+ '枙' => '枙',
+ '軛' => '枙',
+ '軖' => '軖',
+ '軠' => '軖',
+ '毂' => '毂',
+ '軲' => '毂',
+ '軶' => '枙',
+ '挽' => '挽',
+ '輓' => '挽',
+ '軽' => '軽',
+ '輕' => '軽',
+ '軿' => '軿',
+ '輧' => '軿',
+ '舆' => '舆',
+ '輿' => '舆',
+ '輼' => '輼',
+ '轀' => '輼',
+ '轂' => '毂',
+ '轏' => '栈',
+ '轝' => '舆',
+ '轞' => '槛',
+ '車' => '車',
+ '车' => '車',
+ '軋' => '軋',
+ '轧' => '軋',
+ '軌' => '軌',
+ '轨' => '軌',
+ '軒' => '軒',
+ '轩' => '軒',
+ '軑' => '軑',
+ '轪' => '軑',
+ '軔' => '軔',
+ '轫' => '軔',
+ '轉' => '轉',
+ '转' => '轉',
+ '轭' => '枙',
+ '輪' => '輪',
+ '轮' => '輪',
+ '軟' => '軟',
+ '软' => '軟',
+ '轟' => '轟',
+ '轰' => '轟',
+ '轱' => '毂',
+ '軻' => '軻',
+ '轲' => '軻',
+ '轤' => '轤',
+ '轳' => '轤',
+ '軸' => '軸',
+ '轴' => '軸',
+ '軹' => '軹',
+ '轵' => '軹',
+ '軼' => '軼',
+ '轶' => '軼',
+ '軤' => '軤',
+ '轷' => '軤',
+ '軫' => '軫',
+ '轸' => '軫',
+ '轢' => '轢',
+ '轹' => '轢',
+ '軺' => '軺',
+ '轺' => '軺',
+ '轻' => '軽',
+ '軾' => '軾',
+ '轼' => '軾',
+ '載' => '載',
+ '载' => '載',
+ '輊' => '輊',
+ '轾' => '輊',
+ '轎' => '轎',
+ '轿' => '轎',
+ '輈' => '輈',
+ '辀' => '輈',
+ '輇' => '輇',
+ '辁' => '輇',
+ '輅' => '輅',
+ '辂' => '輅',
+ '較' => '較',
+ '较' => '較',
+ '輒' => '輒',
+ '辄' => '輒',
+ '輔' => '輔',
+ '辅' => '輔',
+ '輛' => '輛',
+ '辆' => '輛',
+ '輦' => '輦',
+ '辇' => '輦',
+ '輩' => '輩',
+ '辈' => '輩',
+ '輝' => '輝',
+ '辉' => '輝',
+ '輥' => '輥',
+ '辊' => '輥',
+ '輞' => '輞',
+ '辋' => '輞',
+ '輬' => '輬',
+ '辌' => '輬',
+ '輟' => '輟',
+ '辍' => '輟',
+ '輜' => '輜',
+ '辎' => '輜',
+ '輳' => '輳',
+ '辏' => '輳',
+ '輻' => '輻',
+ '辐' => '輻',
+ '輯' => '輯',
+ '辑' => '輯',
+ '辒' => '輼',
+ '輸' => '輸',
+ '输' => '輸',
+ '轡' => '轡',
+ '辔' => '轡',
+ '轅' => '轅',
+ '辕' => '轅',
+ '轄' => '轄',
+ '辖' => '轄',
+ '輾' => '輾',
+ '辗' => '輾',
+ '轆' => '轆',
+ '辘' => '轆',
+ '轍' => '轍',
+ '辙' => '轍',
+ '轔' => '轔',
+ '辚' => '轔',
+ '罪' => '罪',
+ '辠' => '罪',
+ '辢' => '辢',
+ '辣' => '辢',
+ '办' => '办',
+ '辦' => '办',
+ '辧' => '办',
+ '辨' => '办',
+ '辞' => '辞',
+ '辭' => '辞',
+ '辫' => '辫',
+ '辮' => '辫',
+ '辩' => '辩',
+ '辯' => '辩',
+ '农' => '农',
+ '農' => '农',
+ '达' => '达',
+ '迖' => '达',
+ '迟' => '迟',
+ '迡' => '迟',
+ '迆' => '迆',
+ '迤' => '迆',
+ '廸' => '廸',
+ '迪' => '廸',
+ '迬' => '往',
+ '迭' => '叠',
+ '迳' => '径',
+ '迴' => '囘',
+ '迹' => '跡',
+ '迺' => '乃',
+ '移' => '移',
+ '迻' => '移',
+ '迯' => '迯',
+ '逃' => '迯',
+ '迥' => '迥',
+ '逈' => '迥',
+ '愻' => '愻',
+ '逊' => '愻',
+ '攸' => '攸',
+ '逌' => '攸',
+ '递' => '递',
+ '逓' => '递',
+ '逕' => '径',
+ '这' => '这',
+ '這' => '这',
+ '连' => '连',
+ '連' => '连',
+ '逥' => '囘',
+ '逩' => '奔',
+ '迨' => '迨',
+ '逮' => '迨',
+ '游' => '游',
+ '逰' => '游',
+ '周' => '周',
+ '週' => '周',
+ '进' => '进',
+ '進' => '进',
+ '劮' => '劮',
+ '逸' => '劮',
+ '远' => '远',
+ '逺' => '远',
+ '踰' => '踰',
+ '逾' => '踰',
+ '遅' => '迟',
+ '遉' => '侦',
+ '遊' => '游',
+ '运' => '运',
+ '運' => '运',
+ '徧' => '徧',
+ '遍' => '徧',
+ '过' => '过',
+ '過' => '过',
+ '徨' => '徨',
+ '遑' => '徨',
+ '達' => '达',
+ '违' => '违',
+ '違' => '违',
+ '遜' => '愻',
+ '遞' => '递',
+ '遟' => '迟',
+ '遠' => '远',
+ '遡' => '泝',
+ '遙' => '遙',
+ '遥' => '遙',
+ '章' => '章',
+ '遧' => '章',
+ '适' => '适',
+ '適' => '适',
+ '遁' => '遁',
+ '遯' => '遁',
+ '遲' => '迟',
+ '矬' => '矬',
+ '遳' => '矬',
+ '遶' => '繞',
+ '迁' => '迁',
+ '遷' => '迁',
+ '选' => '选',
+ '選' => '选',
+ '遗' => '遗',
+ '遺' => '遗',
+ '辽' => '辽',
+ '遼' => '辽',
+ '辟' => '辟',
+ '避' => '辟',
+ '迈' => '迈',
+ '邁' => '迈',
+ '还' => '还',
+ '還' => '还',
+ '迩' => '迩',
+ '邇' => '迩',
+ '边' => '边',
+ '邉' => '边',
+ '邊' => '边',
+ '原' => '原',
+ '邍' => '原',
+ '逻' => '逻',
+ '邏' => '逻',
+ '逦' => '逦',
+ '邐' => '逦',
+ '村' => '村',
+ '邨' => '村',
+ '欝' => '欝',
+ '郁' => '欝',
+ '邢' => '邢',
+ '郉' => '邢',
+ '郘' => '吕',
+ '郎' => '郎',
+ '郞' => '郎',
+ '郏' => '郏',
+ '郟' => '郏',
+ '渤' => '渤',
+ '郣' => '渤',
+ '墎' => '墎',
+ '郭' => '墎',
+ '郲' => '莱',
+ '邮' => '邮',
+ '郵' => '邮',
+ '乡' => '乡',
+ '郷' => '乡',
+ '邶' => '邶',
+ '鄁' => '邶',
+ '鄃' => '俞',
+ '郓' => '郓',
+ '鄆' => '郓',
+ '鄉' => '乡',
+ '邹' => '邹',
+ '鄒' => '邹',
+ '邬' => '邬',
+ '鄔' => '邬',
+ '鄕' => '乡',
+ '郧' => '郧',
+ '鄖' => '郧',
+ '鄦' => '許',
+ '邓' => '邓',
+ '鄧' => '邓',
+ '郑' => '郑',
+ '鄭' => '郑',
+ '邻' => '邻',
+ '鄰' => '邻',
+ '郸' => '郸',
+ '鄲' => '郸',
+ '邺' => '邺',
+ '鄴' => '邺',
+ '郐' => '郐',
+ '鄶' => '郐',
+ '郰' => '郰',
+ '鄹' => '郰',
+ '邝' => '邝',
+ '鄺' => '邝',
+ '鄷' => '鄷',
+ '酆' => '鄷',
+ '酂' => '酂',
+ '酇' => '酂',
+ '郦' => '郦',
+ '酈' => '郦',
+ '丣' => '丣',
+ '酉' => '丣',
+ '詶' => '詶',
+ '酧' => '詶',
+ '酬' => '詶',
+ '腌' => '腌',
+ '醃' => '腌',
+ '醆' => '琖',
+ '酔' => '酔',
+ '醉' => '酔',
+ '酢' => '酢',
+ '醋' => '酢',
+ '酝' => '酝',
+ '醖' => '酝',
+ '丑' => '丑',
+ '醜' => '丑',
+ '醞' => '酝',
+ '醡' => '搾',
+ '醫' => '医',
+ '酱' => '酱',
+ '醬' => '酱',
+ '酦' => '酦',
+ '醱' => '酦',
+ '醻' => '詶',
+ '宴' => '宴',
+ '醼' => '宴',
+ '酿' => '酿',
+ '釀' => '酿',
+ '衅' => '衅',
+ '釁' => '衅',
+ '酾' => '酾',
+ '釃' => '酾',
+ '酽' => '酽',
+ '釅' => '酽',
+ '釆' => '办',
+ '採' => '採',
+ '采' => '採',
+ '释' => '释',
+ '釋' => '释',
+ '里' => '裏',
+ '緟' => '緟',
+ '重' => '緟',
+ '埜' => '埜',
+ '野' => '埜',
+ '厘' => '厘',
+ '釐' => '厘',
+ '金' => '金',
+ '釒' => '金',
+ '扣' => '扣',
+ '釦' => '扣',
+ '焊' => '焊',
+ '釬' => '焊',
+ '䥺' => '䥺',
+ '釾' => '䥺',
+ '螤' => '螤',
+ '鈡' => '螤',
+ '巨' => '巨',
+ '鉅' => '巨',
+ '和' => '和',
+ '鉌' => '和',
+ '鉗' => '拑',
+ '鈆' => '鈆',
+ '鉛' => '鈆',
+ '缽' => '缽',
+ '鉢' => '缽',
+ '鈎' => '鈎',
+ '鉤' => '鈎',
+ '銜' => '啣',
+ '銲' => '焊',
+ '耡' => '耡',
+ '鋤' => '耡',
+ '舖' => '舖',
+ '鋪' => '舖',
+ '銳' => '銳',
+ '鋭' => '銳',
+ '碗' => '碗',
+ '鋺' => '碗',
+ '錄' => '彔',
+ '銭' => '銭',
+ '錢' => '銭',
+ '録' => '彔',
+ '表' => '表',
+ '錶' => '表',
+ '捺' => '捺',
+ '錼' => '捺',
+ '鋄' => '鋄',
+ '錽' => '鋄',
+ '鍊' => '炼',
+ '煅' => '煅',
+ '鍛' => '煅',
+ '臿' => '臿',
+ '鍤' => '臿',
+ '鍾' => '螤',
+ '劆' => '劆',
+ '鎌' => '劆',
+ '熔' => '熔',
+ '鎔' => '熔',
+ '矟' => '矟',
+ '鎙' => '矟',
+ '錘' => '錘',
+ '鎚' => '錘',
+ '蓥' => '蓥',
+ '鎣' => '蓥',
+ '鎭' => '鎭',
+ '鎮' => '鎭',
+ '賹' => '賹',
+ '鎰' => '賹',
+ '鎖' => '鎖',
+ '鏁' => '鎖',
+ '鎛' => '鎛',
+ '鏄' => '鎛',
+ '旋' => '旋',
+ '鏇' => '旋',
+ '鏎' => '毕',
+ '鍞' => '鍞',
+ '鏗' => '鍞',
+ '鏟' => '刬',
+ '錾' => '錾',
+ '鏨' => '錾',
+ '罅' => '罅',
+ '鏬' => '罅',
+ '錋' => '錋',
+ '鏰' => '錋',
+ '䥽' => '䥽',
+ '鏺' => '䥽',
+ '銹' => '銹',
+ '鏽' => '銹',
+ '鐀' => '匮',
+ '鉆' => '鉆',
+ '鐉' => '鉆',
+ '鍚' => '鍚',
+ '鐊' => '鍚',
+ '鍥' => '鍥',
+ '鐑' => '鍥',
+ '鐘' => '螤',
+ '䦅' => '䦅',
+ '鐥' => '䦅',
+ '鏀' => '鏀',
+ '鐪' => '鏀',
+ '鎸' => '鎸',
+ '鐫' => '鎸',
+ '鐮' => '劆',
+ '䦃' => '䦃',
+ '鐯' => '䦃',
+ '鐱' => '剑',
+ '銕' => '銕',
+ '鐵' => '銕',
+ '鍱' => '鍱',
+ '鐷' => '鍱',
+ '鋳' => '鋳',
+ '鑄' => '鋳',
+ '鉴' => '鉴',
+ '鑑' => '鉴',
+ '鑒' => '鉴',
+ '鑛' => '矿',
+ '刨' => '刨',
+ '鑤' => '刨',
+ '鑨' => '砻',
+ '鑪' => '炉',
+ '鑮' => '鎛',
+ '尖' => '尖',
+ '鑯' => '尖',
+ '鈅' => '鈅',
+ '鑰' => '鈅',
+ '鍵' => '鍵',
+ '鑳' => '鍵',
+ '罐' => '罐',
+ '鑵' => '罐',
+ '鑽' => '鉆',
+ '銮' => '銮',
+ '鑾' => '銮',
+ '凿' => '凿',
+ '鑿' => '凿',
+ '䦆' => '䦆',
+ '钁' => '䦆',
+ '鎲' => '鎲',
+ '钂' => '鎲',
+ '钅' => '金',
+ '釓' => '釓',
+ '钆' => '釓',
+ '釔' => '釔',
+ '钇' => '釔',
+ '針' => '針',
+ '针' => '針',
+ '釘' => '釘',
+ '钉' => '釘',
+ '釗' => '釗',
+ '钊' => '釗',
+ '釙' => '釙',
+ '钋' => '釙',
+ '釕' => '釕',
+ '钌' => '釕',
+ '釷' => '釷',
+ '钍' => '釷',
+ '釺' => '釺',
+ '钎' => '釺',
+ '釧' => '釧',
+ '钏' => '釧',
+ '釤' => '釤',
+ '钐' => '釤',
+ '鈒' => '鈒',
+ '钑' => '鈒',
+ '釩' => '釩',
+ '钒' => '釩',
+ '釣' => '釣',
+ '钓' => '釣',
+ '鍆' => '鍆',
+ '钔' => '鍆',
+ '釹' => '釹',
+ '钕' => '釹',
+ '钖' => '鍚',
+ '釵' => '釵',
+ '钗' => '釵',
+ '鈃' => '鈃',
+ '钘' => '鈃',
+ '鈣' => '鈣',
+ '钙' => '鈣',
+ '鈈' => '鈈',
+ '钚' => '鈈',
+ '鈦' => '鈦',
+ '钛' => '鈦',
+ '钜' => '巨',
+ '鈍' => '鈍',
+ '钝' => '鈍',
+ '鈔' => '鈔',
+ '钞' => '鈔',
+ '钟' => '螤',
+ '鈉' => '鈉',
+ '钠' => '鈉',
+ '鋇' => '鋇',
+ '钡' => '鋇',
+ '鋼' => '鋼',
+ '钢' => '鋼',
+ '鈑' => '鈑',
+ '钣' => '鈑',
+ '鈐' => '鈐',
+ '钤' => '鈐',
+ '钥' => '鈅',
+ '欽' => '欽',
+ '钦' => '欽',
+ '鈞' => '鈞',
+ '钧' => '鈞',
+ '鎢' => '鎢',
+ '钨' => '鎢',
+ '钩' => '鈎',
+ '鈧' => '鈧',
+ '钪' => '鈧',
+ '鈁' => '鈁',
+ '钫' => '鈁',
+ '鈥' => '鈥',
+ '钬' => '鈥',
+ '鈄' => '鈄',
+ '钭' => '鈄',
+ '鈕' => '鈕',
+ '钮' => '鈕',
+ '鈀' => '鈀',
+ '钯' => '鈀',
+ '鈺' => '鈺',
+ '钰' => '鈺',
+ '钱' => '銭',
+ '鉦' => '鉦',
+ '钲' => '鉦',
+ '钳' => '拑',
+ '鈷' => '鈷',
+ '钴' => '鈷',
+ '钵' => '缽',
+ '鈳' => '鈳',
+ '钶' => '鈳',
+ '鉕' => '鉕',
+ '钷' => '鉕',
+ '鈽' => '鈽',
+ '钸' => '鈽',
+ '鈸' => '鈸',
+ '钹' => '鈸',
+ '鉞' => '鉞',
+ '钺' => '鉞',
+ '钻' => '鉆',
+ '鉬' => '鉬',
+ '钼' => '鉬',
+ '鉭' => '鉭',
+ '钽' => '鉭',
+ '鉀' => '鉀',
+ '钾' => '鉀',
+ '鈿' => '鈿',
+ '钿' => '鈿',
+ '鈾' => '鈾',
+ '铀' => '鈾',
+ '铁' => '銕',
+ '鉑' => '鉑',
+ '铂' => '鉑',
+ '鈴' => '鈴',
+ '铃' => '鈴',
+ '鑠' => '鑠',
+ '铄' => '鑠',
+ '铅' => '鈆',
+ '鉚' => '鉚',
+ '铆' => '鉚',
+ '鉋' => '鉋',
+ '铇' => '鉋',
+ '鈰' => '鈰',
+ '铈' => '鈰',
+ '鉉' => '鉉',
+ '铉' => '鉉',
+ '鉈' => '鉈',
+ '铊' => '鉈',
+ '鉍' => '鉍',
+ '铋' => '鉍',
+ '鈮' => '鈮',
+ '铌' => '鈮',
+ '鈹' => '鈹',
+ '铍' => '鈹',
+ '鐸' => '鐸',
+ '铎' => '鐸',
+ '鉶' => '鉶',
+ '铏' => '鉶',
+ '銬' => '銬',
+ '铐' => '銬',
+ '銠' => '銠',
+ '铑' => '銠',
+ '鉺' => '鉺',
+ '铒' => '鉺',
+ '鋩' => '鋩',
+ '铓' => '鋩',
+ '錏' => '錏',
+ '铔' => '錏',
+ '銪' => '銪',
+ '铕' => '銪',
+ '鋮' => '鋮',
+ '铖' => '鋮',
+ '鋏' => '鋏',
+ '铗' => '鋏',
+ '鋣' => '鋣',
+ '铘' => '鋣',
+ '鐃' => '鐃',
+ '铙' => '鐃',
+ '銍' => '銍',
+ '铚' => '銍',
+ '鐺' => '鐺',
+ '铛' => '鐺',
+ '銅' => '銅',
+ '铜' => '銅',
+ '鋁' => '鋁',
+ '铝' => '鋁',
+ '銱' => '銱',
+ '铞' => '銱',
+ '銦' => '銦',
+ '铟' => '銦',
+ '鎧' => '鎧',
+ '铠' => '鎧',
+ '鍘' => '鍘',
+ '铡' => '鍘',
+ '銖' => '銖',
+ '铢' => '銖',
+ '銑' => '銑',
+ '铣' => '銑',
+ '鋌' => '鋌',
+ '铤' => '鋌',
+ '銩' => '銩',
+ '铥' => '銩',
+ '銛' => '銛',
+ '铦' => '銛',
+ '鏵' => '鏵',
+ '铧' => '鏵',
+ '銓' => '銓',
+ '铨' => '銓',
+ '鎩' => '鎩',
+ '铩' => '鎩',
+ '鉿' => '鉿',
+ '铪' => '鉿',
+ '銚' => '銚',
+ '铫' => '銚',
+ '鉻' => '鉻',
+ '铬' => '鉻',
+ '銘' => '銘',
+ '铭' => '銘',
+ '錚' => '錚',
+ '铮' => '錚',
+ '銫' => '銫',
+ '铯' => '銫',
+ '鉸' => '鉸',
+ '铰' => '鉸',
+ '銥' => '銥',
+ '铱' => '銥',
+ '铲' => '刬',
+ '銃' => '銃',
+ '铳' => '銃',
+ '鐋' => '鐋',
+ '铴' => '鐋',
+ '銨' => '銨',
+ '铵' => '銨',
+ '銀' => '銀',
+ '银' => '銀',
+ '銣' => '銣',
+ '铷' => '銣',
+ '铸' => '鋳',
+ '鐒' => '鐒',
+ '铹' => '鐒',
+ '铺' => '舖',
+ '鋙' => '鋙',
+ '铻' => '鋙',
+ '錸' => '錸',
+ '铼' => '錸',
+ '鋱' => '鋱',
+ '铽' => '鋱',
+ '鏈' => '鏈',
+ '链' => '鏈',
+ '铿' => '鍞',
+ '銷' => '銷',
+ '销' => '銷',
+ '锁' => '鎖',
+ '鋰' => '鋰',
+ '锂' => '鋰',
+ '鋥' => '鋥',
+ '锃' => '鋥',
+ '锄' => '耡',
+ '鍋' => '鍋',
+ '锅' => '鍋',
+ '鋯' => '鋯',
+ '锆' => '鋯',
+ '鋨' => '鋨',
+ '锇' => '鋨',
+ '锈' => '銹',
+ '銼' => '銼',
+ '锉' => '銼',
+ '鋝' => '鋝',
+ '锊' => '鋝',
+ '鋒' => '鋒',
+ '锋' => '鋒',
+ '鋅' => '鋅',
+ '锌' => '鋅',
+ '鋶' => '鋶',
+ '锍' => '鋶',
+ '鐦' => '鐦',
+ '锎' => '鐦',
+ '鐧' => '鐧',
+ '锏' => '鐧',
+ '锐' => '銳',
+ '銻' => '銻',
+ '锑' => '銻',
+ '鋃' => '鋃',
+ '锒' => '鋃',
+ '鋟' => '鋟',
+ '锓' => '鋟',
+ '鋦' => '鋦',
+ '锔' => '鋦',
+ '錒' => '錒',
+ '锕' => '錒',
+ '錆' => '錆',
+ '锖' => '錆',
+ '鍺' => '鍺',
+ '锗' => '鍺',
+ '鍩' => '鍩',
+ '锘' => '鍩',
+ '錯' => '錯',
+ '错' => '錯',
+ '錨' => '錨',
+ '锚' => '錨',
+ '錛' => '錛',
+ '锛' => '錛',
+ '錡' => '錡',
+ '锜' => '錡',
+ '鍀' => '鍀',
+ '锝' => '鍀',
+ '錁' => '錁',
+ '锞' => '錁',
+ '錕' => '錕',
+ '锟' => '錕',
+ '錩' => '錩',
+ '锠' => '錩',
+ '錫' => '錫',
+ '锡' => '錫',
+ '錮' => '錮',
+ '锢' => '錮',
+ '鑼' => '鑼',
+ '锣' => '鑼',
+ '锤' => '錘',
+ '錐' => '錐',
+ '锥' => '錐',
+ '錦' => '錦',
+ '锦' => '錦',
+ '鑕' => '鑕',
+ '锧' => '鑕',
+ '鍁' => '鍁',
+ '锨' => '鍁',
+ '錈' => '錈',
+ '锩' => '錈',
+ '鍃' => '鍃',
+ '锪' => '鍃',
+ '錇' => '錇',
+ '锫' => '錇',
+ '錟' => '錟',
+ '锬' => '錟',
+ '錠' => '錠',
+ '锭' => '錠',
+ '键' => '鍵',
+ '鋸' => '鋸',
+ '锯' => '鋸',
+ '錳' => '錳',
+ '锰' => '錳',
+ '錙' => '錙',
+ '锱' => '錙',
+ '锲' => '鍥',
+ '鍈' => '鍈',
+ '锳' => '鍈',
+ '鍇' => '鍇',
+ '锴' => '鍇',
+ '鏘' => '鏘',
+ '锵' => '鏘',
+ '鍶' => '鍶',
+ '锶' => '鍶',
+ '鍔' => '鍔',
+ '锷' => '鍔',
+ '锸' => '臿',
+ '鍬' => '鍬',
+ '锹' => '鍬',
+ '锺' => '螤',
+ '锻' => '煅',
+ '鎪' => '鎪',
+ '锼' => '鎪',
+ '鍠' => '鍠',
+ '锽' => '鍠',
+ '鍰' => '鍰',
+ '锾' => '鍰',
+ '鎄' => '鎄',
+ '锿' => '鎄',
+ '鍍' => '鍍',
+ '镀' => '鍍',
+ '鎂' => '鎂',
+ '镁' => '鎂',
+ '鏤' => '鏤',
+ '镂' => '鏤',
+ '鎡' => '鎡',
+ '镃' => '鎡',
+ '鐨' => '鐨',
+ '镄' => '鐨',
+ '鎇' => '鎇',
+ '镅' => '鎇',
+ '鏌' => '鏌',
+ '镆' => '鏌',
+ '镇' => '鎭',
+ '镈' => '鎛',
+ '鎘' => '鎘',
+ '镉' => '鎘',
+ '鑷' => '鑷',
+ '镊' => '鑷',
+ '镋' => '鎲',
+ '镌' => '鎸',
+ '鎳' => '鎳',
+ '镍' => '鎳',
+ '鎿' => '鎿',
+ '镎' => '鎿',
+ '鎦' => '鎦',
+ '镏' => '鎦',
+ '鎬' => '鎬',
+ '镐' => '鎬',
+ '鎊' => '鎊',
+ '镑' => '鎊',
+ '镒' => '賹',
+ '鎵' => '鎵',
+ '镓' => '鎵',
+ '鑌' => '鑌',
+ '镔' => '鑌',
+ '镕' => '熔',
+ '鏢' => '鏢',
+ '镖' => '鏢',
+ '鏜' => '鏜',
+ '镗' => '鏜',
+ '鏝' => '鏝',
+ '镘' => '鏝',
+ '鏍' => '鏍',
+ '镙' => '鏍',
+ '镚' => '錋',
+ '鏞' => '鏞',
+ '镛' => '鏞',
+ '鏡' => '鏡',
+ '镜' => '鏡',
+ '鏑' => '鏑',
+ '镝' => '鏑',
+ '鏃' => '鏃',
+ '镞' => '鏃',
+ '镟' => '旋',
+ '鏐' => '鏐',
+ '镠' => '鏐',
+ '鐔' => '鐔',
+ '镡' => '鐔',
+ '鐝' => '鐝',
+ '镢' => '鐝',
+ '鐐' => '鐐',
+ '镣' => '鐐',
+ '鏷' => '鏷',
+ '镤' => '鏷',
+ '鑥' => '鑥',
+ '镥' => '鑥',
+ '鐓' => '鐓',
+ '镦' => '鐓',
+ '鑭' => '鑭',
+ '镧' => '鑭',
+ '鐠' => '鐠',
+ '镨' => '鐠',
+ '鑹' => '鑹',
+ '镩' => '鑹',
+ '鏹' => '鏹',
+ '镪' => '鏹',
+ '鐙' => '鐙',
+ '镫' => '鐙',
+ '鑊' => '鑊',
+ '镬' => '鑊',
+ '鐳' => '鐳',
+ '镭' => '鐳',
+ '鐶' => '鐶',
+ '镮' => '鐶',
+ '鐲' => '鐲',
+ '镯' => '鐲',
+ '镰' => '劆',
+ '鐿' => '鐿',
+ '镱' => '鐿',
+ '鑔' => '鑔',
+ '镲' => '鑔',
+ '鑣' => '鑣',
+ '镳' => '鑣',
+ '鑞' => '鑞',
+ '镴' => '鑞',
+ '鑱' => '鑱',
+ '镵' => '鑱',
+ '鑲' => '鑲',
+ '镶' => '鑲',
+ '長' => '長',
+ '长' => '長',
+ '閇' => '閇',
+ '閉' => '閇',
+ '开' => '开',
+ '開' => '开',
+ '关' => '关',
+ '閞' => '关',
+ '関' => '关',
+ '閤' => '合',
+ '哄' => '哄',
+ '閧' => '哄',
+ '閱' => '閱',
+ '閲' => '閱',
+ '閷' => '杀',
+ '閆' => '閆',
+ '閻' => '閆',
+ '板' => '板',
+ '闆' => '板',
+ '闇' => '晻',
+ '濶' => '濶',
+ '闊' => '濶',
+ '闗' => '关',
+ '斗' => '斗',
+ '闘' => '斗',
+ '闚' => '窥',
+ '關' => '关',
+ '灛' => '灛',
+ '闡' => '灛',
+ '闢' => '辟',
+ '門' => '門',
+ '门' => '門',
+ '閂' => '閂',
+ '闩' => '閂',
+ '閃' => '閃',
+ '闪' => '閃',
+ '闫' => '閆',
+ '閈' => '閈',
+ '闬' => '閈',
+ '闭' => '閇',
+ '問' => '問',
+ '问' => '問',
+ '闖' => '闖',
+ '闯' => '闖',
+ '閏' => '閏',
+ '闰' => '閏',
+ '闈' => '闈',
+ '闱' => '闈',
+ '閑' => '閑',
+ '闲' => '閑',
+ '閎' => '閎',
+ '闳' => '閎',
+ '間' => '間',
+ '间' => '間',
+ '閔' => '閔',
+ '闵' => '閔',
+ '閌' => '閌',
+ '闶' => '閌',
+ '悶' => '悶',
+ '闷' => '悶',
+ '閘' => '閘',
+ '闸' => '閘',
+ '閙' => '閙',
+ '闹' => '閙',
+ '閨' => '閨',
+ '闺' => '閨',
+ '聞' => '聞',
+ '闻' => '聞',
+ '闥' => '闥',
+ '闼' => '闥',
+ '閩' => '閩',
+ '闽' => '閩',
+ '閭' => '閭',
+ '闾' => '閭',
+ '闓' => '闓',
+ '闿' => '闓',
+ '閥' => '閥',
+ '阀' => '閥',
+ '閣' => '閣',
+ '阁' => '閣',
+ '閡' => '閡',
+ '阂' => '閡',
+ '閫' => '閫',
+ '阃' => '閫',
+ '阅' => '閱',
+ '閬' => '閬',
+ '阆' => '閬',
+ '闍' => '闍',
+ '阇' => '闍',
+ '閾' => '閾',
+ '阈' => '閾',
+ '閹' => '閹',
+ '阉' => '閹',
+ '閶' => '閶',
+ '阊' => '閶',
+ '閿' => '閿',
+ '阌' => '閿',
+ '閽' => '閽',
+ '阍' => '閽',
+ '阎' => '閆',
+ '閼' => '閼',
+ '阏' => '閼',
+ '阐' => '灛',
+ '闌' => '闌',
+ '阑' => '闌',
+ '闃' => '闃',
+ '阒' => '闃',
+ '闠' => '闠',
+ '阓' => '闠',
+ '阔' => '濶',
+ '闋' => '闋',
+ '阕' => '闋',
+ '闔' => '闔',
+ '阖' => '闔',
+ '闐' => '闐',
+ '阗' => '闐',
+ '闒' => '闒',
+ '阘' => '闒',
+ '闕' => '闕',
+ '阙' => '闕',
+ '闞' => '闞',
+ '阚' => '闞',
+ '闤' => '闤',
+ '阛' => '闤',
+ '峊' => '峊',
+ '阜' => '峊',
+ '阝' => '峊',
+ '屹' => '屹',
+ '阣' => '屹',
+ '厄' => '厄',
+ '阨' => '厄',
+ '坂' => '坂',
+ '阪' => '坂',
+ '坑' => '坑',
+ '阬' => '坑',
+ '址' => '址',
+ '阯' => '址',
+ '穽' => '穽',
+ '阱' => '穽',
+ '昜' => '昜',
+ '阳' => '昜',
+ '堦' => '堦',
+ '阶' => '堦',
+ '坿' => '坿',
+ '附' => '坿',
+ '坴' => '坴',
+ '陆' => '坴',
+ '敶' => '敶',
+ '陈' => '敶',
+ '垓' => '垓',
+ '陔' => '垓',
+ '陉' => '陉',
+ '陘' => '陉',
+ '陕' => '陕',
+ '陜' => '陕',
+ '陝' => '陕',
+ '陞' => '升',
+ '阵' => '阵',
+ '陣' => '阵',
+ '险' => '硷',
+ '阴' => '阴',
+ '陰' => '阴',
+ '陳' => '敶',
+ '琌' => '琌',
+ '陵' => '琌',
+ '匋' => '匋',
+ '陶' => '匋',
+ '陸' => '坴',
+ '陽' => '昜',
+ '堤' => '堤',
+ '隄' => '堤',
+ '陧' => '陧',
+ '隉' => '陧',
+ '队' => '队',
+ '隊' => '队',
+ '階' => '堦',
+ '陨' => '陨',
+ '隕' => '陨',
+ '郄' => '郄',
+ '隙' => '郄',
+ '际' => '际',
+ '際' => '际',
+ '墇' => '墇',
+ '障' => '墇',
+ '敖' => '敖',
+ '隞' => '敖',
+ '隐' => '隐',
+ '隠' => '隐',
+ '隣' => '邻',
+ '随' => '随',
+ '隨' => '随',
+ '險' => '硷',
+ '隱' => '隐',
+ '隓' => '隓',
+ '隳' => '隓',
+ '陇' => '陇',
+ '隴' => '陇',
+ '隶' => '隶',
+ '隷' => '隶',
+ '隸' => '隶',
+ '隻' => '只',
+ '弋' => '弋',
+ '隿' => '弋',
+ '僱' => '僱',
+ '雇' => '僱',
+ '隽' => '隽',
+ '雋' => '隽',
+ '杂' => '杂',
+ '雑' => '杂',
+ '雕' => '彫',
+ '虽' => '虽',
+ '雖' => '虽',
+ '双' => '双',
+ '雙' => '双',
+ '雏' => '雏',
+ '雛' => '雏',
+ '雜' => '杂',
+ '雍' => '雍',
+ '雝' => '雍',
+ '雠' => '仇',
+ '离' => '离',
+ '離' => '离',
+ '难' => '难',
+ '難' => '难',
+ '雥' => '杂',
+ '氛' => '氛',
+ '雰' => '氛',
+ '云' => '云',
+ '雲' => '云',
+ '电' => '电',
+ '電' => '电',
+ '誫' => '誫',
+ '震' => '誫',
+ '灵' => '灵',
+ '霊' => '灵',
+ '癨' => '癨',
+ '霍' => '癨',
+ '沾' => '沾',
+ '霑' => '沾',
+ '霒' => '阴',
+ '霓' => '蛪',
+ '赮' => '赮',
+ '霞' => '赮',
+ '霠' => '阴',
+ '雾' => '雾',
+ '霧' => '雾',
+ '廓' => '廓',
+ '霩' => '廓',
+ '覇' => '覇',
+ '霸' => '覇',
+ '溦' => '溦',
+ '霺' => '溦',
+ '霁' => '霁',
+ '霽' => '霁',
+ '雳' => '雳',
+ '靂' => '雳',
+ '霭' => '霭',
+ '靄' => '霭',
+ '叇' => '叇',
+ '靆' => '叇',
+ '靈' => '灵',
+ '叆' => '叆',
+ '靉' => '叆',
+ '靑' => '靑',
+ '青' => '靑',
+ '靓' => '靓',
+ '靚' => '靓',
+ '静' => '静',
+ '靜' => '静',
+ '靔' => '靔',
+ '靝' => '靔',
+ '靥' => '靥',
+ '靨' => '靥',
+ '肕' => '肕',
+ '靭' => '肕',
+ '靻' => '靻',
+ '靼' => '靻',
+ '鞂' => '秸',
+ '鞌' => '鞌',
+ '鞍' => '鞌',
+ '巩' => '巩',
+ '鞏' => '巩',
+ '鞒' => '桥',
+ '陱' => '陱',
+ '鞠' => '陱',
+ '鞤' => '帮',
+ '鞦' => '秋',
+ '鞽' => '桥',
+ '韁' => '繮',
+ '鞑' => '鞑',
+ '韃' => '鞑',
+ '韆' => '仟',
+ '韈' => '袜',
+ '鞯' => '鞯',
+ '韉' => '鞯',
+ '韌' => '肕',
+ '韤' => '袜',
+ '韣' => '韣',
+ '韥' => '韣',
+ '韋' => '韋',
+ '韦' => '韋',
+ '韧' => '肕',
+ '韍' => '韍',
+ '韨' => '韍',
+ '韓' => '韓',
+ '韩' => '韓',
+ '韙' => '韙',
+ '韪' => '韙',
+ '韞' => '韞',
+ '韫' => '韞',
+ '韜' => '韜',
+ '韬' => '韜',
+ '韭' => '韭',
+ '韮' => '韭',
+ '虀' => '虀',
+ '韲' => '虀',
+ '韵' => '韵',
+ '韻' => '韵',
+ '响' => '响',
+ '響' => '响',
+ '頒' => '朌',
+ '頉' => '頉',
+ '頤' => '頉',
+ '頫' => '俛',
+ '头' => '头',
+ '頭' => '头',
+ '穎' => '穎',
+ '頴' => '穎',
+ '頚' => '頚',
+ '頸' => '頚',
+ '穨' => '穨',
+ '頹' => '穨',
+ '頼' => '賴',
+ '頽' => '穨',
+ '顊' => '頉',
+ '顐' => '諢',
+ '顏' => '顏',
+ '顔' => '顏',
+ '显' => '显',
+ '顕' => '显',
+ '愿' => '愿',
+ '願' => '愿',
+ '傎' => '傎',
+ '顚' => '傎',
+ '顛' => '傎',
+ '类' => '类',
+ '類' => '类',
+ '蹙' => '蹙',
+ '顣' => '蹙',
+ '頋' => '頋',
+ '顧' => '頋',
+ '顯' => '显',
+ '頁' => '頁',
+ '页' => '頁',
+ '頂' => '頂',
+ '顶' => '頂',
+ '頃' => '頃',
+ '顷' => '頃',
+ '頇' => '頇',
+ '顸' => '頇',
+ '項' => '項',
+ '项' => '項',
+ '順' => '順',
+ '顺' => '順',
+ '須' => '須',
+ '须' => '須',
+ '頊' => '頊',
+ '顼' => '頊',
+ '頑' => '頑',
+ '顽' => '頑',
+ '顾' => '頋',
+ '頓' => '頓',
+ '顿' => '頓',
+ '頎' => '頎',
+ '颀' => '頎',
+ '颁' => '朌',
+ '頌' => '頌',
+ '颂' => '頌',
+ '頏' => '頏',
+ '颃' => '頏',
+ '預' => '預',
+ '预' => '預',
+ '顱' => '顱',
+ '颅' => '顱',
+ '領' => '領',
+ '领' => '領',
+ '頗' => '頗',
+ '颇' => '頗',
+ '颈' => '頚',
+ '頡' => '頡',
+ '颉' => '頡',
+ '頰' => '頰',
+ '颊' => '頰',
+ '頲' => '頲',
+ '颋' => '頲',
+ '頜' => '頜',
+ '颌' => '頜',
+ '潁' => '潁',
+ '颍' => '潁',
+ '熲' => '熲',
+ '颎' => '熲',
+ '頦' => '頦',
+ '颏' => '頦',
+ '颐' => '頉',
+ '頻' => '頻',
+ '频' => '頻',
+ '頮' => '頮',
+ '颒' => '頮',
+ '颓' => '穨',
+ '頷' => '頷',
+ '颔' => '頷',
+ '颕' => '穎',
+ '颖' => '穎',
+ '顆' => '顆',
+ '颗' => '顆',
+ '題' => '題',
+ '题' => '題',
+ '顒' => '顒',
+ '颙' => '顒',
+ '顎' => '顎',
+ '颚' => '顎',
+ '顓' => '顓',
+ '颛' => '顓',
+ '颜' => '顏',
+ '額' => '額',
+ '额' => '額',
+ '顳' => '顳',
+ '颞' => '顳',
+ '顢' => '顢',
+ '颟' => '顢',
+ '颠' => '傎',
+ '顙' => '顙',
+ '颡' => '顙',
+ '顥' => '顥',
+ '颢' => '顥',
+ '纇' => '纇',
+ '颣' => '纇',
+ '顫' => '顫',
+ '颤' => '顫',
+ '顬' => '顬',
+ '颥' => '顬',
+ '顰' => '顰',
+ '颦' => '顰',
+ '顴' => '顴',
+ '颧' => '顴',
+ '凨' => '凨',
+ '風' => '凨',
+ '颱' => '台',
+ '颳' => '刮',
+ '颺' => '扬',
+ '旚' => '旚',
+ '飃' => '旚',
+ '飄' => '旚',
+ '飆' => '飆',
+ '飈' => '飆',
+ '飌' => '凨',
+ '风' => '凨',
+ '飏' => '扬',
+ '颭' => '颭',
+ '飐' => '颭',
+ '颮' => '颮',
+ '飑' => '颮',
+ '颯' => '颯',
+ '飒' => '颯',
+ '颶' => '颶',
+ '飓' => '颶',
+ '颸' => '颸',
+ '飔' => '颸',
+ '颼' => '颼',
+ '飕' => '颼',
+ '颻' => '颻',
+ '飖' => '颻',
+ '飀' => '飀',
+ '飗' => '飀',
+ '飘' => '旚',
+ '飙' => '飆',
+ '飚' => '飆',
+ '飜' => '繙',
+ '飛' => '飛',
+ '飞' => '飛',
+ '食' => '食',
+ '飠' => '食',
+ '飯' => '飯',
+ '飰' => '飯',
+ '飹' => '飹',
+ '飽' => '飹',
+ '飪' => '飪',
+ '餁' => '飪',
+ '糍' => '糍',
+ '餈' => '糍',
+ '养' => '养',
+ '養' => '养',
+ '喰' => '喰',
+ '餐' => '喰',
+ '余' => '余',
+ '餘' => '余',
+ '肴' => '肴',
+ '餚' => '肴',
+ '飾' => '飾',
+ '餝' => '飾',
+ '餅' => '餅',
+ '餠' => '餅',
+ '舘' => '舘',
+ '館' => '舘',
+ '糊' => '糊',
+ '餬' => '糊',
+ '糇' => '糇',
+ '餱' => '糇',
+ '喂' => '喂',
+ '餵' => '喂',
+ '糖' => '糖',
+ '餹' => '糖',
+ '飫' => '飫',
+ '饇' => '飫',
+ '糤' => '糤',
+ '饊' => '糤',
+ '餽' => '餽',
+ '饋' => '餽',
+ '飢' => '飢',
+ '饑' => '飢',
+ '飨' => '飨',
+ '饗' => '飨',
+ '餍' => '餍',
+ '饜' => '餍',
+ '餉' => '餉',
+ '饟' => '餉',
+ '饣' => '食',
+ '飣' => '飣',
+ '饤' => '飣',
+ '饥' => '飢',
+ '飥' => '飥',
+ '饦' => '飥',
+ '餳' => '餳',
+ '饧' => '餳',
+ '飩' => '飩',
+ '饨' => '飩',
+ '餼' => '餼',
+ '饩' => '餼',
+ '饪' => '飪',
+ '饫' => '飫',
+ '飭' => '飭',
+ '饬' => '飭',
+ '饭' => '飯',
+ '飲' => '飲',
+ '饮' => '飲',
+ '餞' => '餞',
+ '饯' => '餞',
+ '饰' => '飾',
+ '饱' => '飹',
+ '飼' => '飼',
+ '饲' => '飼',
+ '飿' => '飿',
+ '饳' => '飿',
+ '飴' => '飴',
+ '饴' => '飴',
+ '餌' => '餌',
+ '饵' => '餌',
+ '饒' => '饒',
+ '饶' => '饒',
+ '饷' => '餉',
+ '餄' => '餄',
+ '饸' => '餄',
+ '餎' => '餎',
+ '饹' => '餎',
+ '餃' => '餃',
+ '饺' => '餃',
+ '餏' => '餏',
+ '饻' => '餏',
+ '饼' => '餅',
+ '餑' => '餑',
+ '饽' => '餑',
+ '餖' => '餖',
+ '饾' => '餖',
+ '餓' => '餓',
+ '饿' => '餓',
+ '馀' => '余',
+ '餒' => '餒',
+ '馁' => '餒',
+ '餕' => '餕',
+ '馂' => '餕',
+ '餜' => '餜',
+ '馃' => '餜',
+ '餛' => '餛',
+ '馄' => '餛',
+ '餡' => '餡',
+ '馅' => '餡',
+ '馆' => '舘',
+ '餷' => '餷',
+ '馇' => '餷',
+ '馈' => '餽',
+ '餶' => '餶',
+ '馉' => '餶',
+ '餿' => '餿',
+ '馊' => '餿',
+ '饞' => '饞',
+ '馋' => '饞',
+ '饁' => '饁',
+ '馌' => '饁',
+ '饃' => '饃',
+ '馍' => '饃',
+ '餺' => '餺',
+ '馎' => '餺',
+ '餾' => '餾',
+ '馏' => '餾',
+ '饈' => '饈',
+ '馐' => '饈',
+ '饉' => '饉',
+ '馑' => '饉',
+ '饅' => '饅',
+ '馒' => '饅',
+ '馓' => '糤',
+ '饌' => '饌',
+ '馔' => '饌',
+ '饢' => '饢',
+ '馕' => '饢',
+ '聝' => '聝',
+ '馘' => '聝',
+ '馨' => '馨',
+ '馫' => '馨',
+ '冯' => '冯',
+ '馮' => '冯',
+ '馽' => '絷',
+ '馱' => '馱',
+ '駄' => '馱',
+ '敺' => '敺',
+ '駆' => '敺',
+ '駈' => '敺',
+ '駝' => '駝',
+ '駞' => '駝',
+ '駡' => '傌',
+ '駁' => '駁',
+ '駮' => '駁',
+ '駭' => '駭',
+ '駴' => '駭',
+ '騃' => '呆',
+ '駢' => '駢',
+ '騈' => '駢',
+ '騌' => '騌',
+ '騣' => '騌',
+ '騪' => '捜',
+ '腾' => '腾',
+ '騰' => '腾',
+ '騲' => '艸',
+ '騏' => '騏',
+ '騹' => '騏',
+ '蓦' => '蓦',
+ '驀' => '蓦',
+ '驅' => '敺',
+ '驆' => '跸',
+ '騺' => '騺',
+ '驇' => '騺',
+ '憍' => '憍',
+ '驕' => '憍',
+ '惊' => '惊',
+ '驚' => '惊',
+ '驩' => '懽',
+ '馬' => '馬',
+ '马' => '馬',
+ '馭' => '馭',
+ '驭' => '馭',
+ '驮' => '馱',
+ '馴' => '馴',
+ '驯' => '馴',
+ '馳' => '馳',
+ '驰' => '馳',
+ '驱' => '敺',
+ '馹' => '馹',
+ '驲' => '馹',
+ '驳' => '駁',
+ '驢' => '驢',
+ '驴' => '驢',
+ '駔' => '駔',
+ '驵' => '駔',
+ '駛' => '駛',
+ '驶' => '駛',
+ '駟' => '駟',
+ '驷' => '駟',
+ '駙' => '駙',
+ '驸' => '駙',
+ '駒' => '駒',
+ '驹' => '駒',
+ '騶' => '騶',
+ '驺' => '騶',
+ '駐' => '駐',
+ '驻' => '駐',
+ '驼' => '駝',
+ '駑' => '駑',
+ '驽' => '駑',
+ '駕' => '駕',
+ '驾' => '駕',
+ '驛' => '驛',
+ '驿' => '驛',
+ '駘' => '駘',
+ '骀' => '駘',
+ '驍' => '驍',
+ '骁' => '驍',
+ '骂' => '傌',
+ '駰' => '駰',
+ '骃' => '駰',
+ '骄' => '憍',
+ '驊' => '驊',
+ '骅' => '驊',
+ '駱' => '駱',
+ '骆' => '駱',
+ '骇' => '駭',
+ '骈' => '駢',
+ '驫' => '驫',
+ '骉' => '驫',
+ '驪' => '驪',
+ '骊' => '驪',
+ '騁' => '騁',
+ '骋' => '騁',
+ '驗' => '驗',
+ '验' => '驗',
+ '騂' => '騂',
+ '骍' => '騂',
+ '駸' => '駸',
+ '骎' => '駸',
+ '駿' => '駿',
+ '骏' => '駿',
+ '骐' => '騏',
+ '騎' => '騎',
+ '骑' => '騎',
+ '騍' => '騍',
+ '骒' => '騍',
+ '騅' => '騅',
+ '骓' => '騅',
+ '骔' => '騌',
+ '驌' => '驌',
+ '骕' => '驌',
+ '驂' => '驂',
+ '骖' => '驂',
+ '騙' => '騙',
+ '骗' => '騙',
+ '騭' => '騭',
+ '骘' => '騭',
+ '騤' => '騤',
+ '骙' => '騤',
+ '騷' => '騷',
+ '骚' => '騷',
+ '騖' => '騖',
+ '骛' => '騖',
+ '驁' => '驁',
+ '骜' => '驁',
+ '騮' => '騮',
+ '骝' => '騮',
+ '騫' => '騫',
+ '骞' => '騫',
+ '騸' => '騸',
+ '骟' => '騸',
+ '驃' => '驃',
+ '骠' => '驃',
+ '騾' => '騾',
+ '骡' => '騾',
+ '驄' => '驄',
+ '骢' => '驄',
+ '驏' => '驏',
+ '骣' => '驏',
+ '驟' => '驟',
+ '骤' => '驟',
+ '驥' => '驥',
+ '骥' => '驥',
+ '驦' => '驦',
+ '骦' => '驦',
+ '驤' => '驤',
+ '骧' => '驤',
+ '骪' => '骪',
+ '骫' => '骪',
+ '肮' => '肮',
+ '骯' => '肮',
+ '骵' => '体',
+ '踍' => '踍',
+ '骹' => '踍',
+ '胯' => '胯',
+ '骻' => '胯',
+ '膸' => '膸',
+ '髄' => '膸',
+ '骴' => '骴',
+ '髊' => '骴',
+ '髌' => '膑',
+ '髅' => '髅',
+ '髏' => '髅',
+ '髒' => '脏',
+ '髓' => '膸',
+ '體' => '体',
+ '髕' => '膑',
+ '髋' => '髋',
+ '髖' => '髋',
+ '高' => '高',
+ '髙' => '高',
+ '髣' => '仿',
+ '髦' => '氂',
+ '髪' => '发',
+ '髮' => '发',
+ '髥' => '髥',
+ '髯' => '髥',
+ '髴' => '仏',
+ '痢' => '痢',
+ '鬁' => '痢',
+ '鬃' => '騌',
+ '鬆' => '松',
+ '鬍' => '胡',
+ '瘌' => '瘌',
+ '鬎' => '瘌',
+ '鬚' => '須',
+ '髺' => '髺',
+ '鬠' => '髺',
+ '鬓' => '鬓',
+ '鬢' => '鬓',
+ '鬥' => '斗',
+ '鬦' => '斗',
+ '鬧' => '閙',
+ '鬨' => '哄',
+ '阋' => '阋',
+ '鬩' => '阋',
+ '鬪' => '斗',
+ '鬫' => '闞',
+ '鬬' => '斗',
+ '鬭' => '斗',
+ '阄' => '阄',
+ '鬮' => '阄',
+ '鬰' => '欝',
+ '鬱' => '欝',
+ '鬶' => '鬶',
+ '鬹' => '鬶',
+ '粥' => '粥',
+ '鬻' => '粥',
+ '櫆' => '櫆',
+ '魁' => '櫆',
+ '蜮' => '蜮',
+ '魊' => '蜮',
+ '魉' => '魉',
+ '魎' => '魉',
+ '魇' => '魇',
+ '魘' => '魇',
+ '魡' => '釣',
+ '蚶' => '蚶',
+ '魽' => '蚶',
+ '䲟' => '䲟',
+ '鮣' => '䲟',
+ '觟' => '觟',
+ '鮭' => '觟',
+ '鮮' => '尟',
+ '骾' => '骾',
+ '鯁' => '骾',
+ '魦' => '魦',
+ '鯊' => '魦',
+ '鯋' => '魦',
+ '鮝' => '鮝',
+ '鯗' => '鮝',
+ '䲠' => '䲠',
+ '鰆' => '䲠',
+ '䲡' => '䲡',
+ '鰌' => '䲡',
+ '鰍' => '䲡',
+ '䲢' => '䲢',
+ '鰧' => '䲢',
+ '鯽' => '鯽',
+ '鰿' => '鯽',
+ '鰫' => '鰫',
+ '鱅' => '鰫',
+ '魼' => '魼',
+ '鱋' => '魼',
+ '鱓' => '鱓',
+ '鱔' => '鱓',
+ '鰥' => '鰥',
+ '鱞' => '鰥',
+ '鰐' => '鰐',
+ '鱷' => '鰐',
+ '魚' => '魚',
+ '鱼' => '魚',
+ '魛' => '魛',
+ '鱽' => '魛',
+ '魷' => '魷',
+ '鱿' => '魷',
+ '魨' => '魨',
+ '鲀' => '魨',
+ '魯' => '魯',
+ '鲁' => '魯',
+ '魴' => '魴',
+ '鲂' => '魴',
+ '魺' => '魺',
+ '鲄' => '魺',
+ '鮁' => '鮁',
+ '鲅' => '鮁',
+ '鮃' => '鮃',
+ '鲆' => '鮃',
+ '鮎' => '鮎',
+ '鲇' => '鮎',
+ '鱸' => '鱸',
+ '鲈' => '鱸',
+ '鮋' => '鮋',
+ '鲉' => '鮋',
+ '鮓' => '鮓',
+ '鲊' => '鮓',
+ '鮒' => '鮒',
+ '鲋' => '鮒',
+ '鮊' => '鮊',
+ '鲌' => '鮊',
+ '鮑' => '鮑',
+ '鲍' => '鮑',
+ '鱟' => '鱟',
+ '鲎' => '鱟',
+ '鮍' => '鮍',
+ '鲏' => '鮍',
+ '鮐' => '鮐',
+ '鲐' => '鮐',
+ '鲑' => '觟',
+ '鮚' => '鮚',
+ '鲒' => '鮚',
+ '鮳' => '鮳',
+ '鲓' => '鮳',
+ '鮪' => '鮪',
+ '鲔' => '鮪',
+ '鮞' => '鮞',
+ '鲕' => '鮞',
+ '鮦' => '鮦',
+ '鲖' => '鮦',
+ '鰂' => '鰂',
+ '鲗' => '鰂',
+ '鮜' => '鮜',
+ '鲘' => '鮜',
+ '鱠' => '鱠',
+ '鲙' => '鱠',
+ '鱭' => '鱭',
+ '鲚' => '鱭',
+ '鮫' => '鮫',
+ '鲛' => '鮫',
+ '鲜' => '尟',
+ '鮺' => '鮺',
+ '鲝' => '鮺',
+ '鲞' => '鮝',
+ '鱘' => '鱘',
+ '鲟' => '鱘',
+ '鲠' => '骾',
+ '鱺' => '鱺',
+ '鲡' => '鱺',
+ '鰱' => '鰱',
+ '鲢' => '鰱',
+ '鰹' => '鰹',
+ '鲣' => '鰹',
+ '鯉' => '鯉',
+ '鲤' => '鯉',
+ '鰣' => '鰣',
+ '鲥' => '鰣',
+ '鰷' => '鰷',
+ '鲦' => '鰷',
+ '鯀' => '鯀',
+ '鲧' => '鯀',
+ '鲨' => '魦',
+ '鯇' => '鯇',
+ '鲩' => '鯇',
+ '鮶' => '鮶',
+ '鲪' => '鮶',
+ '鲫' => '鯽',
+ '鯒' => '鯒',
+ '鲬' => '鯒',
+ '鯖' => '鯖',
+ '鲭' => '鯖',
+ '鯪' => '鯪',
+ '鲮' => '鯪',
+ '鯕' => '鯕',
+ '鲯' => '鯕',
+ '鯫' => '鯫',
+ '鲰' => '鯫',
+ '鯡' => '鯡',
+ '鲱' => '鯡',
+ '鯤' => '鯤',
+ '鲲' => '鯤',
+ '鯧' => '鯧',
+ '鲳' => '鯧',
+ '鯝' => '鯝',
+ '鲴' => '鯝',
+ '鯢' => '鯢',
+ '鲵' => '鯢',
+ '鯰' => '鯰',
+ '鲶' => '鯰',
+ '鯛' => '鯛',
+ '鲷' => '鯛',
+ '鯨' => '鯨',
+ '鲸' => '鯨',
+ '鰺' => '鰺',
+ '鲹' => '鰺',
+ '鯴' => '鯴',
+ '鲺' => '鯴',
+ '鯔' => '鯔',
+ '鲻' => '鯔',
+ '鱝' => '鱝',
+ '鲼' => '鱝',
+ '鰈' => '鰈',
+ '鲽' => '鰈',
+ '鰏' => '鰏',
+ '鲾' => '鰏',
+ '鱨' => '鱨',
+ '鲿' => '鱨',
+ '鯷' => '鯷',
+ '鳀' => '鯷',
+ '鰛' => '鰛',
+ '鳁' => '鰛',
+ '鰓' => '鰓',
+ '鳃' => '鰓',
+ '鳄' => '鰐',
+ '鳅' => '䲡',
+ '鰒' => '鰒',
+ '鳆' => '鰒',
+ '鰉' => '鰉',
+ '鳇' => '鰉',
+ '鯿' => '鯿',
+ '鳊' => '鯿',
+ '鰠' => '鰠',
+ '鳋' => '鰠',
+ '鰲' => '鰲',
+ '鳌' => '鰲',
+ '鰭' => '鰭',
+ '鳍' => '鰭',
+ '鰨' => '鰨',
+ '鳎' => '鰨',
+ '鳏' => '鰥',
+ '鰩' => '鰩',
+ '鳐' => '鰩',
+ '鰟' => '鰟',
+ '鳑' => '鰟',
+ '鰜' => '鰜',
+ '鳒' => '鰜',
+ '鰳' => '鰳',
+ '鳓' => '鰳',
+ '鰾' => '鰾',
+ '鳔' => '鰾',
+ '鱈' => '鱈',
+ '鳕' => '鱈',
+ '鱉' => '鱉',
+ '鳖' => '鱉',
+ '鰻' => '鰻',
+ '鳗' => '鰻',
+ '鰵' => '鰵',
+ '鳘' => '鰵',
+ '鳙' => '鰫',
+ '鰼' => '鰼',
+ '鳛' => '鰼',
+ '鱖' => '鱖',
+ '鳜' => '鱖',
+ '鳝' => '鱓',
+ '鱗' => '鱗',
+ '鳞' => '鱗',
+ '鱒' => '鱒',
+ '鳟' => '鱒',
+ '鱯' => '鱯',
+ '鳠' => '鱯',
+ '鱧' => '鱧',
+ '鳢' => '鱧',
+ '鱣' => '鱣',
+ '鳣' => '鱣',
+ '凫' => '凫',
+ '鳧' => '凫',
+ '雁' => '雁',
+ '鳫' => '雁',
+ '鳬' => '凫',
+ '雞' => '雞',
+ '鳮' => '雞',
+ '凤' => '凤',
+ '鳯' => '凤',
+ '鳳' => '凤',
+ '䴓' => '䴓',
+ '鳾' => '䴓',
+ '鴂' => '鴂',
+ '鴃' => '鴂',
+ '鳵' => '鳵',
+ '鴇' => '鳵',
+ '鴈' => '雁',
+ '雉' => '雉',
+ '鴙' => '雉',
+ '䴕' => '䴕',
+ '鴷' => '䴕',
+ '䴔' => '䴔',
+ '鵁' => '䴔',
+ '鵛' => '頚',
+ '鵝' => '鵝',
+ '鵞' => '鵝',
+ '鵰' => '彫',
+ '鴉' => '鴉',
+ '鵶' => '鴉',
+ '䴖' => '䴖',
+ '鶄' => '䴖',
+ '鵾' => '鵾',
+ '鶤' => '鵾',
+ '䴗' => '䴗',
+ '鶪' => '䴗',
+ '莺' => '莺',
+ '鶯' => '莺',
+ '鶵' => '雏',
+ '翰' => '翰',
+ '鶾' => '翰',
+ '鷄' => '雞',
+ '䴘' => '䴘',
+ '鷈' => '䴘',
+ '鷉' => '䴘',
+ '鷍' => '枭',
+ '鶒' => '鶒',
+ '鷘' => '鶒',
+ '鷰' => '燕',
+ '鷳' => '鷳',
+ '鷴' => '鷳',
+ '䴙' => '䴙',
+ '鷿' => '䴙',
+ '鸊' => '䴙',
+ '鵑' => '鵑',
+ '鸝' => '鵑',
+ '鵉' => '鵉',
+ '鸞' => '鵉',
+ '鳥' => '鳥',
+ '鸟' => '鳥',
+ '鳩' => '鳩',
+ '鸠' => '鳩',
+ '鸡' => '雞',
+ '鳶' => '鳶',
+ '鸢' => '鳶',
+ '鳴' => '鳴',
+ '鸣' => '鳴',
+ '鳲' => '鳲',
+ '鸤' => '鳲',
+ '鷗' => '鷗',
+ '鸥' => '鷗',
+ '鸦' => '鴉',
+ '鶬' => '鶬',
+ '鸧' => '鶬',
+ '鸨' => '鳵',
+ '鴆' => '鴆',
+ '鸩' => '鴆',
+ '鴣' => '鴣',
+ '鸪' => '鴣',
+ '鶇' => '鶇',
+ '鸫' => '鶇',
+ '鸕' => '鸕',
+ '鸬' => '鸕',
+ '鴨' => '鴨',
+ '鸭' => '鴨',
+ '鴞' => '鴞',
+ '鸮' => '鴞',
+ '鴦' => '鴦',
+ '鸯' => '鴦',
+ '鴒' => '鴒',
+ '鸰' => '鴒',
+ '鴟' => '鴟',
+ '鸱' => '鴟',
+ '鴝' => '鴝',
+ '鸲' => '鴝',
+ '鴛' => '鴛',
+ '鸳' => '鴛',
+ '鷽' => '鷽',
+ '鸴' => '鷽',
+ '鴕' => '鴕',
+ '鸵' => '鴕',
+ '鷥' => '鷥',
+ '鸶' => '鷥',
+ '鷙' => '鷙',
+ '鸷' => '鷙',
+ '鴯' => '鴯',
+ '鸸' => '鴯',
+ '鴰' => '鴰',
+ '鸹' => '鴰',
+ '鵂' => '鵂',
+ '鸺' => '鵂',
+ '鴴' => '鴴',
+ '鸻' => '鴴',
+ '鵃' => '鵃',
+ '鸼' => '鵃',
+ '鴿' => '鴿',
+ '鸽' => '鴿',
+ '鸾' => '鵉',
+ '鴻' => '鴻',
+ '鸿' => '鴻',
+ '鵐' => '鵐',
+ '鹀' => '鵐',
+ '鵓' => '鵓',
+ '鹁' => '鵓',
+ '鹂' => '鵑',
+ '鹃' => '鵑',
+ '鵠' => '鵠',
+ '鹄' => '鵠',
+ '鹅' => '鵝',
+ '鵒' => '鵒',
+ '鹆' => '鵒',
+ '鹇' => '鷳',
+ '鵜' => '鵜',
+ '鹈' => '鵜',
+ '鵡' => '鵡',
+ '鹉' => '鵡',
+ '鵲' => '鵲',
+ '鹊' => '鵲',
+ '鶓' => '鶓',
+ '鹋' => '鶓',
+ '鵪' => '鵪',
+ '鹌' => '鵪',
+ '鹍' => '鵾',
+ '鵯' => '鵯',
+ '鹎' => '鵯',
+ '鵬' => '鵬',
+ '鹏' => '鵬',
+ '鵮' => '鵮',
+ '鹐' => '鵮',
+ '鶉' => '鶉',
+ '鹑' => '鶉',
+ '鶊' => '鶊',
+ '鹒' => '鶊',
+ '鵷' => '鵷',
+ '鹓' => '鵷',
+ '鷫' => '鷫',
+ '鹔' => '鷫',
+ '鶘' => '鶘',
+ '鹕' => '鶘',
+ '鶡' => '鶡',
+ '鹖' => '鶡',
+ '鶚' => '鶚',
+ '鹗' => '鶚',
+ '鶻' => '鶻',
+ '鹘' => '鶻',
+ '鶖' => '鶖',
+ '鹙' => '鶖',
+ '鶿' => '鶿',
+ '鹚' => '鶿',
+ '鶥' => '鶥',
+ '鹛' => '鶥',
+ '鶩' => '鶩',
+ '鹜' => '鶩',
+ '鷊' => '鷊',
+ '鹝' => '鷊',
+ '鷂' => '鷂',
+ '鹞' => '鷂',
+ '鶲' => '鶲',
+ '鹟' => '鶲',
+ '鶹' => '鶹',
+ '鹠' => '鶹',
+ '鶺' => '鶺',
+ '鹡' => '鶺',
+ '鷁' => '鷁',
+ '鹢' => '鷁',
+ '鶼' => '鶼',
+ '鹣' => '鶼',
+ '鶴' => '鶴',
+ '鹤' => '鶴',
+ '鷖' => '鷖',
+ '鹥' => '鷖',
+ '鸚' => '鸚',
+ '鹦' => '鸚',
+ '鷓' => '鷓',
+ '鹧' => '鷓',
+ '鷚' => '鷚',
+ '鹨' => '鷚',
+ '鷯' => '鷯',
+ '鹩' => '鷯',
+ '鷦' => '鷦',
+ '鹪' => '鷦',
+ '鷲' => '鷲',
+ '鹫' => '鷲',
+ '鷸' => '鷸',
+ '鹬' => '鷸',
+ '鷺' => '鷺',
+ '鹭' => '鷺',
+ '鸇' => '鸇',
+ '鹯' => '鸇',
+ '鷹' => '鷹',
+ '鹰' => '鷹',
+ '鸌' => '鸌',
+ '鹱' => '鸌',
+ '鸏' => '鸏',
+ '鹲' => '鸏',
+ '鸛' => '鸛',
+ '鹳' => '鸛',
+ '鸘' => '鸘',
+ '鹴' => '鸘',
+ '鹵' => '卤',
+ '咸' => '咸',
+ '鹹' => '咸',
+ '鹼' => '硷',
+ '鹽' => '塩',
+ '鹺' => '鹺',
+ '鹾' => '鹺',
+ '麁' => '粗',
+ '麄' => '粗',
+ '麆' => '粗',
+ '麊' => '麊',
+ '麋' => '麊',
+ '丽' => '丽',
+ '麗' => '丽',
+ '麖' => '麖',
+ '麠' => '麖',
+ '麤' => '粗',
+ '麥' => '麥',
+ '麦' => '麥',
+ '面' => '面',
+ '麪' => '面',
+ '曲' => '曲',
+ '麯' => '曲',
+ '麴' => '曲',
+ '麵' => '面',
+ '麩' => '麩',
+ '麸' => '麩',
+ '麻' => '淋',
+ '麼' => '么',
+ '麽' => '么',
+ '黃' => '黃',
+ '黄' => '黃',
+ '黉' => '黉',
+ '黌' => '黉',
+ '菞' => '菞',
+ '黎' => '菞',
+ '黑' => '黑',
+ '黒' => '黑',
+ '軡' => '軡',
+ '黔' => '軡',
+ '默' => '默',
+ '黙' => '默',
+ '點' => '奌',
+ '党' => '党',
+ '黨' => '党',
+ '黪' => '黪',
+ '黲' => '黪',
+ '霉' => '霉',
+ '黴' => '霉',
+ '黡' => '黡',
+ '黶' => '黡',
+ '黩' => '黩',
+ '黷' => '黩',
+ '黽' => '黽',
+ '黾' => '黽',
+ '蛛' => '蛛',
+ '鼄' => '蛛',
+ '蜘' => '蜘',
+ '鼅' => '蜘',
+ '鼇' => '鰲',
+ '鼈' => '鱉',
+ '黿' => '黿',
+ '鼋' => '黿',
+ '鼂' => '鼂',
+ '鼌' => '鼂',
+ '鼉' => '鼉',
+ '鼍' => '鼉',
+ '鼓' => '皷',
+ '冬' => '冬',
+ '鼕' => '冬',
+ '鞀' => '鞀',
+ '鼗' => '鞀',
+ '鼰' => '鼰',
+ '鼳' => '鼰',
+ '鼴' => '鼴',
+ '鼹' => '鼴',
+ '哻' => '哻',
+ '鼾' => '哻',
+ '鼿' => '鼿',
+ '齀' => '鼿',
+ '頞' => '頞',
+ '齃' => '頞',
+ '齊' => '亝',
+ '齋' => '斋',
+ '齎' => '賫',
+ '齏' => '虀',
+ '齐' => '亝',
+ '齑' => '虀',
+ '歯' => '歯',
+ '齒' => '歯',
+ '齣' => '出',
+ '齛' => '齛',
+ '齥' => '齛',
+ '齧' => '啮',
+ '咬' => '咬',
+ '齩' => '咬',
+ '踀' => '踀',
+ '齪' => '踀',
+ '齫' => '齫',
+ '齳' => '齫',
+ '腭' => '腭',
+ '齶' => '腭',
+ '齿' => '歯',
+ '齔' => '齔',
+ '龀' => '齔',
+ '齕' => '齕',
+ '龁' => '齕',
+ '齗' => '齗',
+ '龂' => '齗',
+ '齟' => '齟',
+ '龃' => '齟',
+ '齡' => '齡',
+ '龄' => '齡',
+ '齙' => '齙',
+ '龅' => '齙',
+ '齠' => '齠',
+ '龆' => '齠',
+ '齜' => '齜',
+ '龇' => '齜',
+ '齦' => '齦',
+ '龈' => '齦',
+ '齬' => '齬',
+ '龉' => '齬',
+ '龊' => '踀',
+ '齲' => '齲',
+ '龋' => '齲',
+ '齷' => '齷',
+ '龌' => '齷',
+ '竜' => '竜',
+ '龍' => '竜',
+ '龎' => '厐',
+ '龐' => '厐',
+ '䶮' => '䶮',
+ '龑' => '䶮',
+ '龒' => '竜',
+ '龖' => '龖',
+ '龘' => '龖',
+ '龙' => '竜',
+ '龔' => '龔',
+ '龚' => '龔',
+ '龕' => '龕',
+ '龛' => '龕',
+ '亀' => '亀',
+ '龜' => '亀',
+ '龝' => '秋',
+ '龞' => '鱉',
+ '龟' => '亀',
+ '龢' => '和',
+ 'ꃀ' => 'ꃀ',
+ '꒜' => 'ꃀ',
+ 'ꁊ' => 'ꁊ',
+ '꒞' => 'ꁊ',
+ 'ꁐ' => 'ꁐ',
+ '꒬' => 'ꁐ',
+ 'ꏂ' => 'ꏂ',
+ '꒰' => 'ꏂ',
+ 'ꎿ' => 'ꎿ',
+ '꒺' => 'ꎿ',
+ 'ꊱ' => 'ꊱ',
+ '꒾' => 'ꊱ',
+ 'ꉙ' => 'ꉙ',
+ '꒿' => 'ꉙ',
+ 'ꎫ' => 'ꎫ',
+ '꓀' => 'ꎫ',
+ 'ꎵ' => 'ꎵ',
+ '꓂' => 'ꎵ',
+ '・' => '・',
+ '・' => '・',
+ 'ヲ' => 'ヲ',
+ 'ヲ' => 'ヲ',
+ 'ァ' => 'ァ',
+ 'ァ' => 'ァ',
+ 'ィ' => 'ィ',
+ 'ィ' => 'ィ',
+ 'ゥ' => 'ゥ',
+ 'ゥ' => 'ゥ',
+ 'ェ' => 'ェ',
+ 'ェ' => 'ェ',
+ 'ォ' => 'ォ',
+ 'ォ' => 'ォ',
+ 'ャ' => 'ャ',
+ 'ャ' => 'ャ',
+ 'ュ' => 'ュ',
+ 'ュ' => 'ュ',
+ 'ョ' => 'ョ',
+ 'ョ' => 'ョ',
+ 'ッ' => 'ッ',
+ 'ッ' => 'ッ',
+ 'ー' => 'ー',
+ 'ー' => 'ー',
+ 'ア' => 'ア',
+ 'ア' => 'ア',
+ 'イ' => 'イ',
+ 'イ' => 'イ',
+ 'ウ' => 'ウ',
+ 'ウ' => 'ウ',
+ 'エ' => 'エ',
+ 'エ' => 'エ',
+ 'オ' => 'オ',
+ 'オ' => 'オ',
+ 'カ' => 'カ',
+ 'カ' => 'カ',
+ 'キ' => 'キ',
+ 'キ' => 'キ',
+ 'ク' => 'ク',
+ 'ク' => 'ク',
+ 'ケ' => 'ケ',
+ 'ケ' => 'ケ',
+ 'コ' => 'コ',
+ 'コ' => 'コ',
+ 'サ' => 'サ',
+ 'サ' => 'サ',
+ 'シ' => 'シ',
+ 'シ' => 'シ',
+ 'ス' => 'ス',
+ 'ス' => 'ス',
+ 'セ' => 'セ',
+ 'セ' => 'セ',
+ 'ソ' => 'ソ',
+ 'ソ' => 'ソ',
+ 'タ' => 'タ',
+ 'タ' => 'タ',
+ 'チ' => 'チ',
+ 'チ' => 'チ',
+ 'ツ' => 'ツ',
+ 'ツ' => 'ツ',
+ 'テ' => 'テ',
+ 'テ' => 'テ',
+ 'ト' => 'ト',
+ 'ト' => 'ト',
+ 'ナ' => 'ナ',
+ 'ナ' => 'ナ',
+ 'ニ' => 'ニ',
+ 'ニ' => 'ニ',
+ 'ヌ' => 'ヌ',
+ 'ヌ' => 'ヌ',
+ 'ネ' => 'ネ',
+ 'ネ' => 'ネ',
+ 'ノ' => 'ノ',
+ 'ノ' => 'ノ',
+ 'ハ' => 'ハ',
+ 'ハ' => 'ハ',
+ 'ヒ' => 'ヒ',
+ 'ヒ' => 'ヒ',
+ 'フ' => 'フ',
+ 'フ' => 'フ',
+ 'ヘ' => 'へ',
+ 'ホ' => 'ホ',
+ 'ホ' => 'ホ',
+ 'マ' => 'マ',
+ 'マ' => 'マ',
+ 'ミ' => 'ミ',
+ 'ミ' => 'ミ',
+ 'ム' => 'ム',
+ 'ム' => 'ム',
+ 'メ' => 'メ',
+ 'メ' => 'メ',
+ 'モ' => 'モ',
+ 'モ' => 'モ',
+ 'ヤ' => 'ヤ',
+ 'ヤ' => 'ヤ',
+ 'ユ' => 'ユ',
+ 'ユ' => 'ユ',
+ 'ヨ' => 'ヨ',
+ 'ヨ' => 'ヨ',
+ 'ラ' => 'ラ',
+ 'ラ' => 'ラ',
+ 'リ' => 'リ',
+ 'リ' => 'リ',
+ 'ル' => 'ル',
+ 'ル' => 'ル',
+ 'レ' => 'レ',
+ 'レ' => 'レ',
+ 'ロ' => 'ロ',
+ 'ロ' => 'ロ',
+ 'ワ' => 'ワ',
+ 'ワ' => 'ワ',
+ 'ン' => 'ン',
+ 'ン' => 'ン',
+ '゙' => '゙',
+ '゙' => '゙',
+ '゚' => '゚',
+ '゚' => '゚',
+ 'ㅤ' => 'ㅤ',
+ 'ᅠ' => 'ㅤ',
+ 'ㄱ' => 'ㄱ',
+ 'ᄀ' => 'ㄱ',
+ 'ㄲ' => 'ㄲ',
+ 'ᄁ' => 'ㄲ',
+ 'ㄳ' => 'ㄳ',
+ 'ᆪ' => 'ㄳ',
+ 'ㄴ' => 'ㄴ',
+ 'ᄂ' => 'ㄴ',
+ 'ㄵ' => 'ㄵ',
+ 'ᆬ' => 'ㄵ',
+ 'ㄶ' => 'ㄶ',
+ 'ᆭ' => 'ㄶ',
+ 'ㄷ' => 'ㄷ',
+ 'ᄃ' => 'ㄷ',
+ 'ㄸ' => 'ㄸ',
+ 'ᄄ' => 'ㄸ',
+ 'ㄹ' => 'ㄹ',
+ 'ᄅ' => 'ㄹ',
+ 'ㄺ' => 'ㄺ',
+ 'ᆰ' => 'ㄺ',
+ 'ㄻ' => 'ㄻ',
+ 'ᆱ' => 'ㄻ',
+ 'ㄼ' => 'ㄼ',
+ 'ᆲ' => 'ㄼ',
+ 'ㄽ' => 'ㄽ',
+ 'ᆳ' => 'ㄽ',
+ 'ㄾ' => 'ㄾ',
+ 'ᆴ' => 'ㄾ',
+ 'ㄿ' => 'ㄿ',
+ 'ᆵ' => 'ㄿ',
+ 'ㅀ' => 'ㅀ',
+ 'ᄚ' => 'ㅀ',
+ 'ㅁ' => 'ㅁ',
+ 'ᄆ' => 'ㅁ',
+ 'ㅂ' => 'ㅂ',
+ 'ᄇ' => 'ㅂ',
+ 'ㅃ' => 'ㅃ',
+ 'ᄈ' => 'ㅃ',
+ 'ㅄ' => 'ㅄ',
+ 'ᄡ' => 'ㅄ',
+ 'ㅅ' => 'ㅅ',
+ 'ᄉ' => 'ㅅ',
+ 'ㅆ' => 'ㅆ',
+ 'ᄊ' => 'ㅆ',
+ 'ㅇ' => 'ㅇ',
+ 'ᄋ' => 'ㅇ',
+ 'ㅈ' => 'ㅈ',
+ 'ᄌ' => 'ㅈ',
+ 'ㅉ' => 'ㅉ',
+ 'ᄍ' => 'ㅉ',
+ 'ㅊ' => 'ㅊ',
+ 'ᄎ' => 'ㅊ',
+ 'ㅋ' => 'ㅋ',
+ 'ᄏ' => 'ㅋ',
+ 'ㅌ' => 'ㅌ',
+ 'ᄐ' => 'ㅌ',
+ 'ㅍ' => 'ㅍ',
+ 'ᄑ' => 'ㅍ',
+ 'ㅎ' => 'ㅎ',
+ 'ᄒ' => 'ㅎ',
+ 'ㅏ' => 'ㅏ',
+ 'ᅡ' => 'ㅏ',
+ 'ㅐ' => 'ㅐ',
+ 'ᅢ' => 'ㅐ',
+ 'ㅑ' => 'ㅑ',
+ 'ᅣ' => 'ㅑ',
+ 'ㅒ' => 'ㅒ',
+ 'ᅤ' => 'ㅒ',
+ 'ㅓ' => 'ㅓ',
+ 'ᅥ' => 'ㅓ',
+ 'ㅔ' => 'ㅔ',
+ 'ᅦ' => 'ㅔ',
+ 'ㅕ' => 'ㅕ',
+ 'ᅧ' => 'ㅕ',
+ 'ㅖ' => 'ㅖ',
+ 'ᅨ' => 'ㅖ',
+ 'ㅗ' => 'ㅗ',
+ 'ᅩ' => 'ㅗ',
+ 'ㅘ' => 'ㅘ',
+ 'ᅪ' => 'ㅘ',
+ 'ㅙ' => 'ㅙ',
+ 'ᅫ' => 'ㅙ',
+ 'ㅚ' => 'ㅚ',
+ 'ᅬ' => 'ㅚ',
+ 'ㅛ' => 'ㅛ',
+ 'ᅭ' => 'ㅛ',
+ 'ㅜ' => 'ㅜ',
+ 'ᅮ' => 'ㅜ',
+ 'ㅝ' => 'ㅝ',
+ 'ᅯ' => 'ㅝ',
+ 'ㅞ' => 'ㅞ',
+ 'ᅰ' => 'ㅞ',
+ 'ㅟ' => 'ㅟ',
+ 'ᅱ' => 'ㅟ',
+ 'ㅠ' => 'ㅠ',
+ 'ᅲ' => 'ㅠ',
+ 'ㅡ' => 'ㅡ',
+ 'ᅳ' => 'ㅡ',
+ 'ㅢ' => 'ㅢ',
+ 'ᅴ' => 'ㅢ',
+ 'ㅣ' => 'ㅣ',
+ 'ᅵ' => 'ㅣ',
+);
diff --git a/AntiSpoof/equivset.ser b/AntiSpoof/equivset.ser
new file mode 100644
index 00000000..c20200ca
--- /dev/null
+++ b/AntiSpoof/equivset.ser
@@ -0,0 +1 @@
+a:9155:{i:69;i:69;i:51;i:69;i:65;i:65;i:52;i:65;i:71;i:71;i:54;i:71;i:49;i:49;i:73;i:49;i:76;i:49;i:48;i:48;i:79;i:48;i:53;i:53;i:83;i:53;i:97;i:65;i:66;i:66;i:98;i:66;i:67;i:67;i:99;i:67;i:68;i:68;i:100;i:68;i:101;i:69;i:70;i:70;i:102;i:70;i:103;i:71;i:72;i:72;i:104;i:72;i:105;i:49;i:74;i:74;i:106;i:74;i:75;i:75;i:107;i:75;i:108;i:49;i:77;i:77;i:109;i:77;i:78;i:78;i:110;i:78;i:111;i:48;i:80;i:80;i:112;i:80;i:81;i:81;i:113;i:81;i:82;i:82;i:114;i:82;i:115;i:53;i:84;i:84;i:116;i:84;i:85;i:85;i:117;i:85;i:86;i:86;i:118;i:86;i:87;i:87;i:119;i:87;i:88;i:88;i:120;i:88;i:89;i:89;i:121;i:89;i:90;i:90;i:122;i:90;i:124;i:49;i:162;i:67;i:174;i:82;i:208;i:68;i:223;i:66;i:224;i:65;i:225;i:65;i:226;i:65;i:227;i:65;i:228;i:65;i:229;i:65;i:198;i:198;i:230;i:65;i:231;i:67;i:232;i:69;i:233;i:69;i:235;i:69;i:240;i:68;i:241;i:78;i:216;i:216;i:248;i:216;i:249;i:85;i:250;i:85;i:251;i:85;i:252;i:85;i:253;i:89;i:254;i:80;i:255;i:89;i:257;i:65;i:259;i:65;i:261;i:65;i:263;i:67;i:265;i:67;i:267;i:67;i:269;i:67;i:271;i:68;i:272;i:68;i:273;i:68;i:275;i:69;i:277;i:69;i:279;i:69;i:281;i:69;i:283;i:69;i:285;i:71;i:287;i:71;i:289;i:71;i:291;i:71;i:293;i:72;i:294;i:72;i:295;i:72;i:305;i:49;i:306;i:306;i:307;i:306;i:311;i:75;i:312;i:75;i:319;i:319;i:320;i:319;i:321;i:49;i:322;i:49;i:324;i:78;i:325;i:78;i:326;i:78;i:328;i:78;i:338;i:338;i:339;i:338;i:341;i:82;i:343;i:82;i:345;i:82;i:354;i:354;i:355;i:84;i:357;i:84;i:358;i:84;i:359;i:84;i:361;i:85;i:363;i:85;i:365;i:85;i:367;i:85;i:369;i:85;i:371;i:85;i:373;i:87;i:375;i:89;i:378;i:90;i:380;i:90;i:382;i:90;i:384;i:66;i:385;i:66;i:386;i:66;i:387;i:66;i:388;i:66;i:389;i:66;i:391;i:67;i:392;i:67;i:393;i:68;i:394;i:68;i:395;i:68;i:396;i:68;i:477;i:477;i:399;i:477;i:400;i:69;i:401;i:70;i:402;i:70;i:403;i:71;i:406;i:49;i:407;i:49;i:408;i:75;i:409;i:75;i:410;i:49;i:413;i:78;i:416;i:416;i:417;i:416;i:420;i:80;i:421;i:80;i:422;i:82;i:50;i:50;i:423;i:50;i:424;i:50;i:427;i:84;i:428;i:84;i:429;i:84;i:430;i:84;i:433;i:85;i:434;i:85;i:435;i:89;i:436;i:89;i:437;i:90;i:438;i:90;i:439;i:69;i:444;i:53;i:445;i:53;i:447;i:80;i:448;i:49;i:33;i:33;i:451;i:33;i:497;i:497;i:452;i:497;i:499;i:497;i:454;i:499;i:455;i:455;i:457;i:455;i:458;i:458;i:460;i:458;i:468;i:85;i:470;i:85;i:472;i:85;i:474;i:85;i:476;i:85;i:479;i:65;i:481;i:65;i:484;i:71;i:485;i:71;i:487;i:71;i:501;i:71;i:503;i:80;i:507;i:65;i:510;i:216;i:511;i:216;i:513;i:65;i:517;i:69;i:519;i:69;i:529;i:82;i:531;i:82;i:538;i:84;i:539;i:84;i:540;i:69;i:541;i:69;i:542;i:72;i:544;i:78;i:56;i:56;i:546;i:56;i:547;i:56;i:548;i:90;i:549;i:90;i:552;i:69;i:553;i:69;i:562;i:89;i:586;i:81;i:593;i:65;i:595;i:66;i:598;i:68;i:599;i:68;i:600;i:477;i:601;i:69;i:602;i:477;i:603;i:69;i:604;i:69;i:608;i:71;i:609;i:71;i:610;i:71;i:614;i:72;i:616;i:49;i:617;i:49;i:619;i:49;i:621;i:49;i:623;i:77;i:625;i:77;i:626;i:78;i:627;i:78;i:415;i:415;i:629;i:415;i:636;i:82;i:637;i:82;i:640;i:82;i:642;i:53;i:643;i:67;i:648;i:84;i:650;i:89;i:651;i:85;i:656;i:90;i:658;i:69;i:63;i:63;i:660;i:63;i:665;i:66;i:668;i:72;i:672;i:81;i:688;i:72;i:689;i:72;i:691;i:82;i:692;i:82;i:693;i:82;i:694;i:82;i:696;i:89;i:913;i:65;i:914;i:66;i:915;i:82;i:917;i:69;i:918;i:90;i:919;i:72;i:920;i:48;i:921;i:49;i:922;i:75;i:924;i:77;i:925;i:78;i:927;i:48;i:929;i:80;i:932;i:84;i:933;i:89;i:632;i:632;i:934;i:632;i:935;i:88;i:940;i:65;i:942;i:72;i:945;i:65;i:946;i:66;i:916;i:916;i:948;i:916;i:949;i:69;i:951;i:72;i:952;i:415;i:953;i:49;i:954;i:75;i:923;i:923;i:955;i:923;i:956;i:77;i:957;i:78;i:926;i:926;i:958;i:926;i:959;i:48;i:928;i:928;i:960;i:928;i:961;i:80;i:962;i:67;i:964;i:84;i:965;i:89;i:966;i:632;i:967;i:88;i:936;i:936;i:968;i:936;i:969;i:87;i:971;i:89;i:973;i:89;i:978;i:89;i:979;i:89;i:981;i:632;i:988;i:70;i:989;i:70;i:1000;i:50;i:1001;i:50;i:1010;i:67;i:1011;i:74;i:1012;i:415;i:1017;i:67;i:1028;i:69;i:1029;i:53;i:1030;i:49;i:1032;i:74;i:1035;i:72;i:1040;i:65;i:1041;i:71;i:1042;i:66;i:1043;i:82;i:1045;i:69;i:1047;i:69;i:1050;i:75;i:1052;i:77;i:1053;i:72;i:1054;i:48;i:1055;i:928;i:1056;i:80;i:1057;i:67;i:1058;i:84;i:1059;i:89;i:1060;i:632;i:1061;i:88;i:1066;i:66;i:1068;i:66;i:1072;i:65;i:1073;i:66;i:1074;i:66;i:1075;i:82;i:1077;i:69;i:1046;i:1046;i:1078;i:1046;i:1079;i:69;i:1048;i:1048;i:1080;i:1048;i:1082;i:75;i:1051;i:1051;i:1083;i:1051;i:1084;i:77;i:1085;i:72;i:1086;i:48;i:1087;i:928;i:1088;i:80;i:1089;i:67;i:1090;i:84;i:1091;i:89;i:1092;i:632;i:1093;i:88;i:1094;i:85;i:1098;i:66;i:1067;i:1067;i:1099;i:1067;i:1100;i:66;i:1071;i:1071;i:1103;i:82;i:1108;i:69;i:1109;i:53;i:1110;i:49;i:1112;i:74;i:1114;i:72;i:1115;i:72;i:1116;i:75;i:1122;i:66;i:1123;i:66;i:1138;i:415;i:1139;i:415;i:1140;i:86;i:1141;i:86;i:1148;i:1148;i:1149;i:1148;i:1162;i:1048;i:1163;i:1048;i:1164;i:66;i:1165;i:66;i:1168;i:1168;i:1169;i:1168;i:1170;i:70;i:1171;i:70;i:1174;i:1046;i:1175;i:1046;i:1176;i:69;i:1177;i:69;i:1178;i:75;i:1179;i:75;i:1181;i:75;i:1182;i:75;i:1183;i:75;i:1185;i:75;i:1186;i:72;i:1187;i:72;i:1194;i:67;i:1195;i:67;i:1196;i:84;i:1197;i:84;i:1198;i:89;i:1199;i:89;i:1200;i:89;i:1201;i:89;i:1202;i:88;i:1203;i:88;i:1206;i:89;i:1207;i:89;i:1210;i:72;i:1211;i:72;i:1212;i:1212;i:1213;i:1212;i:1214;i:1212;i:1215;i:1212;i:1216;i:49;i:1220;i:75;i:1221;i:1051;i:1222;i:1051;i:1223;i:72;i:1224;i:72;i:1225;i:72;i:1226;i:72;i:1227;i:89;i:1228;i:89;i:1229;i:77;i:1230;i:77;i:1236;i:198;i:1237;i:198;i:1240;i:477;i:1241;i:477;i:1248;i:69;i:1249;i:69;i:1256;i:415;i:1257;i:415;i:1280;i:68;i:1281;i:68;i:1291;i:72;i:1292;i:71;i:1293;i:71;i:1377;i:1377;i:1329;i:85;i:1378;i:1378;i:1330;i:1378;i:1379;i:81;i:1331;i:81;i:1380;i:1380;i:1332;i:1380;i:1381;i:1381;i:1333;i:1381;i:1382;i:81;i:1334;i:1382;i:1383;i:1383;i:1335;i:1383;i:1384;i:1384;i:1336;i:1384;i:1385;i:1385;i:1337;i:1385;i:1386;i:1386;i:1338;i:1386;i:1387;i:1387;i:1339;i:1387;i:1388;i:1388;i:1340;i:1388;i:1389;i:1389;i:1341;i:1389;i:1390;i:1390;i:1342;i:1390;i:1391;i:1391;i:1343;i:1391;i:1392;i:72;i:1344;i:1392;i:1393;i:1393;i:1345;i:1393;i:1394;i:1394;i:1346;i:1394;i:1395;i:1395;i:1347;i:1395;i:1396;i:1396;i:1348;i:85;i:1397;i:74;i:1349;i:69;i:1398;i:1398;i:1350;i:1398;i:1399;i:1399;i:1351;i:1399;i:1400;i:78;i:1352;i:1400;i:1401;i:1401;i:1353;i:1401;i:1402;i:1402;i:1354;i:1402;i:1403;i:1403;i:1355;i:1403;i:1404;i:78;i:1356;i:1404;i:1405;i:85;i:1357;i:85;i:1406;i:1406;i:1358;i:1406;i:1407;i:1407;i:1359;i:1407;i:1408;i:1408;i:1360;i:1408;i:1409;i:71;i:1361;i:1409;i:1410;i:1410;i:1362;i:1410;i:1411;i:1411;i:1363;i:1411;i:1412;i:80;i:1364;i:1412;i:1413;i:48;i:1365;i:48;i:1414;i:1414;i:1366;i:1414;i:58;i:58;i:1417;i:58;i:769;i:769;i:1436;i:769;i:778;i:778;i:1455;i:778;i:775;i:775;i:1465;i:775;i:1473;i:775;i:1474;i:775;i:1475;i:58;i:1476;i:775;i:39;i:39;i:1523;i:39;i:34;i:34;i:1524;i:34;i:1593;i:69;i:1609;i:1609;i:1610;i:1609;i:787;i:787;i:1615;i:787;i:1641;i:65;i:1548;i:1548;i:1644;i:1548;i:1620;i:1620;i:1652;i:1620;i:1696;i:69;i:1603;i:1603;i:1705;i:1603;i:1657;i:1657;i:1723;i:1657;i:1607;i:1607;i:1726;i:1607;i:1729;i:1607;i:1740;i:1609;i:1659;i:1659;i:1744;i:1659;i:1749;i:1607;i:1766;i:1766;i:1767;i:1766;i:1759;i:1759;i:1772;i:1759;i:1632;i:1632;i:1776;i:1632;i:1633;i:1633;i:1777;i:1633;i:1634;i:1634;i:1778;i:1634;i:1635;i:1635;i:1779;i:1635;i:1639;i:1639;i:1783;i:1639;i:1640;i:1640;i:1784;i:1640;i:1785;i:65;i:46;i:46;i:1794;i:46;i:1857;i:775;i:1852;i:1852;i:1858;i:1852;i:1863;i:769;i:2306;i:775;i:803;i:803;i:2364;i:803;i:800;i:800;i:2386;i:800;i:768;i:768;i:2387;i:768;i:2388;i:769;i:2406;i:48;i:2492;i:803;i:2534;i:48;i:2538;i:56;i:57;i:57;i:2541;i:57;i:2562;i:775;i:2435;i:2435;i:2563;i:2435;i:2620;i:803;i:2374;i:2374;i:2635;i:2374;i:2381;i:2381;i:2637;i:2381;i:2662;i:48;i:2663;i:57;i:2666;i:56;i:2690;i:775;i:2748;i:803;i:2365;i:2365;i:2749;i:2365;i:2369;i:2369;i:2753;i:2369;i:2370;i:2370;i:2754;i:2370;i:2765;i:2381;i:2790;i:48;i:2408;i:2408;i:2792;i:2408;i:2409;i:2409;i:2793;i:2409;i:2410;i:2410;i:2794;i:2410;i:2414;i:2414;i:2798;i:2414;i:2819;i:56;i:2876;i:803;i:2918;i:48;i:2920;i:57;i:2946;i:778;i:2960;i:2960;i:2972;i:2960;i:2952;i:2952;i:2992;i:2952;i:3006;i:2952;i:2985;i:2985;i:3016;i:2985;i:3021;i:775;i:2995;i:2995;i:3031;i:2995;i:3046;i:48;i:2965;i:2965;i:3047;i:2965;i:2953;i:2953;i:3048;i:2953;i:2970;i:2970;i:3050;i:2970;i:2958;i:2958;i:3053;i:2958;i:2949;i:2949;i:3054;i:2949;i:2991;i:2991;i:3056;i:2991;i:3059;i:3059;i:3061;i:3059;i:2999;i:2999;i:3064;i:2999;i:3074;i:48;i:3075;i:2435;i:3105;i:3105;i:3106;i:3105;i:3116;i:3116;i:3117;i:3116;i:3125;i:3125;i:3127;i:3125;i:3174;i:48;i:3202;i:48;i:3203;i:2435;i:3077;i:3077;i:3205;i:3077;i:3078;i:3078;i:3206;i:3078;i:3079;i:3079;i:3207;i:3079;i:3090;i:3090;i:3218;i:3090;i:3091;i:3091;i:3219;i:3091;i:3092;i:3092;i:3220;i:3092;i:3100;i:3100;i:3228;i:3100;i:3102;i:3102;i:3230;i:3102;i:3107;i:3107;i:3235;i:3107;i:3119;i:3119;i:3247;i:3119;i:3121;i:3121;i:3249;i:3121;i:3122;i:3122;i:3250;i:3122;i:3302;i:48;i:3175;i:3175;i:3303;i:3175;i:3176;i:3176;i:3304;i:3176;i:3183;i:3183;i:3311;i:3183;i:3330;i:48;i:3337;i:2953;i:3356;i:2960;i:3360;i:48;i:2979;i:2979;i:3363;i:2979;i:3376;i:3376;i:3377;i:3376;i:2996;i:2996;i:3380;i:2996;i:2998;i:2998;i:3382;i:2998;i:3007;i:3007;i:3391;i:3007;i:3392;i:3007;i:3010;i:3010;i:3393;i:3010;i:3394;i:3010;i:3395;i:3010;i:3358;i:3358;i:3425;i:3358;i:3586;i:3586;i:3587;i:3586;i:3594;i:3594;i:3595;i:3594;i:3598;i:3598;i:3599;i:3598;i:3588;i:3588;i:3604;i:3588;i:3605;i:3588;i:3601;i:3601;i:3607;i:3601;i:3590;i:3590;i:3617;i:3590;i:3647;i:66;i:3634;i:3634;i:3653;i:3634;i:3661;i:778;i:3664;i:48;i:3592;i:3592;i:3720;i:3592;i:3618;i:3618;i:3725;i:3618;i:3610;i:3610;i:3738;i:3610;i:3611;i:3611;i:3739;i:3611;i:3613;i:3613;i:3741;i:3613;i:3614;i:3614;i:3742;i:3614;i:3615;i:3615;i:3743;i:3615;i:3640;i:3640;i:3768;i:3640;i:3641;i:3641;i:3769;i:3641;i:3656;i:3656;i:3784;i:3656;i:3657;i:3657;i:3785;i:3657;i:3658;i:3658;i:3786;i:3658;i:3659;i:3659;i:3787;i:3659;i:3789;i:778;i:3792;i:48;i:3851;i:3851;i:3852;i:3851;i:4125;i:48;i:4150;i:778;i:4160;i:48;i:4327;i:89;i:4339;i:69;i:5025;i:82;i:5029;i:49;i:5033;i:89;i:5034;i:65;i:5035;i:74;i:5036;i:69;i:5041;i:82;i:5043;i:87;i:5047;i:77;i:5051;i:72;i:5053;i:89;i:5054;i:415;i:5056;i:71;i:5058;i:72;i:5059;i:90;i:5070;i:65;i:5071;i:66;i:5074;i:82;i:5076;i:87;i:5077;i:53;i:5081;i:86;i:5082;i:53;i:5086;i:49;i:5087;i:67;i:5090;i:80;i:5094;i:75;i:5095;i:74;i:5106;i:72;i:5107;i:71;i:5108;i:66;i:5123;i:916;i:183;i:183;i:5159;i:183;i:5167;i:86;i:5229;i:80;i:5231;i:68;i:5261;i:74;i:5311;i:50;i:5153;i:5153;i:5329;i:5153;i:5441;i:88;i:5495;i:916;i:5500;i:72;i:5501;i:88;i:5511;i:82;i:5551;i:66;i:5556;i:70;i:5573;i:65;i:5598;i:68;i:5610;i:68;i:5615;i:87;i:5616;i:77;i:5623;i:66;i:5264;i:5264;i:5634;i:5264;i:5257;i:5257;i:5635;i:5257;i:5331;i:5331;i:5636;i:5331;i:5338;i:5338;i:5639;i:5338;i:5443;i:5443;i:5666;i:5443;i:5446;i:5446;i:5667;i:5446;i:5450;i:5450;i:5668;i:5450;i:937;i:937;i:5679;i:937;i:5678;i:5678;i:5684;i:85;i:5685;i:937;i:5741;i:88;i:5742;i:88;i:6050;i:6050;i:6051;i:6050;i:3636;i:3636;i:6071;i:3636;i:3637;i:3637;i:6072;i:3637;i:3638;i:3638;i:6073;i:3638;i:3639;i:3639;i:6074;i:3639;i:6086;i:778;i:6091;i:3656;i:6099;i:778;i:3631;i:3631;i:6100;i:3631;i:3674;i:3674;i:6101;i:3674;i:3663;i:3663;i:6105;i:3663;i:3675;i:3675;i:6106;i:3675;i:6160;i:48;i:6236;i:6236;i:6294;i:6236;i:7681;i:65;i:7693;i:68;i:7703;i:69;i:7705;i:69;i:7707;i:69;i:7709;i:69;i:7713;i:71;i:7715;i:72;i:7717;i:72;i:7719;i:72;i:7721;i:72;i:7723;i:72;i:7743;i:77;i:7745;i:77;i:7747;i:77;i:7751;i:78;i:7765;i:80;i:7767;i:80;i:7769;i:82;i:7771;i:82;i:7773;i:82;i:7775;i:82;i:7789;i:84;i:7809;i:87;i:7811;i:87;i:7813;i:87;i:7815;i:87;i:7817;i:87;i:7823;i:89;i:7841;i:65;i:7843;i:65;i:7845;i:65;i:7847;i:65;i:7849;i:65;i:7851;i:65;i:7853;i:65;i:7855;i:65;i:7857;i:65;i:7859;i:65;i:7861;i:65;i:7863;i:65;i:7865;i:69;i:7867;i:69;i:7869;i:69;i:7871;i:69;i:7873;i:69;i:7875;i:69;i:7877;i:69;i:7879;i:69;i:7923;i:89;i:7925;i:89;i:7927;i:89;i:7929;i:89;i:7937;i:65;i:7938;i:65;i:7939;i:65;i:7940;i:65;i:7941;i:65;i:7942;i:65;i:7943;i:65;i:7968;i:72;i:7969;i:72;i:7970;i:72;i:7971;i:72;i:7972;i:72;i:7973;i:72;i:7974;i:72;i:7975;i:72;i:8017;i:89;i:8019;i:89;i:8021;i:89;i:8023;i:89;i:8048;i:65;i:8052;i:72;i:8058;i:89;i:8064;i:65;i:8065;i:65;i:8066;i:65;i:8067;i:65;i:8068;i:65;i:8069;i:65;i:8070;i:65;i:8071;i:65;i:8080;i:72;i:8115;i:65;i:8160;i:89;i:8161;i:89;i:8355;i:70;i:8357;i:77;i:8358;i:78;i:8359;i:80;i:8361;i:87;s:0:"";s:0:"";i:8203;s:0:"";i:8487;i:85;i:8518;i:68;i:11367;i:72;i:11569;i:415;i:11577;i:69;i:11604;i:48;i:12408;i:12408;i:12504;i:12408;i:13383;i:13383;i:13427;i:13383;i:13838;i:13838;i:13850;i:13838;i:14616;i:14616;i:14702;i:14616;i:14800;i:14800;i:14963;i:14800;i:13704;i:13704;i:17307;i:13704;i:17324;i:17324;i:17329;i:17324;i:15163;i:15163;i:17440;i:15163;i:17996;i:17996;i:18017;i:17996;i:18300;i:18300;i:18317;i:18300;i:18759;i:18759;i:18818;i:18759;i:18843;i:18843;i:18870;i:18843;i:18847;i:18847;i:18871;i:18847;i:19575;i:19575;i:19619;i:19575;i:19972;i:19972;i:19978;i:19972;i:19973;i:19973;i:19979;i:19973;i:19983;i:19983;i:19984;i:19983;i:19990;i:19990;i:19991;i:19990;i:19992;i:19992;i:20000;i:19992;i:19999;i:19999;i:20002;i:19999;i:20001;i:20001;i:20004;i:20001;i:20008;i:49;i:20037;i:20037;i:20038;i:20037;i:20055;i:20055;i:20056;i:20055;i:20081;i:20081;i:20095;i:20081;i:20094;i:20094;i:20097;i:20094;i:20098;i:20081;i:19980;i:19980;i:20115;i:19980;i:20028;i:20028;i:20117;i:20028;i:20120;i:20120;i:20121;i:20120;i:20122;i:20122;i:20124;i:20122;i:20126;i:20122;i:20139;i:20139;i:20143;i:20139;i:20140;i:20140;i:20144;i:20140;i:20129;i:20129;i:20158;i:20129;i:20185;i:20185;i:20186;i:20185;i:20201;i:19972;i:20116;i:20116;i:20237;i:20116;i:20267;i:20267;i:20295;i:20267;i:20208;i:20208;i:20306;i:20208;i:20175;i:20175;i:20315;i:20175;i:20274;i:20274;i:20320;i:20274;i:20006;i:20006;i:20341;i:20006;i:20177;i:20177;i:20374;i:20177;i:20215;i:20215;i:20385;i:20215;i:20318;i:20318;i:20395;i:20318;i:20387;i:20387;i:20406;i:20387;i:20259;i:20259;i:20436;i:20259;i:20384;i:20384;i:20448;i:20384;i:20265;i:20265;i:20449;i:20265;i:20417;i:20417;i:20451;i:20417;i:20257;i:20257;i:20453;i:20257;i:20443;i:20443;i:20463;i:20443;i:20261;i:20261;i:20480;i:20261;i:20482;i:20006;i:20252;i:20252;i:20485;i:20252;i:20457;i:20457;i:20486;i:20457;i:20459;i:20459;i:20488;i:20459;i:20179;i:20179;i:20489;i:20179;i:20010;i:20010;i:20491;i:20010;i:20204;i:20204;i:20497;i:20204;i:20223;i:20223;i:20515;i:20223;i:20262;i:20262;i:20523;i:20262;i:20465;i:20465;i:20534;i:20465;i:20461;i:20461;i:20537;i:20461;i:20516;i:20516;i:20540;i:20516;i:20255;i:20255;i:20553;i:20255;i:20391;i:20391;i:20596;i:20391;i:20390;i:20390;i:20597;i:20390;i:20599;i:20599;i:20600;i:20599;i:20475;i:20475;i:20601;i:20475;i:20266;i:20266;i:20605;i:20266;i:20263;i:20263;i:20630;i:20263;i:20254;i:20254;i:20632;i:20254;i:20633;i:20475;i:20466;i:20466;i:20634;i:20466;i:20323;i:20323;i:20653;i:20323;i:20588;i:20588;i:20655;i:20588;i:20256;i:20256;i:20659;i:20256;i:20251;i:20251;i:20660;i:20251;i:20538;i:20538;i:20661;i:20538;i:20260;i:20260;i:20663;i:20260;i:20542;i:20542;i:20670;i:20542;i:20603;i:20603;i:20674;i:20603;i:20165;i:20165;i:20677;i:20165;i:20325;i:20325;i:20681;i:20325;i:20682;i:20185;i:20392;i:20392;i:20689;i:20392;i:20166;i:20166;i:20693;i:20166;i:20702;i:20266;i:20389;i:20389;i:20709;i:20389;i:20606;i:20606;i:20712;i:20606;i:20707;i:20707;i:20717;i:20707;i:20729;i:20215;i:20202;i:20202;i:20736;i:20202;i:20426;i:20426;i:20737;i:20426;i:20396;i:20396;i:20738;i:20396;i:20159;i:20159;i:20740;i:20159;i:20393;i:20393;i:20744;i:20393;i:20745;i:20461;i:20748;i:20389;i:20667;i:20667;i:20749;i:20667;i:20644;i:20644;i:20750;i:20644;i:20647;i:20647;i:20752;i:20647;i:20454;i:20454;i:20756;i:20454;i:20394;i:20394;i:20757;i:20394;i:20766;i:20274;i:20607;i:20607;i:20767;i:20607;i:20248;i:20248;i:20778;i:20248;i:20648;i:20648;i:20786;i:20648;i:20495;i:20495;i:20789;i:20495;i:20458;i:20458;i:20791;i:20458;i:20649;i:20649;i:20794;i:20649;i:20645;i:20645;i:20795;i:20645;i:20456;i:20456;i:20796;i:20456;i:20799;i:20799;i:20816;i:20799;i:20812;i:20812;i:20817;i:20812;i:20818;i:20799;i:20814;i:20814;i:20820;i:20814;i:20822;i:20822;i:20823;i:20822;i:20838;i:20129;i:20841;i:20001;i:20446;i:20446;i:20842;i:20446;i:20854;i:19980;i:20839;i:20839;i:20869;i:20839;i:20874;i:20874;i:20876;i:20874;i:20880;i:20880;i:20882;i:20880;i:20928;i:20928;i:20936;i:20928;i:20923;i:20923;i:20941;i:20923;i:20934;i:20934;i:20950;i:20934;i:20955;i:20955;i:20956;i:20955;i:20961;i:20961;i:20962;i:20961;i:20963;i:20961;i:20975;i:20975;i:20977;i:20975;i:20973;i:20973;i:20980;i:20973;i:20807;i:20807;i:20982;i:20807;i:20989;i:20989;i:20990;i:20989;i:20992;i:20992;i:20994;i:20992;i:20995;i:20995;i:20996;i:20995;i:21002;i:21002;i:21003;i:21002;i:21024;i:21024;i:21034;i:21024;i:21029;i:21029;i:21035;i:21029;i:21019;i:21019;i:21041;i:21019;i:20518;i:20518;i:21048;i:20518;i:21030;i:21030;i:21052;i:21030;i:21050;i:21050;i:21054;i:21050;i:21044;i:21044;i:21057;i:21044;i:21037;i:21037;i:21060;i:21037;i:21017;i:21017;i:21063;i:21017;i:20811;i:20811;i:21067;i:20811;i:21049;i:21049;i:21070;i:21049;i:21036;i:21036;i:21079;i:21036;i:21081;i:21019;i:20531;i:20531;i:21082;i:20531;i:21018;i:21018;i:21083;i:21018;i:21073;i:21073;i:21091;i:21073;i:21058;i:21058;i:21092;i:21058;i:21085;i:21085;i:21093;i:21085;i:21072;i:21072;i:21102;i:21072;i:21097;i:21097;i:21104;i:21097;i:21056;i:21056;i:21108;i:21056;i:21109;i:21019;i:21111;i:21036;i:21038;i:21038;i:21120;i:21038;i:21010;i:21010;i:21123;i:21010;i:21107;i:21107;i:21124;i:21107;i:21095;i:21095;i:21127;i:21095;i:21016;i:21016;i:21129;i:21016;i:21053;i:21053;i:21130;i:21053;i:21119;i:21119;i:21131;i:21119;i:21055;i:21055;i:21132;i:21055;i:21133;i:21073;i:21137;i:21058;i:21138;i:21073;i:21140;i:21073;i:20685;i:20685;i:21160;i:20685;i:21163;i:21030;i:21171;i:21171;i:21172;i:21171;i:21173;i:20518;i:21177;i:20466;i:21170;i:21170;i:21185;i:21170;i:21182;i:21182;i:21203;i:21182;i:21205;i:20685;i:21206;i:21206;i:21207;i:21206;i:21153;i:21153;i:21209;i:21153;i:21195;i:21195;i:21211;i:21195;i:21214;i:21171;i:21183;i:21183;i:21218;i:21183;i:21222;i:21119;i:21149;i:21149;i:21223;i:21149;i:21210;i:21210;i:21225;i:21210;i:21154;i:21154;i:21233;i:21154;i:21234;i:21195;i:21235;i:21195;i:21169;i:21169;i:21237;i:21169;i:21240;i:21149;i:21243;i:21243;i:21248;i:21243;i:21282;i:21282;i:21291;i:21282;i:21286;i:21286;i:21293;i:21286;i:21294;i:21294;i:21297;i:21294;i:21306;i:21306;i:21312;i:21306;i:20191;i:20191;i:21315;i:20191;i:21323;i:19990;i:21158;i:21158;i:21327;i:21158;i:21325;i:21325;i:21328;i:21325;i:21318;i:21318;i:21330;i:21318;i:21332;i:21158;i:21333;i:21333;i:21336;i:21333;i:20308;i:20308;i:21344;i:20308;i:21364;i:21364;i:21371;i:21364;i:21363;i:21363;i:21373;i:21363;i:21389;i:21389;i:21401;i:21389;i:21381;i:21381;i:21403;i:21381;i:21397;i:21397;i:21408;i:21397;i:21382;i:21382;i:21412;i:21382;i:21388;i:21388;i:21421;i:21388;i:21378;i:21378;i:21424;i:21378;i:21385;i:21385;i:21426;i:21385;i:20005;i:20005;i:21427;i:20005;i:21411;i:21411;i:21428;i:21411;i:21441;i:21441;i:21442;i:21441;i:21443;i:21441;i:21444;i:21441;i:21468;i:21468;i:21471;i:21468;i:19995;i:19995;i:21474;i:19995;i:21246;i:21246;i:21477;i:21246;i:20189;i:20189;i:21516;i:20189;i:21555;i:21555;i:21556;i:21555;i:21525;i:21525;i:21570;i:21525;i:21563;i:21563;i:21573;i:21563;i:21577;i:21555;i:21567;i:21567;i:21578;i:21567;i:21558;i:21558;i:21584;i:21558;i:21534;i:21534;i:21585;i:21534;i:21601;i:21563;i:21610;i:21610;i:21650;i:21610;i:20602;i:20602;i:21681;i:20602;i:21593;i:21593;i:21692;i:21593;i:21617;i:21617;i:21708;i:21617;i:21592;i:21592;i:21729;i:21592;i:21591;i:21591;i:21764;i:21591;i:21713;i:21713;i:21782;i:21713;i:21539;i:21539;i:21786;i:21539;i:21551;i:21551;i:21843;i:21551;i:21844;i:21551;i:21687;i:21687;i:21845;i:21687;i:21846;i:21846;i:21847;i:21846;i:21854;i:21713;i:21855;i:21551;i:21793;i:21793;i:21858;i:21793;i:21746;i:21746;i:21894;i:21746;i:13726;i:13726;i:21902;i:13726;i:21906;i:20602;i:21796;i:21796;i:21914;i:21796;i:21799;i:21799;i:21918;i:21799;i:21509;i:21509;i:21927;i:21509;i:20007;i:20007;i:21930;i:20007;i:21507;i:21507;i:21931;i:21507;i:20052;i:20052;i:21932;i:20052;i:21934;i:21333;i:21727;i:21727;i:21938;i:21727;i:21929;i:21929;i:21947;i:21929;i:21595;i:21595;i:21958;i:21595;i:21868;i:21868;i:21959;i:21868;i:21789;i:21789;i:21962;i:21789;i:21527;i:21527;i:21966;i:21527;i:21596;i:21596;i:21978;i:21596;i:21794;i:21794;i:21993;i:21794;i:21621;i:21621;i:21996;i:21621;i:21716;i:21716;i:22006;i:21716;i:21483;i:21483;i:22018;i:21483;i:21497;i:21497;i:22022;i:21497;i:20654;i:20654;i:22024;i:20654;i:21949;i:21949;i:22029;i:21949;i:21628;i:21628;i:22033;i:21628;i:21871;i:21871;i:22035;i:21871;i:21589;i:21589;i:22036;i:21589;i:21863;i:21863;i:22038;i:21863;i:21787;i:21787;i:22044;i:21787;i:21880;i:21880;i:22056;i:21880;i:21719;i:21719;i:22057;i:21719;i:21792;i:21792;i:22062;i:21792;i:22063;i:21880;i:21501;i:21501;i:22064;i:21501;i:21919;i:21919;i:22067;i:21919;i:21632;i:21632;i:22068;i:21632;i:21715;i:21715;i:22069;i:21715;i:21586;i:21586;i:22072;i:21586;i:21876;i:21876;i:22077;i:21876;i:22089;i:21846;i:22040;i:22040;i:22099;i:22040;i:22085;i:22085;i:22101;i:22085;i:21661;i:21661;i:22109;i:21661;i:21714;i:21714;i:22112;i:21714;i:21725;i:21725;i:22117;i:21725;i:21717;i:21717;i:22118;i:21717;i:22096;i:22096;i:22120;i:22096;i:22003;i:22003;i:22127;i:22003;i:21721;i:21721;i:22130;i:21721;i:21943;i:21943;i:22132;i:21943;i:21544;i:21544;i:22136;i:21544;i:21905;i:21905;i:22142;i:21905;i:21659;i:21659;i:22144;i:21659;i:21523;i:21523;i:22151;i:21523;i:21724;i:21724;i:22156;i:21724;i:22039;i:22039;i:22160;i:22039;i:22159;i:22159;i:22164;i:22159;i:22108;i:22108;i:22165;i:22108;i:21870;i:21870;i:22169;i:21870;i:21693;i:21693;i:22181;i:21693;i:21590;i:21590;i:22182;i:21590;i:21657;i:21657;i:22184;i:21657;i:22186;i:21846;i:21521;i:21521;i:22190;i:21521;i:20152;i:20152;i:22194;i:20152;i:21950;i:21950;i:22195;i:21950;i:22196;i:20005;i:22052;i:22052;i:22198;i:22052;i:22179;i:22179;i:22203;i:22179;i:21852;i:21852;i:22205;i:21852;i:21869;i:21869;i:22208;i:21869;i:21995;i:21995;i:22209;i:21995;i:22210;i:22179;i:20865;i:20865;i:22213;i:20865;i:21587;i:21587;i:22216;i:21587;i:21872;i:21872;i:22217;i:21872;i:22065;i:22065;i:22225;i:22065;i:22227;i:21870;i:22232;i:22232;i:22238;i:22232;i:22242;i:22242;i:22243;i:22242;i:20879;i:20879;i:22247;i:20879;i:22252;i:22232;i:22250;i:22250;i:22257;i:22250;i:22258;i:22258;i:22260;i:22258;i:22255;i:22255;i:22269;i:22255;i:22259;i:22259;i:22270;i:22259;i:22272;i:22255;i:20870;i:20870;i:22278;i:20870;i:22261;i:22261;i:22279;i:22261;i:22283;i:22255;i:22285;i:22258;i:22286;i:20870;i:22280;i:22280;i:22287;i:22280;i:22253;i:22253;i:22290;i:22253;i:22291;i:20870;i:22294;i:22259;i:22296;i:22242;i:21387;i:21387;i:22311;i:21387;i:20983;i:20983;i:22359;i:20983;i:22351;i:22351;i:22383;i:22351;i:22389;i:19992;i:22404;i:22404;i:22405;i:22404;i:22427;i:22427;i:22428;i:22427;i:22331;i:22331;i:22432;i:22331;i:22307;i:22307;i:22441;i:22307;i:22365;i:22365;i:22459;i:22365;i:22402;i:22402;i:22464;i:22402;i:22482;i:22482;i:22483;i:22482;i:22445;i:22445;i:22497;i:22445;i:22372;i:22372;i:22531;i:22372;i:22362;i:22362;i:22533;i:22362;i:22538;i:22307;i:22452;i:22452;i:22550;i:22452;i:22490;i:22490;i:22557;i:22490;i:22426;i:22426;i:22575;i:22426;i:22330;i:22330;i:22580;i:22330;i:22602;i:20983;i:22450;i:22450;i:22607;i:22450;i:22488;i:22488;i:22610;i:22488;i:20931;i:20931;i:22615;i:20931;i:20898;i:20898;i:22618;i:20898;i:22366;i:22366;i:22626;i:22366;i:22489;i:22489;i:22628;i:22489;i:22625;i:22625;i:22635;i:22625;i:22642;i:22330;i:22620;i:22620;i:22643;i:22620;i:22539;i:22539;i:22644;i:22539;i:22545;i:22545;i:22649;i:22545;i:22443;i:22443;i:22666;i:22443;i:22600;i:22600;i:22669;i:22600;i:22612;i:22612;i:22678;i:22612;i:22368;i:22368;i:22684;i:22368;i:22679;i:22679;i:22686;i:22679;i:22320;i:22320;i:22700;i:22320;i:22549;i:22549;i:22702;i:22549;i:22703;i:22549;i:22367;i:22367;i:22707;i:22367;i:22681;i:22681;i:22715;i:22681;i:22438;i:22438;i:22718;i:22438;i:22363;i:22363;i:22727;i:22363;i:22730;i:22351;i:22449;i:22449;i:22731;i:22449;i:22734;i:22489;i:22739;i:21387;i:22567;i:22567;i:22742;i:22567;i:22418;i:22418;i:22744;i:22418;i:22329;i:22329;i:22745;i:22329;i:22406;i:22406;i:22746;i:22406;i:22750;i:22351;i:22751;i:22404;i:22752;i:22404;i:22364;i:22364;i:22754;i:22364;i:21926;i:21926;i:22759;i:21926;i:22760;i:22418;i:22761;i:22365;i:22598;i:22598;i:22762;i:22598;i:22766;i:22766;i:22767;i:22766;i:19968;i:19968;i:22769;i:19968;i:21334;i:21334;i:22770;i:21334;i:22774;i:22774;i:22775;i:22774;i:22777;i:19968;i:22778;i:22774;i:22776;i:22776;i:22780;i:22776;i:22699;i:22699;i:22783;i:22699;i:22781;i:22781;i:22784;i:22781;i:22791;i:20475;i:21464;i:21464;i:22793;i:21464;i:21359;i:21359;i:22808;i:21359;i:22810;i:22810;i:22811;i:22810;i:20145;i:20145;i:22812;i:20145;i:22815;i:22815;i:22816;i:22815;i:20249;i:20249;i:22821;i:20249;i:20245;i:20245;i:22827;i:20245;i:20359;i:20359;i:22839;i:20359;i:22841;i:22841;i:22846;i:22841;i:21299;i:21299;i:22849;i:21299;i:22850;i:22850;i:22864;i:22850;i:22885;i:22885;i:22887;i:22885;i:22870;i:22870;i:22888;i:22870;i:22889;i:21299;i:22842;i:22842;i:22890;i:22842;i:22892;i:22870;i:22859;i:22859;i:22894;i:22859;i:22902;i:20274;i:18102;i:18102;i:22934;i:18102;i:22918;i:22918;i:22941;i:22918;i:22930;i:22930;i:22956;i:22930;i:22963;i:20274;i:22985;i:22985;i:22986;i:22985;i:22989;i:22989;i:22999;i:22989;i:22922;i:22922;i:23001;i:22922;i:22904;i:22904;i:23014;i:22904;i:20356;i:20356;i:23018;i:20356;i:23019;i:23019;i:23020;i:23019;i:22925;i:22925;i:23032;i:22925;i:22908;i:22908;i:23033;i:22908;i:21891;i:21891;i:23066;i:21891;i:23010;i:23010;i:23071;i:23010;i:23067;i:23067;i:23087;i:23067;i:23089;i:23067;i:23103;i:23103;i:23104;i:23103;i:23044;i:23044;i:23105;i:23044;i:20487;i:20487;i:23113;i:20487;i:23035;i:23035;i:23139;i:23035;i:22919;i:22919;i:23142;i:22919;i:23045;i:23045;i:23149;i:23045;i:23166;i:20599;i:22992;i:22992;i:23182;i:22992;i:23090;i:23090;i:23207;i:23090;i:20445;i:20445;i:23212;i:20445;i:23214;i:20599;i:22955;i:22955;i:23215;i:22955;i:23210;i:23210;i:23228;i:23210;i:22920;i:22920;i:23229;i:22920;i:22954;i:22954;i:23255;i:22954;i:22953;i:22953;i:23285;i:22953;i:23200;i:23200;i:23287;i:23200;i:23180;i:23180;i:23289;i:23180;i:23092;i:23092;i:23290;i:23092;i:23291;i:23092;i:23155;i:23155;i:23295;i:23155;i:23296;i:22955;i:23213;i:23213;i:23299;i:23213;i:23046;i:23046;i:23304;i:23046;i:23157;i:23157;i:23307;i:23157;i:23047;i:23047;i:23308;i:23047;i:23281;i:23281;i:23321;i:23281;i:23243;i:23243;i:23325;i:23243;i:23250;i:23250;i:23329;i:23250;i:23064;i:23064;i:23330;i:23064;i:23252;i:23252;i:23338;i:23252;i:23341;i:20274;i:23156;i:23156;i:23344;i:23156;i:23332;i:23332;i:23351;i:23332;i:23158;i:23158;i:23352;i:23158;i:23363;i:23064;i:23048;i:23048;i:23372;i:23048;i:23385;i:23385;i:23403;i:23385;i:23386;i:23386;i:23413;i:23386;i:23411;i:23411;i:23414;i:23411;i:23398;i:23398;i:23416;i:23398;i:23420;i:23420;i:23421;i:23420;i:23402;i:23402;i:23423;i:23402;i:20887;i:20887;i:23426;i:20887;i:20370;i:20370;i:23433;i:20370;i:21552;i:21552;i:23439;i:21552;i:20893;i:20893;i:23452;i:20893;i:23454;i:23454;i:23455;i:23454;i:23467;i:23467;i:23470;i:23467;i:20642;i:20642;i:23478;i:20642;i:20900;i:20900;i:23491;i:20900;i:23483;i:23483;i:23494;i:23483;i:20902;i:20902;i:23495;i:20902;i:20904;i:20904;i:23500;i:20904;i:23425;i:23425;i:23501;i:23425;i:23509;i:23425;i:23485;i:23485;i:23515;i:23485;i:23516;i:23425;i:23505;i:23505;i:23517;i:23505;i:22012;i:22012;i:23518;i:22012;i:23522;i:23505;i:23526;i:23454;i:23527;i:23425;i:23457;i:23457;i:23529;i:23457;i:20889;i:20889;i:23531;i:20889;i:23532;i:23485;i:23537;i:21587;i:23453;i:23453;i:23539;i:23453;i:23456;i:23456;i:23541;i:23456;i:23542;i:23453;i:23551;i:22781;i:23557;i:20811;i:23558;i:23558;i:23559;i:23558;i:19987;i:19987;i:23560;i:19987;i:23547;i:23547;i:23563;i:23547;i:23545;i:23545;i:23565;i:23545;i:23548;i:23548;i:23566;i:23548;i:23570;i:23570;i:23571;i:23570;i:23572;i:23570;i:22645;i:22645;i:23576;i:22645;i:23577;i:23577;i:23578;i:23577;i:23581;i:22039;i:23583;i:23583;i:23584;i:23583;i:23591;i:22426;i:23594;i:23594;i:23595;i:23594;i:23597;i:22426;i:23604;i:23604;i:23607;i:23604;i:20760;i:20760;i:23613;i:20760;i:20407;i:20407;i:23616;i:20407;i:23622;i:23622;i:23626;i:23622;i:23608;i:23608;i:23629;i:23608;i:23619;i:23619;i:23635;i:23619;i:23631;i:23631;i:23643;i:23631;i:23649;i:23649;i:23650;i:23649;i:23618;i:23618;i:23652;i:23618;i:23654;i:23654;i:23656;i:23654;i:23646;i:23646;i:23660;i:23646;i:23661;i:23619;i:20986;i:20986;i:23680;i:20986;i:20119;i:20119;i:23681;i:20119;i:20872;i:20872;i:23703;i:20872;i:23713;i:20872;i:22369;i:22369;i:23717;i:22369;i:23721;i:21926;i:23725;i:23725;i:23738;i:23725;i:23784;i:23784;i:23785;i:23784;i:23791;i:23791;i:23792;i:23791;i:23704;i:23704;i:23796;i:23704;i:23707;i:23707;i:23798;i:23707;i:23777;i:23777;i:23805;i:23777;i:23815;i:23815;i:23816;i:23815;i:21326;i:21326;i:23819;i:21326;i:23811;i:23811;i:23821;i:23811;i:22524;i:22524;i:23822;i:22524;i:23735;i:23735;i:23823;i:23735;i:23824;i:23824;i:23825;i:23824;i:23829;i:23829;i:23830;i:23829;i:23831;i:20872;i:23832;i:20177;i:23833;i:20177;i:23781;i:23781;i:23842;i:23781;i:23741;i:23741;i:23852;i:23741;i:23878;i:23878;i:23879;i:23878;i:23706;i:23706;i:23888;i:23706;i:23890;i:21926;i:23887;i:23887;i:23893;i:23887;i:23919;i:23919;i:23923;i:23919;i:23901;i:23901;i:23937;i:23901;i:23853;i:23853;i:23940;i:23853;i:23702;i:23702;i:23943;i:23702;i:23947;i:23707;i:23948;i:23707;i:23898;i:23898;i:23956;i:23898;i:23810;i:23810;i:23959;i:23810;i:23780;i:23780;i:23968;i:23780;i:23779;i:23779;i:23970;i:23779;i:23748;i:23748;i:23975;i:23748;i:23747;i:23747;i:23976;i:23747;i:23793;i:23793;i:23977;i:23793;i:23812;i:23812;i:23982;i:23812;i:23896;i:23896;i:23992;i:23896;i:23994;i:23725;i:23679;i:23679;i:23996;i:23679;i:23731;i:23731;i:23997;i:23731;i:23743;i:23743;i:24011;i:23743;i:24012;i:21926;i:23782;i:23782;i:24018;i:23782;i:24005;i:24005;i:24019;i:24005;i:24020;i:24005;i:24022;i:21926;i:24034;i:24034;i:24035;i:24034;i:24047;i:24047;i:24048;i:24047;i:21358;i:21358;i:24053;i:21358;i:21367;i:21367;i:24059;i:21367;i:24058;i:24058;i:24061;i:24058;i:20296;i:20296;i:24067;i:20296;i:24069;i:24069;i:24101;i:24069;i:24072;i:24072;i:24107;i:24072;i:24102;i:24102;i:24111;i:24102;i:24097;i:24097;i:24114;i:24097;i:24080;i:24080;i:24115;i:24080;i:24118;i:24102;i:24103;i:24103;i:24128;i:24103;i:20906;i:20906;i:24130;i:20906;i:24079;i:24079;i:24131;i:24079;i:24110;i:24110;i:24135;i:24110;i:24124;i:24124;i:24151;i:24124;i:24123;i:24123;i:24152;i:24123;i:24149;i:24149;i:24153;i:24149;i:24154;i:24110;i:24092;i:24092;i:24159;i:24092;i:24065;i:24065;i:24163;i:24065;i:24164;i:24065;i:24171;i:24110;i:24113;i:24113;i:24172;i:24113;i:24178;i:20094;i:24182;i:20006;i:24183;i:20006;i:20502;i:20502;i:24184;i:20502;i:24185;i:20094;i:20040;i:20040;i:24186;i:20040;i:20960;i:20960;i:24190;i:20960;i:24193;i:21381;i:20164;i:20164;i:24194;i:20164;i:24191;i:24191;i:24195;i:24191;i:24197;i:20040;i:21390;i:21390;i:24213;i:21390;i:22379;i:22379;i:24215;i:22379;i:21392;i:21392;i:24222;i:21392;i:22352;i:22352;i:24231;i:22352;i:24211;i:24211;i:24235;i:24211;i:24240;i:23631;i:24246;i:24246;i:24251;i:24246;i:23507;i:23507;i:24253;i:23507;i:24217;i:24217;i:24255;i:24217;i:24257;i:21397;i:21410;i:21410;i:24258;i:21410;i:24223;i:24223;i:24259;i:24223;i:21417;i:21417;i:24260;i:21417;i:21414;i:21414;i:24264;i:21414;i:20151;i:20151;i:24265;i:20151;i:24252;i:24252;i:24270;i:24252;i:24271;i:21417;i:24272;i:21417;i:24109;i:24109;i:24279;i:24109;i:21416;i:21416;i:24282;i:21416;i:21422;i:21422;i:24285;i:21422;i:24287;i:24217;i:24288;i:21378;i:24209;i:24209;i:24289;i:24209;i:24290;i:24223;i:24291;i:24191;i:24297;i:24297;i:24298;i:24297;i:24208;i:24208;i:24300;i:24208;i:24304;i:21381;i:24307;i:21381;i:24033;i:24033;i:24309;i:24033;i:24315;i:22232;i:20035;i:20035;i:24316;i:20035;i:24317;i:22232;i:21316;i:21316;i:24319;i:21316;i:24332;i:19968;i:20108;i:20108;i:24333;i:20108;i:24337;i:24337;i:24338;i:24337;i:21514;i:21514;i:24340;i:21514;i:20894;i:20894;i:24357;i:20894;i:24362;i:24362;i:24371;i:24362;i:24352;i:24352;i:24373;i:24352;i:24375;i:24375;i:24378;i:24375;i:24377;i:24377;i:24382;i:24377;i:21457;i:21457;i:24386;i:21457;i:24390;i:21029;i:24392;i:24377;i:24394;i:24375;i:24396;i:20894;i:24393;i:24393;i:24397;i:24393;i:24367;i:24367;i:24398;i:24367;i:24400;i:24400;i:24401;i:24400;i:24112;i:24112;i:24402;i:24112;i:22137;i:22137;i:24403;i:22137;i:24404;i:24404;i:24405;i:24404;i:21295;i:21295;i:24409;i:21295;i:24410;i:21295;i:24411;i:24411;i:24412;i:24411;i:24413;i:24411;i:24414;i:24411;i:24415;i:24415;i:24416;i:24415;i:24421;i:24421;i:24422;i:24421;i:20221;i:20221;i:24428;i:20221;i:24424;i:24424;i:24434;i:24424;i:24439;i:20223;i:24447;i:20175;i:24448;i:24448;i:24451;i:24448;i:20343;i:20343;i:24456;i:20343;i:20330;i:20330;i:24458;i:20330;i:21518;i:21518;i:24460;i:21518;i:24452;i:24452;i:24465;i:24452;i:20174;i:20174;i:24467;i:20174;i:24478;i:20174;i:24469;i:24469;i:24480;i:24469;i:22797;i:22797;i:24489;i:22797;i:20621;i:20621;i:24492;i:20621;i:20636;i:20636;i:24493;i:20636;i:24449;i:24449;i:24500;i:24449;i:24501;i:24449;i:24499;i:24499;i:24503;i:24499;i:24443;i:24443;i:24505;i:24443;i:24506;i:20389;i:20161;i:20161;i:24520;i:20161;i:21004;i:21004;i:24534;i:21004;i:24212;i:24212;i:24540;i:24212;i:21816;i:21816;i:24565;i:21816;i:20317;i:20317;i:24592;i:20317;i:24547;i:24547;i:24613;i:24547;i:21254;i:21254;i:24625;i:21254;i:20182;i:20182;i:24633;i:20182;i:24650;i:21158;i:24627;i:24627;i:24653;i:24627;i:24646;i:24646;i:24658;i:24646;i:21369;i:21369;i:24676;i:21369;i:22081;i:22081;i:24694;i:22081;i:21533;i:21533;i:24715;i:21533;i:24642;i:24642;i:24731;i:24642;i:24740;i:21254;i:24709;i:24709;i:24742;i:24709;i:24746;i:22081;i:24734;i:24734;i:24750;i:24734;i:24755;i:24499;i:24560;i:24560;i:24756;i:24560;i:24581;i:24581;i:24757;i:24581;i:24761;i:24761;i:24762;i:24761;i:20932;i:20932;i:24765;i:20932;i:24720;i:24720;i:24789;i:24720;i:24693;i:24693;i:24800;i:24693;i:24801;i:22081;i:24810;i:24499;i:24700;i:24700;i:24817;i:24700;i:24701;i:24701;i:24818;i:24701;i:24699;i:24699;i:24827;i:24699;i:24682;i:24682;i:24856;i:24682;i:24812;i:24812;i:24860;i:24812;i:23231;i:23231;i:24871;i:23231;i:24747;i:24747;i:24872;i:24747;i:24582;i:24582;i:24884;i:24582;i:24698;i:24698;i:24887;i:24698;i:21338;i:21338;i:24893;i:21338;i:24574;i:24574;i:24894;i:24574;i:24703;i:24703;i:24898;i:24703;i:24577;i:24577;i:24907;i:24577;i:24864;i:24864;i:24909;i:24864;i:24892;i:24892;i:24910;i:24892;i:21117;i:21117;i:24915;i:21117;i:24808;i:24808;i:24920;i:24808;i:24813;i:24813;i:24921;i:24813;i:24922;i:24813;i:24696;i:24696;i:24927;i:24696;i:24815;i:24815;i:24931;i:24815;i:24932;i:24747;i:24580;i:24580;i:24938;i:24580;i:24578;i:24578;i:24939;i:24578;i:24749;i:24749;i:24947;i:24749;i:24913;i:24913;i:24948;i:24913;i:23262;i:23262;i:24949;i:23262;i:24198;i:24198;i:24950;i:24198;i:24551;i:24551;i:24962;i:24551;i:24965;i:24696;i:24811;i:24811;i:24970;i:24811;i:24971;i:21029;i:24604;i:24604;i:24976;i:24604;i:24977;i:20973;i:24870;i:24870;i:24978;i:24870;i:24979;i:24693;i:24941;i:24941;i:24982;i:24941;i:21916;i:21916;i:24985;i:21916;i:24814;i:24814;i:24986;i:24814;i:24868;i:24868;i:24996;i:24868;i:24967;i:24967;i:25001;i:24967;i:24751;i:24751;i:25003;i:24751;i:24579;i:24579;i:25006;i:24579;i:23466;i:23466;i:25010;i:23466;i:24518;i:24518;i:25014;i:24518;i:20742;i:20742;i:25020;i:20742;i:21220;i:21220;i:25027;i:21220;i:24691;i:24691;i:25031;i:24691;i:25033;i:24212;i:24639;i:24639;i:25036;i:24639;i:24576;i:24576;i:25040;i:24576;i:23358;i:23358;i:25042;i:23358;i:25037;i:25037;i:25044;i:25037;i:24636;i:24636;i:25055;i:24636;i:25041;i:25041;i:25059;i:25041;i:25062;i:25062;i:25063;i:25062;i:24697;i:24697;i:25064;i:24697;i:24809;i:24809;i:25074;i:24809;i:25078;i:23358;i:25079;i:24576;i:24748;i:24748;i:25080;i:24748;i:24527;i:24527;i:25082;i:24527;i:24807;i:24807;i:25084;i:24807;i:25086;i:24913;i:24651;i:24651;i:25088;i:24651;i:25094;i:25094;i:25095;i:25094;i:25099;i:25099;i:25108;i:25099;i:25115;i:25115;i:25118;i:25115;i:25112;i:25112;i:25126;i:25112;i:25111;i:25111;i:25127;i:25111;i:25129;i:25129;i:25132;i:25129;i:25103;i:25103;i:25135;i:25103;i:25136;i:25112;i:25137;i:25103;i:25138;i:25103;i:25142;i:25142;i:25143;i:25142;i:25144;i:25142;i:25148;i:21359;i:25147;i:25147;i:25150;i:25147;i:25166;i:21107;i:22519;i:22519;i:25191;i:22519;i:20110;i:20110;i:25205;i:20110;i:21012;i:21012;i:25225;i:21012;i:20244;i:20244;i:25228;i:20244;i:22577;i:22577;i:25253;i:22577;i:25210;i:25210;i:25269;i:25210;i:20280;i:20280;i:25275;i:20280;i:25173;i:25173;i:25282;i:25173;i:25242;i:25242;i:25290;i:25242;i:25243;i:25243;i:25291;i:25243;i:25244;i:25244;i:25300;i:25244;i:25301;i:25301;i:25302;i:25301;i:25219;i:25219;i:25306;i:25219;i:25308;i:25308;i:25309;i:25308;i:20759;i:20759;i:25311;i:20759;i:25193;i:25193;i:25313;i:25193;i:25246;i:25246;i:25321;i:25246;i:25295;i:25295;i:25343;i:25295;i:25349;i:25349;i:25350;i:25349;i:20030;i:20030;i:25369;i:20030;i:25375;i:25375;i:25406;i:25375;i:20843;i:20843;i:25420;i:20843;i:25182;i:25182;i:25421;i:25182;i:25341;i:25341;i:25433;i:25341;i:25385;i:25385;i:25437;i:25385;i:25194;i:25194;i:25451;i:25194;i:25312;i:25312;i:25454;i:25312;i:25458;i:21367;i:24635;i:24635;i:25460;i:24635;i:25195;i:25195;i:25475;i:25195;i:25249;i:25249;i:25476;i:25249;i:14799;i:14799;i:25478;i:14799;i:25372;i:25372;i:25495;i:25372;i:25379;i:25379;i:25497;i:25379;i:25346;i:25346;i:25499;i:25346;i:21258;i:21258;i:25516;i:21258;i:25315;i:25315;i:25536;i:25315;i:25196;i:25196;i:25562;i:25196;i:25442;i:25442;i:25563;i:25442;i:25578;i:25578;i:25579;i:25578;i:25522;i:25522;i:25581;i:25522;i:25381;i:25381;i:25582;i:25381;i:24843;i:24843;i:25588;i:24843;i:25554;i:25554;i:25591;i:25554;i:20573;i:20573;i:25593;i:20573;i:25603;i:24635;i:25583;i:25583;i:25604;i:25583;i:25409;i:25409;i:25605;i:25409;i:20883;i:20883;i:25606;i:20883;i:14913;i:14913;i:25609;i:14913;i:25184;i:25184;i:25611;i:25184;i:25439;i:25439;i:25613;i:25439;i:25594;i:25594;i:25622;i:25594;i:25443;i:25443;i:25623;i:25443;i:25436;i:25436;i:25628;i:25436;i:25212;i:25212;i:25636;i:25212;i:25462;i:25462;i:25637;i:25462;i:25159;i:25159;i:25639;i:25159;i:25640;i:25640;i:25645;i:25640;i:25487;i:25487;i:25647;i:25487;i:25598;i:25598;i:25653;i:25598;i:25250;i:25250;i:25654;i:25250;i:25657;i:25212;i:25410;i:25410;i:25664;i:25410;i:25179;i:25179;i:25667;i:25179;i:25365;i:25365;i:25668;i:25365;i:25416;i:25416;i:25669;i:25416;i:25671;i:25594;i:25524;i:25524;i:25681;i:25524;i:25532;i:25532;i:25692;i:25532;i:25602;i:25602;i:25695;i:25602;i:25696;i:24635;i:25299;i:25299;i:25709;i:25299;i:25370;i:25370;i:25711;i:25370;i:25248;i:25248;i:25715;i:25248;i:25247;i:25247;i:25718;i:25247;i:25240;i:25240;i:25722;i:25240;i:25530;i:25530;i:25723;i:25530;i:25395;i:25395;i:25724;i:25395;i:20987;i:20987;i:25731;i:20987;i:25496;i:25496;i:25733;i:25496;i:25438;i:25438;i:25736;i:25438;i:25382;i:25382;i:25743;i:25382;i:25744;i:25744;i:25745;i:25744;i:25376;i:25376;i:25747;i:25376;i:25752;i:25640;i:25467;i:25467;i:25754;i:25467;i:25378;i:25378;i:25759;i:25378;i:25528;i:25528;i:25763;i:25528;i:25320;i:25320;i:25765;i:25320;i:25199;i:25199;i:25766;i:25199;i:25771;i:25242;i:25169;i:25169;i:25778;i:25169;i:25599;i:25599;i:25779;i:25599;i:25785;i:25409;i:25374;i:25374;i:25787;i:25374;i:25373;i:25373;i:25790;i:25373;i:25441;i:25441;i:25791;i:25441;i:25792;i:25182;i:25317;i:25317;i:25793;i:25317;i:25523;i:25523;i:25796;i:25523;i:25799;i:25246;i:25802;i:20987;i:25377;i:25377;i:25803;i:25377;i:14815;i:14815;i:25811;i:14815;i:25285;i:25285;i:25812;i:25285;i:25818;i:25312;i:25380;i:25380;i:25824;i:25380;i:25827;i:25443;i:25831;i:20030;i:25834;i:25834;i:25835;i:25834;i:25836;i:20759;i:25672;i:25672;i:25839;i:25672;i:25319;i:25319;i:25840;i:25319;i:25601;i:25601;i:25841;i:25601;i:25527;i:25527;i:25842;i:25527;i:25844;i:25193;i:25783;i:25783;i:25847;i:25783;i:25670;i:25670;i:25850;i:25670;i:25822;i:25822;i:25851;i:25822;i:25784;i:25784;i:25852;i:25784;i:25200;i:25200;i:25854;i:25200;i:25860;i:25416;i:25781;i:25781;i:25862;i:25781;i:25314;i:25314;i:25871;i:25314;i:25861;i:25861;i:25874;i:25861;i:25318;i:25318;i:25876;i:25318;i:25732;i:25732;i:25878;i:25732;i:25600;i:25600;i:25881;i:25600;i:25786;i:25786;i:25883;i:25786;i:25658;i:25658;i:25884;i:25658;i:25885;i:25365;i:25890;i:25861;i:25371;i:25371;i:25891;i:25371;i:25674;i:25674;i:25892;i:25674;i:25898;i:25409;i:25597;i:25597;i:25900;i:25597;i:25624;i:25624;i:25903;i:25624;i:25908;i:25169;i:21454;i:21454;i:25910;i:21454;i:21512;i:21512;i:25926;i:21512;i:25928;i:20466;i:21465;i:21465;i:25933;i:21465;i:25939;i:22842;i:25944;i:21465;i:25934;i:25934;i:25945;i:25934;i:25952;i:25952;i:25962;i:25952;i:24845;i:24845;i:25967;i:24845;i:25932;i:25932;i:25973;i:25932;i:23555;i:23555;i:25975;i:23555;i:25968;i:25968;i:25976;i:25968;i:22800;i:22800;i:25979;i:22800;i:25947;i:25947;i:25986;i:25947;i:25961;i:25961;i:25989;i:25961;i:25990;i:25961;i:25992;i:23398;i:20125;i:20125;i:25993;i:20125;i:25995;i:25995;i:25998;i:25995;i:24254;i:24254;i:26004;i:24254;i:26003;i:26003;i:26005;i:26003;i:20153;i:20153;i:26006;i:20153;i:26014;i:24254;i:26025;i:26025;i:26028;i:26025;i:26029;i:26029;i:26039;i:26029;i:26044;i:20110;i:26060;i:26060;i:26061;i:26060;i:26050;i:26050;i:26071;i:26050;i:26082;i:26082;i:26083;i:26082;i:24649;i:24649;i:26088;i:24649;i:26093;i:26093;i:26094;i:26093;i:21453;i:21453;i:26116;i:21453;i:26118;i:23824;i:21319;i:21319;i:26119;i:21319;i:26138;i:24892;i:26122;i:26122;i:26150;i:26122;i:26159;i:26159;i:26160;i:26159;i:26102;i:26102;i:26178;i:26102;i:26179;i:26179;i:26180;i:26179;i:26185;i:26185;i:26187;i:26185;i:26204;i:23824;i:26172;i:26172;i:26205;i:26172;i:16447;i:16447;i:26211;i:16447;i:26202;i:26202;i:26217;i:26202;i:26195;i:26195;i:26241;i:26195;i:26197;i:26197;i:26248;i:26197;i:26198;i:26198;i:26249;i:26198;i:26144;i:26144;i:26254;i:26144;i:26235;i:26235;i:26263;i:26235;i:26104;i:26104;i:26264;i:26104;i:26278;i:21382;i:26242;i:26242;i:26283;i:26242;i:26165;i:26165;i:26289;i:26165;i:20102;i:20102;i:26296;i:20102;i:26280;i:26280;i:26305;i:26280;i:26196;i:26196;i:26308;i:26196;i:26309;i:26196;i:26310;i:21382;i:26137;i:26137;i:26311;i:26137;i:26313;i:26195;i:26162;i:26162;i:26314;i:26162;i:26319;i:21521;i:26279;i:26279;i:26326;i:26279;i:26103;i:26103;i:26336;i:26103;i:21472;i:21472;i:26337;i:21472;i:26173;i:26173;i:26344;i:26173;i:26194;i:26194;i:26348;i:26194;i:26355;i:26355;i:26357;i:26355;i:15066;i:15066;i:26358;i:15066;i:20070;i:20070;i:26360;i:20070;i:26361;i:26361;i:26362;i:26361;i:20250;i:20250;i:26371;i:20250;i:26390;i:26390;i:26391;i:26390;i:26398;i:26398;i:26399;i:26398;i:26395;i:26395;i:26402;i:26395;i:22834;i:22834;i:26412;i:22834;i:26413;i:21107;i:26414;i:26414;i:26415;i:26414;i:26421;i:26421;i:26422;i:26421;i:26431;i:21050;i:22316;i:22316;i:26439;i:22316;i:20358;i:20358;i:26469;i:20358;i:20625;i:20625;i:26480;i:20625;i:19996;i:19996;i:26481;i:19996;i:26494;i:26494;i:26496;i:26494;i:26500;i:20883;i:26428;i:26428;i:26503;i:26428;i:25296;i:25296;i:26548;i:25296;i:26478;i:26478;i:26558;i:26478;i:22856;i:22856;i:26608;i:22856;i:26597;i:26597;i:26619;i:26597;i:26601;i:26601;i:26622;i:26601;i:26623;i:26478;i:26613;i:26613;i:26629;i:26613;i:26531;i:26531;i:26630;i:26531;i:22658;i:22658;i:26631;i:22658;i:23564;i:23564;i:26641;i:23564;i:22865;i:22865;i:26644;i:22865;i:24900;i:24900;i:26647;i:24900;i:25357;i:25357;i:26657;i:25357;i:26575;i:26575;i:26658;i:26575;i:26705;i:26705;i:26706;i:26705;i:26479;i:26479;i:26734;i:26479;i:26578;i:26578;i:26748;i:26578;i:26438;i:26438;i:26751;i:26438;i:26445;i:26445;i:26771;i:26445;i:26624;i:26624;i:26772;i:26624;i:26535;i:26535;i:26776;i:26535;i:26465;i:26465;i:26781;i:26465;i:26541;i:26541;i:26783;i:26541;i:22818;i:22818;i:26790;i:22818;i:26802;i:26802;i:26817;i:26802;i:24323;i:24323;i:26820;i:24323;i:26826;i:26826;i:26827;i:26826;i:26536;i:26536;i:26838;i:26536;i:26839;i:26531;i:26635;i:26635;i:26847;i:26635;i:15182;i:15182;i:26849;i:15182;i:26632;i:26632;i:26855;i:26632;i:26646;i:26646;i:26866;i:26646;i:26814;i:26814;i:26870;i:26814;i:26700;i:26700;i:26873;i:26700;i:26720;i:26720;i:26895;i:26720;i:26816;i:26816;i:26908;i:26816;i:25777;i:25777;i:26925;i:25777;i:26837;i:26837;i:26934;i:26837;i:26542;i:26542;i:26937;i:26542;i:26946;i:26597;i:26472;i:26472;i:26954;i:26472;i:25542;i:25542;i:26961;i:25542;i:26539;i:26539;i:26963;i:26539;i:26965;i:25777;i:26904;i:26904;i:26970;i:26904;i:26511;i:26511;i:26976;i:26511;i:26722;i:26722;i:26984;i:26722;i:19994;i:19994;i:26989;i:19994;i:26757;i:26757;i:26995;i:26757;i:26497;i:26497;i:26997;i:26497;i:20048;i:20048;i:27005;i:20048;i:26977;i:26977;i:27014;i:26977;i:26745;i:26745;i:27028;i:26745;i:26688;i:26688;i:27044;i:26688;i:27046;i:20094;i:25662;i:25662;i:27048;i:25662;i:26473;i:26473;i:27050;i:26473;i:26628;i:26628;i:27054;i:26628;i:27013;i:27013;i:27058;i:27013;i:27063;i:14913;i:26724;i:26724;i:27071;i:26724;i:26680;i:26680;i:27077;i:26680;i:27083;i:20883;i:26538;i:26538;i:27085;i:26538;i:26464;i:26464;i:27091;i:26464;i:26679;i:26679;i:27096;i:26679;i:27079;i:27079;i:27097;i:27079;i:27022;i:27022;i:27098;i:27022;i:26809;i:26809;i:27103;i:26809;i:26815;i:26815;i:27108;i:26815;i:26912;i:26912;i:27111;i:26912;i:26881;i:26881;i:27112;i:26881;i:27010;i:27010;i:27114;i:27010;i:26728;i:26728;i:27123;i:26728;i:26909;i:26909;i:27132;i:26909;i:26729;i:26729;i:27137;i:26729;i:27138;i:20048;i:26526;i:26526;i:27141;i:26526;i:26753;i:26753;i:27153;i:26753;i:27004;i:27004;i:27155;i:27004;i:27161;i:22658;i:26427;i:26427;i:27163;i:26427;i:26530;i:26530;i:27166;i:26530;i:27171;i:26679;i:27037;i:27037;i:27175;i:27037;i:26435;i:26435;i:27177;i:26435;i:26730;i:26730;i:27187;i:26730;i:26420;i:26420;i:27192;i:26420;i:27193;i:23564;i:26726;i:26726;i:27194;i:26726;i:27035;i:27035;i:27196;i:27035;i:27197;i:22699;i:26923;i:26923;i:27199;i:26923;i:26725;i:26725;i:27207;i:26725;i:26721;i:26721;i:27208;i:26721;i:27211;i:26725;i:27160;i:27160;i:27221;i:27160;i:26426;i:26426;i:27231;i:26426;i:27234;i:25777;i:27178;i:27178;i:27243;i:27178;i:27152;i:27152;i:27257;i:27152;i:27109;i:27109;i:27269;i:27109;i:27100;i:27100;i:27271;i:27100;i:26621;i:26621;i:27273;i:26621;i:26723;i:26723;i:27284;i:26723;i:26544;i:26544;i:27288;i:26544;i:27290;i:26904;i:26727;i:26727;i:27292;i:26727;i:27295;i:27022;i:27298;i:26816;i:27183;i:27183;i:27299;i:27183;i:27265;i:27265;i:27305;i:27265;i:26812;i:26812;i:27310;i:26812;i:21488;i:21488;i:27311;i:21488;i:27315;i:26809;i:26592;i:26592;i:27320;i:26592;i:27099;i:27099;i:27323;i:27099;i:27267;i:27267;i:27324;i:27267;i:27330;i:26700;i:26588;i:26588;i:27331;i:26588;i:27347;i:27152;i:27016;i:27016;i:27354;i:27016;i:26633;i:26633;i:27355;i:26633;i:26911;i:26911;i:27357;i:26911;i:27260;i:27260;i:27358;i:27260;i:26638;i:26638;i:27359;i:26638;i:27249;i:27249;i:27365;i:27249;i:27104;i:27104;i:27367;i:27104;i:26636;i:26636;i:27368;i:26636;i:26533;i:26533;i:27370;i:26533;i:27237;i:27237;i:27371;i:27237;i:27015;i:27015;i:27372;i:27015;i:26634;i:26634;i:27379;i:26634;i:27017;i:27017;i:27384;i:27017;i:27185;i:27185;i:27387;i:27185;i:27389;i:27267;i:26639;i:26639;i:27396;i:26639;i:27401;i:19995;i:27402;i:26435;i:26916;i:26916;i:27407;i:26916;i:26686;i:26686;i:27410;i:26686;i:27012;i:27012;i:27414;i:27012;i:27415;i:26639;i:26818;i:26818;i:27422;i:26818;i:25085;i:25085;i:27426;i:25085;i:24958;i:24958;i:27442;i:24958;i:27443;i:21919;i:22013;i:22013;i:27446;i:22013;i:27470;i:21497;i:27431;i:27431;i:27472;i:27431;i:27475;i:25085;i:27477;i:21943;i:27483;i:25947;i:27428;i:27428;i:27487;i:27428;i:27489;i:25085;i:23696;i:23696;i:27495;i:23696;i:27493;i:27493;i:27497;i:27493;i:27506;i:20119;i:27507;i:20119;i:27508;i:21382;i:27511;i:21382;i:27512;i:24112;i:27513;i:27513;i:27514;i:27513;i:22829;i:22829;i:27520;i:22829;i:27519;i:27519;i:27521;i:27519;i:27531;i:27531;i:27544;i:27531;i:27538;i:27538;i:27550;i:27538;i:27527;i:27527;i:27556;i:27527;i:15470;i:15470;i:27560;i:15470;i:27546;i:27546;i:27563;i:27546;i:20725;i:20725;i:27565;i:20725;i:27539;i:27539;i:27566;i:27539;i:27553;i:27553;i:27567;i:27553;i:27516;i:27516;i:27570;i:27516;i:26488;i:26488;i:27571;i:26488;i:24903;i:24903;i:27575;i:24903;i:26432;i:26432;i:27578;i:26432;i:22771;i:22771;i:27579;i:22771;i:27580;i:22771;i:27584;i:27584;i:27585;i:27584;i:25970;i:25970;i:27587;i:25970;i:27572;i:27572;i:27590;i:27572;i:21307;i:21307;i:27593;i:21307;i:27598;i:27598;i:27599;i:27598;i:27607;i:27607;i:27608;i:27607;i:25987;i:25987;i:27609;i:25987;i:27620;i:27620;i:27643;i:27620;i:27637;i:27637;i:27647;i:27637;i:27617;i:27617;i:27656;i:27617;i:27655;i:27655;i:27660;i:27655;i:27668;i:27668;i:27683;i:27668;i:27682;i:27682;i:27691;i:27682;i:27689;i:27689;i:27692;i:27689;i:27698;i:27698;i:27699;i:27698;i:20912;i:20912;i:27703;i:20912;i:27719;i:21295;i:27710;i:27710;i:27726;i:27710;i:27737;i:27737;i:27738;i:27737;i:27745;i:27737;i:27727;i:27727;i:27760;i:27727;i:20915;i:20915;i:27770;i:20915;i:27784;i:27784;i:27785;i:27784;i:20913;i:20913;i:27789;i:20913;i:20914;i:20914;i:27798;i:20914;i:20226;i:20226;i:27803;i:20226;i:27794;i:27794;i:27809;i:27794;i:27825;i:27825;i:27826;i:27825;i:20917;i:20917;i:27841;i:20917;i:27867;i:27710;i:26740;i:26740;i:27885;i:26740;i:27850;i:27850;i:27898;i:27850;i:27810;i:27810;i:27901;i:27810;i:20925;i:20925;i:27916;i:20925;i:27740;i:27740;i:27917;i:27740;i:20234;i:20234;i:27938;i:20234;i:27844;i:27844;i:27945;i:27844;i:27905;i:27905;i:27951;i:27905;i:27769;i:27769;i:27958;i:27769;i:20926;i:20926;i:27965;i:20926;i:27858;i:27858;i:27966;i:27858;i:27972;i:20928;i:22176;i:22176;i:27983;i:22176;i:27771;i:27771;i:27986;i:27771;i:27971;i:27971;i:28025;i:27971;i:28034;i:20931;i:27902;i:27902;i:28039;i:27902;i:27882;i:27882;i:28057;i:27882;i:28055;i:28055;i:28058;i:28055;i:20937;i:20937;i:28092;i:20937;i:28114;i:20932;i:27768;i:27768;i:28115;i:27768;i:27878;i:27878;i:28119;i:27878;i:28122;i:27882;i:27993;i:27993;i:28123;i:27993;i:20522;i:20522;i:28131;i:20522;i:28136;i:20928;i:20940;i:20940;i:28137;i:20940;i:27814;i:27814;i:28138;i:27814;i:23148;i:23148;i:28139;i:23148;i:28062;i:28062;i:28150;i:28062;i:20938;i:20938;i:28152;i:20938;i:27973;i:27973;i:28154;i:27973;i:28165;i:20938;i:27982;i:27982;i:28168;i:27982;i:28041;i:28041;i:28169;i:28041;i:28149;i:28149;i:28170;i:28149;i:28073;i:28073;i:28171;i:28073;i:28133;i:28133;i:28172;i:28133;i:24009;i:24009;i:28176;i:24009;i:28181;i:28149;i:28182;i:27784;i:28067;i:28067;i:28185;i:28067;i:20943;i:20943;i:28187;i:20943;i:27816;i:27816;i:28194;i:27816;i:28065;i:28065;i:28198;i:28065;i:28203;i:27844;i:27979;i:27979;i:28204;i:27979;i:28167;i:28167;i:28212;i:28167;i:27985;i:27985;i:28222;i:27985;i:28230;i:28230;i:28231;i:28230;i:20945;i:20945;i:28234;i:20945;i:27976;i:27976;i:28254;i:27976;i:28044;i:28044;i:28263;i:28044;i:27748;i:27748;i:28271;i:27748;i:27817;i:27817;i:28296;i:27817;i:21429;i:21429;i:28304;i:21429;i:28310;i:20934;i:28313;i:27727;i:27807;i:27807;i:28317;i:27807;i:28201;i:28201;i:28331;i:28201;i:27977;i:27977;i:28334;i:27977;i:27869;i:27869;i:28335;i:27869;i:28066;i:28066;i:28339;i:28066;i:23615;i:23615;i:28346;i:23615;i:28287;i:28287;i:28348;i:28287;i:27815;i:27815;i:28356;i:27815;i:27773;i:27773;i:28362;i:27773;i:28068;i:28068;i:28364;i:28068;i:28377;i:21295;i:28288;i:28288;i:28385;i:28288;i:27996;i:27996;i:28392;i:27996;i:27818;i:27818;i:28396;i:27818;i:28382;i:28382;i:28399;i:28382;i:28183;i:28183;i:28402;i:28183;i:21348;i:21348;i:28407;i:21348;i:28408;i:27771;i:27984;i:27984;i:28411;i:27984;i:28378;i:28378;i:28414;i:28378;i:28415;i:28288;i:28180;i:28180;i:28417;i:28180;i:28421;i:24034;i:28422;i:26578;i:28295;i:28295;i:28426;i:28295;i:28297;i:28297;i:28433;i:28297;i:27812;i:27812;i:28442;i:27812;i:27721;i:27721;i:28450;i:27721;i:28063;i:28063;i:28451;i:28063;i:27964;i:27964;i:28453;i:27964;i:28455;i:20094;i:28173;i:28173;i:28460;i:28173;i:28072;i:28072;i:28466;i:28072;i:28294;i:28294;i:28469;i:28294;i:28472;i:24009;i:27974;i:27974;i:28479;i:27974;i:28430;i:28430;i:28480;i:28430;i:28395;i:28395;i:28483;i:28395;i:28465;i:28465;i:28484;i:28465;i:27900;i:27900;i:28497;i:27900;i:28500;i:27905;i:28505;i:27817;i:28507;i:28507;i:28508;i:28507;i:28070;i:28070;i:28516;i:28070;i:28337;i:28337;i:28519;i:28337;i:28520;i:28430;i:27988;i:27988;i:28527;i:27988;i:28291;i:28291;i:28528;i:28291;i:28375;i:28375;i:28535;i:28375;i:28064;i:28064;i:28543;i:28064;i:28544;i:28073;i:28545;i:28073;i:28546;i:28546;i:28548;i:28546;i:27975;i:27975;i:28550;i:27975;i:28061;i:28061;i:28551;i:28061;i:28316;i:28316;i:28561;i:28316;i:28009;i:28009;i:28564;i:28009;i:28071;i:28071;i:28567;i:28071;i:28511;i:28511;i:28569;i:28511;i:28177;i:28177;i:28576;i:28177;i:28003;i:28003;i:28579;i:28003;i:28580;i:27810;i:28394;i:28394;i:28582;i:28394;i:27894;i:27894;i:28585;i:27894;i:27872;i:27872;i:28586;i:27872;i:28459;i:28459;i:28587;i:28459;i:27981;i:27981;i:28590;i:27981;i:28096;i:28096;i:28593;i:28096;i:28129;i:28129;i:28601;i:28129;i:15584;i:15584;i:28606;i:15584;i:27978;i:27978;i:28609;i:27978;i:27987;i:27987;i:28611;i:27987;i:28612;i:28065;i:28615;i:28073;i:27829;i:27829;i:28628;i:27829;i:28629;i:28287;i:27870;i:27870;i:28632;i:27870;i:28289;i:28289;i:28634;i:28289;i:25054;i:25054;i:28635;i:25054;i:27989;i:27989;i:28636;i:27989;i:28639;i:27982;i:28059;i:28059;i:28644;i:28059;i:28389;i:28389;i:28651;i:28389;i:27994;i:27994;i:28652;i:27994;i:28493;i:28493;i:28656;i:28493;i:28657;i:27996;i:28659;i:28507;i:28293;i:28293;i:28666;i:28293;i:28668;i:27850;i:28388;i:28388;i:28670;i:28388;i:28478;i:28478;i:28673;i:28478;i:28571;i:28571;i:28674;i:28571;i:28386;i:28386;i:28677;i:28386;i:28174;i:28174;i:28678;i:28174;i:27754;i:27754;i:28679;i:27754;i:27899;i:27899;i:28681;i:27899;i:28683;i:27784;i:28687;i:22176;i:28690;i:28073;i:28626;i:28626;i:28693;i:28626;i:27896;i:27896;i:28696;i:27896;i:27813;i:27813;i:28701;i:27813;i:28487;i:28487;i:28703;i:28487;i:28486;i:28486;i:28704;i:28486;i:28667;i:28667;i:28706;i:28667;i:28532;i:28532;i:28710;i:28532;i:27895;i:27895;i:28711;i:27895;i:28625;i:28625;i:28712;i:28625;i:28716;i:28625;i:28720;i:20894;i:28491;i:28491;i:28722;i:28491;i:28572;i:28572;i:28734;i:28572;i:28737;i:28149;i:27811;i:27811;i:28739;i:27811;i:28384;i:28384;i:28740;i:28384;i:28485;i:28485;i:28748;i:28485;i:27922;i:27922;i:28753;i:27922;i:28383;i:28383;i:28756;i:28383;i:28435;i:28435;i:28757;i:28435;i:28393;i:28393;i:28760;i:28393;i:28751;i:28751;i:28765;i:28751;i:28286;i:28286;i:28771;i:28286;i:28390;i:28390;i:28772;i:28390;i:28775;i:28383;i:28777;i:28383;i:28357;i:28357;i:28781;i:28357;i:20809;i:20809;i:28782;i:20809;i:28797;i:28797;i:28798;i:28797;i:28805;i:28805;i:28820;i:28805;i:21279;i:21279;i:28821;i:21279;i:28826;i:20809;i:26316;i:26316;i:28836;i:26316;i:28846;i:28846;i:28848;i:28846;i:26170;i:26170;i:28851;i:26170;i:22860;i:22860;i:28857;i:22860;i:20026;i:20026;i:28858;i:20026;i:20044;i:20044;i:28879;i:20044;i:28886;i:28797;i:28788;i:28788;i:28888;i:28788;i:28897;i:20809;i:28847;i:28847;i:28913;i:28847;i:28867;i:28867;i:28916;i:28867;i:28922;i:26390;i:28873;i:28873;i:28949;i:28873;i:28803;i:28803;i:28954;i:28803;i:26080;i:26080;i:28961;i:26080;i:24824;i:24824;i:28973;i:24824;i:28860;i:28860;i:29001;i:28860;i:28828;i:28828;i:29010;i:28828;i:26262;i:26262;i:29014;i:26262;i:28895;i:28895;i:29017;i:28895;i:28908;i:28908;i:29025;i:28908;i:29026;i:24824;i:29029;i:28873;i:29031;i:26316;i:28902;i:28902;i:29033;i:28902;i:28800;i:28800;i:29036;i:28800;i:29009;i:29009;i:29038;i:29009;i:29044;i:29044;i:29061;i:29044;i:28829;i:28829;i:29079;i:28829;i:29064;i:29064;i:29081;i:29064;i:28909;i:28909;i:29105;i:28909;i:29113;i:29113;i:29114;i:29113;i:28861;i:28861;i:29118;i:28861;i:28904;i:28904;i:29121;i:28904;i:28976;i:28976;i:29124;i:28976;i:28940;i:28940;i:29127;i:28940;i:28783;i:28783;i:29128;i:28783;i:28822;i:28822;i:29129;i:28822;i:28903;i:28903;i:29138;i:28903;i:28866;i:28866;i:29143;i:28866;i:28907;i:28907;i:29145;i:28907;i:29018;i:29018;i:29147;i:29018;i:28950;i:28950;i:29148;i:28950;i:21942;i:21942;i:29151;i:21942;i:29040;i:29040;i:29157;i:29040;i:28799;i:28799;i:29158;i:28799;i:28891;i:28891;i:29165;i:28891;i:29032;i:29032;i:29168;i:29032;i:28905;i:28905;i:29172;i:28905;i:29155;i:29155;i:29175;i:29155;i:29071;i:29071;i:29179;i:29071;i:29180;i:28908;i:28952;i:28952;i:29182;i:28952;i:26332;i:26332;i:29183;i:26332;i:28865;i:28865;i:29197;i:28865;i:28809;i:28809;i:29200;i:28809;i:29160;i:29160;i:29204;i:29160;i:29211;i:28866;i:29185;i:29185;i:29222;i:29185;i:29167;i:29167;i:29223;i:29167;i:20105;i:20105;i:29229;i:20105;i:24859;i:24859;i:29233;i:24859;i:29234;i:20026;i:29239;i:29239;i:29242;i:29239;i:20430;i:20430;i:29244;i:20430;i:24929;i:24929;i:29245;i:24929;i:29246;i:23570;i:20012;i:20012;i:29247;i:20012;i:24202;i:24202;i:29248;i:24202;i:29254;i:22681;i:27036;i:27036;i:29267;i:27036;i:29261;i:29261;i:29272;i:29261;i:29274;i:25744;i:23427;i:23427;i:29280;i:23427;i:27650;i:27650;i:29286;i:27650;i:29300;i:25210;i:29301;i:29301;i:29309;i:29301;i:29313;i:29313;i:29314;i:29313;i:22868;i:22868;i:29319;i:22868;i:29339;i:27650;i:29322;i:29322;i:29346;i:29322;i:29306;i:29306;i:29351;i:29306;i:29366;i:29366;i:29376;i:29366;i:29378;i:29378;i:29381;i:29378;i:20210;i:20210;i:29382;i:20210;i:20332;i:20332;i:29419;i:20332;i:29421;i:29421;i:29433;i:29421;i:29384;i:29384;i:29437;i:29384;i:29458;i:21388;i:29424;i:29424;i:29465;i:29424;i:29369;i:29369;i:29494;i:29369;i:29426;i:29426;i:29499;i:29426;i:29423;i:29423;i:29502;i:29423;i:29368;i:29368;i:29505;i:29368;i:21574;i:21574;i:29507;i:21574;i:29425;i:29425;i:29508;i:29425;i:29422;i:29422;i:29509;i:29422;i:29513;i:27035;i:29518;i:22870;i:20718;i:20718;i:29534;i:20718;i:29431;i:29431;i:29543;i:29431;i:29420;i:29420;i:29544;i:29420;i:29546;i:29423;i:29443;i:29443;i:29547;i:29443;i:29405;i:29405;i:29550;i:29405;i:29406;i:29406;i:29552;i:29406;i:29454;i:29454;i:29557;i:29454;i:29367;i:29367;i:29559;i:29367;i:20861;i:20861;i:29560;i:20861;i:29549;i:29549;i:29562;i:29549;i:29486;i:29486;i:29563;i:29486;i:29461;i:29461;i:29564;i:29461;i:29473;i:29473;i:29568;i:29473;i:29569;i:29443;i:22937;i:22937;i:29573;i:22937;i:20857;i:20857;i:29574;i:20857;i:29599;i:29599;i:29641;i:29599;i:29645;i:29645;i:29646;i:29645;i:22317;i:22317;i:29674;i:22317;i:20329;i:20329;i:29678;i:20329;i:29616;i:29616;i:29694;i:29616;i:27628;i:27628;i:29699;i:27628;i:29725;i:29599;i:24427;i:24427;i:29745;i:24427;i:29682;i:29682;i:29759;i:29682;i:29686;i:29686;i:29765;i:29686;i:29614;i:29614;i:29771;i:29614;i:29594;i:29594;i:29778;i:29594;i:29712;i:29712;i:29795;i:29712;i:29595;i:29595;i:29802;i:29595;i:29701;i:29701;i:29807;i:29701;i:29617;i:29617;i:29810;i:29617;i:29796;i:29796;i:29814;i:29796;i:29709;i:29709;i:29827;i:29709;i:29697;i:29697;i:29831;i:29697;i:29711;i:29711;i:29833;i:29711;i:29847;i:29594;i:29756;i:29756;i:29850;i:29756;i:29710;i:29710;i:29857;i:29710;i:29585;i:29585;i:29859;i:29585;i:29815;i:29815;i:29862;i:29815;i:29680;i:29680;i:29867;i:29680;i:29615;i:29615;i:29872;i:29615;i:29593;i:29593;i:29877;i:29593;i:29816;i:29816;i:29880;i:29816;i:29626;i:29626;i:29885;i:29626;i:29887;i:29697;i:29898;i:29756;i:29649;i:29649;i:29903;i:29649;i:29838;i:29838;i:29908;i:29838;i:29906;i:29906;i:29914;i:29906;i:29921;i:22519;i:29942;i:29942;i:29953;i:29942;i:29943;i:29943;i:29958;i:29943;i:29935;i:29935;i:29964;i:29935;i:29934;i:29934;i:29973;i:29934;i:29959;i:29959;i:29974;i:29959;i:29979;i:29979;i:29980;i:29979;i:29982;i:22039;i:20135;i:20135;i:29986;i:20135;i:29987;i:20135;i:22220;i:22220;i:29990;i:22220;i:22306;i:22306;i:30010;i:22306;i:27667;i:27667;i:30015;i:27667;i:26274;i:26274;i:30021;i:26274;i:20137;i:20137;i:30022;i:20137;i:22586;i:22586;i:30028;i:22586;i:30029;i:22586;i:30013;i:30013;i:30030;i:30013;i:24836;i:24836;i:30031;i:24836;i:30020;i:30020;i:30041;i:30020;i:30045;i:20137;i:27605;i:27605;i:30050;i:27605;i:30053;i:30053;i:30055;i:30053;i:30011;i:30011;i:30059;i:30011;i:30060;i:30060;i:30061;i:30060;i:30062;i:20137;i:24322;i:24322;i:30064;i:24322;i:30066;i:30060;i:30069;i:30011;i:30070;i:22137;i:22693;i:22693;i:30077;i:22693;i:30083;i:22693;i:30068;i:30068;i:30087;i:30068;i:30089;i:21472;i:30090;i:21472;i:21305;i:21305;i:30091;i:21305;i:24683;i:24683;i:30156;i:24683;i:30166;i:21713;i:30153;i:30153;i:30169;i:30153;i:30143;i:30143;i:30193;i:30143;i:28107;i:28107;i:30194;i:28107;i:30195;i:28107;i:24760;i:24760;i:30197;i:24760;i:30122;i:30122;i:30201;i:30122;i:30202;i:30122;i:30210;i:21713;i:24840;i:24840;i:30217;i:24840;i:30127;i:30127;i:30219;i:30127;i:30113;i:30113;i:30221;i:30113;i:30186;i:30186;i:30227;i:30186;i:30230;i:21905;i:30231;i:30231;i:30238;i:30231;i:30126;i:30126;i:30241;i:30126;i:30243;i:22351;i:30111;i:30111;i:30247;i:30111;i:30214;i:30214;i:30254;i:30214;i:30125;i:30125;i:30258;i:30125;i:30232;i:30232;i:30266;i:30232;i:30267;i:30232;i:30269;i:21220;i:30103;i:30103;i:30274;i:30103;i:30184;i:30184;i:30278;i:30184;i:30187;i:30187;i:30279;i:30187;i:30280;i:24223;i:30213;i:30213;i:30281;i:30213;i:30290;i:24840;i:30112;i:30112;i:30296;i:30112;i:30299;i:30299;i:30301;i:30299;i:30250;i:30250;i:30303;i:30250;i:30196;i:30196;i:30305;i:30196;i:30162;i:30162;i:30306;i:30162;i:30102;i:30102;i:30308;i:30102;i:30151;i:30151;i:30309;i:30151;i:30124;i:30124;i:30311;i:30124;i:30302;i:30302;i:30313;i:30302;i:30248;i:30248;i:30315;i:30248;i:30307;i:30307;i:30316;i:30307;i:30271;i:30271;i:30317;i:30271;i:30270;i:30270;i:30318;i:30270;i:30152;i:30152;i:30320;i:30152;i:30251;i:30251;i:30321;i:30251;i:30322;i:30248;i:30332;i:21457;i:30337;i:30337;i:30338;i:30337;i:30344;i:24112;i:30347;i:30347;i:30352;i:30347;i:26272;i:26272;i:30355;i:26272;i:26213;i:26213;i:30358;i:26213;i:30353;i:30353;i:30362;i:30353;i:30364;i:26272;i:30350;i:30350;i:30374;i:30350;i:30129;i:30129;i:30384;i:30129;i:30386;i:30386;i:30392;i:30386;i:30385;i:30385;i:30394;i:30385;i:30391;i:30391;i:30396;i:30391;i:30403;i:26479;i:30405;i:20914;i:30407;i:30407;i:30413;i:30407;i:29718;i:29718;i:30415;i:29718;i:22633;i:22633;i:30416;i:22633;i:27904;i:27904;i:30424;i:27904;i:30423;i:30423;i:30428;i:30423;i:30430;i:29718;i:30433;i:20760;i:30417;i:30417;i:30435;i:30417;i:30436;i:27904;i:21346;i:21346;i:30439;i:21346;i:28498;i:28498;i:30442;i:28498;i:30445;i:25147;i:30450;i:30450;i:30451;i:30450;i:30488;i:24892;i:30494;i:30494;i:30495;i:30494;i:20247;i:20247;i:30526;i:20247;i:22256;i:22256;i:30543;i:22256;i:30529;i:30529;i:30556;i:30529;i:30544;i:30544;i:30558;i:30544;i:30519;i:30519;i:30560;i:30519;i:30570;i:30570;i:30590;i:30570;i:21473;i:21473;i:30591;i:21473;i:20578;i:20578;i:30597;i:20578;i:30511;i:30511;i:30599;i:30511;i:30477;i:30477;i:30616;i:30477;i:16470;i:16470;i:30620;i:16470;i:30610;i:30610;i:30622;i:30610;i:30618;i:30618;i:30636;i:30618;i:30637;i:20102;i:30598;i:30598;i:30646;i:30598;i:30545;i:30545;i:30652;i:30545;i:30663;i:25054;i:30664;i:30664;i:30671;i:30664;i:30508;i:30508;i:30675;i:30508;i:30640;i:30640;i:30681;i:30640;i:30633;i:30633;i:30682;i:30633;i:27032;i:27032;i:30697;i:27032;i:30699;i:30699;i:30703;i:30699;i:25541;i:25541;i:30740;i:25541;i:26609;i:26609;i:30763;i:26609;i:30770;i:28846;i:26417;i:26417;i:30787;i:26417;i:30799;i:25541;i:30785;i:30785;i:30812;i:30785;i:30806;i:30806;i:30820;i:30806;i:30743;i:30743;i:30824;i:30743;i:23802;i:23802;i:30828;i:23802;i:22617;i:22617;i:30830;i:22617;i:30746;i:30746;i:30831;i:30746;i:30849;i:26826;i:26903;i:26903;i:30855;i:26903;i:30741;i:30741;i:30862;i:30741;i:30869;i:22524;i:30878;i:21926;i:30755;i:30755;i:30882;i:30755;i:30809;i:30809;i:30888;i:30809;i:30805;i:30805;i:30889;i:30805;i:30759;i:30759;i:30890;i:30759;i:30720;i:30720;i:30893;i:30720;i:29785;i:29785;i:30895;i:29785;i:25533;i:25533;i:30896;i:25533;i:30839;i:30839;i:30897;i:30839;i:30748;i:30748;i:30904;i:30748;i:30906;i:22617;i:30907;i:22617;i:30721;i:30721;i:30908;i:30721;i:28369;i:28369;i:30918;i:28369;i:30929;i:30809;i:30742;i:30742;i:30938;i:30742;i:30860;i:30860;i:30943;i:30860;i:30837;i:30837;i:30944;i:30837;i:30876;i:30876;i:30947;i:30876;i:30922;i:30922;i:30949;i:30922;i:30875;i:30875;i:30951;i:30875;i:30710;i:30710;i:30959;i:30710;i:29136;i:29136;i:30967;i:29136;i:30807;i:30807;i:30973;i:30807;i:30810;i:30810;i:30980;i:30810;i:30982;i:30839;i:30784;i:30784;i:30990;i:30784;i:30861;i:30861;i:31001;i:30861;i:30877;i:30877;i:31005;i:30877;i:30719;i:30719;i:31014;i:30719;i:30778;i:30778;i:31018;i:30778;i:30782;i:30782;i:31019;i:30782;i:30718;i:30718;i:31020;i:30718;i:31021;i:22617;i:31022;i:28846;i:30779;i:30779;i:31025;i:30779;i:31012;i:31012;i:31032;i:31012;i:31033;i:21926;i:31045;i:18102;i:31052;i:20914;i:26612;i:26612;i:31073;i:26612;i:26053;i:26053;i:31075;i:26053;i:31069;i:31069;i:31081;i:31069;i:31104;i:24297;i:31103;i:31103;i:31108;i:31103;i:31096;i:31096;i:31117;i:31096;i:31087;i:31087;i:31118;i:31087;i:31054;i:31054;i:31125;i:31054;i:31043;i:31043;i:31137;i:31043;i:31098;i:31098;i:31141;i:31098;i:24481;i:24481;i:31142;i:24481;i:31109;i:31109;i:31146;i:31109;i:31036;i:31036;i:31150;i:31036;i:31074;i:31074;i:31152;i:31074;i:31095;i:31095;i:31153;i:31095;i:31039;i:31039;i:31156;i:31039;i:21430;i:21430;i:31169;i:21430;i:31167;i:31167;i:31171;i:31167;i:24180;i:24180;i:31178;i:24180;i:31047;i:31047;i:31190;i:31047;i:31061;i:31061;i:31192;i:31061;i:20545;i:20545;i:31216;i:20545;i:24076;i:24076;i:31232;i:24076;i:31174;i:31174;i:31240;i:31174;i:31237;i:31237;i:31246;i:31237;i:26865;i:26865;i:31260;i:26865;i:31263;i:24297;i:31224;i:31224;i:31277;i:31224;i:31181;i:31181;i:31278;i:31181;i:31281;i:20545;i:31282;i:31282;i:31291;i:31282;i:20073;i:20073;i:31293;i:20073;i:31294;i:31294;i:31295;i:31294;i:16735;i:16735;i:31303;i:16735;i:31258;i:31258;i:31305;i:31258;i:31249;i:31249;i:31307;i:31249;i:31267;i:31267;i:31308;i:31267;i:31215;i:31215;i:31309;i:31215;i:31179;i:31179;i:31312;i:31179;i:31298;i:31298;i:31319;i:31298;i:31327;i:31298;i:31230;i:31230;i:31328;i:31230;i:31313;i:31313;i:31329;i:31313;i:31229;i:31229;i:31330;i:31229;i:31283;i:31283;i:31337;i:31283;i:29554;i:29554;i:31339;i:29554;i:31326;i:31326;i:31341;i:31326;i:23716;i:23716;i:31348;i:23716;i:25366;i:25366;i:31349;i:25366;i:23431;i:23431;i:31355;i:23431;i:31379;i:31379;i:31383;i:31379;i:22583;i:22583;i:31400;i:22583;i:31389;i:31389;i:31401;i:31389;i:31402;i:27964;i:23520;i:23520;i:31405;i:23520;i:31351;i:31351;i:31406;i:31351;i:31377;i:31377;i:31407;i:31377;i:31408;i:31377;i:31374;i:31374;i:31413;i:31374;i:31414;i:23520;i:31397;i:31397;i:31418;i:31397;i:31388;i:31388;i:31428;i:31388;i:31373;i:31373;i:31429;i:31373;i:31398;i:31398;i:31431;i:31398;i:28790;i:28790;i:31432;i:28790;i:31363;i:31363;i:31434;i:31363;i:22855;i:22855;i:31442;i:22855;i:31453;i:20006;i:20447;i:20447;i:31458;i:20447;i:31441;i:31441;i:31460;i:31441;i:31446;i:31446;i:31466;i:31446;i:31454;i:31454;i:31478;i:31454;i:31480;i:31454;i:31482;i:31482;i:31489;i:31482;i:24052;i:24052;i:31494;i:24052;i:21682;i:21682;i:31505;i:21682;i:30690;i:30690;i:31542;i:30690;i:29259;i:29259;i:31546;i:29259;i:31508;i:31508;i:31558;i:31508;i:31547;i:31547;i:31559;i:31547;i:31493;i:31493;i:31562;i:31493;i:26020;i:26020;i:31563;i:26020;i:31499;i:31499;i:31565;i:31499;i:30051;i:30051;i:31572;i:30051;i:31574;i:31574;i:31582;i:31574;i:31509;i:31509;i:31591;i:31509;i:31570;i:31570;i:31593;i:31570;i:31064;i:31064;i:31597;i:31064;i:31534;i:31534;i:31600;i:31534;i:31604;i:31574;i:31601;i:31601;i:31615;i:31601;i:31623;i:20010;i:31627;i:29259;i:31486;i:31486;i:31630;i:31486;i:31581;i:31581;i:31631;i:31581;i:31639;i:31064;i:31642;i:21107;i:25297;i:25297;i:31645;i:25297;i:26864;i:26864;i:31648;i:26864;i:31590;i:31590;i:31649;i:31590;i:31569;i:31569;i:31689;i:31569;i:31655;i:31655;i:31691;i:31655;i:31612;i:31612;i:31700;i:31612;i:31660;i:31660;i:31707;i:31660;i:31712;i:31601;i:31491;i:31491;i:31716;i:31491;i:31579;i:31579;i:31721;i:31579;i:31722;i:31486;i:31548;i:31548;i:31725;i:31548;i:31587;i:31587;i:31729;i:31587;i:24407;i:24407;i:31730;i:24407;i:31578;i:31578;i:31731;i:31578;i:31515;i:31515;i:31732;i:31515;i:31654;i:31654;i:31744;i:31654;i:31576;i:31576;i:31750;i:31576;i:31667;i:31667;i:31752;i:31667;i:31699;i:31699;i:31757;i:31699;i:31713;i:31713;i:31762;i:31713;i:31659;i:31659;i:31768;i:31659;i:31658;i:31658;i:31774;i:31658;i:31616;i:31616;i:31777;i:31616;i:31697;i:31697;i:31779;i:31697;i:31787;i:31659;i:27280;i:27280;i:31799;i:27280;i:31580;i:31580;i:31801;i:31580;i:31709;i:31709;i:31804;i:31709;i:31614;i:31614;i:31805;i:31614;i:24088;i:24088;i:31806;i:24088;i:31726;i:31726;i:31811;i:31726;i:31817;i:21488;i:31609;i:31609;i:31820;i:31609;i:31830;i:31614;i:31824;i:31824;i:31832;i:31824;i:31635;i:31635;i:31833;i:31635;i:31727;i:31727;i:31835;i:31727;i:31656;i:31656;i:31836;i:31656;i:31741;i:31741;i:31838;i:31741;i:31809;i:31809;i:31839;i:31809;i:31840;i:31548;i:31844;i:31614;i:31550;i:31550;i:31849;i:31550;i:31766;i:31766;i:31850;i:31766;i:31852;i:31587;i:31657;i:31657;i:31854;i:31657;i:21505;i:21505;i:31858;i:21505;i:30058;i:30058;i:31861;i:30058;i:31176;i:31176;i:31868;i:31176;i:31222;i:31222;i:31906;i:31222;i:31908;i:31908;i:31925;i:31908;i:31883;i:31883;i:31929;i:31883;i:31255;i:31255;i:31930;i:31255;i:31880;i:31880;i:31941;i:31880;i:31280;i:31280;i:31944;i:31280;i:31933;i:31933;i:31945;i:31933;i:29218;i:29218;i:31964;i:29218;i:31937;i:31937;i:31965;i:31937;i:31914;i:31914;i:31966;i:31914;i:31301;i:31301;i:31968;i:31301;i:31918;i:31918;i:31975;i:31918;i:31981;i:31933;i:31984;i:22242;i:31901;i:31901;i:31986;i:31901;i:31860;i:31860;i:31988;i:31860;i:31985;i:31985;i:31989;i:31985;i:31900;i:31900;i:31990;i:31900;i:19997;i:19997;i:31992;i:19997;i:31993;i:19997;i:20418;i:20418;i:31995;i:20418;i:31994;i:31994;i:31998;i:31994;i:24075;i:24075;i:32025;i:24075;i:27041;i:27041;i:32032;i:27041;i:32037;i:21107;i:17207;i:17207;i:32044;i:17207;i:32046;i:21107;i:24358;i:24358;i:32067;i:24358;i:32050;i:32050;i:32079;i:32050;i:32075;i:32075;i:32086;i:32075;i:27623;i:27623;i:32104;i:27623;i:32047;i:32047;i:32107;i:32047;i:32114;i:19997;i:32085;i:32085;i:32118;i:32085;i:32022;i:32022;i:32124;i:32022;i:32060;i:32060;i:32141;i:32060;i:25414;i:25414;i:32145;i:25414;i:32076;i:32076;i:32147;i:32076;i:32162;i:17207;i:26856;i:26856;i:32174;i:26856;i:24425;i:24425;i:32181;i:24425;i:32039;i:32039;i:32202;i:32039;i:32143;i:32143;i:32204;i:32143;i:32207;i:24635;i:32160;i:32160;i:32209;i:32160;i:32210;i:32210;i:32214;i:32210;i:32171;i:32171;i:32218;i:32171;i:32227;i:32227;i:32257;i:32227;i:32258;i:24635;i:32234;i:32234;i:32262;i:32234;i:32269;i:24110;i:32252;i:32252;i:32277;i:32252;i:32091;i:32091;i:32282;i:32091;i:21439;i:21439;i:32291;i:21439;i:32295;i:32091;i:25677;i:25677;i:32302;i:25677;i:32294;i:32294;i:32305;i:32294;i:23365;i:23365;i:32308;i:23365;i:32119;i:32119;i:32310;i:32119;i:32317;i:24635;i:21219;i:21219;i:32318;i:21219;i:32208;i:32208;i:32321;i:32208;i:32179;i:32179;i:32323;i:32179;i:32137;i:32137;i:32333;i:32137;i:32342;i:20254;i:32353;i:32137;i:32117;i:32117;i:32354;i:32117;i:32328;i:32328;i:32358;i:32328;i:32260;i:32260;i:32361;i:32260;i:32362;i:32117;i:32363;i:20418;i:32153;i:32153;i:32380;i:32153;i:32394;i:32075;i:32397;i:32047;i:32398;i:23365;i:32399;i:32399;i:32402;i:32399;i:25165;i:25165;i:32404;i:25165;i:32406;i:23365;i:32393;i:32393;i:32408;i:32393;i:32415;i:19997;i:32416;i:31994;i:32006;i:32006;i:32417;i:32006;i:32005;i:32005;i:32418;i:32005;i:32002;i:32002;i:32419;i:32002;i:32420;i:23365;i:32007;i:32007;i:32421;i:32007;i:32004;i:32004;i:32422;i:32004;i:32026;i:32026;i:32423;i:32026;i:32008;i:32008;i:32424;i:32008;i:32425;i:32075;i:32000;i:32000;i:32426;i:32000;i:32009;i:32009;i:32427;i:32009;i:32239;i:32239;i:32428;i:32239;i:32028;i:32028;i:32429;i:32028;i:32024;i:32024;i:32430;i:32024;i:32020;i:32020;i:32431;i:32020;i:32021;i:32021;i:32432;i:32021;i:32023;i:32023;i:32433;i:32023;i:32177;i:32177;i:32434;i:32177;i:32013;i:32013;i:32435;i:32013;i:32029;i:32029;i:32436;i:32029;i:32437;i:32294;i:32184;i:32184;i:32438;i:32184;i:32027;i:32027;i:32439;i:32027;i:32440;i:24075;i:32011;i:32011;i:32441;i:32011;i:32033;i:32033;i:32442;i:32033;i:32053;i:32053;i:32443;i:32053;i:32444;i:32022;i:32016;i:32016;i:32445;i:32016;i:32019;i:32019;i:32446;i:32019;i:32447;i:32171;i:32058;i:32058;i:32448;i:32058;i:32449;i:32050;i:32049;i:32049;i:32450;i:32049;i:32244;i:32244;i:32451;i:32244;i:32068;i:32068;i:32452;i:32068;i:32051;i:32051;i:32453;i:32051;i:32048;i:32048;i:32454;i:32048;i:32340;i:32340;i:32455;i:32340;i:32066;i:32066;i:32456;i:32066;i:32272;i:32272;i:32457;i:32272;i:32070;i:32070;i:32458;i:32070;i:32459;i:32060;i:32064;i:32064;i:32460;i:32064;i:32057;i:32057;i:32461;i:32057;i:32377;i:32377;i:32462;i:32377;i:32463;i:32076;i:32063;i:32063;i:32464;i:32063;i:32129;i:32129;i:32465;i:32129;i:32466;i:27623;i:32080;i:32080;i:32467;i:32080;i:32093;i:32093;i:32468;i:32093;i:32350;i:32350;i:32469;i:32350;i:32112;i:32112;i:32470;i:32112;i:32078;i:32078;i:32471;i:32078;i:32472;i:32117;i:32102;i:32102;i:32473;i:32102;i:32098;i:32098;i:32474;i:32098;i:32115;i:32115;i:32475;i:32115;i:32097;i:32097;i:32476;i:32097;i:32477;i:32085;i:32094;i:32094;i:32478;i:32094;i:32113;i:32113;i:32479;i:32113;i:32134;i:32134;i:32480;i:32134;i:32131;i:32131;i:32481;i:32131;i:32121;i:32121;i:32482;i:32121;i:32483;i:32137;i:32140;i:32140;i:32484;i:32140;i:32485;i:32143;i:32486;i:32091;i:32487;i:32153;i:32136;i:32136;i:32488;i:32136;i:32489;i:21219;i:32490;i:32210;i:32190;i:32190;i:32491;i:32190;i:32396;i:32396;i:32493;i:32396;i:32186;i:32186;i:32494;i:32186;i:32203;i:32203;i:32495;i:32203;i:32189;i:32189;i:32496;i:32189;i:32212;i:32212;i:32497;i:32212;i:32196;i:32196;i:32498;i:32196;i:32499;i:32260;i:32173;i:32173;i:32500;i:32173;i:32191;i:32191;i:32501;i:32191;i:32172;i:32172;i:32502;i:32172;i:32503;i:32179;i:32504;i:17207;i:32175;i:32175;i:32505;i:32175;i:32185;i:32185;i:32506;i:32185;i:32163;i:32163;i:32507;i:32163;i:32156;i:32156;i:32508;i:32156;i:32187;i:32187;i:32509;i:32187;i:32176;i:32176;i:32510;i:32176;i:32511;i:32160;i:32180;i:32180;i:32512;i:32180;i:32199;i:32199;i:32513;i:32199;i:32217;i:32217;i:32514;i:32217;i:32215;i:32215;i:32515;i:32215;i:32216;i:32216;i:32516;i:32216;i:32236;i:32236;i:32517;i:32236;i:32412;i:32412;i:32518;i:32412;i:32249;i:32249;i:32519;i:32249;i:32242;i:32242;i:32520;i:32242;i:32221;i:32221;i:32521;i:32221;i:32522;i:32252;i:32523;i:32117;i:32230;i:32230;i:32524;i:32230;i:32158;i:32158;i:32525;i:32158;i:32222;i:32222;i:32526;i:32222;i:32246;i:32246;i:32527;i:32246;i:32528;i:32171;i:32241;i:32241;i:32529;i:32241;i:32267;i:32267;i:32530;i:32267;i:32233;i:32233;i:32531;i:32233;i:32224;i:32224;i:32532;i:32224;i:32311;i:32311;i:32533;i:32311;i:32232;i:32232;i:32534;i:32232;i:32225;i:32225;i:32535;i:32225;i:32536;i:32227;i:32265;i:32265;i:32537;i:32265;i:32283;i:32283;i:32538;i:32283;i:32287;i:32287;i:32539;i:32287;i:32285;i:32285;i:32540;i:32285;i:32299;i:32299;i:32541;i:32299;i:32279;i:32279;i:32542;i:32279;i:32286;i:32286;i:32543;i:32286;i:32544;i:32399;i:32301;i:32301;i:32545;i:32301;i:32266;i:32266;i:32546;i:32266;i:32273;i:32273;i:32547;i:32273;i:32381;i:32381;i:32548;i:32381;i:32313;i:32313;i:32549;i:32313;i:32309;i:32309;i:32550;i:32309;i:32306;i:32306;i:32551;i:32306;i:32403;i:32403;i:32552;i:32403;i:32553;i:25677;i:32326;i:32326;i:32554;i:32326;i:32325;i:32325;i:32555;i:32325;i:32392;i:32392;i:32556;i:32392;i:32346;i:32346;i:32557;i:32346;i:32341;i:32341;i:32558;i:32341;i:32338;i:32338;i:32559;i:32338;i:32366;i:32366;i:32560;i:32366;i:32382;i:32382;i:32561;i:32382;i:32368;i:32368;i:32562;i:32368;i:32367;i:32367;i:32563;i:32367;i:32371;i:32371;i:32564;i:32371;i:32565;i:32393;i:21368;i:21368;i:32567;i:21368;i:22536;i:22536;i:32568;i:22536;i:32574;i:29942;i:32578;i:29959;i:32579;i:29959;i:32583;i:22699;i:32584;i:22363;i:32587;i:29934;i:32588;i:29959;i:32590;i:22363;i:32591;i:22406;i:32178;i:32178;i:32593;i:32178;i:32611;i:25346;i:32600;i:32600;i:32614;i:32600;i:23512;i:23512;i:32622;i:23512;i:32602;i:32602;i:32624;i:32602;i:20620;i:20620;i:32629;i:20620;i:32610;i:32610;i:32631;i:32610;i:32632;i:32602;i:32636;i:27605;i:32630;i:32630;i:32640;i:32630;i:32613;i:32613;i:32642;i:32613;i:32643;i:20906;i:32599;i:32599;i:32645;i:32599;i:32628;i:32628;i:32646;i:32628;i:32641;i:32641;i:32647;i:32641;i:32648;i:32641;i:23226;i:23226;i:32654;i:23226;i:20041;i:20041;i:32667;i:20041;i:32669;i:25210;i:32674;i:27623;i:32675;i:32675;i:32676;i:32675;i:32671;i:32671;i:32677;i:32671;i:32673;i:32673;i:32680;i:32673;i:32681;i:20041;i:32686;i:32686;i:32697;i:32686;i:32708;i:32708;i:32709;i:32708;i:20064;i:20064;i:32722;i:20064;i:32710;i:32710;i:32736;i:32710;i:32411;i:32411;i:32738;i:32411;i:32744;i:32708;i:32730;i:32730;i:32748;i:32730;i:32749;i:32749;i:32757;i:32749;i:32753;i:32753;i:32758;i:32753;i:32728;i:32728;i:32761;i:32728;i:32762;i:32753;i:32345;i:32345;i:32763;i:32345;i:32729;i:32729;i:32765;i:32729;i:32768;i:26332;i:32769;i:32769;i:32770;i:32769;i:25911;i:25911;i:32771;i:25911;i:32775;i:32775;i:32776;i:32775;i:32777;i:32775;i:31471;i:31471;i:32785;i:31471;i:31183;i:31183;i:32791;i:31183;i:31184;i:31184;i:32792;i:31184;i:21022;i:21022;i:32797;i:21022;i:26551;i:26551;i:32798;i:26551;i:20511;i:20511;i:32804;i:20511;i:32807;i:32807;i:32812;i:32807;i:32802;i:32802;i:32814;i:32802;i:27340;i:27340;i:32816;i:27340;i:24677;i:24677;i:32827;i:24677;i:32854;i:22307;i:23167;i:23167;i:32863;i:23167;i:32852;i:32852;i:32872;i:32852;i:32865;i:32865;i:32874;i:32865;i:32875;i:32852;i:32878;i:32852;i:32879;i:32852;i:32880;i:32865;i:22768;i:22768;i:32882;i:22768;i:32824;i:32824;i:32883;i:32824;i:21548;i:21548;i:32884;i:21548;i:32873;i:32873;i:32885;i:32873;i:32834;i:32834;i:32886;i:32834;i:32844;i:32844;i:32887;i:32844;i:32845;i:32845;i:32889;i:32845;i:32892;i:21548;i:32893;i:21548;i:32843;i:32843;i:32894;i:32843;i:32895;i:32895;i:32896;i:32895;i:31899;i:31899;i:32899;i:31899;i:32901;i:31899;i:22235;i:22235;i:32902;i:22235;i:23437;i:23437;i:32905;i:23437;i:30104;i:30104;i:32923;i:30104;i:32931;i:20989;i:26380;i:26380;i:32934;i:26380;i:32943;i:32943;i:32955;i:32943;i:20881;i:20881;i:32964;i:20881;i:32954;i:32954;i:32967;i:32954;i:26384;i:26384;i:32970;i:26384;i:32972;i:20573;i:26383;i:26383;i:32976;i:26383;i:32930;i:32930;i:32977;i:32930;i:21213;i:21213;i:32988;i:21213;i:32259;i:32259;i:32997;i:32259;i:26407;i:26407;i:32999;i:26407;i:32912;i:32912;i:33011;i:32912;i:15157;i:15157;i:33014;i:15157;i:33015;i:33015;i:33016;i:33015;i:26387;i:26387;i:33025;i:26387;i:32961;i:32961;i:33029;i:32961;i:33031;i:32961;i:33032;i:33032;i:33033;i:33032;i:33003;i:33003;i:33051;i:33003;i:21767;i:21767;i:33059;i:21767;i:26392;i:26392;i:33063;i:26392;i:20462;i:20462;i:33065;i:20462;i:33067;i:33067;i:33073;i:33067;i:32960;i:32960;i:33081;i:32960;i:33020;i:33020;i:33089;i:33020;i:20494;i:20494;i:33094;i:20494;i:32958;i:32958;i:33102;i:32958;i:33000;i:33000;i:33110;i:33000;i:20662;i:20662;i:33120;i:20662;i:33078;i:33078;i:33121;i:33078;i:33041;i:33041;i:33126;i:33041;i:32959;i:32959;i:33131;i:32959;i:33050;i:33050;i:33139;i:33050;i:32928;i:32928;i:33144;i:32928;i:33149;i:33149;i:33155;i:33149;i:21961;i:21961;i:33158;i:21961;i:30240;i:30240;i:33164;i:30240;i:33171;i:32928;i:33112;i:33112;i:33173;i:33112;i:32932;i:32932;i:33178;i:32932;i:17373;i:17373;i:33182;i:17373;i:33184;i:15157;i:26403;i:26403;i:33191;i:26403;i:33147;i:33147;i:33193;i:33147;i:33030;i:33030;i:33196;i:33030;i:32694;i:32694;i:33211;i:32694;i:32966;i:32966;i:33213;i:32966;i:33037;i:33037;i:33214;i:33037;i:33043;i:33043;i:33215;i:33043;i:32906;i:32906;i:33222;i:32906;i:33098;i:33098;i:33224;i:33098;i:33080;i:33080;i:33225;i:33080;i:33040;i:33040;i:33229;i:33040;i:33169;i:33169;i:33231;i:33169;i:33176;i:33176;i:33237;i:33176;i:33240;i:33098;i:33005;i:33005;i:33241;i:33005;i:33002;i:33002;i:33242;i:33002;i:33039;i:33039;i:33247;i:33039;i:33044;i:33044;i:33248;i:33044;i:33244;i:33244;i:33250;i:33244;i:21351;i:21351;i:33253;i:21351;i:20020;i:20020;i:33256;i:20020;i:27552;i:27552;i:33261;i:27552;i:33262;i:26280;i:32251;i:32251;i:33268;i:32251;i:33274;i:21488;i:25261;i:25261;i:33280;i:25261;i:33283;i:33283;i:33284;i:33283;i:19982;i:19982;i:33287;i:19982;i:20852;i:20852;i:33288;i:20852;i:33289;i:20030;i:26087;i:26087;i:33290;i:26087;i:25448;i:25448;i:33293;i:25448;i:33294;i:25448;i:27301;i:27301;i:33315;i:27301;i:33313;i:33313;i:33321;i:33313;i:26689;i:26689;i:33322;i:26689;i:26561;i:26561;i:33333;i:26561;i:33337;i:33313;i:33334;i:33334;i:33354;i:33334;i:33360;i:23622;i:33329;i:33329;i:33369;i:33329;i:33379;i:27152;i:33380;i:27301;i:33328;i:33328;i:33382;i:33328;i:33386;i:27152;i:33339;i:33339;i:33387;i:33339;i:33392;i:33392;i:33393;i:33392;i:33395;i:33395;i:33398;i:33395;i:33399;i:33395;i:20863;i:20863;i:33402;i:20863;i:31680;i:31680;i:33410;i:31680;i:32651;i:32651;i:33416;i:32651;i:31488;i:31488;i:33426;i:31488;i:21005;i:21005;i:33467;i:21005;i:21000;i:21000;i:33477;i:21000;i:33487;i:22220;i:33408;i:33408;i:33493;i:33408;i:33462;i:33462;i:33503;i:33462;i:30228;i:30228;i:33510;i:30228;i:33486;i:33486;i:33511;i:33486;i:20544;i:20544;i:33521;i:20544;i:31684;i:31684;i:33539;i:31684;i:33541;i:33541;i:33542;i:33541;i:22603;i:22603;i:33556;i:22603;i:33557;i:24824;i:32365;i:32365;i:33575;i:32365;i:27730;i:27730;i:33579;i:27730;i:33586;i:20857;i:33605;i:30051;i:33400;i:33400;i:33609;i:33400;i:33606;i:33606;i:33610;i:33606;i:33560;i:33560;i:33620;i:33560;i:24196;i:24196;i:33624;i:24196;i:33633;i:28498;i:33635;i:26628;i:28366;i:28366;i:33637;i:28366;i:29334;i:29334;i:33638;i:29334;i:29074;i:29074;i:33639;i:29074;i:24277;i:24277;i:33643;i:24277;i:26794;i:26794;i:33651;i:26794;i:33674;i:24196;i:33607;i:33607;i:33685;i:33607;i:33550;i:33550;i:33686;i:33550;i:33626;i:33626;i:33698;i:33626;i:33483;i:33483;i:33703;i:33483;i:33719;i:29554;i:29801;i:29801;i:33721;i:29801;i:33595;i:33595;i:33725;i:33595;i:33533;i:33533;i:33735;i:33533;i:33535;i:33535;i:33739;i:33535;i:28206;i:28206;i:33743;i:28206;i:26524;i:26524;i:33747;i:26524;i:21340;i:21340;i:33748;i:21340;i:22535;i:22535;i:33771;i:22535;i:33775;i:21326;i:33776;i:33533;i:24245;i:24245;i:33780;i:24245;i:24090;i:24090;i:33783;i:24090;i:33784;i:28895;i:26149;i:26149;i:33797;i:26149;i:33484;i:33484;i:33799;i:33484;i:33713;i:33713;i:33802;i:33713;i:33661;i:33661;i:33806;i:33661;i:33632;i:33632;i:33813;i:33632;i:33829;i:21942;i:32264;i:32264;i:33830;i:32264;i:19975;i:19975;i:33836;i:19975;i:33841;i:33841;i:33842;i:33841;i:33629;i:33629;i:33844;i:33629;i:33716;i:33716;i:33845;i:33716;i:33785;i:33785;i:33861;i:33785;i:21494;i:21494;i:33865;i:21494;i:33733;i:33733;i:33868;i:33733;i:33645;i:33645;i:33874;i:33645;i:30528;i:30528;i:33879;i:30528;i:33888;i:21441;i:30422;i:30422;i:33890;i:30422;i:33646;i:33646;i:33892;i:33646;i:33479;i:33479;i:33894;i:33479;i:33656;i:33656;i:33895;i:33656;i:22623;i:22623;i:33900;i:22623;i:26932;i:26932;i:33902;i:26932;i:33647;i:33647;i:33903;i:33647;i:33636;i:33636;i:33911;i:33636;i:33724;i:33724;i:33939;i:33724;i:33715;i:33715;i:33940;i:33715;i:33945;i:25054;i:33669;i:33669;i:33950;i:33669;i:33485;i:33485;i:33980;i:33485;i:33642;i:33642;i:33984;i:33642;i:33990;i:24109;i:33995;i:30422;i:31761;i:31761;i:34001;i:31761;i:34017;i:21441;i:33714;i:33714;i:34030;i:33714;i:33473;i:33473;i:34031;i:33473;i:34035;i:22535;i:34036;i:33724;i:34042;i:20863;i:33628;i:33628;i:34045;i:33628;i:33777;i:33777;i:34054;i:33777;i:34055;i:26280;i:34008;i:34008;i:34057;i:34008;i:31895;i:31895;i:34061;i:31895;i:34066;i:33636;i:34068;i:21340;i:33932;i:33932;i:34078;i:33932;i:33931;i:33931;i:34083;i:33931;i:33905;i:33905;i:34085;i:33905;i:33553;i:33553;i:34086;i:33553;i:34093;i:24277;i:34094;i:24124;i:34097;i:27037;i:34100;i:28107;i:33933;i:33933;i:34111;i:33933;i:33640;i:33640;i:34113;i:33640;i:33804;i:33804;i:34116;i:33804;i:33927;i:33927;i:34118;i:33927;i:27236;i:27236;i:34122;i:27236;i:34123;i:27236;i:33630;i:33630;i:34126;i:33630;i:33644;i:33644;i:34130;i:33644;i:33464;i:33464;i:34131;i:33464;i:33720;i:33720;i:34133;i:33720;i:33627;i:33627;i:34136;i:33627;i:33852;i:33852;i:34138;i:33852;i:33929;i:33929;i:34146;i:33929;i:34153;i:28498;i:33436;i:33436;i:34154;i:33436;i:33891;i:33891;i:34155;i:33891;i:33831;i:33831;i:34157;i:33831;i:31245;i:31245;i:34161;i:31245;i:34019;i:34019;i:34167;i:34019;i:34160;i:34160;i:34176;i:34160;i:33631;i:33631;i:34184;i:33631;i:34185;i:31229;i:34015;i:34015;i:34186;i:34015;i:33431;i:33431;i:34188;i:33431;i:34065;i:34065;i:34190;i:34065;i:23004;i:23004;i:34193;i:23004;i:34103;i:34103;i:34196;i:34103;i:33625;i:33625;i:34200;i:33625;i:21059;i:21059;i:34201;i:21059;i:34165;i:34165;i:34206;i:34165;i:33718;i:33718;i:34207;i:33718;i:33616;i:33616;i:34214;i:33616;i:33832;i:33832;i:34217;i:33832;i:34220;i:33647;i:31828;i:31828;i:34222;i:31828;i:34219;i:34219;i:34224;i:34219;i:34234;i:33632;i:34242;i:19995;i:34249;i:20511;i:34013;i:34013;i:34253;i:34013;i:33641;i:33641;i:34254;i:33641;i:34101;i:34101;i:34255;i:34101;i:34117;i:34117;i:34261;i:34117;i:34110;i:34110;i:34268;i:34110;i:34269;i:20863;i:33659;i:33659;i:34273;i:33659;i:34276;i:31824;i:34277;i:33647;i:31827;i:31827;i:34281;i:31827;i:34282;i:31828;i:17622;i:17622;i:34285;i:17622;i:34164;i:34164;i:34292;i:34164;i:33480;i:33480;i:34294;i:33480;i:34223;i:34223;i:34295;i:34223;i:34127;i:34127;i:34296;i:34127;i:34108;i:34108;i:34297;i:34108;i:34106;i:34106;i:34298;i:34106;i:34301;i:27015;i:33818;i:33818;i:34304;i:33818;i:34306;i:27236;i:34162;i:34162;i:34308;i:34162;i:33446;i:33446;i:34310;i:33446;i:34311;i:22220;i:34314;i:34164;i:33529;i:33529;i:34315;i:33529;i:34323;i:22220;i:34319;i:34319;i:34324;i:34319;i:27377;i:27377;i:34326;i:27377;i:27287;i:27287;i:34327;i:27287;i:34259;i:34259;i:34330;i:34259;i:33738;i:33738;i:34332;i:33738;i:34105;i:34105;i:34334;i:34105;i:33551;i:33551;i:34338;i:33551;i:33457;i:33457;i:34340;i:33457;i:20848;i:20848;i:34349;i:20848;i:34351;i:28498;i:34016;i:34016;i:34362;i:34016;i:27344;i:27344;i:34365;i:27344;i:33821;i:33821;i:34367;i:33821;i:34359;i:34359;i:34369;i:34359;i:24942;i:24942;i:34385;i:24942;i:22788;i:22788;i:34389;i:22788;i:34390;i:21628;i:34394;i:34394;i:34395;i:34394;i:34383;i:34383;i:34396;i:34383;i:21495;i:21495;i:34399;i:21495;i:26292;i:26292;i:34403;i:26292;i:20111;i:20111;i:34407;i:20111;i:34412;i:34412;i:34415;i:34412;i:34348;i:34348;i:34426;i:34348;i:30821;i:30821;i:34444;i:30821;i:30160;i:30160;i:34456;i:30160;i:34452;i:34452;i:34483;i:34452;i:34500;i:34500;i:34508;i:34500;i:34516;i:30160;i:34537;i:34537;i:34540;i:34537;i:34545;i:34545;i:34554;i:34545;i:34563;i:34563;i:34564;i:34563;i:34476;i:34476;i:34566;i:34476;i:34577;i:34577;i:34578;i:34577;i:34555;i:34555;i:34581;i:34555;i:34582;i:30160;i:30225;i:30225;i:34583;i:30225;i:34467;i:34467;i:34585;i:34467;i:34443;i:34443;i:34617;i:34443;i:34538;i:34538;i:34618;i:34538;i:34432;i:34432;i:34645;i:34432;i:29484;i:29484;i:34655;i:29484;i:34430;i:34430;i:34662;i:34430;i:34417;i:34417;i:34664;i:34417;i:29503;i:29503;i:34671;i:29503;i:29619;i:29619;i:34675;i:29619;i:34600;i:34600;i:34678;i:34600;i:34680;i:30225;i:34571;i:34571;i:34690;i:34571;i:34547;i:34547;i:34692;i:34547;i:34433;i:34433;i:34712;i:34433;i:34434;i:34434;i:34718;i:34434;i:34442;i:34442;i:34721;i:34442;i:33828;i:33828;i:34722;i:33828;i:34711;i:34711;i:34739;i:34711;i:34684;i:34684;i:34747;i:34684;i:34688;i:34688;i:34751;i:34688;i:34753;i:34442;i:34544;i:34544;i:34756;i:34544;i:34758;i:34758;i:34759;i:34758;i:34632;i:34632;i:34760;i:34632;i:34728;i:34728;i:34766;i:34728;i:34414;i:34414;i:34787;i:34414;i:34633;i:34633;i:34796;i:34633;i:34546;i:34546;i:34799;i:34546;i:34411;i:34411;i:34802;i:34411;i:34511;i:34511;i:34806;i:34511;i:34811;i:34433;i:34435;i:34435;i:34817;i:34435;i:34631;i:34631;i:34821;i:34631;i:34431;i:34431;i:34822;i:34431;i:34638;i:34638;i:34829;i:34638;i:34770;i:34770;i:34830;i:34770;i:34809;i:34809;i:34831;i:34809;i:34548;i:34548;i:34832;i:34548;i:34686;i:34686;i:34833;i:34686;i:34461;i:34461;i:34836;i:34461;i:34657;i:34657;i:34837;i:34657;i:34593;i:34593;i:34847;i:34593;i:24823;i:24823;i:34850;i:24823;i:34510;i:34510;i:34851;i:34510;i:34767;i:34767;i:34856;i:34767;i:34667;i:34667;i:34857;i:34667;i:21145;i:21145;i:34859;i:21145;i:34506;i:34506;i:34865;i:34506;i:34453;i:34453;i:34870;i:34453;i:34855;i:34855;i:34873;i:34855;i:34542;i:34542;i:34875;i:34542;i:34871;i:34871;i:34876;i:34871;i:34882;i:34882;i:34884;i:34882;i:34886;i:20247;i:34890;i:34065;i:34899;i:26414;i:21859;i:21859;i:34900;i:21859;i:34901;i:20189;i:24324;i:24324;i:34902;i:24324;i:32993;i:32993;i:34906;i:32993;i:21355;i:21355;i:34907;i:21355;i:34909;i:20914;i:34910;i:21355;i:32001;i:32001;i:34921;i:32001;i:32247;i:32247;i:34926;i:32247;i:34934;i:20914;i:21482;i:21482;i:34937;i:21482;i:34949;i:23243;i:27616;i:27616;i:34952;i:27616;i:34956;i:34956;i:34957;i:34956;i:34922;i:34922;i:34968;i:34922;i:34974;i:32247;i:24089;i:24089;i:34975;i:24089;i:35018;i:23243;i:35020;i:22841;i:34988;i:34988;i:35029;i:34988;i:24108;i:24108;i:35033;i:24108;i:34917;i:34917;i:35036;i:34917;i:35013;i:35013;i:35037;i:35013;i:35040;i:24108;i:35023;i:35023;i:35041;i:35023;i:34996;i:34996;i:35044;i:34996;i:35060;i:35060;i:35061;i:35060;i:33245;i:33245;i:35064;i:33245;i:21046;i:21046;i:35069;i:21046;i:24122;i:24122;i:35072;i:24122;i:35065;i:35065;i:35073;i:35065;i:35079;i:22797;i:24828;i:24828;i:35082;i:24828;i:35016;i:35016;i:35084;i:35016;i:34966;i:34966;i:35086;i:34966;i:21103;i:21103;i:35092;i:21103;i:34950;i:34950;i:35096;i:34950;i:35102;i:32252;i:35106;i:24576;i:35117;i:23243;i:35121;i:24576;i:35122;i:34996;i:35042;i:35042;i:35123;i:35042;i:32383;i:32383;i:35124;i:32383;i:35125;i:32301;i:35099;i:35099;i:35128;i:35099;i:20149;i:20149;i:35131;i:20149;i:35090;i:35090;i:35139;i:35090;i:35045;i:35045;i:35143;i:35045;i:35145;i:35045;i:34991;i:34991;i:35151;i:34991;i:24177;i:24177;i:35157;i:24177;i:34948;i:34948;i:35158;i:34948;i:35043;i:35043;i:35165;i:35043;i:35014;i:35014;i:35168;i:35014;i:34962;i:34962;i:35170;i:34962;i:35172;i:32383;i:34972;i:34972;i:35178;i:34972;i:35180;i:25670;i:34924;i:34924;i:35183;i:34924;i:34989;i:34989;i:35186;i:34989;i:35188;i:24177;i:35198;i:35198;i:35200;i:35198;i:35206;i:22797;i:35208;i:26680;i:35209;i:32641;i:35210;i:32641;i:35215;i:26909;i:30629;i:30629;i:35221;i:30629;i:25997;i:25997;i:35226;i:25997;i:30522;i:30522;i:35228;i:30522;i:35229;i:20151;i:20146;i:20146;i:35242;i:20146;i:35212;i:35212;i:35251;i:35212;i:35253;i:35253;i:35256;i:35253;i:35258;i:25997;i:35239;i:35239;i:35261;i:35239;i:35264;i:35212;i:35211;i:35211;i:35265;i:35211;i:35266;i:35212;i:35214;i:35214;i:35267;i:35214;i:35268;i:26909;i:35219;i:35219;i:35269;i:35219;i:35222;i:35222;i:35270;i:35222;i:35224;i:35224;i:35271;i:35224;i:35272;i:35239;i:35273;i:25997;i:35244;i:35244;i:35274;i:35244;i:35233;i:35233;i:35275;i:35233;i:35263;i:35263;i:35276;i:35263;i:35237;i:35237;i:35277;i:35237;i:35238;i:35238;i:35278;i:35238;i:35247;i:35247;i:35279;i:35247;i:35250;i:35250;i:35280;i:35250;i:35255;i:35255;i:35281;i:35255;i:35284;i:26020;i:35285;i:31895;i:20235;i:20235;i:35289;i:20235;i:35293;i:25210;i:35299;i:35299;i:35303;i:35299;i:35306;i:35306;i:35314;i:35306;i:35294;i:35294;i:35316;i:35294;i:35311;i:35311;i:35318;i:35311;i:35302;i:35302;i:35320;i:35302;i:29141;i:29141;i:35326;i:29141;i:35328;i:35328;i:35329;i:35328;i:25176;i:25176;i:35351;i:25176;i:35358;i:18102;i:18211;i:18211;i:35362;i:18211;i:23588;i:23588;i:35367;i:23588;i:21701;i:21701;i:35369;i:21701;i:24876;i:24876;i:35380;i:24876;i:35382;i:21621;i:27880;i:27880;i:35387;i:27880;i:35390;i:35390;i:35391;i:35390;i:21607;i:21607;i:35398;i:21607;i:21647;i:21647;i:35424;i:21647;i:23519;i:23519;i:35431;i:23519;i:20376;i:20376;i:35435;i:20376;i:21679;i:21679;i:35451;i:21679;i:35374;i:35374;i:35453;i:35374;i:22840;i:22840;i:35463;i:22840;i:24524;i:24524;i:35467;i:24524;i:24535;i:24535;i:35468;i:24535;i:27448;i:27448;i:35474;i:27448;i:24726;i:24726;i:35478;i:24726;i:35492;i:24734;i:35498;i:35498;i:35500;i:35498;i:35354;i:35354;i:35518;i:35354;i:35376;i:35376;i:35524;i:35376;i:35525;i:24524;i:35441;i:35441;i:35545;i:35441;i:35552;i:21509;i:35532;i:35532;i:35563;i:35532;i:21672;i:21672;i:35566;i:21672;i:35573;i:21891;i:35466;i:35466;i:35588;i:35466;i:21884;i:21884;i:35605;i:21884;i:35553;i:35553;i:35610;i:35553;i:35616;i:35616;i:35617;i:35616;i:21830;i:21830;i:35626;i:21830;i:35419;i:35419;i:35631;i:35419;i:35638;i:24246;i:35644;i:21628;i:35649;i:21719;i:22075;i:22075;i:35654;i:22075;i:24989;i:24989;i:35656;i:24989;i:35388;i:35388;i:35657;i:35388;i:35355;i:35355;i:35660;i:35355;i:35661;i:24212;i:22090;i:22090;i:35662;i:22090;i:22082;i:22082;i:35664;i:22082;i:35665;i:25378;i:25776;i:25776;i:35668;i:25776;i:35624;i:35624;i:35669;i:35624;i:35561;i:35561;i:35676;i:35561;i:22122;i:22122;i:35679;i:22122;i:35690;i:34108;i:35693;i:27584;i:21892;i:21892;i:35697;i:21892;i:25252;i:25252;i:35703;i:25252;i:35705;i:21495;i:35707;i:22052;i:35465;i:35465;i:35709;i:35465;i:35629;i:35629;i:35710;i:35629;i:24935;i:24935;i:35711;i:24935;i:35722;i:21464;i:35423;i:35423;i:35723;i:35423;i:18217;i:18217;i:35724;i:18217;i:20167;i:20167;i:35726;i:20167;i:35718;i:35718;i:35727;i:35718;i:35728;i:20167;i:35659;i:35659;i:35733;i:35659;i:35737;i:25085;i:35715;i:35715;i:35738;i:35715;i:35744;i:35328;i:35336;i:35336;i:35745;i:35336;i:35330;i:35330;i:35746;i:35330;i:35331;i:35331;i:35747;i:35331;i:35469;i:35469;i:35748;i:35469;i:35663;i:35663;i:35749;i:35663;i:35344;i:35344;i:35750;i:35344;i:35340;i:35340;i:35751;i:35340;i:35342;i:35342;i:35752;i:35342;i:35731;i:35731;i:35753;i:35731;i:35349;i:35349;i:35754;i:35349;i:35350;i:35350;i:35755;i:35350;i:35756;i:25176;i:35347;i:35347;i:35757;i:35347;i:35696;i:35696;i:35758;i:35696;i:35338;i:35338;i:35759;i:35338;i:35352;i:35352;i:35760;i:35352;i:35346;i:35346;i:35761;i:35346;i:35611;i:35611;i:35762;i:35611;i:35569;i:35569;i:35763;i:35569;i:35635;i:35635;i:35764;i:35635;i:35406;i:35406;i:35765;i:35406;i:35357;i:35357;i:35766;i:35357;i:35365;i:35365;i:35767;i:35365;i:35377;i:35377;i:35768;i:35377;i:35769;i:35355;i:35542;i:35542;i:35770;i:35542;i:35771;i:21701;i:35359;i:35359;i:35772;i:35359;i:35575;i:35575;i:35773;i:35575;i:35373;i:35373;i:35774;i:35373;i:35370;i:35370;i:35775;i:35370;i:35363;i:35363;i:35776;i:35363;i:35777;i:35388;i:35393;i:35393;i:35778;i:35393;i:35779;i:21621;i:35413;i:35413;i:35780;i:35413;i:35781;i:35419;i:35672;i:35672;i:35782;i:35672;i:35415;i:35415;i:35783;i:35415;i:35408;i:35408;i:35784;i:35408;i:35785;i:24876;i:35386;i:35386;i:35786;i:35386;i:35787;i:21607;i:35589;i:35589;i:35788;i:35589;i:35422;i:35422;i:35789;i:35422;i:35416;i:35416;i:35790;i:35416;i:35412;i:35412;i:35791;i:35412;i:35414;i:35414;i:35792;i:35414;i:35695;i:35695;i:35793;i:35695;i:35410;i:35410;i:35794;i:35410;i:35462;i:35462;i:35795;i:35462;i:35460;i:35460;i:35796;i:35460;i:35430;i:35430;i:35797;i:35430;i:35455;i:35455;i:35798;i:35455;i:35433;i:35433;i:35799;i:35433;i:35440;i:35440;i:35800;i:35440;i:35452;i:35452;i:35801;i:35452;i:35488;i:35488;i:35802;i:35488;i:35461;i:35461;i:35803;i:35461;i:35445;i:35445;i:35804;i:35445;i:35805;i:35441;i:35477;i:35477;i:35806;i:35477;i:35436;i:35436;i:35807;i:35436;i:35438;i:35438;i:35808;i:35438;i:35437;i:35437;i:35809;i:35437;i:35426;i:35426;i:35810;i:35426;i:35427;i:35427;i:35811;i:35427;i:35533;i:35533;i:35812;i:35533;i:35442;i:35442;i:35813;i:35442;i:35443;i:35443;i:35814;i:35443;i:35815;i:20376;i:35554;i:35554;i:35816;i:35554;i:35425;i:35425;i:35817;i:35425;i:35704;i:35704;i:35818;i:35704;i:35489;i:35489;i:35819;i:35489;i:35491;i:35491;i:35820;i:35491;i:35486;i:35486;i:35821;i:35486;i:35482;i:35482;i:35822;i:35482;i:35823;i:24734;i:35493;i:35493;i:35824;i:35493;i:35480;i:35480;i:35825;i:35480;i:35496;i:35496;i:35826;i:35496;i:35473;i:35473;i:35827;i:35473;i:35828;i:35498;i:35494;i:35494;i:35829;i:35494;i:35830;i:27448;i:35531;i:35531;i:35831;i:35531;i:35576;i:35576;i:35832;i:35576;i:35535;i:35535;i:35833;i:35535;i:35582;i:35582;i:35834;i:35582;i:35712;i:35712;i:35835;i:35712;i:35537;i:35537;i:35836;i:35537;i:35513;i:35513;i:35837;i:35513;i:35506;i:35506;i:35838;i:35506;i:35529;i:35529;i:35839;i:35529;i:35547;i:35547;i:35840;i:35547;i:35504;i:35504;i:35841;i:35504;i:35543;i:35543;i:35842;i:35543;i:35519;i:35519;i:35843;i:35519;i:35522;i:35522;i:35844;i:35522;i:35538;i:35538;i:35845;i:35538;i:35846;i:35376;i:35510;i:35510;i:35847;i:35510;i:35527;i:35527;i:35848;i:35527;i:35717;i:35717;i:35849;i:35717;i:35516;i:35516;i:35850;i:35516;i:35584;i:35584;i:35851;i:35584;i:35574;i:35574;i:35852;i:35574;i:35548;i:35548;i:35853;i:35548;i:35594;i:35594;i:35854;i:35594;i:35855;i:35532;i:35559;i:35559;i:35856;i:35559;i:35604;i:35604;i:35857;i:35604;i:35585;i:35585;i:35858;i:35585;i:35586;i:35586;i:35859;i:35586;i:35556;i:35556;i:35860;i:35556;i:35565;i:35565;i:35861;i:35565;i:35580;i:35580;i:35862;i:35580;i:35730;i:35730;i:35863;i:35730;i:35864;i:21672;i:35571;i:35571;i:35865;i:35571;i:35578;i:35578;i:35866;i:35578;i:35558;i:35558;i:35867;i:35558;i:35598;i:35598;i:35868;i:35598;i:35550;i:35550;i:35869;i:35550;i:35549;i:35549;i:35870;i:35549;i:35871;i:35624;i:35740;i:35740;i:35872;i:35740;i:35606;i:35606;i:35873;i:35606;i:35613;i:35613;i:35874;i:35613;i:35875;i:35616;i:35607;i:35607;i:35876;i:35607;i:35877;i:35553;i:35609;i:35609;i:35878;i:35609;i:35600;i:35600;i:35879;i:35600;i:35641;i:35641;i:35880;i:35641;i:35646;i:35646;i:35881;i:35646;i:35627;i:35627;i:35882;i:35627;i:35883;i:35629;i:35628;i:35628;i:35884;i:35628;i:35674;i:35674;i:35885;i:35674;i:35670;i:35670;i:35886;i:35670;i:35673;i:35673;i:35887;i:35673;i:35888;i:35659;i:35889;i:35561;i:35890;i:22090;i:35742;i:35742;i:35891;i:35742;i:35700;i:35700;i:35892;i:35700;i:35691;i:35691;i:35893;i:35691;i:35734;i:35734;i:35894;i:35734;i:31296;i:31296;i:35895;i:31296;i:28330;i:28330;i:35903;i:28330;i:35910;i:26794;i:23682;i:23682;i:35912;i:23682;i:20016;i:20016;i:35914;i:20016;i:30331;i:30331;i:35915;i:30331;i:35918;i:31446;i:35920;i:20016;i:35924;i:33395;i:25339;i:25339;i:35927;i:25339;i:20687;i:20687;i:35937;i:20687;i:35932;i:35932;i:35939;i:35932;i:29482;i:29482;i:35948;i:29482;i:35950;i:35950;i:35958;i:35950;i:29362;i:29362;i:35962;i:29362;i:29410;i:29410;i:35977;i:29410;i:30339;i:30339;i:35980;i:30339;i:29432;i:29432;i:35981;i:29432;i:29483;i:29483;i:35987;i:29483;i:29571;i:29571;i:35996;i:29571;i:36014;i:20108;i:36019;i:20108;i:20080;i:20080;i:36023;i:20080;i:36041;i:21369;i:25117;i:25117;i:36042;i:25117;i:36037;i:36037;i:36044;i:36037;i:23486;i:23486;i:36051;i:23486;i:36052;i:23486;i:20018;i:20018;i:36055;i:20018;i:36059;i:35715;i:29723;i:29723;i:36061;i:29723;i:36067;i:21334;i:36013;i:36013;i:36074;i:36013;i:36076;i:24080;i:36088;i:21097;i:36106;i:35715;i:36078;i:36078;i:36112;i:36078;i:36107;i:36107;i:36119;i:36107;i:28776;i:28776;i:36123;i:28776;i:36115;i:36115;i:36124;i:36115;i:35997;i:35997;i:36125;i:35997;i:35998;i:35998;i:36126;i:35998;i:36000;i:36000;i:36127;i:36000;i:35999;i:35999;i:36128;i:35999;i:36002;i:36002;i:36129;i:36002;i:36001;i:36001;i:36130;i:36001;i:36012;i:36012;i:36131;i:36012;i:36066;i:36066;i:36132;i:36066;i:25943;i:25943;i:36133;i:25943;i:36134;i:24080;i:36008;i:36008;i:36135;i:36008;i:36136;i:36013;i:36009;i:36009;i:36137;i:36009;i:36010;i:36010;i:36138;i:36010;i:36007;i:36007;i:36139;i:36007;i:36022;i:36022;i:36140;i:36022;i:36092;i:36092;i:36141;i:36092;i:36015;i:36015;i:36142;i:36015;i:36011;i:36011;i:36143;i:36011;i:36144;i:20108;i:36068;i:36068;i:36145;i:36068;i:36033;i:36033;i:36146;i:36033;i:36016;i:36016;i:36147;i:36016;i:36028;i:36028;i:36148;i:36028;i:36020;i:36020;i:36149;i:36020;i:36026;i:36026;i:36150;i:36026;i:36024;i:36024;i:36151;i:36024;i:36031;i:36031;i:36152;i:36031;i:36027;i:36027;i:36153;i:36027;i:36032;i:36032;i:36154;i:36032;i:36029;i:36029;i:36155;i:36029;i:36156;i:25117;i:36100;i:36100;i:36157;i:36100;i:36040;i:36040;i:36158;i:36040;i:36036;i:36036;i:36159;i:36036;i:36018;i:36018;i:36160;i:36018;i:36035;i:36035;i:36161;i:36035;i:36034;i:36034;i:36162;i:36034;i:36163;i:36115;i:36039;i:36039;i:36164;i:36039;i:36165;i:36037;i:36166;i:36078;i:36053;i:36053;i:36167;i:36053;i:36049;i:36049;i:36168;i:36049;i:36058;i:36058;i:36169;i:36058;i:36050;i:36050;i:36170;i:36050;i:36070;i:36070;i:36171;i:36070;i:36077;i:36077;i:36172;i:36077;i:36075;i:36075;i:36173;i:36075;i:36118;i:36118;i:36174;i:36118;i:36062;i:36062;i:36175;i:36062;i:36060;i:36060;i:36176;i:36060;i:36116;i:36116;i:36177;i:36116;i:36057;i:36057;i:36178;i:36057;i:36065;i:36065;i:36179;i:36065;i:36064;i:36064;i:36180;i:36064;i:36071;i:36071;i:36181;i:36071;i:36084;i:36084;i:36182;i:36084;i:36085;i:36085;i:36183;i:36085;i:36101;i:36101;i:36184;i:36101;i:36091;i:36091;i:36185;i:36091;i:36090;i:36090;i:36186;i:36090;i:36093;i:36093;i:36187;i:36093;i:36094;i:36094;i:36188;i:36094;i:36189;i:36107;i:36190;i:35715;i:36103;i:36103;i:36191;i:36103;i:36104;i:36104;i:36192;i:36104;i:36109;i:36109;i:36193;i:36109;i:36111;i:36111;i:36194;i:36111;i:36195;i:28776;i:31424;i:31424;i:36202;i:31424;i:36204;i:31424;i:36208;i:36208;i:36209;i:36208;i:36225;i:36225;i:36226;i:36225;i:36223;i:36223;i:36230;i:36223;i:36235;i:36235;i:36237;i:36235;i:36214;i:36214;i:36245;i:36214;i:36213;i:36213;i:36249;i:36213;i:36264;i:36235;i:36273;i:36273;i:36274;i:36273;i:36242;i:36242;i:36339;i:36242;i:36325;i:36325;i:36346;i:36325;i:36348;i:20407;i:30095;i:30095;i:36360;i:30095;i:36341;i:36341;i:36368;i:36341;i:36354;i:36354;i:36377;i:36354;i:34615;i:34615;i:36385;i:34615;i:27541;i:27541;i:36387;i:27541;i:36340;i:36340;i:36393;i:36340;i:36392;i:36392;i:36394;i:36392;i:36395;i:25533;i:36362;i:36362;i:36404;i:36362;i:31160;i:31160;i:36418;i:31160;i:36292;i:36292;i:36428;i:36292;i:36436;i:26242;i:36344;i:36344;i:36437;i:36344;i:36438;i:26729;i:36255;i:36255;i:36442;i:36255;i:36332;i:36332;i:36446;i:36332;i:36321;i:36321;i:36447;i:36321;i:36310;i:36310;i:36448;i:36310;i:36434;i:36434;i:36451;i:36434;i:36452;i:36392;i:31967;i:31967;i:36455;i:31967;i:36463;i:30058;i:36466;i:22699;i:36343;i:36343;i:36474;i:36343;i:36475;i:36343;i:36270;i:36270;i:36481;i:36270;i:36342;i:36342;i:36482;i:36342;i:36280;i:36280;i:36489;i:36280;i:36364;i:36364;i:36490;i:36364;i:36347;i:36347;i:36491;i:36347;i:36291;i:36291;i:36493;i:36291;i:36399;i:36399;i:36497;i:36399;i:36318;i:36318;i:36498;i:36318;i:36396;i:36396;i:36499;i:36396;i:36464;i:36464;i:36501;i:36464;i:36345;i:36345;i:36506;i:36345;i:36503;i:36503;i:36507;i:36503;i:36433;i:36433;i:36513;i:36433;i:36479;i:36479;i:36517;i:36479;i:36508;i:36508;i:36518;i:36508;i:36495;i:36495;i:36522;i:36495;i:32829;i:32829;i:36525;i:32829;i:20307;i:20307;i:36528;i:20307;i:36529;i:36529;i:36530;i:36529;i:36527;i:36527;i:36544;i:36527;i:36550;i:20307;i:20891;i:20891;i:36557;i:20891;i:26521;i:26521;i:36571;i:26521;i:36566;i:36566;i:36576;i:36566;i:27586;i:27586;i:36594;i:27586;i:36598;i:26521;i:25405;i:25405;i:36627;i:25405;i:36605;i:36605;i:36629;i:36605;i:36607;i:36607;i:36647;i:36607;i:33286;i:33286;i:36671;i:33286;i:36668;i:36668;i:36672;i:36668;i:36674;i:27586;i:36687;i:26632;i:36701;i:33286;i:36702;i:27099;i:36554;i:36554;i:36710;i:36554;i:36555;i:36555;i:36711;i:36555;i:36556;i:36556;i:36712;i:36556;i:36562;i:36562;i:36713;i:36562;i:36561;i:36561;i:36714;i:36561;i:36564;i:36564;i:36715;i:36564;i:36681;i:36681;i:36716;i:36681;i:36717;i:26521;i:36650;i:36650;i:36718;i:36650;i:36575;i:36575;i:36719;i:36575;i:36703;i:36703;i:36720;i:36703;i:36721;i:27586;i:36603;i:36603;i:36722;i:36603;i:36708;i:36708;i:36723;i:36708;i:36600;i:36600;i:36724;i:36600;i:36601;i:36601;i:36725;i:36601;i:36604;i:36604;i:36726;i:36604;i:36580;i:36580;i:36727;i:36580;i:36587;i:36587;i:36728;i:36587;i:36706;i:36706;i:36729;i:36706;i:36602;i:36602;i:36730;i:36602;i:36731;i:36605;i:36606;i:36606;i:36732;i:36606;i:36617;i:36617;i:36733;i:36617;i:36618;i:36618;i:36734;i:36618;i:36686;i:36686;i:36735;i:36686;i:36616;i:36616;i:36736;i:36616;i:36615;i:36615;i:36737;i:36615;i:36613;i:36613;i:36738;i:36613;i:36611;i:36611;i:36739;i:36611;i:36626;i:36626;i:36740;i:36626;i:36628;i:36628;i:36741;i:36628;i:36635;i:36635;i:36742;i:36635;i:36646;i:36646;i:36743;i:36646;i:36649;i:36649;i:36744;i:36649;i:36637;i:36637;i:36745;i:36637;i:36645;i:36645;i:36746;i:36645;i:36638;i:36638;i:36747;i:36638;i:36652;i:36652;i:36748;i:36652;i:36639;i:36639;i:36749;i:36639;i:36636;i:36636;i:36750;i:36636;i:36659;i:36659;i:36751;i:36659;i:36667;i:36667;i:36752;i:36667;i:36655;i:36655;i:36753;i:36655;i:36754;i:36668;i:36664;i:36664;i:36755;i:36664;i:36705;i:36705;i:36756;i:36705;i:36677;i:36677;i:36757;i:36677;i:36676;i:36676;i:36758;i:36676;i:36670;i:36670;i:36759;i:36670;i:36678;i:36678;i:36760;i:36678;i:36685;i:36685;i:36761;i:36685;i:36692;i:36692;i:36762;i:36692;i:32618;i:32618;i:36768;i:32618;i:36770;i:36770;i:36771;i:36770;i:21150;i:21150;i:36774;i:21150;i:36775;i:21150;i:36776;i:21150;i:36766;i:36766;i:36781;i:36766;i:36779;i:36779;i:36782;i:36779;i:36777;i:36777;i:36783;i:36777;i:20892;i:20892;i:36786;i:20892;i:36798;i:36798;i:36822;i:36798;i:36831;i:36831;i:36833;i:36831;i:36806;i:36806;i:36836;i:36806;i:24312;i:24312;i:36842;i:24312;i:36844;i:24448;i:36845;i:21472;i:36851;i:24452;i:36852;i:22232;i:36857;i:36321;i:36858;i:20035;i:31227;i:31227;i:36859;i:31227;i:36847;i:36847;i:36867;i:36847;i:36837;i:36837;i:36872;i:36837;i:24891;i:24891;i:36874;i:24891;i:25912;i:25912;i:36876;i:25912;i:36882;i:36882;i:36883;i:36882;i:36885;i:24452;i:36825;i:36825;i:36889;i:36825;i:36830;i:36830;i:36899;i:36830;i:36901;i:22232;i:36905;i:22868;i:36840;i:36840;i:36910;i:36840;i:28216;i:28216;i:36912;i:28216;i:21608;i:21608;i:36913;i:21608;i:36827;i:36827;i:36914;i:36827;i:21166;i:21166;i:36920;i:21166;i:36828;i:36828;i:36922;i:36828;i:36400;i:36400;i:36926;i:36400;i:36933;i:36831;i:36937;i:20390;i:36938;i:28216;i:36816;i:36816;i:36939;i:36816;i:24487;i:24487;i:36941;i:24487;i:36807;i:36807;i:36942;i:36807;i:24488;i:24488;i:36945;i:24488;i:36948;i:36798;i:36829;i:36829;i:36949;i:36829;i:36956;i:24891;i:36958;i:36882;i:36959;i:36831;i:36960;i:36828;i:36961;i:27869;i:36953;i:36953;i:36965;i:36953;i:31456;i:31456;i:36967;i:31456;i:36866;i:36866;i:36969;i:36866;i:36929;i:36929;i:36975;i:36929;i:36978;i:36831;i:30700;i:30700;i:36979;i:30700;i:36982;i:32350;i:36801;i:36801;i:36983;i:36801;i:36873;i:36873;i:36984;i:36873;i:36951;i:36951;i:36986;i:36951;i:36797;i:36797;i:36988;i:36797;i:36767;i:36767;i:36991;i:36767;i:36808;i:36808;i:36993;i:36808;i:36824;i:36824;i:36996;i:36824;i:36841;i:36841;i:36999;i:36841;i:36793;i:36793;i:37001;i:36793;i:37002;i:36793;i:21407;i:21407;i:37005;i:21407;i:36923;i:36923;i:37007;i:36923;i:36902;i:36902;i:37008;i:36902;i:26449;i:26449;i:37032;i:26449;i:27421;i:27421;i:37057;i:27421;i:37026;i:37026;i:37065;i:37026;i:37080;i:21525;i:37070;i:37070;i:37086;i:37070;i:37071;i:37071;i:37087;i:37071;i:28196;i:28196;i:37091;i:28196;i:22670;i:22670;i:37101;i:22670;i:37106;i:33713;i:37038;i:37038;i:37109;i:37038;i:20065;i:20065;i:37111;i:20065;i:37046;i:37046;i:37121;i:37046;i:37123;i:20446;i:37075;i:37075;i:37126;i:37075;i:37129;i:20065;i:37049;i:37049;i:37138;i:37049;i:37036;i:37036;i:37140;i:37036;i:37141;i:20065;i:37095;i:37095;i:37142;i:37095;i:37158;i:35377;i:37011;i:37011;i:37159;i:37011;i:37073;i:37073;i:37165;i:37073;i:37051;i:37051;i:37168;i:37051;i:37112;i:37112;i:37170;i:37112;i:37050;i:37050;i:37172;i:37050;i:37072;i:37072;i:37174;i:37072;i:37104;i:37104;i:37177;i:37104;i:37021;i:37021;i:37178;i:37021;i:37175;i:37175;i:37190;i:37175;i:37186;i:37186;i:37191;i:37186;i:37094;i:37094;i:37192;i:37094;i:20003;i:20003;i:37193;i:20003;i:35446;i:35446;i:37223;i:35446;i:37228;i:35446;i:33100;i:33100;i:37251;i:33100;i:37254;i:29718;i:37204;i:37204;i:37257;i:37204;i:37218;i:37218;i:37259;i:37218;i:37213;i:37213;i:37270;i:37213;i:19985;i:19985;i:37276;i:19985;i:37278;i:37213;i:37281;i:25662;i:37291;i:21307;i:37233;i:37233;i:37292;i:37233;i:37222;i:37222;i:37297;i:37222;i:37307;i:35446;i:23476;i:23476;i:37308;i:23476;i:37247;i:37247;i:37312;i:37247;i:34885;i:34885;i:37313;i:34885;i:37246;i:37246;i:37315;i:37246;i:37245;i:37245;i:37317;i:37245;i:37318;i:21150;i:25505;i:25505;i:37319;i:25505;i:37322;i:37322;i:37323;i:37322;i:37324;i:35023;i:32223;i:32223;i:37325;i:32223;i:22492;i:22492;i:37326;i:22492;i:21400;i:21400;i:37328;i:21400;i:37329;i:37329;i:37330;i:37329;i:25187;i:25187;i:37350;i:25187;i:28938;i:28938;i:37356;i:28938;i:18810;i:18810;i:37374;i:18810;i:34724;i:34724;i:37409;i:34724;i:24040;i:24040;i:37445;i:24040;i:21644;i:21644;i:37452;i:21644;i:37463;i:25297;i:37382;i:37382;i:37467;i:37382;i:32573;i:32573;i:37474;i:32573;i:37390;i:37390;i:37476;i:37390;i:37532;i:21859;i:37554;i:28938;i:32801;i:32801;i:37604;i:32801;i:33302;i:33302;i:37610;i:33302;i:37555;i:37555;i:37613;i:37555;i:30871;i:30871;i:37626;i:30871;i:37636;i:24404;i:37549;i:37549;i:37666;i:37549;i:37682;i:24404;i:34920;i:34920;i:37686;i:34920;i:25466;i:25466;i:37692;i:25466;i:37572;i:37572;i:37693;i:37572;i:37706;i:28860;i:28997;i:28997;i:37723;i:28997;i:33279;i:33279;i:37732;i:33279;i:37758;i:34724;i:21126;i:21126;i:37772;i:21126;i:29076;i:29076;i:37780;i:29076;i:30687;i:30687;i:37785;i:30687;i:37656;i:37656;i:37786;i:37656;i:34021;i:34021;i:37795;i:34021;i:37805;i:37805;i:37806;i:37805;i:36089;i:36089;i:37808;i:36089;i:37782;i:37782;i:37825;i:37782;i:37787;i:37787;i:37828;i:37787;i:26059;i:26059;i:37831;i:26059;i:37838;i:27605;i:37726;i:37726;i:37847;i:37726;i:37855;i:21036;i:37694;i:37694;i:37864;i:37694;i:32581;i:32581;i:37868;i:32581;i:37643;i:37643;i:37872;i:37643;i:18813;i:18813;i:37882;i:18813;i:37561;i:37561;i:37885;i:37561;i:37888;i:21294;i:37446;i:37446;i:37897;i:37446;i:37722;i:37722;i:37898;i:37722;i:37733;i:37733;i:37905;i:37733;i:37912;i:34724;i:18821;i:18821;i:37925;i:18821;i:37824;i:37824;i:37930;i:37824;i:37816;i:37816;i:37931;i:37816;i:37934;i:21126;i:18819;i:18819;i:37935;i:18819;i:37937;i:21073;i:37525;i:37525;i:37941;i:37525;i:37745;i:37745;i:37943;i:37745;i:37619;i:37619;i:37956;i:37619;i:37492;i:37492;i:37969;i:37492;i:37970;i:37492;i:37979;i:30719;i:21032;i:21032;i:37988;i:21032;i:37992;i:30779;i:37994;i:28809;i:37998;i:37787;i:23574;i:23574;i:37999;i:23574;i:37381;i:37381;i:38000;i:37381;i:37749;i:37749;i:38003;i:37749;i:32592;i:32592;i:38005;i:32592;i:38013;i:37446;i:37550;i:37550;i:38014;i:37550;i:20991;i:20991;i:38015;i:20991;i:18822;i:18822;i:38017;i:18822;i:37810;i:37810;i:38018;i:37810;i:38021;i:37329;i:37331;i:37331;i:38022;i:37331;i:37332;i:37332;i:38023;i:37332;i:37341;i:37341;i:38024;i:37341;i:37336;i:37336;i:38025;i:37336;i:37335;i:37335;i:38026;i:37335;i:37337;i:37337;i:38027;i:37337;i:37333;i:37333;i:38028;i:37333;i:37367;i:37367;i:38029;i:37367;i:37370;i:37370;i:38030;i:37370;i:37351;i:37351;i:38031;i:37351;i:37348;i:37348;i:38032;i:37348;i:37394;i:37394;i:38033;i:37394;i:37353;i:37353;i:38034;i:37353;i:37347;i:37347;i:38035;i:37347;i:37702;i:37702;i:38036;i:37702;i:37369;i:37369;i:38037;i:37369;i:38038;i:37722;i:37365;i:37365;i:38039;i:37365;i:37379;i:37379;i:38040;i:37379;i:37411;i:37411;i:38041;i:37411;i:37384;i:37384;i:38042;i:37384;i:37414;i:37414;i:38043;i:37414;i:38044;i:24040;i:37389;i:37389;i:38045;i:37389;i:37396;i:37396;i:38046;i:37396;i:38047;i:34724;i:37385;i:37385;i:38048;i:37385;i:37575;i:37575;i:38049;i:37575;i:37628;i:37628;i:38050;i:37628;i:37393;i:37393;i:38051;i:37393;i:37392;i:37392;i:38052;i:37392;i:38053;i:37381;i:27453;i:27453;i:38054;i:27453;i:37406;i:37406;i:38055;i:37406;i:37794;i:37794;i:38056;i:37794;i:38057;i:37390;i:37415;i:37415;i:38058;i:37415;i:37377;i:37377;i:38059;i:37377;i:37413;i:37413;i:38060;i:37413;i:37380;i:37380;i:38061;i:37380;i:37397;i:37397;i:38062;i:37397;i:37376;i:37376;i:38063;i:37376;i:37434;i:37434;i:38064;i:37434;i:38065;i:37549;i:37478;i:37478;i:38066;i:37478;i:38067;i:25297;i:37431;i:37431;i:38068;i:37431;i:38069;i:32573;i:37427;i:37427;i:38070;i:37427;i:37461;i:37461;i:38071;i:37461;i:37437;i:37437;i:38072;i:37437;i:37432;i:37432;i:38073;i:37432;i:37470;i:37470;i:38074;i:37470;i:38075;i:37446;i:37484;i:37484;i:38076;i:37484;i:37485;i:37485;i:38077;i:37485;i:37440;i:37440;i:38078;i:37440;i:37439;i:37439;i:38079;i:37439;i:37438;i:37438;i:38080;i:37438;i:38081;i:37525;i:37457;i:37457;i:38082;i:37457;i:37428;i:37428;i:38083;i:37428;i:37984;i:37984;i:38084;i:37984;i:38085;i:37382;i:37466;i:37466;i:38086;i:37466;i:37451;i:37451;i:38087;i:37451;i:37424;i:37424;i:38088;i:37424;i:37449;i:37449;i:38089;i:37449;i:37448;i:37448;i:38090;i:37448;i:37453;i:37453;i:38091;i:37453;i:37422;i:37422;i:38092;i:37422;i:37433;i:37433;i:38093;i:37433;i:37944;i:37944;i:38094;i:37944;i:37494;i:37494;i:38095;i:37494;i:37548;i:37548;i:38096;i:37548;i:37536;i:37536;i:38097;i:37536;i:37498;i:37498;i:38098;i:37498;i:37609;i:37609;i:38099;i:37609;i:37647;i:37647;i:38100;i:37647;i:37546;i:37546;i:38101;i:37546;i:37614;i:37614;i:38102;i:37614;i:37583;i:37583;i:38103;i:37583;i:37603;i:37603;i:38104;i:37603;i:37891;i:37891;i:38105;i:37891;i:37517;i:37517;i:38106;i:37517;i:37946;i:37946;i:38107;i:37946;i:37509;i:37509;i:38108;i:37509;i:37569;i:37569;i:38109;i:37569;i:37553;i:37553;i:38110;i:37553;i:37542;i:37542;i:38111;i:37542;i:37799;i:37799;i:38112;i:37799;i:37720;i:37720;i:38113;i:37720;i:37526;i:37526;i:38114;i:37526;i:37521;i:37521;i:38115;i:37521;i:37580;i:37580;i:38116;i:37580;i:37545;i:37545;i:38117;i:37545;i:37531;i:37531;i:38118;i:37531;i:37877;i:37877;i:38119;i:37877;i:37523;i:37523;i:38120;i:37523;i:37801;i:37801;i:38121;i:37801;i:37503;i:37503;i:38122;i:37503;i:37530;i:37530;i:38123;i:37530;i:37499;i:37499;i:38124;i:37499;i:37528;i:37528;i:38125;i:37528;i:37658;i:37658;i:38126;i:37658;i:37547;i:37547;i:38127;i:37547;i:37496;i:37496;i:38128;i:37496;i:37541;i:37541;i:38129;i:37541;i:38130;i:21036;i:37507;i:37507;i:38131;i:37507;i:37899;i:37899;i:38132;i:37899;i:37544;i:37544;i:38133;i:37544;i:37504;i:37504;i:38134;i:37504;i:37539;i:37539;i:38135;i:37539;i:38136;i:37619;i:37906;i:37906;i:38137;i:37906;i:38138;i:33302;i:37593;i:37593;i:38139;i:37593;i:37688;i:37688;i:38140;i:37688;i:37617;i:37617;i:38141;i:37617;i:37832;i:37832;i:38142;i:37832;i:38143;i:37726;i:37559;i:37559;i:38144;i:37559;i:38145;i:37782;i:37616;i:37616;i:38146;i:37616;i:37605;i:37605;i:38147;i:37605;i:38148;i:32801;i:37707;i:37707;i:38149;i:37707;i:37615;i:37615;i:38150;i:37615;i:37608;i:37608;i:38151;i:37608;i:38152;i:37561;i:37564;i:37564;i:38153;i:37564;i:37597;i:37597;i:38154;i:37597;i:37586;i:37586;i:38155;i:37586;i:37573;i:37573;i:38156;i:37573;i:37622;i:37622;i:38157;i:37622;i:37926;i:37926;i:38158;i:37926;i:37927;i:37927;i:38159;i:37927;i:38160;i:37555;i:37563;i:37563;i:38161;i:37563;i:37571;i:37571;i:38162;i:37571;i:37599;i:37599;i:38163;i:37599;i:37606;i:37606;i:38164;i:37606;i:37650;i:37650;i:38165;i:37650;i:37638;i:37638;i:38166;i:37638;i:37754;i:37754;i:38167;i:37754;i:37737;i:37737;i:38168;i:37737;i:37679;i:37679;i:38169;i:37679;i:37672;i:37672;i:38170;i:37672;i:37659;i:37659;i:38171;i:37659;i:37665;i:37665;i:38172;i:37665;i:37696;i:37696;i:38173;i:37696;i:37633;i:37633;i:38174;i:37633;i:37653;i:37653;i:38175;i:37653;i:37673;i:37673;i:38176;i:37673;i:37675;i:37675;i:38177;i:37675;i:37678;i:37678;i:38178;i:37678;i:38012;i:38012;i:38179;i:38012;i:38180;i:37656;i:37648;i:37648;i:38181;i:37648;i:37670;i:37670;i:38182;i:37670;i:37973;i:37973;i:38183;i:37973;i:37697;i:37697;i:38184;i:37697;i:37640;i:37640;i:38185;i:37640;i:37699;i:37699;i:38186;i:37699;i:37639;i:37639;i:38187;i:37639;i:37663;i:37663;i:38188;i:37663;i:37664;i:37664;i:38189;i:37664;i:38190;i:37749;i:37624;i:37624;i:38191;i:37624;i:37683;i:37683;i:38192;i:37683;i:37657;i:37657;i:38193;i:37657;i:38194;i:37733;i:37704;i:37704;i:38195;i:37704;i:37703;i:37703;i:38196;i:37703;i:37848;i:37848;i:38197;i:37848;i:37750;i:37750;i:38198;i:37750;i:37716;i:37716;i:38199;i:37716;i:38200;i:33279;i:37740;i:37740;i:38201;i:37740;i:38202;i:34724;i:38203;i:28997;i:37802;i:37802;i:38204;i:37802;i:37728;i:37728;i:38205;i:37728;i:37744;i:37744;i:38206;i:37744;i:37764;i:37764;i:38207;i:37764;i:37709;i:37709;i:38208;i:37709;i:37762;i:37762;i:38209;i:37762;i:37860;i:37860;i:38210;i:37860;i:37793;i:37793;i:38211;i:37793;i:37928;i:37928;i:38212;i:37928;i:37767;i:37767;i:38213;i:37767;i:37836;i:37836;i:38214;i:37836;i:38215;i:37805;i:38216;i:37787;i:37784;i:37784;i:38217;i:37784;i:38007;i:38007;i:38218;i:38007;i:38219;i:37810;i:38220;i:37816;i:37811;i:37811;i:38221;i:37811;i:37823;i:37823;i:38222;i:37823;i:37798;i:37798;i:38223;i:37798;i:37804;i:37804;i:38224;i:37804;i:37770;i:37770;i:38225;i:37770;i:38226;i:36089;i:37813;i:37813;i:38227;i:37813;i:37964;i:37964;i:38228;i:37964;i:38229;i:29076;i:37858;i:37858;i:38230;i:37858;i:37852;i:37852;i:38231;i:37852;i:37853;i:37853;i:38232;i:37853;i:37837;i:37837;i:38233;i:37837;i:38234;i:37643;i:37854;i:37854;i:38235;i:37854;i:37857;i:37857;i:38236;i:37857;i:37841;i:37841;i:38237;i:37841;i:37827;i:37827;i:38238;i:37827;i:38239;i:26059;i:37840;i:37840;i:38240;i:37840;i:37908;i:37908;i:38241;i:37908;i:37917;i:37917;i:38242;i:37917;i:37904;i:37904;i:38243;i:37904;i:37879;i:37879;i:38244;i:37879;i:37989;i:37989;i:38245;i:37989;i:37907;i:37907;i:38246;i:37907;i:37997;i:37997;i:38247;i:37997;i:37920;i:37920;i:38248;i:37920;i:38009;i:38009;i:38249;i:38009;i:37881;i:37881;i:38250;i:37881;i:37913;i:37913;i:38251;i:37913;i:37962;i:37962;i:38252;i:37962;i:37939;i:37939;i:38253;i:37939;i:37942;i:37942;i:38254;i:37942;i:37938;i:37938;i:38255;i:37938;i:38256;i:21126;i:37951;i:37951;i:38257;i:37951;i:37972;i:37972;i:38258;i:37972;i:37987;i:37987;i:38259;i:37987;i:37982;i:37982;i:38260;i:37982;i:38001;i:38001;i:38261;i:38001;i:38002;i:38002;i:38262;i:38002;i:38263;i:38263;i:38271;i:38263;i:38279;i:38279;i:38281;i:38279;i:24320;i:24320;i:38283;i:24320;i:20851;i:20851;i:38302;i:20851;i:38306;i:20851;i:38308;i:21512;i:21700;i:21700;i:38311;i:21700;i:38321;i:38321;i:38322;i:38321;i:38327;i:26432;i:38278;i:38278;i:38331;i:38278;i:26495;i:26495;i:38342;i:26495;i:38343;i:26235;i:28662;i:28662;i:38346;i:28662;i:38359;i:20851;i:26007;i:26007;i:38360;i:26007;i:38362;i:31397;i:38364;i:20851;i:28763;i:28763;i:38369;i:28763;i:38370;i:36767;i:38272;i:38272;i:38376;i:38272;i:38274;i:38274;i:38377;i:38274;i:38275;i:38275;i:38378;i:38275;i:38379;i:38278;i:38280;i:38280;i:38380;i:38280;i:38381;i:38279;i:21839;i:21839;i:38382;i:21839;i:38358;i:38358;i:38383;i:38358;i:38287;i:38287;i:38384;i:38287;i:38344;i:38344;i:38385;i:38344;i:38289;i:38289;i:38386;i:38289;i:38286;i:38286;i:38387;i:38286;i:38291;i:38291;i:38388;i:38291;i:38292;i:38292;i:38389;i:38292;i:38284;i:38284;i:38390;i:38284;i:24758;i:24758;i:38391;i:24758;i:38296;i:38296;i:38392;i:38296;i:38297;i:38297;i:38393;i:38297;i:38312;i:38312;i:38394;i:38312;i:32862;i:32862;i:38395;i:32862;i:38373;i:38373;i:38396;i:38373;i:38313;i:38313;i:38397;i:38313;i:38317;i:38317;i:38398;i:38317;i:38355;i:38355;i:38399;i:38355;i:38309;i:38309;i:38400;i:38309;i:38307;i:38307;i:38401;i:38307;i:38305;i:38305;i:38402;i:38305;i:38315;i:38315;i:38403;i:38315;i:38405;i:38321;i:38316;i:38316;i:38406;i:38316;i:38349;i:38349;i:38407;i:38349;i:38334;i:38334;i:38408;i:38334;i:38329;i:38329;i:38409;i:38329;i:38326;i:38326;i:38410;i:38326;i:38335;i:38335;i:38412;i:38335;i:38333;i:38333;i:38413;i:38333;i:38414;i:38278;i:38332;i:38332;i:38415;i:38332;i:38416;i:28763;i:38348;i:38348;i:38417;i:38348;i:38339;i:38339;i:38418;i:38339;i:38368;i:38368;i:38419;i:38368;i:38420;i:28662;i:38347;i:38347;i:38421;i:38347;i:38356;i:38356;i:38422;i:38356;i:38352;i:38352;i:38423;i:38352;i:38354;i:38354;i:38424;i:38354;i:38357;i:38357;i:38425;i:38357;i:38366;i:38366;i:38426;i:38366;i:38372;i:38372;i:38427;i:38372;i:23754;i:23754;i:38428;i:23754;i:38429;i:23754;i:23673;i:23673;i:38435;i:23673;i:21380;i:21380;i:38440;i:21380;i:22338;i:22338;i:38442;i:22338;i:22353;i:22353;i:38444;i:22353;i:22336;i:22336;i:38447;i:22336;i:31357;i:31357;i:38449;i:31357;i:26140;i:26140;i:38451;i:26140;i:22566;i:22566;i:38454;i:22566;i:22399;i:22399;i:38468;i:22399;i:22388;i:22388;i:38470;i:22388;i:25974;i:25974;i:38472;i:25974;i:22419;i:22419;i:38484;i:22419;i:38473;i:38473;i:38488;i:38473;i:38485;i:38485;i:38492;i:38485;i:38493;i:38485;i:38494;i:21319;i:38453;i:38453;i:38499;i:38453;i:38505;i:30839;i:38452;i:38452;i:38512;i:38452;i:38515;i:25974;i:29708;i:29708;i:38517;i:29708;i:21259;i:21259;i:38518;i:21259;i:38520;i:22388;i:38525;i:26140;i:22564;i:22564;i:38532;i:22564;i:38503;i:38503;i:38537;i:38503;i:38431;i:38431;i:38538;i:38431;i:38542;i:22566;i:38504;i:38504;i:38549;i:38504;i:37060;i:37060;i:38553;i:37060;i:38469;i:38469;i:38555;i:38469;i:22663;i:22663;i:38556;i:22663;i:25942;i:25942;i:38558;i:25942;i:38544;i:38544;i:38560;i:38544;i:38563;i:37051;i:38543;i:38543;i:38568;i:38543;i:38570;i:30839;i:38577;i:38544;i:38547;i:38547;i:38579;i:38547;i:38471;i:38471;i:38580;i:38471;i:38582;i:38582;i:38583;i:38582;i:38584;i:38582;i:38587;i:21482;i:24331;i:24331;i:38591;i:24331;i:20721;i:20721;i:38599;i:20721;i:38589;i:38589;i:38603;i:38589;i:26434;i:26434;i:38609;i:26434;i:38613;i:24427;i:34429;i:34429;i:38614;i:34429;i:21452;i:21452;i:38617;i:21452;i:38607;i:38607;i:38619;i:38607;i:38620;i:26434;i:38605;i:38605;i:38621;i:38605;i:38624;i:20167;i:31163;i:31163;i:38626;i:31163;i:38590;i:38590;i:38627;i:38590;i:38629;i:26434;i:27675;i:27675;i:38640;i:27675;i:20113;i:20113;i:38642;i:20113;i:30005;i:30005;i:38651;i:30005;i:35499;i:35499;i:38663;i:35499;i:28789;i:28789;i:38666;i:28789;i:30312;i:30312;i:38669;i:30312;i:27838;i:27838;i:38673;i:27838;i:38674;i:38452;i:38675;i:34538;i:36206;i:36206;i:38686;i:36206;i:38688;i:38452;i:38654;i:38654;i:38695;i:38654;i:24275;i:24275;i:38697;i:24275;i:35207;i:35207;i:38712;i:35207;i:28326;i:28326;i:38714;i:28326;i:38657;i:38657;i:38717;i:38657;i:38643;i:38643;i:38722;i:38643;i:38701;i:38701;i:38724;i:38701;i:21447;i:21447;i:38726;i:21447;i:38728;i:28789;i:21446;i:21446;i:38729;i:21446;i:38737;i:38737;i:38738;i:38737;i:38739;i:38739;i:38746;i:38739;i:38745;i:38745;i:38748;i:38745;i:38740;i:38740;i:38749;i:38740;i:38757;i:38757;i:38760;i:38757;i:32917;i:32917;i:38765;i:32917;i:38779;i:38779;i:38780;i:38779;i:38786;i:31224;i:38796;i:38796;i:38797;i:38796;i:24041;i:24041;i:38799;i:24041;i:38802;i:26725;i:38513;i:38513;i:38816;i:38513;i:38820;i:24110;i:38822;i:31179;i:38845;i:26725;i:38849;i:32366;i:38801;i:38801;i:38851;i:38801;i:38854;i:20191;i:38856;i:34972;i:38831;i:38831;i:38857;i:38831;i:38860;i:32917;i:38884;i:34972;i:38883;i:38883;i:38885;i:38883;i:38859;i:38859;i:38886;i:38859;i:38887;i:32917;i:38861;i:38861;i:38888;i:38861;i:38867;i:38867;i:38889;i:38867;i:38873;i:38873;i:38890;i:38873;i:38878;i:38878;i:38891;i:38878;i:38876;i:38876;i:38892;i:38876;i:38893;i:38893;i:38894;i:38893;i:34368;i:34368;i:38898;i:34368;i:38901;i:38901;i:38907;i:38901;i:21709;i:21709;i:38911;i:21709;i:38930;i:26380;i:38921;i:38921;i:38948;i:38921;i:38955;i:20443;i:22836;i:22836;i:38957;i:22836;i:31310;i:31310;i:38964;i:31310;i:38938;i:38938;i:38968;i:38938;i:31336;i:31336;i:38969;i:31336;i:38972;i:36084;i:38973;i:31336;i:38986;i:38921;i:38992;i:35554;i:38991;i:38991;i:38996;i:38991;i:26174;i:26174;i:38997;i:26174;i:24895;i:24895;i:39000;i:24895;i:20622;i:20622;i:39002;i:20622;i:39003;i:20622;i:31867;i:31867;i:39006;i:31867;i:36441;i:36441;i:39011;i:36441;i:38923;i:38923;i:39015;i:38923;i:39023;i:26174;i:38913;i:38913;i:39029;i:38913;i:38914;i:38914;i:39030;i:38914;i:38915;i:38915;i:39031;i:38915;i:38919;i:38919;i:39032;i:38919;i:38917;i:38917;i:39033;i:38917;i:38918;i:38918;i:39034;i:38918;i:38920;i:38920;i:39035;i:38920;i:38922;i:38922;i:39036;i:38922;i:38929;i:38929;i:39037;i:38929;i:39038;i:38923;i:38931;i:38931;i:39039;i:38931;i:38926;i:38926;i:39040;i:38926;i:39041;i:26380;i:38924;i:38924;i:39042;i:38924;i:38927;i:38927;i:39043;i:38927;i:38928;i:38928;i:39044;i:38928;i:39025;i:39025;i:39045;i:39025;i:38936;i:38936;i:39046;i:38936;i:38935;i:38935;i:39047;i:38935;i:39048;i:38938;i:38945;i:38945;i:39049;i:38945;i:38960;i:38960;i:39050;i:38960;i:38962;i:38962;i:39051;i:38962;i:38940;i:38940;i:39052;i:38940;i:28481;i:28481;i:39053;i:28481;i:29106;i:29106;i:39054;i:29106;i:38950;i:38950;i:39055;i:38950;i:39056;i:38921;i:38971;i:38971;i:39057;i:38971;i:38958;i:38958;i:39058;i:38958;i:39059;i:31336;i:38967;i:38967;i:39060;i:38967;i:39061;i:31310;i:39062;i:31310;i:38982;i:38982;i:39063;i:38982;i:38988;i:38988;i:39064;i:38988;i:38994;i:38994;i:39065;i:38994;i:38990;i:38990;i:39066;i:38990;i:38995;i:38995;i:39067;i:38995;i:39068;i:38991;i:38989;i:38989;i:39069;i:38989;i:39027;i:39027;i:39070;i:39027;i:39010;i:39010;i:39071;i:39010;i:39072;i:20622;i:39001;i:39001;i:39073;i:39001;i:39013;i:39013;i:39074;i:39013;i:32391;i:32391;i:39075;i:32391;i:39019;i:39019;i:39076;i:39019;i:39020;i:39020;i:39077;i:39020;i:39024;i:39024;i:39078;i:39024;i:39028;i:39028;i:39079;i:39028;i:20968;i:20968;i:39080;i:20968;i:39089;i:21488;i:39091;i:21038;i:39098;i:25196;i:26074;i:26074;i:39107;i:26074;i:39108;i:26074;i:39110;i:39110;i:39112;i:39110;i:39116;i:20968;i:39118;i:20968;i:39119;i:25196;i:39085;i:39085;i:39120;i:39085;i:39086;i:39086;i:39121;i:39086;i:39087;i:39087;i:39122;i:39087;i:39094;i:39094;i:39123;i:39094;i:39096;i:39096;i:39124;i:39096;i:39100;i:39100;i:39125;i:39100;i:39099;i:39099;i:39126;i:39099;i:39104;i:39104;i:39127;i:39104;i:39128;i:26074;i:39129;i:39110;i:39130;i:39110;i:39132;i:32345;i:39131;i:39131;i:39134;i:39131;i:39135;i:39135;i:39136;i:39135;i:39151;i:39151;i:39152;i:39151;i:39161;i:39161;i:39165;i:39161;i:39146;i:39146;i:39169;i:39146;i:31949;i:31949;i:39176;i:31949;i:20859;i:20859;i:39178;i:20859;i:21936;i:21936;i:39184;i:21936;i:20313;i:20313;i:39192;i:20313;i:32948;i:32948;i:39194;i:32948;i:39166;i:39166;i:39197;i:39166;i:39173;i:39173;i:39200;i:39173;i:33304;i:33304;i:39208;i:33304;i:31946;i:31946;i:39212;i:31946;i:31943;i:31943;i:39217;i:31943;i:21890;i:21890;i:39221;i:21890;i:31958;i:31958;i:39225;i:31958;i:39147;i:39147;i:39239;i:39147;i:31972;i:31972;i:39242;i:31972;i:39229;i:39229;i:39243;i:39229;i:39138;i:39138;i:39249;i:39138;i:39144;i:39144;i:39255;i:39144;i:39181;i:39181;i:39260;i:39181;i:39177;i:39177;i:39263;i:39177;i:39267;i:39135;i:39139;i:39139;i:39268;i:39139;i:39269;i:39138;i:39141;i:39141;i:39270;i:39141;i:39219;i:39219;i:39271;i:39219;i:39145;i:39145;i:39272;i:39145;i:39228;i:39228;i:39273;i:39228;i:39274;i:39146;i:39275;i:39147;i:39149;i:39149;i:39276;i:39149;i:39277;i:39151;i:39154;i:39154;i:39278;i:39154;i:39198;i:39198;i:39279;i:39198;i:39280;i:39166;i:39281;i:39161;i:39164;i:39164;i:39282;i:39164;i:39167;i:39167;i:39283;i:39167;i:39156;i:39156;i:39284;i:39156;i:39180;i:39180;i:39285;i:39180;i:39250;i:39250;i:39286;i:39250;i:39287;i:39177;i:39172;i:39172;i:39288;i:39172;i:39182;i:39182;i:39289;i:39182;i:39171;i:39171;i:39290;i:39171;i:39183;i:39183;i:39291;i:39183;i:39292;i:39173;i:39185;i:39185;i:39293;i:39185;i:39190;i:39190;i:39294;i:39190;i:39187;i:39187;i:39295;i:39187;i:39296;i:20313;i:39186;i:39186;i:39297;i:39186;i:39189;i:39189;i:39298;i:39189;i:39196;i:39196;i:39299;i:39196;i:39195;i:39195;i:39300;i:39195;i:39201;i:39201;i:39301;i:39201;i:39302;i:33304;i:39223;i:39223;i:39303;i:39223;i:39304;i:39229;i:39222;i:39222;i:39305;i:39222;i:39231;i:39231;i:39306;i:39231;i:39262;i:39262;i:39307;i:39262;i:39233;i:39233;i:39308;i:39233;i:39235;i:39235;i:39309;i:39235;i:39226;i:39226;i:39310;i:39226;i:39230;i:39230;i:39311;i:39230;i:39240;i:39240;i:39312;i:39240;i:39241;i:39241;i:39313;i:39241;i:39237;i:39237;i:39314;i:39237;i:39315;i:31972;i:39244;i:39244;i:39316;i:39244;i:39266;i:39266;i:39317;i:39266;i:32861;i:32861;i:39320;i:32861;i:39336;i:39336;i:39339;i:39336;i:20911;i:20911;i:39342;i:20911;i:39357;i:32119;i:39345;i:39345;i:39364;i:39345;i:25978;i:25978;i:39366;i:25978;i:39368;i:25978;i:39389;i:39389;i:39390;i:39389;i:39393;i:20620;i:39361;i:39361;i:39406;i:39361;i:39405;i:39405;i:39412;i:39405;i:39427;i:21574;i:39394;i:39394;i:39432;i:39394;i:39436;i:39436;i:39459;i:39436;i:39466;i:25436;i:33150;i:33150;i:39472;i:33150;i:39474;i:33400;i:39439;i:39439;i:39481;i:39439;i:34022;i:34022;i:39488;i:34022;i:39493;i:25978;i:39494;i:36344;i:39482;i:39482;i:39495;i:39482;i:24973;i:24973;i:39509;i:24973;i:24778;i:24778;i:39514;i:24778;i:39529;i:25085;i:39340;i:39340;i:39532;i:39340;i:39341;i:39341;i:39533;i:39341;i:39534;i:39345;i:39348;i:39348;i:39535;i:39348;i:39347;i:39347;i:39536;i:39347;i:39537;i:25978;i:39353;i:39353;i:39538;i:39353;i:39539;i:39361;i:39522;i:39522;i:39540;i:39522;i:39380;i:39380;i:39541;i:39380;i:39387;i:39387;i:39542;i:39387;i:39391;i:39391;i:39543;i:39391;i:39385;i:39385;i:39544;i:39385;i:39378;i:39378;i:39545;i:39378;i:39478;i:39478;i:39546;i:39478;i:39376;i:39376;i:39547;i:39376;i:39548;i:39389;i:39377;i:39377;i:39549;i:39377;i:39381;i:39381;i:39550;i:39381;i:39515;i:39515;i:39551;i:39515;i:39384;i:39384;i:39552;i:39384;i:39501;i:39501;i:39553;i:39501;i:39554;i:20620;i:39408;i:39408;i:39555;i:39408;i:39556;i:24973;i:39498;i:39498;i:39557;i:39498;i:39409;i:39409;i:39558;i:39409;i:39559;i:39405;i:39560;i:39394;i:39531;i:39531;i:39561;i:39531;i:39530;i:39530;i:39562;i:39530;i:39425;i:39425;i:39563;i:39425;i:39511;i:39511;i:39564;i:39511;i:39426;i:39426;i:39565;i:39426;i:39416;i:39416;i:39566;i:39416;i:39423;i:39423;i:39567;i:39423;i:39568;i:39439;i:39438;i:39438;i:39569;i:39438;i:39437;i:39437;i:39570;i:39437;i:39429;i:39429;i:39571;i:39429;i:39572;i:39436;i:39500;i:39500;i:39573;i:39500;i:39490;i:39490;i:39574;i:39490;i:39449;i:39449;i:39575;i:39449;i:39469;i:39469;i:39576;i:39469;i:39460;i:39460;i:39577;i:39460;i:39479;i:39479;i:39578;i:39479;i:39446;i:39446;i:39579;i:39446;i:39489;i:39489;i:39580;i:39489;i:39470;i:39470;i:39581;i:39470;i:39467;i:39467;i:39582;i:39467;i:39480;i:39480;i:39583;i:39480;i:39491;i:39491;i:39584;i:39491;i:39486;i:39486;i:39585;i:39486;i:39492;i:39492;i:39586;i:39492;i:39503;i:39503;i:39587;i:39503;i:39519;i:39519;i:39588;i:39519;i:39525;i:39525;i:39589;i:39525;i:39526;i:39526;i:39590;i:39526;i:39524;i:39524;i:39591;i:39524;i:39594;i:39594;i:39595;i:39594;i:32942;i:32942;i:39599;i:32942;i:39605;i:20307;i:36365;i:36365;i:39609;i:36365;i:33007;i:33007;i:39611;i:33007;i:33208;i:33208;i:39620;i:33208;i:39604;i:39604;i:39626;i:39604;i:39628;i:33169;i:39621;i:39621;i:39631;i:39621;i:39634;i:33039;i:39635;i:33208;i:39636;i:20307;i:39637;i:33169;i:39627;i:39627;i:39638;i:39627;i:39640;i:39640;i:39641;i:39640;i:39651;i:20223;i:39654;i:27650;i:39658;i:21457;i:39662;i:21457;i:39653;i:39653;i:39663;i:39653;i:39668;i:20175;i:30178;i:30178;i:39681;i:30178;i:39683;i:39436;i:39686;i:26494;i:39693;i:32993;i:30220;i:30220;i:39694;i:30220;i:39706;i:38920;i:39674;i:39674;i:39712;i:39674;i:39699;i:39699;i:39714;i:39699;i:39717;i:26007;i:39718;i:26007;i:39719;i:38297;i:39720;i:21700;i:38411;i:38411;i:39721;i:38411;i:39722;i:26007;i:39723;i:38366;i:39724;i:26007;i:39725;i:26007;i:38404;i:38404;i:39726;i:38404;i:39728;i:27421;i:39729;i:27421;i:39734;i:39734;i:39737;i:39734;i:31909;i:31909;i:39739;i:31909;i:27334;i:27334;i:39745;i:27334;i:34606;i:34606;i:39754;i:34606;i:39753;i:39753;i:39758;i:39753;i:39751;i:39751;i:39768;i:39751;i:39777;i:37347;i:34486;i:34486;i:39805;i:34486;i:19615;i:19615;i:39843;i:19615;i:35295;i:35295;i:39853;i:35295;i:39854;i:23583;i:39614;i:39614;i:39873;i:39614;i:39782;i:39782;i:39882;i:39782;i:39883;i:39782;i:39837;i:39837;i:39895;i:39837;i:19616;i:19616;i:39942;i:19616;i:19617;i:19617;i:39948;i:19617;i:39949;i:19617;i:19618;i:19618;i:39975;i:19618;i:39933;i:39933;i:39999;i:39933;i:39979;i:39979;i:40005;i:39979;i:39804;i:39804;i:40011;i:39804;i:40019;i:40019;i:40020;i:40019;i:39973;i:39973;i:40030;i:39973;i:39952;i:39952;i:40055;i:39952;i:39770;i:39770;i:40060;i:39770;i:39771;i:39771;i:40061;i:39771;i:39799;i:39799;i:40063;i:39799;i:39784;i:39784;i:40064;i:39784;i:39791;i:39791;i:40065;i:39791;i:39796;i:39796;i:40066;i:39796;i:39802;i:39802;i:40068;i:39802;i:39809;i:39809;i:40069;i:39809;i:39811;i:39811;i:40070;i:39811;i:39822;i:39822;i:40071;i:39822;i:40056;i:40056;i:40072;i:40056;i:39819;i:39819;i:40073;i:39819;i:39827;i:39827;i:40074;i:39827;i:39826;i:39826;i:40075;i:39826;i:39818;i:39818;i:40076;i:39818;i:39825;i:39825;i:40077;i:39825;i:40031;i:40031;i:40078;i:40031;i:39821;i:39821;i:40079;i:39821;i:39824;i:39824;i:40080;i:39824;i:40081;i:35295;i:39834;i:39834;i:40082;i:39834;i:39859;i:39859;i:40083;i:39859;i:39850;i:39850;i:40084;i:39850;i:39838;i:39838;i:40085;i:39838;i:39846;i:39846;i:40086;i:39846;i:39938;i:39938;i:40087;i:39938;i:39836;i:39836;i:40088;i:39836;i:40032;i:40032;i:40089;i:40032;i:40045;i:40045;i:40090;i:40045;i:39851;i:39851;i:40091;i:39851;i:40092;i:23583;i:39866;i:39866;i:40093;i:39866;i:40094;i:39837;i:40024;i:40024;i:40095;i:40024;i:40096;i:39614;i:40058;i:40058;i:40097;i:40058;i:39985;i:39985;i:40098;i:39985;i:39993;i:39993;i:40099;i:39993;i:39881;i:39881;i:40100;i:39881;i:39971;i:39971;i:40101;i:39971;i:39991;i:39991;i:40102;i:39991;i:39872;i:39872;i:40103;i:39872;i:40104;i:39782;i:39879;i:39879;i:40105;i:39879;i:39862;i:39862;i:40106;i:39862;i:40107;i:39933;i:39890;i:39890;i:40108;i:39890;i:39894;i:39894;i:40109;i:39894;i:39914;i:39914;i:40110;i:39914;i:39893;i:39893;i:40111;i:39893;i:39915;i:39915;i:40112;i:39915;i:39905;i:39905;i:40113;i:39905;i:39908;i:39908;i:40114;i:39908;i:39911;i:39911;i:40115;i:39911;i:39901;i:39901;i:40116;i:39901;i:39906;i:39906;i:40117;i:39906;i:39920;i:39920;i:40118;i:39920;i:39899;i:39899;i:40119;i:39899;i:39912;i:39912;i:40120;i:39912;i:39994;i:39994;i:40121;i:39994;i:39924;i:39924;i:40122;i:39924;i:39892;i:39892;i:40123;i:39892;i:40029;i:40029;i:40124;i:40029;i:39944;i:39944;i:40125;i:39944;i:39951;i:39951;i:40126;i:39951;i:40040;i:40040;i:40127;i:40040;i:39927;i:39927;i:40128;i:39927;i:39963;i:39963;i:40129;i:39963;i:39955;i:39955;i:40131;i:39955;i:40132;i:39952;i:40133;i:19617;i:39954;i:39954;i:40134;i:39954;i:39945;i:39945;i:40135;i:39945;i:39935;i:39935;i:40138;i:39935;i:39968;i:39968;i:40139;i:39968;i:39986;i:39986;i:40140;i:39986;i:39981;i:39981;i:40141;i:39981;i:39976;i:39976;i:40142;i:39976;i:40143;i:39973;i:39977;i:39977;i:40144;i:39977;i:39967;i:39967;i:40145;i:39967;i:39964;i:39964;i:40146;i:39964;i:39987;i:39987;i:40147;i:39987;i:39998;i:39998;i:40148;i:39998;i:40008;i:40008;i:40149;i:40008;i:40009;i:40009;i:40150;i:40009;i:39995;i:39995;i:40151;i:39995;i:39989;i:39989;i:40152;i:39989;i:40153;i:39979;i:39996;i:39996;i:40155;i:39996;i:40022;i:40022;i:40156;i:40022;i:40157;i:40019;i:40023;i:40023;i:40158;i:40023;i:40018;i:40018;i:40159;i:40018;i:40047;i:40047;i:40160;i:40047;i:40039;i:40039;i:40162;i:40039;i:40035;i:40035;i:40163;i:40035;i:20971;i:20971;i:40167;i:20971;i:38593;i:38593;i:40171;i:38593;i:40172;i:20971;i:38622;i:38622;i:40174;i:38622;i:20964;i:20964;i:40175;i:20964;i:40179;i:20964;i:19731;i:19731;i:40190;i:19731;i:40194;i:40194;i:40195;i:40194;i:40181;i:40181;i:40199;i:40181;i:40200;i:38593;i:38601;i:38601;i:40217;i:38601;i:19733;i:19733;i:40247;i:19733;i:19732;i:19732;i:40257;i:19732;i:40283;i:38938;i:40285;i:40285;i:40286;i:40285;i:40304;i:24427;i:40201;i:40201;i:40310;i:40201;i:19734;i:19734;i:40324;i:19734;i:40318;i:40318;i:40356;i:40318;i:19735;i:19735;i:40362;i:19735;i:33722;i:33722;i:40367;i:33722;i:40373;i:38607;i:32752;i:32752;i:40382;i:32752;i:40388;i:38622;i:19736;i:19736;i:40392;i:19736;i:40393;i:19736;i:40397;i:26541;i:40338;i:40338;i:40408;i:40338;i:40432;i:29141;i:40435;i:40435;i:40436;i:40435;i:19737;i:19737;i:40447;i:19737;i:40458;i:19737;i:40273;i:40273;i:40477;i:40273;i:40265;i:40265;i:40478;i:40265;i:40165;i:40165;i:40479;i:40165;i:40169;i:40169;i:40480;i:40169;i:40481;i:38622;i:40182;i:40182;i:40482;i:40182;i:40180;i:40180;i:40483;i:40180;i:40178;i:40178;i:40484;i:40178;i:40407;i:40407;i:40485;i:40407;i:40486;i:40201;i:40364;i:40364;i:40487;i:40364;i:40488;i:40181;i:40198;i:40198;i:40489;i:40198;i:40227;i:40227;i:40490;i:40227;i:40327;i:40327;i:40491;i:40327;i:40469;i:40469;i:40492;i:40469;i:40232;i:40232;i:40493;i:40232;i:40222;i:40222;i:40494;i:40222;i:40230;i:40230;i:40495;i:40230;i:40210;i:40210;i:40496;i:40210;i:40223;i:40223;i:40497;i:40223;i:40221;i:40221;i:40498;i:40221;i:40219;i:40219;i:40499;i:40219;i:40445;i:40445;i:40500;i:40445;i:40213;i:40213;i:40501;i:40213;i:40421;i:40421;i:40502;i:40421;i:40409;i:40409;i:40503;i:40409;i:40239;i:40239;i:40504;i:40239;i:40240;i:40240;i:40505;i:40240;i:40258;i:40258;i:40506;i:40258;i:40244;i:40244;i:40507;i:40244;i:40259;i:40259;i:40508;i:40259;i:40255;i:40255;i:40509;i:40255;i:40510;i:40265;i:40251;i:40251;i:40511;i:40251;i:40272;i:40272;i:40512;i:40272;i:40275;i:40275;i:40513;i:40275;i:40514;i:40273;i:40515;i:40273;i:40288;i:40288;i:40516;i:40288;i:40517;i:40285;i:40274;i:40274;i:40518;i:40274;i:40519;i:40435;i:40284;i:40284;i:40520;i:40284;i:40289;i:40289;i:40521;i:40289;i:40306;i:40306;i:40522;i:40306;i:40339;i:40339;i:40523;i:40339;i:40298;i:40298;i:40524;i:40298;i:40525;i:40318;i:40303;i:40303;i:40526;i:40303;i:40300;i:40300;i:40527;i:40300;i:40302;i:40302;i:40528;i:40302;i:40329;i:40329;i:40529;i:40329;i:40330;i:40330;i:40530;i:40330;i:40311;i:40311;i:40531;i:40311;i:40427;i:40427;i:40532;i:40427;i:40344;i:40344;i:40533;i:40344;i:40353;i:40353;i:40534;i:40353;i:40346;i:40346;i:40535;i:40346;i:40379;i:40379;i:40536;i:40379;i:40342;i:40342;i:40537;i:40342;i:40383;i:40383;i:40538;i:40383;i:40357;i:40357;i:40539;i:40357;i:40361;i:40361;i:40540;i:40361;i:40394;i:40394;i:40541;i:40394;i:40386;i:40386;i:40542;i:40386;i:40370;i:40370;i:40543;i:40370;i:40377;i:40377;i:40544;i:40377;i:40378;i:40378;i:40545;i:40378;i:40385;i:40385;i:40546;i:40385;i:40380;i:40380;i:40547;i:40380;i:40372;i:40372;i:40548;i:40372;i:40406;i:40406;i:40549;i:40406;i:40474;i:40474;i:40550;i:40474;i:40403;i:40403;i:40551;i:40403;i:40410;i:40410;i:40552;i:40410;i:40431;i:40431;i:40553;i:40431;i:40422;i:40422;i:40554;i:40422;i:40434;i:40434;i:40555;i:40434;i:40440;i:40440;i:40556;i:40440;i:40442;i:40442;i:40557;i:40442;i:40455;i:40455;i:40559;i:40455;i:40441;i:40441;i:40560;i:40441;i:40460;i:40460;i:40561;i:40460;i:40463;i:40463;i:40562;i:40463;i:40475;i:40475;i:40563;i:40475;i:40472;i:40472;i:40564;i:40472;i:40565;i:21348;i:21688;i:21688;i:40569;i:21688;i:40572;i:30839;i:40573;i:22633;i:40570;i:40570;i:40574;i:40570;i:40577;i:31895;i:40580;i:31895;i:40582;i:31895;i:40586;i:40586;i:40587;i:40586;i:20029;i:20029;i:40599;i:20029;i:40598;i:40598;i:40608;i:40598;i:40612;i:31895;i:40613;i:40613;i:40614;i:40613;i:38754;i:38754;i:40618;i:38754;i:26354;i:26354;i:40623;i:26354;i:40628;i:26354;i:40629;i:38754;i:40617;i:40617;i:40632;i:40617;i:40635;i:28107;i:40636;i:20040;i:40637;i:20040;i:40643;i:40643;i:40644;i:40643;i:40649;i:40649;i:40652;i:40649;i:33758;i:33758;i:40654;i:33758;i:40657;i:40657;i:40658;i:40657;i:36577;i:36577;i:40660;i:36577;i:40664;i:40664;i:40665;i:40664;i:40670;i:22860;i:20826;i:20826;i:40680;i:20826;i:40682;i:40682;i:40690;i:40682;i:38665;i:38665;i:40692;i:38665;i:40673;i:40673;i:40694;i:40673;i:40681;i:40681;i:40695;i:40681;i:40701;i:40701;i:40702;i:40701;i:34523;i:34523;i:40708;i:34523;i:34584;i:34584;i:40709;i:34584;i:40711;i:39986;i:40712;i:40009;i:40703;i:40703;i:40715;i:40703;i:40706;i:40706;i:40716;i:40706;i:40713;i:40713;i:40717;i:40713;i:40723;i:30391;i:20908;i:20908;i:40725;i:20908;i:38784;i:38784;i:40727;i:38784;i:40752;i:40752;i:40755;i:40752;i:40756;i:40756;i:40761;i:40756;i:21755;i:21755;i:40766;i:21755;i:40767;i:40767;i:40768;i:40767;i:38942;i:38942;i:40771;i:38942;i:40778;i:20125;i:40779;i:25995;i:40782;i:36075;i:40783;i:34368;i:40784;i:20125;i:40785;i:34368;i:27503;i:27503;i:40786;i:27503;i:40803;i:20986;i:40795;i:40795;i:40805;i:40795;i:40807;i:21870;i:21676;i:21676;i:40809;i:21676;i:36352;i:36352;i:40810;i:36352;i:40811;i:40811;i:40819;i:40811;i:33133;i:33133;i:40822;i:33133;i:40831;i:27503;i:40788;i:40788;i:40832;i:40788;i:40789;i:40789;i:40833;i:40789;i:40791;i:40791;i:40834;i:40791;i:40799;i:40799;i:40835;i:40799;i:40801;i:40801;i:40836;i:40801;i:40793;i:40793;i:40837;i:40793;i:40800;i:40800;i:40838;i:40800;i:40796;i:40796;i:40839;i:40796;i:40806;i:40806;i:40840;i:40806;i:40812;i:40812;i:40841;i:40812;i:40842;i:36352;i:40818;i:40818;i:40843;i:40818;i:40823;i:40823;i:40844;i:40823;i:31452;i:31452;i:40845;i:31452;i:40846;i:21392;i:40848;i:21392;i:19886;i:19886;i:40849;i:19886;i:40850;i:31452;i:40854;i:40854;i:40856;i:40854;i:40857;i:31452;i:40852;i:40852;i:40858;i:40852;i:40853;i:40853;i:40859;i:40853;i:20096;i:20096;i:40860;i:20096;i:40861;i:31179;i:40862;i:40009;i:40863;i:20096;i:40866;i:21644;i:41152;i:41152;i:42140;i:41152;i:41034;i:41034;i:42142;i:41034;i:41040;i:41040;i:42156;i:41040;i:41922;i:41922;i:42160;i:41922;i:41919;i:41919;i:42170;i:41919;i:41649;i:41649;i:42174;i:41649;i:41561;i:41561;i:42175;i:41561;i:41899;i:41899;i:42176;i:41899;i:41909;i:41909;i:42178;i:41909;i:12539;i:12539;i:65381;i:12539;i:12530;i:12530;i:65382;i:12530;i:12449;i:12449;i:65383;i:12449;i:12451;i:12451;i:65384;i:12451;i:12453;i:12453;i:65385;i:12453;i:12455;i:12455;i:65386;i:12455;i:12457;i:12457;i:65387;i:12457;i:12515;i:12515;i:65388;i:12515;i:12517;i:12517;i:65389;i:12517;i:12519;i:12519;i:65390;i:12519;i:12483;i:12483;i:65391;i:12483;i:12540;i:12540;i:65392;i:12540;i:12450;i:12450;i:65393;i:12450;i:12452;i:12452;i:65394;i:12452;i:12454;i:12454;i:65395;i:12454;i:12456;i:12456;i:65396;i:12456;i:12458;i:12458;i:65397;i:12458;i:12459;i:12459;i:65398;i:12459;i:12461;i:12461;i:65399;i:12461;i:12463;i:12463;i:65400;i:12463;i:12465;i:12465;i:65401;i:12465;i:12467;i:12467;i:65402;i:12467;i:12469;i:12469;i:65403;i:12469;i:12471;i:12471;i:65404;i:12471;i:12473;i:12473;i:65405;i:12473;i:12475;i:12475;i:65406;i:12475;i:12477;i:12477;i:65407;i:12477;i:12479;i:12479;i:65408;i:12479;i:12481;i:12481;i:65409;i:12481;i:12484;i:12484;i:65410;i:12484;i:12486;i:12486;i:65411;i:12486;i:12488;i:12488;i:65412;i:12488;i:12490;i:12490;i:65413;i:12490;i:12491;i:12491;i:65414;i:12491;i:12492;i:12492;i:65415;i:12492;i:12493;i:12493;i:65416;i:12493;i:12494;i:12494;i:65417;i:12494;i:12495;i:12495;i:65418;i:12495;i:12498;i:12498;i:65419;i:12498;i:12501;i:12501;i:65420;i:12501;i:65421;i:12408;i:12507;i:12507;i:65422;i:12507;i:12510;i:12510;i:65423;i:12510;i:12511;i:12511;i:65424;i:12511;i:12512;i:12512;i:65425;i:12512;i:12513;i:12513;i:65426;i:12513;i:12514;i:12514;i:65427;i:12514;i:12516;i:12516;i:65428;i:12516;i:12518;i:12518;i:65429;i:12518;i:12520;i:12520;i:65430;i:12520;i:12521;i:12521;i:65431;i:12521;i:12522;i:12522;i:65432;i:12522;i:12523;i:12523;i:65433;i:12523;i:12524;i:12524;i:65434;i:12524;i:12525;i:12525;i:65435;i:12525;i:12527;i:12527;i:65436;i:12527;i:12531;i:12531;i:65437;i:12531;i:12441;i:12441;i:65438;i:12441;i:12442;i:12442;i:65439;i:12442;i:12644;i:12644;i:65440;i:12644;i:12593;i:12593;i:65441;i:12593;i:12594;i:12594;i:65442;i:12594;i:12595;i:12595;i:65443;i:12595;i:12596;i:12596;i:65444;i:12596;i:12597;i:12597;i:65445;i:12597;i:12598;i:12598;i:65446;i:12598;i:12599;i:12599;i:65447;i:12599;i:12600;i:12600;i:65448;i:12600;i:12601;i:12601;i:65449;i:12601;i:12602;i:12602;i:65450;i:12602;i:12603;i:12603;i:65451;i:12603;i:12604;i:12604;i:65452;i:12604;i:12605;i:12605;i:65453;i:12605;i:12606;i:12606;i:65454;i:12606;i:12607;i:12607;i:65455;i:12607;i:12608;i:12608;i:65456;i:12608;i:12609;i:12609;i:65457;i:12609;i:12610;i:12610;i:65458;i:12610;i:12611;i:12611;i:65459;i:12611;i:12612;i:12612;i:65460;i:12612;i:12613;i:12613;i:65461;i:12613;i:12614;i:12614;i:65462;i:12614;i:12615;i:12615;i:65463;i:12615;i:12616;i:12616;i:65464;i:12616;i:12617;i:12617;i:65465;i:12617;i:12618;i:12618;i:65466;i:12618;i:12619;i:12619;i:65467;i:12619;i:12620;i:12620;i:65468;i:12620;i:12621;i:12621;i:65469;i:12621;i:12622;i:12622;i:65470;i:12622;i:12623;i:12623;i:65474;i:12623;i:12624;i:12624;i:65475;i:12624;i:12625;i:12625;i:65476;i:12625;i:12626;i:12626;i:65477;i:12626;i:12627;i:12627;i:65478;i:12627;i:12628;i:12628;i:65479;i:12628;i:12629;i:12629;i:65482;i:12629;i:12630;i:12630;i:65483;i:12630;i:12631;i:12631;i:65484;i:12631;i:12632;i:12632;i:65485;i:12632;i:12633;i:12633;i:65486;i:12633;i:12634;i:12634;i:65487;i:12634;i:12635;i:12635;i:65490;i:12635;i:12636;i:12636;i:65491;i:12636;i:12637;i:12637;i:65492;i:12637;i:12638;i:12638;i:65493;i:12638;i:12639;i:12639;i:65494;i:12639;i:12640;i:12640;i:65495;i:12640;i:12641;i:12641;i:65498;i:12641;i:12642;i:12642;i:65499;i:12642;i:12643;i:12643;i:65500;i:12643;} \ No newline at end of file
diff --git a/AntiSpoof/i18n/aeb.json b/AntiSpoof/i18n/aeb.json
new file mode 100644
index 00000000..6a0e74c7
--- /dev/null
+++ b/AntiSpoof/i18n/aeb.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csisc"
+ ]
+ },
+ "antispoof-desc": "يمنع إنشاء الحسابات بسكريبت مختلط، وبأسماء مشابهة ومربكة",
+ "antispoof-conflict-top": "الاسم \"$1\" شديد الشبه ب{{PLURAL:$2|الحساب الموجود|ال$2 حساب التالية}}:",
+ "antispoof-conflict-bottom": "من فضلك اختر اسما آخر.",
+ "antispoof-name-illegal": "الاسم \"$1\" غير مسموح به لمنع الخلط وانتحال أسماء المستخدمين: $2.\nمن فضلك اختر اسم آخر.",
+ "antispoof-badtype": "نوع بيانات خاطئ",
+ "antispoof-empty": "سلسلة فارغة",
+ "antispoof-blacklisted": "يحتوي على حرف في القائمة السوداء",
+ "antispoof-combining": "يبدأ بعلامة مختلطة",
+ "antispoof-unassigned": "يحتوي على حرف غير مخصص أو غير مقبول",
+ "antispoof-noletters": "لا يحتوي على أية حروف",
+ "antispoof-mixedscripts": "يحتوي على سكريبتات غير متوافقة مختلطة",
+ "antispoof-tooshort": "الاسم المستخدم قصير جدًا",
+ "antispoof-ignore": "تجاهل التحقق من التشابه",
+ "right-override-antispoof": "تجاوز التحقق من سبوفينج"
+}
diff --git a/AntiSpoof/i18n/af.json b/AntiSpoof/i18n/af.json
new file mode 100644
index 00000000..bb293c70
--- /dev/null
+++ b/AntiSpoof/i18n/af.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "antispoof-desc": "Blokke van die skepping van rekeninge met gemengde-script, verwarrend en soortgelyke gebruikersname",
+ "antispoof-conflict-top": "Die naam \"$1\" lyk te soortgelyk aan die van die volgende bestaande {{PLURAL:$2|gebruiker|$2 gebruikers}}:",
+ "antispoof-conflict-bottom": "Kies asseblief 'n ander naam.",
+ "antispoof-badtype": "Verkeerde datatipe",
+ "antispoof-empty": "Leë string",
+ "antispoof-blacklisted": "Bevat verbode karakter $1",
+ "antispoof-combining": "Begin met 'n gekombineerde merker $1",
+ "antispoof-unassigned": "Bevat nie toegekende of verouderde karakter $1",
+ "antispoof-deprecated": "Bevat verouderde karakter $1",
+ "antispoof-noletters": "Bevat geen letters nie",
+ "antispoof-mixedscripts": "Bevat onverenigbaar gemengde skrifte",
+ "antispoof-tooshort": "Afgekorte naam te kort",
+ "antispoof-ignore": "Ignoreer spoofing tjeks",
+ "right-override-antispoof": "Ignoreer die spoofing tjeks"
+}
diff --git a/AntiSpoof/i18n/aln.json b/AntiSpoof/i18n/aln.json
new file mode 100644
index 00000000..8cd56e02
--- /dev/null
+++ b/AntiSpoof/i18n/aln.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mdupont"
+ ]
+ },
+ "antispoof-desc": "Bllokon krijimin e llogarive me script-të përziera, konfuze dhe të ngjashme përdoruesve",
+ "antispoof-conflict-top": "Emrin \"$1\" është shumë e ngjashme me {{PLURAL:$2|llogari ekzistuese|mëposhtme $2 llogaritë}}:",
+ "antispoof-conflict-bottom": "Ju lutem zgjidhni një tjetër.",
+ "antispoof-name-illegal": "Emrin \"$1\" nuk është e lejuar për të parandaluar ose spoofed përdoruesve konfuze: $2. Ju lutem zgjidhni një tjetër.",
+ "antispoof-badtype": "Bad dhënat lloj",
+ "antispoof-empty": "string bosh",
+ "antispoof-blacklisted": "Përmban në listën e zezë karakter",
+ "antispoof-combining": "Fillon me shenjën e kombinuar",
+ "antispoof-unassigned": "Përmban unassigned ose deprecated karakter",
+ "antispoof-noletters": "Nuk përmban asnjë shkronja",
+ "antispoof-mixedscripts": "Përmban Scripts papajtueshëm të përziera",
+ "antispoof-tooshort": "Emri Canonicalized shumë i shkurtër",
+ "antispoof-ignore": "Ignore spoofing kontrolle",
+ "right-override-antispoof": "Refuzim spoofing kontrolle"
+}
diff --git a/AntiSpoof/i18n/an.json b/AntiSpoof/i18n/an.json
new file mode 100644
index 00000000..cd025c19
--- /dev/null
+++ b/AntiSpoof/i18n/an.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Juanpabl"
+ ]
+ },
+ "antispoof-desc": "Bloqueya a creyación de cuentas confusas, con tipografía mezclata y nombres d'usuario parellanos.",
+ "antispoof-conflict-top": "O nombre «$1» ye masiau semellant a {{PLURAL:$2|iste nombre d'usuario|istes $2 nombres d'usuario}}:",
+ "antispoof-conflict-bottom": "Esleiga belatro nombre, por favor.",
+ "antispoof-name-illegal": "No se premite rechistrar-se con o nombre \"$1\" ta privar confusions y suplantacions con os nombres d'usuario: $2. Por favor, esliya una atro nombre.",
+ "antispoof-badtype": "Tipo de datos no conforme",
+ "antispoof-empty": "Cadena vueda",
+ "antispoof-blacklisted": "Contién o caracter no premitito: $1",
+ "antispoof-combining": "Empecipia con a marca combinatoria $1",
+ "antispoof-unassigned": "Contién o caracter no asignau $1",
+ "antispoof-deprecated": "Contién o caracter obsoleto $1",
+ "antispoof-noletters": "No contiene garra letra",
+ "antispoof-mixedscripts": "Contiene un mezclallo incompatible de scripts",
+ "antispoof-tooshort": "Nombre canonico masiau curto",
+ "antispoof-ignore": "Ignorar as comprebacions de spoofing",
+ "right-override-antispoof": "Ignorar as prebas d'identidat"
+}
diff --git a/AntiSpoof/i18n/ang.json b/AntiSpoof/i18n/ang.json
new file mode 100644
index 00000000..1f530f70
--- /dev/null
+++ b/AntiSpoof/i18n/ang.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gott wisst",
+ "Wōdenhelm"
+ ]
+ },
+ "antispoof-noletters": "Næfþ nǣnge stafas"
+}
diff --git a/AntiSpoof/i18n/ar.json b/AntiSpoof/i18n/ar.json
new file mode 100644
index 00000000..7d05c639
--- /dev/null
+++ b/AntiSpoof/i18n/ar.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abanima",
+ "Avocato",
+ "DRIHEM",
+ "Meno25",
+ "Mido",
+ "Mimouni",
+ "محمد الجداوي"
+ ]
+ },
+ "antispoof-desc": "يمنع إنشاء الحسابات بسكريبت مختلط، وبأسماء مشابهة ومربكة",
+ "antispoof-conflict-top": "الاسم «$1» شديد الشبه ب{{PLURAL:$2|حساب موجود هو|حسابين موجودين هما|$2 حسابات موجودة هي|$2 حساباً موجوداً هي|$2 حساب موجود هي}}:",
+ "antispoof-conflict-bottom": "من فضلك اختر اسماً آخر.",
+ "antispoof-name-illegal": "الاسم «$1» غير مسموح به لمنع الخلط وانتحال أسماء المستخدمين: $2.\nمن فضلك اختر اسماً آخر.",
+ "antispoof-badtype": "نوع بيانات خاطئ",
+ "antispoof-empty": "سطر محارف فارغ",
+ "antispoof-blacklisted": "يحتوي على المحرف $1 من القائمة السوداء",
+ "antispoof-combining": "يبدأ بالعلامة المختلطة $1",
+ "antispoof-unassigned": "يحتوي على محرف غير معين $1",
+ "antispoof-deprecated": "يحتوي على المحرف المستنكر $1",
+ "antispoof-noletters": "لا يحتوي على أية حروف",
+ "antispoof-mixedscripts": "يحتوي على سكريبتات غير متوافقة مختلطة",
+ "antispoof-tooshort": "الاسم المستخدم قصير جدًا",
+ "antispoof-ignore": "تجاهل التحقق من التشابه",
+ "right-override-antispoof": "تجاوز التحقق من سبوفينج",
+ "apihelp-antispoof-description": "تحقق من اسم المستخدم باستخدام أداة التحقق من عدم تشابه الأسماء.",
+ "apihelp-antispoof-param-username": "اسم المستخدم المطلوب التحقق منه باستخدام أداة التحقق من عدم تشابه الأسماء",
+ "apihelp-antispoof-example-1": "تحقق من اسم المستخدم «فلان» بأداة التحقق من عدم تشابه الأسماء."
+}
diff --git a/AntiSpoof/i18n/arc.json b/AntiSpoof/i18n/arc.json
new file mode 100644
index 00000000..bd107ceb
--- /dev/null
+++ b/AntiSpoof/i18n/arc.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh",
+ "Man2fly2002"
+ ]
+ },
+ "antispoof-conflict-bottom": "ܦܝܣܐ ܡܢܟ ܓܒܝ ܚܕ ܫܡܐ ܐܚܪܝܢܐ.",
+ "antispoof-noletters": "ܠܐ ܬܚܒܘܫ ܐܬܘܬܐ ܡܕܡ"
+}
diff --git a/AntiSpoof/i18n/arz.json b/AntiSpoof/i18n/arz.json
new file mode 100644
index 00000000..3573cea9
--- /dev/null
+++ b/AntiSpoof/i18n/arz.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ghaly",
+ "Meno25",
+ "Ramsis II"
+ ]
+ },
+ "antispoof-desc": "بيمنع فتح حسابات بأسامى يوزرز متشابهة،و بتلخبط أو بسكريبت متخلط",
+ "antispoof-conflict-top": "الاسم \"$1\" شديد الشبه ب{{PLURAL:$2|الحساب الموجود|ال$2 حساب التالية}}:",
+ "antispoof-conflict-bottom": "من فضلك اختر اسما آخر.",
+ "antispoof-name-illegal": "الاسم \"$1\" مش مسموح علشان نمنع اللخبطة أوانتحال أسماء اليوزرز: $2. لو سمحت تختار اسم تانى.",
+ "antispoof-badtype": "نوع البيانات غلط",
+ "antispoof-empty": "سلسلة فاضية",
+ "antispoof-blacklisted": "بيحتوى على علامة من البلاك ليست",
+ "antispoof-combining": "بيبتدى بعلامة مختلطة",
+ "antispoof-unassigned": "بيحتوى على علامة مش مخصصة أو مش مقبولة",
+ "antispoof-noletters": "ما بيحتويش على اى حروف",
+ "antispoof-mixedscripts": "بيحتوى على سكريبتات مخلوطة مش متوافقة",
+ "antispoof-tooshort": "الاسم المستعمل قصير خالص",
+ "antispoof-ignore": "اتجاهل التشييك على سبوفينج",
+ "right-override-antispoof": "اتجاوز التشييك على سبوفينج"
+}
diff --git a/AntiSpoof/i18n/as.json b/AntiSpoof/i18n/as.json
new file mode 100644
index 00000000..cb511f8e
--- /dev/null
+++ b/AntiSpoof/i18n/as.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bishnu Saikia",
+ "Chaipau",
+ "Gitartha.bordoloi"
+ ]
+ },
+ "antispoof-desc": "মিশ্ৰ লিপিত লিখা, অস্পষ্ট বা একে সদস্যনাম ব্যৱহাৰ কৰি একাউণ্ট সৃষ্টিত বাধা দিয়া হ'ব",
+ "antispoof-conflict-top": "\"$1\" নামটো {{PLURAL:$2|একাউণ্টৰ|$2 একাউণ্টসমূহৰ}} লগত একে হৈছে",
+ "antispoof-conflict-bottom": "অনুগ্ৰহ কৰি আন এটা নাম বাছনি কৰক।",
+ "antispoof-name-illegal": "\"$1\" নামটো বিভ্ৰান্তিকৰ হোৱা বাবে অনুমোদন কৰা নহ'ব: $2।\nঅনুগ্ৰহ কৰি আন এটা নাম বাছনি কৰক।",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "তথ্যৰ ধৰণ ঠিক নহয়",
+ "antispoof-empty": "উকা সূত্ৰ",
+ "antispoof-blacklisted": "নিষিদ্ধ চিহ্ন $1 আছে",
+ "antispoof-combining": "সংযোজিত চিহ্ন $1ৰে আৰম্ভ হৈছে",
+ "antispoof-unassigned": "অপ্ৰযুক্ত চিহ্ন $1 আছে",
+ "antispoof-deprecated": "অননুমোদিত চিহ্ন $1 আছে",
+ "antispoof-noletters": "কোনো আখৰ নাই",
+ "antispoof-mixedscripts": "অনুপযুক্ত মিশ্ৰ লিপি আছে",
+ "antispoof-tooshort": "প্ৰদান কৰা নাম অতি চুটি",
+ "antispoof-ignore": "স্পুফিং পৰীক্ষা অৱজ্ঞা কৰক",
+ "right-override-antispoof": "স্পুফিং পৰীক্ষা অনৱেক্ষা কৰক"
+}
diff --git a/AntiSpoof/i18n/ast.json b/AntiSpoof/i18n/ast.json
new file mode 100644
index 00000000..d6a3c5ee
--- /dev/null
+++ b/AntiSpoof/i18n/ast.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Esbardu",
+ "Xuacu"
+ ]
+ },
+ "antispoof-desc": "Bloquea la creación de cuentes con script mistu que tengan nomes d'usuariu asemeyaos o confusos",
+ "antispoof-conflict-top": "El nome \"$1\" ye demasiao asemeyáu {{PLURAL:$2|al usuariu siguiente|a los usuarios siguientes}}:",
+ "antispoof-conflict-bottom": "Por favor escueyi otru nome.",
+ "antispoof-name-illegal": "Nun se permite'l nome \"$1\" pa evitar nomes d'usuariu confusos o paródicos: $2. Por favor escueyi otru nome.",
+ "antispoof-badtype": "Triba de datos incorreuta",
+ "antispoof-empty": "Testu vaciu",
+ "antispoof-blacklisted": "Contien el caráuter non permitíu $1",
+ "antispoof-combining": "Empecipia cola marca de combinación $1",
+ "antispoof-unassigned": "Contien el caráuter non asináu $1",
+ "antispoof-deprecated": "Contien el caráuter anticuáu $1",
+ "antispoof-noletters": "Nun contien lletra nenguna",
+ "antispoof-mixedscripts": "Contien scripts incompatibles entemecíos",
+ "antispoof-tooshort": "Nome canónicu demasiao curtiu",
+ "antispoof-ignore": "Inorar les comprobaciones d'engañu (spoofing)",
+ "right-override-antispoof": "Saltase les comprobaciones d'engañu (spoofing)",
+ "apihelp-antispoof-description": "Comprobar un nome d'usuariu escontra les comprobaciones de normalización AntiSpoof.",
+ "apihelp-antispoof-param-username": "El nome d'usuariu a comprobar escontra AntiSpoof.",
+ "apihelp-antispoof-example-1": "Comprobar el nome d'usuariu «Foo» escontra AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Inorar les comprobaciones d'engañu (spoof) (rique'l permisu <code>override-antispoof</code>)"
+}
diff --git a/AntiSpoof/i18n/avk.json b/AntiSpoof/i18n/avk.json
new file mode 100644
index 00000000..0f083a05
--- /dev/null
+++ b/AntiSpoof/i18n/avk.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wikimistusik"
+ ]
+ },
+ "antispoof-badtype": "Origordaj",
+ "antispoof-empty": "Vlardafa roda",
+ "antispoof-noletters": "Va mek eltay ruldar"
+}
diff --git a/AntiSpoof/i18n/awa.json b/AntiSpoof/i18n/awa.json
new file mode 100644
index 00000000..049bdd4a
--- /dev/null
+++ b/AntiSpoof/i18n/awa.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "antispoof-desc": "मिश्रित लिपि अव भ्रम पैदा करय वाले अउर मिलत-जुलत सदस्यनावँ कय प्रयोग पे रोक लगावत है।",
+ "antispoof-conflict-top": "\"$1\" नावँ निचे {{PLURAL:$2|सदस्यनावँ|सदस्यनावँ कुल}} से बहुत मिलत-जुलत है:",
+ "antispoof-conflict-bottom": "कृपया कवनो दुसर नाँव चुना जाय ।",
+ "antispoof-name-illegal": "भ्रामक नाँव कय रोकेक लिए नाँव \"$1\" राखब मिनाही है: $2\nकृपया कवनो दुसर नाँव लिहा जाय।",
+ "antispoof-badtype": "गलत डाटा प्रकार",
+ "antispoof-empty": "खाली स्ट्रिंग",
+ "antispoof-blacklisted": "एहमा ब्लैकलिस्टेड कैरैक्टर $1 है",
+ "antispoof-combining": "एकत्रिकरण चिन्ह $1 से शुरु होत है",
+ "antispoof-unassigned": "एहमा गलत अक्षर $1 है",
+ "antispoof-deprecated": "एहमा गलत अक्षर $1 है",
+ "antispoof-noletters": "एहमा कवनो अक्षर नाई है",
+ "antispoof-mixedscripts": "एहमा असंगत मिश्र लिपि कुल हैं",
+ "antispoof-tooshort": "अधिकारयुक्त नाँव बहुत छोट हय",
+ "antispoof-ignore": "स्पूफिंग जाँच नज़रंदाज़ करा जाय",
+ "right-override-antispoof": "स्पूफिंग चेक्स कय ना देखा जाय"
+}
diff --git a/AntiSpoof/i18n/az.json b/AntiSpoof/i18n/az.json
new file mode 100644
index 00000000..6a09c113
--- /dev/null
+++ b/AntiSpoof/i18n/az.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vugar 1981",
+ "Wertuose"
+ ]
+ },
+ "antispoof-desc": "Digər hesablarla qarışmamamq üçün fərqli yazı sistemindən ibarət olan simvollarla yaradılmış hesabların açılması qadağandır",
+ "antispoof-conflict-top": "\"$1\" adı bu {{PLURAL:$2|istifadəçi adına|istifadəçi adlarına}} çox bənzəyir:",
+ "antispoof-conflict-bottom": "Zəhmət olmasa başqa ad seçin.",
+ "antispoof-name-illegal": "$2 hesabıyla qarışmaması üçün \"$1\" adına icazə verilmir. Zəhmət olmasa başqa istifadəçi adını seçin.",
+ "antispoof-badtype": "Yanlış məlumat",
+ "antispoof-empty": "Boş sətir",
+ "antispoof-blacklisted": "Qadağan olunmuş simvol istifadə edilib: $1",
+ "antispoof-combining": "$1 birləşdirmə işarəsi ilə başlayır",
+ "antispoof-unassigned": "Dəstəklənməyən simvol istifadə edilib: $1",
+ "antispoof-noletters": "Heç bir hərf yoxdur",
+ "antispoof-mixedscripts": "Qəbul edilməz yazı sistemi işlədilir",
+ "antispoof-tooshort": "Normallaşdırılmış ad çox qısadır",
+ "antispoof-ignore": "Oxşar adlar yoxlanmasına məhəl qoymamaq",
+ "right-override-antispoof": "Oxşar adlar yoxlanmasına məhəl qoymamaq"
+}
diff --git a/AntiSpoof/i18n/azb.json b/AntiSpoof/i18n/azb.json
new file mode 100644
index 00000000..d18a2f88
--- /dev/null
+++ b/AntiSpoof/i18n/azb.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amir a57",
+ "E THP",
+ "Mousa"
+ ]
+ },
+ "antispoof-desc": "دیگر حساب‌لارلا قاریشمامامق اوچون فرق‌لی یازی سیستئمین‌دن عبارت اولان سیموول‌لارلا یارادیلمیش حساب‌لارین آچیلماسی قاداغان‌دیر",
+ "antispoof-conflict-top": "«$1» آدی، اؤنجه‌دن اولان {{PLURAL:$2|بو حسابا|بو $2 حسابلارا}} چوخ بنزه‌ییر:",
+ "antispoof-conflict-bottom": "زحمت اولماسا باشقا آد سئچین.",
+ "antispoof-name-illegal": "$2 هئسابییلا قاریشماماسی اوچون \"$1\" آدینا ایجازه وئریلمیر. زحمت اولماسا باشقا ایستیفاده‌چی آدینی سئچین.",
+ "antispoof-badtype": "یانلیش بیلگی",
+ "antispoof-empty": "بوش سطیر",
+ "antispoof-blacklisted": "قاداغان اولونموش سیموول ایستیفاده ائدیلیب: $1",
+ "antispoof-combining": "بیرلشدیرمه $1 ایشاره‌سین‌دن باشلاییر",
+ "antispoof-unassigned": "دستکلنمه‌ین سیموول ایستیفاده ائدیلیب: $1",
+ "antispoof-deprecated": "پیس یازی لارا شامل اولور $1",
+ "antispoof-noletters": "هئچ بیر هرف یوخ‌دور",
+ "antispoof-mixedscripts": "قبول ائدیلمز یازی سیستئمی ایشلدیلیر",
+ "antispoof-tooshort": "نورماللاشدیریلمیش آد چوخ قیسا‌دیر",
+ "antispoof-ignore": "اوخشار آدلار یوخلانماسینا محل قویماماق",
+ "right-override-antispoof": "اوخشار آدلار یوخلانماسینا محل قویماماق"
+}
diff --git a/AntiSpoof/i18n/ba.json b/AntiSpoof/i18n/ba.json
new file mode 100644
index 00000000..e582b549
--- /dev/null
+++ b/AntiSpoof/i18n/ba.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alfiya55",
+ "Assele",
+ "Haqmar"
+ ]
+ },
+ "antispoof-desc": "Төрлө яҙма системаларының хәрефтәренән торған, яңылыштырырлыҡ һәм башҡа ҡатнашыусы исемдәренән оҡшаш исемле иҫәп яҙмаларҙы булдырыуҙы тыя.",
+ "antispoof-conflict-top": "\"$1\" исеме булған {{PLURAL:$2|файҙаланыусы исеменә}} бигерәк оҡшаш:",
+ "antispoof-conflict-bottom": "Зинһар, башҡа исем һайлағыҙ.",
+ "antispoof-name-illegal": "\"$1\" исемен ҡүлланыу түбәндәге оҡшаш исемдәр менән бутамау өсөн тыйылған: $2.\nЗинһар, башҡа исем һайлағыҙ.",
+ "antispoof-badtype": "Мәғлүмәт төрө дөрөҫ түгел",
+ "antispoof-empty": "Буш юл",
+ "antispoof-blacklisted": "Ҡара исемлектәге символ бар: $1",
+ "antispoof-combining": "Берләштереү билдәһе менән башлана: $1",
+ "antispoof-unassigned": "Рөхсәт ителмәгән символ бар: $1",
+ "antispoof-deprecated": "Ҡулланыуҙан сығарылған символ бар: $1",
+ "antispoof-noletters": "Бер хәреф тә юҡ",
+ "antispoof-mixedscripts": "Берләштереү мөмкин булмаған яҙма системаларының хәрефтәре бар",
+ "antispoof-tooshort": "Ҡанунлаштырылған исем бигерәк ҡыҫҡа",
+ "antispoof-ignore": "Оҡшаш исемдәргә тикшереүҙе иғтибарға алмаҫҡа",
+ "right-override-antispoof": "Оҡшаш исемдәргә тикшереүҙе иғтибарһыҙ ҡалдырыу"
+}
diff --git a/AntiSpoof/i18n/bar.json b/AntiSpoof/i18n/bar.json
new file mode 100644
index 00000000..492ab32c
--- /dev/null
+++ b/AntiSpoof/i18n/bar.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mucalexx"
+ ]
+ },
+ "antispoof-desc": "Vahindert d' Erstöung voh Benutzerkontos mid gmischte Zeichenseetz, vawirrende und änliche Benutzernåmen",
+ "antispoof-conflict-top": "Da Nåm „$1“ ist {{PLURAL:$2|'m existiarerten Benutzerkonto|de foigenden $2 Benutzerkontos}} z' änle:",
+ "antispoof-conflict-bottom": "Bittschee suach da an åndern Nåm aus",
+ "antispoof-name-illegal": "Da ausgsuachte Benutzernåm „$1“ is ned dalaabt. Grund: $2<br />Bittschee an åndern Benutzernåmen aussuachen.",
+ "antispoof-badtype": "Ungütiger Daatentyp",
+ "antispoof-empty": "Laars Föd",
+ "antispoof-blacklisted": "Es san ned dalaabte Zeichen enthoiden.",
+ "antispoof-combining": "Kombinazionszeichen z' Beginn.",
+ "antispoof-unassigned": "Es san ned zuagordnate oder unerwynschte Zeichen enthoiden.",
+ "antispoof-noletters": "Es san koane Buachstom enthoiden.",
+ "antispoof-mixedscripts": "Es san Zeichen voh unterschiadliche Schriftsysteme enthoiden.",
+ "antispoof-tooshort": "Da kanonisiarde Nåm is z' kurz.",
+ "antispoof-ignore": "D' Änlichkeitspriaffung ignorirn",
+ "right-override-antispoof": "D' Benutzernåm-Änlichkeitspriaffung ausschoiden"
+}
diff --git a/AntiSpoof/i18n/bcc.json b/AntiSpoof/i18n/bcc.json
new file mode 100644
index 00000000..a1859b85
--- /dev/null
+++ b/AntiSpoof/i18n/bcc.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mostafadaneshvar",
+ "RigiMahnoor"
+ ]
+ },
+ "antispoof-desc": "شرکتن حساب گون پیچیدگین اسکریپ، پیچیدگین و ساده این نام کاربری محدود کنت",
+ "antispoof-conflict-top": "نام «$1» باز پر {{PLURAL:$2|ائ حساب کاربری|ائ حسابانی کاربری}} یکجندی داریت.",
+ "antispoof-conflict-bottom": "دزبندی دگر نامء بزیر ات.",
+ "antispoof-name-illegal": "نام \"$1\" مجاز په بوتن په خاطر جلوگرگ چه پیچیدگین نام شرکتن نهنت$2.\nلطفا یک دگه نامی انتخاب کنیت.",
+ "antispoof-badtype": "بدین نوع دیتا",
+ "antispoof-empty": "رشتگ حالیکین",
+ "antispoof-blacklisted": "ائ بلک لیستء کرکتر توکا انت $1",
+ "antispoof-combining": "بنگیج بیت گون جمعی علامت $1",
+ "antispoof-unassigned": "ائ نامالومین یانکه نالوٹین کرکتر توکا انت",
+ "antispoof-deprecated": "ائ نالوٹین کرکترء توکا انت $1",
+ "antispoof-noletters": "شامل هچ حرفی نهنت",
+ "antispoof-mixedscripts": "شامل نا سازین جمع اسکریپتانء",
+ "antispoof-tooshort": "استاندارد این نام باز هوردن",
+ "antispoof-ignore": "ندید گرگ کنترل په کلاهبرداری",
+ "right-override-antispoof": "چه کنترلان کلاهبرداری رد بوت"
+}
diff --git a/AntiSpoof/i18n/bcl.json b/AntiSpoof/i18n/bcl.json
new file mode 100644
index 00000000..3b0542ea
--- /dev/null
+++ b/AntiSpoof/i18n/bcl.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Filipinayzd",
+ "Geopoet"
+ ]
+ },
+ "antispoof-desc": "Minakubkob sa pagmukna nin mga panindog na igwang pinaghalong eskripto, nakakalibong asin may kaparehong mga paragamit-ngaran",
+ "antispoof-conflict-top": "An pangaran na \"$1\" may kaagid sa minasunod na {{PLURAL:$2|ngaran-paragamit|mga ngaran-paragamit}}:",
+ "antispoof-conflict-bottom": "Pakipili tabi nin ibang pangaran.",
+ "antispoof-name-illegal": "An parágamit na \"$1\" dai tinotogotan tanganing maibitaran an pagpaparibong o inarogan na mga ngaran-paragamit: $2. Pakipilî tabî nin ibang pangaran.",
+ "antispoof-badtype": "Maraot na tipo nin datos",
+ "antispoof-empty": "Mayong laman na panunod",
+ "antispoof-blacklisted": "Minalaman nin pinagbaraduhang panggurit na $1",
+ "antispoof-combining": "Minapoon na igwang kasalakang marka an $1",
+ "antispoof-unassigned": "Minalaman nin bakong designadong panggurit na $1",
+ "antispoof-deprecated": "Minalaman nin deprekadong panggurit na $1",
+ "antispoof-noletters": "Mayong nakakaag na mga letra",
+ "antispoof-mixedscripts": "Igwang dai angay na mga halong eskripto",
+ "antispoof-tooshort": "Kanonikalisadong pangaran na grabe kahalipoton",
+ "antispoof-ignore": "Pabayae an palibong na mga rikisa",
+ "right-override-antispoof": "Salambawan an palibong na mga rikisa"
+}
diff --git a/AntiSpoof/i18n/be-tarask.json b/AntiSpoof/i18n/be-tarask.json
new file mode 100644
index 00000000..fd88b5f6
--- /dev/null
+++ b/AntiSpoof/i18n/be-tarask.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Jim-by",
+ "Red Winged Duck",
+ "Wizardist"
+ ]
+ },
+ "antispoof-desc": "Блякуе стварэньне рахункаў зь імёнамі карыстальнікаў са зьмяшаных альфабэтаў, падобных ці тых, якія можна зблытаць",
+ "antispoof-conflict-top": "Імя «$1» занадта падобнае на {{PLURAL:$2|1=наступнае імя карыстальніка|наступныя імёны карыстальнікаў}}:",
+ "antispoof-conflict-bottom": "Калі ласка, выберыце іншую назву рахунку.",
+ "antispoof-name-illegal": "Імя «$1» не дазволенае, каб прадухіліць блытаніну ці падробку імені ўдзельніка: $2.\nКалі ласка, абярыце іншае імя.",
+ "antispoof-badtype": "Няслушны тып зьвестак",
+ "antispoof-empty": "Пусты радок",
+ "antispoof-blacklisted": "Утрымлівае забаронены сымбаль $1",
+ "antispoof-combining": "Пачынаецца з мадыфікавальнага сымбаля Юнікоду $1",
+ "antispoof-unassigned": "Утрымлівае неназначаны ці састарэлы сымбаль",
+ "antispoof-deprecated": "Утрымлівае састарэлы сымбаль «$1»",
+ "antispoof-noletters": "Ня ўтрымлівае ніводнай літары",
+ "antispoof-mixedscripts": "Утрымлівае несумяшчальныя зьмяшаныя альфабэты",
+ "antispoof-tooshort": "Нармалізаванае імя занадта кароткае",
+ "antispoof-ignore": "Ігнараваць праверкі на падобнасьць імёнаў",
+ "right-override-antispoof": "ігнараваньне праверак на падобныя назвы рахункаў"
+}
diff --git a/AntiSpoof/i18n/be.json b/AntiSpoof/i18n/be.json
new file mode 100644
index 00000000..2c9df27c
--- /dev/null
+++ b/AntiSpoof/i18n/be.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Хомелка",
+ "Дзяніс Тутэйшы"
+ ]
+ },
+ "antispoof-desc": "Блакуе стварэнне рахункаў з імёнамі карыстальнікаў са змяшанымі раскладкамі, падобных ці тых, якія можна зблытаць",
+ "antispoof-conflict-top": "Назва рахунку «$1» занадта падобная на $2 {{PLURAL:$2|існуючы рахунак|існуючыя рахункі|існуючых рахункаў}}:",
+ "antispoof-conflict-bottom": "Калі ласка, выберыце іншую назву рахунка.",
+ "antispoof-name-illegal": "Імя «$1» не дазволенае, каб прадухіліць блытаніну ці падробку імені ўдзельніка: $2. Калі ласка, абярыце іншае імя.",
+ "antispoof-badtype": "Няслушны тып звестак",
+ "antispoof-empty": "Пусты радок",
+ "antispoof-blacklisted": "Утрымлівае забаронены сімвал",
+ "antispoof-combining": "Пачынаецца з аб'яднальнага знаку",
+ "antispoof-unassigned": "Утрымлівае нявызначаны ці састарэлы сімвал",
+ "antispoof-noletters": "Не ўтрымлівае ніводнай літары",
+ "antispoof-mixedscripts": "Утрымлівае несумяшчальныя змяшаныя альфавіты",
+ "antispoof-tooshort": "Нармалізаванае імя занадта кароткае",
+ "antispoof-ignore": "Ігнараваць праверкі на падобнасць імёнаў",
+ "right-override-antispoof": "ігнараванне праверак на падобныя назвы рахункаў"
+}
diff --git a/AntiSpoof/i18n/bg.json b/AntiSpoof/i18n/bg.json
new file mode 100644
index 00000000..90c92f84
--- /dev/null
+++ b/AntiSpoof/i18n/bg.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borislav",
+ "DCLXVI",
+ "Spiritia",
+ "Stanqo"
+ ]
+ },
+ "antispoof-desc": "Блокиране на създаването на сметки, изписани с различни писмени системи, объркващи или подобни на други потребителски имена",
+ "antispoof-conflict-top": "Името „$1“ е твърде сходно с {{PLURAL:$2|вече съществуваща сметка|вече съществуващите $2 сметки}}:",
+ "antispoof-conflict-bottom": "Изберете друго име.",
+ "antispoof-name-illegal": "Името „$1“ не е разрешено за защита от объркване или злоупотреби с имена: $2. Моля, изберете друго име!",
+ "antispoof-badtype": "Грешен тип на данните",
+ "antispoof-empty": "Празен низ",
+ "antispoof-blacklisted": "Съдържа забранен знак",
+ "antispoof-combining": "Започва със съставен знак",
+ "antispoof-unassigned": "Съдържа неопределен или нежелан знак",
+ "antispoof-deprecated": "Съдържа неприемливия символ $1",
+ "antispoof-noletters": "Не съдържа букви",
+ "antispoof-mixedscripts": "Съдържа несъвместими писмени системи",
+ "antispoof-tooshort": "Каноничното име е твърде кратко",
+ "antispoof-ignore": " Игнорирай проверката на подобни имена",
+ "right-override-antispoof": " Игнориране проверката на подобни имена"
+}
diff --git a/AntiSpoof/i18n/bho.json b/AntiSpoof/i18n/bho.json
new file mode 100644
index 00000000..ac4a86ba
--- /dev/null
+++ b/AntiSpoof/i18n/bho.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ganesh"
+ ]
+ },
+ "antispoof-conflict-bottom": "कृपया कउनो दुसर नाम चुनीं"
+}
diff --git a/AntiSpoof/i18n/bjn.json b/AntiSpoof/i18n/bjn.json
new file mode 100644
index 00000000..69fb82cb
--- /dev/null
+++ b/AntiSpoof/i18n/bjn.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ezagren",
+ "J Subhi"
+ ]
+ },
+ "antispoof-desc": "Blukir paulahan akun bangaran pamakai awan hurup-bacampur, mambingungakan, wan mirip",
+ "antispoof-conflict-top": "Si ngaran \"$1\" kamiripan awan {{PLURAL:$2|akun nang sudah ada|$2 akun barikut}}:",
+ "antispoof-conflict-bottom": "Muhun pilih ngaran nang lain.",
+ "antispoof-name-illegal": "Si ngaran \"$1\" kada dibulihakan hagan mancagah kabingungan atawa ngaran tipuan: $2.\nMuhun pilih ngaran nang lain.",
+ "antispoof-badtype": "Janis data buruk",
+ "antispoof-empty": "String kusung",
+ "antispoof-blacklisted": "Mangandung karaktir daptar-hirang",
+ "antispoof-combining": "Bamula awan ciri kumbinasi",
+ "antispoof-unassigned": "Mangandung karaktir kada dibariakan atawa kada dipuruk pulang",
+ "antispoof-noletters": "Kada baisi sa-asa hurup gin",
+ "antispoof-mixedscripts": "Mangandung hurup-bacampur kada kumpatibal",
+ "antispoof-tooshort": "Ngaran kanunicalisa kahandapan",
+ "antispoof-ignore": "Abaiakan pamariksaan panipuan akun",
+ "right-override-antispoof": "Abaiakan pamariksaan panipuan"
+}
diff --git a/AntiSpoof/i18n/bn.json b/AntiSpoof/i18n/bn.json
new file mode 100644
index 00000000..526eb710
--- /dev/null
+++ b/AntiSpoof/i18n/bn.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftab1995",
+ "Bellayet",
+ "Nasir8891",
+ "Zaheen"
+ ]
+ },
+ "antispoof-desc": "মিশ্র-লিপিতে লেখা, কিংবা অস্পষ্ট ও একই রকম ব্যবহারকারী নাম দিয়ে অ্যাকাউন্ট সৃষ্টিতে বাধা দেবে",
+ "antispoof-conflict-top": "\"$1\" নামটি নিম্নলিখিত {{PLURAL:$2|অ্যাকাউন্টের}} সাথে বেশ মিলে যায়:",
+ "antispoof-conflict-bottom": "অনুগ্রহ করে অন্য নাম পছন্দ করুন।",
+ "antispoof-name-illegal": "\"$1\" নামটি, বিভ্রান্তিকর বা ধাপ্পাবাজ ব্যবহারকারী নাম: $2 কে রোধ করার অনুমতি নাই। দয়া করে অন্য নাম পছন্দ করুন।",
+ "antispoof-badtype": "তথ্যের ধরণ ঠিক নাই",
+ "antispoof-empty": "খালি স্ট্রিং",
+ "antispoof-blacklisted": "নিষিদ্ধ বর্ণ বা অক্ষর $1 রয়েছে",
+ "antispoof-combining": "$1 সংযোগসূচক চিহ্ন দিয়ে শুরু হয়েছে",
+ "antispoof-unassigned": "$1 অপ্রযুক্ত বা অননুমোদিত ক্যারেক্টার ধারণ করে",
+ "antispoof-deprecated": "$1 অবচিত অক্ষর রয়েছে",
+ "antispoof-noletters": "কোন অক্ষর বা বর্ণ নাই",
+ "antispoof-mixedscripts": "বেমানান স্ক্রিপ্টের মিশ্রণ ধারণ করে",
+ "antispoof-tooshort": "সূত্রায়িত নাম খুব সংক্ষিপ্ত",
+ "antispoof-ignore": "স্পুফিং চেক অগ্রাহ্য করো",
+ "right-override-antispoof": "স্পুফিং চেক ওভাররাইড করো"
+}
diff --git a/AntiSpoof/i18n/bqi.json b/AntiSpoof/i18n/bqi.json
new file mode 100644
index 00000000..d4c2b106
--- /dev/null
+++ b/AntiSpoof/i18n/bqi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bonevarluri"
+ ]
+ },
+ "antispoof-empty": "رشنه حالی"
+}
diff --git a/AntiSpoof/i18n/br.json b/AntiSpoof/i18n/br.json
new file mode 100644
index 00000000..241178f6
--- /dev/null
+++ b/AntiSpoof/i18n/br.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fohanno",
+ "Fulup",
+ "Y-M D"
+ ]
+ },
+ "antispoof-desc": "Stankañ a ra, dre ur skript kemmesk, krouidigezh kontoù dezho anvioù implijer heñvel pe a c'hall sevel amjestregezh diwarno",
+ "antispoof-conflict-top": "Heñvel betek re eo an anv \"$1\" da hini {{PLURAL:$2|anv implijer}}:",
+ "antispoof-conflict-bottom": "Dibabit un anv all mar plij.",
+ "antispoof-name-illegal": "N'eo ket aotreet ober gant an anv \"$1\" kuit da gemmeskañ gant un anv all pe da implijout an anv : $2.\nGrit gant un anv all mar plij.",
+ "antispoof-badtype": "Seurt roadennoù fall",
+ "antispoof-empty": "Neudennad goullo",
+ "antispoof-blacklisted": "Emañ an arouezenn berzet $1 e-barzh",
+ "antispoof-combining": "Kregiñ a ra gant ar merk kenaozet $1",
+ "antispoof-unassigned": "Un arouezenn dispredet pe dispisaet zo e-barzh",
+ "antispoof-deprecated": "Emañ an arouezenn dispredet $1 e-barzh",
+ "antispoof-noletters": "Lizherenn ebet e-barzh",
+ "antispoof-mixedscripts": "Meur a skript digenglotus zo e-barzh",
+ "antispoof-tooshort": "Anv kanonek re verr",
+ "antispoof-ignore": "Chom hep gwiriañ hag-eñ n'eus ket un implijer all gantañ un anv damheñvel",
+ "right-override-antispoof": "Chom hep gwiriañ ha touellerezh zo"
+}
diff --git a/AntiSpoof/i18n/bs.json b/AntiSpoof/i18n/bs.json
new file mode 100644
index 00000000..e8222d94
--- /dev/null
+++ b/AntiSpoof/i18n/bs.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator",
+ "Palapa",
+ "Semso98"
+ ]
+ },
+ "antispoof-desc": "Blokira pravljenje računa sa miješanim slovima, zbunjujućim i sličnim korisničkim imenima",
+ "antispoof-conflict-top": "Ime \"$1\" je previše slično sa sljedećim {{PLURAL:$2|korisničkim imenom|korisničkim imenima}}:",
+ "antispoof-conflict-bottom": "Molimo izaberite drugo ime.",
+ "antispoof-name-illegal": "Ime \"$1\" nije dopušteno da bi se izbjegla zbunjujuća ili slična korisnička imena: $2.\nMolimo Vas da odaberete drugo ime.",
+ "antispoof-badtype": "Pogrešna vrsta podataka",
+ "antispoof-empty": "Prazan unos",
+ "antispoof-blacklisted": "Sadrži nepoželjni znak $1",
+ "antispoof-combining": "Počinje sa znakom kombinacije $1",
+ "antispoof-unassigned": "Sadrži nedodijeljeni znak $1",
+ "antispoof-noletters": "Ne sadrži ni jedno slovo",
+ "antispoof-mixedscripts": "Sadrži miješana slova koja nisu podržana",
+ "antispoof-tooshort": "Normalizirano ime je prekratko",
+ "antispoof-ignore": "Ignoriraj provjeru sličnosti",
+ "right-override-antispoof": "Zaobilaženje provjera korisničkog imena"
+}
diff --git a/AntiSpoof/i18n/ca.json b/AntiSpoof/i18n/ca.json
new file mode 100644
index 00000000..93e4a0f8
--- /dev/null
+++ b/AntiSpoof/i18n/ca.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arnaugir",
+ "Pginer",
+ "Qllach",
+ "SMP",
+ "Vriullop"
+ ]
+ },
+ "antispoof-desc": "Bloca la creació de comptes amb alfabets barrejats i noms d'usuari similars o que portin a confusió",
+ "antispoof-conflict-top": "El nom \"$1\" és massa similar {{PLURAL:$2|al nom d'usuari següent|als noms d'usuari següents}}:",
+ "antispoof-conflict-bottom": "Escolliu si us plau un altre nom.",
+ "antispoof-name-illegal": "No està permès usar el nom «$1» per evitar confusions o falsificacions amb els noms d'usuari: $2. Si us plau, escolliu un altre nom d'usuari.",
+ "antispoof-badtype": "Tipus de dades incorrecte",
+ "antispoof-empty": "Cadena buida",
+ "antispoof-blacklisted": "Conté el caràcter no permés $1",
+ "antispoof-combining": "Comença amb la marca de combinació $1",
+ "antispoof-unassigned": "Conté el caràcter no assignat $1",
+ "antispoof-deprecated": "Conté el caràcter obsolet $1",
+ "antispoof-noletters": "No conté cap lletra",
+ "antispoof-mixedscripts": "Conté una mescla incompatible d'escriptures",
+ "antispoof-tooshort": "Nom canònic massa curt",
+ "antispoof-ignore": "Ignora controls antispoof",
+ "right-override-antispoof": "Evitar el control de noms d'usuari"
+}
diff --git a/AntiSpoof/i18n/ce.json b/AntiSpoof/i18n/ce.json
new file mode 100644
index 00000000..db5d7216
--- /dev/null
+++ b/AntiSpoof/i18n/ce.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sasan700",
+ "Умар"
+ ]
+ },
+ "antispoof-desc": "Башх-башха абатийн элпашца декъашхойн дӀаяздарш кхолла цамаго.",
+ "antispoof-ignore": "Терго ма йе цхьатерра цӀерш юй хьажаран",
+ "right-override-antispoof": "цхьатерра цӀерш юй хьажар тергалцадар"
+}
diff --git a/AntiSpoof/i18n/ckb.json b/AntiSpoof/i18n/ckb.json
new file mode 100644
index 00000000..533c6ef9
--- /dev/null
+++ b/AntiSpoof/i18n/ckb.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Calak"
+ ]
+ },
+ "antispoof-ignore": "تاوتوێکردنی خەڵەتێنەکان لەبەر چاو مەگرە",
+ "right-override-antispoof": "تێپەڕاندنی تاوتوێی ناوە وەکوویەکەکان"
+}
diff --git a/AntiSpoof/i18n/co.json b/AntiSpoof/i18n/co.json
new file mode 100644
index 00000000..f9ce3035
--- /dev/null
+++ b/AntiSpoof/i18n/co.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "antispoof-badtype": "Tipu gattivu di dati"
+}
diff --git a/AntiSpoof/i18n/cs.json b/AntiSpoof/i18n/cs.json
new file mode 100644
index 00000000..da73d1b2
--- /dev/null
+++ b/AntiSpoof/i18n/cs.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Danny B.",
+ "Li-sung",
+ "Mormegil"
+ ]
+ },
+ "antispoof-desc": "Brání vytváření účtů, jejichž jména jsou matoucí, podobná jiným uživatelům, nebo kombinují několik druhů písem",
+ "antispoof-conflict-top": "Jméno „$1“ je příliš podobné {{PLURAL:$2|následujícímu uživatelskému jménu|následujícím uživatelským jménům}}:",
+ "antispoof-conflict-bottom": "Zvolte si jiné jméno.",
+ "antispoof-name-illegal": "Jméno „$1“ není povoleno vytvořit, aby se nepletlo nebo nesloužilo k napodobování cizích uživatelských jmen: $2.\nZvolte si prosím jiné jméno.",
+ "antispoof-bad-char": "„$1“ ($2)",
+ "antispoof-badtype": "Špatný datový typ",
+ "antispoof-empty": "Prázdný řetězec",
+ "antispoof-blacklisted": "Obsahuje zakázaný znak $1",
+ "antispoof-combining": "Začíná kombinujícím diakritickým znakem $1",
+ "antispoof-unassigned": "Obsahuje nepřiřazený nebo zavržený znak",
+ "antispoof-deprecated": "Obsahuje zavržený znak $1",
+ "antispoof-noletters": "Neobsahuje žádné písmeno",
+ "antispoof-mixedscripts": "Obsahuje nepřípustnou kombinaci druhů písem",
+ "antispoof-tooshort": "Jméno je po normalizaci příliš krátké",
+ "antispoof-ignore": "Neprovádět kontrolu matoucích jmen",
+ "right-override-antispoof": "Potlačení kontroly podobnosti uživatelských jmen"
+}
diff --git a/AntiSpoof/i18n/cy.json b/AntiSpoof/i18n/cy.json
new file mode 100644
index 00000000..cb78b07d
--- /dev/null
+++ b/AntiSpoof/i18n/cy.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr"
+ ]
+ },
+ "antispoof-desc": "Yn atal creu cyfrifon ag iddynt enwau o wyddorau cymysg, neu enwau dryslyd, neu enwau sy'n rhy debyg i enwau eraill",
+ "antispoof-conflict-top": "Mae'r enw \"$1\" yn rhy debyg i'r {{PLURAL:$2||cyfrif|$2 gyfrif|$2 chyfrif|$2 chyfrif|$2 cyfrif}} canlynol:",
+ "antispoof-conflict-bottom": "Dewiswch enw arall os gwelwch yn dda.",
+ "antispoof-name-illegal": "Ni chaniateir yr enw \"$1\" er mwyn osgoi cael enwau dryslyd neu gellweirus ar ddefnyddwyr: $2. Byddwch gystal â dewis enw gwahanol.",
+ "antispoof-badtype": "Math data gwallus",
+ "antispoof-empty": "Llinyn gwag",
+ "antispoof-blacklisted": "Yn cynnwys y nod gwaharddedig $1",
+ "antispoof-combining": "Yn dechrau gyda'r marc cyfuno $1",
+ "antispoof-unassigned": "Yn cynnwys y nod $1 nag ydyw wedi ei bennu",
+ "antispoof-deprecated": "Yn cynnwys y nod $1 sydd yn anghymeradwy",
+ "antispoof-noletters": "Nid yw'r enw'n cynnwys unrhyw lythyren",
+ "antispoof-mixedscripts": "Yn cynnwys gwyddorau cymysg anghydweddol",
+ "antispoof-tooshort": "Mae'r enw, ar ôl ei normaleiddio gan y meddalwedd, yn rhy fyr i'w drin a'i drafod.",
+ "antispoof-ignore": "Anwybydder gwirio am enwau gwallus",
+ "right-override-antispoof": "Anwybydder gwirio am enwau gwallus"
+}
diff --git a/AntiSpoof/i18n/da.json b/AntiSpoof/i18n/da.json
new file mode 100644
index 00000000..362f5f70
--- /dev/null
+++ b/AntiSpoof/i18n/da.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Christian List",
+ "Dittaeva",
+ "Froztbyte",
+ "Jan Friberg",
+ "Jon Harald Søby",
+ "Sarrus",
+ "Tjernobyl"
+ ]
+ },
+ "antispoof-desc": "Blokerer for oprettelse af konti med blandede tegnsæt, forvirrende eller lignende brugernavne",
+ "antispoof-conflict-top": "Navnet \"$1\" ligner for meget {{PLURAL:$2|den eksisterende konto|de følgende $2 konti}}:",
+ "antispoof-conflict-bottom": "Vælg et andet navn.",
+ "antispoof-name-illegal": "Navnet \"$1\" er ikke tilladt for at forhindre forvirrende eller efterlignede brugernavne: $2. Vælg venligst et andet navn.",
+ "antispoof-badtype": "Ugyldig datatype",
+ "antispoof-empty": "Tom streng",
+ "antispoof-blacklisted": "Indeholder det sortlistede tegn $1",
+ "antispoof-combining": "Begynder med kombinationstegnet $1",
+ "antispoof-unassigned": "Indeholder det ikke-tildelte tegn $1",
+ "antispoof-deprecated": "Indeholder det udfasede tegn $1",
+ "antispoof-noletters": "Indeholder ingen bogstaver",
+ "antispoof-mixedscripts": "Indeholder inkompatible, blandede tegnsæt",
+ "antispoof-tooshort": "Navnet er for kort",
+ "antispoof-ignore": "Ignorér misbrugskontrol",
+ "right-override-antispoof": "Omgå kontrollerne af brugernavne"
+}
diff --git a/AntiSpoof/i18n/de-ch.json b/AntiSpoof/i18n/de-ch.json
new file mode 100644
index 00000000..288f47fa
--- /dev/null
+++ b/AntiSpoof/i18n/de-ch.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geitost"
+ ]
+ },
+ "right-override-antispoof": "Die Benutzernamens-Ähnlichkeitsprüfung ausser Kraft setzen."
+}
diff --git a/AntiSpoof/i18n/de-formal.json b/AntiSpoof/i18n/de-formal.json
new file mode 100644
index 00000000..ed85f978
--- /dev/null
+++ b/AntiSpoof/i18n/de-formal.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Imre",
+ "Kghbln"
+ ]
+ },
+ "antispoof-conflict-bottom": "Bitte wählen Sie einen anderen Benutzernamen.",
+ "antispoof-name-illegal": "Der gewünschte Benutzername „$1“ ist nicht möglich. Grund: $2<br />Bitte wählen Sie einen anderen Benutzernamen."
+}
diff --git a/AntiSpoof/i18n/de.json b/AntiSpoof/i18n/de.json
new file mode 100644
index 00000000..483e08d2
--- /dev/null
+++ b/AntiSpoof/i18n/de.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geitost",
+ "Kghbln",
+ "Metalhead64",
+ "Raimond Spekking",
+ "Umherirrender"
+ ]
+ },
+ "antispoof-desc": "Verhindert die Erstellung von Benutzerkonten mit gemischten Zeichensätzen, verwirrenden und ähnlichen Benutzernamen",
+ "antispoof-conflict-top": "Der Benutzername „$1“ ist {{PLURAL:$2|dem|den}} folgenden Benutzernamen zu ähnlich:",
+ "antispoof-conflict-bottom": "Bitte wähle einen anderen Benutzernamen.",
+ "antispoof-name-illegal": "Der gewünschte Benutzername „$1“ ist nicht möglich. Grund: $2<br />Bitte wähle einen anderen Benutzernamen.",
+ "antispoof-badtype": "Ungültiger Datentyp",
+ "antispoof-empty": "Leeres Feld",
+ "antispoof-blacklisted": "Das nicht zulässige Zeichen $1 ist enthalten.",
+ "antispoof-combining": "Er fängt mit einem Verbindungszeichen $1 an.",
+ "antispoof-unassigned": "Er enthält das nicht zugeordnete Zeichen $1.",
+ "antispoof-deprecated": "Er enthält das unzulässige Zeichen $1.",
+ "antispoof-noletters": "Er enthält keine Buchstaben.",
+ "antispoof-mixedscripts": "Er enthält Zeichen unterschiedlicher Schriftsysteme.",
+ "antispoof-tooshort": "Er ist zu kurz.",
+ "antispoof-ignore": "Ähnlichkeitsprüfung ignorieren",
+ "right-override-antispoof": "Die Benutzernamens-Ähnlichkeitsprüfung außer Kraft setzen",
+ "apihelp-antispoof-description": "Einen Benutzernamen in die Normalisierungsprüfung der Erweiterung AntiSpoof aufnehmen.",
+ "apihelp-antispoof-param-username": "Der Benutzername, der mit der Erweiterung AntiSpoof geprüft werden soll.",
+ "apihelp-antispoof-example-1": "Den Benutzernamen „Foo“ mit der Erweiterung AntiSpoof überprüfen.",
+ "apihelp-createaccount-param-ignoreantispoof": "Ignoriert die Prüfung auf Spoofing (erfordert die Berechtigung <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/diq.json b/AntiSpoof/i18n/diq.json
new file mode 100644
index 00000000..82ba928b
--- /dev/null
+++ b/AntiSpoof/i18n/diq.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Erdemaslancan",
+ "Gorizon",
+ "Xoser",
+ "Mirzali"
+ ]
+ },
+ "antispoof-desc": "Hesaban pê skriptê mîxî, nameyê munaneyî bloke keno",
+ "antispoof-conflict-top": "Ena nameyé \"$1\"i ena {{PLURAL:$2|Namey karberi|namey karbera}} zaf paweno:",
+ "antispoof-conflict-bottom": "Ma rica keno ke yewno nameyê karberî mucneno.",
+ "antispoof-name-illegal": "Nameyê \"$1\"î nieşkeno nameyê karberî ke şweş keno înan vindarne: $2.\nYewna name weçine.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "Tipê data yê xirabî",
+ "antispoof-empty": "Stringê vengî",
+ "antispoof-blacklisted": "$1'i miyan de karaktero xırab esto",
+ "antispoof-combining": "Sembol dê $1 grênayışi ra nata yeno",
+ "antispoof-unassigned": "$1 zerre de çiyo xırab esto",
+ "antispoof-deprecated": "$1 miyan de karaktero xırabın esto",
+ "antispoof-noletters": "Yew zi herf çini yo",
+ "antispoof-mixedscripts": "Te de skriptanê xeripîyaye esto",
+ "antispoof-tooshort": "Ena name zaf kilm o",
+ "antispoof-ignore": "Kontrolê spoofî rê diket meke",
+ "right-override-antispoof": "Kontrolanê spoofî override bike"
+}
diff --git a/AntiSpoof/i18n/dsb.json b/AntiSpoof/i18n/dsb.json
new file mode 100644
index 00000000..f9d86ae7
--- /dev/null
+++ b/AntiSpoof/i18n/dsb.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "antispoof-desc": "Blokěrujo napóranje kontow z měšanym pismom, mjerwjece a pódobne wužywarske mjenja",
+ "antispoof-conflict-top": "Mě \"$1\" jo pśepódobny {{PLURAL:$2|slědujucemu wužywarskemu mjenjeju|slědujucyma wužywarskima mjenjoma|slědujucym wužywarskim mjenjam}}:",
+ "antispoof-conflict-bottom": "Pšosym wubjeŕ druge mě.",
+ "antispoof-name-illegal": "Mě \"$1\" se njedowólujo, aby se mjerwjece abo manipulěrowane wužywarske mjenja wopinuli: $2. Wubjeŕ pšosym druge mě.",
+ "antispoof-badtype": "Wopacny datowy typ",
+ "antispoof-empty": "Prozne pólo",
+ "antispoof-blacklisted": "Wopśimujo njedowólone znamuško $1",
+ "antispoof-combining": "Zachopina se ze znamuškoweju kombinaciju $1",
+ "antispoof-unassigned": "Wopśimujo njepśirědowane abo njewitane znamuško",
+ "antispoof-deprecated": "Wopśimujo zestarjone znamuško $1",
+ "antispoof-noletters": "Njewopśimjejo pismiki",
+ "antispoof-mixedscripts": "Wopśimjejo znamješka z njekompatibelnych rozdźělnych pismow",
+ "antispoof-tooshort": "Kanonizěrowane mě jo pśekrotko.",
+ "antispoof-ignore": "Torjeńsku kontrolu ignorěrowaś",
+ "right-override-antispoof": "Kontrole pódobnosći wužywarskich mjenjow pódtłocyś"
+}
diff --git a/AntiSpoof/i18n/dtp.json b/AntiSpoof/i18n/dtp.json
new file mode 100644
index 00000000..4f07c44e
--- /dev/null
+++ b/AntiSpoof/i18n/dtp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "FRANELYA"
+ ]
+ },
+ "antispoof-conflict-bottom": "Mangai alanai do suai ngaran."
+}
diff --git a/AntiSpoof/i18n/el.json b/AntiSpoof/i18n/el.json
new file mode 100644
index 00000000..85acae2b
--- /dev/null
+++ b/AntiSpoof/i18n/el.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Badseed",
+ "Dead3y3",
+ "Glavkos",
+ "Lou",
+ "Omnipaedista",
+ "ZaDiak",
+ "Stam.nikos"
+ ]
+ },
+ "antispoof-desc": "Μπλοκάρει τη δημιουργία λογαριασμών με χαρακτήρες μικτής γραφής, συγχεχυμένα και παρόμοια ονόματα χρηστών.",
+ "antispoof-conflict-top": "Το όνομα «$1» είναι υπερβολικά όμοιο με {{PLURAL:$2|το παρακάτω όνομα χρήστη|τα παρακάτω ονόματα χρηστών}}:",
+ "antispoof-conflict-bottom": "Διαλέξτε ένα διαφορετικό όνομα.",
+ "antispoof-name-illegal": "Το όνομα \"$1\" δεν επιτρέπεται, για την αποτροπή συγκεχυμένων ή απατηλών ονομάτων χρηστών: $2. Παρακαλώ διαλέξτε ένα άλλο όνομα.",
+ "antispoof-badtype": "Εσφαλμένος τύπος δεδομένων",
+ "antispoof-empty": "Κενή συμβολοσειρά",
+ "antispoof-blacklisted": "Περιέχει ανεπιθύμητο χαρακτήρα $1",
+ "antispoof-combining": "Αρχίζει με τον ειδικό χαρακτήρα $1",
+ "antispoof-unassigned": "Περιέχει μη καταχωρημένο χαρακτήρα $1",
+ "antispoof-noletters": "Δεν περιέχει καθόλου γράμματα",
+ "antispoof-mixedscripts": "Περιέχει ανεμιγμένους ασύμβατους χαρακτήρες γραπτού κειμένου",
+ "antispoof-tooshort": "Κανονικοποιημένο όνομα πολύ μικρό",
+ "antispoof-ignore": "Αγνόησε ελέγχους spoofing",
+ "right-override-antispoof": "Υπερκάλυψη των ελέγχων εξαπάτησης"
+}
diff --git a/AntiSpoof/i18n/en-gb.json b/AntiSpoof/i18n/en-gb.json
new file mode 100644
index 00000000..4703ce9a
--- /dev/null
+++ b/AntiSpoof/i18n/en-gb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shirayuki"
+ ]
+ },
+ "antispoof-tooshort": "Canonicalised name too short"
+}
diff --git a/AntiSpoof/i18n/en.json b/AntiSpoof/i18n/en.json
new file mode 100644
index 00000000..c382244c
--- /dev/null
+++ b/AntiSpoof/i18n/en.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "antispoof-desc": "Blocks the creation of accounts with mixed-script, confusing and similar usernames",
+ "antispoof-conflict-top": "The name \"$1\" is too similar to the following {{PLURAL:$2|username|usernames}}:",
+ "antispoof-conflict-item": "$1",
+ "antispoof-conflict-bottom": "Please choose another name.",
+ "antispoof-name-illegal": "The name \"$1\" is not allowed to prevent confusing or spoofed usernames: $2.\nPlease choose another name.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-bad-char-non-printable": "$1",
+ "antispoof-badtype": "Bad data type",
+ "antispoof-empty": "Empty string",
+ "antispoof-blacklisted": "Contains blacklisted character $1",
+ "antispoof-combining": "Begins with combining mark $1",
+ "antispoof-unassigned": "Contains unassigned character $1",
+ "antispoof-deprecated": "Contains deprecated character $1",
+ "antispoof-noletters": "Does not contain any letters",
+ "antispoof-mixedscripts": "Contains incompatible mixed scripts",
+ "antispoof-tooshort": "Canonicalized name too short",
+ "antispoof-ignore": "Ignore spoofing checks",
+ "right-override-antispoof": "Override the spoofing checks",
+ "apihelp-antispoof-description": "Check a username against AntiSpoof's normalisation checks.",
+ "apihelp-antispoof-param-username": "The username to check against AntiSpoof.",
+ "apihelp-antispoof-example-1": "Check username \"Foo\" against AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Ignore spoofing checks (requires the <code>override-antispoof</code> right)."
+}
diff --git a/AntiSpoof/i18n/eo.json b/AntiSpoof/i18n/eo.json
new file mode 100644
index 00000000..cd91348a
--- /dev/null
+++ b/AntiSpoof/i18n/eo.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tlustulimu",
+ "Yekrats",
+ "KuboF"
+ ]
+ },
+ "antispoof-desc": "Blokas la kreadon de kontoj kun miksitaj alfabetaj, konfuzemaj, kaj similaj salutnomoj",
+ "antispoof-conflict-top": "La nomo \"$1\" tro similas al la {{PLURAL:$2|jenan konton|jenajn $2 kontojn}}:",
+ "antispoof-conflict-bottom": "Bonvolu elekti alian nomon.",
+ "antispoof-name-illegal": "La nomo \"$1\" ne estas permesita por preventi konfuzigemajn aŭ trompajn uzantnomojn: $2. Bonvolu elekti alian nomon.",
+ "antispoof-badtype": "Malvalida datumtipo",
+ "antispoof-empty": "Malplena bitĉeno",
+ "antispoof-blacklisted": "Enhavas literojn el nigra listo $1",
+ "antispoof-combining": "Komencas kun kuniga marko $1",
+ "antispoof-unassigned": "Enhavas neatribuitan signon $1",
+ "antispoof-deprecated": "Enhavas evitindan signon $1",
+ "antispoof-noletters": "Enhavas neniujn literojn",
+ "antispoof-mixedscripts": "Enhavas nekompatibilajn miksajn skriptojn",
+ "antispoof-tooshort": "Ordigita nomo estas tro mallonga",
+ "antispoof-ignore": "Ignori kontroladon de trompado",
+ "right-override-antispoof": "Superebligi la artifikajn kontrolojn."
+}
diff --git a/AntiSpoof/i18n/es.json b/AntiSpoof/i18n/es.json
new file mode 100644
index 00000000..140e27be
--- /dev/null
+++ b/AntiSpoof/i18n/es.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Armando-Martin",
+ "Cvmontuy",
+ "Fitoschido",
+ "Icvav",
+ "Locos epraix",
+ "Platonides",
+ "Remember the dot",
+ "Sanbec",
+ "Titoxd",
+ "VegaDark",
+ "Themasterriot",
+ "Ryo567",
+ "Macofe",
+ "MarcoAurelio"
+ ]
+ },
+ "antispoof-desc": "Previene la creación de cuentas de usuario nuevas que tengan nombres confusos, similares a nombres existentes, o con alfabetos mixtos.",
+ "antispoof-conflict-top": "El nombre «$1» es muy similar al de {{PLURAL:$2|la siguiente cuenta|las siguientes cuentas}}:",
+ "antispoof-conflict-bottom": "Elige otro nombre.",
+ "antispoof-name-illegal": "El nombre «$1» no está permitido para evitar nombres de usuario confusos o suplantaciones: $2. Por favor, elige otro nombre.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "Tipo de dato erróneo",
+ "antispoof-empty": "Texto vacío",
+ "antispoof-blacklisted": "Contiene el carácter no permitido $1",
+ "antispoof-combining": "Comienza por la marca de combinación $1",
+ "antispoof-unassigned": "Contiene el carácter sin asignar $1",
+ "antispoof-deprecated": "Contiene el carácter desaconsejado $1",
+ "antispoof-noletters": "No contiene letras",
+ "antispoof-mixedscripts": "Contiene una mezcla incompatible de alfabetos",
+ "antispoof-tooshort": "Nombre en forma canónica demasiado corto",
+ "antispoof-ignore": "Ignorar comprobaciones contra suplantaciones",
+ "right-override-antispoof": "Anula las comprobaciones de suplantación",
+ "apihelp-antispoof-description": "Comprobar un nombre de usuario contra las comprobación de normalización del sistema AntiSpoof",
+ "apihelp-antispoof-param-username": "El nombre de usuario a comprobar contra el sistema AntiSpoof.",
+ "apihelp-antispoof-example-1": "Comprobar nombre de usuario \"Foo\" contra el sistema AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Ignorar verificación contra la suplantación de identidad (antispoof) (necesita el permiso <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/et.json b/AntiSpoof/i18n/et.json
new file mode 100644
index 00000000..5e19cad1
--- /dev/null
+++ b/AntiSpoof/i18n/et.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pikne"
+ ]
+ },
+ "antispoof-desc": "Blokeerib erinevaid kirjasüsteeme kasutavate, eksitavate ja sarnaste kasutajanimedega kontode loomise.",
+ "antispoof-conflict-top": "Nimi \"$1\" on liiga sarnane {{PLURAL:$2|järgmise kasutajanimega|järgmiste kasutajanimedega}}:",
+ "antispoof-conflict-bottom": "Palun vali teine nimi.",
+ "antispoof-name-illegal": "Nimi \"$1\" ei ole lubatud, et vältida eksitavaid või tüssavaid kasutajanimesid: $2.\nPalun vali teistsugune nimi.",
+ "antispoof-badtype": "Halb andmetüüp",
+ "antispoof-empty": "Tühi sõne",
+ "antispoof-blacklisted": "Sisaldab mustas nimekirjas olevat märki $1.",
+ "antispoof-combining": "Algab kombineeruva märgiga $1.",
+ "antispoof-unassigned": "Sisaldab kinnistamata märki $1.",
+ "antispoof-deprecated": "Sisaldab ebasoovitatavat märki $1.",
+ "antispoof-noletters": "Ei sisalda ühtegi tähte",
+ "antispoof-mixedscripts": "Sisaldab ühildumatuid kirjasüsteeme",
+ "antispoof-tooshort": "Kanooniline nimi on liiga lühike",
+ "antispoof-ignore": "Eira sarnasuskontrolle",
+ "right-override-antispoof": "Alistada sarnasuskontrollid",
+ "apihelp-antispoof-description": "Kasutajanime kontrollimine tüssamisvastaste normaliseerimiskontrollide vastu.",
+ "apihelp-antispoof-param-username": "Kasutajanimi, mida tüssamisvastase kontrolli vastu kontrollida.",
+ "apihelp-antispoof-example-1": "Kontrolli kasutajanime \"Foo\" tüssamisvastase kontrolli vastu"
+}
diff --git a/AntiSpoof/i18n/eu.json b/AntiSpoof/i18n/eu.json
new file mode 100644
index 00000000..8e45a015
--- /dev/null
+++ b/AntiSpoof/i18n/eu.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joxemai",
+ "Kobazulo"
+ ]
+ },
+ "antispoof-conflict-bottom": "Mesedez, beste izen bat aukeratu.",
+ "antispoof-name-illegal": "\"$1\" izena ez dago onartuta gaizkiulertuak saihesteko: $2. Beste izen bat hautatu mesedez.",
+ "antispoof-badtype": "Datu mota ezegokia",
+ "antispoof-empty": "Kate hutsa",
+ "antispoof-noletters": "Ez dauka letrarik",
+ "antispoof-tooshort": "Izen kanonikoa laburregia"
+}
diff --git a/AntiSpoof/i18n/fa.json b/AntiSpoof/i18n/fa.json
new file mode 100644
index 00000000..25238fcf
--- /dev/null
+++ b/AntiSpoof/i18n/fa.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ebraminio",
+ "Hooshmand.hasannia",
+ "Huji",
+ "Omidh",
+ "Reza1615",
+ "Surena",
+ "ZxxZxxZ",
+ "Dalba"
+ ]
+ },
+ "antispoof-desc": "از ایجاد حساب‌های کاربری با حروف مختلط، گیج‌کننده یا مشابه با دیگر حساب‌های کاربری جلوگیری می‌کند",
+ "antispoof-conflict-top": "نام «$1» خیلی به {{PLURAL:$2|این حساب کاربری|این حساب‌های کاربری}} شباهت دارد.",
+ "antispoof-conflict-bottom": "لطفاً نام دیگری انتخاب کنید.",
+ "antispoof-name-illegal": "نام «$1» به دلیل جلوگیری از نام‌های کاربری سردرگم‌کننده یا جعلی مجاز نیست: $2. لطفاً نام دیگری انتخاب کنید.",
+ "antispoof-badtype": "داده با نوع نامناسب",
+ "antispoof-empty": "رشتهٔ خالی",
+ "antispoof-blacklisted": "حاوی نویسهٔ $1 است که در فهرست سیاه قرار دارد",
+ "antispoof-combining": "با علامت جمع $1 شروع می‌شود",
+ "antispoof-unassigned": "دارای نویسه‌های تعیین‌نشده یا نامناسب است",
+ "antispoof-deprecated": "شامل نویسهٔ قبیح $1",
+ "antispoof-noletters": "دربردارندهٔ هیچ حرفی نیست.",
+ "antispoof-mixedscripts": "حاوی نویسه‌های مختلط ناسازگار است",
+ "antispoof-tooshort": "نام متعارف خیلی کوتاه است",
+ "antispoof-ignore": "نادیده‌گرفتن بررسی عبارات سردرگم‌کننده",
+ "right-override-antispoof": "گذر از بررسی عبارات سردرگم‌کننده",
+ "apihelp-antispoof-description": "بررسی یک نام‌ کاربری بر طبق نرمال‌سازی‌های ضدجعل.",
+ "apihelp-antispoof-param-username": "نام کاربری‌ای که با ضدجعل بررسی می‌شود.",
+ "apihelp-antispoof-example-1": "بررسی نام کاربر «Foo» با ضدجعل"
+}
diff --git a/AntiSpoof/i18n/fi.json b/AntiSpoof/i18n/fi.json
new file mode 100644
index 00000000..ecc51ace
--- /dev/null
+++ b/AntiSpoof/i18n/fi.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crt",
+ "Linnea",
+ "Nike",
+ "Samoasambia",
+ "Silvonen",
+ "Str4nd"
+ ]
+ },
+ "antispoof-desc": "Estää käyttäjätunnusten luonnin, jos ne sisältävät eri kirjoitusjärjestelmiä, harhaanjohtavia tai samankaltaisia käyttäjätunnuksia.",
+ "antispoof-conflict-top": "Tunnus ”$1” on liian samankaltainen kuin {{PLURAL:$2|olemassa oleva tunnus|seuraavat $2 tunnusta}}:",
+ "antispoof-conflict-bottom": "Valitse toinen tunnus.",
+ "antispoof-name-illegal": "Tunnusta ”$1” ei sallita, koska $2. Hämäävien tai huijaustarkoitukseen sopivien tunnusten luonti on estetty. Valitse toinen tunnus.",
+ "antispoof-badtype": "Virheellinen tietotyyppi",
+ "antispoof-empty": "Tyhjä merkkijono",
+ "antispoof-blacklisted": "Sisältää kielletyn merkin $1",
+ "antispoof-combining": "Alkaa yhdistävällä merkillä $1",
+ "antispoof-unassigned": "Sisältää määrittämättömiä merkkejä $1",
+ "antispoof-deprecated": "Sisältää kielletyn merkin $1",
+ "antispoof-noletters": "Ei sisällä mitään kirjaimia",
+ "antispoof-mixedscripts": "se sisältää yhteensopimattomia kirjoitusjärjestelmiä",
+ "antispoof-tooshort": "sen kanonisoitu muoto on liian lyhyt",
+ "antispoof-ignore": "Älä käytä hämäävien tunnusten tarkistusta",
+ "right-override-antispoof": "Ohittaa tarkastukset samankaltaisista tai epäilyttävistä käyttäjätunnuksista"
+}
diff --git a/AntiSpoof/i18n/fo.json b/AntiSpoof/i18n/fo.json
new file mode 100644
index 00000000..21dd2c42
--- /dev/null
+++ b/AntiSpoof/i18n/fo.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "EileenSanda"
+ ]
+ },
+ "antispoof-desc": "Blokkerar fyri upprættan av konti við blandaðum teknum, forvirrandi ella líknandi brúkaranøvnum",
+ "antispoof-conflict-top": "Navnið \"$1\" líkist ov nógv fylgjandi {{PLURAL:$2|brúkaranavni|brúkaranøvnum}}:",
+ "antispoof-conflict-bottom": "Vinarliga vel eitt annað navn.",
+ "antispoof-name-illegal": "Navnið \"$1\" er ikki loyvt til tess at fyribyrgja følsk ella forvirrandi brúkaranøvn: $2.",
+ "antispoof-badtype": "Ringt slag av data.",
+ "antispoof-empty": "Tøm strongin",
+ "antispoof-blacklisted": "Inniheldur tekn sum eru á svaralista $1",
+ "antispoof-combining": "Byrjar við kombinatións tekni $1",
+ "antispoof-unassigned": "Inniheldur óbrúktar bókstavar $1",
+ "antispoof-deprecated": "Inniheldur ikki loyvda teknið $1",
+ "antispoof-noletters": "Inniheldur ikki nakran bókstav",
+ "antispoof-tooshort": "Navnið er ov stutt",
+ "antispoof-ignore": "Síggj burtur frá \"spoofing\" kanning",
+ "apihelp-antispoof-param-username": "Brúkaranavnið ið skal kannast móti AntiSpoof.",
+ "apihelp-antispoof-example-1": "Kanna brúkaranavnið \"Foo\" móti AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/fr.json b/AntiSpoof/i18n/fr.json
new file mode 100644
index 00000000..c90f1b0a
--- /dev/null
+++ b/AntiSpoof/i18n/fr.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "DavidL",
+ "Gomoko",
+ "Grondin",
+ "IAlex",
+ "Louperivois",
+ "PieRRoMaN",
+ "Sherbrooke",
+ "Urhixidur",
+ "Verdy p"
+ ]
+ },
+ "antispoof-desc": "Bloque la création de comptes ayant des noms d’utilisateur similaires, utilisant diverses écritures, ou pouvant prêter à confusion",
+ "antispoof-conflict-top": "Le nom « $1 » est trop similaire {{PLURAL:$2|à l’utilisateur suivant|aux utilisateurs suivants}} :",
+ "antispoof-conflict-bottom": "Veuillez choisir un autre nom.",
+ "antispoof-name-illegal": "Le nom d’utilisateur « $1 » n’est pas autorisé pour la raison suivante : « $2 ».\nVeuillez choisir un autre nom.",
+ "antispoof-bad-char": "‹$1› ($2)",
+ "antispoof-badtype": "Mauvais type de données",
+ "antispoof-empty": "Chaîne vide",
+ "antispoof-blacklisted": "Contient le caractère interdit $1",
+ "antispoof-combining": "Commence avec une marque combinatoire $1",
+ "antispoof-unassigned": "Contient un caractère non assigné $1",
+ "antispoof-deprecated": "Contient le caractère désuet $1",
+ "antispoof-noletters": "Ne contient aucune lettre",
+ "antispoof-mixedscripts": "Contient plusieurs écritures incompatibles",
+ "antispoof-tooshort": "Nom canonique trop court",
+ "antispoof-ignore": "Ignorer la vérification de similitude avec les utilisateurs existants",
+ "right-override-antispoof": "Court-circuiter les vérifications de tromperie",
+ "apihelp-antispoof-description": "Vérifier un nom d’utilisateur d’après les contrôles de normalisation AntiSpoof.",
+ "apihelp-antispoof-param-username": "Le nom d’utilisateur à vérifier d’après AntiSpoof.",
+ "apihelp-antispoof-example-1": "Vérifier le nom d’utilisateur « Foo » d’après AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Ignorer les contrôles d’usurpation (nécessite le droit <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/frc.json b/AntiSpoof/i18n/frc.json
new file mode 100644
index 00000000..2b0f57f9
--- /dev/null
+++ b/AntiSpoof/i18n/frc.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "JeanVoisin",
+ "Hangmanwa7id"
+ ]
+ },
+ "antispoof-name-illegal": "Le nom \"$1\" est pas permit pour empêcher de confondre ou d'user le nom \"$2\". Choisissez donc un autre nom.",
+ "antispoof-badtype": "Mauvaise qualité d'information",
+ "antispoof-empty": "Chaîne vide",
+ "antispoof-blacklisted": "Contient le caractère pas permit $1",
+ "antispoof-combining": "Commence avec la marque combinée $1",
+ "antispoof-unassigned": "Contient le caractère pas assigné ou désapprouvé $1",
+ "antispoof-deprecated": "Contient le caractère désuet $1",
+ "antispoof-noletters": "Contient pas de lettres",
+ "antispoof-mixedscripts": "Contient plusieurs scripts qui s'adonnont pas",
+ "antispoof-tooshort": "Le nom choisi est trop court"
+}
diff --git a/AntiSpoof/i18n/frp.json b/AntiSpoof/i18n/frp.json
new file mode 100644
index 00000000..5952ded7
--- /dev/null
+++ b/AntiSpoof/i18n/frp.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "antispoof-desc": "Dèfend la crèacion de comptos qu’utilisont un mouél d’ècritures avouéc des noms d’usanciér semblâblos, ou ben que pôvont prétar a confusion.",
+ "antispoof-conflict-top": "Lo nom « $1 » est trop pariér {{PLURAL:$2|u compto ègzistent|a cetos $2 comptos}} :",
+ "antispoof-conflict-bottom": "Volyéd chouèsir un ôtro nom.",
+ "antispoof-name-illegal": "Lo nom d’usanciér « $1 » est pas ôtorisâ por empachiér de confondre ou ben d’utilisar lo nom « $2 ».\nVolyéd chouèsir un ôtro nom.",
+ "antispoof-badtype": "Crouyo tipo de balyês",
+ "antispoof-empty": "Chêna voueda",
+ "antispoof-blacklisted": "Contint lo caractèro de la lista nêre $1",
+ "antispoof-combining": "Comence avouéc na mârca combinâye $1",
+ "antispoof-unassigned": "Contint lo caractèro pas assignê $1",
+ "antispoof-deprecated": "Contint lo caractèro dèfendu $1",
+ "antispoof-noletters": "Contint gins de lètra.",
+ "antispoof-mixedscripts": "Contint un mouél d’ècritures que vont pas avouéc.",
+ "antispoof-tooshort": "Nom canonico trop côrt",
+ "antispoof-ignore": "Ignorar los contrôlos de frôda",
+ "right-override-antispoof": "Ignorar los contrôlos de frôda"
+}
diff --git a/AntiSpoof/i18n/frr.json b/AntiSpoof/i18n/frr.json
new file mode 100644
index 00000000..423d879f
--- /dev/null
+++ b/AntiSpoof/i18n/frr.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "antispoof-desc": "Ferhanert det iinrachten faan brükerkontos mä aparte tiakens of nöömer, diar dü lacht ferwaksle könst",
+ "antispoof-conflict-top": "Di brükernööm „$1“ as bal disalew üs {{PLURAL:$2|didiar brükernööm|jodiar $2 brükernöömer}}:",
+ "antispoof-conflict-bottom": "Wees so gud an nem en öödern brükernööm.",
+ "antispoof-name-illegal": "Didiar brükernööm „$1“ gongt ei. Grünj: $2<br />Wees so gud an nem en öödern nööm.",
+ "antispoof-badtype": "Ferkiard dooten-typ",
+ "antispoof-empty": "Leesag fial",
+ "antispoof-blacklisted": "Diar as det ei tuläät tiaken $1 uun.",
+ "antispoof-combining": "Begant mä en ferbinjangs-tiaken $1",
+ "antispoof-unassigned": "Diar as det ünbekäänd tiaken $1 uun.",
+ "antispoof-deprecated": "Diar as det ei tuläät tiaken $1 uun.",
+ "antispoof-noletters": "Diar san nian buksteewen uun.",
+ "antispoof-mixedscripts": "Diar san tiakens faan ünlik skraft-süsteemen uun.",
+ "antispoof-tooshort": "Di nööm as tu kurt.",
+ "antispoof-ignore": "Ei efter nai nöömer schük",
+ "right-override-antispoof": "Det preew efter ünpaasin nöömer hialandaal ufstel",
+ "apihelp-antispoof-description": "En brükernööm uun det normoolisiarangs-preew faan AntiSpoof apnem.",
+ "apihelp-antispoof-param-username": "Di brükernööm, di mä AntiSpoof preewet wurd skal.",
+ "apihelp-antispoof-example-1": "Di brükernööm „Foo“ mä AntiSpoof preewe.",
+ "apihelp-createaccount-param-ignoreantispoof": "Auergongt det spoofing-preew (wan det rocht <code>override-antispoof</code> föörleit)."
+}
diff --git a/AntiSpoof/i18n/gd.json b/AntiSpoof/i18n/gd.json
new file mode 100644
index 00000000..d3ba3f52
--- /dev/null
+++ b/AntiSpoof/i18n/gd.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "GunChleoc"
+ ]
+ },
+ "antispoof-desc": "Bacaidh seo cruthachadh chunntasan le ainm-cleachdaiche sa bheil sgriobt measgaichte, a tha breisleachail no ro choltach air ainm eile",
+ "antispoof-conflict-top": "Tha an t-ainm \"$1\" ro coltach ris {{PLURAL:$2|an ainm|na h-ainmean}} seo:",
+ "antispoof-conflict-bottom": "Feuch an tagh thu ainm eile.",
+ "antispoof-name-illegal": "Chan eil an t-ainm \"$1\" ceadaichte a chum dìona o ainmean-cleachdaiche a tha ro choltach ri chèile no a bheir an car à ainm eile: $2.\nFeuch an tagh thu ainm eile.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "Droch sheòrsa dàta",
+ "antispoof-empty": "Sreang falamh",
+ "antispoof-blacklisted": "Tha caractar ann a tha air an dubh-liosta: $1",
+ "antispoof-combining": "Tha e a' tòiseachadh le comharra nasgach: $1",
+ "antispoof-unassigned": "Tha caractar gun sònrachadh ann: $1",
+ "antispoof-deprecated": "Tha caractar ann nach molar tuilleadh: $1",
+ "antispoof-noletters": "Chan eil litir ann",
+ "antispoof-mixedscripts": "Tha sgriobtaichean measgaichte neo-chòrdail ann",
+ "antispoof-ignore": "Leig seachad an dearbhadh nach dèid car a thoirt às",
+ "right-override-antispoof": "Tar-àithn an dearbhadh nach dèid car a thoirt às"
+}
diff --git a/AntiSpoof/i18n/gl.json b/AntiSpoof/i18n/gl.json
new file mode 100644
index 00000000..346c4edd
--- /dev/null
+++ b/AntiSpoof/i18n/gl.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alma",
+ "Toliño",
+ "Banjo"
+ ]
+ },
+ "antispoof-desc": "Bloquea a creación de contas con escrituras mesturadas, confusas ou con nomes de usuario similares",
+ "antispoof-conflict-top": "O nome \"$1\" é moi similar {{PLURAL:$2|ao seguinte nome|aos seguintes nomes}} de usuario:",
+ "antispoof-conflict-bottom": "Por favor, escolla outro nome.",
+ "antispoof-name-illegal": "O nome \"$1\" non está permitido para evitar confusións ou enganos cos seguintes nomes de usuario: $2. Por favor, escolla outro nome.",
+ "antispoof-badtype": "Tipo de datos incorrecto",
+ "antispoof-empty": "Cadea baleira",
+ "antispoof-blacklisted": "Contén o carácter $1, presente na lista negra",
+ "antispoof-combining": "Comeza coa marca combinatoria $1",
+ "antispoof-unassigned": "Contén o carácter sen asignar $1",
+ "antispoof-deprecated": "Contén o carácter rexeitado $1",
+ "antispoof-noletters": "Non contén ningunha letra",
+ "antispoof-mixedscripts": "Contén guións incompatibles mesturados",
+ "antispoof-tooshort": "Nome curto de máis",
+ "antispoof-ignore": "Ignorar as comprobacións de engaños (spoofing)",
+ "right-override-antispoof": "Ignorar as comprobacións de engaños (spoofing)",
+ "apihelp-antispoof-description": "Comprobar un nome de usuario coas comprobacións de normalización de AntiSpoof",
+ "apihelp-antispoof-param-username": "Nome de usuario a comprobar có AntiSpoof",
+ "apihelp-antispoof-example-1": "Comprobar nome de usuario \"Foo\" có AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Ignorar comprobación de enganos (spoofing) (require o permiso <code>override-antispoof</code>)"
+}
diff --git a/AntiSpoof/i18n/gor.json b/AntiSpoof/i18n/gor.json
new file mode 100644
index 00000000..f875aef9
--- /dev/null
+++ b/AntiSpoof/i18n/gor.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Marwan Mohamad"
+ ]
+ },
+ "antispoof-conflict-bottom": "Toduwolo momili tanggula uwewo",
+ "antispoof-badtype": "Tipe data tilala",
+ "antispoof-empty": "Data kosongi"
+}
diff --git a/AntiSpoof/i18n/grc.json b/AntiSpoof/i18n/grc.json
new file mode 100644
index 00000000..9949e6a5
--- /dev/null
+++ b/AntiSpoof/i18n/grc.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Omnipaedista"
+ ]
+ },
+ "antispoof-conflict-bottom": "Ἐπίλεξαι ἕτερον ὄνομα.",
+ "antispoof-badtype": "Κακὸς τύπος δεδομένων",
+ "antispoof-empty": "Κενὴ συμβολοσειρά",
+ "right-override-antispoof": "Ὑπερκάλυψις τῶν ἐλέγχων ἐξαπατήσεως"
+}
diff --git a/AntiSpoof/i18n/gsw.json b/AntiSpoof/i18n/gsw.json
new file mode 100644
index 00000000..8e1d71ac
--- /dev/null
+++ b/AntiSpoof/i18n/gsw.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder",
+ "Hendergassler"
+ ]
+ },
+ "antispoof-desc": "Verhinderet s Aalege vu Benutzerkonte mit gmischlete Zeichesätz, Benutzernäme wu verwirre oder ähnligs",
+ "antispoof-conflict-top": "Dr Name „$1“ isch {{PLURAL:$2|däm Benutzerkonto|däne $2 Benutzerkonte}} zue ähnli:",
+ "antispoof-conflict-bottom": "Bitte wehl e andere Name.",
+ "antispoof-name-illegal": "Dr Name \"$1\" isch nit gstattet, wel s e Problem chennt gee mit \"$2\". <br />Nimm e andre Name.",
+ "antispoof-badtype": "Datetyp isch nit giltig.",
+ "antispoof-empty": "Läär Fäld",
+ "antispoof-blacklisted": "S het s Zeiche $1 din, wu nit zuelässig isch.",
+ "antispoof-combining": "Fangt aa mit Verbindigszeiche $1",
+ "antispoof-unassigned": "S het s Zeiche $1 din, wo nit zuegordnet oder nit gwinscht isch.",
+ "antispoof-deprecated": "S het s veraltet Zeiche $1 din.",
+ "antispoof-noletters": "S sin kaini Buechstabe din.",
+ "antispoof-mixedscripts": "S sin Zeiche vo unterschidlige Schriftsyschtem din enthalte.",
+ "antispoof-tooshort": "Dr kanonisiert Name isch z churz.",
+ "antispoof-ignore": "Ignorier d Ähnlichkeitspriefig",
+ "right-override-antispoof": "D Benutzernäme-Ähnligkeitspriefig usser Chraft setze"
+}
diff --git a/AntiSpoof/i18n/gu.json b/AntiSpoof/i18n/gu.json
new file mode 100644
index 00000000..4985c180
--- /dev/null
+++ b/AntiSpoof/i18n/gu.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ashok modhvadia",
+ "Dsvyas",
+ "KartikMistry"
+ ]
+ },
+ "antispoof-desc": "મિક્સ્ડ-સ્ક્રિપ્ટ, ગૂંચવણ અને સમાન સભ્યનામો વાળા ખાતાં ખોલવા પર પ્રતિબંધ મુકે છે",
+ "antispoof-conflict-top": "ઈચ્છિત સભ્યનામ \"$1\" નીચેના {{PLURAL:$2|સભ્યનામ|સભ્યનામો}} સાથે ઘણું મળતું આવે છે:",
+ "antispoof-conflict-bottom": "મહેરબાની કરી બીજું નામ પસંદ કરો.",
+ "antispoof-name-illegal": "સંભવત: ગૂંચવણ કે છેતરામણી જનક સભ્યનામ $2 અટકાવવાના હેતુથી સભ્યનામ \"$1\"ની છૂટ નથી.\nકૃપા કરી અન્ય નામ પસંદ કરો.",
+ "antispoof-badtype": "ખરાબ માહિતી પ્રકાર",
+ "antispoof-empty": "ખાલી વાક્ય",
+ "antispoof-blacklisted": "પ્રતિબંધિત અક્ષર $1 ધરાવે છે",
+ "antispoof-combining": "સંયોજક નિશાની $1 થી શરૂ થાય છે",
+ "antispoof-unassigned": "અનિર્દિષ્ટ અક્ષર $1 ધરાવે છે",
+ "antispoof-deprecated": "અનિર્દિષ્ટ અક્ષર $1 ધરાવે છે",
+ "antispoof-noletters": "આમાં એકપણ અક્ષર નથી",
+ "antispoof-mixedscripts": "અસંગત મિક્સ્ડ સ્ક્રિપ્ટ્સ ધરાવે છે",
+ "antispoof-tooshort": "સંક્ષિપ્ત કરેલું નામ ખૂબ નાનું છે",
+ "antispoof-ignore": "છેતરામણી પરિક્ષણને અવગણો",
+ "right-override-antispoof": "છેતરામણી પરિક્ષણની ઉપરવટ જાવ"
+}
diff --git a/AntiSpoof/i18n/hak.json b/AntiSpoof/i18n/hak.json
new file mode 100644
index 00000000..35cfbcf7
--- /dev/null
+++ b/AntiSpoof/i18n/hak.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "EagerLin",
+ "Hakka"
+ ]
+ },
+ "antispoof-name-illegal": "Yung-fu-miàng \"$1\" yi-lâu Yung-fu-miàng \"$2\" fun-chha̍p, yí-kîn pûn kim-chṳ́ sṳ́-yung. Chhiáng sṳ́-yung khì-thâ ke yung-fu-miàng.",
+ "antispoof-badtype": "Chho-ngu ke chṳ̂-liau lui-hìn/錯誤个數據類型",
+ "antispoof-empty": "Khûng-pha̍k sṳ-chhon/空白字串",
+ "antispoof-blacklisted": "Pâu-hàm chhai het-miàng-tân song ke sṳ-ngièn",
+ "antispoof-combining": "Chhut-yì kiet-ha̍p phêu-ki khôi-sṳ́",
+ "antispoof-unassigned": "Pâu-hàm mò chṳ́-thin fe̍t-he put-chai sṳ́-yung ke sṳ-ngièn",
+ "antispoof-noletters": "Mò pâu-hàm ngim-hò sṳ-ngièn/沒包含任何字元",
+ "antispoof-mixedscripts": "Pâu-hàm mò siong-yùng fun-ha̍p ke chṳ́-lin",
+ "antispoof-tooshort": "Ha̍p-fù phêu-chún ke miàng-chhṳ̂n thai-tón"
+}
diff --git a/AntiSpoof/i18n/he.json b/AntiSpoof/i18n/he.json
new file mode 100644
index 00000000..5971fcda
--- /dev/null
+++ b/AntiSpoof/i18n/he.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Guycn1",
+ "Guycn2",
+ "Rotem Liss"
+ ]
+ },
+ "antispoof-desc": "לא מאפשר יצירה של חשבונות עם סוגי כתב מעורבים, חשבונות עם שמות מבלבלים ושמות משתמש דומים",
+ "antispoof-conflict-top": "שם המשתמש \"$1\" דומה מדי {{PLURAL:$2|לחשבון הקיים הבא|לשם המשתמש של $2 החשבונות הקיימים הבאים}}:",
+ "antispoof-conflict-bottom": "נא לבחור שם אחר.",
+ "antispoof-name-illegal": "לא ניתן לבחור את שם המשתמש \"$1\" כדי למנוע שמות משתמש מבלבלים: $2.\nנא לבחור שם משתמש אחר.",
+ "antispoof-badtype": "סוג מידע בעייתי",
+ "antispoof-empty": "מחרוזת ריקה",
+ "antispoof-blacklisted": "מכיל את התו $1 שאסור לשימוש",
+ "antispoof-combining": "מתחיל בסימן $1, שאמור להיות מורכב על אות",
+ "antispoof-unassigned": "מכיל תו לא מוקצה או מיושן",
+ "antispoof-deprecated": "מכיל את התו המיושן $1",
+ "antispoof-noletters": "לא כולל אותיות",
+ "antispoof-mixedscripts": "כולל סוגי כתב מעורבים שאינם תואמים זה לזה",
+ "antispoof-tooshort": "השם המנורמל קצר מדי",
+ "antispoof-ignore": "התעלמות מבדיקת ההתחזות",
+ "right-override-antispoof": "עקיפת בדיקות ההתחזות",
+ "apihelp-antispoof-description": "בדיקת שם משתמש אל מול בדיקות נרמול של AntiSpoof.",
+ "apihelp-antispoof-param-username": "שם משתמש לבדוק אל מול AntiSpoof.",
+ "apihelp-antispoof-example-1": "לבדוק את שם המשתמש Foo אל מול AntiSpoof.",
+ "apihelp-createaccount-param-ignoreantispoof": "להתעלם מבדיקות התחזות (נדרשת הרשאת <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/hi.json b/AntiSpoof/i18n/hi.json
new file mode 100644
index 00000000..a74bbe4a
--- /dev/null
+++ b/AntiSpoof/i18n/hi.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kannankumar",
+ "Kaustubh",
+ "Knight Samar",
+ "Pooja.srivastava",
+ "Shyam123.ckp",
+ "Siddhartha Ghai",
+ "Hindustanilanguage"
+ ]
+ },
+ "antispoof-desc": "मिश्रित लिपि और संभ्रम पैदा करने वाले तथा मिलते-जुलते सदस्यनामों के प्रयोग पर रोक लगाता है।",
+ "antispoof-conflict-top": "\"$1\" नाम निम्न {{PLURAL:$2|सदस्यनाम|सदस्यनामों}} से बहुत मिलता-जुलता है:",
+ "antispoof-conflict-bottom": "कृपया कोई अन्य नाम चुनिये ।",
+ "antispoof-name-illegal": "भ्रामक नामों को रोकने के लिए नाम \"$1\" रखना मना है: $2\nकृपया कोई अन्य नाम चुनिये।",
+ "antispoof-badtype": "गलत डाटा प्रकार",
+ "antispoof-empty": "खाली स्ट्रिंग",
+ "antispoof-blacklisted": "इसमें ब्लैकलिस्टेड कैरैक्टर $1 हैं",
+ "antispoof-combining": "एकत्रिकरण चिन्ह $1 से शुरु होता है",
+ "antispoof-unassigned": "इसमें गलत अक्षर $1 है",
+ "antispoof-deprecated": "पदावनत कैरेक्टर $1 शामिल है",
+ "antispoof-noletters": "इसमें कोई भी अक्षर नहीं हैं",
+ "antispoof-mixedscripts": "इसमें असंगत मिश्र लिपियाँ हैं",
+ "antispoof-tooshort": "अधिकारयुक्त नाम बहुत छोटा हैं",
+ "antispoof-ignore": "स्पूफिंग जाँच नज़रंदाज़ करें",
+ "right-override-antispoof": "स्पूफिंग चेक्स को नजर अंदाज करें"
+}
diff --git a/AntiSpoof/i18n/hif-latn.json b/AntiSpoof/i18n/hif-latn.json
new file mode 100644
index 00000000..0777a635
--- /dev/null
+++ b/AntiSpoof/i18n/hif-latn.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Girmitya",
+ "Thakurji"
+ ]
+ },
+ "antispoof-desc": "Ii waisan acount jisme mixed-script, nai to kharaab username hae, ke banae ke roke hae.",
+ "antispoof-conflict-top": "Naam \"$1\" {{PLURAL:$2|username|usernames}} abhi ke usename ke rakam hae:",
+ "antispoof-conflict-bottom": "Merbaani kar ke duusra naam ke choose karo.",
+ "antispoof-name-illegal": "Naam \"$1\" ke nai kaam me laawa jaae sake hae, duusra naam se confuse nai kare ke khatir: $2\nMeharbaani kar ke duusra naam ke choose karo.",
+ "antispoof-badtype": "Kharaab data type",
+ "antispoof-empty": "Khaali string",
+ "antispoof-blacklisted": "Isme blacklisted character $1 hae",
+ "antispoof-combining": "Jorre waala mark $1 se suruu karo",
+ "antispoof-unassigned": "Isme unassigned akchhar $1 hae",
+ "antispoof-deprecated": "Isme deprecated akchhar $1 hae",
+ "antispoof-noletters": "Isme koi letter nai hae",
+ "antispoof-mixedscripts": "Isme incompatible mixed script hae",
+ "antispoof-tooshort": "Canonicalized naam bahut chhota hae",
+ "antispoof-ignore": "Spooling check ke ignore kar do",
+ "right-override-antispoof": "Spooling checks ke override karaa jaawe hae",
+ "apihelp-antispoof-description": "Check a username against AntiSpoof's normalisation checks.",
+ "apihelp-antispoof-param-username": "The username to check against AntiSpoof.",
+ "apihelp-antispoof-example-1": "Check username \"Foo\" against AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/hr.json b/AntiSpoof/i18n/hr.json
new file mode 100644
index 00000000..ddf972c2
--- /dev/null
+++ b/AntiSpoof/i18n/hr.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalibor Bosits",
+ "SpeedyGonsales"
+ ]
+ },
+ "antispoof-desc": "Sprečava stvaranje sličnih i nepravilnih suradničkih računa",
+ "antispoof-conflict-top": "Ime \"$1\" je previše slično već {{PLURAL:$2|postojećem imenu|$2 postojećih imena}}:",
+ "antispoof-conflict-bottom": "Molimo odaberite drugo ime.",
+ "antispoof-name-illegal": "Ime \"$1\" nije dozvoljeno da se spriječi moguća zamjena suradničkih nadimaka: $2. Molimo izaberite drugo ime/nadimak.",
+ "antispoof-badtype": "Krivi tip podataka",
+ "antispoof-empty": "Prazan string",
+ "antispoof-blacklisted": "Sadrži nedozvoljeno slovo (karakter)",
+ "antispoof-combining": "Počinje s znakom spajanja",
+ "antispoof-unassigned": "Sadrži nedodijeljen ili zastarjeli znak (karakter)",
+ "antispoof-noletters": "Prekratko",
+ "antispoof-mixedscripts": "Nekompatibilna pisma",
+ "antispoof-tooshort": "Prekratko ime",
+ "antispoof-ignore": "Ignoriraj provjeru nevaljanih imena (antispoof)",
+ "right-override-antispoof": "Premošćivanje spoofing provjere"
+}
diff --git a/AntiSpoof/i18n/hrx.json b/AntiSpoof/i18n/hrx.json
new file mode 100644
index 00000000..91730a69
--- /dev/null
+++ b/AntiSpoof/i18n/hrx.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Paul Beppler"
+ ]
+ },
+ "antispoof-conflict-bottom": "Bittschön wähl en annre Benutzernoome.",
+ "antispoof-badtype": "Ungülticher Datentyp",
+ "antispoof-empty": "Leeres Feld",
+ "antispoof-ignore": "Ähnlichkeitsprüfung ignoriere"
+}
diff --git a/AntiSpoof/i18n/hsb.json b/AntiSpoof/i18n/hsb.json
new file mode 100644
index 00000000..4f2b4aae
--- /dev/null
+++ b/AntiSpoof/i18n/hsb.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "antispoof-desc": "Blokuje wutworjenje kontow z měšanymi pismami, skonfuznjacymi a podobnymi wužiwarskimi mjenami",
+ "antispoof-conflict-top": "Mjeno \"$1\" je přepodobny {{PLURAL:$2|slědowacemu wužiwarskemu mjenu|slědowacymaj wužiwarskimaj mjenomaj|slědowacym wužiwarskim mjenam}}:",
+ "antispoof-conflict-bottom": "Prošu wubjer druhe mjeno.",
+ "antispoof-name-illegal": "Požadane wužiwarske mjeno „$1” njeje dowolene. Přičina: $2<br />Prošu wubjer druhe wužiwarske mjeno.",
+ "antispoof-badtype": "Njepłaćiwy datowy typ",
+ "antispoof-empty": "Prózdne polo",
+ "antispoof-blacklisted": "Wobsahuje njedowolene znamješko $1",
+ "antispoof-combining": "Započina so ze znamješkowej kombinaciju $1",
+ "antispoof-unassigned": "Wobsahuje njepřirjadowane abo njewitane znamješko",
+ "antispoof-deprecated": "Wobsahuje zestarjene znamješko $1",
+ "antispoof-noletters": "Njejsu pismiki wobsahowane.",
+ "antispoof-mixedscripts": "Su znamješka rozdźělnych njekompatibelnych pismow wobsahowane",
+ "antispoof-tooshort": "Kanonizowane mjeno je překrótke.",
+ "antispoof-ignore": "Zamylensku kontrolu ignorować",
+ "right-override-antispoof": "Kontrole podobnosće wužiwarskich mjenow potłóčić"
+}
diff --git a/AntiSpoof/i18n/ht.json b/AntiSpoof/i18n/ht.json
new file mode 100644
index 00000000..9327a51c
--- /dev/null
+++ b/AntiSpoof/i18n/ht.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Boukman",
+ "Masterches"
+ ]
+ },
+ "antispoof-desc": "Bloke kreyasyon kont ki genyen diferan alfabèt, ki ka mennen nan konfizyon oubyen ki genyen non itilizatè ki sanble trop",
+ "antispoof-name-illegal": "Non itilizatè \"$1\" pa otorize pou anpeche li konfonn ak non itilizatè: \"$2\"\nTanpri chwazi yon lòt non.",
+ "antispoof-badtype": "Tip done sa yo move",
+ "antispoof-empty": "Chèn vid",
+ "antispoof-blacklisted": "Kontni yon karaktè ki pa otorize",
+ "antispoof-combining": "Ap koumanse avèk yon mak konbine",
+ "antispoof-unassigned": "Kontni yon karaktè ki pa asiyen oubyen ki pa itilize ankò",
+ "antispoof-noletters": "Pa kontni pyès lèt",
+ "antispoof-mixedscripts": "Kontni plizyè alfabèt ki pa konpatib",
+ "antispoof-tooshort": "Non kanonik an two kout"
+}
diff --git a/AntiSpoof/i18n/hu.json b/AntiSpoof/i18n/hu.json
new file mode 100644
index 00000000..179b2aab
--- /dev/null
+++ b/AntiSpoof/i18n/hu.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani",
+ "Dj",
+ "Tacsipacsi"
+ ]
+ },
+ "antispoof-desc": "Letiltja a kevert szövegű, zavaró és hasonló nevű felhasználói fiókok készítését",
+ "antispoof-conflict-top": "A megadott név „$1” túl hasonló a következő {{PLURAL:$2|azonosítóhoz|azonosítókhoz}}:",
+ "antispoof-conflict-bottom": "Kérlek válassz egy másik nevet.",
+ "antispoof-name-illegal": "A név, „$1”, nem engedélyezett a zavaró vagy becsapó felhasználónevek megelőzése érdekében: $2.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "Hibás adattípus",
+ "antispoof-empty": "Üres szöveg",
+ "antispoof-blacklisted": "Tiltott karaktert tartalmaz: $1",
+ "antispoof-combining": "Összekapcsoló jellel kezdődik: $1",
+ "antispoof-unassigned": "Még nem kiosztott karaktert tartalmaz: $1",
+ "antispoof-deprecated": "Érvénytelen karaktert tartalmaz: $1",
+ "antispoof-noletters": "Nem tartalmaz egyetlen betűt sem",
+ "antispoof-mixedscripts": "Összeférhetetlen kevert szöveget tartalmaz",
+ "antispoof-tooshort": "A kanonizált változat túl rövid",
+ "antispoof-ignore": "Névellenőrzés figyelmen kívül hagyása",
+ "right-override-antispoof": "felhasználói nevek ellenőrzésének figyelmen kívül hagyása"
+}
diff --git a/AntiSpoof/i18n/ia.json b/AntiSpoof/i18n/ia.json
new file mode 100644
index 00000000..94304f29
--- /dev/null
+++ b/AntiSpoof/i18n/ia.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "antispoof-desc": "Bloca le creation de contos con alphabetos mixte, e nomines de utilisator similar o confundente",
+ "antispoof-conflict-top": "Le nomine \"$1\" es troppo similar al sequente {{PLURAL:$2|nomine|nomines}} de usator:",
+ "antispoof-conflict-bottom": "Per favor selige un altere nomine.",
+ "antispoof-name-illegal": "Le nomine \"$1\" non es permittite pro evitar le nomines de usator confundente o falsificate: $2.\nPer favor selige un altere nomine.",
+ "antispoof-badtype": "Mal typo de datos",
+ "antispoof-empty": "Serie de characteres vacue",
+ "antispoof-blacklisted": "Contine le character prohibite $1",
+ "antispoof-combining": "Comencia con le marca combinatori $1",
+ "antispoof-unassigned": "Contine un character non assignate o obsolete",
+ "antispoof-deprecated": "Contine le character $1 que non plus es permittite",
+ "antispoof-noletters": "Non contine alcun litteras",
+ "antispoof-mixedscripts": "Contine un mixtura incompatibile de alphabetos",
+ "antispoof-tooshort": "Nomine canonic troppo curte",
+ "antispoof-ignore": "Ignorar le verificationes contra falsification",
+ "right-override-antispoof": "Ignorar le verificationes contra falsification"
+}
diff --git a/AntiSpoof/i18n/id.json b/AntiSpoof/i18n/id.json
new file mode 100644
index 00000000..00b77c86
--- /dev/null
+++ b/AntiSpoof/i18n/id.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "IvanLanin",
+ "Kenrick95",
+ "Meursault2004",
+ "Rex",
+ "Arifin.wijaya"
+ ]
+ },
+ "antispoof-desc": "Menghalangi pembuatan akun dengan nama pengguna aksara campuran, membingungkan, dan yang mirip",
+ "antispoof-conflict-top": "Nama \"$1\" terlalu mirip dengan {{PLURAL:$2|nama pengguna|nama pengguna}} berikut:",
+ "antispoof-conflict-bottom": "Silakan memilih nama lain.",
+ "antispoof-name-illegal": "Nama \"$1\" tidak diizinkan untuk mencegah kebingungan atau penipuan nama: $2. Harap pilih nama lain.",
+ "antispoof-badtype": "Tipe data salah",
+ "antispoof-empty": "Data kosong",
+ "antispoof-blacklisted": "Mengandung karakter yang tak diizinkan $1",
+ "antispoof-combining": "Dimulai dengan tanda kombinasi $1",
+ "antispoof-unassigned": "Mengandung karakter yang tak diberikan $1",
+ "antispoof-deprecated": "Mengandung karakter yang tak digunakan lagi $1",
+ "antispoof-noletters": "Tidak mengandung huruf apa pun",
+ "antispoof-mixedscripts": "Mengandung huruf campuran yang tak kompatibel",
+ "antispoof-tooshort": "Nama kanonikalisasi terlalu pendek",
+ "antispoof-ignore": "Abaikan pemeriksaan penipuan akun",
+ "right-override-antispoof": "Mengabaikan pengecekan penipuan nama pengguna"
+}
diff --git a/AntiSpoof/i18n/ig.json b/AntiSpoof/i18n/ig.json
new file mode 100644
index 00000000..2888d3dd
--- /dev/null
+++ b/AntiSpoof/i18n/ig.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ukabia"
+ ]
+ },
+ "antispoof-conflict-bottom": "Biko ra áhà ọzọ.",
+ "antispoof-empty": "Cháfù érírí"
+}
diff --git a/AntiSpoof/i18n/ilo.json b/AntiSpoof/i18n/ilo.json
new file mode 100644
index 00000000..a1567f5a
--- /dev/null
+++ b/AntiSpoof/i18n/ilo.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "antispoof-desc": "Serraanna ti panagaramid kadagiti pakabilangan nga addaan iti naglalaok a panagsurat, makaallilaw ken dagiti agpapada a nagan ti agar-aramat",
+ "antispoof-conflict-top": "Ti nagan a \"$1\" ket kapada unay ti sumaganad a {{PLURAL:$2|a nagan ti agar-aramat|a nagan dagiti agar-aramat}}:",
+ "antispoof-conflict-bottom": "Pangngaasi nga agpilika iti sabali a nagan.",
+ "antispoof-name-illegal": "Ti nagan a \"$1\" ket saan a maipalubos a mangpawil ti makaallilaw wenno dagiti naanigaas a nagan ti agar-aramat: $2.\nPangngaasi nga agpili iti sabali a nagan.",
+ "antispoof-badtype": "Dakes a kita ti datos",
+ "antispoof-empty": "Awan linaon a kuerdas",
+ "antispoof-blacklisted": "Naglaon kadagiti naiparit a karakter ti $1",
+ "antispoof-combining": "Nangrugi ti panagtipon ti marka ti $1",
+ "antispoof-unassigned": "Naglaon kadagiti saan a nainaganan wenno nasukatanen a karakter ti $1",
+ "antispoof-deprecated": "Naglaon ti nasukatanen a karakter ti $1",
+ "antispoof-noletters": "Saan nga aglaon kadagiti ania man a letra",
+ "antispoof-mixedscripts": "Aglaon kadagiti saan a mabalin nga aglalaok nga eskritu",
+ "antispoof-tooshort": "Ti kanonikalisado a nagan ket ababa unay",
+ "antispoof-ignore": "Saan nga ikaskaso dagiti kinita nga aningaas",
+ "right-override-antispoof": "Parabawan ti panagkita nga aningaas",
+ "apihelp-antispoof-description": "Kitaen ti nagan ti agar-aramat nga isuppiat iti normalisasion a panagkita ti AntiSpoof.",
+ "apihelp-antispoof-param-username": "Ti nagan ti agar-aramat a kitaen a maisuppiat iti AntiSpoof.",
+ "apihelp-antispoof-example-1": "Kitaen ti nagan ti agar-aramat \"Foo\" a maisuppiat iti AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/is.json b/AntiSpoof/i18n/is.json
new file mode 100644
index 00000000..e0b1057a
--- /dev/null
+++ b/AntiSpoof/i18n/is.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "S.Örvarr.S",
+ "Snævar",
+ "Spacebirdy"
+ ]
+ },
+ "antispoof-desc": "Óheimilar gerð aðganga með blandað skrifletur, ruglandi og svipuð notandanöfn",
+ "antispoof-conflict-top": "Nafnið \"$1\" er of svipað eftirfarandi {{PLURAL:$2|notandanafni|notendanöfnum}}:",
+ "antispoof-conflict-bottom": "Vinsamlegast veldu annað nafn.",
+ "antispoof-name-illegal": "Nafnið „$1“ er ekki leyfilegt til að sporna gegn ruglandi eða skopstælandi notandanöfnum:: „$2“. Vinsamlegast veldu annað nafn.",
+ "antispoof-badtype": "Lélegt gagnatag",
+ "antispoof-empty": "Tómur strengur",
+ "antispoof-blacklisted": "Inniheldur bannaða rittáknið $1",
+ "antispoof-combining": "Byrjar á samsetningartákninu $1",
+ "antispoof-unassigned": "Inniheldur óúthlutaða eða úrelda táknið $1",
+ "antispoof-deprecated": "Inniheldur úrelda táknið $1",
+ "antispoof-noletters": "Inniheldur enga stafi",
+ "antispoof-mixedscripts": "Inniheldur ósamhæfðar skriftur",
+ "antispoof-tooshort": "Nafn of stutt",
+ "antispoof-ignore": "Hunsa misnotkunar athugun"
+}
diff --git a/AntiSpoof/i18n/it.json b/AntiSpoof/i18n/it.json
new file mode 100644
index 00000000..8f61bae4
--- /dev/null
+++ b/AntiSpoof/i18n/it.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "BrokenArrow",
+ "Darth Kule",
+ "Nemo bis",
+ "Pietrodn"
+ ]
+ },
+ "antispoof-desc": "Impedisce la creazione di nomi utente con caratteri misti e nomi utente che generano confusione o troppo simili tra loro.",
+ "antispoof-conflict-top": "Il nome \"$1\" è troppo simile {{PLURAL:$2|al seguente nome utente|ai seguenti nomi utente}}:",
+ "antispoof-conflict-bottom": "Scegliere un altro nome.",
+ "antispoof-name-illegal": "Il nome utente \"$1\" non è consentito, per evitare confusione o utilizzi fraudolenti: $2. Scegliere un altro nome.",
+ "antispoof-badtype": "Tipo di dati errato",
+ "antispoof-empty": "Stringa vuota",
+ "antispoof-blacklisted": "Contiene il carattere non consentito $1",
+ "antispoof-combining": "Inizia con la combinazione di caratteri $1",
+ "antispoof-unassigned": "Contiene il carattere non assegnato $1",
+ "antispoof-deprecated": "Contiene il carattere deprecato $1",
+ "antispoof-noletters": "Assenza di lettere",
+ "antispoof-mixedscripts": "Combinazione di sistemi di scrittura non compatibili",
+ "antispoof-tooshort": "Nome in forma canonica troppo corto",
+ "antispoof-ignore": "Ignora i controlli per spoofing",
+ "right-override-antispoof": "Ignora i controlli spoofing",
+ "apihelp-antispoof-description": "Controlla un nome utente con le verifiche di normalizzaizone AntiSpoof",
+ "apihelp-antispoof-param-username": "Il nome utente da verificare con AntiSpoof.",
+ "apihelp-antispoof-example-1": "Controlla il nome utente \"Foo\" con AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/ja.json b/AntiSpoof/i18n/ja.json
new file mode 100644
index 00000000..5f728744
--- /dev/null
+++ b/AntiSpoof/i18n/ja.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "Fryed-peach",
+ "JtFuruhata",
+ "Mizusumashi",
+ "Muttley",
+ "Shirayuki",
+ "2nd-player",
+ "Takot"
+ ]
+ },
+ "antispoof-desc": "文字体系が混在している利用者名、既存の利用者名と類似していて紛らわしい利用者名のアカウント作成をブロックする",
+ "antispoof-conflict-top": "指定した名前「$1」は以下の{{PLURAL:$2|利用者名}}と類似しすぎています:",
+ "antispoof-conflict-bottom": "別の名前を使用してください。",
+ "antispoof-name-illegal": "指定した名前「$1」はなりすまし防止のため使用できません: $2。別の名前を使用してください。",
+ "antispoof-bad-char": "「$1」 ($2)",
+ "antispoof-badtype": "データタイプが異常です",
+ "antispoof-empty": "文字列が空です",
+ "antispoof-blacklisted": "禁止された文字 $1 を含んでいます",
+ "antispoof-combining": "結合記号 $1 で始まっています",
+ "antispoof-unassigned": "未割り当ての文字 $1 を含んでいます",
+ "antispoof-deprecated": "推奨されない文字 $1 を含んでいます",
+ "antispoof-noletters": "英字を含んでいません",
+ "antispoof-mixedscripts": "一緒に使用できない複数の文字体系が混在しています",
+ "antispoof-tooshort": "正規化した名前が短すぎます",
+ "antispoof-ignore": "なりすましチェックを無効にする",
+ "right-override-antispoof": "なりすましチェックを無視",
+ "apihelp-antispoof-description": "ユーザー名が AntiSpoof の正規化チェックに反しているかどうかチェックする",
+ "apihelp-antispoof-param-username": "AntiSpoof に対してチェックするユーザー名",
+ "apihelp-antispoof-example-1": "利用者名 \"Foo\" を AntiSpoof でチェックする",
+ "apihelp-createaccount-param-ignoreantispoof": "なりすましチェックを無視する (<code>override-antispoof</code> 権が必要になります)。"
+}
diff --git a/AntiSpoof/i18n/jut.json b/AntiSpoof/i18n/jut.json
new file mode 100644
index 00000000..bacefa86
--- /dev/null
+++ b/AntiSpoof/i18n/jut.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huslåke",
+ "Jyllanj"
+ ]
+ },
+ "antispoof-desc": "Blokiire for oprettels å konti mä blanjen tejnsätt, forwirrenje elle liiknenje brugenaun",
+ "antispoof-name-illegal": "Naun \"$1\" ä ett tillæt for å forhinja forwirrenje elle etteliiknen brugenaun: $2. Wälg wenlist e ånj naun.",
+ "antispoof-badtype": "Udjylji datatyp",
+ "antispoof-empty": "Tomm streng",
+ "antispoof-blacklisted": "Indeholder sortlistet tegn",
+ "antispoof-combining": "Begynder ve et kombinationsbogstav",
+ "antispoof-unassigned": "Indeholder ubrugte bogstaver",
+ "antispoof-noletters": "Inneholje ien buegstawe",
+ "antispoof-mixedscripts": "Inneholje inkompatibel, blanjen tejnsätt",
+ "antispoof-tooshort": "Naun ä for kort"
+}
diff --git a/AntiSpoof/i18n/jv.json b/AntiSpoof/i18n/jv.json
new file mode 100644
index 00000000..8f04d6f3
--- /dev/null
+++ b/AntiSpoof/i18n/jv.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meursault2004",
+ "NoiX180",
+ "Pras",
+ "Umherirrender"
+ ]
+ },
+ "antispoof-desc": "Menggak nggawé akun utawa rékening mawa jeneng panganggo aksara campuran, mbingungaké lan sing mèmper",
+ "antispoof-conflict-top": "Jeneng \"$1\" mèmper banget karo {{PLURAL:$2|akun sing wis ana|$2 akun iki}}:",
+ "antispoof-conflict-bottom": "Mangga milih jeneng liya",
+ "antispoof-name-illegal": "Jeneng \"$1\" ora diidinaké supaya wong ora bingung utawa menggak ngapi-api jeneng panganggo sing wis ana: $2.\nMangga pilihen jeneng liya.",
+ "antispoof-badtype": "Tipe data salah",
+ "antispoof-empty": "Data kosong",
+ "antispoof-blacklisted": "Ngandung karakter $1 sing ora kalilan",
+ "antispoof-combining": "Wiwiti mawa tandha kombinasi $1",
+ "antispoof-unassigned": "Ngandung karakter $1 sing durung katetepaké",
+ "antispoof-deprecated": "Ngandung karakter $1 sing ora kanggo",
+ "antispoof-noletters": "Ora ngandhut aksara babar belas",
+ "antispoof-mixedscripts": "Ngandhut aksara campuran sing ora kompatibel",
+ "antispoof-tooshort": "Jeneng kanonikalisasi kecendhaken",
+ "antispoof-ignore": "Lirwakaké pamrikasaan panipuan akun (spoofing)",
+ "right-override-antispoof": "''Override'' pamriksan palècèhan"
+}
diff --git a/AntiSpoof/i18n/ka.json b/AntiSpoof/i18n/ka.json
new file mode 100644
index 00000000..6e7b07c6
--- /dev/null
+++ b/AntiSpoof/i18n/ka.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alsandro",
+ "BRUTE",
+ "David1010",
+ "Nodar Kherkheulidze"
+ ]
+ },
+ "antispoof-desc": "ბლოკავს ახალი ანგარიშების გახსნას შერეული სკრიპტით, შეცდომითი და ერთიდაიგივე მომხმარებლის სახელების შეთხვევაში",
+ "antispoof-conflict-top": "The name \"$1\" is too similar to the following {{PLURAL:$2|username|usernames}}:",
+ "antispoof-conflict-bottom": "გთხოვთ სხვა სახელი გამოიყენოთ.",
+ "antispoof-name-illegal": "სახელი „$1“ არაა ნებადართული, რათა არ იყოს არეული სხვა სახელთან: $2.\nგთხოვთ აირჩიოთ სხვა სახელი.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "არასწორი მონაცემთა ტიპი",
+ "antispoof-empty": "ცარიელი სტრიქონი",
+ "antispoof-blacklisted": "შავი სიიდან შეიცავს სიმბოლოს $1",
+ "antispoof-combining": "იწყება კომბინაციის სიმბოლოთი $1",
+ "antispoof-unassigned": "შეიცავს დაუშვებელ ან მოძველებულ სიმბოლოს",
+ "antispoof-deprecated": "შეიცავს უარყოფილ სიმბოლოს $1",
+ "antispoof-noletters": "არ შეიცავს ასოებს",
+ "antispoof-mixedscripts": "შეიცავს შეუთავსებელ შერეულ სცენარებს",
+ "antispoof-tooshort": "ნორმალიზებული სახელი ძალიან მოკლეა",
+ "antispoof-ignore": "მსგავს სახელებზე შემოწმების ინგნორირება",
+ "right-override-antispoof": "მსგავსი სახელების შემოწმების უგულებელყოფა"
+}
diff --git a/AntiSpoof/i18n/khw.json b/AntiSpoof/i18n/khw.json
new file mode 100644
index 00000000..69b696bf
--- /dev/null
+++ b/AntiSpoof/i18n/khw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rachitrali"
+ ]
+ },
+ "antispoof-badtype": "شوم اعداد و شمارو قسم",
+ "antispoof-empty": "خالی تار"
+}
diff --git a/AntiSpoof/i18n/kk-arab.json b/AntiSpoof/i18n/kk-arab.json
new file mode 100644
index 00000000..83283b81
--- /dev/null
+++ b/AntiSpoof/i18n/kk-arab.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": [],
+ "antispoof-name-illegal": "قاتىسۋشى اتى شاتاقتاۋىن نەمەسە قالجىنداۋىن بٶگەۋ ٷشٸن «$1» اتاۋى رۇقسات ەتٸلمەيدٸ: $2. باسقا اتاۋ تاڭداڭىز.",
+ "antispoof-badtype": "جارامسىز دەرەك تٷرٸ",
+ "antispoof-empty": "بوس جول",
+ "antispoof-blacklisted": "قارا تٸزٸمگە كٸرگەن ٵرٸپ بار",
+ "antispoof-combining": "قۇرامدى بەلگٸمەن باستالعان",
+ "antispoof-unassigned": "تاعايىندالماعان نەمەسە تىيىلعان ٵرٸپ بار",
+ "antispoof-noletters": "ٸشٸندە ەشبٸر ٵرٸپ جوق",
+ "antispoof-mixedscripts": "ٸشٸندە سيىسپايتىن ارالاس جازۋ تٷرلەرٸ بار",
+ "antispoof-tooshort": "ەرەجەلەنگەن اتاۋى تىم قىسقا"
+}
diff --git a/AntiSpoof/i18n/kk-cyrl.json b/AntiSpoof/i18n/kk-cyrl.json
new file mode 100644
index 00000000..b0956b1b
--- /dev/null
+++ b/AntiSpoof/i18n/kk-cyrl.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek"
+ ]
+ },
+ "antispoof-desc": "Әмірлер араласқан, қолайсыз және ұқсас қатысушы аттары бар тіркелгілерді жасауын бұғаттайды",
+ "antispoof-conflict-top": "«$1» атауы келесімен өте ұқсас {{PLURAL:$2|қатысушы есімі|қатысушы есімі}}:",
+ "antispoof-conflict-bottom": "Басқа атау таңдаңыз.",
+ "antispoof-name-illegal": "Қатысушы аты шатақтауын немесе қалжындауын бөгеу үшін «$1» атауы рұқсат етілмейді: $2. Басқа атау таңдаңыз.",
+ "antispoof-badtype": "Жарамсыз дерек түрі",
+ "antispoof-empty": "Бос жол",
+ "antispoof-blacklisted": "Қара тізімге кірген $1 таңбадан тұрады",
+ "antispoof-combining": "Құрамды белгімен $1 басталған",
+ "antispoof-unassigned": "Тағайындалмаған $1 таңба қамтылған",
+ "antispoof-noletters": "Ішінде ешбір әріп жоқ",
+ "antispoof-mixedscripts": "Ішінде сиыспайтын аралас жазу түрлері бар",
+ "antispoof-tooshort": "Ережеленген атауы тым қысқа",
+ "antispoof-ignore": "Айырбастау тексерістерін елемеу"
+}
diff --git a/AntiSpoof/i18n/kk-latn.json b/AntiSpoof/i18n/kk-latn.json
new file mode 100644
index 00000000..b0669efb
--- /dev/null
+++ b/AntiSpoof/i18n/kk-latn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": [],
+ "antispoof-name-illegal": "Qatıswşı atı şataqtawın nemese qaljındawın bögew üşin «$1» atawı ruqsat etilmeýdi: $2. Basqa ataw tañdañız.",
+ "antispoof-badtype": "Jaramsız derek türi",
+ "antispoof-empty": "Bos jol",
+ "antispoof-blacklisted": "Qara tizimge kirgen ärip bar",
+ "antispoof-combining": "Quramdı belgimen bastalğan",
+ "antispoof-unassigned": "Tağaýındalmağan nemese tıýılğan ärip bar",
+ "antispoof-noletters": "İşinde eşbir ärip joq",
+ "antispoof-mixedscripts": "İşinde sïıspaýtın aralas jazw türleri bar",
+ "antispoof-tooshort": "Erejelengen atawı tım qısqa"
+}
diff --git a/AntiSpoof/i18n/km.json b/AntiSpoof/i18n/km.json
new file mode 100644
index 00000000..b5a95dc9
--- /dev/null
+++ b/AntiSpoof/i18n/km.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chhorran",
+ "Lovekhmer",
+ "Thearith",
+ "គីមស៊្រុន"
+ ]
+ },
+ "antispoof-conflict-top": "ឈ្មោះ \"$1\"គឺស្រដៀងគ្នានឹង {{PLURAL:$2|អត្តនាម|អត្តនាម}}ខាងក្រោម ពេកហើយ ៖",
+ "antispoof-conflict-bottom": "សូមជ្រើសរើសឈ្មោះផ្សេងទៀត។",
+ "antispoof-name-illegal": "ឈ្មោះ \"$1\" មិនត្រូវបានឱ្យបង្កើតទេ ដើម្បីកុំឱ្យច្រឡំជាមួយនឹងអត្តនាម៖ $2។\n\nសូមជ្រើសរើសអត្តនាមផ្សេងមួយទៀត។",
+ "antispoof-badtype": "ប្រភេទទិន្នន័យអន់",
+ "antispoof-empty": "ខ្សែអក្សរទទេ",
+ "antispoof-blacklisted": "មាន​អក្សរ​ដែល​ត្រូវបាន​ចាត់ចូលទៅក្នុងបញ្ជីខ្មៅ $1",
+ "antispoof-combining": "ចាប់ផ្ដើមដោយសញ្ញាផ្សំគ្នា $1",
+ "antispoof-noletters": "គ្មានផ្ទុក​អក្សរណាមួយ"
+}
diff --git a/AntiSpoof/i18n/kn.json b/AntiSpoof/i18n/kn.json
new file mode 100644
index 00000000..6eeba99d
--- /dev/null
+++ b/AntiSpoof/i18n/kn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abhirama",
+ "VASANTH S.N.",
+ "Omshivaprakash",
+ "Ananth subray"
+ ]
+ },
+ "antispoof-conflict-bottom": "ಇನ್ನೊಂದು ಹೆಸರನ್ನು ಆಯ್ಕೆ ಮಾಡಿ.",
+ "antispoof-name-illegal": "\"$1\"ಹೆಸರನ್ನು ಗೊಂದಲ ಅಥವಾ ವಂಚಕ ಬಳಕೆದಾರರ : $2ಹೆಸರುಗಳನ್ನು ತಡೆಯಲು ಅನುಮತಿಸಲಾಗುತ್ತಿಲ್ಲ.\nಮತ್ತೊಂದು ಹೆಸರನ್ನು ಆಯ್ಕೆ ಮಾಡಿ.",
+ "antispoof-badtype": "ಕೆಟ್ಟ ಮಾಹಿತಿ ರೀತಿ",
+ "antispoof-empty": "ಖಾಲಿ ಅಕ್ಷರಪುಂಜ"
+}
diff --git a/AntiSpoof/i18n/ko.json b/AntiSpoof/i18n/ko.json
new file mode 100644
index 00000000..33c8a8bf
--- /dev/null
+++ b/AntiSpoof/i18n/ko.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Klutzy",
+ "Kwj2772",
+ "ToePeu",
+ "아라"
+ ]
+ },
+ "antispoof-desc": "여러 문자 체계를 섞은 이름이나, 혼동될 수 있고 비슷한 이름의 계정 만들기를 차단합니다",
+ "antispoof-conflict-top": "\"$1\" 이름은 다음 {{PLURAL:$2|사용자 이름}}과 너무 비슷합니다:",
+ "antispoof-conflict-bottom": "다른 이름을 선택하세요.",
+ "antispoof-name-illegal": "\"$1\" 사용자 이름은 다음의 이유로 인해 가입이 금지되었습니다: $2.\n다른 이름으로 가입해주세요.",
+ "antispoof-badtype": "잘못된 자료형",
+ "antispoof-empty": "빈 문자열",
+ "antispoof-blacklisted": "사용이 금지된 $1 문자 포함",
+ "antispoof-combining": "혼합 문자 $1로 시작",
+ "antispoof-unassigned": "코드가 부여되지 않았거나 잘못된 $1 문자를 포함",
+ "antispoof-deprecated": "잘못된 글자 $1이 포함되어 있습니다.",
+ "antispoof-noletters": "어떠한 문자도 포함하고 있지 않습니다",
+ "antispoof-mixedscripts": "여러 문자 체계가 섞여 있습니다.",
+ "antispoof-tooshort": "고유 이름이 너무 짧습니다.",
+ "antispoof-ignore": "안티스푸프 검사를 무시",
+ "right-override-antispoof": "혼란을 줄 수 있는 사용자 이름 금지(안티스푸프)를 무시"
+}
diff --git a/AntiSpoof/i18n/krc.json b/AntiSpoof/i18n/krc.json
new file mode 100644
index 00000000..b18722e8
--- /dev/null
+++ b/AntiSpoof/i18n/krc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iltever"
+ ]
+ },
+ "antispoof-ignore": "Ушаш атланы тинтиуге эс бёлме"
+}
diff --git a/AntiSpoof/i18n/ksh.json b/AntiSpoof/i18n/ksh.json
new file mode 100644
index 00000000..298c1674
--- /dev/null
+++ b/AntiSpoof/i18n/ksh.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "antispoof-desc": "Dat ongerdröck neu Name für Metmaacher met jemeschte Zeichensätz, neu Name, wo mer jeck von weed, un zo ähnlije Name.",
+ "antispoof-conflict-top": "Dä Name „$1“ eß zoh ähnlesch zoh {{PLURAL:$2|däm Name, dä&32;|dä Name, di_j_|nix wadd_}}et ald jitt:",
+ "antispoof-conflict-bottom": "Nemm ene andere Name.",
+ "antispoof-name-illegal": "Dä Name „$1“ es nit zojelohße, domet mer kein nohjemahte Name krije, un keine Durjenein met Schrefte: $2. Sök Der jet anders als Dinge Name us.",
+ "antispoof-bad-char": "„$1“ ($2)",
+ "antispoof-badtype": "Verkierte Zoot Date",
+ "antispoof-empty": "En dem Feld is nix dren",
+ "antispoof-blacklisted": "Do es dat Zeiche „$1“ dren, wat nit zojelohße es",
+ "antispoof-combining": "Dat fängk med däm kombineerende Zeiche „$1“ aan.",
+ "antispoof-unassigned": "Do es dat Zeiche „$1“ dren, wat nit zojedeild es",
+ "antispoof-deprecated": "Do es dat Zeiche „$1“ dren, wat nit jään jesinn es",
+ "antispoof-noletters": "Do es nit eine Bochstabe dren.",
+ "antispoof-mixedscripts": "He sin Zeichesätz jemesch.",
+ "antispoof-tooshort": "Dä vereinheitlechte Name es zo koot.",
+ "antispoof-ignore": "Donn de Prööfonge jäje et Name-Nohmaache övverjonn",
+ "right-override-antispoof": "Prööfonge jäje et Name-Nohmaache (<i lang=\"en\">Anti-Spoofing</i>) övverjonn",
+ "apihelp-antispoof-description": "Donn de Nahme vun de Metmaacher jähje dem <i lang=\"en\" xml:lang=\"en\">AntiSpoof</i> sing Nommallisehronge prööve.",
+ "apihelp-antispoof-param-username": "Dä Nahme zom pröhve jähje dem <i lang=\"en\" xml:lang=\"en\">AntiSpoof</i> sing Nommallisehrong.",
+ "apihelp-antispoof-example-1": "Donn dä Nahme <i lang=\"en\" xml:lang=\"en\">Foo</i> jähje dem <i lang=\"en\" xml:lang=\"en\">AntiSpoof</i> sing Nommallisehronge pröhve."
+}
diff --git a/AntiSpoof/i18n/ky.json b/AntiSpoof/i18n/ky.json
new file mode 100644
index 00000000..f296d844
--- /dev/null
+++ b/AntiSpoof/i18n/ky.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chorobek",
+ "Growingup"
+ ]
+ },
+ "antispoof-conflict-bottom": "Башка ат тандап алыңыз",
+ "antispoof-badtype": "Туура эмес форматтагы маалымат",
+ "antispoof-empty": "Бош сап",
+ "antispoof-blacklisted": "$1 тосмолонгон белгилердин тизмесине кирет",
+ "antispoof-unassigned": "$1 уруксат берилбеген белгилердин тизмесине кирет",
+ "antispoof-deprecated": "$1 колдонуудан чыккан белгилердин тизмесине кирет",
+ "antispoof-noletters": "Бир дагы тамга жок",
+ "antispoof-mixedscripts": "Ар башка тилдеги тамгалар колдонулган",
+ "antispoof-tooshort": "Өтө кыска ат",
+ "antispoof-ignore": "Аттардын окшоштугун текшербөө",
+ "right-override-antispoof": "Окшош аттардын текшерүүлөрүнө көңүл салбоо"
+}
diff --git a/AntiSpoof/i18n/la.json b/AntiSpoof/i18n/la.json
new file mode 100644
index 00000000..92ab44b8
--- /dev/null
+++ b/AntiSpoof/i18n/la.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "SPQRobin"
+ ]
+ },
+ "antispoof-name-illegal": "Non licet uti nomine \"$1\" ad nominum usorum simulationem prohibendam: $2. Selige nomen alterum."
+}
diff --git a/AntiSpoof/i18n/lad.json b/AntiSpoof/i18n/lad.json
new file mode 100644
index 00000000..3eee9ddc
--- /dev/null
+++ b/AntiSpoof/i18n/lad.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jewbask",
+ "Maor X",
+ "Menachem.Moreira"
+ ]
+ },
+ "antispoof-conflict-top": "El nombre \"$1\" es muy paresido a los sigientes{{PLURAL:$2|nombre de usador|nombres de usador}}:",
+ "antispoof-conflict-bottom": "Por hatir, eskoje otro nombre.",
+ "antispoof-empty": "Teksto vazio"
+}
diff --git a/AntiSpoof/i18n/lb.json b/AntiSpoof/i18n/lb.json
new file mode 100644
index 00000000..f31328b9
--- /dev/null
+++ b/AntiSpoof/i18n/lb.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Les Meloures",
+ "Robby"
+ ]
+ },
+ "antispoof-desc": "Verhënnert d'Opmaache vu Benotzerkonte mat gemëschten Zeechesätz, mat gelungene Benotzernimm oder mat Benotzernimm déi zu Verwiesselunge féiere kéinten.",
+ "antispoof-conflict-top": "Den Numm \"$1\" ass ze ähnlech mat {{PLURAL:$2|dësem Benotzernumm|dëse Benotzernimm}}:",
+ "antispoof-conflict-bottom": "Wielt w.e.g. en aneren Numm.",
+ "antispoof-name-illegal": "De gewënschte Benotzernumm \"$1\" ass net erlaabt. Grond: $2<br />\nSicht iech w.e.g. een anere Benotzernumm.",
+ "antispoof-badtype": "Ongültegt Fichiers-Format (bad data type)",
+ "antispoof-empty": "Eidelt Feld",
+ "antispoof-blacklisted": "Verbueden Zeechen (Caractèren): $1",
+ "antispoof-combining": "Fänkt mam Kombinatiounszeechen $1 un.",
+ "antispoof-unassigned": "Et sinn net zougeuerdnet oder onerwënschten Zeechen (Caractèren) dran.",
+ "antispoof-deprecated": "Dat vereelsten Zeechen (Caractère) $1 ass dran.",
+ "antispoof-noletters": "Et si keng Buschtawen dran.",
+ "antispoof-mixedscripts": "Et si gemëschte Skripten dran, déi net kompatibel sinn",
+ "antispoof-tooshort": "De kanoniséierten Numm ass ze kuerz.",
+ "antispoof-ignore": "Keng Kontroll op ähnlech Benotzernimm",
+ "right-override-antispoof": "D'Resultat vun der Iwwerpréifung no ähnleche Benotzernimm ignoréieren"
+}
diff --git a/AntiSpoof/i18n/lez.json b/AntiSpoof/i18n/lez.json
new file mode 100644
index 00000000..47ba836e
--- /dev/null
+++ b/AntiSpoof/i18n/lez.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Migraghvi"
+ ]
+ },
+ "antispoof-badtype": "Ганайбурун дуьзтушир жуьре",
+ "antispoof-empty": "ичIи цıар"
+}
diff --git a/AntiSpoof/i18n/li.json b/AntiSpoof/i18n/li.json
new file mode 100644
index 00000000..5e432e86
--- /dev/null
+++ b/AntiSpoof/i18n/li.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Matthias",
+ "Ooswesthoesbes"
+ ]
+ },
+ "antispoof-desc": "Blokkeert 't aanmake van gebroekers mit miedere sjrifte, verwarrende en geliekmakende gebroekersname",
+ "antispoof-conflict-top": "De naam \"$1\" liek te zeer op de volgende zeendje {{PLURAL:$2|gebroekersnaam|$2 gebroekersname}}:",
+ "antispoof-conflict-bottom": "Kees 'ne angere naam.",
+ "antispoof-name-illegal": "De naam \"$1\" is net toegestaon óm verwarring of vervörmdje gebroekersname te veurkómme: $2. Kees estebleef 'ne angere naam.",
+ "antispoof-badtype": "Verkeerd datatype",
+ "antispoof-empty": "Laege string",
+ "antispoof-blacklisted": "Bevat verbaoje karakter $1",
+ "antispoof-combining": "Begint mit 'n gecombineerd merkteike $1",
+ "antispoof-unassigned": "Bevat neet toegeweze of verajerdj karakter",
+ "antispoof-deprecated": "Bevat verajerd teken $1",
+ "antispoof-noletters": "Bevat gein letters",
+ "antispoof-mixedscripts": "Bevat neet compatibele sjrifter.",
+ "antispoof-tooshort": "Aafgekorte naam te kort",
+ "antispoof-ignore": "Spoofcontroles negere",
+ "right-override-antispoof": "Spoofkonträöl negere"
+}
diff --git a/AntiSpoof/i18n/lo.json b/AntiSpoof/i18n/lo.json
new file mode 100644
index 00000000..193dc505
--- /dev/null
+++ b/AntiSpoof/i18n/lo.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": [],
+ "antispoof-name-illegal": "ບໍ່ສາມາດອະນຸຍາດ ຊື່ \"$1\" ໄດ້ ເພີ່ມຫຼີກລ້ຽງ ການສັບສົນ ກັບ : $2. ກະລຸນາເລືອກຊື່ອື່ນ.",
+ "antispoof-badtype": "ປະເພດ ຂໍ້ມູນ ບໍ່ຖືກຕ້ອງ",
+ "antispoof-empty": "ບໍ່ມີໂຕໜັງສື",
+ "antispoof-blacklisted": "ມີໂຕໜັງສືໃນບັນຊີດຳ",
+ "antispoof-combining": "ເລີ່ມຕົ້ນດ້ວຍເຄື່ອງໝາຍປະສົມ",
+ "antispoof-noletters": "ບໍ່ມີໂຕໜັງສື",
+ "antispoof-mixedscripts": "ມີສະກຣິບປະປົນແບບບໍ່ຖືກຕ້ອງ",
+ "antispoof-tooshort": "ຊື່ຫຍໍ້ສັ້ນໂພດ"
+}
diff --git a/AntiSpoof/i18n/lrc.json b/AntiSpoof/i18n/lrc.json
new file mode 100644
index 00000000..1f6f566d
--- /dev/null
+++ b/AntiSpoof/i18n/lrc.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bonevarluri",
+ "Mogoeilor"
+ ]
+ },
+ "antispoof-desc": "مال ونیا وا اسکریپ شیوسه دروس بیه،نومیا کاروری گیژکننه و چی یک",
+ "antispoof-conflict-top": "نوم که فره د{{PLURAL:$2|کاریار|کاریاریا}}: هاری نزیکهد",
+ "antispoof-conflict-bottom": "لطفن یه نوم هنی انتخاو بکید",
+ "antispoof-name-illegal": "نوم \"$1\" سی دماگرتن د گیژ بیین یا اسپوف بیین نوم کاریاریا صلادار نئ:$2\nلطف بکیت یه گل نوم هنی انتخاو بکیت.",
+ "antispoof-badtype": "نوع دونسمنی گن",
+ "antispoof-empty": "رشته حالی",
+ "antispoof-blacklisted": "شومل کاراکتریانوم گه سی $1",
+ "antispoof-combining": "وا شومل بیئن نشون $1 شرو بوئه",
+ "antispoof-unassigned": "شومل کاراکتریا بی نشون $1",
+ "antispoof-deprecated": "شومل کاراکتریا بی نشون $1",
+ "antispoof-noletters": "هیش واجی دش نی",
+ "antispoof-mixedscripts": "شومل نیسه یا شی وسه ناسازگار",
+ "antispoof-tooshort": "نوم قانونی فره کؤچک هئ",
+ "antispoof-ignore": "د نظر نگرتن وارسیا الکی",
+ "right-override-antispoof": "باطل کردن وارسیا الکی",
+ "apihelp-antispoof-description": "وارسی یه گل نوم کاریاری سی وارسی نرمال بیین نها ضد اسپوف.",
+ "apihelp-antispoof-param-username": "وارسی نوم کاریاری سی جستن ضداسپوف.",
+ "apihelp-antispoof-example-1": "نوم کاریاری \"فو\" نه سی ضد اسپوف وارسی بکیت"
+}
diff --git a/AntiSpoof/i18n/lt.json b/AntiSpoof/i18n/lt.json
new file mode 100644
index 00000000..813e57a5
--- /dev/null
+++ b/AntiSpoof/i18n/lt.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Garas",
+ "Homo",
+ "Ignas693",
+ "Perkunas",
+ "Albertas"
+ ]
+ },
+ "antispoof-desc": "Blokuoja kūrimą paskyrų, turinčių maišyto scenarijaus, klaidinančius ar panašius naudotojų vardus",
+ "antispoof-conflict-top": "Vardas \"$1\" yra per daug panašus į {{PLURAL:$2|šį naudotojo vardą|naudotojo vardus}}:",
+ "antispoof-conflict-bottom": "Prašome pasirinkti kitą vardą.",
+ "antispoof-name-illegal": "Vardas \"$1\" neleidžiamas, kad būtų apsisaugota nuo apgaulingų ar parodijuotų naudotojų vardų: $2. Prašome pasirinkti kitą vardą.",
+ "antispoof-badtype": "Blogas duomenų tipas",
+ "antispoof-empty": "Tuščias tekstas",
+ "antispoof-blacklisted": "Turi uždraustą simbolį $1",
+ "antispoof-combining": "Prasideda kombinavimo ženklu $1",
+ "antispoof-unassigned": "Yra nepaskirtas simbolis $1",
+ "antispoof-deprecated": "Turi nenaudotiną simbolį $1",
+ "antispoof-noletters": "Nėra nei vienos raidės",
+ "antispoof-mixedscripts": "Turi nepalaikomų įvairių rašmenų",
+ "antispoof-tooshort": "Kanonizuotas vardas per trumpas",
+ "antispoof-ignore": "Nepaisyti „spoofing“ patikrinimų",
+ "right-override-antispoof": "Nepaisyti „spoofing“ patikrinimų",
+ "apihelp-antispoof-description": "Patikrinti, ar naudotojo vardas atitinka AntiSpoof's normalizavimo patikras.",
+ "apihelp-antispoof-param-username": "Naudotojo vardas, kuriam atlikti AntiSpoof patikrą.",
+ "apihelp-antispoof-example-1": "Patikrinti naudotojo vardą \"Foo\" su AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Ignoruoti pokštavimo patikras (reikalingos <code>override-antispoof</code> teisės)."
+}
diff --git a/AntiSpoof/i18n/lv.json b/AntiSpoof/i18n/lv.json
new file mode 100644
index 00000000..49c7ddf0
--- /dev/null
+++ b/AntiSpoof/i18n/lv.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "GreenZeb",
+ "Papuass"
+ ]
+ },
+ "antispoof-desc": "Bloķē kontu izveidi ar jauktas rakstības, mulsinošiem un līdzīgiem lietotājvārdiem",
+ "antispoof-conflict-top": "Nosaukums \"$1\" ir pārāk līdzīgs {{PLURAL:$2|esošajam kontam|šiem $2 kontiem}}:",
+ "antispoof-conflict-bottom": "Lūdzu, izvēlieties citu faila nosaukumu.",
+ "antispoof-badtype": "Nederīgs datu tips",
+ "antispoof-empty": "Tukša virkne",
+ "antispoof-blacklisted": "Satur aizliegtu simbolu $1",
+ "antispoof-unassigned": "Satur nepiešķirtu rakstzīmi $1",
+ "antispoof-noletters": "Nesatur nevienu burtu",
+ "antispoof-mixedscripts": "Satur nesavietojamas jauktas rakstu zīmes"
+}
diff --git a/AntiSpoof/i18n/mai.json b/AntiSpoof/i18n/mai.json
new file mode 100644
index 00000000..25ce9eca
--- /dev/null
+++ b/AntiSpoof/i18n/mai.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "antispoof-conflict-bottom": "कृपया कोनो आन नाम चुनु।",
+ "antispoof-name-illegal": "भ्रामक नाम सभ के रोकए के लेल नाम \"$1\" राखए लेल अवैध अछि: $2\nकृपया कोनो आन नाम चुनल जाए।",
+ "antispoof-badtype": "खराब डाटा प्रकार",
+ "antispoof-empty": "खाली स्ट्रिंग",
+ "antispoof-blacklisted": "ऐ मे बिरोधसूची क्यारेक्टर $1 अछि",
+ "antispoof-combining": "एकत्रिकरण चिन्ह $1 स सुरु होएत अछि",
+ "antispoof-unassigned": "ऐ मे बिरोधसूची क्यारेक्टर $1 अछि",
+ "antispoof-deprecated": "ऐ मे बिरोधसूची क्यारेक्टर $1 अछि",
+ "antispoof-noletters": "ए मे कोनो अक्षर नै अछि",
+ "antispoof-mixedscripts": "ऐ में असंगत मिश्र लिपि सभ अछि",
+ "antispoof-tooshort": "अधिकारयुक्त नाम बहुत छोट अछि",
+ "antispoof-ignore": "स्पूफिंग जाँच नै मानू",
+ "right-override-antispoof": "स्पूफिंग जाँच के नै मानू"
+}
diff --git a/AntiSpoof/i18n/map-bms.json b/AntiSpoof/i18n/map-bms.json
new file mode 100644
index 00000000..e1482d3f
--- /dev/null
+++ b/AntiSpoof/i18n/map-bms.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "StefanusRA",
+ "Umherirrender"
+ ]
+ },
+ "antispoof-desc": "Menggak nggawé akun sing jeneng panganggone nganggo aksara campuran, mbingungna lan sing mèmper",
+ "antispoof-conflict-top": "Jeneng \"$1\" mèmper banget karo {{PLURAL:$2|jeneng panganggo|}} kiye:",
+ "antispoof-conflict-bottom": "Monggo milih jeneng liyane.",
+ "antispoof-name-illegal": "Jeneng \"$1\" ora olih dinggo supaya wong ora bingung utawa menggak ngapi-api jeneng panganggo sing wis ana: $2.\nMonggo pilihen jeneng liyane baen.",
+ "antispoof-badtype": "Tipe data salah",
+ "antispoof-empty": "Data kosong",
+ "antispoof-blacklisted": "Ngandhut karakter sing ora olih dienggo yakuwe $1",
+ "antispoof-combining": "Diwiwiti karo tandha kombinasi $1",
+ "antispoof-unassigned": "Ngandhut karakter sing ora dienggo yakuwe $1",
+ "antispoof-deprecated": "Ngandhut karakter sing wis ora dinggo maning yakuwe $1",
+ "antispoof-noletters": "Ora ngandhut aksara babar belas",
+ "antispoof-mixedscripts": "Ngandhut aksara campuran sing ora kompatibel",
+ "antispoof-tooshort": "Jeneng kanonikalisasi kecendhaken",
+ "antispoof-ignore": "Lirwakaké pamrikasaan panipuan akun (spoofing)",
+ "right-override-antispoof": "''Override'' pamriksan palècèhan"
+}
diff --git a/AntiSpoof/i18n/mg.json b/AntiSpoof/i18n/mg.json
new file mode 100644
index 00000000..a26a09a3
--- /dev/null
+++ b/AntiSpoof/i18n/mg.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "antispoof-desc": "Manakana ny fanokafana kaonty miaraka amina anaram-pikambana mitovy, mampiasa fomba fanoratana samihafa, na mety azo afangaron.",
+ "antispoof-name-illegal": "Tsy mahazo alalana ny anaram-pikambana \"$1\" noho ny fanakekezany amin'ny anarana \"$2\".\nMisafidia anarana hafa.",
+ "antispoof-badtype": "Tsy izy ny karazana fampahalalàna",
+ "antispoof-empty": "fitohitohizan-tsoratra (string) foàna",
+ "antispoof-blacklisted": "Misy tarehintsoratra voarara",
+ "antispoof-combining": "Manomboka amina mari-pitambatambarana (marque combinatoire)",
+ "antispoof-noletters": "Tsy misy tarehintsoratra",
+ "antispoof-mixedscripts": "Misy endri-tsoratra maro samihafa tsy zaka"
+}
diff --git a/AntiSpoof/i18n/min.json b/AntiSpoof/i18n/min.json
new file mode 100644
index 00000000..d5eba825
--- /dev/null
+++ b/AntiSpoof/i18n/min.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iwan Novirion"
+ ]
+ },
+ "antispoof-ignore": "Abaikan pamarisoan akun",
+ "right-override-antispoof": "Maimpok namo pangguno"
+}
diff --git a/AntiSpoof/i18n/mk.json b/AntiSpoof/i18n/mk.json
new file mode 100644
index 00000000..344a177f
--- /dev/null
+++ b/AntiSpoof/i18n/mk.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "antispoof-desc": "Блокира создавање на сметки со имиња од мешани писма/азбуки, кои личат на други кориснички имиња и со тоа создаваат забуни",
+ "antispoof-conflict-top": "Името „$1“ е премногу слично на {{PLURAL:$2|следното корисничко име|следните кориснички имиња}}:",
+ "antispoof-conflict-bottom": "Одберете друго име",
+ "antispoof-name-illegal": "Името „$1“ не е дозволено за да сес пречат збунувачки имиња кои се злоупотребливо слични: $2.\nОдберете друго име.",
+ "antispoof-bad-char": "„$1“ ($2)",
+ "antispoof-badtype": "Грешен тип на податоци",
+ "antispoof-empty": "Празна низа",
+ "antispoof-blacklisted": "Го содржи забранетиот знак $1",
+ "antispoof-combining": "Започнува со составниот знак $1",
+ "antispoof-unassigned": "Содржи неопределен или застарен знак",
+ "antispoof-deprecated": "Го содржи застарениот знак $1",
+ "antispoof-noletters": "Не содржи букви",
+ "antispoof-mixedscripts": "Содржи нескладни мешани писма/азбуки",
+ "antispoof-tooshort": "Нормализираното име е премногу кратко",
+ "antispoof-ignore": "Занемари меѓусебно слични имиња",
+ "right-override-antispoof": "Прескокнување на проверките за меѓусебно слични имиња",
+ "apihelp-antispoof-description": "Проверете корисничко име со нормализациската проверка на AntiSpoof.",
+ "apihelp-antispoof-param-username": "Корисничко име за проверка со AntiSpoof.",
+ "apihelp-antispoof-example-1": "Провери го корисничкото име „Foo“ со AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Занемари ги проверките за забуна на имињата (го бара правото <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/ml.json b/AntiSpoof/i18n/ml.json
new file mode 100644
index 00000000..2b0597ef
--- /dev/null
+++ b/AntiSpoof/i18n/ml.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp",
+ "Shijualex"
+ ]
+ },
+ "antispoof-desc": "സങ്കരലിപി, തെറ്റിദ്ധാരണ ഉളവാക്കുന്ന നാമം, ഒരേ തരത്തിലുള്ള ഉപയോക്തൃനാമം എന്നിവ ഉപയോഗിച്ചുള്ള അംഗത്വസൃഷ്ടി തടയൽ",
+ "antispoof-conflict-top": "\"$1\" എന്ന പേര് താഴെക്കൊടുക്കുന്ന {{PLURAL:$2|ഉപയോക്തൃനാമത്തോട്|ഉപയോക്തൃനാമങ്ങളോട്}} വളരെ സാമ്യമുള്ളതാണ്:",
+ "antispoof-conflict-bottom": "മറ്റൊരു പേരു തിരഞ്ഞെടുക്കുക.",
+ "antispoof-name-illegal": "ഉപയോക്തൃനാമത്തിലെ തെറ്റിദ്ധാരണയും സ്പൂഫിങ്ങും ഒഴിവാക്കാൻ \"$1\" എന്ന ഉപയോക്തൃനാമം അനുവദനീയമല്ല: $2.\nദയവായി മറ്റൊരു നാമം തിരഞ്ഞെടുക്കുക.",
+ "antispoof-badtype": "മോശം ഡേറ്റാ തരം",
+ "antispoof-empty": "ശൂന്യമായ അക്ഷരക്കൂട്ടം",
+ "antispoof-blacklisted": "കരിമ്പട്ടികയിൽ പെട്ട അക്ഷരമായ $1 ഉൾക്കൊള്ളുന്നു",
+ "antispoof-combining": "യോജിപ്പിക്കാനുള്ള അടയാളമായ $1 എന്നതിൽ തുടങ്ങുന്നു",
+ "antispoof-unassigned": "നിർദ്ദേശിക്കപ്പെടാത്തതോ പിന്തള്ളപ്പെട്ടതോ ആയ അക്ഷരം ഉൾക്കൊള്ളുന്നു",
+ "antispoof-deprecated": "ഒഴിവാക്കപ്പെട്ട അക്ഷരമായ $1 ഉണ്ട്",
+ "antispoof-noletters": "അക്ഷരങ്ങൾ ഒന്നും തന്നെ ഇല്ല",
+ "antispoof-mixedscripts": "പൊരുത്തക്കേടുള്ള സങ്കരലിപികൾ ഉൾപ്പെടുന്നു",
+ "antispoof-tooshort": "ചട്ടപ്പടിയാക്കിയ പേര് വളരെ ചെറുതാണ്",
+ "antispoof-ignore": "സ്പൂഫിങ് പരിശോധനകൾ അവഗണിക്കുക",
+ "right-override-antispoof": "സ്പൂഫിങ് പരിശോധനകൾ അതിലംഘിക്കുക",
+ "apihelp-antispoof-description": "കബളിപ്പിക്കൽ തടയൽ നോർമലൈസേഷൻ പരിശോധനകൾക്കൊപ്പം ഉപയോക്തൃനാമം പരിശോധിക്കുക.",
+ "apihelp-antispoof-param-username": "കബളിപ്പിക്കൽ തടയൽ പരിശോധനയിൽ ഉപയോഗിക്കേണ്ട ഉപയോക്തൃനാമം.",
+ "apihelp-antispoof-example-1": "കബളിപ്പിക്കൽ തടയൽ പരിശോധനയിൽ \"Foo\" എന്ന ഉപയോക്തൃനാമം പരിശോധിക്കുക"
+}
diff --git a/AntiSpoof/i18n/mn.json b/AntiSpoof/i18n/mn.json
new file mode 100644
index 00000000..ebb5a719
--- /dev/null
+++ b/AntiSpoof/i18n/mn.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinneeb"
+ ]
+ },
+ "antispoof-desc": "Олон тэмдэгтийн системүүдийг хольсон, будилж болох, ойролцоо хэрэглэгчийн нэрийг үүсгэхээс сэргийлдэг.",
+ "antispoof-conflict-top": "\"$1\" гэсэн нэр нь одоо оршиж буй {{PLURAL:$2|дараах|дараах $2}} бүртгэлтэй хэтэрхий төстэй байна:",
+ "antispoof-conflict-bottom": "Өөр нэр сонгоно уу.",
+ "antispoof-name-illegal": "\"$1\" гэсэн нэр нь андуурагдаж болохуйц, хуурмаг хэрэглэгчийн нэрнүүдээс сэргийлэхийн тулд зөвшөөрөгдөхгүй: $2.\nӨөр нэр сонгоно уу.",
+ "antispoof-badtype": "Буруу өгөгдлийн төрөл",
+ "antispoof-empty": "Хоосон цуваа",
+ "antispoof-blacklisted": "Хар дансанд орсон тэмдэгт агуулагдаж байна",
+ "antispoof-combining": "Холбох тэмдэгээр эхлэж байна",
+ "antispoof-unassigned": "Тогтоогоогүй эсвэл хуучирсан тэмдэгт агуулагдаж байна",
+ "antispoof-noletters": "Ямар ч тэмдэгт агуулагдаагүй байна",
+ "antispoof-mixedscripts": "Хоорондоо нийцэхгүй холилдсон бичилтүүд агуулагдаж байна",
+ "antispoof-tooshort": "Албан ёсны нэр хэт богино байна",
+ "antispoof-ignore": "Ойролцоо нэрний шалгуурыг үл тоомсорлох",
+ "right-override-antispoof": "Ойролцоо нэрний шалгуурыг няцаах"
+}
diff --git a/AntiSpoof/i18n/mr.json b/AntiSpoof/i18n/mr.json
new file mode 100644
index 00000000..3eba2dd3
--- /dev/null
+++ b/AntiSpoof/i18n/mr.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Balaji",
+ "Dnyanesh325",
+ "Kaustubh",
+ "Mahitgar",
+ "Mvkulkarni23",
+ "Saleelk",
+ "V.narsikar",
+ "प्रणव कुलकर्णी"
+ ]
+ },
+ "antispoof-desc": "मिश्र भाषा तसेच संभ्रमित करणारी व सारखी असणारी सदस्य नामे वापरण्यास बंदी आहे.",
+ "antispoof-conflict-top": "\"$1\" नाव {{PLURAL:$2|सदस्यनावाशी|सदस्यनावांशी}} खूपच मिळतेजुळते आहे:",
+ "antispoof-conflict-bottom": "कृपया दुसरे नाव निवडा.",
+ "antispoof-name-illegal": "\"$1\" हे नाव वापरण्यास बंदी आहे कारण हे नाव इतर नावांशी साम्य राखते: $2.\nत्यामुळे कृपया वेगळे नाव वापरा.",
+ "antispoof-badtype": "वाईट विदा (डाटा) प्रकार",
+ "antispoof-empty": "रिकामा धागा",
+ "antispoof-blacklisted": "मान्यताप्राप्त यादीत नसलेले अक्षर $1",
+ "antispoof-combining": "एकत्रीकरण चिन्हाने सुरुवात केलेली आहे $1",
+ "antispoof-unassigned": "यामध्ये चुकीची चिन्हे आहेत $1",
+ "antispoof-deprecated": "नापसंत वर्ण $1 यात आहेत",
+ "antispoof-noletters": "कोणत्याही अक्षराचा समावेश नाही",
+ "antispoof-mixedscripts": "यामध्ये इतर मिश्र लिपी आहेत.",
+ "antispoof-tooshort": "अधिकारयुक्त नाव खूप छोटे आहे",
+ "antispoof-ignore": "नकली चिन्हे विसरा",
+ "right-override-antispoof": "स्पूफिंग चेक्स कडे दुर्लक्ष करा"
+}
diff --git a/AntiSpoof/i18n/ms.json b/AntiSpoof/i18n/ms.json
new file mode 100644
index 00000000..6c6901c2
--- /dev/null
+++ b/AntiSpoof/i18n/ms.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Aurora",
+ "Aviator"
+ ]
+ },
+ "antispoof-desc": "Menyekat pembukaan akaun dengan nama pengguna yang mengelirukan, menyerupai orang lain, atau terdiri daripada campuran sistem-sistem tulisan yang berlainan",
+ "antispoof-conflict-top": "Nama \"$1\" menyerupai {{PLURAL:$2|nama pengguna|nama pengguna}} berikut:",
+ "antispoof-conflict-bottom": "Sila pilih nama lain.",
+ "antispoof-name-illegal": "Nama \"$1\" tidak dibenarkan kerana mengelirukan atau menipu: $2. Sila pilih nama lain.",
+ "antispoof-badtype": "Jenis data salah",
+ "antispoof-empty": "Rentetan kosong",
+ "antispoof-blacklisted": "Mengandungi aksara $1 yang telah disenaraihitamkan",
+ "antispoof-combining": "Bermula dengan tanda penggabung $1",
+ "antispoof-unassigned": "Mengandungi aksara yang tidak diuntukkan atau yang lapuk",
+ "antispoof-deprecated": "Mengandungi aksara $1 yang lapuk",
+ "antispoof-noletters": "Tidak mengandungi huruf",
+ "antispoof-mixedscripts": "Mengandungi campuran sistem-sistem tulisan yang tidak bersesuaian",
+ "antispoof-tooshort": "Nama berkanun terlalu pendek",
+ "antispoof-ignore": "Abaikan pemeriksaan penipuan",
+ "right-override-antispoof": "Mengatasi pemeriksaan penipuan"
+}
diff --git a/AntiSpoof/i18n/mt.json b/AntiSpoof/i18n/mt.json
new file mode 100644
index 00000000..e5f02011
--- /dev/null
+++ b/AntiSpoof/i18n/mt.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli",
+ "Umherirrender"
+ ]
+ },
+ "antispoof-desc": "Jimblokka l-ħolqien ta' kontijiet b'karattri mħawwda, ismijiet tal-utent li joħolqu konfużjoni jew huma wisq simili ma' xulxin.",
+ "antispoof-conflict-top": "L-isem \"$1\" huwa wisq simili {{PLURAL:$2|għall-kont eżistenti|għal $2 kontijiet segwenti}}:",
+ "antispoof-conflict-bottom": "Jekk jogħġbok agħżel isem ieħor.",
+ "antispoof-name-illegal": "L-isem \"$1\" mhuwiex permess sabiex jiġi evitat kwalunkwe konfużjoni jew użu qarrieq: $2. Agħżel isem ieħor.",
+ "antispoof-badtype": "Tip ta' dejta ħażina",
+ "antispoof-empty": "Stringa vojta",
+ "antispoof-blacklisted": "Jinkludi l-karattru li mhuwiex permess $1",
+ "antispoof-combining": "Jibda bil-kombinazzjoni ta' karattri $1",
+ "antispoof-unassigned": "Jinkludi l-karattru mhux assenjat $1",
+ "antispoof-noletters": "Ma jinkludix ittri",
+ "antispoof-mixedscripts": "Jinkludi skripts imħallta li mhumiex kompatibbli",
+ "antispoof-tooshort": "L-isem fil-forma kanonika huwa wisq qasir",
+ "antispoof-ignore": "Injora l-kontroll għall-ispoofing",
+ "right-override-antispoof": "Jinjora l-kontrolli għall-''ispoofing''"
+}
diff --git a/AntiSpoof/i18n/myv.json b/AntiSpoof/i18n/myv.json
new file mode 100644
index 00000000..0d160f2b
--- /dev/null
+++ b/AntiSpoof/i18n/myv.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amdf",
+ "Botuzhaleny-sodamo"
+ ]
+ },
+ "antispoof-badtype": "Датань аволь истямо типесь",
+ "antispoof-empty": "Чаво пикске"
+}
diff --git a/AntiSpoof/i18n/nah.json b/AntiSpoof/i18n/nah.json
new file mode 100644
index 00000000..5b11f782
--- /dev/null
+++ b/AntiSpoof/i18n/nah.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fluence"
+ ]
+ },
+ "antispoof-badtype": "Ahcualli tlahcuilōliztli"
+}
diff --git a/AntiSpoof/i18n/nap.json b/AntiSpoof/i18n/nap.json
new file mode 100644
index 00000000..05c71c12
--- /dev/null
+++ b/AntiSpoof/i18n/nap.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "antispoof-desc": "Blocca 'a criazione 'e cunte utente cu nu script-mmescato, crianno cunfusione o nomme c'assomigliassero nfra lloro",
+ "antispoof-conflict-top": "'O nomme \"$1\" s'assomiglia assaje assaje a {{PLURAL:$2|'o cunto|'e cunte}}:",
+ "antispoof-conflict-bottom": "Pe' piacere scigliete n'atu nomme.",
+ "antispoof-name-illegal": "'O nomme \"$1\" nun è permesso pe prevenì casine o mbruoglie 'e nomme utente: $2.\nPe' piacere scigliete n'atu nomme.",
+ "antispoof-badtype": "Tipo 'e data errato",
+ "antispoof-empty": "Stringa abbacante",
+ "antispoof-blacklisted": "Cuntene carattere dint' 'a lista nira $1",
+ "antispoof-combining": "Accummencia cu na marca cumbinata $1",
+ "antispoof-unassigned": "Cuntene nu carattere nun azegnato $1",
+ "antispoof-deprecated": "Cuntene carattere deprecato $1",
+ "antispoof-noletters": "Nun cuntene nisciuna lettera",
+ "antispoof-mixedscripts": "Cuntene script mmiscate incompatibbele",
+ "antispoof-tooshort": "Nomme canonizzato troppo curto",
+ "antispoof-ignore": "Lassa perdere 'e check pe' spoofing (mbruoglie)",
+ "right-override-antispoof": "Sovrascrive 'e check pe' spoofing (mbruoglie)",
+ "apihelp-antispoof-description": "Cuntrolla nu nomme utente a cunfronto ch' 'e cuntrolle 'e normalizzaziona 'AntiSpoof.",
+ "apihelp-antispoof-param-username": "Nomme utente ca s'avesse 'e cuntrullà d'AntiSpoof.",
+ "apihelp-antispoof-example-1": "Cuntrolla nomme utente \"Foo\" d'AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Lasse perdere le verifiche de spoofing (vole 'u deritte <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/nb.json b/AntiSpoof/i18n/nb.json
new file mode 100644
index 00000000..0708b3fb
--- /dev/null
+++ b/AntiSpoof/i18n/nb.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dittaeva",
+ "Event",
+ "Chameleon222"
+ ]
+ },
+ "antispoof-desc": "Hindrer oppretting av kontoer med lignende eller forvirrende brukernavn, eller brukernavn som inneholder to forskjellige alfabettyper",
+ "antispoof-conflict-top": "Navnet «$1» er for likt følgende {{PLURAL:$2|konto|kontoer}}:",
+ "antispoof-conflict-bottom": "Velg et annet navn.",
+ "antispoof-name-illegal": "Navnet «$1» er ikke tillatt for å forhindre sammenblanding: $2. Vennligst velg et annet navn.",
+ "antispoof-badtype": "Ugyldig datatype",
+ "antispoof-empty": "Tom streng",
+ "antispoof-blacklisted": "Inneholder det svartelistede tegnet $1",
+ "antispoof-combining": "Begynner med kombinasjonstegnet $1",
+ "antispoof-unassigned": "Inneholder ugyldig eller foreldet tegn.",
+ "antispoof-deprecated": "Inneholder det ulovlige tegnet «$1»",
+ "antispoof-noletters": "Inneholder ingen bokstaver",
+ "antispoof-mixedscripts": "Inneholder blanding av skriftsystemer",
+ "antispoof-tooshort": "Navnet er for kort",
+ "antispoof-ignore": "Ignorer misbrukssjekk",
+ "right-override-antispoof": "Overkjøre sjekk av brukernavn",
+ "apihelp-antispoof-description": "Sjekker et brukernavn mot AntiSpoofs normaliseringskontroller.",
+ "apihelp-antispoof-param-username": "Brukernavnet som skal sjekkes mot AntiSpoof.",
+ "apihelp-antispoof-example-1": "Sjekk brukernavn «Foo» mot AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/nds-nl.json b/AntiSpoof/i18n/nds-nl.json
new file mode 100644
index 00000000..1ec04165
--- /dev/null
+++ b/AntiSpoof/i18n/nds-nl.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "antispoof-desc": "Blokkeert t anmaken van gebrukers mit meerdere schriften, verwarrende en soortgelieke gebrukersnamen",
+ "antispoof-conflict-top": "De naam \"$1\" lik te veule op de volgende bestaonde {{PLURAL:$2|gebruker|$2 gebrukers}}:",
+ "antispoof-conflict-bottom": "Kies n aandere naam.",
+ "antispoof-name-illegal": "De naam \"$1\" is niet toe-estaon, um verwarring of lelike gebrukersnamen te veurkoemen: $2. Kies n aandere naam.",
+ "antispoof-badtype": "Ongeldig datatype",
+ "antispoof-empty": "Leeg veld",
+ "antispoof-blacklisted": "Hierin steet t verbeujen teken $1",
+ "antispoof-combining": "Begint mit t kombinasieteken $1",
+ "antispoof-unassigned": "Bevat n niet toe-ewezen of ongewunst teken",
+ "antispoof-deprecated": "Hierin steet t verbeujen teken $1",
+ "antispoof-noletters": "Bevat gien letters",
+ "antispoof-mixedscripts": "Bevat onverenigbaore schriftsystemen",
+ "antispoof-tooshort": "De naam die'j in-evoerd hebben is te kort.",
+ "antispoof-ignore": "Kontrole op soortgelieke gebrukersnamen negeren",
+ "right-override-antispoof": "Fopkontroles negeren"
+}
diff --git a/AntiSpoof/i18n/nds.json b/AntiSpoof/i18n/nds.json
new file mode 100644
index 00000000..7af57a3e
--- /dev/null
+++ b/AntiSpoof/i18n/nds.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slomox"
+ ]
+ },
+ "antispoof-desc": "Verhinnert dat Opstellen vun Brukerkonten mit mischte Tekensätz un Brukernaams, de verwirrt oder liek utseht as annere Brukernaams",
+ "antispoof-conflict-top": "De Naam „$1“ is to ähnlich to {{PLURAL:$2|dat Brukerkonto|de $2 Brukerkonten}}, de dat al gifft:",
+ "antispoof-conflict-bottom": "Söök di en annern Naam ut.",
+ "antispoof-name-illegal": "De Brukernaam „$1“ is nich verlöövt. Grund: $2<br />Söök di en annern Brukernaam ut.",
+ "antispoof-badtype": "Leeg Datentyp",
+ "antispoof-empty": "Feld leddig",
+ "antispoof-blacklisted": "In’n Text sünd nich verlöövte Teken binnen",
+ "antispoof-combining": "Kombinatschoonsteken to Anfang",
+ "antispoof-unassigned": "In’n Text sünd nich toornte oder nich wünschte Teken binnen",
+ "antispoof-noletters": "Dor sünd kene Bookstaven in.",
+ "antispoof-mixedscripts": "in’n Text sünd Teken ut verschedene Schriftsystemen binnen",
+ "antispoof-tooshort": "De kanoniseerte Naam is to kort.",
+ "antispoof-ignore": "Nich op ähnliche Brukernaams pröfen",
+ "right-override-antispoof": "De Kuntrull op ähnliche Brukernaams ümgahn"
+}
diff --git a/AntiSpoof/i18n/ne.json b/AntiSpoof/i18n/ne.json
new file mode 100644
index 00000000..cdad82f3
--- /dev/null
+++ b/AntiSpoof/i18n/ne.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bhawani Gautam",
+ "Bhawani Gautam Rhk",
+ "सरोज कुमार ढकाल"
+ ]
+ },
+ "antispoof-desc": "भ्रामक तथा एकै प्रकारका प्रयोगकर्ता नामहरु, मिश्रित-स्क्रिप्ट भएका खाताहरु बनाउनमाथि रोक लगाउने",
+ "antispoof-conflict-top": " \"$1\" नाम {{PLURAL:$2|वर्तमान खाता|निम्नलिखित $2 खाताहरू}}सँग धेरै मिल्न जान्छ :",
+ "antispoof-conflict-bottom": "कृपया अर्को नाम छान्नुहोस्।",
+ "antispoof-name-illegal": "$2 भ्रामक र जाली प्रयोगकर्ता नामको रोकथामको निम्ति \"$1\" नामलाई अनुमति छैन।\nकृपया अर्को नाम छान्नुहोस्।",
+ "antispoof-badtype": "अमान्य आँकड़ा प्रकार",
+ "antispoof-empty": "रिक्त रज्जु (string)",
+ "antispoof-blacklisted": "कालो सुचीमा रहेको वर्ण $1 रहेको छ",
+ "antispoof-combining": "संयोजन चिन्हबाट सुरु हुने",
+ "antispoof-noletters": "कुनै अक्षरहरु नभएको",
+ "antispoof-mixedscripts": "असंगत मिश्रित लिपिहरु सम्मिलित गरिएको",
+ "antispoof-tooshort": "संक्षिप्त साह्रै छोटो नाम",
+ "antispoof-ignore": "धोका रोकाईलाई अन्देखा गर्ने"
+}
diff --git a/AntiSpoof/i18n/nl.json b/AntiSpoof/i18n/nl.json
new file mode 100644
index 00000000..46ae4763
--- /dev/null
+++ b/AntiSpoof/i18n/nl.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "AvatarTeam",
+ "Erwin",
+ "HanV",
+ "SPQRobin",
+ "Siebrand",
+ "Esketti",
+ "McDutchie"
+ ]
+ },
+ "antispoof-desc": "Blokkeert het aanmaken van gebruikersnamen in meerdere schriften, en verwarrende en gelijkende gebruikersnamen",
+ "antispoof-conflict-top": "De naam \"$1\" lijkt te veel op de volgende bestaande {{PLURAL:$2|gebruikersnaam|$2 gebruikersnamen}}:",
+ "antispoof-conflict-bottom": "Kies een andere naam.",
+ "antispoof-name-illegal": "De naam \"$1\" is niet toegestaan om verwarring of gefingeerde gebruikersnamen te voorkomen: $2.\nKies een andere naam.",
+ "antispoof-badtype": "Ongeldig gegevenstype",
+ "antispoof-empty": "Lege string",
+ "antispoof-blacklisted": "Bevat verboden teken $1",
+ "antispoof-combining": "Begint met gecombineerd merkteken $1",
+ "antispoof-unassigned": "Bevat het niet toegewezen karakter $1",
+ "antispoof-deprecated": "Bevat verouderd teken $1",
+ "antispoof-noletters": "Bevat geen letters",
+ "antispoof-mixedscripts": "Bevat niet compatibele schriften",
+ "antispoof-tooshort": "Afgekorte naam te kort",
+ "antispoof-ignore": "Controle op gelijkende gebruikersnamen negeren",
+ "right-override-antispoof": "Spoofcontroles negeren",
+ "apihelp-antispoof-description": "Een gebruikersnaam in de normaliseringscontrole van AntiSpoof opnemen.",
+ "apihelp-antispoof-param-username": "De gebruikersnaam om te controleren met AntiSpoof.",
+ "apihelp-antispoof-example-1": "De gebruikersnaam \"Foo\" controleren met AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/nn.json b/AntiSpoof/i18n/nn.json
new file mode 100644
index 00000000..34450467
--- /dev/null
+++ b/AntiSpoof/i18n/nn.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dittaeva",
+ "Harald Khan",
+ "Njardarlogar"
+ ]
+ },
+ "antispoof-desc": "Blokkerer for oppretting av konti med liknande eller forvirrande brukarnamn, eller brukarnamn som inneheld forskjellige alfabettypar",
+ "antispoof-conflict-top": "Namnet «$1» er for likt følgjande {{PLURAL:$2|konto|kontoar}}:",
+ "antispoof-conflict-bottom": "Vel eit anna namn.",
+ "antispoof-name-illegal": "Namnet «$1» er ikkje tillate for å hindra samanblanding: $2.\nVer venleg og vel eit anna namn.",
+ "antispoof-badtype": "Ugyldig datatype",
+ "antispoof-empty": "Tom streng",
+ "antispoof-blacklisted": "Inneheld det svartelista teiknet $1",
+ "antispoof-combining": "Byrjar med kombinasjonsteiknet «$1»",
+ "antispoof-unassigned": "Inneheld ugyldig eller forelda teikn",
+ "antispoof-deprecated": "Inneheld det eldre teiknet $1",
+ "antispoof-noletters": "Inneheld ingen bokstavar",
+ "antispoof-mixedscripts": "Inneheld blanding av ikkje-kompatible skriftsystem",
+ "antispoof-tooshort": "Namnet er for kort",
+ "antispoof-ignore": "Ignorer misbrukssjekk",
+ "right-override-antispoof": "Overkøyra sjekk av brukarnamn"
+}
diff --git a/AntiSpoof/i18n/nso.json b/AntiSpoof/i18n/nso.json
new file mode 100644
index 00000000..41d08e24
--- /dev/null
+++ b/AntiSpoof/i18n/nso.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mohau"
+ ]
+ },
+ "antispoof-conflict-bottom": "Ka kgopelo, kgetha leina le lengwe.",
+ "antispoof-name-illegal": "Leina le \"$1\", ga la dumelwa go thibela go rarakana: $2. Ka kgopelo, kgetha leina le lengwe.",
+ "antispoof-badtype": "Mohuta o mobe wa 'data'",
+ "antispoof-blacklisted": "E nale dihlaka tšeo di sego tša dumelwa",
+ "antispoof-noletters": "Ga e na dihlaka"
+}
diff --git a/AntiSpoof/i18n/oc.json b/AntiSpoof/i18n/oc.json
new file mode 100644
index 00000000..9f72ba73
--- /dev/null
+++ b/AntiSpoof/i18n/oc.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "antispoof-desc": "Blòca, amb un escript mixt, la creacion dels comptes per de noms d'utilizaires similars o podent prestar a confusion.",
+ "antispoof-conflict-top": "Lo nom « $1 » es tròp similar {{PLURAL:$2|a l'utilizaire seguent|als utilizaires seguents}} :",
+ "antispoof-conflict-bottom": "Causissètz un autre nom.",
+ "antispoof-name-illegal": "Lo nom « $1 » es pas autorizat per empachar de confondre o d’utilizar lo nom « $2 ». Causissètz un autre nom.",
+ "antispoof-badtype": "Marrit tipe de donadas",
+ "antispoof-empty": "Cadena voida",
+ "antispoof-blacklisted": "Conten lo caractèr interdich $1",
+ "antispoof-combining": "Comença amb una marca combinatòria $1",
+ "antispoof-unassigned": "Conten un caractèr non assignat $1",
+ "antispoof-deprecated": "Conten lo caractèr obsolet $1",
+ "antispoof-noletters": "Conten pas cap de letra",
+ "antispoof-mixedscripts": "Conten mantun escript incompatible",
+ "antispoof-tooshort": "Nom canonic tròp cort",
+ "antispoof-ignore": "Ignorar las verificacions d'engana",
+ "right-override-antispoof": "Espotís de pseudoverificacions"
+}
diff --git a/AntiSpoof/i18n/olo.json b/AntiSpoof/i18n/olo.json
new file mode 100644
index 00000000..8771177a
--- /dev/null
+++ b/AntiSpoof/i18n/olo.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mashoi7"
+ ]
+ },
+ "antispoof-conflict-top": "Nimi \"$1\" on liijakse yhtenjyttyine {{PLURAL:$2|tämän nimenke|nämmien nimienke}}:",
+ "antispoof-conflict-bottom": "Ole hyvä, valliče toine nimi."
+}
diff --git a/AntiSpoof/i18n/or.json b/AntiSpoof/i18n/or.json
new file mode 100644
index 00000000..dc926d03
--- /dev/null
+++ b/AntiSpoof/i18n/or.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jnanaranjan Sahu",
+ "Psubhashish"
+ ]
+ },
+ "antispoof-desc": "ମିଶା-ସ୍କ୍ରିପ୍ଟ, ଭ୍ରମାତ୍ମକ ଓ ଏକା ଇଉଜର ନାଆଁ ତିଆରିକୁ ବନ୍ଦ କରିଥାଏ",
+ "antispoof-conflict-top": "\"$1\" ନାମଟି ଏହି {{PLURAL:$2|ସଭ୍ୟ ନାମ|$2 ସଭ୍ୟ ନାମମାନଙ୍କ}} ସହିତ ବହୁତ ସମାନ:",
+ "antispoof-conflict-bottom": "ଦୟାକରି ଆଉ ଗୋଟେ ନାଆଁ ବାଛନ୍ତୁ ।",
+ "antispoof-name-illegal": "ସନ୍ଦେହ ହେଲାଭଳି ନାଆଁପାଇଁ \"$1\" ନାଆଁଟିକୁ ଅନୁମତି ଦେଇପାରୁନାହୁଁ: $2 ।\nଦୟାକରି ଆଉଗୋଟିଏ ନାଆଁ ବାଛନ୍ତୁ ।",
+ "antispoof-badtype": "ଖରାପ ତଥ୍ୟ",
+ "antispoof-empty": "ଖାଲି ଘର",
+ "antispoof-blacklisted": "ଏଥିରେ $1ନାମକ ବାରଣ କରାଯାଇଥିବା ଅକ୍ଷର ଅଛି",
+ "antispoof-combining": "$1ମିଶାଇବା ଚିହ୍ନସହ ଆରମ୍ଭ ହୁଏ",
+ "antispoof-unassigned": "ଏଥିରେ ଏବେଯାଏଁ ଦିଆ ଯାଇନଥିବା ଅକ୍ଷର $1 ଅଛି",
+ "antispoof-deprecated": "ଏଥିରେ $1ନାମକ ଅଦରକାରୀ ଅକ୍ଷର ଅଛି",
+ "antispoof-noletters": "ଏଥିରେ କିଛି ବି ଲେଖା ନାହିଁ",
+ "antispoof-mixedscripts": "ଏଥିରେ ମିଶୁନଥିବା ଅଜଣା ଲେଖା ଅଛି",
+ "antispoof-tooshort": "ମୂଳ ନାଆଁଟି ଖୁବ ସାନ",
+ "antispoof-ignore": "ଖରାପ ନାଆଁକୁ ଦେଖନ୍ତୁ ନାହିଁ",
+ "right-override-antispoof": "ଜାଣିଶୁଣି କରାଯିଇଥିବା ଭୁଲସବୁକୁ ଅଣଦେଖା କରିବେ"
+}
diff --git a/AntiSpoof/i18n/os.json b/AntiSpoof/i18n/os.json
new file mode 100644
index 00000000..d6d82123
--- /dev/null
+++ b/AntiSpoof/i18n/os.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amikeco",
+ "Amire80"
+ ]
+ },
+ "antispoof-empty": "Афтид рæнхъ",
+ "antispoof-noletters": "Иу дамгъæ дæр нæй"
+}
diff --git a/AntiSpoof/i18n/pa.json b/AntiSpoof/i18n/pa.json
new file mode 100644
index 00000000..4071bcd7
--- /dev/null
+++ b/AntiSpoof/i18n/pa.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Satdeep gill",
+ "TariButtar"
+ ]
+ },
+ "antispoof-conflict-bottom": "ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਹੋਰ ਨਾਮ ਚੁਣੋ।",
+ "antispoof-empty": "ਖਾਲੀ ਸਟਰਿੰਗ",
+ "antispoof-noletters": "ਇਸ ਵਿੱਚ ਕੋਈ ਅੱਖਰ ਮੌਜੂਦ ਨਹੀਂ ਹਨ"
+}
diff --git a/AntiSpoof/i18n/pag.json b/AntiSpoof/i18n/pag.json
new file mode 100644
index 00000000..3a421ad5
--- /dev/null
+++ b/AntiSpoof/i18n/pag.json
@@ -0,0 +1,6 @@
+{
+ "@metadata": [],
+ "antispoof-empty": "String ya Andilugan",
+ "antispoof-blacklisted": "Walay laman ton bawal ya character",
+ "antispoof-noletters": "Anggapoy laman ton letra"
+}
diff --git a/AntiSpoof/i18n/pam.json b/AntiSpoof/i18n/pam.json
new file mode 100644
index 00000000..36d265a2
--- /dev/null
+++ b/AntiSpoof/i18n/pam.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Katimawan2005",
+ "Val2397"
+ ]
+ },
+ "antispoof-desc": "Sabatan na ing pamaglalang kareng account a maki misasamut a kulit (mixed-script), makabaligo ampong miwawangis a lagyungtalagamit (username).",
+ "antispoof-name-illegal": "E malyaring gamitan ing \"$1\" uling bawal la reng username a mákabaligo o balamu piglocu: $2. Sana mamili kang aliwang lagyu.",
+ "antispoof-badtype": "Marauak a uri ning data",
+ "antispoof-blacklisted": "↓Maki kulit (character) yang mibawal $1",
+ "antispoof-combining": "↓Magumpisa yang miki piabeng palatandanan $1",
+ "antispoof-noletters": "Ala yang letra",
+ "antispoof-mixedscripts": "Misamut la reng sulat a e malyaring piyabe"
+}
diff --git a/AntiSpoof/i18n/pfl.json b/AntiSpoof/i18n/pfl.json
new file mode 100644
index 00000000..11f33a38
--- /dev/null
+++ b/AntiSpoof/i18n/pfl.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "antispoof-desc": "Vahinad's Easchdelle vun Benudzakonde mid gmischde Zaische, vawirrende un ähnlische Benudzanoame",
+ "antispoof-conflict-top": "De Noame „$1“ {{PLURAL:$2|ischm oanare Benudzakondo|ischde oanere $2 Benudzakondene}} zu ähnlisch:",
+ "antispoof-conflict-bottom": "Nemm bidde än onere Nome.",
+ "antispoof-name-illegal": "De Noame „$1“ derfma ned nemme wesche: $2\nNemmän onare Noame.",
+ "antispoof-badtype": "Uugildische Aad vun Daade",
+ "antispoof-empty": "Leares Feld",
+ "antispoof-blacklisted": "Do hods ä uugildisches Zaische $1.",
+ "antispoof-combining": "S'fongd midm Vabindungszaische $1 oa.",
+ "antispoof-unassigned": "S'hod ned zug'ordnedi Zaische $1",
+ "antispoof-deprecated": "S'hod va'aldedi Zaische $1",
+ "antispoof-noletters": "Do hods kä Buchschdawe",
+ "antispoof-mixedscripts": "Do hods Zaische vun unaschiedlische Schrifde.",
+ "antispoof-tooshort": "De kanonisierde Noame isch zu korz",
+ "antispoof-ignore": "Fälschungsiwabriefung iwageje",
+ "right-override-antispoof": "Fälschungsiwabriefung iwschraiwe"
+}
diff --git a/AntiSpoof/i18n/pl.json b/AntiSpoof/i18n/pl.json
new file mode 100644
index 00000000..5d59f82a
--- /dev/null
+++ b/AntiSpoof/i18n/pl.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "BeginaFelicysym",
+ "Chrumps",
+ "Derbeth",
+ "Mikołka",
+ "Sp5uhe"
+ ]
+ },
+ "antispoof-desc": "Blokuje tworzenie kont użytkowników o nazwach podobnych do już istniejących lub dezorientujących",
+ "antispoof-conflict-top": "Nazwa „$1” jest zbyt podobna do {{PLURAL:$2|następującej nazwy konta|następujących nazw kont}}:",
+ "antispoof-conflict-bottom": "Proszę wybrać inną nazwę.",
+ "antispoof-name-illegal": "Wybierz inną nazwę, ponieważ „$1” nie może być użyta ze względu na podobieństwo do nazwy innego użytkownika „$2”.",
+ "antispoof-badtype": "Zły typ danych",
+ "antispoof-empty": "Pusty ciąg znaków",
+ "antispoof-blacklisted": "Zawiera niedozwolony znak $1",
+ "antispoof-combining": "Zaczyna się od łącznika $1",
+ "antispoof-unassigned": "Zawiera nieprzypisany lub niedozwolony znak",
+ "antispoof-deprecated": "Zawiera niezalecany znak $1",
+ "antispoof-noletters": "Nie zawiera liter",
+ "antispoof-mixedscripts": "Zawiera przemieszane znaki niezgodnych ze sobą pism",
+ "antispoof-tooshort": "Zbyt krótka nazwa użytkownika",
+ "antispoof-ignore": "Ignoruj podobieństwo do istniejących nazw",
+ "right-override-antispoof": "Brak ograniczenia przed zakładaniem kont o podobnych nazwach do już istniejących"
+}
diff --git a/AntiSpoof/i18n/pms.json b/AntiSpoof/i18n/pms.json
new file mode 100644
index 00000000..f86337cd
--- /dev/null
+++ b/AntiSpoof/i18n/pms.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Bèrto 'd Sèra",
+ "Dragonòt"
+ ]
+ },
+ "antispoof-desc": "A blòca la creassion ëd cont con nòm utent mës-cià a script, confundent e via parèj",
+ "antispoof-conflict-top": "Ël nòm «$1» a smija tròp a {{PLURAL:$2|lë stranòm sì-dapress|a jë stranòm sì-dapress}}:",
+ "antispoof-conflict-bottom": "Për piasì sern n'àutr nòm.",
+ "antispoof-name-illegal": "Lë stranòm \"$1\" as peul nen dovresse për evité confusion e/ò che cheidun as fassa passé për: $2. Për piasì, ch'as në sërna n'àotr.",
+ "antispoof-badtype": "Sòrt ëd dat nen bon-a",
+ "antispoof-empty": "Espression veujda",
+ "antispoof-blacklisted": "A-i é ëd caràter ch'as peulo pa dovresse $1",
+ "antispoof-combining": "As anandia con na combinassion $1",
+ "antispoof-unassigned": "A conten dij caràter nen assignà $1",
+ "antispoof-deprecated": "A conten dij caràter frust $1",
+ "antispoof-noletters": "A l'ha pa gnun caràter",
+ "antispoof-mixedscripts": "Combinassion ëd sistema dë scritura ch'as peulo pa butesse ansema",
+ "antispoof-tooshort": "Butà an forma canònica lë stranòm a resta esagerà curt",
+ "antispoof-ignore": "Sàuta ij controj dë spoofing",
+ "right-override-antispoof": "Ignora ij controj dë spoofing",
+ "apihelp-antispoof-description": "Verifiché në stranòm contra le verìfiche ëd normalisassion d'AntiSpoof.",
+ "apihelp-antispoof-param-username": "Lë stranòm da verifiché contra AntiSpoof.",
+ "apihelp-antispoof-example-1": "Verifiché lë stranòm «Foo» contra AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/pnb.json b/AntiSpoof/i18n/pnb.json
new file mode 100644
index 00000000..acc0c6c1
--- /dev/null
+++ b/AntiSpoof/i18n/pnb.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khalid Mahmood"
+ ]
+ },
+ "antispoof-desc": "ایدے توں ملے جلے، سر پھرے تے رلدے خط آلے ورتن ناں بنن توں رک جاندے نیں",
+ "antispoof-conflict-top": "اے ناں \"$1\" پہلاں توں بنے ہوۓ {{PLURAL:$2|اس ورتن ناں|ایناں ورتن ناواں}} دے نال بوت رلدا اے:",
+ "antispoof-conflict-bottom": "مہربنی کرکے ہور ناں چنو",
+ "antispoof-name-illegal": "اس ناں \"$1\" توں ورتن ناں نئیں بنایا جا سکدا کیونجے انجان تے مزاحیہ دے اتے روک اے: $2\nمہربانی کر کے کوئی دوجا ناں چنو۔",
+ "antispoof-badtype": "ڈیٹا ٹھیک نیں",
+ "antispoof-empty": "خالی سلسلہ",
+ "antispoof-blacklisted": "ایدے چ بنا اجازت والیاں چیزاں نیں۔",
+ "antispoof-combining": "جوڑن والے نشان نال ٹردا اے",
+ "antispoof-unassigned": "ایدے کج کیریکٹر پھیک نیں",
+ "antispoof-noletters": "ایدے چ کوئی اکرا نیں۔",
+ "antispoof-mixedscripts": "ایدے چ رلے ملے تے ناں ملن والے کیریکٹر نیں",
+ "antispoof-tooshort": "وڈے ناں بعوت نکے نیں",
+ "antispoof-ignore": "بے تکیاں چیزاں ناں چیک کرو",
+ "right-override-antispoof": "بےتکیاں چیزاں نوں چھڈو"
+}
diff --git a/AntiSpoof/i18n/ps.json b/AntiSpoof/i18n/ps.json
new file mode 100644
index 00000000..42f302b3
--- /dev/null
+++ b/AntiSpoof/i18n/ps.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel",
+ "عثمان خان شاہ"
+ ]
+ },
+ "antispoof-conflict-top": "د \"$1\" نوم لاندې {{PLURAL:$2|کارن نوم|کارن نومونو}} سره بېخي ورته دی:",
+ "antispoof-conflict-bottom": "لطفاُ يو بل نوم وټاکۍ.",
+ "antispoof-badtype": "ناسمه مالوماتي بڼه",
+ "antispoof-blacklisted": "$1 د تور لړليک توری دی",
+ "antispoof-noletters": "هېڅ کوم توری نه شته"
+}
diff --git a/AntiSpoof/i18n/pt-br.json b/AntiSpoof/i18n/pt-br.json
new file mode 100644
index 00000000..77caf123
--- /dev/null
+++ b/AntiSpoof/i18n/pt-br.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Caio1478",
+ "Eduardo.mps",
+ "Helder.wiki",
+ "Luckas",
+ "Rhaijin",
+ "555",
+ "He7d3r",
+ "Dianakc"
+ ]
+ },
+ "antispoof-desc": "Impede a criação de contas com escrita mista, e nomes de usuário confusos e semelhantes",
+ "antispoof-conflict-top": "O nome \"$1\" é demasiado semelhante {{PLURAL:$2|ao seguinte nome de usuário|aos seguintes nomes de usuário}}:",
+ "antispoof-conflict-bottom": "Por favor, escolha outro nome.",
+ "antispoof-name-illegal": "O nome \"$1\" não é permitido para prevenir que seja confundido com outro (ou que seja feito algum trocadilho): já existe $2.\nPor favor, escolha outro nome.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "Formato de dados incorreto",
+ "antispoof-empty": "Linha vazia",
+ "antispoof-blacklisted": "Contém o caractere $1, presente na lista negra",
+ "antispoof-combining": "Inicia com o caractere de combinação $1",
+ "antispoof-unassigned": "Contém caracteres não reconhecidos: $1",
+ "antispoof-deprecated": "Contém o parâmetro depreciado $1",
+ "antispoof-noletters": "Não contém nenhuma letra",
+ "antispoof-mixedscripts": "Contém scripts de escrita incompatíveis mesclados",
+ "antispoof-tooshort": "Nome canônico curto demais",
+ "antispoof-ignore": "Ignorar verificações de \"spoofing\"",
+ "right-override-antispoof": "Sobrepor verificações de spoofing",
+ "apihelp-antispoof-description": "Verifica um nome de usuário contra verificações de normalização do AntiSpoof.",
+ "apihelp-antispoof-param-username": "O nome de usuário para verificar no AntiSpoof.",
+ "apihelp-antispoof-example-1": "Verifica o nome de usuário \"Foo\" através do AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/pt.json b/AntiSpoof/i18n/pt.json
new file mode 100644
index 00000000..87ae6f7d
--- /dev/null
+++ b/AntiSpoof/i18n/pt.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Brunoy Anastasiya Seryozhenko",
+ "Hamilton Abreu",
+ "Malafaya",
+ "Rhaijin",
+ "Vitorvicentevalente",
+ "Umherirrender"
+ ]
+ },
+ "antispoof-desc": "Impede a criação de contas cujo nome de utilizador contenha misturas de alfabetos, ou seja confundível ou semelhante a outros existentes",
+ "antispoof-conflict-top": "O nome \"$1\" é demasiado semelhante {{PLURAL:$2|ao seguinte nome de utilizador|aos seguintes nomes de utilizador}}:",
+ "antispoof-conflict-bottom": "Escolha outro nome, por favor.",
+ "antispoof-name-illegal": "O nome \"$1\" não é permitido para evitar confusões ou enganos: $2. Escolha outro nome, por favor.",
+ "antispoof-badtype": "Formato de dados incorreto",
+ "antispoof-empty": "Linha vazia",
+ "antispoof-blacklisted": "Contém o carácter proibido $1",
+ "antispoof-combining": "Começa com carácter de combinação $1",
+ "antispoof-unassigned": "Contém o carácter proibido $1",
+ "antispoof-deprecated": "Contém o carácter não suportado $1",
+ "antispoof-noletters": "Não contém letras",
+ "antispoof-mixedscripts": "Contém uma mistura de alfabetos incompatíveis",
+ "antispoof-tooshort": "Nome canónico demasiado curto",
+ "antispoof-ignore": "Ignorar as verificações de semelhança de nomes (spoofing)",
+ "right-override-antispoof": "Ultrapassar as verificações de semelhança de nome (<i>spoofing</i>)"
+}
diff --git a/AntiSpoof/i18n/qqq.json b/AntiSpoof/i18n/qqq.json
new file mode 100644
index 00000000..dce67342
--- /dev/null
+++ b/AntiSpoof/i18n/qqq.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beau",
+ "Kghbln",
+ "Mormegil",
+ "Shirayuki",
+ "Siebrand",
+ "Titoxd",
+ "Umherirrender"
+ ]
+ },
+ "antispoof-desc": "Used in [[Special:Version]] as the description for [[mw:Extension:AntiSpoof|Extension:AntiSpoof]]",
+ "antispoof-conflict-top": "Account creation error message because attempted username is too similar to existing username(s).\n\nParameters:\n* $1 - the username that someone wanted to create\n* $2 - number of usernames that triggered the error",
+ "antispoof-conflict-item": "{{notranslate}}\nParameters:\n* $1 - username",
+ "antispoof-conflict-bottom": "Suggestion for user that tried to create a user with a name that was not accepted.",
+ "antispoof-name-illegal": "Account creation error message because a user account creation rule was violated. Parameters:\n* $1 is the username that someone wanted to create\n* $2 is the error message. One of {{msg-mw|antispoof-badtype}}, {{msg-mw|antispoof-empty}}, {{msg-mw|antispoof-blacklisted}} and others.",
+ "antispoof-bad-char": "{{Optional}}\nIt is not a complete message, but a template for designator of a bad character, so localization can format it properly. Parameters:\n* $1 is the bad character itself.\n* $2 is the Unicode code point of bad character (\"U+\" followed by hex number).",
+ "antispoof-bad-char-non-printable": "The same as antispooof-bad-char, but for non-printable characters. Since non-printable characters do not have visual representation, template has only one parameter:\n* $1 is the Unicode code point of bad character (\"U+\" followed by hex number).",
+ "antispoof-badtype": "Reason for failed account creation.",
+ "antispoof-empty": "Reason for failed account creation.",
+ "antispoof-blacklisted": "Reason for failed account creation. Parameters:\n* $1 — bad character designator (built with either {{msg-mw|antispoof-bad-char}} or {{msg-mw|antispoof-bad-char-non-printable}}).",
+ "antispoof-combining": "Reason for failed account creation. Parameters:\n* $1 — bad character designator (built with either {{msg-mw|antispoof-bad-char}} or {{msg-mw|antispoof-bad-char-non-printable}}).",
+ "antispoof-unassigned": "Reason for failed account creation. Parameters:\n* $1 — bad character designator (built with either antispoof-bad-char or …-non-printable).",
+ "antispoof-deprecated": "Reason for failed account creation. Parameters:\n* $1 — bad character designator (built with either {{msg-mw|antispoof-bad-char}} or {{msg-mw|antispoof-bad-char-non-printable}}).\n{{doc-important|\"Deprecate\" does '''not''' mean \"out of date\" or \"old\"}}",
+ "antispoof-noletters": "Reason for failed account creation.",
+ "antispoof-mixedscripts": "Reason for failed account creation.",
+ "antispoof-tooshort": "Reason for failed account creation.",
+ "antispoof-ignore": "This is a checkbox shown on [[Special:UserLogin|a signup page]] when a user with both [[MediaWiki:Right-createaccount/qqq|createaccount]] and [[MediaWiki:Right-override-antispoof/qqq|override-antispoof]] rights tries to register a new user account. It allows to register a username that would otherwise be blocked by the [[mw:Extension:AntiSpoof|AntiSpoof extension]].",
+ "right-override-antispoof": "{{doc-right|override-antispoof}}",
+ "apihelp-antispoof-description": "{{doc-apihelp-description|antispoof}}",
+ "apihelp-antispoof-param-username": "{{doc-apihelp-param|antispoof|username}}",
+ "apihelp-antispoof-example-1": "{{doc-apihelp-example|antispoof}}",
+ "apihelp-createaccount-param-ignoreantispoof": "{{doc-apihelp-param|createaccount|ignoreantispoof}}"
+}
diff --git a/AntiSpoof/i18n/qu.json b/AntiSpoof/i18n/qu.json
new file mode 100644
index 00000000..e96fa541
--- /dev/null
+++ b/AntiSpoof/i18n/qu.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "antispoof-desc": "Chaqrusqa sananchayuq, pantachiq, musphachiq rakiquna suti kamariyta hark'an",
+ "antispoof-conflict-top": "\"$1\" nisqa sutiqa {{PLURAL:$2|kay rakiqunapman|kay rakiqunakunapman}} nisyu kaqllam kachkan:",
+ "antispoof-conflict-bottom": "Ama hina kaspa, huk hina sutita akllakuy.",
+ "antispoof-name-illegal": "Nisqayki \"$1\" sutiqa manam saqillasqachu, suti pantachiyta hark'anapaq: \"$2\". Ama hina kaspa, huk sutita akllay.",
+ "antispoof-badtype": "Willa layaqa manam allinchu",
+ "antispoof-empty": "Ch'usaq qillqa",
+ "antispoof-blacklisted": "Mana allin sutisuyupi kaq $1 sananchayuq",
+ "antispoof-combining": "$1 t'inkinakuy sananchawanmi qallarin",
+ "antispoof-unassigned": "Mana allin $1 sananchayuq",
+ "antispoof-deprecated": "Mawk'ayasqa $1 sananchayuq",
+ "antispoof-noletters": "Manam ima sanampayuqchu",
+ "antispoof-mixedscripts": "Mana allin chaqrusqa qillqayuq",
+ "antispoof-tooshort": "Kanunikuchasqa sutiqa nisyu pisillam",
+ "antispoof-ignore": "Kaqlla kay llanchiyta ama ruraychu",
+ "right-override-antispoof": "Kaqlla kay llanchiyta ama atichiychu"
+}
diff --git a/AntiSpoof/i18n/ro.json b/AntiSpoof/i18n/ro.json
new file mode 100644
index 00000000..2d2ee0b6
--- /dev/null
+++ b/AntiSpoof/i18n/ro.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cin",
+ "Firilacroco",
+ "KlaudiuMihaila",
+ "Minisarm",
+ "Stelistcristi",
+ "Strainu"
+ ]
+ },
+ "antispoof-desc": "Blochează crearea de conturi cu nume de utilizator cu LiTeRe AmEsTeCate, confuzante sau similare",
+ "antispoof-conflict-top": "Numele „$1” este prea asemănător cu {{PLURAL:$2|următorul cont deja existent|următoarele $2 conturi|următoarele $2 de conturi}}:",
+ "antispoof-conflict-bottom": "Vă rugăm să alegeți alt nume.",
+ "antispoof-name-illegal": "Numele „$1” nu este permis pentru a preveni confuziile cu numele: $2. Vă rugăm să alegeți un alt nume de utilizator.",
+ "antispoof-badtype": "Tip de date greșit",
+ "antispoof-empty": "Șir gol",
+ "antispoof-blacklisted": "Conține caracterul interzis $1",
+ "antispoof-combining": "Începe cu marcajul de combinare $1",
+ "antispoof-unassigned": "Conține un caracter neasociat sau învechit",
+ "antispoof-deprecated": "Conține caracterul interzis $1",
+ "antispoof-noletters": "Nu conține nici o literă",
+ "antispoof-mixedscripts": "Conține mai multe scripturi incompatibile",
+ "antispoof-tooshort": "Nume canonizat prea scurt",
+ "antispoof-ignore": "Nu verifica existența unor nume de cont similare",
+ "right-override-antispoof": "Asuprește verificările spoofing"
+}
diff --git a/AntiSpoof/i18n/roa-tara.json b/AntiSpoof/i18n/roa-tara.json
new file mode 100644
index 00000000..80162708
--- /dev/null
+++ b/AntiSpoof/i18n/roa-tara.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras",
+ "Reder"
+ ]
+ },
+ "antispoof-desc": "Bluècche 'a ccrejazione de cunde utende cu script-misckate, confuse e cu nome de l'utinde ca s'assomigliane",
+ "antispoof-conflict-top": "'U nome \"$1\" s'assomigghie assaije a {{PLURAL:$2|'u cunde esistende|le cunde}}:",
+ "antispoof-conflict-bottom": "Se preghe de scacchià n'otre nome.",
+ "antispoof-name-illegal": "'U nome \"$1\" non g'è permesse pe prevenìe casine o 'mbruegghie de nome utinde: $2.\nPe piacere scacchie 'n'otre nome.",
+ "antispoof-badtype": "Tipe de date errate",
+ "antispoof-empty": "stringa vacande",
+ "antispoof-blacklisted": "Condène carattere jndr'à liste gnure $1",
+ "antispoof-combining": "Accumenze cu 'na marche combinate $1",
+ "antispoof-unassigned": "Condène carattere non assignate o deprecate",
+ "antispoof-deprecated": "Condène carattere deprecate $1",
+ "antispoof-noletters": "Non ge condène nisciune lettere",
+ "antispoof-mixedscripts": "Condène script miste incompatibbele",
+ "antispoof-tooshort": "Canonicizze nome assaje piccenne",
+ "antispoof-ignore": "Ignore verifeche sus a le 'mbruegghie",
+ "right-override-antispoof": "Sovrascrive le verifeche sus a le 'mbruegghie",
+ "apihelp-antispoof-description": "Verifiche 'nu nome utende condre a le verifiche de normalizzazzione AntiSpoof.",
+ "apihelp-antispoof-param-username": "'U nome utende da verificà condre a AntiSpoof.",
+ "apihelp-antispoof-example-1": "Verifiche 'u nome utende \"Foo\" condre a AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Lasse perdere le verifiche de spoofing (vole 'u deritte <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/ru.json b/AntiSpoof/i18n/ru.json
new file mode 100644
index 00000000..9ee75d47
--- /dev/null
+++ b/AntiSpoof/i18n/ru.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "DCamer",
+ "Kaganer",
+ "Okras",
+ "Van de Bugger",
+ "Александр Сигачёв"
+ ]
+ },
+ "antispoof-desc": "Запрещает создание учётных записей с именами, содержащими символы из разных алфавитов, вводящих в заблуждение и похожих на имена других участников.",
+ "antispoof-conflict-top": "Имя «$1» слишком похоже на следующие {{PLURAL:$2|1=имя пользователя|имена пользователей}}:",
+ "antispoof-conflict-bottom": "Пожалуйста, выберите другое имя.",
+ "antispoof-name-illegal": "Использование имени «$1» запрещено, так как оно $2. Пожалуйста, выберите другое имя.",
+ "antispoof-badtype": "Неправильный тип данных",
+ "antispoof-empty": "не содержит ни одного символа",
+ "antispoof-blacklisted": "содержит следующий символ из чёрного списка: $1",
+ "antispoof-combining": "начинается со следующего модифицирующего символа Юникода: $1",
+ "antispoof-unassigned": "содержит следующий недопустимый символ: $1",
+ "antispoof-deprecated": "содержит следующий исключённый из использования символ: $1",
+ "antispoof-noletters": "не содержит ни одной буквы",
+ "antispoof-mixedscripts": "использует символы из разных алфавитов",
+ "antispoof-tooshort": "слишком короткое",
+ "antispoof-ignore": "Игнорировать проверки на схожие имена",
+ "right-override-antispoof": "игнорирование проверок на схожие имена",
+ "apihelp-antispoof-param-username": "Имя участника, которое нужно проверить с помощью AntiSpoof.",
+ "apihelp-antispoof-example-1": "Проверить с помощью AntiSpoof имя участника «Foo»"
+}
diff --git a/AntiSpoof/i18n/rue.json b/AntiSpoof/i18n/rue.json
new file mode 100644
index 00000000..de9fa5a2
--- /dev/null
+++ b/AntiSpoof/i18n/rue.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb"
+ ]
+ },
+ "antispoof-desc": "Заборонює створїня конт котрых імена суть подобны іншым хоснователям, што комбінують різны тіпы писма, або што нароком хотять ошалити.",
+ "antispoof-conflict-top": "Мено „$1“ є барз подобне {{PLURAL:$2|наступному хосновательскому імену|наступным хосновательскым іменам}}:",
+ "antispoof-conflict-bottom": "Просиме, звольте собі інше імя.",
+ "antispoof-name-illegal": "Мено „$1“ не є поволено створити, жебы ся не плело або ся не ужывало про наподобнёваня чуджіх хосновательскых мен: $2.\nПросиме, звольте собі інше мено.",
+ "antispoof-badtype": "Планый датовый тіп",
+ "antispoof-empty": "Порожнїй рядок",
+ "antispoof-blacklisted": "Обсягує недозволеный сімбол $1",
+ "antispoof-combining": "Зачінать комбінуючім діакрітічным сімболом $1",
+ "antispoof-unassigned": "Обсягує неприпустимый сімбол $1",
+ "antispoof-deprecated": "Обсягує забороненый сімбол $1",
+ "antispoof-noletters": "Не обсягує жадну літеру",
+ "antispoof-mixedscripts": "Обсягує недоволену комбінацію тіпів писма",
+ "antispoof-tooshort": "Імя є по нормалізації дуже курте",
+ "antispoof-ignore": "Іґноровати перевіркы на ошалюючі імена",
+ "right-override-antispoof": "Іґнорованя перевірок на подобны імена"
+}
diff --git a/AntiSpoof/i18n/sa.json b/AntiSpoof/i18n/sa.json
new file mode 100644
index 00000000..8a0f29d8
--- /dev/null
+++ b/AntiSpoof/i18n/sa.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shreekant Hegde",
+ "Shubha",
+ "Vibhijain"
+ ]
+ },
+ "antispoof-desc": "मिश्रितलिपियुक्तानां, भ्रमजनकानां, समानयोजकनामयुक्तानां च प्रयोगाः अवरुद्ध्यन्ताम् ।",
+ "antispoof-conflict-top": "\" $1\" इत्येतत् नाम {{PLURAL:$2|विद्यमानस्य| $2 }}: इत्येतस्य समानं वर्तते ।",
+ "antispoof-conflict-bottom": "कृपया भिन्नं नाम चिनोतु ।",
+ "antispoof-name-illegal": "अवैध नाम",
+ "antispoof-badtype": "स्वस्थाननिर्माणे विपन्नतायाः कारणम् ।",
+ "antispoof-empty": "स्वस्थाननिर्माणे विपन्नतायाः कारणम् ।",
+ "antispoof-blacklisted": "$1 अमान्यपदार्थयुक्तः अस्ति",
+ "antispoof-combining": "$1 योजनसङ्केतेन आरभ्यते",
+ "antispoof-unassigned": "$1 अनिर्दिष्टपदार्थयुक्तः अस्ति",
+ "antispoof-deprecated": "$1 विरोधपदार्थयुक्तः अस्ति",
+ "antispoof-noletters": "अस्मिन् किमपि अक्षरं न विद्यते",
+ "antispoof-mixedscripts": "असिन्धुमिश्रलिपियुक्तः अस्ति",
+ "antispoof-tooshort": "अधिकृतं नाम परमलघु वर्तते",
+ "antispoof-ignore": "अनुकरणावलोकनानि निर्लक्ष्यताम्",
+ "right-override-antispoof": "अनुकरणावलोकनं परिष्क्रियताम्"
+}
diff --git a/AntiSpoof/i18n/sah.json b/AntiSpoof/i18n/sah.json
new file mode 100644
index 00000000..032ba2ef
--- /dev/null
+++ b/AntiSpoof/i18n/sah.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bert Jickty",
+ "HalanTul"
+ ]
+ },
+ "antispoof-desc": "Атын дьону булкуйар уонна атын дьон ааттарыгар майгынныыр хас да омук суругун-бичигин туһанан ааттанары бобор.",
+ "antispoof-conflict-top": "\"$1\" диэн аат урут бэлиэтэммит {{PLURAL:$2|аакка|$2 аакка}} наһаа майгынныыр:",
+ "antispoof-conflict-bottom": "Бука диэн, атын ааты тал эрэ.",
+ "antispoof-name-illegal": "\"$1\" диэн аат $2 диэн ааттары кытта буккулубаттарын туһугар бобуллар. Онон атын ааты толкуйдаа.",
+ "antispoof-badtype": "Сыыһа тииптээх дааннайдар",
+ "antispoof-empty": "Кураанах устуруока",
+ "antispoof-blacklisted": "Бобуллубут бэлиэлэр бааллар",
+ "antispoof-combining": "Уларытар бэлиэттэн саҕаланар",
+ "antispoof-unassigned": "Биллибэт эбэтэр өйөммөт бэлиэлэр бааллар",
+ "antispoof-noletters": "Биир даҕаны буукуба суох",
+ "antispoof-mixedscripts": "Сөп түбэһиспэт атын-атын суруктарынан суруллубут",
+ "antispoof-tooshort": "Каноннаммыт тыл наһаа кылгас",
+ "antispoof-ignore": "Майгынныыр ааттары бэрэбиэркэлээһини оҥорума",
+ "right-override-antispoof": "Майгынныыр ааттары тэҥнээмэ"
+}
diff --git a/AntiSpoof/i18n/sat.json b/AntiSpoof/i18n/sat.json
new file mode 100644
index 00000000..4c7cd6b2
--- /dev/null
+++ b/AntiSpoof/i18n/sat.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Salvator"
+ ]
+ },
+ "antispoof-conflict-top": "Ńtum do pray mit́gea{{PLURAL:$2| menaḱ akaunṭ| noakodo $2 akaunṭ kana}}:",
+ "antispoof-conflict-bottom": "Eṭaḱ ńutum sendraeme",
+ "antispoof-name-illegal": "Ńutum\"$1\" do baṅ hoyoḱa se okokomṛogea: $2. Dayakate eṭaḱ ńutum emam.",
+ "antispoof-badtype": "Bạṛić tottho lekan",
+ "antispoof-empty": "Eken ghuṛã",
+ "antispoof-blacklisted": "$1 Begor samuṅ karekṭar menaḱa",
+ "antispoof-combining": "Joṛa cikhnạ khon ehobme",
+ "antispoof-unassigned": "Baṅ ganoḱ karekṭar menaḱa",
+ "antispoof-noletters": "Cet́ okhor hõ banuḱa",
+ "antispoof-mixedscripts": "Begor jutsoi olnolko menaḱa",
+ "antispoof-tooshort": "Ạḍi kạtić ńutum",
+ "antispoof-ignore": "Beganoḱ bachao paromme",
+ "right-override-antispoof": "Beganoḱ koyoḱ parom bachaome"
+}
diff --git a/AntiSpoof/i18n/scn.json b/AntiSpoof/i18n/scn.json
new file mode 100644
index 00000000..7079657b
--- /dev/null
+++ b/AntiSpoof/i18n/scn.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Santu",
+ "Tonyfroio",
+ "Pippinu",
+ "Sarvaturi"
+ ]
+ },
+ "antispoof-desc": "Blocca la criazzioni di cunti d'utenti cu nomi fatti d'arfabbeti ammiscati, chi ponnu fari cunfùnniri, o chi s'assimìgghianu troppu assai",
+ "antispoof-conflict-top": "Lu nomu \"$1\" assimigghia troppu assai a {{PLURAL:$2|stu cuntu ca già c'è|sti cunti ca già ci sunnu}}:",
+ "antispoof-conflict-bottom": "Pi favuri scegghi n'àutru nomu.",
+ "antispoof-name-illegal": "Lu nomu \"$1\" nun è cunzintutu, pi scanzari cunfusioni o scancî di pirsuna: $2.\nPi favuri scegghi n'àutru nomu.",
+ "antispoof-badtype": "Tipu di dati erratu",
+ "antispoof-empty": "Stringa vacanti",
+ "antispoof-blacklisted": "Cunteni lu caràttiri nta lista nìura $1",
+ "antispoof-combining": "Accumenza cûn caràttiri cumminanti $1",
+ "antispoof-unassigned": "Cunteni lu caràttiri nun assignatu $1",
+ "antispoof-deprecated": "Cunteni lu caràttiri dipricatu $1",
+ "antispoof-noletters": "Nun cunteni nudda littra",
+ "antispoof-mixedscripts": "Cunteni arfabbeti ammiscati chi nun sunnu cumpatìbbili",
+ "antispoof-tooshort": "Nomu 'n forma canonica troppu curtu",
+ "antispoof-ignore": "Sàuta li cuntrolli contra ô scanciu di pirsuna",
+ "right-override-antispoof": "Sautari li cuntrolli contra ô scanciu di pirsuna",
+ "apihelp-antispoof-description": "Suttaponi un nomu utenti ê virìfichi di nurmalizzazzioni di l'AntiSpoof",
+ "apihelp-antispoof-param-username": "Lu nomu utenti di cuntrullari cu l'AntiSpoof",
+ "apihelp-antispoof-example-1": "Cuntrullari lu nomu utenti \"Cicciu\" cu l'AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Sautari li cuntrolli AntiSpoof (havi bisognu dû drittu <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/sco.json b/AntiSpoof/i18n/sco.json
new file mode 100644
index 00000000..5789cf09
--- /dev/null
+++ b/AntiSpoof/i18n/sco.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "antispoof-desc": "Blocks the creaution o accoonts wi mixt-screept, confusin n siclik uisernames",
+ "antispoof-conflict-top": "The name \"$1\" is ower siclik tae the follaein {{PLURAL:$2|uisername|uisernames}}:",
+ "antispoof-conflict-bottom": "Please chuise anither name.",
+ "antispoof-name-illegal": "The name \"$1\" is no alloued fer tae hinder confusin or spoofed uisernames: $2.\nPlease choose another name.",
+ "antispoof-badtype": "Bad data type",
+ "antispoof-empty": "Tuim string",
+ "antispoof-blacklisted": "Haes blaickleetit chairacter $1",
+ "antispoof-combining": "Begins wi combinin maurk $1",
+ "antispoof-unassigned": "Haes onassigned chairacter $1",
+ "antispoof-deprecated": "Haes depreecatit chairacter $1",
+ "antispoof-noletters": "Disna contain onie letters",
+ "antispoof-mixedscripts": "Contains oncompatible mixt screepts",
+ "antispoof-tooshort": "Canoneecalised name is ower short",
+ "antispoof-ignore": "Ignore spuifin checks",
+ "right-override-antispoof": "Owerride the spuifin checks",
+ "apihelp-antispoof-description": "Check ae uisername again AntiSpoof's normalisation checks.",
+ "apihelp-antispoof-param-username": "The uisername tae check again AntiSpoof.",
+ "apihelp-antispoof-example-1": "Check uisername \"Foo\" again AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/sh.json b/AntiSpoof/i18n/sh.json
new file mode 100644
index 00000000..1840ee69
--- /dev/null
+++ b/AntiSpoof/i18n/sh.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kolega2357",
+ "OC Ripper"
+ ]
+ },
+ "antispoof-desc": "Blokira pravljenje računa sa miješanim slovima, zbunjujućim i sličnim korisničkim imenima",
+ "antispoof-conflict-top": "Ime \"$1\" je previše slično {{PLURAL:$2|slijedećem postojećem računu|sa slijedeća $2 postojeća računa|sa slijedećih $2 postojećih računa}}:",
+ "antispoof-conflict-bottom": "Molimo izaberite drugo ime.",
+ "antispoof-name-illegal": "Ime \"$1\" nije dopušteno da bi se izbjegla zbunjujuća ili slična korisnička imena: $2.\nMolimo Vas da odaberete drugo ime.",
+ "antispoof-badtype": "Krivi tip podataka",
+ "antispoof-empty": "Prazan unos",
+ "antispoof-blacklisted": "Sadrži nedozvoljeno slovo (karakter)",
+ "antispoof-combining": "Počinje sa znakom kombinacije",
+ "antispoof-unassigned": "Sadrži nedodijeljen ili zastarjeli znak (karakter)",
+ "antispoof-noletters": "Ne sadrži ni jedno slovo",
+ "antispoof-mixedscripts": "Nekompatibilna pisma - Некомпатибилна писма",
+ "antispoof-tooshort": "Normalizirano ime je prekratko",
+ "antispoof-ignore": "Ignoriraj provjeru nevaljanih imena (antispoof)",
+ "right-override-antispoof": "Zaobilaženje provjera korisničkog imena"
+}
diff --git a/AntiSpoof/i18n/shn.json b/AntiSpoof/i18n/shn.json
new file mode 100644
index 00000000..77060a1a
--- /dev/null
+++ b/AntiSpoof/i18n/shn.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khun Sar",
+ "Adolfsar",
+ "Saimawnkham"
+ ]
+ },
+ "antispoof-desc": "ဢဝ် mixed-script သေ တပ်ႉပႅတ်ႈၵၢၼ်သၢင်ႈ account၊ မီးလွင်ႈ ဢမ်ႇၸႅင်ႈလႅင်းလႄႈ မီးလွင်ႈဢၼ်ၸိုဝ်ႈသဵင်ငၢႆးမိူၼ်ၵၼ်ဝႆႉ",
+ "antispoof-conflict-top": "ၸိုဝ်ႈဢၼ်ဝႃႈ \"$1\"ၼႆႉ မၼ်းငၢႆးမိူၼ်တင်းၼင်ႇပႃႈတႂ်ႈၼႆႉပူၼ်ႉတီႈ",
+ "antispoof-conflict-bottom": "ၶႅၼ်းတေႃႇ လိူၵ်ႈဢဝ်ၸိုဝ်ႈ တၢင်ႇဢၼ်တႃႉ",
+ "antispoof-name-illegal": "ၸိုဝ်ႈသဵင်ႈ \"$1\"ၼႆႉ ဢမ်ႇၶႂၢင်းပၼ်ႁႂ်ႈၸႂ်ႉတိုဝ်း တႃႇတေဢမ်ႇပဵၼ် လွင်ႈငမ်းငဝ်းလႄႈ ဢၼ်ပွမ်ၸိုဝ်ႈၵၼ်: $2 ။ \nၶႅၼ်းတေႃႈ လိူၵ်ႈဢဝ်ၸိုဝ်ႈတၢင်ႇဢၼ်တႃႉ",
+ "antispoof-badtype": "ပဵၼ်ၶေႃႈမုၼ်း ဢၼ်ဢမ်ႇလီ",
+ "antispoof-empty": "သၢႆပဝ်ႇ",
+ "antispoof-blacklisted": "မီးဝႆႉ ၽၢင်ႁၢင်ႈ ပလႅၵ်ႉလိတ်ႉ $1",
+ "antispoof-combining": "တႄႇလူၺ်ႈႁူမ်ႈႁူမ်းပၼ်မၢႆ $1",
+ "antispoof-unassigned": "မီးဝႆႉပၵ်းၾၢင် ဢၼ်ဢမ်ႇလႆႈတၢင်ႇမၢႆၾၢင် $1",
+ "antispoof-deprecated": "မီးဝႆႉ တူဝ်လိၵ်ႈဢၼ်ဢမ်ႇၽွမ်ႉလႆႈၸႂ်ဝႆႉ $1",
+ "antispoof-noletters": "ဢမ်ႇမီးတူဝ်လိၵ်ႈသင်သေတူဝ်",
+ "antispoof-mixedscripts": "မီးဝႆႉတူဝ်လိၵ်ႈလေႃးလႄး ဢၼ်ဢမ်ႇၶဝ်ႈဢမ်ႇမႅၼ်ႈၵၼ်ဝႆႉ",
+ "antispoof-ignore": "ၶၢမ်ႈပႅတ်ႈၵၢၼ်ၵူတ်ႇထတ်း",
+ "right-override-antispoof": "တႅၼ်းတၢင်ပႅတ်ႈ ၵၢၼ်ၵူတ်ႇထတ်း ၸိုဝ်ႈမိူၼ်"
+}
diff --git a/AntiSpoof/i18n/si.json b/AntiSpoof/i18n/si.json
new file mode 100644
index 00000000..7cbf33a4
--- /dev/null
+++ b/AntiSpoof/i18n/si.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Singhalawap",
+ "Thameera123",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "antispoof-desc": "අකුරු වර්ග මිශ්‍ර, ව්‍යාකූල සහ සමාන ලෙස පෙනෙන පරිශීලක නම් වාරණය කරයි",
+ "antispoof-conflict-top": "\"$1\" යන නම {{PLURAL:$2|දැනට පවතින ගිණුමට|පහත ගිණුම් $2 ට}} බෙහෙවින් සමානය:",
+ "antispoof-conflict-bottom": "කරුණාකර වෙනත් නමක් තෝරාගන්න",
+ "antispoof-name-illegal": "ව්‍යාකූල පරිශීලක නම් වැළැක්වීම සඳහා \"$1\" යන නමට අවසර දිය නොහැකිය: $2.",
+ "antispoof-badtype": "අවලංගු දත්ත වර්ගයකි",
+ "antispoof-empty": "හිස් ස්ට්‍රිංඑකකි",
+ "antispoof-blacklisted": "$1 අපලේඛනගත සංකේතය අඩංගු වේ",
+ "antispoof-combining": "$1 ඒකාබද්ධ සලකුණෙන් ආරම්භ වේ",
+ "antispoof-unassigned": "නොපවරන ලද $1 අක්ෂරය අඩංගු වේ",
+ "antispoof-deprecated": "$1 රැවටිලි සහිත අක්ෂරය අඩංගුයි",
+ "antispoof-noletters": "අකුරු කිසිවක් අඩංගු නොවේ",
+ "antispoof-mixedscripts": "නොගැළපෙන මිශ්‍ර විධානාවලි අඩංගු වේ",
+ "antispoof-tooshort": "ප්‍රමතකරණය කරන ලද නම කෙටි වැඩිය",
+ "antispoof-ignore": "අනවශ්‍ය පිරික්සුම් නොසළකා හරින්න",
+ "right-override-antispoof": "අනවශ්‍ය පිරික්සුම් ප්‍රතික්ෂේප කරන්න"
+}
diff --git a/AntiSpoof/i18n/sk.json b/AntiSpoof/i18n/sk.json
new file mode 100644
index 00000000..26e7759e
--- /dev/null
+++ b/AntiSpoof/i18n/sk.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84"
+ ]
+ },
+ "antispoof-desc": "Blokuje tvorbu účtov so zmiešanými písmami, mätúce a podobné mená.",
+ "antispoof-conflict-top": "Meno „$1” je príliš podobné {{PLURAL:$2|existujúcemu účtu|nasledovným $2 účtom}}:",
+ "antispoof-conflict-bottom": "Prosím, vyberte si iné meno.",
+ "antispoof-name-illegal": "Meno „$1“ nie je povolené, aby sa zabránilo náhodnému alebo zámernému pomýleniu mien používateľov: $2. Zvoľte si prosím iné meno.",
+ "antispoof-badtype": "Nesprávny typ dát",
+ "antispoof-empty": "Prázdny reťazec",
+ "antispoof-blacklisted": "Obsahuje znak zo zoznamu zakázaných $1",
+ "antispoof-combining": "Začína kombinačným znakom $1",
+ "antispoof-unassigned": "Obsahuje nepriradený znak $1",
+ "antispoof-deprecated": "Obsahuje zavrhovaný znak $1",
+ "antispoof-noletters": "Neobsahuje žiadne písmená",
+ "antispoof-mixedscripts": "Obsahuje nekompatibilné zmiešané písma",
+ "antispoof-tooshort": "Meno prevedené do kanonického tvaru je príliš krátke",
+ "antispoof-ignore": "Ignorovať kontroly klamania",
+ "right-override-antispoof": "Prekonať kontroly klamania"
+}
diff --git a/AntiSpoof/i18n/sl.json b/AntiSpoof/i18n/sl.json
new file mode 100644
index 00000000..f242599d
--- /dev/null
+++ b/AntiSpoof/i18n/sl.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334",
+ "Irena Plahuta"
+ ]
+ },
+ "antispoof-desc": "Prepreči ustvarjanje računov z mešanimi pisavami ter begajočimi in podobnimi uporabniškimi imeni",
+ "antispoof-conflict-top": "Ime »$1« je preveč podobno {{PLURAL:$2|spodnjemu $2 uporabniškemu imenu|spodnjima $2 uporabniškima imenoma|spodnjim $2 uporabniškim imenom}}:",
+ "antispoof-conflict-bottom": "Prosimo, izberite drugačno ime.",
+ "antispoof-name-illegal": "Ime »$1« ni dovoljeno, saj se lahko zamenja oz. norčuje iz »$2«.\nProsimo, izberite drugo ime.",
+ "antispoof-badtype": "Napačen podatkovni tip",
+ "antispoof-empty": "Prazen niz",
+ "antispoof-blacklisted": "Vsebuje znak $1, ki je na črni listi",
+ "antispoof-combining": "Začne se z združevalnim znakom $1",
+ "antispoof-unassigned": "Vsebuje nepripisan ali nedovoljen znak",
+ "antispoof-deprecated": "Vsebuje odsvetovan znak $1",
+ "antispoof-noletters": "Ne vsebuje nobenih črk",
+ "antispoof-mixedscripts": "Vsebuje nezdružljive mešane skripte",
+ "antispoof-tooshort": "Poenoteno ime je prekratko",
+ "antispoof-ignore": "Prezri preverjanja prevare",
+ "right-override-antispoof": "Preskoči preverjanja prevar"
+}
diff --git a/AntiSpoof/i18n/sq.json b/AntiSpoof/i18n/sq.json
new file mode 100644
index 00000000..412b5a3d
--- /dev/null
+++ b/AntiSpoof/i18n/sq.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "FatosMorina",
+ "Olsi"
+ ]
+ },
+ "antispoof-desc": "Bllokon krijimin e llogarive me shkrime të përziera, duke çrregulluar edhe emrat e ngjashëm të përdorusve",
+ "antispoof-conflict-top": "Emri \"$1\" është shumë i ngjashëm me {{PLURAL:$2||llogarinë ekzistuese|me $2 llogaritë e mëposhtme}}:",
+ "antispoof-conflict-bottom": "Ju lutemi zgjidhni një emër tjetër.",
+ "antispoof-name-illegal": "Emri \"$1\" nuk është i lejuar për të shmangur emrat e ngatërrueshëm apo të rremë: $2.",
+ "antispoof-badtype": "Shtypje e keqe e të dhënave",
+ "antispoof-empty": "Fushë boshe",
+ "antispoof-blacklisted": "Përmban karakter të palejuar $1",
+ "antispoof-combining": "Fillon me shenjën e kombinuar $1",
+ "antispoof-unassigned": "Përmban karakter të papërcaktuar $1",
+ "antispoof-deprecated": "Përmban karakter të palejueshëm $1",
+ "antispoof-noletters": "Nuk përmban asnjë shkronjë",
+ "antispoof-mixedscripts": "Përmban shkrime të përziera të papajtueshme",
+ "antispoof-tooshort": "Emri Canonicalized shumë i shkurtër",
+ "antispoof-ignore": "Tejkaloni kontrollet për emra të rremë",
+ "right-override-antispoof": "Refuzoni kontrollet për emra të rremë"
+}
diff --git a/AntiSpoof/i18n/sr-ec.json b/AntiSpoof/i18n/sr-ec.json
new file mode 100644
index 00000000..20dc8df4
--- /dev/null
+++ b/AntiSpoof/i18n/sr-ec.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Millosh",
+ "Rancher",
+ "Sasa Stefanovic",
+ "Јованвб",
+ "Жељко Тодоровић",
+ "Михајло Анђелковић",
+ "Milicevic01"
+ ]
+ },
+ "antispoof-desc": "Спречава отварање налога с мешаним писмима, збуњујућим и сличним корисничким именима",
+ "antispoof-conflict-top": "Име „$1“ је превише слично са {{PLURAL:$2|следећим корисничким именом|следећим корисничким именима}}:",
+ "antispoof-conflict-bottom": "Изаберите друго име.",
+ "antispoof-name-illegal": "Име „$1“ није дозвољено да би се избегла збуњујућа или лажирана корисничка имена: $2.\nИзаберите друго име.",
+ "antispoof-bad-char": "„$1“ ($2)",
+ "antispoof-badtype": "Погрешна врста података",
+ "antispoof-empty": "Празна ниска",
+ "antispoof-blacklisted": "Садржи забрањени знак $1",
+ "antispoof-combining": "Почиње са саставним знаком $1",
+ "antispoof-unassigned": "Садржи недодељен знак $1",
+ "antispoof-deprecated": "Садржи застарели знак $1",
+ "antispoof-noletters": "Не садржи ниједно слово",
+ "antispoof-mixedscripts": "Садржи несагласна мешана писма",
+ "antispoof-tooshort": "Нормализовано име је прекратко",
+ "antispoof-ignore": "Занемари међусобно слична имена",
+ "right-override-antispoof": "заобилажење провера за међусобно слична имена"
+}
diff --git a/AntiSpoof/i18n/sr-el.json b/AntiSpoof/i18n/sr-el.json
new file mode 100644
index 00000000..e3e987cd
--- /dev/null
+++ b/AntiSpoof/i18n/sr-el.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello",
+ "Rancher",
+ "Жељко Тодоровић",
+ "Milicevic01"
+ ]
+ },
+ "antispoof-desc": "Sprečava otvaranje naloga s mešanim pismima, zbunjujućim i sličnim korisničkim imenima",
+ "antispoof-conflict-top": "Ime „$1“ je previše slično sa sledećim korisničkim {{PLURAL:$2|imenom|imenima}}:",
+ "antispoof-conflict-bottom": "Izaberite drugo ime.",
+ "antispoof-name-illegal": "Ime „$1“ nije dozvoljeno da bi se izbegla zbunjujuća ili lažirana korisnička imena: $2.\nIzaberite drugo ime.",
+ "antispoof-bad-char": "„$1“ ($2)",
+ "antispoof-badtype": "Pogrešna vrsta podataka",
+ "antispoof-empty": "Prazna niska",
+ "antispoof-blacklisted": "Sadrži zabranjeni znak $1",
+ "antispoof-combining": "Počinje sa sastavnim znakom $1",
+ "antispoof-unassigned": "Sadrži nedodeljen znak $1",
+ "antispoof-deprecated": "Sadrži zastareli znak $1",
+ "antispoof-noletters": "Ne sadrži nijedno slovo",
+ "antispoof-mixedscripts": "Sadrži nesaglasna mešana pisma",
+ "antispoof-tooshort": "Normalizovano ime je prekratko",
+ "antispoof-ignore": "Zanemari međusobno slična imena",
+ "right-override-antispoof": "zaobilaženje provera za međusobno slična imena"
+}
diff --git a/AntiSpoof/i18n/stq.json b/AntiSpoof/i18n/stq.json
new file mode 100644
index 00000000..87c14ea7
--- /dev/null
+++ b/AntiSpoof/i18n/stq.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyt"
+ ]
+ },
+ "antispoof-desc": "Ferhinnert dät Moakjen fon Benutserkonten mäd miskede Teekensatse, fertoogede un äänelke Benutsernoomen",
+ "antispoof-conflict-top": "Die Noome „$1“ is {{PLURAL:$2|dät existierjende Benutserkonto|do foulgjende $2 Benutserkonten}} tou äänelk:",
+ "antispoof-conflict-bottom": "Wääl n uur Noome.",
+ "antispoof-name-illegal": "Die wonskede Benutsernoome „$1“ is nit ferlööwed. Gruund: $2<br />Wääl n uur Benutsernoome.",
+ "antispoof-badtype": "Ungultigen Doatentyp",
+ "antispoof-empty": "Loos Fäild",
+ "antispoof-blacklisted": "Änthaalt nit tousteene Teekene.",
+ "antispoof-combining": "Kombinationsteeken toun Ounfang.",
+ "antispoof-unassigned": "Änthaalt nit tou-oardnede of nit wonskede Teekene.",
+ "antispoof-noletters": "Änthaalt neen Bouksteeuwe.",
+ "antispoof-mixedscripts": "Änthaalt Teekene fon uunglieke Skriftsysteme.",
+ "antispoof-tooshort": "Die kanonisierde Noome is tou kuut.",
+ "antispoof-ignore": "Ignorierje Äänelkhaidswröich",
+ "right-override-antispoof": "Buute Kraft sätten fon ju Benutsernoome-Äänelkhaidswröige"
+}
diff --git a/AntiSpoof/i18n/su.json b/AntiSpoof/i18n/su.json
new file mode 100644
index 00000000..19c5ad7b
--- /dev/null
+++ b/AntiSpoof/i18n/su.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Irwangatot",
+ "Kandar"
+ ]
+ },
+ "antispoof-desc": "Peungpeuk dijieunna rekening nu landihanana skrip campuran, ngaco, atawa sarupa",
+ "antispoof-conflict-top": "Ngaran \"$1\" mirip teuing jeung {{PLURAL:$2|sandiasma|sandiasma}}:",
+ "antispoof-conflict-bottom": "Mangga pilih ngaran séjén.",
+ "antispoof-name-illegal": "Landihan \"$1\" teu diwenangkeun ngarah teu pahili jeung landihan: $2. Mangga pilih landihan séjén.",
+ "antispoof-badtype": "Tipeu datana awon",
+ "antispoof-empty": "String kosong",
+ "antispoof-blacklisted": "Ngandung karakter nu dipahing $1",
+ "antispoof-combining": "Dimimitian ku tanda gabungan $1",
+ "antispoof-unassigned": "Ngandung karakter anu teu dipaké $1",
+ "antispoof-noletters": "Kosong",
+ "antispoof-mixedscripts": "Ngandung tulisan campuran nu teu kompatibel",
+ "antispoof-tooshort": "Landihan kanonikna pondok teuing",
+ "right-override-antispoof": "Abeykeun pangecekan panipuan ngaran pamaké"
+}
diff --git a/AntiSpoof/i18n/sv.json b/AntiSpoof/i18n/sv.json
new file mode 100644
index 00000000..bae52b26
--- /dev/null
+++ b/AntiSpoof/i18n/sv.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Boivie",
+ "Lejonel",
+ "Lokal Profil",
+ "M.M.S.",
+ "Skalman"
+ ]
+ },
+ "antispoof-desc": "Förhindrar registreringen av konton med förvirrande eller liknande namn samt användarnamn som innehåller blandade skriftsystem.",
+ "antispoof-conflict-top": "Namnet \"$1\" är för likt {{PLURAL:$2|följande användarnamn|de följande användarnamnen}}:",
+ "antispoof-conflict-bottom": "Välj ett annat namn.",
+ "antispoof-name-illegal": "För att förhindra förvirrande eller falska användarnamn, är namnet \"$1\" inte tillåtet. Anledning: $2\nVälj ett annat namn istället.",
+ "antispoof-badtype": "Felaktig datatyp",
+ "antispoof-empty": "Tom sträng",
+ "antispoof-blacklisted": "Innehåller det svartlistade tecknet $1",
+ "antispoof-combining": "Börjar med kombinationstecknet $1",
+ "antispoof-unassigned": "Innehåller det icke-tilldelade tecknet $1",
+ "antispoof-deprecated": "Innehåller det utfasade tecknet $1",
+ "antispoof-noletters": "Innehåller inga bokstäver",
+ "antispoof-mixedscripts": "Innehåller flera inkompatibla skriftsystem",
+ "antispoof-tooshort": "Det kanoniserade namnet är för kort",
+ "antispoof-ignore": "Ignorera missbrukskontroll",
+ "right-override-antispoof": "Slipper kontroller mot förvirrande användarnamn",
+ "apihelp-antispoof-description": "Kontrollera ett användarnamn mot AntiSpoofs normaliseringskontroller.",
+ "apihelp-antispoof-param-username": "Det användarnamn som ska kontrolleras mot AntiSpoof.",
+ "apihelp-antispoof-example-1": "Kontrollera användarnamn \"Foo\" mot AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/sw.json b/AntiSpoof/i18n/sw.json
new file mode 100644
index 00000000..2dea3f6b
--- /dev/null
+++ b/AntiSpoof/i18n/sw.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stephenwanjau"
+ ]
+ },
+ "antispoof-conflict-bottom": "Tafadhali chagua jina lingine.",
+ "antispoof-badtype": "Aina mbaya ya takwimu",
+ "antispoof-empty": "Utungo ni tupu",
+ "antispoof-noletters": "Haina herufi zozote"
+}
diff --git a/AntiSpoof/i18n/szl.json b/AntiSpoof/i18n/szl.json
new file mode 100644
index 00000000..c4c48dca
--- /dev/null
+++ b/AntiSpoof/i18n/szl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Przemub"
+ ]
+ },
+ "antispoof-badtype": "Felerny typ danych"
+}
diff --git a/AntiSpoof/i18n/ta.json b/AntiSpoof/i18n/ta.json
new file mode 100644
index 00000000..3d475299
--- /dev/null
+++ b/AntiSpoof/i18n/ta.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Karthi.dr",
+ "Shanmugamp7",
+ "TRYPPN"
+ ]
+ },
+ "antispoof-desc": "கலப்பு படிவம், குழப்பமான மற்றும் ஒரேமாதிரியான பயனர்பெயர்களை கொண்ட கணக்குகளை உருவாக்குவதை தடுக்கும்.",
+ "antispoof-conflict-top": "இந்த பெயர் \"$1\" ஆனது இது மாதிரியாக உள்ளது {{PLURAL:$2|ஏற்கனவே உள்ள கணக்கு|கீழ்காணும் $2 கணக்குகள்}}:",
+ "antispoof-conflict-bottom": "தயவு செய்து மற்றொரு பெயரைத் தேர்ந்தெடுக்கவும்.",
+ "antispoof-name-illegal": "இந்த பெயர் ''$1'' அனுமதிக்கப்படவில்லை ஏனெனில் குழப்பமான அல்லது போலியான பயனர்பெயர்களை தடுப்பதற்காக:$2\nதயவுகூர்ந்து வேறு பெயரை தேர்ந்தெடு.",
+ "antispoof-badtype": "மோசமான தரவு வகை",
+ "antispoof-empty": "வெற்றுச் சொற்றொடர்",
+ "antispoof-blacklisted": "தடுக்கப்பட்ட எழுத்து உள்ளது $1",
+ "antispoof-combining": "ஒருங்கிணைக்கும் குறியுடன் ஆரம்பிக்கும் $1",
+ "antispoof-unassigned": "வகுத்தமைக்கப்படாத அல்லது நீக்கப்பட்ட எழுத்தை கொண்டுள்ளது $1",
+ "antispoof-deprecated": "நீக்கப்பட்ட எழுத்தைக் கொண்டுள்ளது $1",
+ "antispoof-noletters": "எந்த எழுத்தையும் கொண்டிருக்கவில்லை",
+ "antispoof-mixedscripts": "பொருந்தாத கலந்த உரையை (scripts) கொண்டுள்ளது",
+ "antispoof-tooshort": "Canonicalized பெயர் மிக குறுகியதாக உள்ளது.",
+ "antispoof-ignore": "ஏமாற்றுதல் சரிபார்த்தலை புறக்கணி.",
+ "right-override-antispoof": "ஏமாற்றுதல் சரிபார்த்தலை ரத்துசெய்"
+}
diff --git a/AntiSpoof/i18n/te.json b/AntiSpoof/i18n/te.json
new file mode 100644
index 00000000..5a24cc6d
--- /dev/null
+++ b/AntiSpoof/i18n/te.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chaduvari",
+ "Mpradeep",
+ "Veeven",
+ "వైజాసత్య"
+ ]
+ },
+ "antispoof-desc": "మిశ్రమ లిపులతో, అయోమయపు మరియు సామీప్యపు పేర్లతో ఖాతాలను సృష్టించడాన్ని నిరోధిస్తుంది",
+ "antispoof-conflict-top": "\"$1\" అన్న పేరు కింది {{PLURAL:$2|వాడుకరి పేరుకు|వాడుకరి పేర్లకు}} మరీ దగ్గరగా ఉంది:",
+ "antispoof-conflict-bottom": "దయచేసి మరో పేరుని ఎంచుకోండి.",
+ "antispoof-name-illegal": "\"$1\" అనే పేరును అనుమతించము; అయోమయాన్ని, ఎగతాళి చేయడాన్ని నివారించేందుకు: $2. దయచేసి మరో పేరును ఎంచుకోండి.",
+ "antispoof-badtype": "తప్పుడు డాటా రకం",
+ "antispoof-empty": "ఖాళీ వాక్యం",
+ "antispoof-blacklisted": "$1 అనే నిషేదిత అక్షరాన్ని కలిగి ఉంది",
+ "antispoof-combining": "$1 సంయుక్త చిహ్నంతో మొదలయ్యింది",
+ "antispoof-unassigned": "ఇంతవరకూ ఆపాదించబడని వర్ణం $1 ని కలిగి ఉంది",
+ "antispoof-deprecated": "వినియోగం నుండి తీసేసిన వర్ణం $1 ని కలిగి ఉంది",
+ "antispoof-noletters": "ఎటువంటి అక్షరాలూ లేవు",
+ "antispoof-mixedscripts": "అసంగత మిశ్రమ లిపులు ఉన్నాయి",
+ "antispoof-tooshort": "విహితమైన పేరు మరీ చిన్నగా ఉంది",
+ "right-override-antispoof": "స్పూఫింగ్ తనిఖీలను అధిక్రమించు"
+}
diff --git a/AntiSpoof/i18n/tg-cyrl.json b/AntiSpoof/i18n/tg-cyrl.json
new file mode 100644
index 00000000..577d5220
--- /dev/null
+++ b/AntiSpoof/i18n/tg-cyrl.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim"
+ ]
+ },
+ "antispoof-desc": "Аз эҷоди ҳисобҳои корбарӣ бо ҳуруфҳои гиҷкунанда ё мушобеҳ бо дигар ҳисобҳои корбарӣ ҷилавгирӣ мекунад.",
+ "antispoof-name-illegal": "Номи \"$1\" ба далели ҷилавгирӣ аз номҳои корбарии сардардкунанда ё масхара миҷоз нест: $2. Лутфан номи дигареро интихоб кунед.",
+ "antispoof-badtype": "Навъи додаи номуносиб",
+ "antispoof-empty": "Риштаи холӣ",
+ "antispoof-blacklisted": "Аломатҳои дар феҳристи сиёҳ қарордоштаро дар бар мегирад",
+ "antispoof-combining": "Бо аломати ҷамъ шурӯъ мешавад.",
+ "antispoof-unassigned": "Аломати таъйиннашуда ё номуносиб аст",
+ "antispoof-noletters": "Ягон ҳарфҳо надорад",
+ "antispoof-mixedscripts": "Скриптҳои омехтаи носозгарро дар бар мегирад",
+ "antispoof-tooshort": "Номи мӯътариф хеле кӯтоҳ аст"
+}
diff --git a/AntiSpoof/i18n/tg-latn.json b/AntiSpoof/i18n/tg-latn.json
new file mode 100644
index 00000000..6c8f8bf7
--- /dev/null
+++ b/AntiSpoof/i18n/tg-latn.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent"
+ ]
+ },
+ "antispoof-desc": "Az eçodi hisobhoi korbarī bo hurufhoi giçkunanda jo muşobeh bo digar hisobhoi korbarī çilavgirī mekunad.",
+ "antispoof-name-illegal": "Nomi \"$1\" ba daleli çilavgirī az nomhoi korbariji sardardkunanda jo masxara miçoz nest: $2. Lutfan nomi digarero intixob kuned.",
+ "antispoof-badtype": "Nav'i dodai nomunosib",
+ "antispoof-empty": "Riştai xolī",
+ "antispoof-blacklisted": "Alomathoi dar fehristi sijoh qarordoştaro dar bar megirad",
+ "antispoof-combining": "Bo alomati çam' şurū' meşavad.",
+ "antispoof-unassigned": "Alomati ta'jinnaşuda jo nomunosib ast",
+ "antispoof-noletters": "Jagon harfho nadorad",
+ "antispoof-mixedscripts": "Skripthoi omextai nosozgarro dar bar megirad",
+ "antispoof-tooshort": "Nomi mū'tarif xele kūtoh ast"
+}
diff --git a/AntiSpoof/i18n/tk.json b/AntiSpoof/i18n/tk.json
new file mode 100644
index 00000000..ec370356
--- /dev/null
+++ b/AntiSpoof/i18n/tk.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke"
+ ]
+ },
+ "antispoof-desc": "Garyşyk şriftli, bulaşyklyk dörediji we çalymdaş ulanyjy atlarynyň döredilmegini blokirleýär.",
+ "antispoof-conflict-top": "\"$1\" diýen at {{PLURAL:$2|bar bolan şu hasaba|aşakdaky $2 hasaba}} örän çalymdaş:",
+ "antispoof-conflict-bottom": "Başga bir at saýlaň.",
+ "antispoof-name-illegal": "Ulanyjy atlarynyň garjaşmagynyň ýa-da bulaşdyrylmagynyň öňüni almak \"$1\" adyna rugsat berilmeýär: $2. Başga bir ulanyjy adyny saýlaň.",
+ "antispoof-badtype": "Näsaz maglumat tipi",
+ "antispoof-empty": "Boş setir",
+ "antispoof-blacklisted": "Gara sanawa goşulan simwoly öz içine alýar",
+ "antispoof-combining": "Birleşdiriş belligi bilen başlaýar",
+ "antispoof-unassigned": "Bellenilmedik ýa-da tassyklanmadyk simwoly öz içine alýar",
+ "antispoof-noletters": "Hiç hili harpy ýok",
+ "antispoof-mixedscripts": "Laýyk däl garjaşyk şriftleri öz içine alýar",
+ "antispoof-tooshort": "Kadalaşdyrylan at örän gysga",
+ "antispoof-ignore": "Bulaşyklyk barlaglaryna üns berme",
+ "right-override-antispoof": "Bulaşyklyk barlagyny pisint etme"
+}
diff --git a/AntiSpoof/i18n/tl.json b/AntiSpoof/i18n/tl.json
new file mode 100644
index 00000000..4dd958aa
--- /dev/null
+++ b/AntiSpoof/i18n/tl.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw",
+ "Sky Harbor",
+ "Jojit fb",
+ "Umherirrender"
+ ]
+ },
+ "antispoof-desc": "Humaharang sa paglikha ng mga kuwentang may pinaghalong panitik, nakakalito at magkakatulad na mga pangalan ng tagagamit",
+ "antispoof-conflict-top": "Ang pangalang \"$1\" labis na magkatulad sa {{PLURAL:$2|sumusunod na account|mga sumusunod na account}}:",
+ "antispoof-conflict-bottom": "Mangyaring pumili lamang ng iba pang pangalan.",
+ "antispoof-name-illegal": "Hindi pinapayagan ang pangalang \"$1\" upang maiwasan ang nakalilito o mapanlilang na mga pangalan ng tagagamit: $2.\nMangyaring pumili ng iba pang pangalan.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "Masamang uri ng dato",
+ "antispoof-empty": "Bagting (''string'') na walang laman",
+ "antispoof-blacklisted": "Naglalaman ng nakalistang ipinagbabawal na panitik na $1",
+ "antispoof-combining": "Nagsisimula sa panandang pambuklod na $1",
+ "antispoof-unassigned": "Naglalaman ng hindi nakatakdang panitik na $1",
+ "antispoof-deprecated": "Naglalaman ng tinutulang panitik na $1",
+ "antispoof-noletters": "Hindi naglalaman ng anumang mga titik",
+ "antispoof-mixedscripts": "Naglalaman ng hindi magkakatugmang pinaghalong mga panitik",
+ "antispoof-tooshort": "Napakamaikli ng naging panuntunang pangalan",
+ "antispoof-ignore": "Balewalain ang mga pagsusuring pangpanlilinlang (spoof)",
+ "right-override-antispoof": "Daigin ang mga pagsusuring pangpanlilinlang (''spoof'')"
+}
diff --git a/AntiSpoof/i18n/to.json b/AntiSpoof/i18n/to.json
new file mode 100644
index 00000000..477888e7
--- /dev/null
+++ b/AntiSpoof/i18n/to.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tauʻolunga"
+ ]
+ },
+ "antispoof-name-illegal": "Ko e hingoa \"$1\" ʻoku ʻikai ngofua ia koeʻuhi ko e \"$2\" ʻoku loi. Fakamolemole fili ha hingoa kehe.",
+ "antispoof-empty": "ʻOtutohi maha"
+}
diff --git a/AntiSpoof/i18n/tr.json b/AntiSpoof/i18n/tr.json
new file mode 100644
index 00000000..febb8933
--- /dev/null
+++ b/AntiSpoof/i18n/tr.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Incelemeelemani",
+ "Joseph",
+ "Srhat",
+ "Arystanbek"
+ ]
+ },
+ "antispoof-desc": "Karışık-betikli, kafa karıştırıcı ve benzer kullanıcı adlarıyla hesap oluşturulmasını engeller",
+ "antispoof-conflict-top": "\"$1\" adı, şu {{PLURAL:$2|kullanıcı adına|kullanıcı adlarına}} çok benziyor:",
+ "antispoof-conflict-bottom": "Lütfen başka bir isim seçin.",
+ "antispoof-name-illegal": "$2 hesabıyla karışmaması için \"$1\" ismine izin verilmemektedir. Lütfen başka bir kullanıcı adı seçiniz.",
+ "antispoof-badtype": "Bozuk veri tipi",
+ "antispoof-empty": "Boş dizi",
+ "antispoof-blacklisted": "$1 Kara listeye karakteri içeriyor",
+ "antispoof-combining": "$1 Kaynaştırma işaretiyle başlıyor",
+ "antispoof-unassigned": "$1 Atanmamış ya da onaylanmamış karakter içeriyor",
+ "antispoof-deprecated": "$1 eski karakterini içeriyor",
+ "antispoof-noletters": "Hiç harf içermez",
+ "antispoof-mixedscripts": "Uyumsuz karışık betikler içeriyor",
+ "antispoof-tooshort": "Standartlaştırılmış isim çok kısa",
+ "antispoof-ignore": "Aldatıcı kontrolleri ihmal et",
+ "right-override-antispoof": "Aldatıcı kontrolleri gerçersiz kıl",
+ "apihelp-antispoof-description": "AntiSpoof bu normalleşme denetler karşı bir kullanıcı adı kontrol edin.",
+ "apihelp-antispoof-param-username": "Kullanıcı adı AntiSpoof karşı kontrol edin.",
+ "apihelp-antispoof-example-1": "Onay \"\" karşı AntiSpoof Foo kullanıcı adı"
+}
diff --git a/AntiSpoof/i18n/tzm.json b/AntiSpoof/i18n/tzm.json
new file mode 100644
index 00000000..7d979484
--- /dev/null
+++ b/AntiSpoof/i18n/tzm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tifinaghes"
+ ]
+ },
+ "antispoof-bad-char": "\"$1\" ($2)"
+}
diff --git a/AntiSpoof/i18n/ug-arab.json b/AntiSpoof/i18n/ug-arab.json
new file mode 100644
index 00000000..0182f9ac
--- /dev/null
+++ b/AntiSpoof/i18n/ug-arab.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arlin",
+ "Sahran"
+ ]
+ },
+ "antispoof-desc": "ئىشلەتكۈچى ئاتىغا ئارىلاش قوليازما ئىشلىتىش، ئاسان ئارىلىشىپ كېتىدىغان ۋە مەۋجۇت ئىشلەتكۈچى ئاتى بىلەن بەك ئوخشاپ كېتىدىغان ھېسابات ئىشلىتىش چەكلىنىدۇ",
+ "antispoof-conflict-top": "\"$1\" ئىشلەتكۈچى ئاتى بىلەن {{PLURAL:$2|مەۋجۇت ھېسابات|تۆۋەندىكى $2 ھېسابات}} بەت ئوخشايدىكەن:",
+ "antispoof-conflict-bottom": "باشقا ئات تاللاڭ.",
+ "antispoof-name-illegal": "ئىشلەتكۈچى ئاتى $2 نى ئارىلاشتۇرۇۋېتىش ياكى قاقتى-سوقتى خاراكتىرىدە ئىشلىتىشنىڭ ئالدىنى ئېلىش ئۈچۈن ئىشلەتكۈچى ئاتى \"$1\" نى ئىشلىتىش چەكلەندى.\nباشقا ئىشلەتكۈچى ئىسمىنى ئىشلىتىڭ.",
+ "antispoof-bad-char": "\"$1\" ($2)",
+ "antispoof-badtype": "خاتا سانلىق مەلۇمات تىپى",
+ "antispoof-empty": "قۇرۇق تىزىقى",
+ "antispoof-blacklisted": "قارا تىزىملىكتىكى ھەرپ $1 نى ئۆز ئىچىگە ئالغان",
+ "antispoof-combining": "بىرلەشمە بەلگە $1 دىن باشلىنىدۇ",
+ "antispoof-unassigned": "ئىمزا قويۇلمىغان ھەرپ $1 نى ئۆز ئىچىگە ئالىدۇ",
+ "antispoof-deprecated": "تاشلىۋەتكەن ھەرپ $1 نى ئۆز ئىچىگە ئالىدۇ",
+ "antispoof-noletters": "ھېچقانداق ھەرپنى ئۆز ئىچىگە ئالمايدۇ",
+ "antispoof-mixedscripts": "ماسلاشمايدىغان بىرىكمە قوليازمىنى ئۆز ئىچىگە ئالىدۇ",
+ "antispoof-tooshort": "ئۆلچەملەشتۈرۈلگەندىن كېيىنكى ئىسىم بەك قىسقا",
+ "antispoof-ignore": "قاقتى-سوقتى تەكشۈرۈشكە پەرۋا قىلما",
+ "right-override-antispoof": "قاقتى-سوقتى تەكشۈرۈشنى قاپلا"
+}
diff --git a/AntiSpoof/i18n/uk.json b/AntiSpoof/i18n/uk.json
new file mode 100644
index 00000000..17b11f4c
--- /dev/null
+++ b/AntiSpoof/i18n/uk.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "A1",
+ "AS",
+ "Ahonc",
+ "Andriykopanytsia",
+ "Piramidion",
+ "Ата"
+ ]
+ },
+ "antispoof-desc": "Забороняє створення облікових записів з іменами, подібними або схожими на імена інших облікових записів, та іменами, що містять символи з різних систем письма.",
+ "antispoof-conflict-top": "Ім'я „$1“ дуже схоже на {{PLURAL:$2|1=таке ім'я|такі імена}}:",
+ "antispoof-conflict-bottom": "Будь ласка, оберіть інше ім'я.",
+ "antispoof-name-illegal": "Не дозволене використання імені «$1» з метою запобігання плутанню з занадто схожими на нього іменами: $2. Будь ласка, виберіть інше ім'я.",
+ "antispoof-badtype": "Невірний тип даних",
+ "antispoof-empty": "Порожній рядок",
+ "antispoof-blacklisted": "Містить заборонений символ: $1",
+ "antispoof-combining": "Починається з символу $1",
+ "antispoof-unassigned": "Містить неприпустимий символ: $1",
+ "antispoof-deprecated": "Містить заборонений символ: $1",
+ "antispoof-noletters": "Не містить жодної літери",
+ "antispoof-mixedscripts": "Використовуються несумісні системи письма",
+ "antispoof-tooshort": "Канонічне ім'я надто коротке",
+ "antispoof-ignore": "Ігнорувати перевірки на схожі імена",
+ "right-override-antispoof": "ігнорування перевірок на схожі імена",
+ "apihelp-antispoof-description": "Перевірите ім'я користувача через перевірку нормалізації AntiSpoof.",
+ "apihelp-antispoof-param-username": "Ім'я користувача для перевірки через AntiSpoof.",
+ "apihelp-antispoof-example-1": "Перевірити ім'я користувача «Foo» через AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "Ігнорувати перевірки підмін (вимагає права <code>override-antispoof</code>)."
+}
diff --git a/AntiSpoof/i18n/ur.json b/AntiSpoof/i18n/ur.json
new file mode 100644
index 00000000..221b04d7
--- /dev/null
+++ b/AntiSpoof/i18n/ur.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "antispoof-conflict-bottom": "براہ مہربانی ایک اور نام کا انتخاب کریں ۔",
+ "antispoof-badtype": "برا اعداد و شمار کی قسم",
+ "antispoof-empty": "خالی تار",
+ "antispoof-noletters": "نہیں کسی بھی حروف پر مشتمل",
+ "antispoof-mixedscripts": "مطابقت مخلوط سکرپٹ پر مشتمل ہے"
+}
diff --git a/AntiSpoof/i18n/vec.json b/AntiSpoof/i18n/vec.json
new file mode 100644
index 00000000..723af90e
--- /dev/null
+++ b/AntiSpoof/i18n/vec.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua",
+ "GatoSelvadego"
+ ]
+ },
+ "antispoof-desc": "Inpedisse la creazion de account con carateri missià, nomi utente che genera confusion o che se someja massa tra de lori.",
+ "antispoof-conflict-top": "El nome \"$1\" el xe someja massa {{PLURAL:$2|a l'utensa esistente|a le seguenti $2 utense}}:",
+ "antispoof-conflict-bottom": "Sièglite n'antro nome.",
+ "antispoof-name-illegal": "El nome \"$1\" no'l xe mìa permesso, par evitar confusion o utilizi fraudolenti: $2.\nSiegli n'altro nome, par piaser.",
+ "antispoof-badtype": "Tipo de dati mìa giusto.",
+ "antispoof-empty": "Stringa voda",
+ "antispoof-blacklisted": "Contien el caratere mìa consentio $1",
+ "antispoof-combining": "Scuminsia có ła conbinasion de carateri $1",
+ "antispoof-unassigned": "Contien el caratere nó asegnà $1",
+ "antispoof-deprecated": "Contien el caratere deprecà $1",
+ "antispoof-noletters": "No ghe xe letere",
+ "antispoof-mixedscripts": "Conbinazion de sistemi de scritura mìa conpatibili",
+ "antispoof-tooshort": "Nome in forma canonica massa curto",
+ "antispoof-ignore": "Ignora i contròli del spoofing",
+ "right-override-antispoof": "Ignora le verifiche de spoofing"
+}
diff --git a/AntiSpoof/i18n/vep.json b/AntiSpoof/i18n/vep.json
new file mode 100644
index 00000000..0301d818
--- /dev/null
+++ b/AntiSpoof/i18n/vep.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Игорь Бродский"
+ ]
+ },
+ "antispoof-conflict-bottom": "Olgat hüväd, valikat toine nimi.",
+ "antispoof-badtype": "Vär andmusidentip",
+ "antispoof-empty": "Pall'az rivi"
+}
diff --git a/AntiSpoof/i18n/vi.json b/AntiSpoof/i18n/vi.json
new file mode 100644
index 00000000..b07dd895
--- /dev/null
+++ b/AntiSpoof/i18n/vi.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Vinhtantran"
+ ]
+ },
+ "antispoof-desc": "Cấm không được mở tài khoản dưới tên người dùng sử dụng hơn một hệ thống chữ viết, gây nhầm lẫn, và tương tự với tên người dùng khác",
+ "antispoof-conflict-top": "Tên “$1” quá giống {{PLURAL:$2|tên|các tên}} người dùng sau:",
+ "antispoof-conflict-bottom": "Xin hãy chọn tên khác.",
+ "antispoof-name-illegal": "Không được phép dùng tên “$1” vì có thể gây nhầm lẫn hoặc lừa đảo: $2. Xin hãy chọn tên khác.",
+ "antispoof-bad-char": "“$1” ($2)",
+ "antispoof-badtype": "Kiểu dữ liệu không hợp lệ",
+ "antispoof-empty": "Chuỗi trống",
+ "antispoof-blacklisted": "Có chứa ký tự bị cấm $1",
+ "antispoof-combining": "Bắt đầu bằng dấu kết hợp $1",
+ "antispoof-unassigned": "Có chứa ký tự chưa gán hoặc ký tự bị phản đối",
+ "antispoof-deprecated": "Có chứa ký tự bị phản đối $1",
+ "antispoof-noletters": "Không có bất kỳ chữ nào",
+ "antispoof-mixedscripts": "Có trộn lẫn hệ thống viết không tương thích",
+ "antispoof-tooshort": "Tên chuẩn hóa quá ngắn",
+ "antispoof-ignore": "Không kiểm tra tên có gây nhầm lẫn",
+ "right-override-antispoof": "Bỏ qua kiểm tra tên",
+ "apihelp-antispoof-description": "Kiểm tra tên người dùng qua quá trình chuẩn hóa của AntiSpoof.",
+ "apihelp-antispoof-param-username": "Tên người dùng để kiểm tra qua AntiSpoof.",
+ "apihelp-antispoof-example-1": "Kiểm tra tên người dùng “Foo” qua AntiSpoof"
+}
diff --git a/AntiSpoof/i18n/vo.json b/AntiSpoof/i18n/vo.json
new file mode 100644
index 00000000..b1186e01
--- /dev/null
+++ b/AntiSpoof/i18n/vo.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "Smeira"
+ ]
+ },
+ "antispoof-desc": "Blokön jafi kalas labü gebananems kofudik, tu sümiks u labü lafabs distik",
+ "antispoof-conflict-top": "Nem: \"$1\" binon tu sümik äs {{PLURAL:$1|nem kala ya dabinöla|nems kalas ya dabinölas}}:",
+ "antispoof-conflict-bottom": "Välolös nemi votik.",
+ "antispoof-name-illegal": "Nem: „$1“ no padälon, ad vitön gebananemis kofudik u smilöfikis: $2. Välolös, begö! nemi votik.",
+ "antispoof-badtype": "Nünasot badik",
+ "antispoof-empty": "Vödem vagik",
+ "antispoof-blacklisted": "Keninükon malatis no pedälölis.",
+ "antispoof-combining": "Primon me malat kobüköl",
+ "antispoof-unassigned": "Keninükon malatis no lonöfölis u vorädikis",
+ "antispoof-noletters": "No ninädon tonatis alseimik",
+ "antispoof-mixedscripts": "Keninükon migi penamasitas no balabikas",
+ "antispoof-tooshort": "Nem valemik tu brefik",
+ "antispoof-ignore": "Nedemön sümikontrolis",
+ "right-override-antispoof": "Nefägükon sümikontrolis"
+}
diff --git a/AntiSpoof/i18n/yi.json b/AntiSpoof/i18n/yi.json
new file mode 100644
index 00000000..9a77e043
--- /dev/null
+++ b/AntiSpoof/i18n/yi.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "antispoof-desc": "בלאקירט שאפֿן קאנטעס מיט געמישטע שריפֿטן, פֿארפלאנטערטע און ענלעכע באניצער נעמען",
+ "antispoof-conflict-top": "דער נאָמען \"$1\" איז צו ענלעך צו {{PLURAL:$2|דעם פֿאלגנדעם באניצער נאמען|די פֿאלגנדע באניצער נעמען}}:",
+ "antispoof-conflict-bottom": "ביטע קלויבט אויס אן אנדער נאָמען.",
+ "antispoof-badtype": "שלעכטער דאַטן טיפ",
+ "antispoof-empty": "ליידיג שנירל",
+ "antispoof-blacklisted": "כולל דעם געאסר'טן צייכן $1",
+ "antispoof-combining": "הייבט אן מיטן קאמבינאציע צייכן $1",
+ "antispoof-unassigned": "כולל א נישט געניצטער אדער אלטלעכער צייכן",
+ "antispoof-deprecated": "אנטהאלט פארעלטערטן כאראקטער $1",
+ "antispoof-noletters": "אַנטהאַלט ניט קײַן בוכשטאַבן.",
+ "antispoof-tooshort": "נאמען צו קורץ"
+}
diff --git a/AntiSpoof/i18n/yo.json b/AntiSpoof/i18n/yo.json
new file mode 100644
index 00000000..090c0789
--- /dev/null
+++ b/AntiSpoof/i18n/yo.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Demmy"
+ ]
+ },
+ "antispoof-conflict-top": "Orúkọ ''$1'' jọ {{PLURAL:$2|àpamọ́ tó wà yìí|àwọn àpamọ́ $2 wọ̀nyí}} jù:",
+ "antispoof-conflict-bottom": "Ẹ jọ̀wọ́ ẹ yan orúkọ míràn.",
+ "antispoof-name-illegal": "Orúkọ ''$1'' kò ṣe é gbà ní àyè láti dínà ìdojúrú tàbí ìtànjẹ orúkọ oníṣe: $2.\nẸ jọ̀wọ́ ẹ yan orúkọ míràn.",
+ "antispoof-badtype": "Irú dátà burúkú",
+ "antispoof-noletters": "Kò ní lẹ́tà kankan nínú"
+}
diff --git a/AntiSpoof/i18n/yue.json b/AntiSpoof/i18n/yue.json
new file mode 100644
index 00000000..433e60d5
--- /dev/null
+++ b/AntiSpoof/i18n/yue.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Antonytse",
+ "CRCHF",
+ "Yueman"
+ ]
+ },
+ "antispoof-desc": "封鎖一啲對於有混合程序、混淆同埋相似嘅用戶名嘅開戶口動作",
+ "antispoof-conflict-top": "由於戶口”$1“同以下呢啲戶口嘅名太似:\n{{PLURAL:$2|username|usernames}}",
+ "antispoof-conflict-bottom": "請揀第個名",
+ "antispoof-name-illegal": "呢個名\"$1\"唔畀用,以預防撈亂或者冒充:\"$2\"。請揀過個名。",
+ "antispoof-badtype": "錯誤嘅資料類型",
+ "antispoof-empty": "空白字串",
+ "antispoof-blacklisted": "有列喺黑名單度嘅字符「$1」",
+ "antispoof-combining": "從結合標記$1開始",
+ "antispoof-unassigned": "有未指定嘅字符「$1」",
+ "antispoof-deprecated": "有列喺黑名單度嘅字符「$1」",
+ "antispoof-noletters": "唔包含任何字元",
+ "antispoof-mixedscripts": "包含唔相容嘅混合碼",
+ "antispoof-tooshort": "正規化嘅名太短",
+ "antispoof-ignore": "略過欺詐檢查",
+ "right-override-antispoof": "無視欺詐檢查",
+ "apihelp-antispoof-description": "正常檢查一個戶口係咪有網絡釣魚嘅嘢。",
+ "apihelp-antispoof-param-username": "呢個用戶名懷疑有網絡釣魚",
+ "apihelp-antispoof-example-1": "查到“Foo”呢個戶口有網絡釣魚嘅嘢",
+ "apihelp-createaccount-param-ignoreantispoof": "略過欺詐檢查(需要 <code>override-antispoof</code> 權限)。"
+}
diff --git a/AntiSpoof/i18n/zea.json b/AntiSpoof/i18n/zea.json
new file mode 100644
index 00000000..a84b038a
--- /dev/null
+++ b/AntiSpoof/i18n/zea.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "NJ",
+ "Ooswesthoesbes"
+ ]
+ },
+ "antispoof-desc": "Blokkeer 't anmaeken van gebrukers mie meêdere schriffen, verwarr'nde en heliekende gebrukersnaemen",
+ "antispoof-name-illegal": "De naem \"$1\" is nie toehestaen om verwarrieng of gefinheerde gebrukersnaemen te voorkomm'n: $2. Kies asjeblieft een aore naem.",
+ "antispoof-badtype": "Verkeêrd datatype",
+ "antispoof-empty": "Lehe strieng",
+ "antispoof-blacklisted": "Bevat verbood'n karakter",
+ "antispoof-combining": "Behun mie een hecombineerd merkteêken",
+ "antispoof-unassigned": "Bevat nie toehewezen of verouwerd karakter",
+ "antispoof-noletters": "Bevat hin letters",
+ "antispoof-mixedscripts": "Bevat nie compatibele schriffen",
+ "antispoof-tooshort": "Afekorte naem te kort",
+ "antispoof-ignore": "Controle op geliekende gebrukersnaemen negeren"
+}
diff --git a/AntiSpoof/i18n/zh-hans.json b/AntiSpoof/i18n/zh-hans.json
new file mode 100644
index 00000000..eddabc59
--- /dev/null
+++ b/AntiSpoof/i18n/zh-hans.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gzdavidwong",
+ "Hzy980512",
+ "Jimmy xu wrk",
+ "Liangent",
+ "PhiLiP",
+ "Xiaomingyan",
+ "Yfdyh000",
+ "Liuxinyu970226"
+ ]
+ },
+ "antispoof-desc": "禁止使用混合文字、容易混淆或与已存在用户名过于相似的用户名创建帐户",
+ "antispoof-conflict-top": "用户名“$1”与{{PLURAL:$2|这个已存在的账户|下列$2个账户}}过于相似:",
+ "antispoof-conflict-bottom": "请选择其他名称。",
+ "antispoof-name-illegal": "为了防止混淆或欺诈性使用用户名“$2”,用户名“$1”已被禁止使用。请使用其他用户名。",
+ "antispoof-badtype": "错误的数据类型",
+ "antispoof-empty": "空白字串",
+ "antispoof-blacklisted": "包含已列入黑名单的字符 $1",
+ "antispoof-combining": "以组合标记开始 $1",
+ "antispoof-unassigned": "包含未分配的字符 $1",
+ "antispoof-deprecated": "包含不赞成使用的字符 $1",
+ "antispoof-noletters": "未包含任何字符",
+ "antispoof-mixedscripts": "包含不兼容的混合文字",
+ "antispoof-tooshort": "标准化后的用户名过短",
+ "antispoof-ignore": "忽略欺诈检查",
+ "right-override-antispoof": "无视欺诈检查",
+ "apihelp-antispoof-description": "检查用户名是否触犯AntiSpoof的常规检查。",
+ "apihelp-antispoof-param-username": "要检查是否触犯AntiSpoof的用户名。",
+ "apihelp-antispoof-example-1": "检查用户名“Foo”是否触犯AntiSpoof",
+ "apihelp-createaccount-param-ignoreantispoof": "忽略欺骗检查(需要<code>override-antispoof</code>权限)。"
+}
diff --git a/AntiSpoof/i18n/zh-hant.json b/AntiSpoof/i18n/zh-hant.json
new file mode 100644
index 00000000..1c7151d8
--- /dev/null
+++ b/AntiSpoof/i18n/zh-hant.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gzdavidwong",
+ "Justincheng12345",
+ "Liangent",
+ "Mark85296341",
+ "Simon Shek",
+ "Waihorace",
+ "Wrightbus",
+ "LNDDYL",
+ "Cwlin0416"
+ ]
+ },
+ "antispoof-desc": "禁止使用混合 Script、容易混淆或與既有使用者名稱過於相似的使用者名稱建立帳號",
+ "antispoof-conflict-top": "名稱 \"$1\" 與以下{{PLURAL:$2|使用者|$2 個使用者}}過於相似:",
+ "antispoof-conflict-bottom": "請選擇其他名稱。",
+ "antispoof-name-illegal": "已禁止使用名稱 \"$1\" 以避免混淆或欺騙使用者名稱:$2。\n請使用其他名稱。",
+ "antispoof-badtype": "錯誤的資料類型",
+ "antispoof-empty": "空字串",
+ "antispoof-blacklisted": "含有已列入黑名單的字元 $1",
+ "antispoof-combining": "以組合符號開頭 $1",
+ "antispoof-unassigned": "含有未分配的字元 $1",
+ "antispoof-deprecated": "含有已停用的字元 $1",
+ "antispoof-noletters": "未含有任何字母",
+ "antispoof-mixedscripts": "含有混合不相容的 Script",
+ "antispoof-tooshort": "標準化後的使用者名稱過短",
+ "antispoof-ignore": "忽略欺騙檢查",
+ "right-override-antispoof": "覆蓋欺騙檢查",
+ "apihelp-antispoof-description": "檢查使用者名稱是否違反 AntiSpoof 的常態檢查。",
+ "apihelp-antispoof-param-username": "檢查使用者名稱是否違反 AntiSpoof。",
+ "apihelp-antispoof-example-1": "檢查使用者名稱 \"Foo\" 是否違反 AntiSpoof。",
+ "apihelp-createaccount-param-ignoreantispoof": "忽略詐欺攻擊檢查 (需要 <code>override-antispoof</code> 權限)。"
+}
diff --git a/AntiSpoof/maintenance/BatchAntiSpoofClass.php b/AntiSpoof/maintenance/BatchAntiSpoofClass.php
new file mode 100644
index 00000000..6c611c69
--- /dev/null
+++ b/AntiSpoof/maintenance/BatchAntiSpoofClass.php
@@ -0,0 +1,78 @@
+<?php
+
+$IP = getenv( 'MW_INSTALL_PATH' );
+if ( $IP === false ) {
+ $IP = __DIR__ . '/../../..';
+}
+require_once( "$IP/maintenance/Maintenance.php" );
+
+/**
+ * Go through all usernames and calculate and record spoof thingies
+ */
+class BatchAntiSpoof extends Maintenance {
+
+ /**
+ * @param $items array
+ */
+ protected function batchRecord( $items ) {
+ SpoofUser::batchRecord( $this->getDB( DB_MASTER ), $items );
+ }
+
+ /**
+ * @return string
+ */
+ protected function getTableName() {
+ return 'user';
+ }
+
+ /**
+ * @return string
+ */
+ protected function getUserColumn() {
+ return 'user_name';
+ }
+
+ /**
+ * @param $name string
+ * @return SpoofUser
+ */
+ protected function makeSpoofUser( $name ) {
+ return new SpoofUser( $name );
+ }
+
+ protected function waitForSlaves() {
+ wfWaitForSlaves();
+ }
+
+ /**
+ * Do the actual work. All child classes will need to implement this
+ */
+ public function execute() {
+ $dbw = $this->getDB( DB_MASTER );
+
+ $batchSize = 1000;
+
+ $this->output( "Creating username spoofs...\n" );
+ $userCol = $this->getUserColumn();
+ $result = $dbw->select( $this->getTableName(), $userCol, null, __FUNCTION__ );
+ $n = 0;
+ $items = array();
+ foreach( $result as $row ) {
+ if ( $n++ % $batchSize == 0 ) {
+ $this->output( "...$n\n" );
+ }
+
+ $items[] = $this->makeSpoofUser( $row->$userCol );
+
+ if ( $n % $batchSize == 0 ) {
+ $this->batchRecord( $items );
+ $items = array();
+ $this->waitForSlaves();
+ }
+ }
+
+ $this->batchRecord( $items );
+ $this->output( "$n user(s) done.\n" );
+ }
+}
+
diff --git a/AntiSpoof/maintenance/Makefile b/AntiSpoof/maintenance/Makefile
new file mode 100644
index 00000000..b0619878
--- /dev/null
+++ b/AntiSpoof/maintenance/Makefile
@@ -0,0 +1,16 @@
+
+equivset.txt equivset.php equivset.ser: equivset.in
+ php generateEquivset.php
+
+equivset.in: equivset.head equivset_1 equivset_2 equivset_3
+ cat equivset.head > equivset.in
+ grep -v -h "^</*pre>" equivset_1 equivset_2 equivset_3 >> equivset.in
+ echo "Regenerated $@. Remember to run 'svn diff equivset.in' before commiting"
+ cp equivset.ser ../equivset.ser
+ cp equivset.php ../equivset.php
+
+equivset_%:
+ wget --user-agent="Extension AntiSpoof equivset.in rebuild" -O $@ "http://www.mediawiki.org/w/index.php?action=raw&title=Extension:AntiSpoof/Equivalence_sets/$@"
+
+clean:
+ rm -f equivset.in equivset_1 equivset_2 equivset_3 equivset.txt equivset.php equivset.ser
diff --git a/AntiSpoof/maintenance/batchAntiSpoof.php b/AntiSpoof/maintenance/batchAntiSpoof.php
new file mode 100644
index 00000000..52361676
--- /dev/null
+++ b/AntiSpoof/maintenance/batchAntiSpoof.php
@@ -0,0 +1,5 @@
+<?php
+require_once( "BatchAntiSpoofClass.php" );
+
+$maintClass = "BatchAntiSpoof";
+require_once( DO_MAINTENANCE );
diff --git a/AntiSpoof/maintenance/equivset.head b/AntiSpoof/maintenance/equivset.head
new file mode 100644
index 00000000..739a33a5
--- /dev/null
+++ b/AntiSpoof/maintenance/equivset.head
@@ -0,0 +1,34 @@
+# There is a publically editable copy of this file at
+# http://www.mediawiki.org/wiki/AntiSpoof/Equivalence_sets
+
+# This is the input file for generateEquivset.php
+# The format is:
+#
+# <hexadecimal codepoint> <character> => [<hexadecimal codepoint>] <character>
+#
+# If the codepoint is given, it must match the character, or else a warning
+# will be issued and the line will be ignored.
+#
+# The effect of such a line is to conflate the two identified character, i.e.
+# to put them in the same set. If two sets share a member, then they will be
+# merged into a single larger set.
+#
+# We have attempted to include the following types of equivalence:
+# * Case folding. Although letters of different cases are often visually
+# distinct, they can easily be confused by people who are familiar with
+# the alphabet. Two words with a different case may be read as the same
+# word. This is a popular technique for impersonation.
+#
+# * Visually similar characters. Cross-script pairs are included, but these
+# tend to produce false conflations within scripts, and so should be
+# avoided. The software implements a blanket restriction against cross-
+# script strings, which makes cross-script pairs mostly redundant.
+#
+# * Chinese Simplified/Traditional pairs.
+#
+# The list is based on one by Neil Harris, which was derived by unknown methods.
+# That list also contained transliteration pairs, which we considered excessive
+# and have attempted to remove. For example, the latin E and H were considered
+# equivalent, because the latin transliteration of the cyrillic "Н" (which
+# looks like latin H) is "E".
+
diff --git a/AntiSpoof/maintenance/equivset.in b/AntiSpoof/maintenance/equivset.in
new file mode 100644
index 00000000..7b7c35da
--- /dev/null
+++ b/AntiSpoof/maintenance/equivset.in
@@ -0,0 +1,5397 @@
+# There is a publically editable copy of this file at
+# http://www.mediawiki.org/wiki/AntiSpoof/Equivalence_sets
+
+# This is the input file for generateEquivset.php
+# The format is:
+#
+# <hexadecimal codepoint> <character> => [<hexadecimal codepoint>] <character>
+#
+# If the codepoint is given, it must match the character, or else a warning
+# will be issued and the line will be ignored.
+#
+# The effect of such a line is to conflate the two identified character, i.e.
+# to put them in the same set. If two sets share a member, then they will be
+# merged into a single larger set.
+#
+# We have attempted to include the following types of equivalence:
+# * Case folding. Although letters of different cases are often visually
+# distinct, they can easily be confused by people who are familiar with
+# the alphabet. Two words with a different case may be read as the same
+# word. This is a popular technique for impersonation.
+#
+# * Visually similar characters. Cross-script pairs are included, but these
+# tend to produce false conflations within scripts, and so should be
+# avoided. The software implements a blanket restriction against cross-
+# script strings, which makes cross-script pairs mostly redundant.
+#
+# * Chinese Simplified/Traditional pairs.
+#
+# The list is based on one by Neil Harris, which was derived by unknown methods.
+# That list also contained transliteration pairs, which we considered excessive
+# and have attempted to remove. For example, the latin E and H were considered
+# equivalent, because the latin transliteration of the cyrillic "Н" (which
+# looks like latin H) is "E".
+
+33 3 => 45 E
+34 4 => 41 A
+36 6 => 47 G
+49 I => 31 1
+4C L => 31 1
+4F O => 30 0
+53 S => 35 5
+61 a => 41 A
+62 b => 42 B
+63 c => 43 C
+64 d => 44 D
+65 e => 45 E
+66 f => 46 F
+67 g => 47 G
+68 h => 48 H
+69 i => 31 1
+6A j => J
+6B k => 4B K
+6C l => 31 1
+6D m => 4D M
+6E n => N
+6F o => 30 0
+70 p => 50 P
+71 q => 51 Q
+72 r => 52 R
+73 s => 35 5
+74 t => 54 T
+75 u => 55 U
+76 v => V
+77 w => W
+78 x => 58 X
+79 y => Y
+7A z => 5A Z
+7C | => 31 1
+A2 ¢ => 43 C
+AE ® => 52 R
+D0 Ð => 44 D
+DF ß => 42 B
+E0 à => 41 A
+E1 á => 41 A
+E2 â => 41 A
+E3 ã => 41 A
+E4 ä => 41 A
+E5 å => 41 A
+E6 æ => C6 Æ
+E6 æ => 41 A
+E7 ç => 43 C
+E8 è => 45 E
+E9 é => 45 E
+EB ë => 45 E
+F0 ð => 44 D
+F1 ñ => 4E N
+F8 ø => D8 Ø
+F9 ù => 55 U
+FA ú => 55 U
+FB û => 55 U
+FC ü => 55 U
+FD ý => 59 Y
+FE þ => 50 P
+FF ÿ => 59 Y
+101 ā => 41 A
+103 ă => 41 A
+105 ą => 41 A
+107 ć => 43 C
+109 ĉ => 43 C
+109 ĉ => 43 C
+10B ċ => 43 C
+10D č => 43 C
+10F ď => 44 D
+110 Đ => 44 D
+111 đ => 44 D
+113 ē => 45 E
+115 ĕ => 45 E
+117 ė => 45 E
+119 ę => 45 E
+11B ě => 45 E
+11D ĝ => 47 G
+11F ğ => 47 G
+121 ġ => 47 G
+123 ģ => 47 G
+125 ĥ => 48 H
+126 Ħ => 48 H
+127 ħ => 48 H
+131 ı => 31 1
+133 ij => 132 IJ
+137 ķ => 4B K
+138 ĸ => 4B K
+140 ŀ => 13F Ŀ
+141 Ł => L
+142 ł => l
+144 ń => 4E N
+145 Ņ => N
+146 ņ => n
+148 ň => 4E N
+153 œ => 152 Œ
+155 ŕ => 52 R
+157 ŗ => 52 R
+159 ř => 52 R
+163 ţ => 162 Ţ
+163 ţ => 54 T
+165 ť => 54 T
+166 Ŧ => 54 T
+167 ŧ => 54 T
+169 ũ => 55 U
+16B ū => 55 U
+16D ŭ => 55 U
+16F ů => 55 U
+171 ű => 55 U
+173 ų => 55 U
+175 ŵ => 57 W
+177 ŷ => 59 Y
+17A ź => 5A Z
+17C ż => 5A Z
+17E ž => 5A Z
+180 ƀ => b
+181 Ɓ => 42 B
+182 Ƃ => b
+183 ƃ => b
+184 Ƅ => b
+185 ƅ => b
+187 Ƈ => 43 C
+188 ƈ => 43 C
+189 Ɖ => 44 D
+18A Ɗ => 44 D
+18B Ƌ => d
+18C ƌ => d
+18F Ə => 1DD ǝ
+190 Ɛ => 45 E
+191 Ƒ => 46 F
+192 ƒ => f
+193 Ɠ => 47 G
+196 Ɩ => l
+197 Ɨ => l
+198 Ƙ => 4B K
+199 ƙ => 4B K
+19A ƚ => l
+19D Ɲ => N
+1A1 ơ => 1A0 Ơ
+1A4 Ƥ => 50 P
+1A5 ƥ => p
+1A6 Ʀ => 52 R
+1A7 Ƨ => 32 2
+1A8 ƨ => 32 2
+1AB ƫ => 54 T
+1AC Ƭ => 54 T
+1AD ƭ => 54 T
+1AE Ʈ => 54 T
+1B1 Ʊ => 55 U
+1B2 Ʋ => 55 U
+1B3 Ƴ => Y
+1B4 ƴ => y
+1B5 Ƶ => 5A Z
+1B6 ƶ => 5A Z
+1B7 Ʒ => 33 3
+1BC Ƽ => 35 5
+1BD ƽ => 35 5
+1BF ƿ => 50 P
+1C0 ǀ => |
+1C3 ǃ => 21 !
+1C4 DŽ => 1F1 DZ
+1C6 dž => 1F3 dz
+1C9 lj => 1C7 LJ
+1CC nj => 1CA NJ
+1D4 ǔ => 55 U
+1D6 ǖ => 55 U
+1D8 ǘ => 55 U
+1DA ǚ => 55 U
+1DC ǜ => 55 U
+1DF ǟ => 41 A
+1E1 ǡ => 41 A
+1E4 Ǥ => 47 G
+1E5 ǥ => g
+1E7 ǧ => 47 G
+1F3 dz => 1F1 DZ
+1F5 ǵ => 47 G
+1F7 Ƿ => 50 P
+1FB ǻ => 41 A
+1FE Ǿ => Ø
+1FF ǿ => ø
+201 ȁ => 41 A
+205 ȅ => 45 E
+207 ȇ => 45 E
+211 ȑ => 52 R
+213 ȓ => 52 R
+21A Ț => 54 T
+21B ț => 54 T
+21C Ȝ => 33 3
+21D ȝ => 33 3
+21E Ȟ => 48 H
+220 Ƞ => n
+222 Ȣ => 38 8
+223 ȣ => 38 8
+224 Ȥ => 5A Z
+225 ȥ => 5A Z
+228 Ȩ => 45 E
+229 ȩ => 45 E
+232 Ȳ => 59 Y
+24A Ɋ => 51 Q
+251 ɑ => 41 A
+253 ɓ => 42 B
+256 ɖ => 44 D
+257 ɗ => 44 D
+258 ɘ => 1DD ǝ
+259 ə => 1DD ǝ
+259 ə => 45 E
+25A ɚ => 1DD ǝ
+25B ɛ => 45 E
+25C ɜ => 33 3
+260 ɠ => g
+261 ɡ => g
+262 ɢ => 47 G
+266 ɦ => 48 H
+268 ɨ => 31 1
+269 ɩ => 31 1
+26B ɫ => 31 1
+26D ɭ => 31 1
+26F ɯ => W
+26F ɯ => 4D M
+271 ɱ => 4D M
+272 ɲ => n
+273 ɳ => n
+275 ɵ => 19F Ɵ
+27C ɼ => 52 R
+27D ɽ => 52 R
+280 ʀ => 52 R
+282 ʂ => 35 5
+283 ʃ => 43 C
+288 ʈ => 54 T
+28A ʊ => 1B1 Ʊ
+28A ʊ => 59 Y
+28B ʋ => 55 U
+290 ʐ => 5A Z
+292 ʒ => 33 3
+294 ʔ => 3F ?
+299 ʙ => 42 B
+29C ʜ => 48 H
+2A0 ʠ => 51 Q
+2B0 ʰ => 48 H
+2B1 ʱ => 48 H
+2B3 ʳ => 52 R
+2B4 ʴ => 52 R
+2B5 ʵ => 52 R
+2B6 ʶ => 52 R
+2B8 ʸ => 59 Y
+391 Α => 41 A
+392 Β => 42 B
+393 Γ => 52 R
+395 Ε => 45 E
+396 Ζ => 5A Z
+397 Η => 48 H
+398 Θ => 30 0
+399 Ι => 31 1
+39A Κ => 4B K
+39C Μ => 4D M
+39D Ν => N
+39F Ο => 30 0
+3A1 Ρ => 50 P
+3A4 Τ => 54 T
+3A5 Υ => 59 Y
+3A6 Φ => 278 ɸ
+3A7 Χ => 58 X
+3AC ά => 41 A
+3AE ή => 48 H
+3B1 α => a
+3B2 β => 42 B
+3B4 δ => 394 Δ
+3B5 ε => 45 E
+3B7 η => n
+3B7 η => 48 H
+3B8 θ => 19F Ɵ
+3B9 ι => 31 1
+3BA κ => 4B K
+3BB λ => 39B Λ
+3BC μ => 4D M
+3BD ν => 4E N
+3BE ξ => 39E Ξ
+3BF ο => o
+3C0 π => 3A0 Π
+3C1 ρ => 50 P
+3C2 ς => 43 C
+3C4 τ => 54 T
+3C5 υ => 55 U
+3C5 υ => 59 Y
+3C6 φ => 278 ɸ
+3C7 χ => 58 X
+3C8 ψ => 3A8 Ψ
+3C9 ω => w
+3CB ϋ => 59 Y
+3CD ύ => 59 Y
+3D2 ϒ => Y
+3D3 ϓ => 59 Y
+3D5 ϕ => 278 ɸ
+3DC Ϝ => 46 F
+3DD ϝ => 46 F
+3E8 Ϩ => 32 2
+3E9 ϩ => 32 2
+3F2 ϲ => 43 C
+3F3 ϳ => j
+3F4 ϴ => 19F Ɵ
+3F9 Ϲ => 43 C
+404 Є => 45 E
+405 Ѕ => 35 5
+406 І => 31 1
+408 Ј => J
+40B Ћ => 48 H
+410 А => 41 A
+411 Б => 36 6
+412 В => 42 B
+413 Г => 52 R
+415 Е => 45 E
+417 З => 33 3
+41A К => 4B K
+41C М => 4D M
+41D Н => 48 H
+41E О => 30 0
+41F П => 3A0 Π
+420 Р => 50 P
+421 С => 43 C
+422 Т => 54 T
+423 У => y
+424 Ф => 278 ɸ
+425 Х => 58 X
+42A Ъ => 42 B
+42C Ь => 42 B
+430 а => 41 A
+431 б => 36 6
+431 б => 42 B
+432 в => 42 B
+433 г => 52 R
+435 е => 45 E
+436 ж => 416 Ж
+437 з => 33 3
+438 и => 418 И
+43A к => 4B K
+43B л => 41B Л
+43C м => 4D M
+43D н => 48 H
+43E о => 30 0
+43F п => 3A0 Π
+440 р => 50 P
+441 с => 43 C
+442 т => 54 T
+443 у => y
+444 ф => 278 ɸ
+445 х => 58 X
+446 ц => 55 U
+44A ъ => 42 B
+44B ы => 42B Ы
+44C ь => 42 B
+44F я => 42F Я
+44F я => 52 R
+454 є => 45 E
+455 ѕ => 35 5
+456 і => 31 1
+458 ј => j
+45A њ => 48 H
+45B ћ => 48 H
+45C ќ => 4B K
+462 Ѣ => 42 B
+463 ѣ => 42 B
+472 Ѳ => 19F Ɵ
+473 ѳ => 19F Ɵ
+474 Ѵ => V
+475 ѵ => v
+47D ѽ => 47C Ѽ
+48A Ҋ => 418 И
+48B ҋ => 418 И
+48C Ҍ => b
+48D ҍ => b
+491 ґ => 490 Ґ
+492 Ғ => F
+493 ғ => F
+496 Җ => 416 Ж
+497 җ => 416 Ж
+498 Ҙ => 33 3
+499 ҙ => 33 3
+49A Қ => 4B K
+49B қ => 4B K
+49D ҝ => 4B K
+49E Ҟ => 4B K
+49F ҟ => 4B K
+4A1 ҡ => 4B K
+4A2 Ң => 48 H
+4A3 ң => 48 H
+4AA Ҫ => 43 C
+4AB ҫ => 43 C
+4AC Ҭ => 54 T
+4AD ҭ => 54 T
+4AE Ү => Y
+4AF ү => Y
+4B0 Ұ => Y
+4B1 ұ => Y
+4B2 Ҳ => 58 X
+4B3 ҳ => 58 X
+4B6 Ҷ => y
+4B7 ҷ => y
+4BA Һ => h
+4BB һ => h
+4BD ҽ => 4BC Ҽ
+4BE Ҿ => 4BC Ҽ
+4BF ҿ => 4BC Ҽ
+4C0 Ӏ => 31 1
+4C4 ӄ => 4B K
+4C5 Ӆ => 41B Л
+4C6 ӆ => 41B Л
+4C7 Ӈ => 48 H
+4C8 ӈ => 48 H
+4C9 Ӊ => 48 H
+4CA ӊ => 48 H
+4CB Ӌ => y
+4CC ӌ => y
+4CD Ӎ => 4D M
+4CE ӎ => 4D M
+4D4 Ӕ => C6 Æ
+4D5 ӕ => C6 Æ
+4D8 Ә => 1DD ǝ
+4D9 ә => 1DD ǝ
+4E0 Ӡ => 33 3
+4E1 ӡ => 33 3
+4E8 Ө => 19F Ɵ
+4E9 ө => 19F Ɵ
+500 Ԁ => d
+501 ԁ => d
+50B ԋ => 48 H
+50C Ԍ => 47 G
+50D ԍ => 47 G
+531 Ա => 561 ա
+531 Ա => U
+532 Բ => 562 բ
+533 Գ => 563 գ
+533 Գ => q
+534 Դ => 564 դ
+535 Ե => 565 ե
+536 Զ => 566 զ
+537 Է => 567 է
+538 Ը => 568 ը
+539 Թ => 569 թ
+53A Ժ => 56A ժ
+53B Ի => 56B ի
+53C Լ => 56C լ
+53D Խ => 56D խ
+53E Ծ => 56E ծ
+53F Կ => 56F կ
+540 Հ => 570 հ
+541 Ձ => 571 ձ
+542 Ղ => 572 ղ
+543 Ճ => 573 ճ
+544 Մ => 574 մ
+544 Մ => U
+545 Յ => 575 յ
+545 Յ => 33 3
+546 Ն => 576 ն
+547 Շ => 577 շ
+548 Ո => 578 ո
+549 Չ => 579 չ
+54A Պ => 57A պ
+54B Ջ => 57B ջ
+54C Ռ => 57C ռ
+54D Ս => 57D ս
+54D Ս => 55 U
+54E Վ => 57E վ
+54F Տ => 57F տ
+550 Ր => 580 ր
+551 Ց => 581 ց
+552 Ւ => 582 ւ
+553 Փ => 583 փ
+554 Ք => 584 ք
+555 Օ => 585 օ
+555 Օ => 30 0
+556 Ֆ => 586 ֆ
+563 գ => q
+566 զ => q
+570 հ => h
+575 յ => j
+578 ո => n
+57C ռ => n
+57D ս => u
+581 ց => g
+584 ք => p
+585 օ => o
+589 ։ => 3A :
+59C ֜ => 301 ́
+5AF ֯ => 30A ̊
+5B9 ֹ => 307 ̇
+5C1 ׁ => 307 ̇
+5C2 ׂ => 307 ̇
+5C3 ׃ => 3A :
+5C4 ׄ => 307 ̇
+5F3 ׳ => 27 '
+5F4 ״ => 22 "
+639 ع => 45 E
+64A ي => 649 ى
+64F ُ => 313 ̓
+669 ٩ => 41 A
+66C ٬ => 60C ،
+674 ٴ => 654 ٔ
+6A0 ڠ => 45 E
+6A9 ک => 643 ك
+6BB ڻ => 679 ٹ
+6BE ھ => 647 ه
+6C1 ہ => 647 ه
+6CC ی => 649 ى
+6D0 ې => 67B ٻ
+6D5 ە => 647 ه
+6E7 ۧ => 6E6 ۦ
+6EC ۬ => 6DF ۟
+6F0 ۰ => 660 ٠
+6F1 ۱ => 661 ١
+6F2 ۲ => 662 ٢
+6F3 ۳ => 663 ٣
+6F7 ۷ => 667 ٧
+6F8 ۸ => 668 ٨
+6F9 ۹ => 669 ٩
+702 ܂ => 2E .
+741 ݁ => 307 ̇
+742 ݂ => 73C ܼ
+747 ݇ => 301 ́
+902 ं => 307 ̇
+93C ़ => 323 ̣
+952 ॒ => 320 ̠
+953 ॓ => 300 ̀
+954 ॔ => 301 ́
+966 ० => 30 0
+9BC ় => 323 ̣
+9E6 ০ => 30 0
+9EA ৪ => 38 8
+9ED ৭ => 39 9
+A02 ਂ => 307 ̇
+A03 ਃ => 983 ঃ
+A3C ਼ => 323 ̣
+A4B ੋ => 946 ॆ
+A4D ੍ => 94D ्
+A66 ੦ => 30 0
+A67 ੧ => 39 9
+A6A ੪ => 38 8
+A82 ં => 307 ̇
+ABC ઼ => 323 ̣
+ABD ઽ => 93D ऽ
+AC1 ુ => 941 ु
+AC2 ૂ => 942 ू
+ACD ્ => 94D ्
+AE6 ૦ => 30 0
+AE8 ૨ => 968 २
+AE9 ૩ => 969 ३
+AEA ૪ => 96A ४
+AEE ૮ => 96E ८
+B03 ଃ => 38 8
+B3C ଼ => 323 ̣
+B66 ୦ => 30 0
+B68 ୨ => 39 9
+B82 ஂ => 30A ̊
+B9C ஜ => B90 ஐ
+BB0 ர => B88 ஈ
+BBE ா => B88 ஈ
+BC8 ை => BA9 ன
+BCD ் => 307 ̇
+BD7 ௗ => BB3 ள
+BE6 ௦ => 30 0
+BE7 ௧ => B95 க
+BE8 ௨ => B89 உ
+BEA ௪ => B9A ச
+BED ௭ => B8E எ
+BEE ௮ => B85 அ
+BF0 ௰ => BAF ய
+BF5 ௵ => BF3 ௳
+BF8 ௸ => BB7 ஷ
+C02 ం => 30 0
+C03 ః => 983 ঃ
+C22 ఢ => C21 డ
+C2D భ => C2C బ
+C37 ష => C35 వ
+C66 ౦ => 30 0
+C82 ಂ => 30 0
+C83 ಃ => 983 ঃ
+C85 ಅ => C05 అ
+C86 ಆ => C06 ఆ
+C87 ಇ => C07 ఇ
+C92 ಒ => C12 ఒ
+C93 ಓ => C13 ఓ
+C94 ಔ => C14 ఔ
+C9C ಜ => C1C జ
+C9E ಞ => C1E ఞ
+CA3 ಣ => C23 ణ
+CAF ಯ => C2F య
+CB1 ಱ => C31 ఱ
+CB2 ಲ => C32 ల
+CE6 ೦ => 30 0
+CE7 ೧ => C67 ౧
+CE8 ೨ => C68 ౨
+CEF ೯ => C6F ౯
+D02 ം => 30 0
+D09 ഉ => B89 உ
+D1C ജ => B90 ஐ
+D20 ഠ => 30 0
+D23 ണ => BA3 ண
+D31 റ => D30 ര
+D34 ഴ => BB4 ழ
+D36 ശ => BB6 ஶ
+D3F ി => BBF ி
+D40 ീ => BBF ி
+D41 ു => BC2 ூ
+D42 ൂ => BC2 ூ
+D43 ൃ => BC2 ூ
+D61 ൡ => D1E ഞ
+E03 ฃ => E02 ข
+E0B ซ => E0A ช
+E0F ฏ => E0E ฎ
+E14 ด => E04 ค
+E15 ต => E04 ค
+E17 ท => E11 ฑ
+E21 ม => E06 ฆ
+E3F ฿ => 42 B
+E45 ๅ => E32 า
+E4D ํ => 30A ̊
+E50 ๐ => 30 0
+E88 ຈ => E08 จ
+E8D ຍ => E22 ย
+E9A ບ => E1A บ
+E9B ປ => E1B ป
+E9D ຝ => E1D ฝ
+E9E ພ => E1E พ
+E9F ຟ => E1F ฟ
+EB8 ຸ => E38 ุ
+EB9 ູ => E39 ู
+EC8 ່ => E48 ่
+EC9 ້ => E49 ้
+ECA ໊ => E4A ๊
+ECB ໋ => E4B ๋
+ECD ໍ => 30A ̊
+ED0 ໐ => 30 0
+F0C ༌ => F0B ་
+101D ဝ => 30 0
+1036 ံ => 30A ̊
+1040 ၀ => 30 0
+10E7 ყ => y
+10F3 ჳ => 33 3
+13A1 Ꭱ => 52 R
+13A5 Ꭵ => 31 1
+13A9 Ꭹ => Y
+13AA Ꭺ => 41 A
+13AB Ꭻ => J
+13AC Ꭼ => 45 E
+13B1 Ꮁ => 52 R
+13B3 Ꮃ => W
+13B7 Ꮇ => 4D M
+13BB Ꮋ => 48 H
+13BD Ꮍ => y
+13BE Ꮎ => 19F Ɵ
+13C0 Ꮐ => 47 G
+13C2 Ꮒ => h
+13C3 Ꮓ => 5A Z
+13CE Ꮞ => 34 4
+13CF Ꮟ => b
+13D2 Ꮢ => 52 R
+13D4 Ꮤ => W
+13D5 Ꮥ => 35 5
+13D9 Ꮩ => V
+13DA Ꮪ => 35 5
+13DE Ꮮ => L
+13DF Ꮯ => 43 C
+13E2 Ꮲ => 50 P
+13E6 Ꮶ => 4B K
+13E7 Ꮷ => J
+13F2 Ᏺ => h
+13F3 Ᏻ => 47 G
+13F4 Ᏼ => 42 B
+1403 ᐃ => 394 Δ
+1427 ᐧ => B7 ·
+142F ᐯ => V
+146D ᑭ => 50 P
+146F ᑯ => d
+148D ᒍ => J
+14BF ᒿ => 32 2
+14D1 ᓑ => 1421 ᐡ
+1541 ᕁ => 58 X
+1577 ᕷ => 394 Δ
+157C ᕼ => 48 H
+157D ᕽ => 58 X
+1587 ᖇ => 52 R
+15AF ᖯ => b
+15B4 ᖴ => 46 F
+15C5 ᗅ => 41 A
+15DE ᗞ => 44 D
+15EA ᗪ => 44 D
+15EF ᗯ => W
+15F0 ᗰ => 4D M
+15F7 ᗷ => 42 B
+1602 ᘂ => 1490 ᒐ
+1603 ᘃ => 1489 ᒉ
+1604 ᘄ => 14D3 ᓓ
+1607 ᘇ => 14DA ᓚ
+1622 ᘢ => 1543 ᕃ
+1623 ᘣ => 1546 ᕆ
+1624 ᘤ => 154A ᕊ
+162F ᘯ => 3A9 Ω
+1634 ᘴ => 162E ᘮ
+1634 ᘴ => 1B1 Ʊ
+1635 ᘵ => 3A9 Ω
+166D ᙭ => 58 X
+166E ᙮ => 58 X
+17A3 ឣ => 17A2 អ
+17B7 ិ => E34 ิ
+17B8 ី => E35 ี
+17B9 ឹ => E36 ึ
+17BA ឺ => E37 ื
+17C6 ំ => 30A ̊
+17CB ់ => E48 ่
+17D3 ៓ => 30A ̊
+17D4 ។ => E2F ฯ
+17D5 ៕ => E5A ๚
+17D9 ៙ => E4F ๏
+17DA ៚ => E5B ๛
+1810 ᠐ => 30 0
+1896 ᢖ => 185C ᡜ
+1E01 ḁ => 41 A
+1E0D ḍ => 44 D
+1E17 ḗ => 45 E
+1E19 ḙ => 45 E
+1E1B ḛ => 45 E
+1E1D ḝ => 45 E
+1E21 ḡ => 47 G
+1E23 ḣ => 48 H
+1E25 ḥ => 48 H
+1E27 ḧ => 48 H
+1E29 ḩ => 48 H
+1E2B ḫ => 48 H
+1E3F ḿ => 4D M
+1E41 ṁ => 4D M
+1E43 ṃ => 4D M
+1E47 ṇ => 4E N
+1E55 ṕ => 50 P
+1E57 ṗ => 50 P
+1E59 ṙ => 52 R
+1E5B ṛ => 52 R
+1E5D ṝ => 52 R
+1E5F ṟ => 52 R
+1E6D ṭ => 54 T
+1E81 ẁ => 57 W
+1E83 ẃ => 57 W
+1E85 ẅ => 57 W
+1E87 ẇ => 57 W
+1E89 ẉ => 57 W
+1E8F ẏ => 59 Y
+1EA1 ạ => 41 A
+1EA3 ả => 41 A
+1EA5 ấ => 41 A
+1EA7 ầ => 41 A
+1EA9 ẩ => 41 A
+1EAB ẫ => 41 A
+1EAD ậ => 41 A
+1EAF ắ => 41 A
+1EB1 ằ => 41 A
+1EB3 ẳ => 41 A
+1EB5 ẵ => 41 A
+1EB7 ặ => 41 A
+1EB9 ẹ => 45 E
+1EBB ẻ => 45 E
+1EBD ẽ => 45 E
+1EBF ế => 45 E
+1EC1 ề => 45 E
+1EC3 ể => 45 E
+1EC5 ễ => 45 E
+1EC7 ệ => 45 E
+1EF3 ỳ => 59 Y
+1EF5 ỵ => 59 Y
+1EF7 ỷ => 59 Y
+1EF9 ỹ => 59 Y
+1F01 ἁ => 41 A
+1F02 ἂ => 41 A
+1F03 ἃ => 41 A
+1F04 ἄ => 41 A
+1F05 ἅ => 41 A
+1F06 ἆ => 41 A
+1F07 ἇ => 41 A
+1F20 ἠ => 48 H
+1F21 ἡ => 48 H
+1F22 ἢ => 48 H
+1F23 ἣ => 48 H
+1F24 ἤ => 48 H
+1F25 ἥ => 48 H
+1F26 ἦ => 48 H
+1F27 ἧ => 48 H
+1F51 ὑ => 59 Y
+1F53 ὓ => 59 Y
+1F55 ὕ => 59 Y
+1F57 ὗ => 59 Y
+1F70 ὰ => 41 A
+1F74 ὴ => 48 H
+1F7A ὺ => 59 Y
+1F80 ᾀ => 41 A
+1F81 ᾁ => 41 A
+1F82 ᾂ => 41 A
+1F83 ᾃ => 41 A
+1F84 ᾄ => 41 A
+1F85 ᾅ => 41 A
+1F86 ᾆ => 41 A
+1F87 ᾇ => 41 A
+1F90 ᾐ => 48 H
+1FB3 ᾳ => 41 A
+1FE0 ῠ => 59 Y
+1FE1 ῡ => 59 Y
+20A3 ₣ => 46 F
+20A5 ₥ => 4D M
+20A6 ₦ => 4E N
+20A7 ₧ => 50 P
+20A9 ₩ => 57 W
+200B ​ => 0
+2127 ℧ => 1B1 Ʊ
+2146 ⅆ => 44 D
+2C67 Ⱨ => 48 H
+2D31 ⴱ => 3B8 θ
+2D39 ⴹ => 45 E
+2D54 ⵔ => 30 0
+30D8 ヘ => 3078 へ
+3473 㑳 => 3447 㑇
+361A 㘚 => 360E 㘎
+396E 㥮 => 3918 㤘
+3A73 㩳 => 39D0 㧐
+439B 䎛 => 3588 㖈
+43B1 䎱 => 43AC 䎬
+4420 䐠 => 3B3B 㬻
+4661 䙡 => 464C 䙌
+478D 䞍 => 477C 䝼
+4982 䦂 => 4947 䥇
+49B6 䦶 => 499B 䦛
+49B7 䦷 => 499F 䦟
+4CA3 䲣 => 4C77 䱷
+4E0A 上 => 4E04 丄
+4E0B 下 => 4E05 丅
+4E10 丐 => 4E0F 丏
+4E17 丗 => 4E16 世
+4E20 丠 => 4E18 丘
+4E22 丢 => 4E1F 丟
+4E24 两 => 4E21 両
+4E28 丨 => 31 1
+4E46 乆 => 4E45 久
+4E58 乘 => 4E57 乗
+4E7F 乿 => 4E71 乱
+4E81 亁 => 4E7E 乾
+4E82 亂 => 4E71 乱
+4E93 亓 => 4E0C 丌
+4E95 井 => 4E3C 丼
+4E99 亙 => 4E98 亘
+4E9C 亜 => 4E9A 亚
+4E9E 亞 => 4E9A 亚
+4EAF 亯 => 4EAB 享
+4EB0 亰 => 4EAC 京
+4EBE 亾 => 4EA1 亡
+4EDA 仚 => 4ED9 仙
+4EE9 仩 => 4E04 丄
+4F0D 伍 => 4E94 五
+4F47 佇 => 4F2B 伫
+4F52 佒 => 4EF0 仰
+4F5B 佛 => 4ECF 仏
+4F60 你 => 4F32 伲
+4F75 併 => 4E26 並
+4F96 侖 => 4ED1 仑
+4FA1 価 => 4EF7 价
+4FAB 侫 => 4F5E 佞
+4FB6 侶 => 4FA3 侣
+4FD4 俔 => 4F23 伣
+4FE0 俠 => 4FA0 侠
+4FE1 信 => 4F29 伩
+4FE3 俣 => 4FC1 俁
+4FE5 俥 => 4F21 伡
+4FEF 俯 => 4FDB 俛
+5000 倀 => 4F25 伥
+5002 倂 => 4E26 並
+5005 倅 => 4F1C 伜
+5006 倆 => 4FE9 俩
+5008 倈 => 4FEB 俫
+5009 倉 => 4ED3 仓
+500B 個 => 4E2A 个
+5011 們 => 4EEC 们
+5023 倣 => 4EFF 仿
+502B 倫 => 4F26 伦
+5036 倶 => 4FF1 俱
+5039 倹 => 4FED 俭
+503C 值 => 5024 値
+5049 偉 => 4F1F 伟
+5074 側 => 4FA7 侧
+5075 偵 => 4FA6 侦
+5078 偸 => 5077 偷
+5079 偹 => 4FFB 俻
+507D 偽 => 4F2A 伪
+5096 傖 => 4F27 伧
+5098 傘 => 4F1E 伞
+5099 備 => 4FFB 俻
+509A 傚 => 4FF2 俲
+50AD 傭 => 4F63 佣
+50AF 傯 => 506C 偬
+50B3 傳 => 4F20 传
+50B4 傴 => 4F1B 伛
+50B5 債 => 503A 债
+50B7 傷 => 4F24 伤
+50BE 傾 => 503E 倾
+50C2 僂 => 507B 偻
+50C5 僅 => 4EC5 仅
+50C9 僉 => 4F65 佥
+50CA 僊 => 4ED9 仙
+50D1 僑 => 4FA8 侨
+50D5 僕 => 4EC6 仆
+50DE 僞 => 4F2A 伪
+50E5 僥 => 4FA5 侥
+50E8 僨 => 507E 偾
+50ED 僭 => 50E3 僣
+50F9 價 => 4EF7 价
+5100 儀 => 4EEA 仪
+5101 儁 => 4FCA 俊
+5102 儂 => 4FAC 侬
+5104 億 => 4EBF 亿
+5108 儈 => 4FA9 侩
+5109 儉 => 4FED 俭
+510C 儌 => 4FA5 侥
+510D 儍 => 50BB 傻
+510E 儎 => 50A4 傤
+5110 儐 => 50A7 傧
+5114 儔 => 4FE6 俦
+5115 儕 => 4FAA 侪
+511E 儞 => 4F32 伲
+511F 償 => 507F 偿
+512A 優 => 4F18 优
+5132 儲 => 50A8 储
+5135 儵 => 500F 倏
+5137 儷 => 4FEA 俪
+513A 儺 => 50A9 傩
+513B 儻 => 50A5 傥
+513C 儼 => 4FE8 俨
+5150 児 => 513F 儿
+5151 兑 => 514C 兌
+5152 兒 => 513F 儿
+5154 兔 => 514E 兎
+5157 兗 => 5156 兖
+5166 兦 => 4EA1 亡
+5169 兩 => 4E21 両
+516A 兪 => 4FDE 俞
+5176 其 => 4E0C 丌
+5185 内 => 5167 內
+518C 册 => 518A 冊
+5192 冒 => 5190 冐
+51C8 凈 => 51C0 净
+51CD 凍 => 51BB 冻
+51D6 凖 => 51C6 准
+51DC 凜 => 51DB 凛
+51E2 凢 => 51E1 凡
+51E3 凣 => 51E1 凡
+51F1 凱 => 51EF 凯
+51F4 凴 => 51ED 凭
+51F6 凶 => 5147 兇
+51FE 凾 => 51FD 函
+5202 刂 => 5200 刀
+5204 刄 => 5203 刃
+520B 刋 => 520A 刊
+522A 刪 => 5220 删
+522B 别 => 5225 別
+5231 刱 => 521B 创
+5238 券 => 5026 倦
+523C 刼 => 5226 刦
+523E 刾 => 523A 刺
+5241 剁 => 5234 刴
+5244 剄 => 522D 刭
+5247 則 => 5219 则
+524B 剋 => 514B 克
+524E 剎 => 5239 刹
+5257 剗 => 522C 刬
+5259 剙 => 521B 创
+525A 剚 => 5033 倳
+525B 剛 => 521A 刚
+5263 剣 => 5251 剑
+5264 剤 => 5242 剂
+5265 剥 => 525D 剝
+526E 剮 => 5250 剐
+5270 剰 => 5269 剩
+5274 剴 => 5240 剀
+5275 創 => 521B 创
+5277 剷 => 522C 刬
+5280 劀 => 522E 刮
+5283 劃 => 5212 划
+5284 劄 => 5273 剳
+5287 劇 => 5267 剧
+5289 劉 => 5218 刘
+528A 劊 => 523D 刽
+528B 劋 => 527F 剿
+528C 劌 => 523F 刿
+528D 劍 => 5251 剑
+5291 劑 => 5242 剂
+5292 劒 => 5251 剑
+5294 劔 => 5251 剑
+52A8 动 => 50CD 働
+52AB 劫 => 5226 刦
+52B4 労 => 52B3 劳
+52B5 劵 => 5026 倦
+52B9 効 => 4FF2 俲
+52C1 勁 => 52B2 劲
+52D3 勓 => 52BE 劾
+52D5 動 => 50CD 働
+52D7 勗 => 52D6 勖
+52D9 務 => 52A1 务
+52DB 勛 => 52CB 勋
+52DE 勞 => 52B3 劳
+52E2 勢 => 52BF 势
+52E6 勦 => 527F 剿
+52E7 勧 => 529D 劝
+52E9 勩 => 52DA 勚
+52F1 勱 => 52A2 劢
+52F2 勲 => 52CB 勋
+52F3 勳 => 52CB 勋
+52F5 勵 => 52B1 励
+52F8 勸 => 529D 劝
+5300 匀 => 52FB 勻
+532B 匫 => 5322 匢
+532D 匭 => 5326 匦
+5331 匱 => 532E 匮
+5340 區 => 533A 区
+5343 千 => 4EDF 仟
+534B 卋 => 4E16 世
+534F 协 => 52A6 劦
+5350 卐 => 534D 卍
+5352 卒 => 5346 卆
+5354 協 => 52A6 劦
+5358 単 => 5355 单
+5360 占 => 4F54 佔
+537B 卻 => 5374 却
+537D 卽 => 5373 即
+5399 厙 => 538D 厍
+539B 厛 => 5385 厅
+53A0 厠 => 5395 厕
+53A4 厤 => 5386 历
+53AD 厭 => 538C 厌
+53B0 厰 => 5382 厂
+53B2 厲 => 5389 厉
+53B3 厳 => 4E25 严
+53B4 厴 => 53A3 厣
+53C2 参 => 53C1 叁
+53C3 參 => 53C1 叁
+53C4 叄 => 53C1 叁
+53DF 叟 => 53DC 叜
+53E2 叢 => 4E1B 丛
+53E5 句 => 52FE 勾
+540C 同 => 4EDD 仝
+5434 吴 => 5433 吳
+5442 呂 => 5415 吕
+5445 呅 => 543B 吻
+5449 呉 => 5433 吳
+544A 告 => 543F 吿
+5450 呐 => 5436 吶
+5451 呑 => 541E 吞
+5461 呡 => 543B 吻
+5492 咒 => 546A 呪
+54B1 咱 => 507A 偺
+54BC 咼 => 5459 呙
+54CC 哌 => 5471 呱
+54E1 員 => 5458 员
+5504 唄 => 5457 呗
+5516 唖 => 54D1 哑
+551A 唚 => 5423 吣
+5553 啓 => 542F 启
+5554 啔 => 542F 启
+5555 啕 => 54B7 咷
+5557 啗 => 5556 啖
+555E 啞 => 54D1 哑
+555F 啟 => 542F 启
+5562 啢 => 5521 唡
+5586 喆 => 54F2 哲
+558E 喎 => 359E 㖞
+5592 喒 => 507A 偺
+559A 喚 => 5524 唤
+559E 喞 => 5527 唧
+55A7 喧 => 5405 吅
+55AA 喪 => 4E27 丧
+55AB 喫 => 5403 吃
+55AC 喬 => 4E54 乔
+55AE 單 => 5355 单
+55B2 喲 => 54DF 哟
+55BB 喻 => 55A9 喩
+55C6 嗆 => 545B 呛
+55C7 嗇 => 556C 啬
+55CA 嗊 => 551D 唝
+55CE 嗎 => 5417 吗
+55DA 嗚 => 545C 呜
+55E9 嗩 => 5522 唢
+55EC 嗬 => 5475 呵
+55F6 嗶 => 54D4 哔
+5602 嘂 => 53EB 叫
+5606 嘆 => 53F9 叹
+5608 嘈 => 50AE 傮
+560D 嘍 => 55BD 喽
+5611 嘑 => 547C 呼
+5613 嘓 => 556F 啯
+5614 嘔 => 5455 呕
+5616 嘖 => 5567 啧
+561C 嘜 => 551B 唛
+5628 嘨 => 5578 啸
+5629 嘩 => 54D7 哗
+562E 嘮 => 5520 唠
+562F 嘯 => 5578 啸
+5630 嘰 => 53FD 叽
+5633 嘳 => 559F 喟
+5634 嘴 => 5480 咀
+5635 嘵 => 54D3 哓
+5638 嘸 => 5452 呒
+563D 嘽 => 5574 啴
+5649 噉 => 5556 啖
+5653 噓 => 5618 嘘
+5655 噕 => 5645 噅
+565D 噝 => 549D 咝
+5660 噠 => 54D2 哒
+5665 噥 => 54DD 哝
+5666 噦 => 54D5 哕
+5668 器 => 5650 噐
+566F 噯 => 55F3 嗳
+5672 噲 => 54D9 哙
+5674 噴 => 55B7 喷
+5678 噸 => 5428 吨
+567E 噾 => 5591 喑
+5680 嚀 => 549B 咛
+5687 嚇 => 5413 吓
+568C 嚌 => 54DC 哜
+5690 嚐 => 5617 嘗
+5694 嚔 => 568F 嚏
+5695 嚕 => 565C 噜
+5699 嚙 => 556E 啮
+56A5 嚥 => 54BD 咽
+56A6 嚦 => 5456 呖
+56A8 嚨 => 5499 咙
+56AA 嚪 => 5556 啖
+56AE 嚮 => 5411 向
+56B2 嚲 => 4EB8 亸
+56B3 嚳 => 55BE 喾
+56B4 嚴 => 4E25 严
+56B6 嚶 => 5624 嘤
+56BB 嚻 => 56A3 嚣
+56BD 嚽 => 555C 啜
+56C0 囀 => 556D 啭
+56C1 囁 => 55EB 嗫
+56C2 囂 => 56A3 嚣
+56C5 囅 => 5181 冁
+56C8 囈 => 5453 呓
+56C9 囉 => 5570 啰
+56D1 囑 => 5631 嘱
+56D3 囓 => 556E 啮
+56DE 回 => 56D8 囘
+56E3 団 => 56E2 团
+56E7 囧 => 518F 冏
+56EC 囬 => 56D8 囘
+56F1 囱 => 56EA 囪
+56F4 围 => 56F2 囲
+56FD 国 => 56EF 囯
+56FE 图 => 56F3 図
+5700 圀 => 56EF 囯
+5706 圆 => 5186 円
+5707 圇 => 56F5 囵
+570B 國 => 56EF 囯
+570D 圍 => 56F2 囲
+570E 圎 => 5186 円
+570F 圏 => 5708 圈
+5712 園 => 56ED 园
+5713 圓 => 5186 円
+5716 圖 => 56F3 図
+5718 團 => 56E2 团
+5727 圧 => 538B 压
+5757 块 => 51F7 凷
+576F 坯 => 574F 坏
+5775 坵 => 4E18 丘
+5785 垅 => 5784 垄
+579C 垜 => 579B 垛
+57A0 垠 => 573B 圻
+57A9 垩 => 5723 圣
+57BB 垻 => 575D 坝
+57C0 埀 => 5782 垂
+57D3 埓 => 57D2 埒
+57E1 埡 => 57AD 垭
+5803 堃 => 5764 坤
+5805 堅 => 575A 坚
+580A 堊 => 5723 圣
+5816 堖 => 57B4 垴
+581D 堝 => 57DA 埚
+582F 堯 => 579A 垚
+5834 場 => 573A 场
+584A 塊 => 51F7 凷
+584F 塏 => 57B2 垲
+5852 塒 => 57D8 埘
+5857 塗 => 51C3 凃
+585A 塚 => 51A2 冢
+5862 塢 => 575E 坞
+5864 塤 => 57D9 埙
+586B 填 => 5861 塡
+5872 塲 => 573A 场
+5873 塳 => 585C 塜
+5874 塴 => 580B 堋
+5879 塹 => 5811 堑
+588A 墊 => 57AB 垫
+588D 墍 => 5848 塈
+5896 墖 => 5854 塔
+589C 墜 => 5760 坠
+589E 增 => 5897 増
+58AC 墬 => 5730 地
+58AE 墮 => 5815 堕
+58AF 墯 => 5815 堕
+58B3 墳 => 575F 坟
+58BB 墻 => 5899 墙
+58BE 墾 => 57A6 垦
+58C7 壇 => 575B 坛
+58CA 壊 => 574F 坏
+58CB 壋 => 57B1 垱
+58CE 壎 => 57D9 埙
+58D3 壓 => 538B 压
+58D6 壖 => 5827 堧
+58D8 壘 => 5792 垒
+58D9 壙 => 5739 圹
+58DA 壚 => 5786 垆
+58DE 壞 => 574F 坏
+58DF 壟 => 5784 垄
+58E0 壠 => 5784 垄
+58E2 壢 => 575C 坜
+58E7 壧 => 55A6 喦
+58E8 壨 => 5792 垒
+58E9 壩 => 575D 坝
+58EA 壪 => 5846 塆
+58EF 壯 => 58EE 壮
+58F1 壱 => 4E00 一
+58F2 売 => 5356 卖
+58F7 壷 => 58F6 壶
+58F9 壹 => 4E00 一
+58FA 壺 => 58F6 壶
+58FC 壼 => 58F8 壸
+58FF 壿 => 58AB 墫
+5900 夀 => 58FD 壽
+5907 备 => 4FFB 俻
+5909 変 => 53D8 变
+5918 夘 => 536F 卯
+591B 夛 => 591A 多
+591C 夜 => 4EB1 亱
+5920 夠 => 591F 够
+5925 夥 => 4F19 伙
+592B 夫 => 4F15 伕
+5937 夷 => 4F87 侇
+593E 夾 => 5939 夹
+5941 奁 => 5333 匳
+5950 奐 => 5942 奂
+5967 奧 => 5965 奥
+5968 奨 => 5956 奖
+5969 奩 => 5333 匳
+596A 奪 => 593A 夺
+596C 奬 => 5956 奖
+596E 奮 => 594B 奋
+5976 奶 => 4F32 伲
+5996 妖 => 46B6 䚶
+599D 妝 => 5986 妆
+59AC 妬 => 5992 妒
+59B3 妳 => 4F32 伲
+59CA 姊 => 59C9 姉
+59D7 姗 => 59CD 姍
+59D9 姙 => 598A 妊
+59E6 姦 => 5978 奸
+59EA 姪 => 4F84 侄
+59EC 姬 => 59EB 姫
+59F8 姸 => 598D 妍
+59F9 姹 => 597C 奼
+5A1A 娚 => 5583 喃
+5A1F 娟 => 59E2 姢
+5A2F 娯 => 5A1B 娛
+5A31 娱 => 5A1B 娛
+5A40 婀 => 5A3F 娿
+5A41 婁 => 5A04 娄
+5A49 婉 => 5007 倇
+5A63 婣 => 59FB 姻
+5A66 婦 => 5987 妇
+5A6D 婭 => 5A05 娅
+5A7E 婾 => 5077 偷
+5A8E 媎 => 59D0 姐
+5AA7 媧 => 5A32 娲
+5AAC 媬 => 4FDD 保
+5AAE 媮 => 5077 偷
+5AAF 媯 => 59AB 妫
+5ABC 媼 => 5AAA 媪
+5ABD 媽 => 5988 妈
+5AD7 嫗 => 59AA 妪
+5AF5 嫵 => 59A9 妩
+5AF7 嫷 => 5AA0 媠
+5AF9 嫹 => 5A8C 媌
+5AFA 嫺 => 5A34 娴
+5AFB 嫻 => 5A34 娴
+5AFF 嫿 => 5A73 婳
+5B00 嬀 => 59AB 妫
+5B03 嬃 => 5AAD 媭
+5B08 嬈 => 5A06 娆
+5B0B 嬋 => 5A75 婵
+5B0C 嬌 => 5A07 娇
+5B19 嬙 => 5AF1 嫱
+5B1D 嬝 => 5ACB 嫋
+5B21 嬡 => 5AD2 嫒
+5B22 嬢 => 5A18 娘
+5B2A 嬪 => 5AD4 嫔
+5B2D 嬭 => 4F32 伲
+5B30 嬰 => 5A74 婴
+5B37 嬷 => 5B24 嬤
+5B38 嬸 => 5A76 婶
+5B43 孃 => 5A18 娘
+5B4C 孌 => 5A08 娈
+5B6B 孫 => 5B59 孙
+5B75 孵 => 5B5A 孚
+5B76 孶 => 5B73 孳
+5B78 學 => 5B66 学
+5B7D 孽 => 5B7C 孼
+5B7F 孿 => 5B6A 孪
+5B82 宂 => 5197 冗
+5B89 安 => 4F92 侒
+5B8F 宏 => 5430 吰
+5B9C 宜 => 519D 冝
+5B9F 実 => 5B9E 实
+5BAE 宮 => 5BAB 宫
+5BB6 家 => 50A2 傢
+5BC3 寃 => 51A4 冤
+5BC6 密 => 5BBB 宻
+5BC7 寇 => 51A6 冦
+5BCC 富 => 51A8 冨
+5BCD 寍 => 5B81 宁
+5BD5 寕 => 5B81 宁
+5BDB 寛 => 5BBD 宽
+5BDC 寜 => 5B81 宁
+5BDD 寝 => 5BD1 寑
+5BDE 寞 => 55FC 嗼
+5BE2 寢 => 5BD1 寑
+5BE6 實 => 5B9E 实
+5BE7 寧 => 5B81 宁
+5BE9 審 => 5BA1 审
+5BEB 寫 => 5199 写
+5BEC 寬 => 5BBD 宽
+5BF1 寱 => 5453 呓
+5BF3 寳 => 5B9D 宝
+5BF5 寵 => 5BA0 宠
+5BF6 寶 => 5B9D 宝
+5BFF 寿 => 58FD 壽
+5C05 尅 => 514B 克
+5C07 將 => 5C06 将
+5C08 專 => 4E13 专
+5C0B 尋 => 5BFB 寻
+5C0D 對 => 5BF9 对
+5C0E 導 => 5BFC 导
+5C13 尓 => 5C12 尒
+5C14 尔 => 5C12 尒
+5C18 尘 => 5875 塵
+5C1A 尚 => 5C19 尙
+5C1D 尝 => 5617 嘗
+5C20 尠 => 5C1F 尟
+5C27 尧 => 579A 垚
+5C2B 尫 => 5C2A 尪
+5C2D 尭 => 579A 垚
+5C37 尷 => 5C34 尴
+5C3D 尽 => 5118 儘
+5C40 局 => 4FB7 侷
+5C4A 届 => 5C46 屆
+5C4D 屍 => 5C38 尸
+5C53 屓 => 5C43 屃
+5C5B 屛 => 5C4F 屏
+5C62 屢 => 5C61 屡
+5C64 層 => 5C42 层
+5C68 屨 => 5C66 屦
+5C6C 屬 => 5C5E 属
+5C6D 屭 => 5C43 屃
+5C80 岀 => 51FA 出
+5C81 岁 => 4E97 亗
+5C97 岗 => 5188 冈
+5CA1 岡 => 5188 冈
+5CA5 岥 => 5761 坡
+5CA9 岩 => 55A6 喦
+5CBA 岺 => 5CAD 岭
+5CE9 峩 => 5CE8 峨
+5CF0 峰 => 5CEF 峯
+5CF4 峴 => 5C98 岘
+5CF6 島 => 5C9B 岛
+5CFD 峽 => 5CE1 峡
+5D08 崈 => 5D07 崇
+5D0B 崋 => 534E 华
+5D0D 崍 => 5D03 崃
+5D0E 崎 => 57FC 埼
+5D0F 崏 => 5CB7 岷
+5D11 崑 => 5D10 崐
+5D16 崖 => 5D15 崕
+5D17 崗 => 5188 冈
+5D18 崘 => 4ED1 仑
+5D19 崙 => 4ED1 仑
+5D22 崢 => 5CE5 峥
+5D2C 崬 => 5CBD 岽
+5D47 嵇 => 5D46 嵆
+5D50 嵐 => 5C9A 岚
+5D52 嵒 => 55A6 喦
+5D55 嵕 => 5D4F 嵏
+5D73 嵳 => 5D6F 嵯
+5D81 嶁 => 5D5D 嵝
+5D84 嶄 => 5D2D 崭
+5D87 嶇 => 5C96 岖
+5D8B 嶋 => 5C9B 岛
+5D8C 嶌 => 5C9B 岛
+5D94 嶔 => 5D5A 嵚
+5D97 嶗 => 5D02 崂
+5DA0 嶠 => 5CE4 峤
+5DA2 嶢 => 5CE3 峣
+5DA7 嶧 => 5CC4 峄
+5DA8 嶨 => 5CC3 峃
+5DA9 嶩 => 5CF1 峱
+5DAE 嶮 => 5D04 崄
+5DB8 嶸 => 5D58 嵘
+5DBA 嶺 => 5CAD 岭
+5DBC 嶼 => 5C7F 屿
+5DBD 嶽 => 5CB3 岳
+5DCB 巋 => 5CBF 岿
+5DCC 巌 => 55A6 喦
+5DD2 巒 => 5CE6 峦
+5DD3 巓 => 5DC5 巅
+5DD4 巔 => 5DC5 巅
+5DD6 巖 => 55A6 喦
+5DE3 巣 => 5DE2 巢
+5DF0 巰 => 5DEF 巯
+5DF5 巵 => 536E 卮
+5DFB 巻 => 5377 卷
+5DFD 巽 => 5DFA 巺
+5E03 布 => 4F48 佈
+5E25 帥 => 5E05 帅
+5E2B 師 => 5E08 师
+5E2F 帯 => 5E26 带
+5E32 帲 => 5E21 帡
+5E33 帳 => 5E10 帐
+5E36 帶 => 5E26 带
+5E40 幀 => 5E27 帧
+5E42 幂 => 51AA 冪
+5E43 幃 => 5E0F 帏
+5E47 幇 => 5E2E 帮
+5E57 幗 => 5E3C 帼
+5E58 幘 => 5E3B 帻
+5E59 幙 => 5E55 幕
+5E5A 幚 => 5E2E 帮
+5E5F 幟 => 5E1C 帜
+5E63 幣 => 5E01 币
+5E64 幤 => 5E01 币
+5E6B 幫 => 5E2E 帮
+5E6C 幬 => 5E31 帱
+5E72 干 => 4E7E 乾
+5E76 并 => 4E26 並
+5E77 幷 => 4E26 並
+5E78 幸 => 5016 倖
+5E79 幹 => 4E7E 乾
+5E7A 幺 => 4E48 么
+5E7E 幾 => 51E0 几
+5E81 庁 => 5385 厅
+5E82 庂 => 4EC4 仄
+5E83 広 => 5E7F 广
+5E85 庅 => 4E48 么
+5E95 底 => 538E 厎
+5E97 店 => 576B 坫
+5E9E 庞 => 5390 厐
+5EA7 座 => 5750 坐
+5EAB 庫 => 5E93 库
+5EB0 庰 => 5C4F 屏
+5EBB 庻 => 5EB6 庶
+5EBD 庽 => 5BD3 寓
+5EBF 庿 => 5E99 庙
+5EC1 廁 => 5395 厕
+5EC2 廂 => 53A2 厢
+5EC3 廃 => 5E9F 废
+5EC4 廄 => 53A9 厩
+5EC8 廈 => 53A6 厦
+5EC9 廉 => 4EB7 亷
+5ECE 廎 => 5EBC 庼
+5ECF 廏 => 53A9 厩
+5ED0 廐 => 53A9 厩
+5ED7 廗 => 5E2D 席
+5EDA 廚 => 53A8 厨
+5EDD 廝 => 53AE 厮
+5EDF 廟 => 5E99 庙
+5EE0 廠 => 5382 厂
+5EE1 廡 => 5E91 庑
+5EE2 廢 => 5E9F 废
+5EE3 廣 => 5E7F 广
+5EEA 廪 => 5EE9 廩
+5EEC 廬 => 5E90 庐
+5EF0 廰 => 5385 厅
+5EF3 廳 => 5385 厅
+5EF5 廵 => 5DE1 巡
+5EFB 廻 => 56D8 囘
+5EFC 廼 => 4E43 乃
+5EFD 廽 => 56D8 囘
+5EFF 廿 => 5344 卄
+5F0C 弌 => 4E00 一
+5F0D 弍 => 4E8C 二
+5F12 弒 => 5F11 弑
+5F14 弔 => 540A 吊
+5F25 弥 => 519E 冞
+5F33 弳 => 5F2A 弪
+5F35 張 => 5F20 张
+5F3A 强 => 5F37 強
+5F3E 弾 => 5F39 弹
+5F42 彂 => 53D1 发
+5F46 彆 => 5225 別
+5F48 彈 => 5F39 弹
+5F4A 彊 => 5F37 強
+5F4C 彌 => 519E 冞
+5F4D 彍 => 5F49 彉
+5F4E 彎 => 5F2F 弯
+5F51 彑 => 5F50 彐
+5F52 归 => 5E30 帰
+5F53 当 => 5679 噹
+5F55 录 => 5F54 彔
+5F59 彙 => 532F 匯
+5F5A 彚 => 532F 匯
+5F5C 彜 => 5F5B 彛
+5F5D 彝 => 5F5B 彛
+5F5E 彞 => 5F5B 彛
+5F60 彠 => 5F5F 彟
+5F66 彦 => 5F65 彥
+5F6C 彬 => 4EFD 份
+5F72 彲 => 5F68 彨
+5F77 彷 => 4EFF 仿
+5F7F 彿 => 4ECF 仏
+5F83 徃 => 5F80 往
+5F88 很 => 4F77 佷
+5F8A 徊 => 4F6A 佪
+5F8C 後 => 540E 后
+5F91 徑 => 5F84 径
+5F93 従 => 4ECE 从
+5F9E 從 => 4ECE 从
+5FA0 徠 => 5F95 徕
+5FA9 復 => 590D 复
+5FAC 徬 => 508D 傍
+5FAD 徭 => 509C 傜
+5FB4 徴 => 5F81 征
+5FB5 徵 => 5F81 征
+5FB7 德 => 5FB3 徳
+5FB9 徹 => 5F7B 彻
+5FBA 徺 => 4FA5 侥
+5FC8 忈 => 4EC1 仁
+5FD6 忖 => 520C 刌
+5FDC 応 => 5E94 应
+5FF5 念 => 5538 唸
+6010 怐 => 4F5D 佝
+6025 急 => 5FE3 忣
+6031 怱 => 5306 匆
+6039 怹 => 4ED6 他
+604A 恊 => 52A6 劦
+604D 恍 => 6033 怳
+6052 恒 => 6046 恆
+6064 恤 => 5379 卹
+6076 恶 => 5641 噁
+608B 悋 => 541D 吝
+609B 悛 => 6042 恂
+60A4 悤 => 5306 匆
+60A6 悦 => 6085 悅
+60AA 悪 => 5641 噁
+60AE 悮 => 609E 悞
+60B3 悳 => 5FB3 徳
+60B4 悴 => 5FF0 忰
+60B5 悵 => 6005 怅
+60BA 悺 => 60B9 悹
+60BD 悽 => 51C4 凄
+60D5 惕 => 6090 悐
+60E0 惠 => 6075 恵
+60E1 惡 => 5641 噁
+60EA 惪 => 5FB3 徳
+60F1 惱 => 607C 恼
+60F2 惲 => 607D 恽
+60FB 惻 => 607B 恻
+6118 愘 => 606A 恪
+611C 愜 => 60EC 惬
+6127 愧 => 5ABF 媿
+6128 愨 => 60AB 悫
+6134 愴 => 6006 怆
+6137 愷 => 607A 恺
+613D 愽 => 535A 博
+613E 愾 => 5FFE 忾
+6142 慂 => 607F 恿
+614B 態 => 6001 态
+614D 慍 => 6120 愠
+614E 慎 => 613C 愼
+6153 慓 => 527D 剽
+6158 慘 => 60E8 惨
+6159 慙 => 60ED 惭
+615A 慚 => 60ED 惭
+615F 慟 => 6078 恸
+6163 慣 => 60EF 惯
+6164 慤 => 60AB 悫
+616A 慪 => 6004 怄
+616B 慫 => 6002 怂
+6173 慳 => 60AD 悭
+6174 慴 => 6151 慑
+6175 慵 => 5ADE 嫞
+6176 慶 => 5E86 庆
+6182 憂 => 5FE7 忧
+6185 憅 => 6078 恸
+618A 憊 => 60EB 惫
+618B 憋 => 5225 別
+6190 憐 => 601C 怜
+6191 憑 => 51ED 凭
+6192 憒 => 6126 愦
+6193 憓 => 6075 恵
+6196 憖 => 616D 慭
+6199 憙 => 559C 喜
+619A 憚 => 60EE 惮
+61A4 憤 => 6124 愤
+61A9 憩 => 6187 憇
+61AB 憫 => 60AF 悯
+61AE 憮 => 6003 怃
+61B2 憲 => 5BAA 宪
+61B6 憶 => 5FC6 忆
+61BC 憼 => 5106 儆
+61C3 懃 => 52E4 勤
+61C7 懇 => 6073 恳
+61C9 應 => 5E94 应
+61CC 懌 => 603F 怿
+61D0 懐 => 6000 怀
+61D2 懒 => 5B3E 嬾
+61D4 懔 => 61CD 懍
+61DF 懟 => 603C 怼
+61E3 懣 => 61D1 懑
+61E7 懧 => 61E6 懦
+61E8 懨 => 6079 恹
+61F2 懲 => 60E9 惩
+61F6 懶 => 5B3E 嬾
+61F7 懷 => 6000 怀
+61F8 懸 => 60AC 悬
+61FA 懺 => 5FCF 忏
+61FC 懼 => 60E7 惧
+61FE 懾 => 6151 慑
+6200 戀 => 604B 恋
+6207 戇 => 6206 戆
+6214 戔 => 620B 戋
+621E 戞 => 621B 戛
+6226 戦 => 6218 战
+6227 戧 => 6217 戗
+622C 戬 => 6229 戩
+622F 戯 => 620F 戏
+6230 戰 => 6218 战
+6231 戱 => 620F 戏
+6232 戲 => 620F 戏
+6237 户 => 6236 戶
+6238 戸 => 6236 戶
+623C 戼 => 536F 卯
+623E 戾 => 623B 戻
+624E 扎 => 5273 剳
+6267 执 => 57F7 執
+6275 扵 => 4E8E 于
+6289 抉 => 5214 刔
+628C 抌 => 4F14 伔
+62A5 报 => 5831 報
+62B5 抵 => 627A 扺
+62BB 抻 => 4F38 伸
+62C2 拂 => 6255 払
+62CA 拊 => 629A 抚
+62CB 拋 => 629B 抛
+62D4 拔 => 629C 抜
+62D6 拖 => 62D5 拕
+62DA 拚 => 6283 抃
+62DD 拝 => 62DC 拜
+62DF 拟 => 5117 儗
+62E1 拡 => 6269 扩
+62E9 择 => 629E 択
+62FF 拿 => 62CF 拏
+6306 挆 => 6305 挅
+6319 挙 => 4E3E 举
+633E 挾 => 631F 挟
+634C 捌 => 516B 八
+634D 捍 => 625E 扞
+6359 捙 => 62FD 拽
+635D 捝 => 6329 挩
+636B 捫 => 626A 扪
+636E 据 => 62E0 拠
+6372 捲 => 5377 卷
+6374 捴 => 603B 总
+6383 掃 => 626B 扫
+6384 掄 => 62A1 抡
+6386 掆 => 39CF 㧏
+6397 掗 => 631C 挜
+6399 掙 => 6323 挣
+639B 掛 => 6302 挂
+63AC 掬 => 530A 匊
+63C0 揀 => 62E3 拣
+63DA 揚 => 626C 扬
+63DB 換 => 6362 换
+63EB 揫 => 63EA 揪
+63ED 揭 => 63B2 掲
+63EE 揮 => 6325 挥
+63F4 援 => 610B 愋
+63F7 揷 => 63D2 插
+63F9 揹 => 505D 偝
+6403 搃 => 603B 总
+6404 搄 => 63EF 揯
+6405 搅 => 6341 捁
+6406 搆 => 5193 冓
+6409 搉 => 3A41 㩁
+640B 搋 => 6260 扠
+640D 損 => 635F 损
+6416 搖 => 63FA 揺
+6417 搗 => 6363 捣
+641C 搜 => 635C 捜
+6424 搤 => 627C 扼
+6425 搥 => 6376 捶
+6427 搧 => 6247 扇
+642D 搭 => 6428 搨
+642F 搯 => 638F 掏
+6435 搵 => 63FE 揾
+6436 搶 => 62A2 抢
+6439 搹 => 627C 扼
+6440 摀 => 6342 捂
+6443 摃 => 625B 扛
+6444 摄 => 6315 挕
+6445 摅 => 6348 捈
+6447 摇 => 63FA 揺
+6451 摑 => 63B4 掴
+645C 摜 => 63BC 掼
+645F 摟 => 6402 搂
+6460 摠 => 603B 总
+646D 摭 => 62D3 拓
+646F 摯 => 631A 挚
+6473 摳 => 62A0 抠
+6476 摶 => 629F 抟
+647A 摺 => 6298 折
+647B 摻 => 63BA 掺
+647C 摼 => 6333 挳
+6483 撃 => 51FB 击
+6485 撅 => 6398 掘
+6488 撈 => 635E 捞
+648F 撏 => 6326 挦
+6491 撑 => 6490 撐
+6493 撓 => 6320 挠
+6498 撘 => 6428 搨
+649A 撚 => 637B 捻
+649F 撟 => 6322 挢
+64A3 撣 => 63B8 掸
+64A5 撥 => 62E8 拨
+64A6 撦 => 626F 扯
+64AB 撫 => 629A 抚
+64B2 撲 => 6251 扑
+64B3 撳 => 63FF 揿
+64B9 撹 => 6341 捁
+64BB 撻 => 631E 挞
+64BE 撾 => 631D 挝
+64BF 撿 => 6361 捡
+64C0 擀 => 625E 扞
+64C1 擁 => 62E5 拥
+64C4 擄 => 63B3 掳
+64C7 擇 => 629E 択
+64CA 擊 => 51FB 击
+64CB 擋 => 6321 挡
+64D3 擓 => 39DF 㧟
+64D4 擔 => 62C5 担
+64DA 據 => 62E0 拠
+64E0 擠 => 6324 挤
+64E3 擣 => 6363 捣
+64E7 擧 => 4E3E 举
+64EB 擫 => 64EA 擪
+64EC 擬 => 5117 儗
+64EF 擯 => 6448 摈
+64F0 擰 => 62E7 拧
+64F1 擱 => 6401 搁
+64F2 擲 => 63B7 掷
+64F4 擴 => 6269 扩
+64F7 擷 => 64B7 撷
+64FA 擺 => 6446 摆
+64FB 擻 => 64DE 擞
+64FC 擼 => 64B8 撸
+64FE 擾 => 6270 扰
+6504 攄 => 6348 捈
+6506 攆 => 64B5 撵
+650F 攏 => 62E2 拢
+6512 攒 => 6505 攅
+6514 攔 => 62E6 拦
+6516 攖 => 6484 撄
+6519 攙 => 6400 搀
+651B 攛 => 64BA 撺
+651C 攜 => 643A 携
+651D 攝 => 6315 挕
+6522 攢 => 6505 攅
+6523 攣 => 631B 挛
+6524 攤 => 644A 摊
+652A 攪 => 6341 捁
+652C 攬 => 63FD 揽
+652F 支 => 6418 搘
+6534 攴 => 6251 扑
+6536 收 => 53CE 収
+6546 敆 => 5408 合
+6548 效 => 4FF2 俲
+654D 敍 => 53D9 叙
+6553 敓 => 593A 夺
+6558 敘 => 53D9 叙
+6559 教 => 654E 敎
+656A 敪 => 6560 敠
+656F 敯 => 610D 愍
+6575 敵 => 654C 敌
+6577 敷 => 5C03 尃
+6578 數 => 6570 数
+657B 敻 => 5910 夐
+6582 斂 => 655B 敛
+6585 斅 => 6569 敩
+6586 斆 => 6569 敩
+6588 斈 => 5B66 学
+6589 斉 => 4E9D 亝
+658E 斎 => 658B 斋
+6594 斔 => 5EBE 庾
+6595 斕 => 6593 斓
+6596 斖 => 4EB9 亹
+659E 斞 => 5EBE 庾
+65AC 斬 => 65A9 斩
+65B7 斷 => 65AD 断
+65BC 於 => 4E8E 于
+65CD 旍 => 65CC 旌
+65D7 旗 => 65C2 旂
+65E3 旣 => 65E2 既
+65E8 旨 => 6049 恉
+65EE 旮 => 65ED 旭
+6604 昄 => 53CD 反
+6606 昆 => 5D10 崐
+6607 昇 => 5347 升
+661A 昚 => 613C 愼
+6626 昦 => 660A 昊
+6630 昰 => 662F 是
+6642 時 => 65F6 时
+6644 晄 => 6643 晃
+664B 晋 => 6649 晉
+665C 晜 => 5D10 崐
+665D 晝 => 663C 昼
+6663 晣 => 403F 䀿
+6669 晩 => 665A 晚
+6681 暁 => 6653 晓
+6688 暈 => 6655 晕
+6689 暉 => 6656 晖
+668E 暎 => 6620 映
+6697 暗 => 667B 晻
+6698 暘 => 65F8 旸
+66A6 暦 => 5386 历
+66AB 暫 => 6682 暂
+66B1 暱 => 6635 昵
+66B8 暸 => 4E86 了
+66C1 曁 => 66A8 暨
+66C4 曄 => 6654 晔
+66C5 曅 => 6654 晔
+66C6 曆 => 5386 历
+66C7 曇 => 6619 昙
+66C9 曉 => 6653 晓
+66CA 曊 => 6632 昲
+66CF 曏 => 5411 向
+66D6 曖 => 66A7 暧
+66E0 曠 => 65F7 旷
+66E1 曡 => 53E0 叠
+66E8 曨 => 663D 昽
+66EC 曬 => 6652 晒
+66F5 曵 => 66F3 曳
+66F6 曶 => 3ADA 㫚
+66F8 書 => 4E66 书
+66FA 曺 => 66F9 曹
+6703 會 => 4F1A 会
+6717 朗 => 6716 朖
+671F 期 => 671E 朞
+6722 朢 => 671B 望
+672C 本 => 5932 夲
+672D 札 => 5273 剳
+672F 术 => 672E 朮
+6736 朶 => 6735 朵
+673F 朿 => 523A 刺
+6747 杇 => 572C 圬
+6765 来 => 4F86 來
+6770 杰 => 5091 傑
+6771 東 => 4E1C 东
+6780 枀 => 677E 松
+6784 构 => 5193 冓
+6787 枇 => 673C 朼
+67B4 枴 => 62D0 拐
+67BE 枾 => 676E 杮
+67F0 柰 => 5948 奈
+67FB 査 => 67E5 查
+67FE 柾 => 67E9 柩
+67FF 柿 => 676E 杮
+6805 栅 => 67F5 柵
+6806 栆 => 67A3 枣
+6807 标 => 5882 墂
+6811 树 => 5C0C 尌
+6814 栔 => 5951 契
+6817 栗 => 6144 慄
+6821 校 => 630D 挍
+6822 栢 => 67CF 柏
+6852 桒 => 6851 桑
+686E 桮 => 676F 杯
+687C 桼 => 67D2 柒
+687F 桿 => 6746 杆
+6893 梓 => 674D 杍
+6894 梔 => 6800 栀
+6898 梘 => 67A7 枧
+689D 條 => 6761 条
+689F 梟 => 67AD 枭
+68A6 梦 => 5922 夢
+68C1 棁 => 68B2 梲
+68C4 棄 => 5F03 弃
+68CB 棋 => 68CA 棊
+68D6 棖 => 67A8 枨
+68D7 棗 => 67A3 枣
+68DF 棟 => 680B 栋
+68E1 棡 => 3B4E 㭎
+68E7 棧 => 6808 栈
+68F2 棲 => 6816 栖
+68F6 棶 => 68BE 梾
+68F9 棹 => 684C 桌
+690F 椏 => 6860 桠
+691C 検 => 68C0 检
+692D 椭 => 64B1 撱
+6936 椶 => 68D5 棕
+6939 椹 => 67AE 枮
+6942 楂 => 67E5 查
+694A 楊 => 6768 杨
+6951 楑 => 63C6 揆
+6953 楓 => 67AB 枫
+6955 楕 => 64B1 撱
+695A 楚 => 6918 椘
+6960 楠 => 678F 枏
+6968 楨 => 6862 桢
+696D 業 => 4E1A 业
+6973 楳 => 6885 梅
+6975 極 => 6781 极
+697D 楽 => 4E50 乐
+6986 榆 => 6961 楡
+6994 榔 => 6879 桹
+69A4 榤 => 6840 桀
+69A6 榦 => 4E7E 乾
+69A8 榨 => 643E 搾
+69AA 榪 => 6769 杩
+69AE 榮 => 6804 栄
+69B2 榲 => 6985 榅
+69B7 榷 => 3A41 㩁
+69BF 榿 => 6864 桤
+69C5 槅 => 6838 核
+69CB 構 => 5193 冓
+69CD 槍 => 67AA 枪
+69D3 槓 => 6760 杠
+69D8 様 => 6837 样
+69D9 槙 => 69C7 槇
+69DA 槚 => 698E 榎
+69DF 槟 => 68B9 梹
+69E4 槤 => 68BF 梿
+69E7 槧 => 6920 椠
+69E8 槨 => 6901 椁
+69EA 槪 => 6982 概
+69F3 槳 => 6868 桨
+69FC 槼 => 691D 椝
+6A01 樁 => 6869 桩
+6A02 樂 => 4E50 乐
+6A05 樅 => 679E 枞
+6A11 樑 => 6881 梁
+6A13 樓 => 697C 楼
+6A19 標 => 5882 墂
+6A1B 樛 => 673B 朻
+6A1E 樞 => 67A2 枢
+6A23 樣 => 6837 样
+6A27 樧 => 699D 榝
+6A29 権 => 6743 权
+6A33 樳 => 686A 桪
+6A38 樸 => 6734 朴
+6A39 樹 => 5C0C 尌
+6A3A 樺 => 6866 桦
+6A3C 樼 => 699B 榛
+6A3D 樽 => 58AB 墫
+6A3F 樿 => 692B 椫
+6A47 橇 => 6865 桥
+6A48 橈 => 6861 桡
+6A4B 橋 => 6865 桥
+6A55 橕 => 6A18 樘
+6A5F 機 => 673A 机
+6A62 橢 => 64B1 撱
+6A6B 橫 => 6A2A 横
+6A79 橹 => 6A10 樐
+6A85 檅 => 69E5 槥
+6A87 檇 => 69DC 槜
+6A89 檉 => 67FD 柽
+6A94 檔 => 6863 档
+6A98 檘 => 67B0 枰
+6A9A 檚 => 6918 椘
+6A9C 檜 => 6867 桧
+6A9F 檟 => 698E 榎
+6AA2 檢 => 68C0 检
+6AA3 檣 => 6A2F 樯
+6AA9 檩 => 6A81 檁
+6AAE 檮 => 68BC 梼
+6AAF 檯 => 53F0 台
+6AB3 檳 => 68B9 梹
+6AB8 檸 => 67E0 柠
+6ABB 檻 => 69DB 槛
+6ABC 檼 => 6A83 檃
+6AC2 櫂 => 684C 桌
+6AC3 櫃 => 67DC 柜
+6AD3 櫓 => 6A10 樐
+6ADA 櫚 => 6988 榈
+6ADB 櫛 => 6809 栉
+6ADD 櫝 => 691F 椟
+6ADE 櫞 => 6A7C 橼
+6ADF 櫟 => 680E 栎
+6AE5 櫥 => 6A71 橱
+6AE7 櫧 => 69E0 槠
+6AE8 櫨 => 680C 栌
+6AEA 櫪 => 67A5 枥
+6AEB 櫫 => 6A65 橥
+6AEC 櫬 => 6987 榇
+6AF3 櫳 => 680A 栊
+6AF8 櫸 => 6989 榉
+6AFB 櫻 => 6A31 樱
+6AFD 櫽 => 6A83 檃
+6B04 欄 => 680F 栏
+6B09 欉 => 4E1B 丛
+6B0A 權 => 6743 权
+6B0F 欏 => 6924 椤
+6B12 欒 => 683E 栾
+6B16 欖 => 6984 榄
+6B17 欗 => 680F 栏
+6B1E 欞 => 68C2 棂
+6B22 欢 => 61FD 懽
+6B32 欲 => 617E 慾
+6B33 欳 => 559F 喟
+6B36 欶 => 55FD 嗽
+6B4E 歎 => 53F9 叹
+6B50 歐 => 6B27 欧
+6B53 歓 => 61FD 懽
+6B55 歕 => 55B7 喷
+6B5B 歛 => 655B 敛
+6B5F 歟 => 6B24 欤
+6B61 歡 => 61FD 懽
+6B67 歧 => 5C90 岐
+6B69 歩 => 6B65 步
+6B72 歲 => 4E97 亗
+6B73 歳 => 4E97 亗
+6B74 歴 => 5386 历
+6B77 歷 => 5386 历
+6B78 歸 => 5E30 帰
+6B7A 歺 => 6B79 歹
+6B80 殀 => 592D 夭
+6B81 殁 => 6B7F 歿
+6B98 殘 => 6B8B 残
+6B9E 殞 => 6B92 殒
+6BA4 殤 => 6B87 殇
+6BA8 殨 => 3C6E 㱮
+6BAB 殫 => 6B9A 殚
+6BAD 殭 => 50F5 僵
+6BAE 殮 => 6B93 殓
+6BAF 殯 => 6BA1 殡
+6BB2 殲 => 6B7C 歼
+6BB3 殳 => 6778 杸
+6BB7 殷 => 6147 慇
+6BBA 殺 => 6740 杀
+6BBB 殻 => 58F3 壳
+6BBC 殼 => 58F3 壳
+6BC1 毁 => 6BC0 毀
+6BC3 毃 => 6572 敲
+6BC6 毆 => 6BB4 殴
+6BC9 毉 => 533B 医
+6BCF 每 => 6BCE 毎
+6BD8 毘 => 6BD7 毗
+6BD9 毙 => 6583 斃
+6BFB 毻 => 6BE4 毤
+6BFF 毿 => 6BF5 毵
+6C08 氈 => 6BE1 毡
+6C0C 氌 => 6C07 氇
+6C23 氣 => 6C14 气
+6C2B 氫 => 6C22 氢
+6C2C 氬 => 6C29 氩
+6C33 氳 => 6C32 氲
+6C37 氷 => 51B0 冰
+6C47 汇 => 532F 匯
+6C4E 汎 => 6C3E 氾
+6C5A 汚 => 6C59 汙
+6C61 污 => 6C59 汙
+6C70 汰 => 6C4F 汏
+6C7A 決 => 51B3 决
+6C89 沉 => 6C88 沈
+6C8D 沍 => 51B1 冱
+6C96 沖 => 51B2 冲
+6C9B 沛 => 4F02 伂
+6CA1 没 => 6C92 沒
+6CB2 沲 => 6CB1 沱
+6CC1 況 => 51B5 况
+6CDB 泛 => 6C3E 氾
+6CED 泭 => 6874 桴
+6CFA 泺 => 6CCA 泊
+6CFD 泽 => 6CA2 沢
+6D0C 洌 => 51BD 冽
+6D0D 洍 => 6C5C 汜
+6D22 洢 => 4F0A 伊
+6D29 洩 => 6CC4 泄
+6D2F 洯 => 6D01 洁
+6D36 洶 => 6C79 汹
+6D3D 洽 => 51BE 冾
+6D3E 派 => 6CD2 泒
+6D44 浄 => 51C0 净
+6D4F 浏 => 56A0 嚠
+6D52 浒 => 6C7B 汻
+6D79 浹 => 6D43 浃
+6D82 涂 => 51C3 凃
+6D87 涇 => 6CFE 泾
+6D99 涙 => 6CEA 泪
+6D9A 涚 => 6D97 涗
+6DBC 涼 => 51C9 凉
+6DD2 淒 => 51C4 凄
+6DD3 淓 => 6C78 汸
+6DD7 淗 => 6CE6 泦
+6DDA 淚 => 6CEA 泪
+6DDB 淛 => 6D59 浙
+6DE3 淣 => 502A 倪
+6DE8 淨 => 51C0 净
+6DE9 淩 => 51CC 凌
+6DEA 淪 => 6CA6 沦
+6DEB 淫 => 5A6C 婬
+6DF6 淶 => 6D9E 涞
+6DF8 淸 => 51CA 凊
+6DFA 淺 => 6D45 浅
+6E05 清 => 51CA 凊
+6E08 済 => 6D4E 济
+6E09 渉 => 6D89 涉
+6E0A 渊 => 6DF5 淵
+6E0B 渋 => 6DA9 涩
+6E0C 渌 => 6DE5 淥
+6E10 渐 => 5DC9 巉
+6E15 渕 => 6DF5 淵
+6E16 渖 => 6C88 沈
+6E19 渙 => 6DA3 涣
+6E1B 減 => 51CF 减
+6E22 渢 => 6CA8 沨
+6E26 渦 => 6DA1 涡
+6E2B 渫 => 6CC4 泄
+6E2C 測 => 6D4B 测
+6E34 渴 => 6E07 渇
+6E3E 渾 => 6D51 浑
+6E47 湇 => 6E46 湆
+6E4A 湊 => 51D1 凑
+6E5E 湞 => 6D48 浈
+6E67 湧 => 6D8C 涌
+6E6F 湯 => 6C64 汤
+6E88 溈 => 6CA9 沩
+6E90 源 => 53B5 厵
+6E96 準 => 51C6 准
+6E99 溙 => 6C4F 汏
+6E9D 溝 => 6C9F 沟
+6EAB 溫 => 6E29 温
+6EAE 溮 => 6D49 浉
+6EAF 溯 => 6CDD 泝
+6EB3 溳 => 6DA2 涢
+6EBA 溺 => 5C3F 尿
+6EBC 溼 => 6E7F 湿
+6EC4 滄 => 6CA7 沧
+6ECA 滊 => 6C7D 汽
+6ECC 滌 => 6DA4 涤
+6ED9 滙 => 532F 匯
+6EE1 满 => 6E80 満
+6EE8 滨 => 6D5C 浜
+6EEC 滬 => 6CAA 沪
+6EEF 滯 => 6EDE 滞
+6EF2 滲 => 6E17 渗
+6EF7 滷 => 5364 卤
+6EF8 滸 => 6C7B 汻
+6EFB 滻 => 6D50 浐
+6EFE 滾 => 6EDA 滚
+6EFF 滿 => 6E80 満
+6F01 漁 => 6E14 渔
+6F05 漅 => 5DE2 巢
+6F06 漆 => 67D2 柒
+6F0A 漊 => 6E87 溇
+6F11 漑 => 6E89 溉
+6F1A 漚 => 6CA4 沤
+6F22 漢 => 6C49 汉
+6F23 漣 => 6D9F 涟
+6F25 漥 => 6D3C 洼
+6F27 漧 => 4E7E 乾
+6F2C 漬 => 6E0D 渍
+6F32 漲 => 6DA8 涨
+6F35 漵 => 6E86 溆
+6F38 漸 => 5DC9 巉
+6F3F 漿 => 6D46 浆
+6F40 潀 => 6F0E 漎
+6F43 潃 => 6EEB 滫
+6F44 潄 => 6F31 漱
+6F51 潑 => 6CFC 泼
+6F54 潔 => 6D01 洁
+6F59 潙 => 6CA9 沩
+6F5C 潜 => 6F5B 潛
+6F64 潤 => 6DA6 润
+6F67 潧 => 6EB1 溱
+6F68 潨 => 6F0E 漎
+6F6F 潯 => 6D54 浔
+6F70 潰 => 6E83 溃
+6F77 潷 => 6ED7 滗
+6F7F 潿 => 6DA0 涠
+6F80 澀 => 6DA9 涩
+6F81 澁 => 6DA9 涩
+6F84 澄 => 6F82 澂
+6F86 澆 => 6D47 浇
+6F87 澇 => 6D9D 涝
+6F91 澑 => 6E9C 溜
+6F94 澔 => 6D69 浩
+6F97 澗 => 6DA7 涧
+6F99 澙 => 6F5F 潟
+6FA0 澠 => 6E11 渑
+6FA3 澣 => 6D63 浣
+6FA4 澤 => 6CA2 沢
+6FA6 澦 => 6EEA 滪
+6FA9 澩 => 6CF6 泶
+6FAA 澪 => 6CE0 泠
+6FAB 澫 => 6F2B 漫
+6FAE 澮 => 6D4D 浍
+6FB1 澱 => 6DC0 淀
+6FB9 澹 => 6DE1 淡
+6FBE 澾 => 3CE0 㳠
+6FC1 濁 => 6D4A 浊
+6FC3 濃 => 6D53 浓
+6FC4 濄 => 6DA1 涡
+6FC7 濇 => 6DA9 涩
+6FD4 濔 => 6CB5 沵
+6FD5 濕 => 6E7F 湿
+6FD8 濘 => 6CDE 泞
+6FDA 濚 => 6E81 溁
+6FDB 濛 => 61DE 懞
+6FDC 濜 => 6D55 浕
+6FDF 濟 => 6D4E 济
+6FE4 濤 => 6D9B 涛
+6FEB 濫 => 6EE5 滥
+6FEC 濬 => 6D5A 浚
+6FF0 濰 => 6F4D 潍
+6FF1 濱 => 6D5C 浜
+6FF3 濳 => 6F5B 潛
+6FFA 濺 => 6E85 溅
+6FFC 濼 => 6CCA 泊
+6FFE 濾 => 6EE4 滤
+7001 瀁 => 6F3E 漾
+7002 瀂 => 6F9B 澛
+7005 瀅 => 6EE2 滢
+7006 瀆 => 6E0E 渎
+7007 瀇 => 6C6A 汪
+7009 瀉 => 6CFB 泻
+700B 瀋 => 6C88 沈
+700F 瀏 => 56A0 嚠
+7012 瀒 => 6DA9 涩
+7015 瀕 => 6FD2 濒
+7018 瀘 => 6CF8 泸
+701D 瀝 => 6CA5 沥
+701F 瀟 => 6F47 潇
+7020 瀠 => 6F46 潆
+7022 瀢 => 6FFB 濻
+7026 瀦 => 6F74 潴
+7027 瀧 => 6CF7 泷
+7028 瀨 => 6FD1 濑
+702C 瀬 => 6FD1 濑
+7030 瀰 => 519E 冞
+7032 瀲 => 6F4B 潋
+703E 瀾 => 6F9C 澜
+7041 灁 => 6DF5 淵
+7043 灃 => 6CA3 沣
+7044 灄 => 6EE0 滠
+704C 灌 => 6F45 潅
+7051 灑 => 6D12 洒
+7054 灔 => 6EDF 滟
+7055 灕 => 6F13 漓
+7058 灘 => 6EE9 滩
+705D 灝 => 704F 灏
+7063 灣 => 6E7E 湾
+7064 灤 => 6EE6 滦
+7067 灧 => 6EDF 滟
+7069 灩 => 6EDF 滟
+706D 灭 => 6EC5 滅
+706E 灮 => 5149 光
+707E 灾 => 707D 災
+7094 炔 => 7085 炅
+7095 炕 => 531F 匟
+709A 炚 => 5149 光
+70A4 炤 => 66CC 曌
+70B0 炰 => 70AE 炮
+70B3 炳 => 663A 昺
+70B9 点 => 594C 奌
+70BA 為 => 4E3A 为
+70CF 烏 => 4E4C 乌
+70D6 烖 => 707D 災
+70D8 烘 => 7074 灴
+70E1 烡 => 5149 光
+70F1 烱 => 70AF 炯
+70F4 烴 => 70C3 烃
+70FA 烺 => 6716 朖
+7115 焕 => 70C9 烉
+711A 焚 => 7083 炃
+7121 無 => 65E0 无
+712D 焭 => 60F8 惸
+7149 煉 => 70BC 炼
+7152 煒 => 709C 炜
+7156 煖 => 6696 暖
+7159 煙 => 70DF 烟
+7161 煡 => 70EC 烬
+7162 煢 => 60F8 惸
+7165 煥 => 70C9 烉
+7167 照 => 66CC 曌
+7169 煩 => 70E6 烦
+716C 煬 => 7080 炀
+716E 煮 => 7151 煑
+7185 熅 => 7174 煴
+7197 熗 => 709D 炝
+7199 熙 => 7188 熈
+71B1 熱 => 70ED 热
+71BA 熺 => 71B9 熹
+71BE 熾 => 70BD 炽
+71C1 燁 => 70E8 烨
+71C4 燄 => 7130 焰
+71C7 燇 => 710C 焌
+71C8 燈 => 706F 灯
+71C9 燉 => 7096 炖
+71D2 燒 => 70E7 烧
+71D7 燗 => 70C2 烂
+71D9 燙 => 70EB 烫
+71DB 燛 => 715A 煚
+71DC 燜 => 7116 焖
+71DF 營 => 55B6 営
+71E5 燥 => 7170 煰
+71E6 燦 => 707F 灿
+71ED 燭 => 70DB 烛
+71F0 燰 => 7168 煨
+71F4 燴 => 70E9 烩
+71F7 燷 => 71E3 燣
+71FB 燻 => 718F 熏
+71FC 燼 => 70EC 烬
+71FE 燾 => 7118 焘
+71FF 燿 => 66DC 曜
+720D 爍 => 70C1 烁
+7210 爐 => 7089 炉
+7214 爔 => 71E8 燨
+721B 爛 => 70C2 烂
+7226 爦 => 7201 爁
+7227 爧 => 71EF 燯
+722D 爭 => 4E89 争
+7231 爱 => 611B 愛
+7232 爲 => 4E3A 为
+723A 爺 => 7237 爷
+723C 爼 => 4FCE 俎
+723D 爽 => 6161 慡
+723E 爾 => 5C12 尒
+723F 爿 => 4E2C 丬
+7240 牀 => 5E8A 床
+7246 牆 => 5899 墙
+7253 牓 => 699C 榜
+7258 牘 => 724D 牍
+725A 牚 => 6490 撐
+7260 牠 => 5B83 它
+7266 牦 => 6C02 氂
+7274 牴 => 627A 扺
+727D 牽 => 7275 牵
+7282 犂 => 7281 犁
+7287 犇 => 5954 奔
+729B 犛 => 6C02 氂
+72A2 犢 => 728A 犊
+72A7 犧 => 727A 牺
+72C0 狀 => 72B6 状
+72C5 狅 => 72C2 狂
+72C6 狆 => 4EF2 仲
+72EB 狫 => 4F6C 佬
+72F9 狹 => 72ED 狭
+72FD 狽 => 72C8 狈
+7312 猒 => 538C 厌
+7319 猙 => 72F0 狰
+7336 猶 => 72B9 犹
+733B 猻 => 72F2 狲
+733E 猾 => 72EF 狯
+7341 獁 => 72B8 犸
+7343 獃 => 5446 呆
+7344 獄 => 72F1 狱
+7345 獅 => 72EE 狮
+7349 獉 => 699B 榛
+734E 獎 => 5956 奖
+735E 獞 => 50EE 僮
+7367 獧 => 72F7 狷
+7368 獨 => 72EC 独
+736A 獪 => 72EF 狯
+736B 獫 => 7303 猃
+736E 獮 => 72DD 狝
+7370 獰 => 72DE 狞
+7375 獵 => 730E 猎
+7377 獷 => 72B7 犷
+7378 獸 => 517D 兽
+737A 獺 => 736D 獭
+737B 獻 => 732E 献
+737C 獼 => 7315 猕
+7380 玀 => 7321 猡
+7381 玁 => 7303 猃
+7385 玅 => 5999 妙
+7386 玆 => 5179 兹
+73C9 珉 => 739F 玟
+73CE 珎 => 73CD 珍
+73EA 珪 => 572D 圭
+73EE 珮 => 4F69 佩
+73FE 現 => 73B0 现
+7403 球 => 6BEC 毬
+741D 琝 => 739F 玟
+7431 琱 => 5F6B 彫
+743F 琿 => 73F2 珲
+7445 瑅 => 73F6 珶
+744B 瑋 => 73AE 玮
+7452 瑒 => 739A 玚
+7463 瑣 => 7410 琐
+746A 瑪 => 739B 玛
+746F 瑯 => 7405 琅
+7472 瑲 => 73B1 玱
+7476 瑶 => 7464 瑤
+7483 璃 => 740D 琍
+7487 璇 => 7401 琁
+7489 璉 => 740F 琏
+7497 璗 => 739A 玚
+749A 璚 => 743C 琼
+74A1 璡 => 740E 琎
+74A3 璣 => 7391 玑
+74A6 璦 => 7477 瑷
+74AB 璫 => 73F0 珰
+74B0 環 => 73AF 环
+74B5 璵 => 7399 玙
+74B8 璸 => 7478 瑸
+74BD 璽 => 73BA 玺
+74BF 璿 => 7401 琁
+74CA 瓊 => 743C 琼
+74CF 瓏 => 73D1 珑
+74D4 瓔 => 748E 璎
+74DA 瓚 => 74D2 瓒
+74E1 瓡 => 57F7 執
+7501 甁 => 74F6 瓶
+7506 甆 => 74F7 瓷
+750C 甌 => 74EF 瓯
+7515 甕 => 74EE 瓮
+7516 甖 => 7507 甇
+751C 甜 => 751B 甛
+751E 甞 => 5617 嘗
+7522 產 => 4EA7 产
+7523 産 => 4EA7 产
+7526 甦 => 56CC 囌
+753A 町 => 5722 圢
+753F 甿 => 6C13 氓
+7545 畅 => 66A2 暢
+7546 畆 => 4EA9 亩
+754C 界 => 583A 堺
+754D 畍 => 583A 堺
+754E 畎 => 753D 甽
+754F 畏 => 6104 愄
+7559 留 => 7544 畄
+755D 畝 => 4EA9 亩
+7562 畢 => 6BD5 毕
+7567 畧 => 7565 略
+756B 畫 => 753B 画
+756D 畭 => 756C 畬
+756E 畮 => 4EA9 亩
+7570 異 => 5F02 异
+7572 畲 => 756C 畬
+7575 畵 => 753B 画
+7576 當 => 5679 噹
+757D 畽 => 58A5 墥
+7583 疃 => 58A5 墥
+7587 疇 => 7574 畴
+7589 疉 => 53E0 叠
+758A 疊 => 53E0 叠
+758B 疋 => 5339 匹
+75CC 痌 => 606B 恫
+75D6 痖 => 54D1 哑
+75D9 痙 => 75C9 痉
+75F1 痱 => 75BF 疿
+75F2 痲 => 6DCB 淋
+75F3 痳 => 6DCB 淋
+75F5 痵 => 60B8 悸
+75F9 痹 => 75AA 疪
+75FA 痺 => 75AA 疪
+7602 瘂 => 54D1 哑
+7609 瘉 => 6108 愈
+760B 瘋 => 75AF 疯
+760D 瘍 => 75A1 疡
+7613 瘓 => 75EA 痪
+7616 瘖 => 5591 喑
+761E 瘞 => 7617 瘗
+7621 瘡 => 75AE 疮
+7623 瘣 => 574F 坏
+7627 瘧 => 759F 疟
+762E 瘮 => 7606 瘆
+7632 瘲 => 75AD 疭
+763A 瘺 => 7618 瘘
+763B 瘻 => 7618 瘘
+763D 瘽 => 52E4 勤
+7642 療 => 7597 疗
+7646 癆 => 75E8 痨
+7647 癇 => 75EB 痫
+7648 癈 => 5E9F 废
+7649 癉 => 7605 瘅
+7652 癒 => 6108 愈
+7658 癘 => 75A0 疠
+765D 癝 => 765B 癛
+765F 癟 => 762A 瘪
+7661 癡 => 75F4 痴
+7662 癢 => 75D2 痒
+7664 癤 => 7596 疖
+7665 癥 => 75C7 症
+7667 癧 => 75AC 疬
+7669 癩 => 765E 癞
+766B 癫 => 7628 瘨
+766C 癬 => 7663 癣
+766D 癭 => 763F 瘿
+766E 癮 => 763E 瘾
+7670 癰 => 75C8 痈
+7671 癱 => 762B 瘫
+7672 癲 => 7628 瘨
+767C 發 => 53D1 发
+7682 皂 => 7681 皁
+7688 皈 => 5E30 帰
+7690 皐 => 768B 皋
+7693 皓 => 66A0 暠
+7696 皖 => 6665 晥
+769A 皚 => 7691 皑
+769C 皜 => 66A0 暠
+76A6 皦 => 768E 皎
+76B0 皰 => 75B1 疱
+76B8 皸 => 76B2 皲
+76BA 皺 => 76B1 皱
+76BC 皼 => 76B7 皷
+76C3 盃 => 676F 杯
+76C5 盅 => 51B2 冲
+76CD 盍 => 76C7 盇
+76CF 盏 => 7416 琖
+76D0 盐 => 5869 塩
+76D8 盘 => 6D00 洀
+76DC 盜 => 76D7 盗
+76DE 盞 => 7416 琖
+76E1 盡 => 5118 儘
+76E3 監 => 76D1 监
+76E4 盤 => 6D00 洀
+76E7 盧 => 5362 卢
+76EA 盪 => 6F52 潒
+76ED 盭 => 623B 戻
+76F3 盳 => 76F2 盲
+7718 眘 => 613C 愼
+771F 真 => 771E 眞
+773E 眾 => 4F17 众
+774F 睏 => 56F0 困
+775C 睜 => 7741 睁
+775E 睞 => 7750 睐
+7760 睠 => 7737 眷
+777E 睾 => 776A 睪
+777F 睿 => 53E1 叡
+7785 瞅 => 5062 偢
+7787 瞇 => 772F 眯
+7798 瞘 => 770D 眍
+779C 瞜 => 4056 䁖
+779E 瞞 => 7792 瞒
+77AC 瞬 => 779A 瞚
+77AD 瞭 => 4E86 了
+77B6 瞶 => 7786 瞆
+77BC 瞼 => 7751 睑
+77C7 矇 => 61DE 懞
+77CF 矏 => 77C8 矈
+77D3 矓 => 772C 眬
+77D9 矙 => 77B0 瞰
+77DA 矚 => 77A9 瞩
+77E9 矩 => 6998 榘
+77EF 矯 => 77EB 矫
+7814 研 => 63C5 揅
+782B 砫 => 67F1 柱
+7832 砲 => 70AE 炮
+7843 硃 => 6731 朱
+784F 硏 => 63C5 揅
+785C 硜 => 7841 硁
+7864 硤 => 7856 硖
+7868 硨 => 7817 砗
+786C 硬 => 5CFA 峺
+786E 确 => 5859 塙
+786F 硯 => 781A 砚
+7881 碁 => 68CA 棊
+7887 碇 => 6917 椗
+788E 碎 => 7815 砕
+7895 碕 => 57FC 埼
+789E 碞 => 55A6 喦
+78A2 碢 => 7823 砣
+78A8 碨 => 7859 硙
+78A9 碩 => 7855 硕
+78AA 碪 => 7827 砧
+78AD 碭 => 7800 砀
+78AF 碯 => 7459 瑙
+78B0 碰 => 63BD 掽
+78B1 碱 => 7877 硷
+78B8 碸 => 781C 砜
+78BA 確 => 5859 塙
+78BB 碻 => 5859 塙
+78BC 碼 => 7801 码
+78C6 磆 => 6ED1 滑
+78D1 磑 => 7859 硙
+78DA 磚 => 7816 砖
+78DF 磟 => 788C 碌
+78E0 磠 => 7875 硵
+78E3 磣 => 789C 碜
+78E5 磥 => 78CA 磊
+78E7 磧 => 789B 碛
+78EF 磯 => 77F6 矶
+78F7 磷 => 71D0 燐
+78FD 磽 => 7857 硗
+7904 礄 => 785A 硚
+7906 礆 => 7877 硷
+790E 礎 => 7840 础
+7919 礙 => 788D 碍
+791D 礝 => 789D 碝
+7926 礦 => 77FF 矿
+792A 礪 => 783A 砺
+792B 礫 => 783E 砾
+792C 礬 => 77FE 矾
+792D 礭 => 5859 塙
+792E 礮 => 70AE 炮
+7931 礱 => 783B 砻
+7938 礸 => 7924 礤
+7939 礹 => 55A6 喦
+7945 祅 => 46B6 䚶
+794C 祌 => 51B2 冲
+7961 祡 => 67F4 柴
+7963 祣 => 65C5 旅
+7969 祩 => 795D 祝
+7980 禀 => 5EE9 廩
+7984 禄 => 797F 祿
+798D 禍 => 7978 祸
+798E 禎 => 796F 祯
+7995 禕 => 794E 祎
+79A1 禡 => 7943 祃
+79A5 禥 => 797A 祺
+79A6 禦 => 5FA1 御
+79AA 禪 => 7985 禅
+79AE 禮 => 793C 礼
+79B0 禰 => 7962 祢
+79B1 禱 => 7977 祷
+79B4 禴 => 793F 礿
+79C1 私 => 53B6 厶
+79C3 秃 => 79BF 禿
+79CA 秊 => 5E74 年
+79D6 秖 => 7947 祇
+79D8 秘 => 7955 祕
+79F0 称 => 5041 偁
+7A00 稀 => 5E0C 希
+7A08 稈 => 79C6 秆
+7A0E 税 => 7A05 稅
+7A1C 稜 => 68F1 棱
+7A1F 稟 => 5EE9 廩
+7A2D 稭 => 79F8 秸
+7A2E 種 => 79CD 种
+7A31 稱 => 5041 偁
+7A3B 稻 => 7A32 稲
+7A3D 稽 => 4E69 乩
+7A3F 稿 => 7A3E 稾
+7A47 穇 => 415F 䅟
+7A49 穉 => 7A1A 稚
+7A4B 穋 => 7A11 稑
+7A4C 穌 => 7A23 稣
+7A4D 積 => 79EF 积
+7A50 穐 => 79CB 秋
+7A57 穗 => 7A42 穂
+7A5F 穟 => 7A42 穂
+7A60 穠 => 79FE 秾
+7A61 穡 => 7A51 穑
+7A62 穢 => 79FD 秽
+7A69 穩 => 7A33 稳
+7A6B 穫 => 7372 獲
+7A6D 穭 => 7A5E 穞
+7A74 穴 => 5CA4 岤
+7A75 穵 => 6316 挖
+7A7B 穻 => 5B87 宇
+7A97 窗 => 7A93 窓
+7AA8 窨 => 5837 堷
+7AA9 窩 => 7A9D 窝
+7AAA 窪 => 6D3C 洼
+7AAD 窭 => 5BE0 寠
+7AAE 窮 => 7A77 穷
+7AAF 窯 => 7A91 窑
+7AB0 窰 => 7A91 窑
+7AB5 窵 => 7A8E 窎
+7AB6 窶 => 5BE0 寠
+7ABA 窺 => 7AA5 窥
+7AC4 竄 => 7A9C 窜
+7AC5 竅 => 7A8D 窍
+7AC7 竇 => 7AA6 窦
+7AC8 竈 => 7076 灶
+7ACA 竊 => 7A83 窃
+7AD2 竒 => 5947 奇
+7ADD 竝 => 4E26 並
+7AE2 竢 => 4FDF 俟
+7AE4 竤 => 7AD1 竑
+7AEA 竪 => 7AD6 竖
+7AF6 競 => 7ADE 竞
+7AF8 竸 => 7ADE 竞
+7B01 笁 => 7AFA 竺
+7B06 笆 => 5DF4 巴
+7B11 笑 => 54B2 咲
+7B36 笶 => 77E2 矢
+7B3A 笺 => 724B 牋
+7B46 筆 => 7B14 笔
+7B47 筇 => 7B3B 笻
+7B4A 筊 => 7B05 笅
+7B4B 筋 => 65A4 斤
+7B4D 筍 => 7B0B 笋
+7B54 答 => 7563 畣
+7B5E 筞 => 7B56 策
+7B67 筧 => 7B15 笕
+7B69 筩 => 7B52 筒
+7B6D 筭 => 7958 祘
+7B70 筰 => 7B2E 笮
+7B74 筴 => 7B56 策
+7B7F 筿 => 7B71 筱
+7B87 箇 => 4E2A 个
+7B8B 箋 => 724B 牋
+7B8E 箎 => 7AFE 竾
+7B8F 箏 => 7B5D 筝
+7B97 算 => 7958 祘
+7B9A 箚 => 5273 剳
+7B9D 箝 => 62D1 拑
+7BA0 箠 => 68F0 棰
+7BA1 管 => 7B66 筦
+7BC9 築 => 7B51 筑
+7BCB 篋 => 7BA7 箧
+7BD4 篔 => 7B7C 筼
+7BDB 篛 => 7BAC 箬
+7BE0 篠 => 7B71 筱
+7BE4 篤 => 7B03 笃
+7BE9 篩 => 7B5B 筛
+7BEA 篪 => 7AFE 竾
+7BED 篭 => 7B3C 笼
+7BF1 篱 => 7B63 筣
+7BF2 篲 => 5F57 彗
+7BF3 篳 => 7B5A 筚
+7BF4 篴 => 7B1B 笛
+7C00 簀 => 7BA6 箦
+7C06 簆 => 7B58 筘
+7C08 簈 => 7BB3 箳
+7C0D 簍 => 7BD3 篓
+7C12 簒 => 7BE1 篡
+7C18 簘 => 7BAB 箫
+7C1E 簞 => 7BAA 箪
+7C21 簡 => 7B80 简
+7C23 簣 => 7BD1 篑
+7C2B 簫 => 7BAB 箫
+7C37 簷 => 6A90 檐
+7C39 簹 => 7B5C 筜
+7C3C 簼 => 7BDD 篝
+7C3D 簽 => 7B7E 签
+7C3E 簾 => 5E18 帘
+7C43 籃 => 7BEE 篮
+7C49 籉 => 53F0 台
+7C4C 籌 => 7B79 筹
+7C56 籖 => 7B7E 签
+7C58 籘 => 7C50 籐
+7C59 籙 => 7B93 箓
+7C5B 籛 => 7BEF 篯
+7C5C 籜 => 7BA8 箨
+7C5E 籞 => 7BFD 篽
+7C5F 籟 => 7C41 籁
+7C60 籠 => 7B3C 笼
+7C64 籤 => 7B7E 签
+7C69 籩 => 7B3E 笾
+7C6A 籪 => 7C16 簖
+7C6C 籬 => 7B63 筣
+7C6E 籮 => 7BA9 箩
+7C72 籲 => 5401 吁
+7C75 籵 => 756A 番
+7C7C 籼 => 79C8 秈
+7CA2 粢 => 79F6 秶
+7CB5 粵 => 7CA4 粤
+7CB9 粹 => 7C8B 粋
+7CBA 粺 => 7A17 稗
+7CC5 糅 => 7C88 粈
+7CC8 糈 => 7A30 稰
+7CC9 糉 => 7CBD 粽
+7CDC 糜 => 7222 爢
+7CDD 糝 => 7CC1 糁
+7CDE 糞 => 7CAA 粪
+7CE0 糠 => 7A45 穅
+7CE7 糧 => 7CAE 粮
+7CED 糭 => 7CBD 粽
+7CF0 糰 => 56E2 团
+7CF2 糲 => 7C9D 粝
+7CF4 糴 => 7C74 籴
+7CF5 糵 => 7CF1 糱
+7CF6 糶 => 7C9C 粜
+7CF8 糸 => 4E1D 丝
+7CF9 糹 => 4E1D 丝
+7CFB 系 => 4FC2 係
+7CFE 糾 => 7CFA 糺
+7D19 紙 => 5E0B 帋
+7D20 素 => 69A1 榡
+7D25 紥 => 5273 剳
+7D2C 紬 => 4337 䌷
+7D2E 紮 => 5273 剳
+7D43 絃 => 5F26 弦
+7D4F 絏 => 7D32 紲
+7D56 絖 => 7D4B 絋
+7D68 絨 => 6BE7 毧
+7D6B 絫 => 7D2F 累
+7D72 絲 => 4E1D 丝
+7D76 絶 => 7D55 絕
+7D7C 絼 => 7D16 紖
+7D8D 綍 => 7D3C 紼
+7D91 綑 => 6346 捆
+7D93 經 => 7D4C 経
+7DA2 綢 => 4337 䌷
+7DAE 綮 => 68E8 棨
+7DB5 綵 => 5F69 彩
+7DCA 緊 => 7D27 紧
+7DCC 緌 => 7D8F 綏
+7DCF 総 => 603B 总
+7DD1 緑 => 7DA0 綠
+7DD6 緖 => 7DD2 緒
+7DDA 線 => 7DAB 綫
+7E01 縁 => 7DE3 緣
+7E02 縂 => 603B 总
+7E06 縆 => 7DEA 緪
+7E0D 縍 => 5E2E 帮
+7E15 縕 => 7DFC 緼
+7E1A 縚 => 7D5B 絛
+7E23 縣 => 53BF 县
+7E27 縧 => 7D5B 絛
+7E2E 縮 => 644D 摍
+7E31 縱 => 7E26 縦
+7E34 縴 => 5B45 孅
+7E36 縶 => 7D77 絷
+7E3D 總 => 603B 总
+7E3E 績 => 52E3 勣
+7E41 繁 => 7DD0 緐
+7E43 繃 => 7DB3 綳
+7E4D 繍 => 7D89 綉
+7E56 繖 => 4F1E 伞
+7E61 繡 => 7D89 綉
+7E62 繢 => 7D75 絵
+7E66 繦 => 7E48 繈
+7E69 繩 => 7E04 縄
+7E6A 繪 => 7D75 絵
+7E6B 繫 => 4FC2 係
+7E7C 繼 => 7D99 継
+7E8A 纊 => 7D4B 絋
+7E8D 纍 => 7D2F 累
+7E8E 纎 => 5B45 孅
+7E92 纒 => 7E8F 纏
+7E94 纔 => 624D 才
+7E96 纖 => 5B45 孅
+7E98 纘 => 7E89 纉
+7E9F 纟 => 4E1D 丝
+7EA0 纠 => 7CFA 糺
+7EA1 纡 => 7D06 紆
+7EA2 红 => 7D05 紅
+7EA3 纣 => 7D02 紂
+7EA4 纤 => 5B45 孅
+7EA5 纥 => 7D07 紇
+7EA6 约 => 7D04 約
+7EA7 级 => 7D1A 級
+7EA8 纨 => 7D08 紈
+7EA9 纩 => 7D4B 絋
+7EAA 纪 => 7D00 紀
+7EAB 纫 => 7D09 紉
+7EAC 纬 => 7DEF 緯
+7EAD 纭 => 7D1C 紜
+7EAE 纮 => 7D18 紘
+7EAF 纯 => 7D14 純
+7EB0 纰 => 7D15 紕
+7EB1 纱 => 7D17 紗
+7EB2 纲 => 7DB1 綱
+7EB3 纳 => 7D0D 納
+7EB4 纴 => 7D1D 紝
+7EB5 纵 => 7E26 縦
+7EB6 纶 => 7DB8 綸
+7EB7 纷 => 7D1B 紛
+7EB8 纸 => 5E0B 帋
+7EB9 纹 => 7D0B 紋
+7EBA 纺 => 7D21 紡
+7EBB 纻 => 7D35 紵
+7EBC 纼 => 7D16 紖
+7EBD 纽 => 7D10 紐
+7EBE 纾 => 7D13 紓
+7EBF 线 => 7DAB 綫
+7EC0 绀 => 7D3A 紺
+7EC1 绁 => 7D32 紲
+7EC2 绂 => 7D31 紱
+7EC3 练 => 7DF4 練
+7EC4 组 => 7D44 組
+7EC5 绅 => 7D33 紳
+7EC6 细 => 7D30 細
+7EC7 织 => 7E54 織
+7EC8 终 => 7D42 終
+7EC9 绉 => 7E10 縐
+7ECA 绊 => 7D46 絆
+7ECB 绋 => 7D3C 紼
+7ECC 绌 => 7D40 絀
+7ECD 绍 => 7D39 紹
+7ECE 绎 => 7E79 繹
+7ECF 经 => 7D4C 経
+7ED0 绐 => 7D3F 紿
+7ED1 绑 => 7D81 綁
+7ED2 绒 => 6BE7 毧
+7ED3 结 => 7D50 結
+7ED4 绔 => 7D5D 絝
+7ED5 绕 => 7E5E 繞
+7ED6 绖 => 7D70 絰
+7ED7 绗 => 7D4E 絎
+7ED8 绘 => 7D75 絵
+7ED9 给 => 7D66 給
+7EDA 绚 => 7D62 絢
+7EDB 绛 => 7D73 絳
+7EDC 络 => 7D61 絡
+7EDD 绝 => 7D55 絕
+7EDE 绞 => 7D5E 絞
+7EDF 统 => 7D71 統
+7EE0 绠 => 7D86 綆
+7EE1 绡 => 7D83 綃
+7EE2 绢 => 7D79 絹
+7EE3 绣 => 7D89 綉
+7EE4 绤 => 7D8C 綌
+7EE5 绥 => 7D8F 綏
+7EE6 绦 => 7D5B 絛
+7EE7 继 => 7D99 継
+7EE8 绨 => 7D88 綈
+7EE9 绩 => 52E3 勣
+7EEA 绪 => 7DD2 緒
+7EEB 绫 => 7DBE 綾
+7EED 续 => 7E8C 續
+7EEE 绮 => 7DBA 綺
+7EEF 绯 => 7DCB 緋
+7EF0 绰 => 7DBD 綽
+7EF1 绱 => 7DD4 緔
+7EF2 绲 => 7DC4 緄
+7EF3 绳 => 7E04 縄
+7EF4 维 => 7DAD 維
+7EF5 绵 => 7DBF 綿
+7EF6 绶 => 7DAC 綬
+7EF7 绷 => 7DB3 綳
+7EF8 绸 => 4337 䌷
+7EF9 绹 => 7DAF 綯
+7EFA 绺 => 7DB9 綹
+7EFB 绻 => 7DA3 綣
+7EFC 综 => 7D9C 綜
+7EFD 绽 => 7DBB 綻
+7EFE 绾 => 7DB0 綰
+7EFF 绿 => 7DA0 綠
+7F00 缀 => 7DB4 綴
+7F01 缁 => 7DC7 緇
+7F02 缂 => 7DD9 緙
+7F03 缃 => 7DD7 緗
+7F04 缄 => 7DD8 緘
+7F05 缅 => 7DEC 緬
+7F06 缆 => 7E9C 纜
+7F07 缇 => 7DF9 緹
+7F08 缈 => 7DF2 緲
+7F09 缉 => 7DDD 緝
+7F0A 缊 => 7DFC 緼
+7F0B 缋 => 7D75 絵
+7F0C 缌 => 7DE6 緦
+7F0D 缍 => 7D9E 綞
+7F0E 缎 => 7DDE 緞
+7F0F 缏 => 7DF6 緶
+7F10 缐 => 7DAB 綫
+7F11 缑 => 7DF1 緱
+7F12 缒 => 7E0B 縋
+7F13 缓 => 7DE9 緩
+7F14 缔 => 7DE0 締
+7F15 缕 => 7E37 縷
+7F16 编 => 7DE8 編
+7F17 缗 => 7DE1 緡
+7F18 缘 => 7DE3 緣
+7F19 缙 => 7E09 縉
+7F1A 缚 => 7E1B 縛
+7F1B 缛 => 7E1F 縟
+7F1C 缜 => 7E1D 縝
+7F1D 缝 => 7E2B 縫
+7F1E 缞 => 7E17 縗
+7F1F 缟 => 7E1E 縞
+7F20 缠 => 7E8F 纏
+7F21 缡 => 7E2D 縭
+7F22 缢 => 7E0A 縊
+7F23 缣 => 7E11 縑
+7F24 缤 => 7E7D 繽
+7F25 缥 => 7E39 縹
+7F26 缦 => 7E35 縵
+7F27 缧 => 7E32 縲
+7F28 缨 => 7E93 纓
+7F29 缩 => 644D 摍
+7F2A 缪 => 7E46 繆
+7F2B 缫 => 7E45 繅
+7F2C 缬 => 7E88 纈
+7F2D 缭 => 7E5A 繚
+7F2E 缮 => 7E55 繕
+7F2F 缯 => 7E52 繒
+7F30 缰 => 7E6E 繮
+7F31 缱 => 7E7E 繾
+7F32 缲 => 7E70 繰
+7F33 缳 => 7E6F 繯
+7F34 缴 => 7E73 繳
+7F35 缵 => 7E89 纉
+7F37 缷 => 5378 卸
+7F38 缸 => 5808 堈
+7F3E 缾 => 74F6 瓶
+7F42 罂 => 7507 甇
+7F43 罃 => 7507 甇
+7F47 罇 => 58AB 墫
+7F48 罈 => 575B 坛
+7F4B 罋 => 74EE 瓮
+7F4C 罌 => 7507 甇
+7F4E 罎 => 575B 坛
+7F4F 罏 => 5786 垆
+7F51 网 => 7DB2 網
+7F63 罣 => 6302 挂
+7F66 罦 => 7F58 罘
+7F6E 置 => 5BD8 寘
+7F70 罰 => 7F5A 罚
+7F75 罵 => 508C 傌
+7F77 罷 => 7F62 罢
+7F78 罸 => 7F5A 罚
+7F7C 罼 => 6BD5 毕
+7F80 羀 => 7F76 罶
+7F82 羂 => 7F65 罥
+7F83 羃 => 51AA 冪
+7F85 羅 => 7F57 罗
+7F86 羆 => 7F74 罴
+7F87 羇 => 7F81 羁
+7F88 羈 => 7F81 羁
+7F8E 美 => 5ABA 媺
+7F9B 羛 => 4E49 义
+7F9D 羝 => 627A 扺
+7FA2 羢 => 6BE7 毧
+7FA4 群 => 7FA3 羣
+7FA5 羥 => 7F9F 羟
+7FA8 羨 => 7FA1 羡
+7FA9 義 => 4E49 义
+7FB9 羹 => 7FAE 羮
+7FC5 翅 => 7FC4 翄
+7FD2 習 => 4E60 习
+7FE0 翠 => 7FC6 翆
+7FE2 翢 => 7E9B 纛
+7FE8 翨 => 7FC4 翄
+7FEC 翬 => 7FDA 翚
+7FF5 翵 => 7FED 翭
+7FF6 翶 => 7FF1 翱
+7FF9 翹 => 7FD8 翘
+7FFA 翺 => 7FF1 翱
+7FFB 翻 => 7E59 繙
+7FFD 翽 => 7FD9 翙
+8000 耀 => 66DC 曜
+8002 耂 => 8001 老
+8003 考 => 6537 攷
+8008 耈 => 8007 耇
+8009 耉 => 8007 耇
+8011 耑 => 7AEF 端
+8017 耗 => 79CF 秏
+8018 耘 => 79D0 秐
+801D 耝 => 521E 刞
+801E 耞 => 67B7 枷
+8024 耤 => 501F 借
+802C 耬 => 8027 耧
+802E 耮 => 8022 耢
+8030 耰 => 6ACC 櫌
+803B 耻 => 6065 恥
+8056 聖 => 5723 圣
+805F 聟 => 5A7F 婿
+8068 聨 => 8054 联
+806A 聪 => 8061 聡
+806B 聫 => 8054 联
+806E 聮 => 8054 联
+806F 聯 => 8054 联
+8070 聰 => 8061 聡
+8072 聲 => 58F0 声
+8073 聳 => 8038 耸
+8074 聴 => 542C 听
+8075 聵 => 8069 聩
+8076 聶 => 8042 聂
+8077 職 => 804C 职
+8079 聹 => 804D 聍
+807C 聼 => 542C 听
+807D 聽 => 542C 听
+807E 聾 => 804B 聋
+8080 肀 => 807F 聿
+8083 肃 => 7C9B 粛
+8085 肅 => 7C9B 粛
+8086 肆 => 56DB 四
+8089 肉 => 5B8D 宍
+809B 肛 => 7598 疘
+80A3 肣 => 51FD 函
+80A6 肦 => 670C 朌
+80BB 肻 => 80AF 肯
+80C4 胄 => 5191 冑
+80C7 胇 => 80BA 肺
+80CA 胊 => 6710 朐
+80CC 背 => 505D 偝
+80D0 胐 => 670F 朏
+80D1 胑 => 80A2 肢
+80DC 胜 => 52DD 勝
+80E5 胥 => 7E03 縃
+80E7 胧 => 6727 朧
+80F3 胳 => 8090 肐
+80F6 胶 => 3B35 㬵
+80F8 胸 => 80F7 胷
+8101 脁 => 6713 朓
+8105 脅 => 80C1 胁
+8107 脇 => 80C1 胁
+8109 脉 => 8108 脈
+811B 脛 => 80EB 胫
+8123 脣 => 5507 唇
+8127 脧 => 6718 朘
+8129 脩 => 4FEE 修
+8131 脱 => 812B 脫
+8139 脹 => 80C0 胀
+8141 腁 => 80FC 胼
+8146 腆 => 500E 倎
+814E 腎 => 80BE 肾
+8156 腖 => 80E8 胨
+8160 腠 => 50B6 傶
+8161 腡 => 8136 脶
+8166 腦 => 8111 脑
+816B 腫 => 80BF 肿
+8173 腳 => 811A 脚
+8178 腸 => 80A0 肠
+8183 膃 => 817D 腽
+8186 膆 => 55C9 嗉
+818C 膌 => 7620 瘠
+8193 膓 => 80A0 肠
+8195 膕 => 8158 腘
+819A 膚 => 80A4 肤
+819E 膞 => 43DD 䏝
+81A0 膠 => 3B35 㬵
+81A7 膧 => 6723 朣
+81A9 膩 => 817B 腻
+81AC 膬 => 8106 脆
+81BB 膻 => 7FB6 羶
+81BD 膽 => 80C6 胆
+81BE 膾 => 810D 脍
+81BF 膿 => 8113 脓
+81C6 臆 => 808A 肊
+81C8 臈 => 814A 腊
+81C9 臉 => 8138 脸
+81CD 臍 => 8110 脐
+81CF 臏 => 8191 膑
+81D5 臕 => 8198 膘
+81D8 臘 => 814A 腊
+81D9 臙 => 80ED 胭
+81DA 臚 => 80EA 胪
+81DF 臟 => 810F 脏
+81E0 臠 => 8114 脔
+81E2 臢 => 81DC 臜
+81E5 臥 => 5367 卧
+81E8 臨 => 4E34 临
+81ED 臭 => 6BA0 殠
+81EE 臮 => 66A8 暨
+81F4 致 => 7DFB 緻
+81FA 臺 => 53F0 台
+8200 舀 => 62AD 抭
+8204 舄 => 8203 舃
+8207 與 => 4E0E 与
+8208 興 => 5174 兴
+8209 舉 => 4E3E 举
+820A 舊 => 65E7 旧
+820D 舍 => 6368 捨
+820E 舎 => 6368 捨
+8223 舣 => 6AA5 檥
+8229 舩 => 8221 舡
+822A 航 => 6841 桁
+8235 舵 => 67C1 柁
+8239 船 => 8221 舡
+824A 艊 => 8236 舶
+8250 艐 => 5C46 屆
+8259 艙 => 8231 舱
+8263 艣 => 6A10 樐
+8264 艤 => 6AA5 檥
+8266 艦 => 8230 舰
+826A 艪 => 6A10 樐
+826B 艫 => 823B 舻
+8271 艱 => 8270 艰
+8276 艶 => 8273 艳
+8277 艷 => 8273 艳
+827A 艺 => 517F 兿
+8282 节 => 7BC0 節
+8288 芈 => 7F8B 羋
+8292 芒 => 7B00 笀
+82BB 芻 => 520D 刍
+82C5 苅 => 5208 刈
+82CF 苏 => 56CC 囌
+82D5 苕 => 8280 芀
+82DF 苟 => 82B6 芶
+82E6 苦 => 7614 瘔
+82E7 苧 => 82CE 苎
+82F1 英 => 5040 偀
+8303 范 => 7BC4 範
+8306 茆 => 8305 茅
+8314 茔 => 584B 塋
+8315 茕 => 60F8 惸
+8327 茧 => 7E6D 繭
+832B 茫 => 6C52 汒
+8332 茲 => 5179 兹
+8345 荅 => 7563 畣
+8349 草 => 8278 艸
+834A 荊 => 8346 荆
+8354 荔 => 8318 茘
+8358 荘 => 5E84 庄
+8361 荡 => 6F52 潒
+8363 荣 => 6804 栄
+8365 荥 => 6ECE 滎
+8366 荦 => 7296 犖
+8367 荧 => 7192 熒
+836B 荫 => 5ED5 廕
+8373 荳 => 68AA 梪
+838A 莊 => 5E84 庄
+8395 莕 => 8347 荇
+8396 莖 => 830E 茎
+83A2 莢 => 835A 荚
+83A7 莧 => 82CB 苋
+83B7 获 => 7372 獲
+83B9 莹 => 7469 瑩
+83BD 莽 => 833B 茻
+83C7 菇 => 82FD 苽
+83CB 菋 => 82FF 苿
+83CF 菏 => 6E2E 渮
+83D3 菓 => 679C 果
+83D4 菔 => 535C 卜
+83EB 菫 => 5807 堇
+83EF 華 => 534E 华
+83F0 菰 => 82FD 苽
+83F4 菴 => 5EB5 庵
+83F7 菷 => 5E1A 帚
+83F8 菸 => 70DF 烟
+8405 萅 => 6625 春
+8407 萇 => 82CC 苌
+840A 萊 => 83B1 莱
+840E 萎 => 837D 荽
+8415 萕 => 8360 荠
+8425 营 => 55B6 営
+8426 萦 => 7E08 縈
+842C 萬 => 4E07 万
+8432 萲 => 8431 萱
+8434 萴 => 835D 荝
+8435 萵 => 83B4 莴
+8445 葅 => 83F9 菹
+8449 葉 => 53F6 叶
+844C 葌 => 83C5 菅
+8452 葒 => 836D 荭
+8457 著 => 7740 着
+8460 葠 => 53C1 叁
+8462 葢 => 76D6 盖
+8464 葤 => 836E 荮
+8466 葦 => 82C7 苇
+8467 葧 => 8378 荸
+846C 葬 => 585F 塟
+846E 葮 => 6934 椴
+846F 葯 => 836F 药
+8477 葷 => 8364 荤
+8493 蒓 => 83BC 莼
+8494 蒔 => 83B3 莳
+8499 蒙 => 61DE 懞
+849E 蒞 => 8385 莅
+84BC 蒼 => 82CD 苍
+84C0 蓀 => 836A 荪
+84C6 蓆 => 5E2D 席
+84CB 蓋 => 76D6 盖
+84D1 蓑 => 7C11 簑
+84E1 蓡 => 53C1 叁
+84EE 蓮 => 83B2 莲
+84EF 蓯 => 82C1 苁
+84F3 蓳 => 5807 堇
+84F4 蓴 => 83BC 莼
+84FA 蓺 => 517F 兿
+84FD 蓽 => 835C 荜
+8506 蔆 => 83F1 菱
+8507 蔇 => 66A8 暨
+8509 蔉 => 84D8 蓘
+850D 蔍 => 7C97 粗
+8512 蔒 => 8364 荤
+8514 蔔 => 535C 卜
+851E 蔞 => 848C 蒌
+8523 蔣 => 848B 蒋
+8525 蔥 => 8471 葱
+8526 蔦 => 8311 茑
+852D 蔭 => 5ED5 廕
+852E 蔮 => 5E3C 帼
+8531 蔱 => 699D 榝
+8534 蔴 => 6DCB 淋
+853F 蔿 => 848D 蒍
+8541 蕁 => 8368 荨
+8544 蕄 => 840C 萌
+8546 蕆 => 8487 蒇
+854A 蕊 => 6A64 橤
+854B 蕋 => 6A64 橤
+854E 蕎 => 835E 荞
+8552 蕒 => 836C 荬
+8553 蕓 => 82B8 芸
+8555 蕕 => 83B8 莸
+8558 蕘 => 835B 荛
+855A 蕚 => 843C 萼
+8562 蕢 => 8489 蒉
+8569 蕩 => 6F52 潒
+856A 蕪 => 829C 芜
+856B 蕫 => 8463 董
+856D 蕭 => 8427 萧
+8571 蕱 => 7A0D 稍
+8577 蕷 => 84E3 蓣
+8580 薀 => 8570 蕰
+8588 薈 => 835F 荟
+8589 薉 => 79FD 秽
+858A 薊 => 84DF 蓟
+858C 薌 => 8297 芗
+858E 薎 => 8511 蔑
+8591 薑 => 59DC 姜
+8594 薔 => 8537 蔷
+8598 薘 => 8359 荙
+8599 薙 => 5243 剃
+859E 薞 => 8575 蕵
+859F 薟 => 83B6 莶
+85A6 薦 => 8350 荐
+85A9 薩 => 8428 萨
+85AC 薬 => 836F 药
+85AE 薮 => 7C54 籔
+85B0 薰 => 85AB 薫
+85BA 薺 => 8360 荠
+85C2 藂 => 4E1B 丛
+85C9 藉 => 501F 借
+85CD 藍 => 84DD 蓝
+85CE 藎 => 8369 荩
+85CF 藏 => 8535 蔵
+85D5 藕 => 8545 蕅
+85DC 藜 => 853E 蔾
+85DD 藝 => 517F 兿
+85E1 藡 => 837B 荻
+85E4 藤 => 7C50 籐
+85E5 藥 => 836F 药
+85E9 藩 => 7C53 籓
+85EA 藪 => 7C54 籔
+85ED 藭 => 44D6 䓖
+85F4 藴 => 8574 蕴
+85F6 藶 => 82C8 苈
+85F7 藷 => 85AF 薯
+85F8 藸 => 854F 蕏
+85F9 藹 => 853C 蔼
+85FA 藺 => 853A 蔺
+85FD 藽 => 6987 榇
+8600 蘀 => 841A 萚
+8602 蘂 => 6A64 橤
+8604 蘄 => 8572 蕲
+8606 蘆 => 82A6 芦
+8607 蘇 => 56CC 囌
+860A 蘊 => 8574 蕴
+860B 蘋 => 82F9 苹
+8613 蘓 => 56CC 囌
+8614 蘔 => 860F 蘏
+8616 蘖 => 6AF1 櫱
+8617 蘗 => 6A97 檗
+861A 蘚 => 85D3 藓
+861C 蘜 => 83CA 菊
+861E 蘞 => 8539 蔹
+8622 蘢 => 830F 茏
+8624 蘤 => 82B1 花
+862D 蘭 => 5170 兰
+862F 蘯 => 6F52 潒
+863A 蘺 => 84E0 蓠
+863D 蘽 => 6AD0 櫐
+863F 蘿 => 841D 萝
+8641 虁 => 8637 蘷
+8651 虑 => 616E 慮
+8655 處 => 5904 处
+8656 虖 => 547C 呼
+865B 虛 => 865A 虚
+865C 虜 => 864F 虏
+865F 號 => 53F7 号
+8663 虣 => 66B4 暴
+8667 虧 => 4E8F 亏
+866F 虯 => 866C 虬
+867A 虺 => 862C 蘬
+868C 蚌 => 7865 硥
+8698 蚘 => 75D0 痐
+86B3 蚳 => 8694 蚔
+86CC 蛌 => 86C4 蛄
+86D4 蛔 => 75D0 痐
+86EC 蛬 => 86E9 蛩
+86FA 蛺 => 86F1 蛱
+8704 蜄 => 8703 蜃
+8706 蜆 => 86AC 蚬
+8712 蜒 => 8711 蜑
+8715 蜕 => 86FB 蛻
+8716 蜖 => 75D0 痐
+8717 蜗 => 7611 瘑
+8719 蜙 => 86A3 蚣
+8739 蜹 => 868B 蚋
+873A 蜺 => 86EA 蛪
+8755 蝕 => 8680 蚀
+875F 蝟 => 732C 猬
+8766 蝦 => 867E 虾
+8768 蝨 => 8671 虱
+876F 蝯 => 733F 猿
+8773 蝳 => 73B3 玳
+8776 蝶 => 8728 蜨
+8778 蝸 => 7611 瘑
+8782 螂 => 870B 蜋
+8784 螄 => 86F3 蛳
+8798 螘 => 8681 蚁
+879E 螞 => 8682 蚂
+87A1 螡 => 868A 蚊
+87A2 螢 => 8424 萤
+87B3 螳 => 8797 螗
+87BB 螻 => 877C 蝼
+87BF 螿 => 8780 螀
+87C1 蟁 => 868A 蚊
+87C4 蟄 => 86F0 蛰
+87C7 蟇 => 87C6 蟆
+87C8 蟈 => 8748 蝈
+87CE 蟎 => 87A8 螨
+87E3 蟣 => 866E 虮
+87EC 蟬 => 8749 蝉
+87EF 蟯 => 86F2 蛲
+87F2 蟲 => 866B 虫
+87F6 蟶 => 86CF 蛏
+87FB 蟻 => 8681 蚁
+8801 蠁 => 8683 蚃
+8805 蠅 => 8747 蝇
+8806 蠆 => 867F 虿
+880D 蠍 => 874E 蝎
+880E 蠎 => 87D2 蟒
+880F 蠏 => 87F9 蟹
+8810 蠐 => 86F4 蛴
+8811 蠑 => 877E 蝾
+8814 蠔 => 869D 蚝
+8815 蠕 => 8761 蝡
+881F 蠟 => 8721 蜡
+8822 蠢 => 60F7 惷
+8823 蠣 => 86CE 蛎
+8828 蠨 => 87CF 蟏
+8829 蠩 => 876B 蝫
+882B 蠫 => 5299 劙
+8831 蠱 => 86CA 蛊
+8836 蠶 => 8695 蚕
+8839 蠹 => 8827 蠧
+883B 蠻 => 86EE 蛮
+883C 蠼 => 8837 蠷
+8844 衄 => 8842 衂
+8846 衆 => 4F17 众
+884A 衊 => 8511 蔑
+8853 術 => 672E 朮
+8854 衔 => 5563 啣
+8855 衕 => 4EDD 仝
+8856 衖 => 5F04 弄
+885A 衚 => 80E1 胡
+885B 衛 => 536B 卫
+885D 衝 => 51B2 冲
+885E 衞 => 536B 卫
+8869 衩 => 7D01 紁
+886E 衮 => 7DF7 緷
+8876 衶 => 51B2 冲
+8879 衹 => 53EA 只
+8885 袅 => 5ACB 嫋
+8888 袈 => 6BE0 毠
+888D 袍 => 888C 袌
+8898 袘 => 886A 衪
+889E 袞 => 7DF7 緷
+889F 袟 => 5E19 帙
+88CA 裊 => 5ACB 嫋
+88CC 裌 => 5939 夹
+88D5 裕 => 88AC 袬
+88D9 裙 => 5E2C 帬
+88DC 補 => 8865 补
+88DD 裝 => 88C5 装
+88E0 裠 => 5E2C 帬
+88E1 裡 => 88CF 裏
+88E4 裤 => 88B4 袴
+88F5 裵 => 88F4 裴
+88F8 裸 => 81DD 臝
+88FD 製 => 5236 制
+8900 褀 => 5E3A 帺
+8901 褁 => 88F9 裹
+8907 複 => 590D 复
+890A 褊 => 60FC 惼
+890C 褌 => 88C8 裈
+890E 褎 => 8896 袖
+8914 褔 => 526F 副
+8918 褘 => 8886 袆
+891E 褞 => 7DFC 緼
+8922 褢 => 6000 怀
+892D 褭 => 5ACB 嫋
+8931 褱 => 6000 怀
+8932 褲 => 88B4 袴
+8933 褳 => 88E2 裢
+8934 褴 => 7E7F 繿
+8935 褵 => 7E2D 縭
+8938 褸 => 891B 褛
+893B 褻 => 4EB5 亵
+8943 襃 => 8912 褒
+8947 襇 => 88E5 裥
+8949 襉 => 88E5 裥
+894F 襏 => 88AF 袯
+8955 襕 => 5E71 幱
+8956 襖 => 8884 袄
+895D 襝 => 88E3 裣
+8960 襠 => 88C6 裆
+8962 襢 => 8892 袒
+8964 襤 => 7E7F 繿
+896A 襪 => 889C 袜
+896C 襬 => 6446 摆
+896F 襯 => 886C 衬
+8972 襲 => 88AD 袭
+8974 襴 => 5E71 幱
+8980 覀 => 897E 襾
+8986 覆 => 590D 复
+8988 覈 => 6838 核
+8989 覉 => 7F81 羁
+898A 覊 => 7F81 羁
+898F 規 => 691D 椝
+8995 覕 => 77A5 瞥
+899A 覚 => 658D 斍
+899C 覜 => 773A 眺
+899D 覝 => 4EB7 亷
+89AA 親 => 4EB2 亲
+89B3 観 => 898C 覌
+89B8 覸 => 89B5 覵
+89BA 覺 => 658D 斍
+89BD 覽 => 89A7 覧
+89C0 觀 => 898C 覌
+89C1 见 => 898B 見
+89C2 观 => 898C 覌
+89C3 觃 => 898E 覎
+89C4 规 => 691D 椝
+89C5 觅 => 8993 覓
+89C6 视 => 8996 視
+89C7 觇 => 8998 覘
+89C8 览 => 89A7 覧
+89C9 觉 => 658D 斍
+89CA 觊 => 89AC 覬
+89CB 觋 => 89A1 覡
+89CC 觌 => 89BF 覿
+89CD 觍 => 89A5 覥
+89CE 觎 => 89A6 覦
+89CF 觏 => 89AF 覯
+89D0 觐 => 89B2 覲
+89D1 觑 => 89B7 覷
+89D4 觔 => 65A4 斤
+89D5 觕 => 7C97 粗
+89D9 觙 => 4F0B 伋
+89DD 觝 => 627A 扺
+89E7 觧 => 89E3 解
+89F2 觲 => 89EA 觪
+89F4 觴 => 89DE 觞
+89F6 觶 => 89EF 觯
+89F8 觸 => 89E6 触
+89FE 觾 => 71D5 燕
+8A01 訁 => 8A00 言
+8A17 託 => 6258 托
+8A1E 訞 => 46B6 䚶
+8A22 訢 => 4723 䜣
+8A27 訧 => 5C24 尤
+8A29 訩 => 54C5 哅
+8A34 訴 => 612C 愬
+8A36 訶 => 5475 呵
+8A3B 註 => 6CE8 注
+8A3F 訿 => 8A3E 訾
+8A46 詆 => 5467 呧
+8A60 詠 => 548F 咏
+8A67 詧 => 5BDF 察
+8A6B 詫 => 4F98 侘
+8A7B 詻 => 54AF 咯
+8A7D 詽 => 8A2E 訮
+8A87 誇 => 5938 夸
+8A8B 誋 => 5FCC 忌
+8A8C 誌 => 5FD7 志
+8A92 誒 => 6B38 欸
+8A96 誖 => 6096 悖
+8AA4 誤 => 609E 悞
+8AAC 説 => 8AAA 說
+8ABE 誾 => 8A1A 訚
+8AC4 諄 => 8A30 訰
+8AC5 諅 => 5FCC 忌
+8AD9 諙 => 8A71 話
+8AE0 諠 => 5405 吅
+8AEB 諫 => 8ACC 諌
+8AEE 諮 => 54A8 咨
+8AF5 諵 => 5583 喃
+8B04 謄 => 8A8A 誊
+8B15 謕 => 557C 啼
+8B1A 謚 => 8AE1 諡
+8B21 謡 => 8B20 謠
+8B2A 謪 => 5546 商
+8B2F 謯 => 8A5B 詛
+8B36 謶 => 5EB6 庶
+8B3C 謼 => 547C 呼
+8B41 譁 => 54D7 哗
+8B46 譆 => 563B 嘻
+8B48 譈 => 619D 憝
+8B49 證 => 8A3C 証
+8B4C 譌 => 8A1B 訛
+8B4D 譍 => 5E94 应
+8B4E 譎 => 564A 噊
+8B50 譐 => 5642 噂
+8B51 譑 => 6322 挢
+8B54 譔 => 64B0 撰
+8B55 譕 => 8B28 謨
+8B5C 譜 => 8AE9 諩
+8B5F 譟 => 566A 噪
+8B6A 譪 => 853C 蔼
+8B6D 譭 => 6BC0 毀
+8B71 譱 => 5584 善
+8B77 護 => 62A4 护
+8B79 譹 => 53F7 号
+8B7B 譻 => 5624 嘤
+8B7D 譽 => 8A89 誉
+8B7E 譾 => 8B2D 謭
+8B7F 譿 => 6167 慧
+8B8A 變 => 53D8 变
+8B8B 讋 => 8A5F 詟
+8B8C 讌 => 4729 䜩
+8B8E 讎 => 4EC7 仇
+8B8F 讏 => 8B86 讆
+8B90 讐 => 4EC7 仇
+8B95 讕 => 8B4B 譋
+8B99 讙 => 61FD 懽
+8B9A 讚 => 8B83 讃
+8BA0 讠 => 8A00 言
+8BA1 计 => 8A08 計
+8BA2 订 => 8A02 訂
+8BA3 讣 => 8A03 訃
+8BA4 认 => 8A8D 認
+8BA5 讥 => 8B4F 譏
+8BA6 讦 => 8A10 訐
+8BA7 讧 => 8A0C 訌
+8BA8 讨 => 8A0E 討
+8BA9 让 => 8B93 讓
+8BAA 讪 => 8A15 訕
+8BAB 讫 => 8A16 訖
+8BAC 讬 => 6258 托
+8BAD 训 => 8A13 訓
+8BAE 议 => 8B70 議
+8BAF 讯 => 8A0A 訊
+8BB0 记 => 8A18 記
+8BB1 讱 => 8A12 訒
+8BB2 讲 => 8B1B 講
+8BB3 讳 => 8AF1 諱
+8BB4 讴 => 8B33 謳
+8BB5 讵 => 8A4E 詎
+8BB6 讶 => 8A1D 訝
+8BB7 讷 => 8A25 訥
+8BB8 许 => 8A31 許
+8BB9 讹 => 8A1B 訛
+8BBA 论 => 8AD6 論
+8BBB 讻 => 54C5 哅
+8BBC 讼 => 8A1F 訟
+8BBD 讽 => 8AF7 諷
+8BBE 设 => 8A2D 設
+8BBF 访 => 8A2A 訪
+8BC0 诀 => 8A23 訣
+8BC1 证 => 8A3C 証
+8BC2 诂 => 8A41 詁
+8BC3 诃 => 5475 呵
+8BC4 评 => 8A55 評
+8BC5 诅 => 8A5B 詛
+8BC6 识 => 8B58 識
+8BC7 诇 => 8A57 詗
+8BC8 诈 => 8A50 詐
+8BC9 诉 => 612C 愬
+8BCA 诊 => 8A3A 診
+8BCB 诋 => 5467 呧
+8BCC 诌 => 8B05 謅
+8BCD 词 => 8A5E 詞
+8BCE 诎 => 8A58 詘
+8BCF 诏 => 8A54 詔
+8BD0 诐 => 8A56 詖
+8BD1 译 => 8B6F 譯
+8BD2 诒 => 8A52 詒
+8BD3 诓 => 8A86 誆
+8BD4 诔 => 8A84 誄
+8BD5 试 => 8A66 試
+8BD6 诖 => 8A7F 詿
+8BD7 诗 => 8A69 詩
+8BD8 诘 => 8A70 詰
+8BD9 诙 => 8A7C 詼
+8BDA 诚 => 8AA0 誠
+8BDB 诛 => 8A85 誅
+8BDC 诜 => 8A75 詵
+8BDD 话 => 8A71 話
+8BDE 诞 => 8A95 誕
+8BDF 诟 => 8A6C 詬
+8BE0 诠 => 8A6E 詮
+8BE1 诡 => 8A6D 詭
+8BE2 询 => 8A62 詢
+8BE3 诣 => 8A63 詣
+8BE4 诤 => 8ACD 諍
+8BE5 该 => 8A72 該
+8BE6 详 => 8A73 詳
+8BE7 诧 => 4F98 侘
+8BE8 诨 => 8AE2 諢
+8BE9 诩 => 8A61 詡
+8BEA 诪 => 8B78 譸
+8BEB 诫 => 8AA1 誡
+8BEC 诬 => 8AA3 誣
+8BED 语 => 8A9E 語
+8BEE 诮 => 8A9A 誚
+8BEF 误 => 609E 悞
+8BF0 诰 => 8AA5 誥
+8BF1 诱 => 8A98 誘
+8BF2 诲 => 8AA8 誨
+8BF3 诳 => 8A91 誑
+8BF4 说 => 8AAA 說
+8BF5 诵 => 8AA6 誦
+8BF6 诶 => 6B38 欸
+8BF7 请 => 8ACB 請
+8BF8 诸 => 8AF8 諸
+8BF9 诹 => 8ACF 諏
+8BFA 诺 => 8AFE 諾
+8BFB 读 => 8B80 讀
+8BFC 诼 => 8AD1 諑
+8BFD 诽 => 8AB9 誹
+8BFE 课 => 8AB2 課
+8BFF 诿 => 8AC9 諉
+8C00 谀 => 8ADB 諛
+8C01 谁 => 8AB0 誰
+8C02 谂 => 8AD7 諗
+8C03 调 => 8ABF 調
+8C04 谄 => 8AC2 諂
+8C05 谅 => 8AD2 諒
+8C06 谆 => 8A30 訰
+8C07 谇 => 8AB6 誶
+8C08 谈 => 8AC7 談
+8C09 谉 => 8B85 讅
+8C0A 谊 => 8ABC 誼
+8C0B 谋 => 8B00 謀
+8C0C 谌 => 8AF6 諶
+8C0D 谍 => 8ADC 諜
+8C0E 谎 => 8B0A 謊
+8C0F 谏 => 8ACC 諌
+8C10 谐 => 8AE7 諧
+8C11 谑 => 8B14 謔
+8C12 谒 => 8B01 謁
+8C13 谓 => 8B02 謂
+8C14 谔 => 8AE4 諤
+8C15 谕 => 8AED 諭
+8C16 谖 => 8AFC 諼
+8C17 谗 => 8B92 讒
+8C18 谘 => 54A8 咨
+8C19 谙 => 8AF3 諳
+8C1A 谚 => 8AFA 諺
+8C1B 谛 => 8AE6 諦
+8C1C 谜 => 8B0E 謎
+8C1D 谝 => 8ADE 諞
+8C1E 谞 => 8ADD 諝
+8C1F 谟 => 8B28 謨
+8C20 谠 => 8B9C 讜
+8C21 谡 => 8B16 謖
+8C22 谢 => 8B1D 謝
+8C23 谣 => 8B20 謠
+8C24 谤 => 8B17 謗
+8C25 谥 => 8AE1 諡
+8C26 谦 => 8B19 謙
+8C27 谧 => 8B10 謐
+8C28 谨 => 8B39 謹
+8C29 谩 => 8B3E 謾
+8C2A 谪 => 8B2B 謫
+8C2B 谫 => 8B2D 謭
+8C2C 谬 => 8B2C 謬
+8C2D 谭 => 8B5A 譚
+8C2E 谮 => 8B56 譖
+8C2F 谯 => 8B59 譙
+8C30 谰 => 8B4B 譋
+8C31 谱 => 8AE9 諩
+8C32 谲 => 564A 噊
+8C33 谳 => 8B9E 讞
+8C34 谴 => 8B74 譴
+8C35 谵 => 8B6B 譫
+8C36 谶 => 8B96 讖
+8C37 谷 => 7A40 穀
+8C3F 谿 => 6EAA 溪
+8C46 豆 => 68AA 梪
+8C48 豈 => 5C82 岂
+8C4A 豊 => 4E30 丰
+8C4B 豋 => 767B 登
+8C4E 豎 => 7AD6 竖
+8C50 豐 => 4E30 丰
+8C54 豔 => 8273 艳
+8C57 豗 => 62FB 拻
+8C61 象 => 50CF 像
+8C63 豣 => 8C5C 豜
+8C6C 豬 => 732A 猪
+8C76 豶 => 8C6E 豮
+8C7A 豺 => 72B2 犲
+8C89 貉 => 72E2 狢
+8C8C 貌 => 7683 皃
+8C8D 貍 => 72F8 狸
+8C93 貓 => 732B 猫
+8C9C 貜 => 7383 玃
+8CAE 貮 => 4E8C 二
+8CB3 貳 => 4E8C 二
+8CB7 買 => 4E70 买
+8CC9 賉 => 5379 卹
+8CCA 賊 => 621D 戝
+8CCC 賌 => 8CC5 賅
+8CD3 賓 => 5BBE 宾
+8CD4 賔 => 5BBE 宾
+8CD7 賗 => 4E32 串
+8CDB 賛 => 8B83 讃
+8CDD 賝 => 741B 琛
+8CE3 賣 => 5356 卖
+8CEA 質 => 8CAD 貭
+8CEC 賬 => 5E10 帐
+8CF8 賸 => 5269 剩
+8D0A 贊 => 8B83 讃
+8D10 贐 => 8CEE 賮
+8D17 贗 => 8D0B 贋
+8D1B 贛 => 7068 灨
+8D1C 贜 => 8D13 贓
+8D1D 贝 => 8C9D 貝
+8D1E 贞 => 8C9E 貞
+8D1F 负 => 8CA0 負
+8D20 贠 => 8C9F 貟
+8D21 贡 => 8CA2 貢
+8D22 财 => 8CA1 財
+8D23 责 => 8CAC 責
+8D24 贤 => 8CE2 賢
+8D25 败 => 6557 敗
+8D26 账 => 5E10 帐
+8D27 货 => 8CA8 貨
+8D28 质 => 8CAD 貭
+8D29 贩 => 8CA9 販
+8D2A 贪 => 8CAA 貪
+8D2B 贫 => 8CA7 貧
+8D2C 贬 => 8CB6 貶
+8D2D 购 => 8CFC 購
+8D2E 贮 => 8CAF 貯
+8D2F 贯 => 8CAB 貫
+8D30 贰 => 4E8C 二
+8D31 贱 => 8CE4 賤
+8D32 贲 => 8CC1 賁
+8D33 贳 => 8CB0 貰
+8D34 贴 => 8CBC 貼
+8D35 贵 => 8CB4 貴
+8D36 贶 => 8CBA 貺
+8D37 贷 => 8CB8 貸
+8D38 贸 => 8CBF 貿
+8D39 费 => 8CBB 費
+8D3A 贺 => 8CC0 賀
+8D3B 贻 => 8CBD 貽
+8D3C 贼 => 621D 戝
+8D3D 贽 => 8D04 贄
+8D3E 贾 => 8CC8 賈
+8D3F 贿 => 8CC4 賄
+8D40 赀 => 8CB2 貲
+8D41 赁 => 8CC3 賃
+8D42 赂 => 8CC2 賂
+8D43 赃 => 8D13 贓
+8D44 资 => 8CC7 資
+8D45 赅 => 8CC5 賅
+8D46 赆 => 8CEE 賮
+8D47 赇 => 8CD5 賕
+8D48 赈 => 8CD1 賑
+8D49 赉 => 8CDA 賚
+8D4A 赊 => 8CD2 賒
+8D4B 赋 => 8CE6 賦
+8D4C 赌 => 8CED 賭
+8D4D 赍 => 8CEB 賫
+8D4E 赎 => 8D16 贖
+8D4F 赏 => 8CDE 賞
+8D50 赐 => 8CDC 賜
+8D51 赑 => 8D14 贔
+8D52 赒 => 8CD9 賙
+8D53 赓 => 8CE1 賡
+8D54 赔 => 8CE0 賠
+8D55 赕 => 8CE7 賧
+8D56 赖 => 8CF4 賴
+8D57 赗 => 8CF5 賵
+8D58 赘 => 8D05 贅
+8D59 赙 => 8CFB 賻
+8D5A 赚 => 8CFA 賺
+8D5B 赛 => 8CFD 賽
+8D5C 赜 => 8CFE 賾
+8D5D 赝 => 8D0B 贋
+8D5E 赞 => 8B83 讃
+8D5F 赟 => 8D07 贇
+8D60 赠 => 8D08 贈
+8D61 赡 => 8D0D 贍
+8D62 赢 => 8D0F 贏
+8D63 赣 => 7068 灨
+8D6A 赪 => 7AC0 竀
+8D6C 赬 => 7AC0 竀
+8D71 赱 => 8D70 走
+8D82 趂 => 8D81 趁
+8D86 趆 => 8D7F 赿
+8D8D 趍 => 8D8B 趋
+8D95 趕 => 8D76 赶
+8D99 趙 => 8D75 赵
+8DA8 趨 => 8D8B 趋
+8DB2 趲 => 8DB1 趱
+8DF3 跳 => 8D92 趒
+8DFA 跺 => 8DE5 跥
+8DFC 跼 => 4FB7 侷
+8E08 踈 => 758F 疏
+8E10 踐 => 8DF5 践
+8E19 踙 => 8E02 踂
+8E21 踡 => 8737 蜷
+8E23 踣 => 6B95 殕
+8E29 踩 => 8DF4 跴
+8E2A 踪 => 8E28 踨
+8E2B 踫 => 63BD 掽
+8E34 踴 => 8E0A 踊
+8E42 蹂 => 79B8 禸
+8E4C 蹌 => 8DC4 跄
+8E54 蹔 => 6682 暂
+8E55 蹕 => 8DF8 跸
+8E56 蹖 => 6869 桩
+8E5A 蹚 => 8D9F 趟
+8E5E 蹞 => 8DEC 跬
+8E5F 蹟 => 8DE1 跡
+8E60 蹠 => 8DD6 跖
+8E63 蹣 => 8E52 蹒
+8E64 蹤 => 8E28 踨
+8E67 蹧 => 7CDF 糟
+8E6F 蹯 => 756A 番
+8E72 蹲 => 58AB 墫
+8E7A 蹺 => 8DF7 跷
+8E7B 蹻 => 8DF7 跷
+8E81 躁 => 8DAE 趮
+8E82 躂 => 8DF6 跶
+8E89 躉 => 8DB8 趸
+8E8A 躊 => 8E0C 踌
+8E8B 躋 => 8DFB 跻
+8E8D 躍 => 8DC3 跃
+8E91 躑 => 8E2F 踯
+8E92 躒 => 8DDE 跞
+8E93 躓 => 8E2C 踬
+8E95 躕 => 8E70 蹰
+8E9A 躚 => 8DF9 跹
+8E9B 躛 => 8E97 躗
+8EA1 躡 => 8E51 蹑
+8EA5 躥 => 8E7F 蹿
+8EA6 躦 => 8E9C 躜
+8EAA 躪 => 8E8F 躏
+8EAD 躭 => 803D 耽
+8EB0 躰 => 4F53 体
+8EB2 躲 => 8EB1 躱
+8EC0 軀 => 8EAF 躯
+8EC6 軆 => 4F53 体
+8ECD 軍 => 519B 军
+8EDB 軛 => 6799 枙
+8EE0 軠 => 8ED6 軖
+8EF2 軲 => 6BC2 毂
+8EF6 軶 => 6799 枙
+8F13 輓 => 633D 挽
+8F15 輕 => 8EFD 軽
+8F27 輧 => 8EFF 軿
+8F3F 輿 => 8206 舆
+8F40 轀 => 8F3C 輼
+8F42 轂 => 6BC2 毂
+8F4F 轏 => 6808 栈
+8F5D 轝 => 8206 舆
+8F5E 轞 => 69DB 槛
+8F66 车 => 8ECA 車
+8F67 轧 => 8ECB 軋
+8F68 轨 => 8ECC 軌
+8F69 轩 => 8ED2 軒
+8F6A 轪 => 8ED1 軑
+8F6B 轫 => 8ED4 軔
+8F6C 转 => 8F49 轉
+8F6D 轭 => 6799 枙
+8F6E 轮 => 8F2A 輪
+8F6F 软 => 8EDF 軟
+8F70 轰 => 8F5F 轟
+8F71 轱 => 6BC2 毂
+8F72 轲 => 8EFB 軻
+8F73 轳 => 8F64 轤
+8F74 轴 => 8EF8 軸
+8F75 轵 => 8EF9 軹
+8F76 轶 => 8EFC 軼
+8F77 轷 => 8EE4 軤
+8F78 轸 => 8EEB 軫
+8F79 轹 => 8F62 轢
+8F7A 轺 => 8EFA 軺
+8F7B 轻 => 8EFD 軽
+8F7C 轼 => 8EFE 軾
+8F7D 载 => 8F09 載
+8F7E 轾 => 8F0A 輊
+8F7F 轿 => 8F4E 轎
+8F80 辀 => 8F08 輈
+8F81 辁 => 8F07 輇
+8F82 辂 => 8F05 輅
+8F83 较 => 8F03 較
+8F84 辄 => 8F12 輒
+8F85 辅 => 8F14 輔
+8F86 辆 => 8F1B 輛
+8F87 辇 => 8F26 輦
+8F88 辈 => 8F29 輩
+8F89 辉 => 8F1D 輝
+8F8A 辊 => 8F25 輥
+8F8B 辋 => 8F1E 輞
+8F8C 辌 => 8F2C 輬
+8F8D 辍 => 8F1F 輟
+8F8E 辎 => 8F1C 輜
+8F8F 辏 => 8F33 輳
+8F90 辐 => 8F3B 輻
+8F91 辑 => 8F2F 輯
+8F92 辒 => 8F3C 輼
+8F93 输 => 8F38 輸
+8F94 辔 => 8F61 轡
+8F95 辕 => 8F45 轅
+8F96 辖 => 8F44 轄
+8F97 辗 => 8F3E 輾
+8F98 辘 => 8F46 轆
+8F99 辙 => 8F4D 轍
+8F9A 辚 => 8F54 轔
+8FA0 辠 => 7F6A 罪
+8FA3 辣 => 8FA2 辢
+8FA6 辦 => 529E 办
+8FA7 辧 => 529E 办
+8FA8 辨 => 529E 办
+8FAD 辭 => 8F9E 辞
+8FAE 辮 => 8FAB 辫
+8FAF 辯 => 8FA9 辩
+8FB2 農 => 519C 农
+8FD6 迖 => 8FBE 达
+8FE1 迡 => 8FDF 迟
+8FE4 迤 => 8FC6 迆
+8FEA 迪 => 5EF8 廸
+8FEC 迬 => 5F80 往
+8FED 迭 => 53E0 叠
+8FF3 迳 => 5F84 径
+8FF4 迴 => 56D8 囘
+8FF9 迹 => 8DE1 跡
+8FFA 迺 => 4E43 乃
+8FFB 迻 => 79FB 移
+9003 逃 => 8FEF 迯
+9008 逈 => 8FE5 迥
+900A 逊 => 613B 愻
+900C 逌 => 6538 攸
+9013 逓 => 9012 递
+9015 逕 => 5F84 径
+9019 這 => 8FD9 这
+9023 連 => 8FDE 连
+9025 逥 => 56D8 囘
+9029 逩 => 5954 奔
+902E 逮 => 8FE8 迨
+9030 逰 => 6E38 游
+9031 週 => 5468 周
+9032 進 => 8FDB 进
+9038 逸 => 52AE 劮
+903A 逺 => 8FDC 远
+903E 逾 => 8E30 踰
+9045 遅 => 8FDF 迟
+9049 遉 => 4FA6 侦
+904A 遊 => 6E38 游
+904B 運 => 8FD0 运
+904D 遍 => 5FA7 徧
+904E 過 => 8FC7 过
+9051 遑 => 5FA8 徨
+9054 達 => 8FBE 达
+9055 違 => 8FDD 违
+905C 遜 => 613B 愻
+905E 遞 => 9012 递
+905F 遟 => 8FDF 迟
+9060 遠 => 8FDC 远
+9061 遡 => 6CDD 泝
+9065 遥 => 9059 遙
+9067 遧 => 7AE0 章
+9069 適 => 9002 适
+906F 遯 => 9041 遁
+9072 遲 => 8FDF 迟
+9073 遳 => 77EC 矬
+9076 遶 => 7E5E 繞
+9077 遷 => 8FC1 迁
+9078 選 => 9009 选
+907A 遺 => 9057 遗
+907C 遼 => 8FBD 辽
+907F 避 => 8F9F 辟
+9081 邁 => 8FC8 迈
+9084 還 => 8FD8 还
+9087 邇 => 8FE9 迩
+9089 邉 => 8FB9 边
+908A 邊 => 8FB9 边
+908D 邍 => 539F 原
+908F 邏 => 903B 逻
+9090 邐 => 9026 逦
+90A8 邨 => 6751 村
+90C1 郁 => 6B1D 欝
+90C9 郉 => 90A2 邢
+90D8 郘 => 5415 吕
+90DE 郞 => 90CE 郎
+90DF 郟 => 90CF 郏
+90E3 郣 => 6E24 渤
+90ED 郭 => 588E 墎
+90F2 郲 => 83B1 莱
+90F5 郵 => 90AE 邮
+90F7 郷 => 4E61 乡
+9101 鄁 => 90B6 邶
+9103 鄃 => 4FDE 俞
+9106 鄆 => 90D3 郓
+9109 鄉 => 4E61 乡
+9112 鄒 => 90B9 邹
+9114 鄔 => 90AC 邬
+9115 鄕 => 4E61 乡
+9116 鄖 => 90E7 郧
+9126 鄦 => 8A31 許
+9127 鄧 => 9093 邓
+912D 鄭 => 90D1 郑
+9130 鄰 => 90BB 邻
+9132 鄲 => 90F8 郸
+9134 鄴 => 90BA 邺
+9136 鄶 => 90D0 郐
+9139 鄹 => 90F0 郰
+913A 鄺 => 909D 邝
+9146 酆 => 9137 鄷
+9147 酇 => 9142 酂
+9148 酈 => 90E6 郦
+9149 酉 => 4E23 丣
+9167 酧 => 8A76 詶
+916C 酬 => 8A76 詶
+9183 醃 => 814C 腌
+9186 醆 => 7416 琖
+9189 醉 => 9154 酔
+918B 醋 => 9162 酢
+9196 醖 => 915D 酝
+919C 醜 => 4E11 丑
+919E 醞 => 915D 酝
+91A1 醡 => 643E 搾
+91AB 醫 => 533B 医
+91AC 醬 => 9171 酱
+91B1 醱 => 9166 酦
+91BB 醻 => 8A76 詶
+91BC 醼 => 5BB4 宴
+91C0 釀 => 917F 酿
+91C1 釁 => 8845 衅
+91C3 釃 => 917E 酾
+91C5 釅 => 917D 酽
+91C6 釆 => 529E 办
+91C7 采 => 63A1 採
+91CB 釋 => 91CA 释
+91CC 里 => 88CF 裏
+91CD 重 => 7DDF 緟
+91CE 野 => 57DC 埜
+91D0 釐 => 5398 厘
+91D2 釒 => 91D1 金
+91E6 釦 => 6263 扣
+91EC 釬 => 710A 焊
+91FE 釾 => 497A 䥺
+9221 鈡 => 87A4 螤
+9245 鉅 => 5DE8 巨
+924C 鉌 => 548C 和
+9257 鉗 => 62D1 拑
+925B 鉛 => 9206 鈆
+9262 鉢 => 7F3D 缽
+9264 鉤 => 920E 鈎
+929C 銜 => 5563 啣
+92B2 銲 => 710A 焊
+92E4 鋤 => 8021 耡
+92EA 鋪 => 8216 舖
+92ED 鋭 => 92B3 銳
+92FA 鋺 => 7897 碗
+9304 錄 => 5F54 彔
+9322 錢 => 92AD 銭
+9332 録 => 5F54 彔
+9336 錶 => 8868 表
+933C 錼 => 637A 捺
+933D 錽 => 92C4 鋄
+934A 鍊 => 70BC 炼
+935B 鍛 => 7145 煅
+9364 鍤 => 81FF 臿
+937E 鍾 => 87A4 螤
+938C 鎌 => 5286 劆
+9394 鎔 => 7194 熔
+9399 鎙 => 77DF 矟
+939A 鎚 => 9318 錘
+93A3 鎣 => 84E5 蓥
+93AE 鎮 => 93AD 鎭
+93B0 鎰 => 8CF9 賹
+93C1 鏁 => 9396 鎖
+93C4 鏄 => 939B 鎛
+93C7 鏇 => 65CB 旋
+93CE 鏎 => 6BD5 毕
+93D7 鏗 => 935E 鍞
+93DF 鏟 => 522C 刬
+93E8 鏨 => 933E 錾
+93EC 鏬 => 7F45 罅
+93F0 鏰 => 930B 錋
+93FA 鏺 => 497D 䥽
+93FD 鏽 => 92B9 銹
+9400 鐀 => 532E 匮
+9409 鐉 => 9246 鉆
+940A 鐊 => 935A 鍚
+9411 鐑 => 9365 鍥
+9418 鐘 => 87A4 螤
+9425 鐥 => 4985 䦅
+942A 鐪 => 93C0 鏀
+942B 鐫 => 93B8 鎸
+942E 鐮 => 5286 劆
+942F 鐯 => 4983 䦃
+9431 鐱 => 5251 剑
+9435 鐵 => 9295 銕
+9437 鐷 => 9371 鍱
+9444 鑄 => 92F3 鋳
+9451 鑑 => 9274 鉴
+9452 鑒 => 9274 鉴
+945B 鑛 => 77FF 矿
+9464 鑤 => 5228 刨
+9468 鑨 => 783B 砻
+946A 鑪 => 7089 炉
+946E 鑮 => 939B 鎛
+946F 鑯 => 5C16 尖
+9470 鑰 => 9205 鈅
+9473 鑳 => 9375 鍵
+9475 鑵 => 7F50 罐
+947D 鑽 => 9246 鉆
+947E 鑾 => 92AE 銮
+947F 鑿 => 51FF 凿
+9481 钁 => 4986 䦆
+9482 钂 => 93B2 鎲
+9485 钅 => 91D1 金
+9486 钆 => 91D3 釓
+9487 钇 => 91D4 釔
+9488 针 => 91DD 針
+9489 钉 => 91D8 釘
+948A 钊 => 91D7 釗
+948B 钋 => 91D9 釙
+948C 钌 => 91D5 釕
+948D 钍 => 91F7 釷
+948E 钎 => 91FA 釺
+948F 钏 => 91E7 釧
+9490 钐 => 91E4 釤
+9491 钑 => 9212 鈒
+9492 钒 => 91E9 釩
+9493 钓 => 91E3 釣
+9494 钔 => 9346 鍆
+9495 钕 => 91F9 釹
+9496 钖 => 935A 鍚
+9497 钗 => 91F5 釵
+9498 钘 => 9203 鈃
+9499 钙 => 9223 鈣
+949A 钚 => 9208 鈈
+949B 钛 => 9226 鈦
+949C 钜 => 5DE8 巨
+949D 钝 => 920D 鈍
+949E 钞 => 9214 鈔
+949F 钟 => 87A4 螤
+94A0 钠 => 9209 鈉
+94A1 钡 => 92C7 鋇
+94A2 钢 => 92FC 鋼
+94A3 钣 => 9211 鈑
+94A4 钤 => 9210 鈐
+94A5 钥 => 9205 鈅
+94A6 钦 => 6B3D 欽
+94A7 钧 => 921E 鈞
+94A8 钨 => 93A2 鎢
+94A9 钩 => 920E 鈎
+94AA 钪 => 9227 鈧
+94AB 钫 => 9201 鈁
+94AC 钬 => 9225 鈥
+94AD 钭 => 9204 鈄
+94AE 钮 => 9215 鈕
+94AF 钯 => 9200 鈀
+94B0 钰 => 923A 鈺
+94B1 钱 => 92AD 銭
+94B2 钲 => 9266 鉦
+94B3 钳 => 62D1 拑
+94B4 钴 => 9237 鈷
+94B5 钵 => 7F3D 缽
+94B6 钶 => 9233 鈳
+94B7 钷 => 9255 鉕
+94B8 钸 => 923D 鈽
+94B9 钹 => 9238 鈸
+94BA 钺 => 925E 鉞
+94BB 钻 => 9246 鉆
+94BC 钼 => 926C 鉬
+94BD 钽 => 926D 鉭
+94BE 钾 => 9240 鉀
+94BF 钿 => 923F 鈿
+94C0 铀 => 923E 鈾
+94C1 铁 => 9295 銕
+94C2 铂 => 9251 鉑
+94C3 铃 => 9234 鈴
+94C4 铄 => 9460 鑠
+94C5 铅 => 9206 鈆
+94C6 铆 => 925A 鉚
+94C7 铇 => 924B 鉋
+94C8 铈 => 9230 鈰
+94C9 铉 => 9249 鉉
+94CA 铊 => 9248 鉈
+94CB 铋 => 924D 鉍
+94CC 铌 => 922E 鈮
+94CD 铍 => 9239 鈹
+94CE 铎 => 9438 鐸
+94CF 铏 => 9276 鉶
+94D0 铐 => 92AC 銬
+94D1 铑 => 92A0 銠
+94D2 铒 => 927A 鉺
+94D3 铓 => 92E9 鋩
+94D4 铔 => 930F 錏
+94D5 铕 => 92AA 銪
+94D6 铖 => 92EE 鋮
+94D7 铗 => 92CF 鋏
+94D8 铘 => 92E3 鋣
+94D9 铙 => 9403 鐃
+94DA 铚 => 928D 銍
+94DB 铛 => 943A 鐺
+94DC 铜 => 9285 銅
+94DD 铝 => 92C1 鋁
+94DE 铞 => 92B1 銱
+94DF 铟 => 92A6 銦
+94E0 铠 => 93A7 鎧
+94E1 铡 => 9358 鍘
+94E2 铢 => 9296 銖
+94E3 铣 => 9291 銑
+94E4 铤 => 92CC 鋌
+94E5 铥 => 92A9 銩
+94E6 铦 => 929B 銛
+94E7 铧 => 93F5 鏵
+94E8 铨 => 9293 銓
+94E9 铩 => 93A9 鎩
+94EA 铪 => 927F 鉿
+94EB 铫 => 929A 銚
+94EC 铬 => 927B 鉻
+94ED 铭 => 9298 銘
+94EE 铮 => 931A 錚
+94EF 铯 => 92AB 銫
+94F0 铰 => 9278 鉸
+94F1 铱 => 92A5 銥
+94F2 铲 => 522C 刬
+94F3 铳 => 9283 銃
+94F4 铴 => 940B 鐋
+94F5 铵 => 92A8 銨
+94F6 银 => 9280 銀
+94F7 铷 => 92A3 銣
+94F8 铸 => 92F3 鋳
+94F9 铹 => 9412 鐒
+94FA 铺 => 8216 舖
+94FB 铻 => 92D9 鋙
+94FC 铼 => 9338 錸
+94FD 铽 => 92F1 鋱
+94FE 链 => 93C8 鏈
+94FF 铿 => 935E 鍞
+9500 销 => 92B7 銷
+9501 锁 => 9396 鎖
+9502 锂 => 92F0 鋰
+9503 锃 => 92E5 鋥
+9504 锄 => 8021 耡
+9505 锅 => 934B 鍋
+9506 锆 => 92EF 鋯
+9507 锇 => 92E8 鋨
+9508 锈 => 92B9 銹
+9509 锉 => 92BC 銼
+950A 锊 => 92DD 鋝
+950B 锋 => 92D2 鋒
+950C 锌 => 92C5 鋅
+950D 锍 => 92F6 鋶
+950E 锎 => 9426 鐦
+950F 锏 => 9427 鐧
+9510 锐 => 92B3 銳
+9511 锑 => 92BB 銻
+9512 锒 => 92C3 鋃
+9513 锓 => 92DF 鋟
+9514 锔 => 92E6 鋦
+9515 锕 => 9312 錒
+9516 锖 => 9306 錆
+9517 锗 => 937A 鍺
+9518 锘 => 9369 鍩
+9519 错 => 932F 錯
+951A 锚 => 9328 錨
+951B 锛 => 931B 錛
+951C 锜 => 9321 錡
+951D 锝 => 9340 鍀
+951E 锞 => 9301 錁
+951F 锟 => 9315 錕
+9520 锠 => 9329 錩
+9521 锡 => 932B 錫
+9522 锢 => 932E 錮
+9523 锣 => 947C 鑼
+9524 锤 => 9318 錘
+9525 锥 => 9310 錐
+9526 锦 => 9326 錦
+9527 锧 => 9455 鑕
+9528 锨 => 9341 鍁
+9529 锩 => 9308 錈
+952A 锪 => 9343 鍃
+952B 锫 => 9307 錇
+952C 锬 => 931F 錟
+952D 锭 => 9320 錠
+952E 键 => 9375 鍵
+952F 锯 => 92F8 鋸
+9530 锰 => 9333 錳
+9531 锱 => 9319 錙
+9532 锲 => 9365 鍥
+9533 锳 => 9348 鍈
+9534 锴 => 9347 鍇
+9535 锵 => 93D8 鏘
+9536 锶 => 9376 鍶
+9537 锷 => 9354 鍔
+9538 锸 => 81FF 臿
+9539 锹 => 936C 鍬
+953A 锺 => 87A4 螤
+953B 锻 => 7145 煅
+953C 锼 => 93AA 鎪
+953D 锽 => 9360 鍠
+953E 锾 => 9370 鍰
+953F 锿 => 9384 鎄
+9540 镀 => 934D 鍍
+9541 镁 => 9382 鎂
+9542 镂 => 93E4 鏤
+9543 镃 => 93A1 鎡
+9544 镄 => 9428 鐨
+9545 镅 => 9387 鎇
+9546 镆 => 93CC 鏌
+9547 镇 => 93AD 鎭
+9548 镈 => 939B 鎛
+9549 镉 => 9398 鎘
+954A 镊 => 9477 鑷
+954B 镋 => 93B2 鎲
+954C 镌 => 93B8 鎸
+954D 镍 => 93B3 鎳
+954E 镎 => 93BF 鎿
+954F 镏 => 93A6 鎦
+9550 镐 => 93AC 鎬
+9551 镑 => 938A 鎊
+9552 镒 => 8CF9 賹
+9553 镓 => 93B5 鎵
+9554 镔 => 944C 鑌
+9555 镕 => 7194 熔
+9556 镖 => 93E2 鏢
+9557 镗 => 93DC 鏜
+9558 镘 => 93DD 鏝
+9559 镙 => 93CD 鏍
+955A 镚 => 930B 錋
+955B 镛 => 93DE 鏞
+955C 镜 => 93E1 鏡
+955D 镝 => 93D1 鏑
+955E 镞 => 93C3 鏃
+955F 镟 => 65CB 旋
+9560 镠 => 93D0 鏐
+9561 镡 => 9414 鐔
+9562 镢 => 941D 鐝
+9563 镣 => 9410 鐐
+9564 镤 => 93F7 鏷
+9565 镥 => 9465 鑥
+9566 镦 => 9413 鐓
+9567 镧 => 946D 鑭
+9568 镨 => 9420 鐠
+9569 镩 => 9479 鑹
+956A 镪 => 93F9 鏹
+956B 镫 => 9419 鐙
+956C 镬 => 944A 鑊
+956D 镭 => 9433 鐳
+956E 镮 => 9436 鐶
+956F 镯 => 9432 鐲
+9570 镰 => 5286 劆
+9571 镱 => 943F 鐿
+9572 镲 => 9454 鑔
+9573 镳 => 9463 鑣
+9574 镴 => 945E 鑞
+9575 镵 => 9471 鑱
+9576 镶 => 9472 鑲
+957F 长 => 9577 長
+9589 閉 => 9587 閇
+958B 開 => 5F00 开
+959E 閞 => 5173 关
+95A2 関 => 5173 关
+95A4 閤 => 5408 合
+95A7 閧 => 54C4 哄
+95B2 閲 => 95B1 閱
+95B7 閷 => 6740 杀
+95BB 閻 => 9586 閆
+95C6 闆 => 677F 板
+95C7 闇 => 667B 晻
+95CA 闊 => 6FF6 濶
+95D7 闗 => 5173 关
+95D8 闘 => 6597 斗
+95DA 闚 => 7AA5 窥
+95DC 關 => 5173 关
+95E1 闡 => 705B 灛
+95E2 闢 => 8F9F 辟
+95E8 门 => 9580 門
+95E9 闩 => 9582 閂
+95EA 闪 => 9583 閃
+95EB 闫 => 9586 閆
+95EC 闬 => 9588 閈
+95ED 闭 => 9587 閇
+95EE 问 => 554F 問
+95EF 闯 => 95D6 闖
+95F0 闰 => 958F 閏
+95F1 闱 => 95C8 闈
+95F2 闲 => 9591 閑
+95F3 闳 => 958E 閎
+95F4 间 => 9593 間
+95F5 闵 => 9594 閔
+95F6 闶 => 958C 閌
+95F7 闷 => 60B6 悶
+95F8 闸 => 9598 閘
+95F9 闹 => 9599 閙
+95FA 闺 => 95A8 閨
+95FB 闻 => 805E 聞
+95FC 闼 => 95E5 闥
+95FD 闽 => 95A9 閩
+95FE 闾 => 95AD 閭
+95FF 闿 => 95D3 闓
+9600 阀 => 95A5 閥
+9601 阁 => 95A3 閣
+9602 阂 => 95A1 閡
+9603 阃 => 95AB 閫
+9605 阅 => 95B1 閱
+9606 阆 => 95AC 閬
+9607 阇 => 95CD 闍
+9608 阈 => 95BE 閾
+9609 阉 => 95B9 閹
+960A 阊 => 95B6 閶
+960C 阌 => 95BF 閿
+960D 阍 => 95BD 閽
+960E 阎 => 9586 閆
+960F 阏 => 95BC 閼
+9610 阐 => 705B 灛
+9611 阑 => 95CC 闌
+9612 阒 => 95C3 闃
+9613 阓 => 95E0 闠
+9614 阔 => 6FF6 濶
+9615 阕 => 95CB 闋
+9616 阖 => 95D4 闔
+9617 阗 => 95D0 闐
+9618 阘 => 95D2 闒
+9619 阙 => 95D5 闕
+961A 阚 => 95DE 闞
+961B 阛 => 95E4 闤
+961C 阜 => 5CCA 峊
+961D 阝 => 5CCA 峊
+9623 阣 => 5C79 屹
+9628 阨 => 5384 厄
+962A 阪 => 5742 坂
+962C 阬 => 5751 坑
+962F 阯 => 5740 址
+9631 阱 => 7A7D 穽
+9633 阳 => 661C 昜
+9636 阶 => 5826 堦
+9644 附 => 577F 坿
+9646 陆 => 5774 坴
+9648 陈 => 6576 敶
+9654 陔 => 5793 垓
+9658 陘 => 9649 陉
+965C 陜 => 9655 陕
+965D 陝 => 9655 陕
+965E 陞 => 5347 升
+9663 陣 => 9635 阵
+9669 险 => 7877 硷
+9670 陰 => 9634 阴
+9673 陳 => 6576 敶
+9675 陵 => 740C 琌
+9676 陶 => 530B 匋
+9678 陸 => 5774 坴
+967D 陽 => 661C 昜
+9684 隄 => 5824 堤
+9689 隉 => 9667 陧
+968A 隊 => 961F 队
+968E 階 => 5826 堦
+9695 隕 => 9668 陨
+9699 隙 => 90C4 郄
+969B 際 => 9645 际
+969C 障 => 5887 墇
+969E 隞 => 6556 敖
+96A0 隠 => 9690 隐
+96A3 隣 => 90BB 邻
+96A8 隨 => 968F 随
+96AA 險 => 7877 硷
+96B1 隱 => 9690 隐
+96B3 隳 => 9693 隓
+96B4 隴 => 9647 陇
+96B7 隷 => 96B6 隶
+96B8 隸 => 96B6 隶
+96BB 隻 => 53EA 只
+96BF 隿 => 5F0B 弋
+96C7 雇 => 50F1 僱
+96CB 雋 => 96BD 隽
+96D1 雑 => 6742 杂
+96D5 雕 => 5F6B 彫
+96D6 雖 => 867D 虽
+96D9 雙 => 53CC 双
+96DB 雛 => 96CF 雏
+96DC 雜 => 6742 杂
+96DD 雝 => 96CD 雍
+96E0 雠 => 4EC7 仇
+96E2 離 => 79BB 离
+96E3 難 => 96BE 难
+96E5 雥 => 6742 杂
+96F0 雰 => 6C1B 氛
+96F2 雲 => 4E91 云
+96FB 電 => 7535 电
+9707 震 => 8AAB 誫
+970A 霊 => 7075 灵
+970D 霍 => 7668 癨
+9711 霑 => 6CBE 沾
+9712 霒 => 9634 阴
+9713 霓 => 86EA 蛪
+971E 霞 => 8D6E 赮
+9720 霠 => 9634 阴
+9727 霧 => 96FE 雾
+9729 霩 => 5ED3 廓
+9738 霸 => 8987 覇
+973A 霺 => 6EA6 溦
+973D 霽 => 9701 霁
+9742 靂 => 96F3 雳
+9744 靄 => 972D 霭
+9746 靆 => 53C7 叇
+9748 靈 => 7075 灵
+9749 靉 => 53C6 叆
+9752 青 => 9751 靑
+975A 靚 => 9753 靓
+975C 靜 => 9759 静
+975D 靝 => 9754 靔
+9768 靨 => 9765 靥
+976D 靭 => 8095 肕
+977C 靼 => 977B 靻
+9782 鞂 => 79F8 秸
+978D 鞍 => 978C 鞌
+978F 鞏 => 5DE9 巩
+9792 鞒 => 6865 桥
+97A0 鞠 => 9671 陱
+97A4 鞤 => 5E2E 帮
+97A6 鞦 => 79CB 秋
+97BD 鞽 => 6865 桥
+97C1 韁 => 7E6E 繮
+97C3 韃 => 9791 鞑
+97C6 韆 => 4EDF 仟
+97C8 韈 => 889C 袜
+97C9 韉 => 97AF 鞯
+97CC 韌 => 8095 肕
+97E4 韤 => 889C 袜
+97E5 韥 => 97E3 韣
+97E6 韦 => 97CB 韋
+97E7 韧 => 8095 肕
+97E8 韨 => 97CD 韍
+97E9 韩 => 97D3 韓
+97EA 韪 => 97D9 韙
+97EB 韫 => 97DE 韞
+97EC 韬 => 97DC 韜
+97EE 韮 => 97ED 韭
+97F2 韲 => 8640 虀
+97FB 韻 => 97F5 韵
+97FF 響 => 54CD 响
+9812 頒 => 670C 朌
+9824 頤 => 9809 頉
+982B 頫 => 4FDB 俛
+982D 頭 => 5934 头
+9834 頴 => 7A4E 穎
+9838 頸 => 981A 頚
+9839 頹 => 7A68 穨
+983C 頼 => 8CF4 賴
+983D 頽 => 7A68 穨
+984A 顊 => 9809 頉
+9850 顐 => 8AE2 諢
+9854 顔 => 984F 顏
+9855 顕 => 663E 显
+9858 願 => 613F 愿
+985A 顚 => 508E 傎
+985B 顛 => 508E 傎
+985E 類 => 7C7B 类
+9863 顣 => 8E59 蹙
+9867 顧 => 980B 頋
+986F 顯 => 663E 显
+9875 页 => 9801 頁
+9876 顶 => 9802 頂
+9877 顷 => 9803 頃
+9878 顸 => 9807 頇
+9879 项 => 9805 項
+987A 顺 => 9806 順
+987B 须 => 9808 須
+987C 顼 => 980A 頊
+987D 顽 => 9811 頑
+987E 顾 => 980B 頋
+987F 顿 => 9813 頓
+9880 颀 => 980E 頎
+9881 颁 => 670C 朌
+9882 颂 => 980C 頌
+9883 颃 => 980F 頏
+9884 预 => 9810 預
+9885 颅 => 9871 顱
+9886 领 => 9818 領
+9887 颇 => 9817 頗
+9888 颈 => 981A 頚
+9889 颉 => 9821 頡
+988A 颊 => 9830 頰
+988B 颋 => 9832 頲
+988C 颌 => 981C 頜
+988D 颍 => 6F41 潁
+988E 颎 => 71B2 熲
+988F 颏 => 9826 頦
+9890 颐 => 9809 頉
+9891 频 => 983B 頻
+9892 颒 => 982E 頮
+9893 颓 => 7A68 穨
+9894 颔 => 9837 頷
+9895 颕 => 7A4E 穎
+9896 颖 => 7A4E 穎
+9897 颗 => 9846 顆
+9898 题 => 984C 題
+9899 颙 => 9852 顒
+989A 颚 => 984E 顎
+989B 颛 => 9853 顓
+989C 颜 => 984F 顏
+989D 额 => 984D 額
+989E 颞 => 9873 顳
+989F 颟 => 9862 顢
+98A0 颠 => 508E 傎
+98A1 颡 => 9859 顙
+98A2 颢 => 9865 顥
+98A3 颣 => 7E87 纇
+98A4 颤 => 986B 顫
+98A5 颥 => 986C 顬
+98A6 颦 => 9870 顰
+98A7 颧 => 9874 顴
+98A8 風 => 51E8 凨
+98B1 颱 => 53F0 台
+98B3 颳 => 522E 刮
+98BA 颺 => 626C 扬
+98C3 飃 => 65DA 旚
+98C4 飄 => 65DA 旚
+98C8 飈 => 98C6 飆
+98CC 飌 => 51E8 凨
+98CE 风 => 51E8 凨
+98CF 飏 => 626C 扬
+98D0 飐 => 98AD 颭
+98D1 飑 => 98AE 颮
+98D2 飒 => 98AF 颯
+98D3 飓 => 98B6 颶
+98D4 飔 => 98B8 颸
+98D5 飕 => 98BC 颼
+98D6 飖 => 98BB 颻
+98D7 飗 => 98C0 飀
+98D8 飘 => 65DA 旚
+98D9 飙 => 98C6 飆
+98DA 飚 => 98C6 飆
+98DC 飜 => 7E59 繙
+98DE 飞 => 98DB 飛
+98E0 飠 => 98DF 食
+98F0 飰 => 98EF 飯
+98FD 飽 => 98F9 飹
+9901 餁 => 98EA 飪
+9908 餈 => 7CCD 糍
+990A 養 => 517B 养
+9910 餐 => 55B0 喰
+9918 餘 => 4F59 余
+991A 餚 => 80B4 肴
+991D 餝 => 98FE 飾
+9920 餠 => 9905 餅
+9928 館 => 8218 舘
+992C 餬 => 7CCA 糊
+9931 餱 => 7CC7 糇
+9935 餵 => 5582 喂
+9939 餹 => 7CD6 糖
+9947 饇 => 98EB 飫
+994A 饊 => 7CE4 糤
+994B 饋 => 993D 餽
+9951 饑 => 98E2 飢
+9957 饗 => 98E8 飨
+995C 饜 => 990D 餍
+995F 饟 => 9909 餉
+9963 饣 => 98DF 食
+9964 饤 => 98E3 飣
+9965 饥 => 98E2 飢
+9966 饦 => 98E5 飥
+9967 饧 => 9933 餳
+9968 饨 => 98E9 飩
+9969 饩 => 993C 餼
+996A 饪 => 98EA 飪
+996B 饫 => 98EB 飫
+996C 饬 => 98ED 飭
+996D 饭 => 98EF 飯
+996E 饮 => 98F2 飲
+996F 饯 => 991E 餞
+9970 饰 => 98FE 飾
+9971 饱 => 98F9 飹
+9972 饲 => 98FC 飼
+9973 饳 => 98FF 飿
+9974 饴 => 98F4 飴
+9975 饵 => 990C 餌
+9976 饶 => 9952 饒
+9977 饷 => 9909 餉
+9978 饸 => 9904 餄
+9979 饹 => 990E 餎
+997A 饺 => 9903 餃
+997B 饻 => 990F 餏
+997C 饼 => 9905 餅
+997D 饽 => 9911 餑
+997E 饾 => 9916 餖
+997F 饿 => 9913 餓
+9980 馀 => 4F59 余
+9981 馁 => 9912 餒
+9982 馂 => 9915 餕
+9983 馃 => 991C 餜
+9984 馄 => 991B 餛
+9985 馅 => 9921 餡
+9986 馆 => 8218 舘
+9987 馇 => 9937 餷
+9988 馈 => 993D 餽
+9989 馉 => 9936 餶
+998A 馊 => 993F 餿
+998B 馋 => 995E 饞
+998C 馌 => 9941 饁
+998D 馍 => 9943 饃
+998E 馎 => 993A 餺
+998F 馏 => 993E 餾
+9990 馐 => 9948 饈
+9991 馑 => 9949 饉
+9992 馒 => 9945 饅
+9993 馓 => 7CE4 糤
+9994 馔 => 994C 饌
+9995 馕 => 9962 饢
+9998 馘 => 805D 聝
+99AB 馫 => 99A8 馨
+99AE 馮 => 51AF 冯
+99BD 馽 => 7D77 絷
+99C4 駄 => 99B1 馱
+99C6 駆 => 657A 敺
+99C8 駈 => 657A 敺
+99DE 駞 => 99DD 駝
+99E1 駡 => 508C 傌
+99EE 駮 => 99C1 駁
+99F4 駴 => 99ED 駭
+9A03 騃 => 5446 呆
+9A08 騈 => 99E2 駢
+9A23 騣 => 9A0C 騌
+9A2A 騪 => 635C 捜
+9A30 騰 => 817E 腾
+9A32 騲 => 8278 艸
+9A39 騹 => 9A0F 騏
+9A40 驀 => 84E6 蓦
+9A45 驅 => 657A 敺
+9A46 驆 => 8DF8 跸
+9A47 驇 => 9A3A 騺
+9A55 驕 => 618D 憍
+9A5A 驚 => 60CA 惊
+9A69 驩 => 61FD 懽
+9A6C 马 => 99AC 馬
+9A6D 驭 => 99AD 馭
+9A6E 驮 => 99B1 馱
+9A6F 驯 => 99B4 馴
+9A70 驰 => 99B3 馳
+9A71 驱 => 657A 敺
+9A72 驲 => 99B9 馹
+9A73 驳 => 99C1 駁
+9A74 驴 => 9A62 驢
+9A75 驵 => 99D4 駔
+9A76 驶 => 99DB 駛
+9A77 驷 => 99DF 駟
+9A78 驸 => 99D9 駙
+9A79 驹 => 99D2 駒
+9A7A 驺 => 9A36 騶
+9A7B 驻 => 99D0 駐
+9A7C 驼 => 99DD 駝
+9A7D 驽 => 99D1 駑
+9A7E 驾 => 99D5 駕
+9A7F 驿 => 9A5B 驛
+9A80 骀 => 99D8 駘
+9A81 骁 => 9A4D 驍
+9A82 骂 => 508C 傌
+9A83 骃 => 99F0 駰
+9A84 骄 => 618D 憍
+9A85 骅 => 9A4A 驊
+9A86 骆 => 99F1 駱
+9A87 骇 => 99ED 駭
+9A88 骈 => 99E2 駢
+9A89 骉 => 9A6B 驫
+9A8A 骊 => 9A6A 驪
+9A8B 骋 => 9A01 騁
+9A8C 验 => 9A57 驗
+9A8D 骍 => 9A02 騂
+9A8E 骎 => 99F8 駸
+9A8F 骏 => 99FF 駿
+9A90 骐 => 9A0F 騏
+9A91 骑 => 9A0E 騎
+9A92 骒 => 9A0D 騍
+9A93 骓 => 9A05 騅
+9A94 骔 => 9A0C 騌
+9A95 骕 => 9A4C 驌
+9A96 骖 => 9A42 驂
+9A97 骗 => 9A19 騙
+9A98 骘 => 9A2D 騭
+9A99 骙 => 9A24 騤
+9A9A 骚 => 9A37 騷
+9A9B 骛 => 9A16 騖
+9A9C 骜 => 9A41 驁
+9A9D 骝 => 9A2E 騮
+9A9E 骞 => 9A2B 騫
+9A9F 骟 => 9A38 騸
+9AA0 骠 => 9A43 驃
+9AA1 骡 => 9A3E 騾
+9AA2 骢 => 9A44 驄
+9AA3 骣 => 9A4F 驏
+9AA4 骤 => 9A5F 驟
+9AA5 骥 => 9A65 驥
+9AA6 骦 => 9A66 驦
+9AA7 骧 => 9A64 驤
+9AAB 骫 => 9AAA 骪
+9AAF 骯 => 80AE 肮
+9AB5 骵 => 4F53 体
+9AB9 骹 => 8E0D 踍
+9ABB 骻 => 80EF 胯
+9AC4 髄 => 81B8 膸
+9ACA 髊 => 9AB4 骴
+9ACC 髌 => 8191 膑
+9ACF 髏 => 9AC5 髅
+9AD2 髒 => 810F 脏
+9AD3 髓 => 81B8 膸
+9AD4 體 => 4F53 体
+9AD5 髕 => 8191 膑
+9AD6 髖 => 9ACB 髋
+9AD9 髙 => 9AD8 高
+9AE3 髣 => 4EFF 仿
+9AE6 髦 => 6C02 氂
+9AEA 髪 => 53D1 发
+9AEE 髮 => 53D1 发
+9AEF 髯 => 9AE5 髥
+9AF4 髴 => 4ECF 仏
+9B01 鬁 => 75E2 痢
+9B03 鬃 => 9A0C 騌
+9B06 鬆 => 677E 松
+9B0D 鬍 => 80E1 胡
+9B0E 鬎 => 760C 瘌
+9B1A 鬚 => 9808 須
+9B20 鬠 => 9AFA 髺
+9B22 鬢 => 9B13 鬓
+9B25 鬥 => 6597 斗
+9B26 鬦 => 6597 斗
+9B27 鬧 => 9599 閙
+9B28 鬨 => 54C4 哄
+9B29 鬩 => 960B 阋
+9B2A 鬪 => 6597 斗
+9B2B 鬫 => 95DE 闞
+9B2C 鬬 => 6597 斗
+9B2D 鬭 => 6597 斗
+9B2E 鬮 => 9604 阄
+9B30 鬰 => 6B1D 欝
+9B31 鬱 => 6B1D 欝
+9B39 鬹 => 9B36 鬶
+9B3B 鬻 => 7CA5 粥
+9B41 魁 => 6AC6 櫆
+9B4A 魊 => 872E 蜮
+9B4E 魎 => 9B49 魉
+9B58 魘 => 9B47 魇
+9B61 魡 => 91E3 釣
+9B7D 魽 => 86B6 蚶
+9BA3 鮣 => 4C9F 䲟
+9BAD 鮭 => 89DF 觟
+9BAE 鮮 => 5C1F 尟
+9BC1 鯁 => 9ABE 骾
+9BCA 鯊 => 9B66 魦
+9BCB 鯋 => 9B66 魦
+9BD7 鯗 => 9B9D 鮝
+9C06 鰆 => 4CA0 䲠
+9C0C 鰌 => 4CA1 䲡
+9C0D 鰍 => 4CA1 䲡
+9C27 鰧 => 4CA2 䲢
+9C3F 鰿 => 9BFD 鯽
+9C45 鱅 => 9C2B 鰫
+9C4B 鱋 => 9B7C 魼
+9C54 鱔 => 9C53 鱓
+9C5E 鱞 => 9C25 鰥
+9C77 鱷 => 9C10 鰐
+9C7C 鱼 => 9B5A 魚
+9C7D 鱽 => 9B5B 魛
+9C7F 鱿 => 9B77 魷
+9C80 鲀 => 9B68 魨
+9C81 鲁 => 9B6F 魯
+9C82 鲂 => 9B74 魴
+9C84 鲄 => 9B7A 魺
+9C85 鲅 => 9B81 鮁
+9C86 鲆 => 9B83 鮃
+9C87 鲇 => 9B8E 鮎
+9C88 鲈 => 9C78 鱸
+9C89 鲉 => 9B8B 鮋
+9C8A 鲊 => 9B93 鮓
+9C8B 鲋 => 9B92 鮒
+9C8C 鲌 => 9B8A 鮊
+9C8D 鲍 => 9B91 鮑
+9C8E 鲎 => 9C5F 鱟
+9C8F 鲏 => 9B8D 鮍
+9C90 鲐 => 9B90 鮐
+9C91 鲑 => 89DF 觟
+9C92 鲒 => 9B9A 鮚
+9C93 鲓 => 9BB3 鮳
+9C94 鲔 => 9BAA 鮪
+9C95 鲕 => 9B9E 鮞
+9C96 鲖 => 9BA6 鮦
+9C97 鲗 => 9C02 鰂
+9C98 鲘 => 9B9C 鮜
+9C99 鲙 => 9C60 鱠
+9C9A 鲚 => 9C6D 鱭
+9C9B 鲛 => 9BAB 鮫
+9C9C 鲜 => 5C1F 尟
+9C9D 鲝 => 9BBA 鮺
+9C9E 鲞 => 9B9D 鮝
+9C9F 鲟 => 9C58 鱘
+9CA0 鲠 => 9ABE 骾
+9CA1 鲡 => 9C7A 鱺
+9CA2 鲢 => 9C31 鰱
+9CA3 鲣 => 9C39 鰹
+9CA4 鲤 => 9BC9 鯉
+9CA5 鲥 => 9C23 鰣
+9CA6 鲦 => 9C37 鰷
+9CA7 鲧 => 9BC0 鯀
+9CA8 鲨 => 9B66 魦
+9CA9 鲩 => 9BC7 鯇
+9CAA 鲪 => 9BB6 鮶
+9CAB 鲫 => 9BFD 鯽
+9CAC 鲬 => 9BD2 鯒
+9CAD 鲭 => 9BD6 鯖
+9CAE 鲮 => 9BEA 鯪
+9CAF 鲯 => 9BD5 鯕
+9CB0 鲰 => 9BEB 鯫
+9CB1 鲱 => 9BE1 鯡
+9CB2 鲲 => 9BE4 鯤
+9CB3 鲳 => 9BE7 鯧
+9CB4 鲴 => 9BDD 鯝
+9CB5 鲵 => 9BE2 鯢
+9CB6 鲶 => 9BF0 鯰
+9CB7 鲷 => 9BDB 鯛
+9CB8 鲸 => 9BE8 鯨
+9CB9 鲹 => 9C3A 鰺
+9CBA 鲺 => 9BF4 鯴
+9CBB 鲻 => 9BD4 鯔
+9CBC 鲼 => 9C5D 鱝
+9CBD 鲽 => 9C08 鰈
+9CBE 鲾 => 9C0F 鰏
+9CBF 鲿 => 9C68 鱨
+9CC0 鳀 => 9BF7 鯷
+9CC1 鳁 => 9C1B 鰛
+9CC3 鳃 => 9C13 鰓
+9CC4 鳄 => 9C10 鰐
+9CC5 鳅 => 4CA1 䲡
+9CC6 鳆 => 9C12 鰒
+9CC7 鳇 => 9C09 鰉
+9CCA 鳊 => 9BFF 鯿
+9CCB 鳋 => 9C20 鰠
+9CCC 鳌 => 9C32 鰲
+9CCD 鳍 => 9C2D 鰭
+9CCE 鳎 => 9C28 鰨
+9CCF 鳏 => 9C25 鰥
+9CD0 鳐 => 9C29 鰩
+9CD1 鳑 => 9C1F 鰟
+9CD2 鳒 => 9C1C 鰜
+9CD3 鳓 => 9C33 鰳
+9CD4 鳔 => 9C3E 鰾
+9CD5 鳕 => 9C48 鱈
+9CD6 鳖 => 9C49 鱉
+9CD7 鳗 => 9C3B 鰻
+9CD8 鳘 => 9C35 鰵
+9CD9 鳙 => 9C2B 鰫
+9CDB 鳛 => 9C3C 鰼
+9CDC 鳜 => 9C56 鱖
+9CDD 鳝 => 9C53 鱓
+9CDE 鳞 => 9C57 鱗
+9CDF 鳟 => 9C52 鱒
+9CE0 鳠 => 9C6F 鱯
+9CE2 鳢 => 9C67 鱧
+9CE3 鳣 => 9C63 鱣
+9CE7 鳧 => 51EB 凫
+9CEB 鳫 => 96C1 雁
+9CEC 鳬 => 51EB 凫
+9CEE 鳮 => 96DE 雞
+9CEF 鳯 => 51E4 凤
+9CF3 鳳 => 51E4 凤
+9CFE 鳾 => 4D13 䴓
+9D03 鴃 => 9D02 鴂
+9D07 鴇 => 9CF5 鳵
+9D08 鴈 => 96C1 雁
+9D19 鴙 => 96C9 雉
+9D37 鴷 => 4D15 䴕
+9D41 鵁 => 4D14 䴔
+9D5B 鵛 => 981A 頚
+9D5E 鵞 => 9D5D 鵝
+9D70 鵰 => 5F6B 彫
+9D76 鵶 => 9D09 鴉
+9D84 鶄 => 4D16 䴖
+9DA4 鶤 => 9D7E 鵾
+9DAA 鶪 => 4D17 䴗
+9DAF 鶯 => 83BA 莺
+9DB5 鶵 => 96CF 雏
+9DBE 鶾 => 7FF0 翰
+9DC4 鷄 => 96DE 雞
+9DC8 鷈 => 4D18 䴘
+9DC9 鷉 => 4D18 䴘
+9DCD 鷍 => 67AD 枭
+9DD8 鷘 => 9D92 鶒
+9DF0 鷰 => 71D5 燕
+9DF4 鷴 => 9DF3 鷳
+9DFF 鷿 => 4D19 䴙
+9E0A 鸊 => 4D19 䴙
+9E1D 鸝 => 9D51 鵑
+9E1E 鸞 => 9D49 鵉
+9E1F 鸟 => 9CE5 鳥
+9E20 鸠 => 9CE9 鳩
+9E21 鸡 => 96DE 雞
+9E22 鸢 => 9CF6 鳶
+9E23 鸣 => 9CF4 鳴
+9E24 鸤 => 9CF2 鳲
+9E25 鸥 => 9DD7 鷗
+9E26 鸦 => 9D09 鴉
+9E27 鸧 => 9DAC 鶬
+9E28 鸨 => 9CF5 鳵
+9E29 鸩 => 9D06 鴆
+9E2A 鸪 => 9D23 鴣
+9E2B 鸫 => 9D87 鶇
+9E2C 鸬 => 9E15 鸕
+9E2D 鸭 => 9D28 鴨
+9E2E 鸮 => 9D1E 鴞
+9E2F 鸯 => 9D26 鴦
+9E30 鸰 => 9D12 鴒
+9E31 鸱 => 9D1F 鴟
+9E32 鸲 => 9D1D 鴝
+9E33 鸳 => 9D1B 鴛
+9E34 鸴 => 9DFD 鷽
+9E35 鸵 => 9D15 鴕
+9E36 鸶 => 9DE5 鷥
+9E37 鸷 => 9DD9 鷙
+9E38 鸸 => 9D2F 鴯
+9E39 鸹 => 9D30 鴰
+9E3A 鸺 => 9D42 鵂
+9E3B 鸻 => 9D34 鴴
+9E3C 鸼 => 9D43 鵃
+9E3D 鸽 => 9D3F 鴿
+9E3E 鸾 => 9D49 鵉
+9E3F 鸿 => 9D3B 鴻
+9E40 鹀 => 9D50 鵐
+9E41 鹁 => 9D53 鵓
+9E42 鹂 => 9D51 鵑
+9E43 鹃 => 9D51 鵑
+9E44 鹄 => 9D60 鵠
+9E45 鹅 => 9D5D 鵝
+9E46 鹆 => 9D52 鵒
+9E47 鹇 => 9DF3 鷳
+9E48 鹈 => 9D5C 鵜
+9E49 鹉 => 9D61 鵡
+9E4A 鹊 => 9D72 鵲
+9E4B 鹋 => 9D93 鶓
+9E4C 鹌 => 9D6A 鵪
+9E4D 鹍 => 9D7E 鵾
+9E4E 鹎 => 9D6F 鵯
+9E4F 鹏 => 9D6C 鵬
+9E50 鹐 => 9D6E 鵮
+9E51 鹑 => 9D89 鶉
+9E52 鹒 => 9D8A 鶊
+9E53 鹓 => 9D77 鵷
+9E54 鹔 => 9DEB 鷫
+9E55 鹕 => 9D98 鶘
+9E56 鹖 => 9DA1 鶡
+9E57 鹗 => 9D9A 鶚
+9E58 鹘 => 9DBB 鶻
+9E59 鹙 => 9D96 鶖
+9E5A 鹚 => 9DBF 鶿
+9E5B 鹛 => 9DA5 鶥
+9E5C 鹜 => 9DA9 鶩
+9E5D 鹝 => 9DCA 鷊
+9E5E 鹞 => 9DC2 鷂
+9E5F 鹟 => 9DB2 鶲
+9E60 鹠 => 9DB9 鶹
+9E61 鹡 => 9DBA 鶺
+9E62 鹢 => 9DC1 鷁
+9E63 鹣 => 9DBC 鶼
+9E64 鹤 => 9DB4 鶴
+9E65 鹥 => 9DD6 鷖
+9E66 鹦 => 9E1A 鸚
+9E67 鹧 => 9DD3 鷓
+9E68 鹨 => 9DDA 鷚
+9E69 鹩 => 9DEF 鷯
+9E6A 鹪 => 9DE6 鷦
+9E6B 鹫 => 9DF2 鷲
+9E6C 鹬 => 9DF8 鷸
+9E6D 鹭 => 9DFA 鷺
+9E6F 鹯 => 9E07 鸇
+9E70 鹰 => 9DF9 鷹
+9E71 鹱 => 9E0C 鸌
+9E72 鹲 => 9E0F 鸏
+9E73 鹳 => 9E1B 鸛
+9E74 鹴 => 9E18 鸘
+9E75 鹵 => 5364 卤
+9E79 鹹 => 54B8 咸
+9E7C 鹼 => 7877 硷
+9E7D 鹽 => 5869 塩
+9E7E 鹾 => 9E7A 鹺
+9E81 麁 => 7C97 粗
+9E84 麄 => 7C97 粗
+9E86 麆 => 7C97 粗
+9E8B 麋 => 9E8A 麊
+9E97 麗 => 4E3D 丽
+9EA0 麠 => 9E96 麖
+9EA4 麤 => 7C97 粗
+9EA6 麦 => 9EA5 麥
+9EAA 麪 => 9762 面
+9EAF 麯 => 66F2 曲
+9EB4 麴 => 66F2 曲
+9EB5 麵 => 9762 面
+9EB8 麸 => 9EA9 麩
+9EBB 麻 => 6DCB 淋
+9EBC 麼 => 4E48 么
+9EBD 麽 => 4E48 么
+9EC4 黄 => 9EC3 黃
+9ECC 黌 => 9EC9 黉
+9ECE 黎 => 83DE 菞
+9ED2 黒 => 9ED1 黑
+9ED4 黔 => 8EE1 軡
+9ED9 黙 => 9ED8 默
+9EDE 點 => 594C 奌
+9EE8 黨 => 515A 党
+9EF2 黲 => 9EEA 黪
+9EF4 黴 => 9709 霉
+9EF6 黶 => 9EE1 黡
+9EF7 黷 => 9EE9 黩
+9EFE 黾 => 9EFD 黽
+9F04 鼄 => 86DB 蛛
+9F05 鼅 => 8718 蜘
+9F07 鼇 => 9C32 鰲
+9F08 鼈 => 9C49 鱉
+9F0B 鼋 => 9EFF 黿
+9F0C 鼌 => 9F02 鼂
+9F0D 鼍 => 9F09 鼉
+9F13 鼓 => 76B7 皷
+9F15 鼕 => 51AC 冬
+9F17 鼗 => 9780 鞀
+9F33 鼳 => 9F30 鼰
+9F39 鼹 => 9F34 鼴
+9F3E 鼾 => 54FB 哻
+9F40 齀 => 9F3F 鼿
+9F43 齃 => 981E 頞
+9F4A 齊 => 4E9D 亝
+9F4B 齋 => 658B 斋
+9F4E 齎 => 8CEB 賫
+9F4F 齏 => 8640 虀
+9F50 齐 => 4E9D 亝
+9F51 齑 => 8640 虀
+9F52 齒 => 6B6F 歯
+9F63 齣 => 51FA 出
+9F65 齥 => 9F5B 齛
+9F67 齧 => 556E 啮
+9F69 齩 => 54AC 咬
+9F6A 齪 => 8E00 踀
+9F73 齳 => 9F6B 齫
+9F76 齶 => 816D 腭
+9F7F 齿 => 6B6F 歯
+9F80 龀 => 9F54 齔
+9F81 龁 => 9F55 齕
+9F82 龂 => 9F57 齗
+9F83 龃 => 9F5F 齟
+9F84 龄 => 9F61 齡
+9F85 龅 => 9F59 齙
+9F86 龆 => 9F60 齠
+9F87 龇 => 9F5C 齜
+9F88 龈 => 9F66 齦
+9F89 龉 => 9F6C 齬
+9F8A 龊 => 8E00 踀
+9F8B 龋 => 9F72 齲
+9F8C 龌 => 9F77 齷
+9F8D 龍 => 7ADC 竜
+9F8E 龎 => 5390 厐
+9F90 龐 => 5390 厐
+9F91 龑 => 4DAE 䶮
+9F92 龒 => 7ADC 竜
+9F98 龘 => 9F96 龖
+9F99 龙 => 7ADC 竜
+9F9A 龚 => 9F94 龔
+9F9B 龛 => 9F95 龕
+9F9C 龜 => 4E80 亀
+9F9D 龝 => 79CB 秋
+9F9E 龞 => 9C49 鱉
+9F9F 龟 => 4E80 亀
+9FA2 龢 => 548C 和
+A49C ꒜ => A0C0 ꃀ
+A49E ꒞ => A04A ꁊ
+A4AC ꒬ => A050 ꁐ
+A4B0 ꒰ => A3C2 ꏂ
+A4BA ꒺ => A3BF ꎿ
+A4BE ꒾ => A2B1 ꊱ
+A4BF ꒿ => A259 ꉙ
+A4C0 ꓀ => A3AB ꎫ
+A4C2 ꓂ => A3B5 ꎵ
+FF65 ・ => 30FB ・
+FF66 ヲ => 30F2 ヲ
+FF67 ァ => 30A1 ァ
+FF68 ィ => 30A3 ィ
+FF69 ゥ => 30A5 ゥ
+FF6A ェ => 30A7 ェ
+FF6B ォ => 30A9 ォ
+FF6C ャ => 30E3 ャ
+FF6D ュ => 30E5 ュ
+FF6E ョ => 30E7 ョ
+FF6F ッ => 30C3 ッ
+FF70 ー => 30FC ー
+FF71 ア => 30A2 ア
+FF72 イ => 30A4 イ
+FF73 ウ => 30A6 ウ
+FF74 エ => 30A8 エ
+FF75 オ => 30AA オ
+FF76 カ => 30AB カ
+FF77 キ => 30AD キ
+FF78 ク => 30AF ク
+FF79 ケ => 30B1 ケ
+FF7A コ => 30B3 コ
+FF7B サ => 30B5 サ
+FF7C シ => 30B7 シ
+FF7D ス => 30B9 ス
+FF7E セ => 30BB セ
+FF7F ソ => 30BD ソ
+FF80 タ => 30BF タ
+FF81 チ => 30C1 チ
+FF82 ツ => 30C4 ツ
+FF83 テ => 30C6 テ
+FF84 ト => 30C8 ト
+FF85 ナ => 30CA ナ
+FF86 ニ => 30CB ニ
+FF87 ヌ => 30CC ヌ
+FF88 ネ => 30CD ネ
+FF89 ノ => 30CE ノ
+FF8A ハ => 30CF ハ
+FF8B ヒ => 30D2 ヒ
+FF8C フ => 30D5 フ
+FF8D ヘ => 30D8 ヘ
+FF8E ホ => 30DB ホ
+FF8F マ => 30DE マ
+FF90 ミ => 30DF ミ
+FF91 ム => 30E0 ム
+FF92 メ => 30E1 メ
+FF93 モ => 30E2 モ
+FF94 ヤ => 30E4 ヤ
+FF95 ユ => 30E6 ユ
+FF96 ヨ => 30E8 ヨ
+FF97 ラ => 30E9 ラ
+FF98 リ => 30EA リ
+FF99 ル => 30EB ル
+FF9A レ => 30EC レ
+FF9B ロ => 30ED ロ
+FF9C ワ => 30EF ワ
+FF9D ン => 30F3 ン
+FF9E ゙ => 3099 ゙
+FF9F ゚ => 309A ゚
+FFA0 ᅠ => 3164 ㅤ
+FFA1 ᄀ => 3131 ㄱ
+FFA2 ᄁ => 3132 ㄲ
+FFA3 ᆪ => 3133 ㄳ
+FFA4 ᄂ => 3134 ㄴ
+FFA5 ᆬ => 3135 ㄵ
+FFA6 ᆭ => 3136 ㄶ
+FFA7 ᄃ => 3137 ㄷ
+FFA8 ᄄ => 3138 ㄸ
+FFA9 ᄅ => 3139 ㄹ
+FFAA ᆰ => 313A ㄺ
+FFAB ᆱ => 313B ㄻ
+FFAC ᆲ => 313C ㄼ
+FFAD ᆳ => 313D ㄽ
+FFAE ᆴ => 313E ㄾ
+FFAF ᆵ => 313F ㄿ
+FFB0 ᄚ => 3140 ㅀ
+FFB1 ᄆ => 3141 ㅁ
+FFB2 ᄇ => 3142 ㅂ
+FFB3 ᄈ => 3143 ㅃ
+FFB4 ᄡ => 3144 ㅄ
+FFB5 ᄉ => 3145 ㅅ
+FFB6 ᄊ => 3146 ㅆ
+FFB7 ᄋ => 3147 ㅇ
+FFB8 ᄌ => 3148 ㅈ
+FFB9 ᄍ => 3149 ㅉ
+FFBA ᄎ => 314A ㅊ
+FFBB ᄏ => 314B ㅋ
+FFBC ᄐ => 314C ㅌ
+FFBD ᄑ => 314D ㅍ
+FFBE ᄒ => 314E ㅎ
+FFC2 ᅡ => 314F ㅏ
+FFC3 ᅢ => 3150 ㅐ
+FFC4 ᅣ => 3151 ㅑ
+FFC5 ᅤ => 3152 ㅒ
+FFC6 ᅥ => 3153 ㅓ
+FFC7 ᅦ => 3154 ㅔ
+FFCA ᅧ => 3155 ㅕ
+FFCB ᅨ => 3156 ㅖ
+FFCC ᅩ => 3157 ㅗ
+FFCD ᅪ => 3158 ㅘ
+FFCE ᅫ => 3159 ㅙ
+FFCF ᅬ => 315A ㅚ
+FFD2 ᅭ => 315B ㅛ
+FFD3 ᅮ => 315C ㅜ
+FFD4 ᅯ => 315D ㅝ
+FFD5 ᅰ => 315E ㅞ
+FFD6 ᅱ => 315F ㅟ
+FFD7 ᅲ => 3160 ㅠ
+FFDA ᅳ => 3161 ㅡ
+FFDB ᅴ => 3162 ㅢ
+FFDC ᅵ => 3163 ㅣ
diff --git a/AntiSpoof/maintenance/equivset.txt b/AntiSpoof/maintenance/equivset.txt
new file mode 100644
index 00000000..75a37117
--- /dev/null
+++ b/AntiSpoof/maintenance/equivset.txt
@@ -0,0 +1,3825 @@
+# This file is generated by generateEquivset.php
+# It shows sets of equivalent characters, one set per line, with characters
+# separated by whitespace. This file is not used by MediaWiki, rather it is
+# intended as a human-readable version of equivset.php, for debugging and
+# review purposes.
+E 3 e è é ë ē ĕ ė ę ě Ɛ Ʒ ȅ ȇ Ȝ ȝ Ȩ ȩ ə ɛ ɜ ʒ Ε ε Є Е З е з є Ҙ ҙ Ӡ ӡ Յ ع ڠ ჳ Ꭼ ḗ ḙ ḛ ḝ ẹ ẻ ẽ ế ề ể ễ ệ ⴹ
+A 4 a à á â ã ä å æ ā ă ą ǟ ǡ ǻ ȁ ɑ Α ά α А а ٩ ۹ Ꭺ Ꮞ ᗅ ḁ ạ ả ấ ầ ẩ ẫ ậ ắ ằ ẳ ẵ ặ ἁ ἂ ἃ ἄ ἅ ἆ ἇ ὰ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾳ
+G 6 g ĝ ğ ġ ģ Ɠ Ǥ ǥ ǧ ǵ ɠ ɡ ɢ Б б Ԍ ԍ ց Ꮐ Ᏻ ḡ
+1 I L i l | ı Ł ł Ɩ Ɨ ƚ ǀ ɨ ɩ ɫ ɭ Ι ι І і Ӏ Ꭵ Ꮮ 丨
+0 O o Θ Ο ο О о Օ օ ० ০ ੦ ૦ ୦ ௦ ం ౦ ಂ ೦ ം ഠ ๐ ໐ ဝ ၀ ᠐ ⵔ
+5 S s Ƽ ƽ ʂ Ѕ ѕ Ꮥ Ꮪ
+B b ß ƀ Ɓ Ƃ ƃ Ƅ ƅ ɓ ʙ Β β В Ъ Ь б в ъ ь Ѣ ѣ Ҍ ҍ ฿ Ꮟ Ᏼ ᖯ ᗷ
+C c ¢ ç ć ĉ ĉ ċ č Ƈ ƈ ʃ ς ϲ Ϲ С с Ҫ ҫ Ꮯ
+D d Ð ð ď Đ đ Ɖ Ɗ Ƌ ƌ ɖ ɗ Ԁ ԁ ᑯ ᗞ ᗪ ḍ ⅆ
+F f Ƒ ƒ Ϝ ϝ Ғ ғ ᖴ ₣
+H h ĥ Ħ ħ Ȟ ɦ ʜ ʰ ʱ Η ή η Ћ Н н њ ћ Ң ң Һ һ Ӈ ӈ Ӊ ӊ ԋ հ Ꮋ Ꮒ Ᏺ ᕼ ḣ ḥ ḧ ḩ ḫ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ ὴ ᾐ Ⱨ
+J j ϳ Ј ј յ Ꭻ Ꮷ ᒍ
+K k ķ ĸ Ƙ ƙ Κ κ К к ќ Қ қ ҝ Ҟ ҟ ҡ ӄ Ꮶ
+M m ɯ ɱ Μ μ М м Ӎ ӎ Ꮇ ᗰ ḿ ṁ ṃ ₥
+N n ñ ń Ņ ņ ň Ɲ Ƞ ɲ ɳ Ν η ν ո ռ ṇ ₦
+P p þ Ƥ ƥ ƿ Ƿ Ρ ρ Р р ք Ꮲ ᑭ ṕ ṗ ₧
+Q q Ɋ ʠ Գ գ զ
+R r ® ŕ ŗ ř Ʀ ȑ ȓ ɼ ɽ ʀ ʳ ʴ ʵ ʶ Γ Г г я Ꭱ Ꮁ Ꮢ ᖇ ṙ ṛ ṝ ṟ
+T t ţ ť Ŧ ŧ ƫ Ƭ ƭ Ʈ Ț ț ʈ Τ τ Т т Ҭ ҭ ṭ
+U u ù ú û ü ũ ū ŭ ů ű ų Ʊ Ʋ ǔ ǖ ǘ ǚ ǜ ʊ ʋ υ ц Ա Մ Ս ս ᘴ ℧
+V v Ѵ ѵ Ꮩ ᐯ
+W w ŵ ɯ ω Ꮃ Ꮤ ᗯ ẁ ẃ ẅ ẇ ẉ ₩
+X x Χ χ Х х Ҳ ҳ ᕁ ᕽ ᙭ ᙮
+Y y ý ÿ ŷ Ƴ ƴ Ȳ ʊ ʸ Υ υ ϋ ύ ϒ ϓ У у Ү ү Ұ ұ Ҷ ҷ Ӌ ӌ ყ Ꭹ Ꮍ ẏ ỳ ỵ ỷ ỹ ὑ ὓ ὕ ὗ ὺ ῠ ῡ
+Z z ź ż ž Ƶ ƶ Ȥ ȥ ʐ Ζ Ꮓ
+Æ æ Ӕ ӕ
+Ø ø Ǿ ǿ
+IJ ij
+Ŀ ŀ
+Œ œ
+Ţ ţ
+ǝ Ə ɘ ə ɚ Ә ә
+Ơ ơ
+2 Ƨ ƨ Ϩ ϩ ᒿ
+! ǃ
+DZ DŽ dz
+dz dž
+LJ lj
+NJ nj
+8 Ȣ ȣ ৪ ੪ ଃ
+Ɵ ɵ θ ϴ Ѳ ѳ Ө ө Ꮎ ⴱ
+? ʔ
+ɸ Φ φ ϕ Ф ф
+Δ δ ᐃ ᕷ
+Λ λ
+Ξ ξ
+Π π П п
+Ψ ψ
+Ж ж Җ җ
+И и Ҋ ҋ
+Л л Ӆ ӆ
+Ы ы
+Я я
+Ѽ ѽ
+Ґ ґ
+Ҽ ҽ Ҿ ҿ
+ա Ա
+բ Բ
+գ Գ
+դ Դ
+ե Ե
+զ Զ
+է Է
+ը Ը
+թ Թ
+ժ Ժ
+ի Ի
+լ Լ
+խ Խ
+ծ Ծ
+կ Կ
+հ Հ
+ձ Ձ
+ղ Ղ
+ճ Ճ
+մ Մ
+յ Յ
+ն Ն
+շ Շ
+ո Ո
+չ Չ
+պ Պ
+ջ Ջ
+ռ Ռ
+ս Ս
+վ Վ
+տ Տ
+ր Ր
+ց Ց
+ւ Ւ
+փ Փ
+ք Ք
+օ Օ
+ֆ Ֆ
+: ։ ׃
+́ ֜ ݇ ॔
+̊ ֯ ஂ ํ ໍ ံ ំ ៓
+̇ ֹ ׁ ׂ ׄ ݁ ं ਂ ં ்
+' ׳
+" ״
+ى ي ی
+̓ ُ
+، ٬
+ٔ ٴ
+ك ک
+ٹ ڻ
+ه ھ ہ ە
+ٻ ې
+ۦ ۧ
+۟ ۬
+٠ ۰
+١ ۱
+٢ ۲
+٣ ۳
+٧ ۷
+٨ ۸
+. ܂
+ܼ ݂
+̣ ़ ় ਼ ઼ ଼
+̠ ॒
+̀ ॓
+9 ৭ ੧ ୨
+ঃ ਃ ః ಃ
+ॆ ੋ
+् ੍ ્
+ऽ ઽ
+ु ુ
+ू ૂ
+२ ૨
+३ ૩
+४ ૪
+८ ૮
+ஐ ஜ ജ
+ஈ ர ா
+ன ை
+ள ௗ
+க ௧
+உ ௨ ഉ
+ச ௪
+எ ௭
+அ ௮
+ய ௰
+௳ ௵
+ஷ ௸
+డ ఢ
+బ భ
+వ ష
+అ ಅ
+ఆ ಆ
+ఇ ಇ
+ఒ ಒ
+ఓ ಓ
+ఔ ಔ
+జ ಜ
+ఞ ಞ
+ణ ಣ
+య ಯ
+ఱ ಱ
+ల ಲ
+౧ ೧
+౨ ೨
+౯ ೯
+ண ണ
+ര റ
+ழ ഴ
+ஶ ശ
+ி ി ീ
+ூ ു ൂ ൃ
+ഞ ൡ
+ข ฃ
+ช ซ
+ฎ ฏ
+ค ด ต
+ฑ ท
+ฆ ม
+า ๅ
+จ ຈ
+ย ຍ
+บ ບ
+ป ປ
+ฝ ຝ
+พ ພ
+ฟ ຟ
+ุ ຸ
+ู ູ
+่ ່ ់
+้ ້
+๊ ໊
+๋ ໋
+་ ༌
+· ᐧ
+ᐡ ᓑ
+ᒐ ᘂ
+ᒉ ᘃ
+ᓓ ᘄ
+ᓚ ᘇ
+ᕃ ᘢ
+ᕆ ᘣ
+ᕊ ᘤ
+Ω ᘯ ᘵ
+ᘮ ᘴ
+អ ឣ
+ิ ិ
+ี ី
+ึ ឹ
+ื ឺ
+ฯ ។
+๚ ៕
+๏ ៙
+๛ ៚
+ᡜ ᢖ
+ ​
+へ ヘ ヘ
+㑇 㑳
+㘎 㘚
+㤘 㥮
+㧐 㩳
+㖈 䎛
+䎬 䎱
+㬻 䐠
+䙌 䙡
+䝼 䞍
+䥇 䦂
+䦛 䦶
+䦟 䦷
+䱷 䲣
+丄 上 仩
+丅 下
+丏 丐
+世 丗 卋
+丘 丠 坵
+丟 丢
+両 两 兩
+久 乆
+乗 乘
+乱 乿 亂
+乾 亁 干 幹 榦 漧
+丌 亓 其
+丼 井
+亘 亙
+亚 亜 亞
+享 亯
+京 亰
+亡 亾 兦
+仙 仚 僊
+五 伍
+伫 佇
+仰 佒
+仏 佛 彿 髴
+伲 你 儞 奶 妳 嬭
+並 併 倂 并 幷 竝
+仑 侖 崘 崙
+价 価 價
+佞 侫
+侣 侶
+伣 俔
+侠 俠
+伩 信
+俁 俣
+伡 俥
+俛 俯 頫
+伥 倀
+伜 倅
+俩 倆
+俫 倈
+仓 倉
+个 個 箇
+们 們
+仿 倣 彷 髣
+伦 倫
+俱 倶
+俭 倹 儉
+値 值
+伟 偉
+侧 側
+侦 偵 遉
+偷 偸 婾 媮
+俻 偹 備 备
+伪 偽 僞
+伧 傖
+伞 傘 繖
+俲 傚 効 效
+佣 傭
+偬 傯
+传 傳
+伛 傴
+债 債
+伤 傷
+倾 傾
+偻 僂
+仅 僅
+佥 僉
+侨 僑
+仆 僕
+侥 僥 儌 徺
+偾 僨
+僣 僭
+仪 儀
+俊 儁
+侬 儂
+亿 億
+侩 儈
+傻 儍
+傤 儎
+傧 儐
+俦 儔
+侪 儕
+偿 償
+优 優
+储 儲
+倏 儵
+俪 儷
+傩 儺
+傥 儻
+俨 儼
+儿 児 兒
+兌 兑
+兎 兔
+兖 兗
+俞 兪 鄃
+內 内
+冊 册
+冐 冒
+净 凈 浄 淨
+冻 凍
+准 凖 準
+凛 凜
+凡 凢 凣
+凯 凱
+凭 凴 憑
+兇 凶
+函 凾 肣
+刀 刂
+刃 刄
+刊 刋
+删 刪
+別 别 彆 憋
+创 刱 剙 創
+倦 券 劵
+刦 刼 劫
+刺 刾 朿
+刴 剁
+刭 剄
+则 則
+克 剋 尅
+刹 剎
+刬 剗 剷 鏟 铲
+倳 剚
+刚 剛
+剑 剣 劍 劒 劔 鐱
+剂 剤 劑
+剝 剥
+剐 剮
+剩 剰 賸
+剀 剴
+刮 劀 颳
+划 劃
+剳 劄 扎 札 箚 紥 紮
+剧 劇
+刘 劉
+刽 劊
+剿 劋 勦
+刿 劌
+働 动 動
+劳 労 勞
+劲 勁
+劾 勓
+勖 勗
+务 務
+勋 勛 勲 勳
+势 勢
+劝 勧 勸
+勚 勩
+劢 勱
+励 勵
+勻 匀
+匢 匫
+匦 匭
+匮 匱 鐀
+区 區
+仟 千 韆
+劦 协 協 恊
+卍 卐
+卆 卒
+单 単 單
+佔 占
+却 卻
+即 卽
+厍 厙
+厅 厛 庁 廰 廳
+厕 厠 廁
+历 厤 暦 曆 歴 歷
+厌 厭 猒
+厂 厰 廠
+厉 厲
+严 厳 嚴
+厣 厴
+叁 参 參 叄 葠 蓡
+叜 叟
+丛 叢 欉 藂
+勾 句
+仝 同 衕
+吳 吴 呉
+吕 呂 郘
+吻 呅 呡
+吿 告
+吶 呐
+吞 呑
+呪 咒
+偺 咱 喒
+呙 咼
+呱 哌
+员 員
+呗 唄
+哑 唖 啞 痖 瘂
+吣 唚
+启 啓 啔 啟
+咷 啕
+啖 啗 噉 嚪
+唡 啢
+哲 喆
+㖞 喎
+唤 喚
+唧 喞
+吅 喧 諠
+丧 喪
+吃 喫
+乔 喬
+哟 喲
+喩 喻
+呛 嗆
+啬 嗇
+唝 嗊
+吗 嗎
+呜 嗚
+唢 嗩
+呵 嗬 訶 诃
+哔 嗶
+叫 嘂
+叹 嘆 歎
+傮 嘈
+喽 嘍
+呼 嘑 虖 謼
+啯 嘓
+呕 嘔
+啧 嘖
+唛 嘜
+啸 嘨 嘯
+哗 嘩 譁
+唠 嘮
+叽 嘰
+喟 嘳 欳
+咀 嘴
+哓 嘵
+呒 嘸
+啴 嘽
+嘘 噓
+噅 噕
+咝 噝
+哒 噠
+哝 噥
+哕 噦
+噐 器
+嗳 噯
+哙 噲
+喷 噴 歕
+吨 噸
+喑 噾 瘖
+咛 嚀
+吓 嚇
+哜 嚌
+嘗 嚐 尝 甞
+嚏 嚔
+噜 嚕
+啮 嚙 囓 齧
+咽 嚥
+呖 嚦
+咙 嚨
+向 嚮 曏
+亸 嚲
+喾 嚳
+嘤 嚶 譻
+嚣 嚻 囂
+啜 嚽
+啭 囀
+嗫 囁
+冁 囅
+呓 囈 寱
+啰 囉
+嘱 囑
+囘 回 囬 廻 廽 迴 逥
+团 団 團 糰
+冏 囧
+囪 囱
+囲 围 圍
+囯 国 圀 國
+図 图 圖
+円 圆 圎 圓
+囵 圇
+圈 圏
+园 園
+压 圧 壓
+凷 块 塊
+坏 坯 壊 壞 瘣
+垄 垅 壟 壠
+垛 垜
+圻 垠
+圣 垩 堊 聖
+坝 垻 壩
+垂 埀
+埒 埓
+垭 埡
+坤 堃
+坚 堅
+垴 堖
+埚 堝
+垚 堯 尧 尭
+场 場 塲
+垲 塏
+埘 塒
+凃 塗 涂
+冢 塚
+坞 塢
+埙 塤 壎
+塡 填
+塜 塳
+堋 塴
+堑 塹
+垫 墊
+塈 墍
+塔 墖
+坠 墜
+増 增
+地 墬
+堕 墮 墯
+坟 墳
+墙 墻 牆
+垦 墾
+坛 壇 罈 罎
+垱 壋
+堧 壖
+垒 壘 壨
+圹 壙
+垆 壚 罏
+坜 壢
+喦 壧 岩 嵒 巌 巖 碞 礹
+塆 壪
+壮 壯
+一 壱 壹 弌
+卖 売 賣
+壶 壷 壺
+壸 壼
+墫 壿 樽 罇 蹲
+壽 夀 寿
+变 変 變
+卯 夘 戼
+多 夛
+亱 夜
+够 夠
+伙 夥
+伕 夫
+侇 夷
+夹 夾 裌
+匳 奁 奩
+奂 奐
+奥 奧
+奖 奨 奬 獎
+夺 奪 敓
+奋 奮
+䚶 妖 祅 訞
+妆 妝
+妒 妬
+姉 姊
+姍 姗
+妊 姙
+奸 姦
+侄 姪
+姫 姬
+妍 姸
+奼 姹
+喃 娚 諵
+姢 娟
+娛 娯 娱
+娿 婀
+娄 婁
+倇 婉
+姻 婣
+妇 婦
+娅 婭
+姐 媎
+娲 媧
+保 媬
+妫 媯 嬀
+媪 媼
+妈 媽
+妪 嫗
+妩 嫵
+媠 嫷
+媌 嫹
+娴 嫺 嫻
+婳 嫿
+媭 嬃
+娆 嬈
+婵 嬋
+娇 嬌
+嫱 嬙
+嫋 嬝 袅 裊 褭
+嫒 嬡
+娘 嬢 孃
+嫔 嬪
+婴 嬰
+嬤 嬷
+婶 嬸
+娈 孌
+孙 孫
+孚 孵
+孳 孶
+学 學 斈
+孼 孽
+孪 孿
+冗 宂
+侒 安
+吰 宏
+冝 宜
+实 実 實
+宫 宮
+傢 家
+冤 寃
+宻 密
+冦 寇
+冨 富
+宁 寍 寕 寜 寧
+宽 寛 寬
+寑 寝 寢
+嗼 寞
+审 審
+写 寫
+宝 寳 寶
+宠 寵
+将 將
+专 專
+寻 尋
+对 對
+导 導
+尒 尓 尔 爾
+塵 尘
+尙 尚
+尟 尠 鮮 鲜
+尪 尫
+尴 尷
+儘 尽 盡
+侷 局 跼
+屆 届 艐
+尸 屍
+屃 屓 屭
+屏 屛 庰
+屡 屢
+层 層
+屦 屨
+属 屬
+出 岀 齣
+亗 岁 歲 歳
+冈 岗 岡 崗
+坡 岥
+岭 岺 嶺
+峨 峩
+峯 峰
+岘 峴
+岛 島 嶋 嶌
+峡 峽
+崇 崈
+华 崋 華
+崃 崍
+埼 崎 碕
+岷 崏
+崐 崑 昆 晜
+崕 崖
+峥 崢
+岽 崬
+嵆 嵇
+岚 嵐
+嵏 嵕
+嵯 嵳
+嵝 嶁
+崭 嶄
+岖 嶇
+嵚 嶔
+崂 嶗
+峤 嶠
+峣 嶢
+峄 嶧
+峃 嶨
+峱 嶩
+崄 嶮
+嵘 嶸
+屿 嶼
+岳 嶽
+岿 巋
+峦 巒
+巅 巓 巔
+巢 巣 漅
+巯 巰
+卮 巵
+卷 巻 捲
+巺 巽
+佈 布
+帅 帥
+师 師
+带 帯 帶
+帡 帲
+帐 帳 賬 账
+帧 幀
+冪 幂 羃
+帏 幃
+帮 幇 幚 幫 縍 鞤
+帼 幗 蔮
+帻 幘
+幕 幙
+帜 幟
+币 幣 幤
+帱 幬
+倖 幸
+么 幺 庅 麼 麽
+几 幾
+仄 庂
+广 広 廣
+厎 底
+坫 店
+厐 庞 龎 龐
+坐 座
+库 庫
+庶 庻 謶
+寓 庽
+庙 庿 廟
+厢 廂
+废 廃 廢 癈
+厩 廄 廏 廐
+厦 廈
+亷 廉 覝
+庼 廎
+席 廗 蓆
+厨 廚
+厮 廝
+庑 廡
+廩 廪 禀 稟
+庐 廬
+巡 廵
+乃 廼 迺
+卄 廿
+二 弍 貮 貳 贰
+弑 弒
+吊 弔
+冞 弥 彌 瀰
+弪 弳
+张 張
+強 强 彊
+弹 弾 彈
+发 彂 發 髪 髮
+彉 彍
+弯 彎
+彐 彑
+帰 归 歸 皈
+噹 当 當
+彔 录 錄 録
+匯 彙 彚 汇 滙
+彛 彜 彝 彞
+彟 彠
+彥 彦
+份 彬
+彨 彲
+往 徃 迬
+佷 很
+佪 徊
+后 後
+径 徑 迳 逕
+从 従 從
+徕 徠
+复 復 複 覆
+傍 徬
+傜 徭
+征 徴 徵
+徳 德 悳 惪
+彻 徹
+仁 忈
+刌 忖
+应 応 應 譍
+唸 念
+佝 怐
+忣 急
+匆 怱 悤
+他 怹
+怳 恍
+恆 恒
+卹 恤 賉
+噁 恶 悪 惡
+吝 悋
+恂 悛
+悅 悦
+悞 悮 誤 误
+忰 悴
+怅 悵
+悹 悺
+凄 悽 淒
+悐 惕
+恵 惠 憓
+恼 惱
+恽 惲
+恻 惻
+恪 愘
+惬 愜
+媿 愧
+悫 愨 慤
+怆 愴
+恺 愷
+博 愽
+忾 愾
+恿 慂
+态 態
+愠 慍
+愼 慎 昚 眘
+剽 慓
+惨 慘
+惭 慙 慚
+恸 慟 憅
+惯 慣
+怄 慪
+怂 慫
+悭 慳
+慑 慴 懾
+嫞 慵
+庆 慶
+忧 憂
+惫 憊
+怜 憐
+愦 憒
+慭 憖
+喜 憙
+惮 憚
+愤 憤
+憇 憩
+悯 憫
+怃 憮
+宪 憲
+忆 憶
+儆 憼
+勤 懃 瘽
+恳 懇
+怿 懌
+怀 懐 懷 褢 褱
+嬾 懒 懶
+懍 懔
+怼 懟
+懑 懣
+懦 懧
+恹 懨
+惩 懲
+悬 懸
+忏 懺
+惧 懼
+恋 戀
+戆 戇
+戋 戔
+戛 戞
+战 戦 戰
+戗 戧
+戩 戬
+戏 戯 戱 戲
+戶 户 戸
+戻 戾 盭
+執 执 瓡
+于 扵 於
+刔 抉
+伔 抌
+報 报
+扺 抵 牴 羝 觝
+伸 抻
+払 拂
+抚 拊 撫
+抛 拋
+抜 拔
+拕 拖
+抃 拚
+拜 拝
+儗 拟 擬
+扩 拡 擴
+択 择 擇
+拏 拿
+挅 挆
+举 挙 擧 舉
+挟 挾
+八 捌
+扞 捍 擀
+拽 捙
+挩 捝
+扪 捫
+拠 据 據
+总 捴 搃 摠 総 縂 總
+扫 掃
+抡 掄
+㧏 掆
+挜 掗
+挣 掙
+挂 掛 罣
+匊 掬
+拣 揀
+扬 揚 颺 飏
+换 換
+揪 揫
+掲 揭
+挥 揮
+愋 援
+插 揷
+偝 揹 背
+揯 搄
+捁 搅 撹 攪
+冓 搆 构 構
+㩁 搉 榷
+扠 搋
+损 損
+揺 搖 摇
+捣 搗 擣
+捜 搜 騪
+扼 搤 搹
+捶 搥
+扇 搧
+搨 搭 撘
+掏 搯
+揾 搵
+抢 搶
+捂 摀
+扛 摃
+挕 摄 攝
+捈 摅 攄
+掴 摑
+掼 摜
+搂 摟
+拓 摭
+挚 摯
+抠 摳
+抟 摶
+折 摺
+掺 摻
+挳 摼
+击 撃 擊
+掘 撅
+捞 撈
+挦 撏
+撐 撑 牚
+挠 撓
+捻 撚
+挢 撟 譑
+掸 撣
+拨 撥
+扯 撦
+扑 撲 攴
+揿 撳
+挞 撻
+挝 撾
+捡 撿
+拥 擁
+掳 擄
+挡 擋
+㧟 擓
+担 擔
+挤 擠
+擪 擫
+摈 擯
+拧 擰
+搁 擱
+掷 擲
+撷 擷
+摆 擺 襬
+擞 擻
+撸 擼
+扰 擾
+撵 攆
+拢 攏
+攅 攒 攢
+拦 攔
+撄 攖
+搀 攙
+撺 攛
+携 攜
+挛 攣
+摊 攤
+揽 攬
+搘 支
+収 收
+合 敆 閤
+叙 敍 敘
+敎 教
+敠 敪
+愍 敯
+敌 敵
+尃 敷
+数 數
+夐 敻
+敛 斂 歛
+敩 斅 斆
+亝 斉 齊 齐
+斋 斎 齋
+庾 斔 斞
+斓 斕
+亹 斖
+斩 斬
+断 斷
+旌 旍
+旂 旗
+既 旣
+恉 旨
+旭 旮
+反 昄
+升 昇 陞
+昊 昦
+是 昰
+时 時
+晃 晄
+晉 晋
+昼 晝
+䀿 晣
+晚 晩
+晓 暁 曉
+晕 暈
+晖 暉
+映 暎
+晻 暗 闇
+旸 暘
+暂 暫 蹔
+昵 暱
+了 暸 瞭
+暨 曁 臮 蔇
+晔 曄 曅
+昙 曇
+昲 曊
+暧 曖
+旷 曠
+叠 曡 疉 疊 迭
+昽 曨
+晒 曬
+曳 曵
+㫚 曶
+书 書
+曹 曺
+会 會
+朖 朗 烺
+朞 期
+望 朢
+夲 本
+朮 术 術
+朵 朶
+圬 杇
+來 来
+傑 杰
+东 東
+松 枀 鬆
+朼 枇
+拐 枴
+杮 枾 柿
+奈 柰
+查 査 楂
+柩 柾
+柵 栅
+枣 栆 棗
+墂 标 標
+尌 树 樹
+契 栔
+慄 栗
+挍 校
+柏 栢
+桑 桒
+杯 桮 盃
+柒 桼 漆
+杆 桿
+杍 梓
+栀 梔
+枧 梘
+条 條
+枭 梟 鷍
+夢 梦
+梲 棁
+弃 棄
+棊 棋 碁
+枨 棖
+栋 棟
+㭎 棡
+栈 棧 轏
+栖 棲
+梾 棶
+桌 棹 櫂
+桠 椏
+检 検 檢
+撱 椭 楕 橢
+棕 椶
+枮 椹
+杨 楊
+揆 楑
+枫 楓
+椘 楚 檚
+枏 楠
+桢 楨
+业 業
+梅 楳
+极 極
+乐 楽 樂
+楡 榆
+桹 榔
+桀 榤
+搾 榨 醡
+杩 榪
+栄 榮 荣
+榅 榲
+桤 榿
+核 槅 覈
+枪 槍
+杠 槓
+样 様 樣
+槇 槙
+榎 槚 檟
+梹 槟 檳
+梿 槤
+椠 槧
+椁 槨
+概 槪
+桨 槳
+椝 槼 規 规
+桩 樁 蹖
+枞 樅
+梁 樑
+楼 樓
+朻 樛
+枢 樞
+榝 樧 蔱
+权 権 權
+桪 樳
+朴 樸
+桦 樺
+榛 樼 獉
+椫 樿
+桥 橇 橋 鞒 鞽
+桡 橈
+樘 橕
+机 機
+横 橫
+樐 橹 櫓 艣 艪
+槥 檅
+槜 檇
+柽 檉
+档 檔
+枰 檘
+桧 檜
+樯 檣
+檁 檩
+梼 檮
+台 檯 籉 臺 颱
+柠 檸
+槛 檻 轞
+檃 檼 櫽
+柜 櫃
+榈 櫚
+栉 櫛
+椟 櫝
+橼 櫞
+栎 櫟
+橱 櫥
+槠 櫧
+栌 櫨
+枥 櫪
+橥 櫫
+榇 櫬 藽
+栊 櫳
+榉 櫸
+樱 櫻
+栏 欄 欗
+椤 欏
+栾 欒
+榄 欖
+棂 欞
+懽 欢 歓 歡 讙 驩
+慾 欲
+嗽 欶
+欧 歐
+欤 歟
+岐 歧
+步 歩
+歹 歺
+夭 殀
+歿 殁
+残 殘
+殒 殞
+殇 殤
+㱮 殨
+殚 殫
+僵 殭
+殓 殮
+殡 殯
+歼 殲
+杸 殳
+慇 殷
+杀 殺 閷
+壳 殻 殼
+毀 毁 譭
+敲 毃
+殴 毆
+医 毉 醫
+毎 每
+毗 毘
+斃 毙
+毤 毻
+毵 毿
+毡 氈
+氇 氌
+气 氣
+氢 氫
+氩 氬
+氲 氳
+冰 氷
+氾 汎 泛
+汙 汚 污
+汏 汰 溙
+决 決
+沈 沉 渖 瀋
+冱 沍
+冲 沖 盅 祌 衝 衶
+伂 沛
+沒 没
+沱 沲
+况 況
+桴 泭
+泊 泺 濼
+沢 泽 澤
+冽 洌
+汜 洍
+伊 洢
+泄 洩 渫
+洁 洯 潔
+汹 洶
+冾 洽
+泒 派
+嚠 浏 瀏
+汻 浒 滸
+浃 浹
+泾 涇
+泪 涙 淚
+涗 涚
+凉 涼
+汸 淓
+泦 淗
+浙 淛
+倪 淣
+凌 淩
+沦 淪
+婬 淫
+涞 淶
+凊 淸 清
+浅 淺
+济 済 濟
+涉 渉
+淵 渊 渕 灁
+涩 渋 澀 澁 濇 瀒
+淥 渌
+巉 渐 漸
+涣 渙
+减 減
+沨 渢
+涡 渦 濄
+测 測
+渇 渴
+浑 渾
+湆 湇
+凑 湊
+浈 湞
+涌 湧
+汤 湯
+沩 溈 潙
+厵 源
+沟 溝
+温 溫
+浉 溮
+泝 溯 遡
+涢 溳
+尿 溺
+湿 溼 濕
+沧 滄
+汽 滊
+涤 滌
+満 满 滿
+浜 滨 濱
+沪 滬
+滞 滯
+渗 滲
+卤 滷 鹵
+浐 滻
+滚 滾
+渔 漁
+溇 漊
+溉 漑
+沤 漚
+汉 漢
+涟 漣
+洼 漥 窪
+渍 漬
+涨 漲
+溆 漵
+浆 漿
+漎 潀 潨
+滫 潃
+漱 潄
+泼 潑
+潛 潜 濳
+润 潤
+溱 潧
+浔 潯
+溃 潰
+滗 潷
+涠 潿
+澂 澄
+浇 澆
+涝 澇
+溜 澑
+浩 澔
+涧 澗
+潟 澙
+渑 澠
+浣 澣
+滪 澦
+泶 澩
+泠 澪
+漫 澫
+浍 澮
+淀 澱
+淡 澹
+㳠 澾
+浊 濁
+浓 濃
+沵 濔
+泞 濘
+溁 濚
+懞 濛 矇 蒙
+浕 濜
+涛 濤
+滥 濫
+浚 濬
+潍 濰
+溅 濺
+滤 濾
+漾 瀁
+澛 瀂
+滢 瀅
+渎 瀆
+汪 瀇
+泻 瀉
+濒 瀕
+泸 瀘
+沥 瀝
+潇 瀟
+潆 瀠
+濻 瀢
+潴 瀦
+泷 瀧
+濑 瀨 瀬
+潋 瀲
+澜 瀾
+沣 灃
+滠 灄
+潅 灌
+洒 灑
+滟 灔 灧 灩
+漓 灕
+滩 灘
+灏 灝
+湾 灣
+滦 灤
+滅 灭
+光 灮 炚 烡
+災 灾 烖
+炅 炔
+匟 炕
+曌 炤 照
+炮 炰 砲 礮
+昺 炳
+奌 点 點
+为 為 爲
+乌 烏
+灴 烘
+炯 烱
+烃 烴
+烉 焕 煥
+炃 焚
+无 無
+惸 焭 煢 茕
+炼 煉 鍊
+炜 煒
+暖 煖
+烟 煙 菸
+烬 煡 燼
+烦 煩
+炀 煬
+煑 煮
+煴 熅
+炝 熗
+熈 熙
+热 熱
+熹 熺
+炽 熾
+烨 燁
+焰 燄
+焌 燇
+灯 燈
+炖 燉
+烧 燒
+烂 燗 爛
+烫 燙
+煚 燛
+焖 燜
+営 營 营
+煰 燥
+灿 燦
+烛 燭
+煨 燰
+烩 燴
+燣 燷
+熏 燻
+焘 燾
+曜 燿 耀
+烁 爍
+炉 爐 鑪
+燨 爔
+爁 爦
+燯 爧
+争 爭
+愛 爱
+爷 爺
+俎 爼
+慡 爽
+丬 爿
+床 牀
+榜 牓
+牍 牘
+它 牠
+氂 牦 犛 髦
+牵 牽
+犁 犂
+奔 犇 逩
+犊 犢
+牺 犧
+状 狀
+狂 狅
+仲 狆
+佬 狫
+狭 狹
+狈 狽
+狰 猙
+犹 猶
+狲 猻
+狯 猾 獪
+犸 獁
+呆 獃 騃
+狱 獄
+狮 獅
+僮 獞
+狷 獧
+独 獨
+猃 獫 玁
+狝 獮
+狞 獰
+猎 獵
+犷 獷
+兽 獸
+獭 獺
+献 獻
+猕 獼
+猡 玀
+妙 玅
+兹 玆 茲
+玟 珉 琝
+珍 珎
+圭 珪
+佩 珮
+现 現
+毬 球
+彫 琱 雕 鵰
+珲 琿
+珶 瑅
+玮 瑋
+玚 瑒 璗
+琐 瑣
+玛 瑪
+琅 瑯
+玱 瑲
+瑤 瑶
+琍 璃
+琁 璇 璿
+琏 璉
+琼 璚 瓊
+琎 璡
+玑 璣
+瑷 璦
+珰 璫
+环 環
+玙 璵
+瑸 璸
+玺 璽
+珑 瓏
+璎 瓔
+瓒 瓚
+瓶 甁 缾
+瓷 甆
+瓯 甌
+瓮 甕 罋
+甇 甖 罂 罃 罌
+甛 甜
+产 產 産
+囌 甦 苏 蘇 蘓
+圢 町
+氓 甿
+暢 畅
+亩 畆 畝 畮
+堺 界 畍
+甽 畎
+愄 畏
+畄 留
+毕 畢 罼 鏎
+略 畧
+画 畫 畵
+畬 畭 畲
+异 異
+墥 畽 疃
+畴 疇
+匹 疋
+恫 痌
+痉 痙
+疿 痱
+淋 痲 痳 蔴 麻
+悸 痵
+疪 痹 痺
+愈 瘉 癒
+疯 瘋
+疡 瘍
+痪 瘓
+瘗 瘞
+疮 瘡
+疟 瘧
+瘆 瘮
+疭 瘲
+瘘 瘺 瘻
+疗 療
+痨 癆
+痫 癇
+瘅 癉
+疠 癘
+癛 癝
+瘪 癟
+痴 癡
+痒 癢
+疖 癤
+症 癥
+疬 癧
+癞 癩
+瘨 癫 癲
+癣 癬
+瘿 癭
+瘾 癮
+痈 癰
+瘫 癱
+皁 皂
+皋 皐
+暠 皓 皜
+晥 皖
+皑 皚
+皎 皦
+疱 皰
+皲 皸
+皱 皺
+皷 皼 鼓
+盇 盍
+琖 盏 盞 醆
+塩 盐 鹽
+洀 盘 盤
+盗 盜
+监 監
+卢 盧
+潒 盪 荡 蕩 蘯
+盲 盳
+眞 真
+众 眾 衆
+困 睏
+睁 睜
+睐 睞
+眷 睠
+睪 睾
+叡 睿
+偢 瞅
+眯 瞇
+眍 瞘
+䁖 瞜
+瞒 瞞
+瞚 瞬
+瞆 瞶
+睑 瞼
+矈 矏
+眬 矓
+瞰 矙
+瞩 矚
+榘 矩
+矫 矯
+揅 研 硏
+柱 砫
+朱 硃
+硁 硜
+硖 硤
+砗 硨
+峺 硬
+塙 确 確 碻 礭
+砚 硯
+椗 碇
+砕 碎
+砣 碢
+硙 碨 磑
+硕 碩
+砧 碪
+砀 碭
+瑙 碯
+掽 碰 踫
+硷 碱 礆 险 險 鹼
+砜 碸
+码 碼
+滑 磆
+砖 磚
+碌 磟
+硵 磠
+碜 磣
+磊 磥
+碛 磧
+矶 磯
+燐 磷
+硗 磽
+硚 礄
+础 礎
+碍 礙
+碝 礝
+矿 礦 鑛
+砺 礪
+砾 礫
+矾 礬
+砻 礱 鑨
+礤 礸
+柴 祡
+旅 祣
+祝 祩
+祿 禄
+祸 禍
+祯 禎
+祎 禕
+祃 禡
+祺 禥
+御 禦
+禅 禪
+礼 禮
+祢 禰
+祷 禱
+礿 禴
+厶 私
+禿 秃
+年 秊
+祇 秖
+祕 秘
+偁 称 稱
+希 稀
+秆 稈
+稅 税
+棱 稜
+秸 稭 鞂
+种 種
+稲 稻
+乩 稽
+稾 稿
+䅟 穇
+稚 穉
+稑 穋
+稣 穌
+积 積
+秋 穐 鞦 龝
+穂 穗 穟
+秾 穠
+穑 穡
+秽 穢 薉
+稳 穩
+獲 穫 获
+穞 穭
+岤 穴
+挖 穵
+宇 穻
+窓 窗
+堷 窨
+窝 窩
+寠 窭 窶
+穷 窮
+窑 窯 窰
+窎 窵
+窥 窺 闚
+窜 竄
+窍 竅
+窦 竇
+灶 竈
+窃 竊
+奇 竒
+俟 竢
+竑 竤
+竖 竪 豎
+竞 競 竸
+竺 笁
+巴 笆
+咲 笑
+矢 笶
+牋 笺 箋
+笔 筆
+笻 筇
+笅 筊
+斤 筋 觔
+笋 筍
+畣 答 荅
+策 筞 筴
+笕 筧
+筒 筩
+祘 筭 算
+笮 筰
+筱 筿 篠
+竾 箎 篪
+筝 箏
+拑 箝 鉗 钳
+棰 箠
+筦 管
+筑 築
+箧 篋
+筼 篔
+箬 篛
+笃 篤
+筛 篩
+笼 篭 籠
+筣 篱 籬
+彗 篲
+筚 篳
+笛 篴
+箦 簀
+筘 簆
+箳 簈
+篓 簍
+篡 簒
+箫 簘 簫
+箪 簞
+简 簡
+篑 簣
+檐 簷
+筜 簹
+篝 簼
+签 簽 籖 籤
+帘 簾
+篮 籃
+筹 籌
+籐 籘 藤
+箓 籙
+篯 籛
+箨 籜
+篽 籞
+籁 籟
+笾 籩
+簖 籪
+箩 籮
+吁 籲
+番 籵 蹯
+秈 籼
+秶 粢
+粤 粵
+粋 粹
+稗 粺
+粈 糅
+稰 糈
+粽 糉 糭
+爢 糜
+糁 糝
+粪 糞
+穅 糠
+粮 糧
+粝 糲
+籴 糴
+糱 糵
+粜 糶
+丝 糸 糹 絲 纟
+係 系 繫
+糺 糾 纠
+帋 紙 纸
+榡 素
+䌷 紬 綢 绸
+弦 絃
+紲 絏 绁
+絋 絖 纊 纩
+毧 絨 绒 羢
+累 絫 纍
+絕 絶 绝
+紖 絼 纼
+紼 綍 绋
+捆 綑
+経 經 经
+棨 綮
+彩 綵
+紧 緊
+綏 緌 绥
+綠 緑 绿
+緒 緖 绪
+綫 線 线 缐
+緣 縁 缘
+緪 縆
+緼 縕 缊 褞
+絛 縚 縧 绦
+县 縣
+摍 縮 缩
+縦 縱 纵
+孅 縴 纎 纖 纤
+絷 縶 馽
+勣 績 绩
+緐 繁
+綳 繃 绷
+綉 繍 繡 绣
+絵 繢 繪 绘 缋
+繈 繦
+縄 繩 绳
+継 繼 继
+纏 纒 缠
+才 纔
+纉 纘 缵
+紆 纡
+紅 红
+紂 纣
+紇 纥
+約 约
+級 级
+紈 纨
+紀 纪
+紉 纫
+緯 纬
+紜 纭
+紘 纮
+純 纯
+紕 纰
+紗 纱
+綱 纲
+納 纳
+紝 纴
+綸 纶
+紛 纷
+紋 纹
+紡 纺
+紵 纻
+紐 纽
+紓 纾
+紺 绀
+紱 绂
+練 练
+組 组
+紳 绅
+細 细
+織 织
+終 终
+縐 绉
+絆 绊
+絀 绌
+紹 绍
+繹 绎
+紿 绐
+綁 绑
+結 结
+絝 绔
+繞 绕 遶
+絰 绖
+絎 绗
+給 给
+絢 绚
+絳 绛
+絡 络
+絞 绞
+統 统
+綆 绠
+綃 绡
+絹 绢
+綌 绤
+綈 绨
+綾 绫
+續 续
+綺 绮
+緋 绯
+綽 绰
+緔 绱
+緄 绲
+維 维
+綿 绵
+綬 绶
+綯 绹
+綹 绺
+綣 绻
+綜 综
+綻 绽
+綰 绾
+綴 缀
+緇 缁
+緙 缂
+緗 缃
+緘 缄
+緬 缅
+纜 缆
+緹 缇
+緲 缈
+緝 缉
+緦 缌
+綞 缍
+緞 缎
+緶 缏
+緱 缑
+縋 缒
+緩 缓
+締 缔
+縷 缕
+編 编
+緡 缗
+縉 缙
+縛 缚
+縟 缛
+縝 缜
+縫 缝
+縗 缞
+縞 缟
+縭 缡 褵
+縊 缢
+縑 缣
+繽 缤
+縹 缥
+縵 缦
+縲 缧
+纓 缨
+繆 缪
+繅 缫
+纈 缬
+繚 缭
+繕 缮
+繒 缯
+繮 缰 韁
+繾 缱
+繰 缲
+繯 缳
+繳 缴
+卸 缷
+堈 缸
+網 网
+罘 罦
+寘 置
+罚 罰 罸
+傌 罵 駡 骂
+罢 罷
+罶 羀
+罥 羂
+罗 羅
+罴 羆
+羁 羇 羈 覉 覊
+媺 美
+义 羛 義
+羣 群
+羟 羥
+羡 羨
+羮 羹
+翄 翅 翨
+习 習
+翆 翠
+纛 翢
+翚 翬
+翭 翵
+翱 翶 翺
+翘 翹
+繙 翻 飜
+翙 翽
+老 耂
+攷 考
+耇 耈 耉
+端 耑
+秏 耗
+秐 耘
+刞 耝
+枷 耞
+借 耤 藉
+耧 耬
+耢 耮
+櫌 耰
+恥 耻
+婿 聟
+联 聨 聫 聮 聯
+聡 聪 聰
+声 聲
+耸 聳
+听 聴 聼 聽
+聩 聵
+聂 聶
+职 職
+聍 聹
+聋 聾
+聿 肀
+粛 肃 肅
+四 肆
+宍 肉
+疘 肛
+朌 肦 頒 颁
+肯 肻
+冑 胄
+肺 胇
+朐 胊
+朏 胐
+肢 胑
+勝 胜
+縃 胥
+朧 胧
+肐 胳
+㬵 胶 膠
+胷 胸
+朓 脁
+胁 脅 脇
+脈 脉
+胫 脛
+唇 脣
+朘 脧
+修 脩
+脫 脱
+胀 脹
+胼 腁
+倎 腆
+肾 腎
+胨 腖
+傶 腠
+脶 腡
+脑 腦
+肿 腫
+脚 腳
+肠 腸 膓
+腽 膃
+嗉 膆
+瘠 膌
+腘 膕
+肤 膚
+䏝 膞
+朣 膧
+腻 膩
+脆 膬
+羶 膻
+胆 膽
+脍 膾
+脓 膿
+肊 臆
+腊 臈 臘
+脸 臉
+脐 臍
+膑 臏 髌 髕
+膘 臕
+胭 臙
+胪 臚
+脏 臟 髒
+脔 臠
+臜 臢
+卧 臥
+临 臨
+殠 臭
+緻 致
+抭 舀
+舃 舄
+与 與
+兴 興
+旧 舊
+捨 舍 舎
+檥 舣 艤
+舡 舩 船
+桁 航
+柁 舵
+舶 艊
+舱 艙
+舰 艦
+舻 艫
+艰 艱
+艳 艶 艷 豔
+兿 艺 蓺 藝
+節 节
+羋 芈
+笀 芒
+刍 芻
+刈 苅
+芀 苕
+芶 苟
+瘔 苦
+苎 苧
+偀 英
+範 范
+茅 茆
+塋 茔
+繭 茧
+汒 茫
+艸 草 騲
+荆 荊
+茘 荔
+庄 荘 莊
+滎 荥
+犖 荦
+熒 荧
+廕 荫 蔭
+梪 荳 豆
+荇 莕
+茎 莖
+荚 莢
+苋 莧
+瑩 莹
+茻 莽
+苽 菇 菰
+苿 菋
+渮 菏
+果 菓
+卜 菔 蔔
+堇 菫 蓳
+庵 菴
+帚 菷
+春 萅
+苌 萇
+莱 萊 郲
+荽 萎
+荠 萕 薺
+縈 萦
+万 萬
+萱 萲
+荝 萴
+莴 萵
+菹 葅
+叶 葉
+菅 葌
+荭 葒
+着 著
+盖 葢 蓋
+荮 葤
+苇 葦
+荸 葧
+塟 葬
+椴 葮
+药 葯 薬 藥
+荤 葷 蔒
+莼 蒓 蓴
+莳 蒔
+莅 蒞
+苍 蒼
+荪 蓀
+簑 蓑
+莲 蓮
+苁 蓯
+荜 蓽
+菱 蔆
+蓘 蔉
+粗 蔍 觕 麁 麄 麆 麤
+蒌 蔞
+蒋 蔣
+葱 蔥
+茑 蔦
+蒍 蔿
+荨 蕁
+萌 蕄
+蒇 蕆
+橤 蕊 蕋 蘂
+荞 蕎
+荬 蕒
+芸 蕓
+莸 蕕
+荛 蕘
+萼 蕚
+蒉 蕢
+芜 蕪
+董 蕫
+萧 蕭
+稍 蕱
+蓣 蕷
+蕰 薀
+荟 薈
+蓟 薊
+芗 薌
+蔑 薎 衊
+姜 薑
+蔷 薔
+荙 薘
+剃 薙
+蕵 薞
+莶 薟
+荐 薦
+萨 薩
+籔 薮 藪
+薫 薰
+蓝 藍
+荩 藎
+蔵 藏
+蕅 藕
+蔾 藜
+荻 藡
+籓 藩
+䓖 藭
+蕴 藴 蘊
+苈 藶
+薯 藷
+蕏 藸
+蔼 藹 譪
+蔺 藺
+萚 蘀
+蕲 蘄
+芦 蘆
+苹 蘋
+蘏 蘔
+櫱 蘖
+檗 蘗
+藓 蘚
+菊 蘜
+蔹 蘞
+茏 蘢
+花 蘤
+兰 蘭
+蓠 蘺
+櫐 蘽
+萝 蘿
+蘷 虁
+慮 虑
+处 處
+虚 虛
+虏 虜
+号 號 譹
+暴 虣
+亏 虧
+虬 虯
+蘬 虺
+硥 蚌
+痐 蚘 蛔 蜖
+蚔 蚳
+蛄 蛌
+蛩 蛬
+蛱 蛺
+蜃 蜄
+蚬 蜆
+蜑 蜒
+蛻 蜕
+瘑 蜗 蝸
+蚣 蜙
+蚋 蜹
+蛪 蜺 霓
+蚀 蝕
+猬 蝟
+虾 蝦
+虱 蝨
+猿 蝯
+玳 蝳
+蜨 蝶
+蜋 螂
+蛳 螄
+蚁 螘 蟻
+蚂 螞
+蚊 螡 蟁
+萤 螢
+螗 螳
+蝼 螻
+螀 螿
+蛰 蟄
+蟆 蟇
+蝈 蟈
+螨 蟎
+虮 蟣
+蝉 蟬
+蛲 蟯
+虫 蟲
+蛏 蟶
+蚃 蠁
+蝇 蠅
+虿 蠆
+蝎 蠍
+蟒 蠎
+蟹 蠏
+蛴 蠐
+蝾 蠑
+蚝 蠔
+蝡 蠕
+蜡 蠟
+惷 蠢
+蛎 蠣
+蟏 蠨
+蝫 蠩
+劙 蠫
+蛊 蠱
+蚕 蠶
+蠧 蠹
+蛮 蠻
+蠷 蠼
+衂 衄
+啣 衔 銜
+弄 衖
+胡 衚 鬍
+卫 衛 衞
+紁 衩
+緷 衮 袞
+只 衹 隻
+毠 袈
+袌 袍
+衪 袘
+帙 袟
+袬 裕
+帬 裙 裠
+补 補
+装 裝
+裏 裡 里
+袴 裤 褲
+裴 裵
+臝 裸
+制 製
+帺 褀
+裹 褁
+惼 褊
+裈 褌
+袖 褎
+副 褔
+袆 褘
+裢 褳
+繿 褴 襤
+褛 褸
+亵 褻
+褒 襃
+裥 襇 襉
+袯 襏
+幱 襕 襴
+袄 襖
+裣 襝
+裆 襠
+袒 襢
+袜 襪 韈 韤
+衬 襯
+袭 襲
+襾 覀
+瞥 覕
+斍 覚 覺 觉
+眺 覜
+亲 親
+覌 観 觀 观
+覵 覸
+覧 覽 览
+見 见
+覎 觃
+覓 觅
+視 视
+覘 觇
+覬 觊
+覡 觋
+覿 觌
+覥 觍
+覦 觎
+覯 觏
+覲 觐
+覷 觑
+伋 觙
+解 觧
+觪 觲
+觞 觴
+觯 觶
+触 觸
+燕 觾 鷰
+言 訁 讠
+托 託 讬
+䜣 訢
+尤 訧
+哅 訩 讻
+愬 訴 诉
+注 註
+訾 訿
+呧 詆 诋
+咏 詠
+察 詧
+侘 詫 诧
+咯 詻
+訮 詽
+夸 誇
+忌 誋 諅
+志 誌
+欸 誒 诶
+悖 誖
+說 説 说
+訚 誾
+訰 諄 谆
+話 諙 话
+諌 諫 谏
+咨 諮 谘
+誊 謄
+啼 謕
+諡 謚 谥
+謠 謡 谣
+商 謪
+詛 謯 诅
+嘻 譆
+憝 譈
+証 證 证
+訛 譌 讹
+噊 譎 谲
+噂 譐
+撰 譔
+謨 譕 谟
+諩 譜 谱
+噪 譟
+善 譱
+护 護
+誉 譽
+謭 譾 谫
+慧 譿
+詟 讋
+䜩 讌
+仇 讎 讐 雠
+讆 讏
+譋 讕 谰
+讃 讚 賛 贊 赞
+計 计
+訂 订
+訃 讣
+認 认
+譏 讥
+訐 讦
+訌 讧
+討 讨
+讓 让
+訕 讪
+訖 讫
+訓 训
+議 议
+訊 讯
+記 记
+訒 讱
+講 讲
+諱 讳
+謳 讴
+詎 讵
+訝 讶
+訥 讷
+許 许 鄦
+論 论
+訟 讼
+諷 讽
+設 设
+訪 访
+訣 诀
+詁 诂
+評 评
+識 识
+詗 诇
+詐 诈
+診 诊
+謅 诌
+詞 词
+詘 诎
+詔 诏
+詖 诐
+譯 译
+詒 诒
+誆 诓
+誄 诔
+試 试
+詿 诖
+詩 诗
+詰 诘
+詼 诙
+誠 诚
+誅 诛
+詵 诜
+誕 诞
+詬 诟
+詮 诠
+詭 诡
+詢 询
+詣 诣
+諍 诤
+該 该
+詳 详
+諢 诨 顐
+詡 诩
+譸 诪
+誡 诫
+誣 诬
+語 语
+誚 诮
+誥 诰
+誘 诱
+誨 诲
+誑 诳
+誦 诵
+請 请
+諸 诸
+諏 诹
+諾 诺
+讀 读
+諑 诼
+誹 诽
+課 课
+諉 诿
+諛 谀
+誰 谁
+諗 谂
+調 调
+諂 谄
+諒 谅
+誶 谇
+談 谈
+讅 谉
+誼 谊
+謀 谋
+諶 谌
+諜 谍
+謊 谎
+諧 谐
+謔 谑
+謁 谒
+謂 谓
+諤 谔
+諭 谕
+諼 谖
+讒 谗
+諳 谙
+諺 谚
+諦 谛
+謎 谜
+諞 谝
+諝 谞
+讜 谠
+謖 谡
+謝 谢
+謗 谤
+謙 谦
+謐 谧
+謹 谨
+謾 谩
+謫 谪
+謬 谬
+譚 谭
+譖 谮
+譙 谯
+讞 谳
+譴 谴
+譫 谵
+讖 谶
+穀 谷
+溪 谿
+岂 豈
+丰 豊 豐
+登 豋
+拻 豗
+像 象
+豜 豣
+猪 豬
+豮 豶
+犲 豺
+狢 貉
+皃 貌
+狸 貍
+猫 貓
+玃 貜
+买 買
+戝 賊 贼
+賅 賌 赅
+宾 賓 賔
+串 賗
+琛 賝
+貭 質 质
+賮 贐 赆
+贋 贗 赝
+灨 贛 赣
+贓 贜 赃
+貝 贝
+貞 贞
+負 负
+貟 贠
+貢 贡
+財 财
+責 责
+賢 贤
+敗 败
+貨 货
+販 贩
+貪 贪
+貧 贫
+貶 贬
+購 购
+貯 贮
+貫 贯
+賤 贱
+賁 贲
+貰 贳
+貼 贴
+貴 贵
+貺 贶
+貸 贷
+貿 贸
+費 费
+賀 贺
+貽 贻
+贄 贽
+賈 贾
+賄 贿
+貲 赀
+賃 赁
+賂 赂
+資 资
+賕 赇
+賑 赈
+賚 赉
+賒 赊
+賦 赋
+賭 赌
+賫 赍 齎
+贖 赎
+賞 赏
+賜 赐
+贔 赑
+賙 赒
+賡 赓
+賠 赔
+賧 赕
+賴 赖 頼
+賵 赗
+贅 赘
+賻 赙
+賺 赚
+賽 赛
+賾 赜
+贇 赟
+贈 赠
+贍 赡
+贏 赢
+竀 赪 赬
+走 赱
+趁 趂
+赿 趆
+趋 趍 趨
+赶 趕
+赵 趙
+趱 趲
+趒 跳
+跥 跺
+疏 踈
+践 踐
+踂 踙
+蜷 踡
+殕 踣
+跴 踩
+踨 踪 蹤
+踊 踴
+禸 蹂
+跄 蹌
+跸 蹕 驆
+趟 蹚
+跬 蹞
+跡 蹟 迹
+跖 蹠
+蹒 蹣
+糟 蹧
+跷 蹺 蹻
+趮 躁
+跶 躂
+趸 躉
+踌 躊
+跻 躋
+跃 躍
+踯 躑
+跞 躒
+踬 躓
+蹰 躕
+跹 躚
+躗 躛
+蹑 躡
+蹿 躥
+躜 躦
+躏 躪
+耽 躭
+体 躰 軆 骵 體
+躱 躲
+躯 軀
+军 軍
+枙 軛 軶 轭
+軖 軠
+毂 軲 轂 轱
+挽 輓
+軽 輕 轻
+軿 輧
+舆 輿 轝
+輼 轀 辒
+車 车
+軋 轧
+軌 轨
+軒 轩
+軑 轪
+軔 轫
+轉 转
+輪 轮
+軟 软
+轟 轰
+軻 轲
+轤 轳
+軸 轴
+軹 轵
+軼 轶
+軤 轷
+軫 轸
+轢 轹
+軺 轺
+軾 轼
+載 载
+輊 轾
+轎 轿
+輈 辀
+輇 辁
+輅 辂
+較 较
+輒 辄
+輔 辅
+輛 辆
+輦 辇
+輩 辈
+輝 辉
+輥 辊
+輞 辋
+輬 辌
+輟 辍
+輜 辎
+輳 辏
+輻 辐
+輯 辑
+輸 输
+轡 辔
+轅 辕
+轄 辖
+輾 辗
+轆 辘
+轍 辙
+轔 辚
+罪 辠
+辢 辣
+办 辦 辧 辨 釆
+辞 辭
+辫 辮
+辩 辯
+农 農
+达 迖 達
+迟 迡 遅 遟 遲
+迆 迤
+廸 迪
+移 迻
+迯 逃
+迥 逈
+愻 逊 遜
+攸 逌
+递 逓 遞
+这 這
+连 連
+迨 逮
+游 逰 遊
+周 週
+进 進
+劮 逸
+远 逺 遠
+踰 逾
+运 運
+徧 遍
+过 過
+徨 遑
+违 違
+遙 遥
+章 遧
+适 適
+遁 遯
+矬 遳
+迁 遷
+选 選
+遗 遺
+辽 遼
+辟 避 闢
+迈 邁
+还 還
+迩 邇
+边 邉 邊
+原 邍
+逻 邏
+逦 邐
+村 邨
+欝 郁 鬰 鬱
+邢 郉
+郎 郞
+郏 郟
+渤 郣
+墎 郭
+邮 郵
+乡 郷 鄉 鄕
+邶 鄁
+郓 鄆
+邹 鄒
+邬 鄔
+郧 鄖
+邓 鄧
+郑 鄭
+邻 鄰 隣
+郸 鄲
+邺 鄴
+郐 鄶
+郰 鄹
+邝 鄺
+鄷 酆
+酂 酇
+郦 酈
+丣 酉
+詶 酧 酬 醻
+腌 醃
+酔 醉
+酢 醋
+酝 醖 醞
+丑 醜
+酱 醬
+酦 醱
+宴 醼
+酿 釀
+衅 釁
+酾 釃
+酽 釅
+採 采
+释 釋
+緟 重
+埜 野
+厘 釐
+金 釒 钅
+扣 釦
+焊 釬 銲
+䥺 釾
+螤 鈡 鍾 鐘 钟 锺
+巨 鉅 钜
+和 鉌 龢
+鈆 鉛 铅
+缽 鉢 钵
+鈎 鉤 钩
+耡 鋤 锄
+舖 鋪 铺
+銳 鋭 锐
+碗 鋺
+銭 錢 钱
+表 錶
+捺 錼
+鋄 錽
+煅 鍛 锻
+臿 鍤 锸
+劆 鎌 鐮 镰
+熔 鎔 镕
+矟 鎙
+錘 鎚 锤
+蓥 鎣
+鎭 鎮 镇
+賹 鎰 镒
+鎖 鏁 锁
+鎛 鏄 鑮 镈
+旋 鏇 镟
+鍞 鏗 铿
+錾 鏨
+罅 鏬
+錋 鏰 镚
+䥽 鏺
+銹 鏽 锈
+鉆 鐉 鑽 钻
+鍚 鐊 钖
+鍥 鐑 锲
+䦅 鐥
+鏀 鐪
+鎸 鐫 镌
+䦃 鐯
+銕 鐵 铁
+鍱 鐷
+鋳 鑄 铸
+鉴 鑑 鑒
+刨 鑤
+尖 鑯
+鈅 鑰 钥
+鍵 鑳 键
+罐 鑵
+銮 鑾
+凿 鑿
+䦆 钁
+鎲 钂 镋
+釓 钆
+釔 钇
+針 针
+釘 钉
+釗 钊
+釙 钋
+釕 钌
+釷 钍
+釺 钎
+釧 钏
+釤 钐
+鈒 钑
+釩 钒
+釣 钓 魡
+鍆 钔
+釹 钕
+釵 钗
+鈃 钘
+鈣 钙
+鈈 钚
+鈦 钛
+鈍 钝
+鈔 钞
+鈉 钠
+鋇 钡
+鋼 钢
+鈑 钣
+鈐 钤
+欽 钦
+鈞 钧
+鎢 钨
+鈧 钪
+鈁 钫
+鈥 钬
+鈄 钭
+鈕 钮
+鈀 钯
+鈺 钰
+鉦 钲
+鈷 钴
+鈳 钶
+鉕 钷
+鈽 钸
+鈸 钹
+鉞 钺
+鉬 钼
+鉭 钽
+鉀 钾
+鈿 钿
+鈾 铀
+鉑 铂
+鈴 铃
+鑠 铄
+鉚 铆
+鉋 铇
+鈰 铈
+鉉 铉
+鉈 铊
+鉍 铋
+鈮 铌
+鈹 铍
+鐸 铎
+鉶 铏
+銬 铐
+銠 铑
+鉺 铒
+鋩 铓
+錏 铔
+銪 铕
+鋮 铖
+鋏 铗
+鋣 铘
+鐃 铙
+銍 铚
+鐺 铛
+銅 铜
+鋁 铝
+銱 铞
+銦 铟
+鎧 铠
+鍘 铡
+銖 铢
+銑 铣
+鋌 铤
+銩 铥
+銛 铦
+鏵 铧
+銓 铨
+鎩 铩
+鉿 铪
+銚 铫
+鉻 铬
+銘 铭
+錚 铮
+銫 铯
+鉸 铰
+銥 铱
+銃 铳
+鐋 铴
+銨 铵
+銀 银
+銣 铷
+鐒 铹
+鋙 铻
+錸 铼
+鋱 铽
+鏈 链
+銷 销
+鋰 锂
+鋥 锃
+鍋 锅
+鋯 锆
+鋨 锇
+銼 锉
+鋝 锊
+鋒 锋
+鋅 锌
+鋶 锍
+鐦 锎
+鐧 锏
+銻 锑
+鋃 锒
+鋟 锓
+鋦 锔
+錒 锕
+錆 锖
+鍺 锗
+鍩 锘
+錯 错
+錨 锚
+錛 锛
+錡 锜
+鍀 锝
+錁 锞
+錕 锟
+錩 锠
+錫 锡
+錮 锢
+鑼 锣
+錐 锥
+錦 锦
+鑕 锧
+鍁 锨
+錈 锩
+鍃 锪
+錇 锫
+錟 锬
+錠 锭
+鋸 锯
+錳 锰
+錙 锱
+鍈 锳
+鍇 锴
+鏘 锵
+鍶 锶
+鍔 锷
+鍬 锹
+鎪 锼
+鍠 锽
+鍰 锾
+鎄 锿
+鍍 镀
+鎂 镁
+鏤 镂
+鎡 镃
+鐨 镄
+鎇 镅
+鏌 镆
+鎘 镉
+鑷 镊
+鎳 镍
+鎿 镎
+鎦 镏
+鎬 镐
+鎊 镑
+鎵 镓
+鑌 镔
+鏢 镖
+鏜 镗
+鏝 镘
+鏍 镙
+鏞 镛
+鏡 镜
+鏑 镝
+鏃 镞
+鏐 镠
+鐔 镡
+鐝 镢
+鐐 镣
+鏷 镤
+鑥 镥
+鐓 镦
+鑭 镧
+鐠 镨
+鑹 镩
+鏹 镪
+鐙 镫
+鑊 镬
+鐳 镭
+鐶 镮
+鐲 镯
+鐿 镱
+鑔 镲
+鑣 镳
+鑞 镴
+鑱 镵
+鑲 镶
+長 长
+閇 閉 闭
+开 開
+关 閞 関 闗 關
+哄 閧 鬨
+閱 閲 阅
+閆 閻 闫 阎
+板 闆
+濶 闊 阔
+斗 闘 鬥 鬦 鬪 鬬 鬭
+灛 闡 阐
+門 门
+閂 闩
+閃 闪
+閈 闬
+問 问
+闖 闯
+閏 闰
+闈 闱
+閑 闲
+閎 闳
+間 间
+閔 闵
+閌 闶
+悶 闷
+閘 闸
+閙 闹 鬧
+閨 闺
+聞 闻
+闥 闼
+閩 闽
+閭 闾
+闓 闿
+閥 阀
+閣 阁
+閡 阂
+閫 阃
+閬 阆
+闍 阇
+閾 阈
+閹 阉
+閶 阊
+閿 阌
+閽 阍
+閼 阏
+闌 阑
+闃 阒
+闠 阓
+闋 阕
+闔 阖
+闐 阗
+闒 阘
+闕 阙
+闞 阚 鬫
+闤 阛
+峊 阜 阝
+屹 阣
+厄 阨
+坂 阪
+坑 阬
+址 阯
+穽 阱
+昜 阳 陽
+堦 阶 階
+坿 附
+坴 陆 陸
+敶 陈 陳
+垓 陔
+陉 陘
+陕 陜 陝
+阵 陣
+阴 陰 霒 霠
+琌 陵
+匋 陶
+堤 隄
+陧 隉
+队 隊
+陨 隕
+郄 隙
+际 際
+墇 障
+敖 隞
+隐 隠 隱
+随 隨
+隓 隳
+陇 隴
+隶 隷 隸
+弋 隿
+僱 雇
+隽 雋
+杂 雑 雜 雥
+虽 雖
+双 雙
+雏 雛 鶵
+雍 雝
+离 離
+难 難
+氛 雰
+云 雲
+电 電
+誫 震
+灵 霊 靈
+癨 霍
+沾 霑
+赮 霞
+雾 霧
+廓 霩
+覇 霸
+溦 霺
+霁 霽
+雳 靂
+霭 靄
+叇 靆
+叆 靉
+靑 青
+靓 靚
+静 靜
+靔 靝
+靥 靨
+肕 靭 韌 韧
+靻 靼
+鞌 鞍
+巩 鞏
+陱 鞠
+鞑 韃
+鞯 韉
+韣 韥
+韋 韦
+韍 韨
+韓 韩
+韙 韪
+韞 韫
+韜 韬
+韭 韮
+虀 韲 齏 齑
+韵 韻
+响 響
+頉 頤 顊 颐
+头 頭
+穎 頴 颕 颖
+頚 頸 颈 鵛
+穨 頹 頽 颓
+顏 顔 颜
+显 顕 顯
+愿 願
+傎 顚 顛 颠
+类 類
+蹙 顣
+頋 顧 顾
+頁 页
+頂 顶
+頃 顷
+頇 顸
+項 项
+順 顺
+須 须 鬚
+頊 顼
+頑 顽
+頓 顿
+頎 颀
+頌 颂
+頏 颃
+預 预
+顱 颅
+領 领
+頗 颇
+頡 颉
+頰 颊
+頲 颋
+頜 颌
+潁 颍
+熲 颎
+頦 颏
+頻 频
+頮 颒
+頷 颔
+顆 颗
+題 题
+顒 颙
+顎 颚
+顓 颛
+額 额
+顳 颞
+顢 颟
+顙 颡
+顥 颢
+纇 颣
+顫 颤
+顬 颥
+顰 颦
+顴 颧
+凨 風 飌 风
+旚 飃 飄 飘
+飆 飈 飙 飚
+颭 飐
+颮 飑
+颯 飒
+颶 飓
+颸 飔
+颼 飕
+颻 飖
+飀 飗
+飛 飞
+食 飠 饣
+飯 飰 饭
+飹 飽 饱
+飪 餁 饪
+糍 餈
+养 養
+喰 餐
+余 餘 馀
+肴 餚
+飾 餝 饰
+餅 餠 饼
+舘 館 馆
+糊 餬
+糇 餱
+喂 餵
+糖 餹
+飫 饇 饫
+糤 饊 馓
+餽 饋 馈
+飢 饑 饥
+飨 饗
+餍 饜
+餉 饟 饷
+飣 饤
+飥 饦
+餳 饧
+飩 饨
+餼 饩
+飭 饬
+飲 饮
+餞 饯
+飼 饲
+飿 饳
+飴 饴
+餌 饵
+饒 饶
+餄 饸
+餎 饹
+餃 饺
+餏 饻
+餑 饽
+餖 饾
+餓 饿
+餒 馁
+餕 馂
+餜 馃
+餛 馄
+餡 馅
+餷 馇
+餶 馉
+餿 馊
+饞 馋
+饁 馌
+饃 馍
+餺 馎
+餾 馏
+饈 馐
+饉 馑
+饅 馒
+饌 馔
+饢 馕
+聝 馘
+馨 馫
+冯 馮
+馱 駄 驮
+敺 駆 駈 驅 驱
+駝 駞 驼
+駁 駮 驳
+駭 駴 骇
+駢 騈 骈
+騌 騣 骔 鬃
+腾 騰
+騏 騹 骐
+蓦 驀
+騺 驇
+憍 驕 骄
+惊 驚
+馬 马
+馭 驭
+馴 驯
+馳 驰
+馹 驲
+驢 驴
+駔 驵
+駛 驶
+駟 驷
+駙 驸
+駒 驹
+騶 驺
+駐 驻
+駑 驽
+駕 驾
+驛 驿
+駘 骀
+驍 骁
+駰 骃
+驊 骅
+駱 骆
+驫 骉
+驪 骊
+騁 骋
+驗 验
+騂 骍
+駸 骎
+駿 骏
+騎 骑
+騍 骒
+騅 骓
+驌 骕
+驂 骖
+騙 骗
+騭 骘
+騤 骙
+騷 骚
+騖 骛
+驁 骜
+騮 骝
+騫 骞
+騸 骟
+驃 骠
+騾 骡
+驄 骢
+驏 骣
+驟 骤
+驥 骥
+驦 骦
+驤 骧
+骪 骫
+肮 骯
+踍 骹
+胯 骻
+膸 髄 髓
+骴 髊
+髅 髏
+髋 髖
+高 髙
+髥 髯
+痢 鬁
+瘌 鬎
+髺 鬠
+鬓 鬢
+阋 鬩
+阄 鬮
+鬶 鬹
+粥 鬻
+櫆 魁
+蜮 魊
+魉 魎
+魇 魘
+蚶 魽
+䲟 鮣
+觟 鮭 鲑
+骾 鯁 鲠
+魦 鯊 鯋 鲨
+鮝 鯗 鲞
+䲠 鰆
+䲡 鰌 鰍 鳅
+䲢 鰧
+鯽 鰿 鲫
+鰫 鱅 鳙
+魼 鱋
+鱓 鱔 鳝
+鰥 鱞 鳏
+鰐 鱷 鳄
+魚 鱼
+魛 鱽
+魷 鱿
+魨 鲀
+魯 鲁
+魴 鲂
+魺 鲄
+鮁 鲅
+鮃 鲆
+鮎 鲇
+鱸 鲈
+鮋 鲉
+鮓 鲊
+鮒 鲋
+鮊 鲌
+鮑 鲍
+鱟 鲎
+鮍 鲏
+鮐 鲐
+鮚 鲒
+鮳 鲓
+鮪 鲔
+鮞 鲕
+鮦 鲖
+鰂 鲗
+鮜 鲘
+鱠 鲙
+鱭 鲚
+鮫 鲛
+鮺 鲝
+鱘 鲟
+鱺 鲡
+鰱 鲢
+鰹 鲣
+鯉 鲤
+鰣 鲥
+鰷 鲦
+鯀 鲧
+鯇 鲩
+鮶 鲪
+鯒 鲬
+鯖 鲭
+鯪 鲮
+鯕 鲯
+鯫 鲰
+鯡 鲱
+鯤 鲲
+鯧 鲳
+鯝 鲴
+鯢 鲵
+鯰 鲶
+鯛 鲷
+鯨 鲸
+鰺 鲹
+鯴 鲺
+鯔 鲻
+鱝 鲼
+鰈 鲽
+鰏 鲾
+鱨 鲿
+鯷 鳀
+鰛 鳁
+鰓 鳃
+鰒 鳆
+鰉 鳇
+鯿 鳊
+鰠 鳋
+鰲 鳌 鼇
+鰭 鳍
+鰨 鳎
+鰩 鳐
+鰟 鳑
+鰜 鳒
+鰳 鳓
+鰾 鳔
+鱈 鳕
+鱉 鳖 鼈 龞
+鰻 鳗
+鰵 鳘
+鰼 鳛
+鱖 鳜
+鱗 鳞
+鱒 鳟
+鱯 鳠
+鱧 鳢
+鱣 鳣
+凫 鳧 鳬
+雁 鳫 鴈
+雞 鳮 鷄 鸡
+凤 鳯 鳳
+䴓 鳾
+鴂 鴃
+鳵 鴇 鸨
+雉 鴙
+䴕 鴷
+䴔 鵁
+鵝 鵞 鹅
+鴉 鵶 鸦
+䴖 鶄
+鵾 鶤 鹍
+䴗 鶪
+莺 鶯
+翰 鶾
+䴘 鷈 鷉
+鶒 鷘
+鷳 鷴 鹇
+䴙 鷿 鸊
+鵑 鸝 鹂 鹃
+鵉 鸞 鸾
+鳥 鸟
+鳩 鸠
+鳶 鸢
+鳴 鸣
+鳲 鸤
+鷗 鸥
+鶬 鸧
+鴆 鸩
+鴣 鸪
+鶇 鸫
+鸕 鸬
+鴨 鸭
+鴞 鸮
+鴦 鸯
+鴒 鸰
+鴟 鸱
+鴝 鸲
+鴛 鸳
+鷽 鸴
+鴕 鸵
+鷥 鸶
+鷙 鸷
+鴯 鸸
+鴰 鸹
+鵂 鸺
+鴴 鸻
+鵃 鸼
+鴿 鸽
+鴻 鸿
+鵐 鹀
+鵓 鹁
+鵠 鹄
+鵒 鹆
+鵜 鹈
+鵡 鹉
+鵲 鹊
+鶓 鹋
+鵪 鹌
+鵯 鹎
+鵬 鹏
+鵮 鹐
+鶉 鹑
+鶊 鹒
+鵷 鹓
+鷫 鹔
+鶘 鹕
+鶡 鹖
+鶚 鹗
+鶻 鹘
+鶖 鹙
+鶿 鹚
+鶥 鹛
+鶩 鹜
+鷊 鹝
+鷂 鹞
+鶲 鹟
+鶹 鹠
+鶺 鹡
+鷁 鹢
+鶼 鹣
+鶴 鹤
+鷖 鹥
+鸚 鹦
+鷓 鹧
+鷚 鹨
+鷯 鹩
+鷦 鹪
+鷲 鹫
+鷸 鹬
+鷺 鹭
+鸇 鹯
+鷹 鹰
+鸌 鹱
+鸏 鹲
+鸛 鹳
+鸘 鹴
+咸 鹹
+鹺 鹾
+麊 麋
+丽 麗
+麖 麠
+麥 麦
+面 麪 麵
+曲 麯 麴
+麩 麸
+黃 黄
+黉 黌
+菞 黎
+黑 黒
+軡 黔
+默 黙
+党 黨
+黪 黲
+霉 黴
+黡 黶
+黩 黷
+黽 黾
+蛛 鼄
+蜘 鼅
+黿 鼋
+鼂 鼌
+鼉 鼍
+冬 鼕
+鞀 鼗
+鼰 鼳
+鼴 鼹
+哻 鼾
+鼿 齀
+頞 齃
+歯 齒 齿
+齛 齥
+咬 齩
+踀 齪 龊
+齫 齳
+腭 齶
+齔 龀
+齕 龁
+齗 龂
+齟 龃
+齡 龄
+齙 龅
+齠 龆
+齜 龇
+齦 龈
+齬 龉
+齲 龋
+齷 龌
+竜 龍 龒 龙
+䶮 龑
+龖 龘
+龔 龚
+龕 龛
+亀 龜 龟
+ꃀ ꒜
+ꁊ ꒞
+ꁐ ꒬
+ꏂ ꒰
+ꎿ ꒺
+ꊱ ꒾
+ꉙ ꒿
+ꎫ ꓀
+ꎵ ꓂
+・ ・
+ヲ ヲ
+ァ ァ
+ィ ィ
+ゥ ゥ
+ェ ェ
+ォ ォ
+ャ ャ
+ュ ュ
+ョ ョ
+ッ ッ
+ー ー
+ア ア
+イ イ
+ウ ウ
+エ エ
+オ オ
+カ カ
+キ キ
+ク ク
+ケ ケ
+コ コ
+サ サ
+シ シ
+ス ス
+セ セ
+ソ ソ
+タ タ
+チ チ
+ツ ツ
+テ テ
+ト ト
+ナ ナ
+ニ ニ
+ヌ ヌ
+ネ ネ
+ノ ノ
+ハ ハ
+ヒ ヒ
+フ フ
+ホ ホ
+マ マ
+ミ ミ
+ム ム
+メ メ
+モ モ
+ヤ ヤ
+ユ ユ
+ヨ ヨ
+ラ ラ
+リ リ
+ル ル
+レ レ
+ロ ロ
+ワ ワ
+ン ン
+゙ ゙
+゚ ゚
+ㅤ ᅠ
+ㄱ ᄀ
+ㄲ ᄁ
+ㄳ ᆪ
+ㄴ ᄂ
+ㄵ ᆬ
+ㄶ ᆭ
+ㄷ ᄃ
+ㄸ ᄄ
+ㄹ ᄅ
+ㄺ ᆰ
+ㄻ ᆱ
+ㄼ ᆲ
+ㄽ ᆳ
+ㄾ ᆴ
+ㄿ ᆵ
+ㅀ ᄚ
+ㅁ ᄆ
+ㅂ ᄇ
+ㅃ ᄈ
+ㅄ ᄡ
+ㅅ ᄉ
+ㅆ ᄊ
+ㅇ ᄋ
+ㅈ ᄌ
+ㅉ ᄍ
+ㅊ ᄎ
+ㅋ ᄏ
+ㅌ ᄐ
+ㅍ ᄑ
+ㅎ ᄒ
+ㅏ ᅡ
+ㅐ ᅢ
+ㅑ ᅣ
+ㅒ ᅤ
+ㅓ ᅥ
+ㅔ ᅦ
+ㅕ ᅧ
+ㅖ ᅨ
+ㅗ ᅩ
+ㅘ ᅪ
+ㅙ ᅫ
+ㅚ ᅬ
+ㅛ ᅭ
+ㅜ ᅮ
+ㅝ ᅯ
+ㅞ ᅰ
+ㅟ ᅱ
+ㅠ ᅲ
+ㅡ ᅳ
+ㅢ ᅴ
+ㅣ ᅵ
diff --git a/AntiSpoof/maintenance/generateEquivset.php b/AntiSpoof/maintenance/generateEquivset.php
new file mode 100644
index 00000000..ba539729
--- /dev/null
+++ b/AntiSpoof/maintenance/generateEquivset.php
@@ -0,0 +1,170 @@
+<?php
+
+$IP = getenv( 'MW_INSTALL_PATH' );
+if ( $IP === false ) {
+ $IP = __DIR__ . '/../../..';
+}
+require_once( "$IP/maintenance/Maintenance.php" );
+
+class GenerateEquivset extends Maintenance {
+ public function execute() {
+ $dir = __DIR__;
+
+ $endl = "\n";
+
+ $lines = file( "$dir/equivset.in" );
+ if ( !$lines ) {
+ $this->error( "Unable to open equivset.in\n", 1 );
+ }
+
+ $setsFile = fopen( "$dir/equivset.txt", 'w' );
+ if ( !$setsFile ) {
+ $this->error( "Unable to open equivset.txt for writing\n", 1 );
+ }
+
+ fwrite( $setsFile, <<<EOT
+# This file is generated by generateEquivset.php
+# It shows sets of equivalent characters, one set per line, with characters
+# separated by whitespace. This file is not used by MediaWiki, rather it is
+# intended as a human-readable version of equivset.php, for debugging and
+# review purposes.
+
+EOT
+ );
+
+ $outputFile = fopen( "$dir/equivset.php", 'w' );
+ if ( !$outputFile ) {
+ $this->error( "Unable to open equivset.php for writing\n", 1 );
+ }
+
+ fwrite( $outputFile, "<?" . "php$endl" . <<<EOT
+# This file is generated by generateEquivset.php
+# It contains a map of characters, encoded in UTF-8, such that running strtr()
+# on a string with this map will cause confusable characters to be reduced to
+# a canonical representation. The same array is also available in serialized
+# form, in equivset.ser.
+
+EOT
+ );
+
+ $serializedFile = fopen( "$dir/equivset.ser", 'w' );
+ if ( !$serializedFile ) {
+ $this->error( "Unable to open equivset.ser for writing\n", 1 );
+ }
+
+ # \s matches \xa0 in non-unicode mode, which is not what we want
+ # So we need to make our own whitespace class
+ $sp = '[\ \t]';
+
+ $lineNum = 0;
+ $setsByChar = array();
+ $sets = array();
+ $exitStatus = 0;
+
+ foreach ( $lines as $line ) {
+ ++$lineNum;
+ $mapToEmpty = false;
+
+ # Whether the line ends with a null character
+ $mapToEmpty = ( strpos( $line, "\0" ) === strlen( $line ) - 2 );
+
+ $line = trim( $line );
+
+ # Filter comments
+ if ( !$line || $line[0] == '#' ) {
+ continue;
+ }
+
+ # Process line
+ if ( !preg_match(
+ "/^(?P<hexleft> [A-F0-9]+) $sp+ (?P<charleft> .+?) $sp+ => $sp+ (?:(?P<hexright> [A-F0-9]+) $sp+|) (?P<charright> .+?) $sp* (?: \#.*|) $ /x", $line, $m ) )
+ {
+ $this->output( "Error: invalid entry at line $lineNum: $line\n" );
+ $exitStatus = 1;
+ continue;
+ }
+ $error = false;
+
+ if ( $mapToEmpty ) {
+ $m['charright'] = '';
+ } else {
+ if ( codepointToUtf8( hexdec( $m['hexleft'] ) ) != $m['charleft'] ) {
+ $actual = utf8ToCodepoint( $m['charleft'] );
+ if ( $actual === false ) {
+ $this->output( "Bytes: " . strlen( $m['charleft'] ) . "\n" );
+ $this->output( bin2hex( $line ) . "\n" );
+ $hexForm = bin2hex( $m['charleft'] );
+ $this->output( "Invalid UTF-8 character \"{$m['charleft']}\" ($hexForm) at line $lineNum: $line\n" );
+ } else {
+ $this->output( "Error: left number ({$m['hexleft']}) does not match left character ($actual) " .
+ "at line $lineNum: $line\n" );
+ }
+ $error = true;
+ }
+ if ( !empty( $m['hexright'] ) && codepointToUtf8( hexdec( $m['hexright'] ) ) != $m['charright'] ) {
+ $actual = utf8ToCodepoint( $m['charright'] );
+ if ( $actual === false ) {
+ $hexForm = bin2hex( $m['charright'] );
+ $this->output( "Invalid UTF-8 character \"{$m['charleft']}\" ($hexForm) at line $lineNum: $line\n" );
+ } else {
+ $this->output( "Error: right number ({$m['hexright']}) does not match right character ($actual) " .
+ "at line $lineNum: $line\n" );
+ }
+ $error = true;
+ }
+ if ( $error ) {
+ $exitStatus = 1;
+ continue;
+ }
+ }
+
+ # Find the set for the right character, add a new one if necessary
+ if ( isset( $setsByChar[$m['charright']] ) ) {
+ $setName = $setsByChar[$m['charright']];
+ } else {
+ # New set
+ $setName = $m['charright'];
+ $sets[$setName] = array( $m['charright'] );
+ $setsByChar[$setName] = $setName;
+ }
+
+ # Add the left character to the set
+ $sets[$setName][] = $m['charleft'];
+ $setsByChar[$m['charleft']] = $setName;
+ }
+
+ # Sets output
+ foreach ( $sets as $members ) {
+ fwrite( $setsFile, implode( ' ', $members ) . $endl );
+ }
+
+ # Map output
+ $output = var_export( $setsByChar, true );
+ $output = str_replace( "\n", $endl, $output );
+ fwrite( $outputFile, '$equivset = ' . "$output;$endl" );
+
+ # Serialized codepoint map
+ $codepointMap = array();
+ foreach ( $setsByChar as $char => $setName ) {
+ $key = $char === '' ? '' : utf8ToCodepoint( $char );
+ $value = $setName === '' ? '' : utf8ToCodepoint( $setName );
+
+ $codepointMap[ $key ] = $value;
+ }
+ fwrite( $serializedFile, serialize( $codepointMap ) );
+
+ fclose( $setsFile );
+ fclose( $outputFile );
+ fclose( $serializedFile );
+
+ $text = 'Finished';
+ if ( $exitStatus > 0 ) {
+ $text .= ' with errors';
+ }
+ $this->error( $text, $exitStatus );
+ }
+}
+
+$maintClass = "GenerateEquivset";
+require_once( DO_MAINTENANCE );
+
diff --git a/AntiSpoof/package.json b/AntiSpoof/package.json
new file mode 100644
index 00000000..613fd635
--- /dev/null
+++ b/AntiSpoof/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "antispoof",
+ "version": "0.0.0",
+ "private": true,
+ "description": "Build tools for the AntiSpoof extension.",
+ "scripts": {
+ "test": "grunt test"
+ },
+ "devDependencies": {
+ "grunt": "0.4.5",
+ "grunt-cli": "0.1.13",
+ "grunt-banana-checker": "0.2.2"
+ }
+}
diff --git a/AntiSpoof/sql/patch-antispoof.mysql.sql b/AntiSpoof/sql/patch-antispoof.mysql.sql
new file mode 100644
index 00000000..706ade63
--- /dev/null
+++ b/AntiSpoof/sql/patch-antispoof.mysql.sql
@@ -0,0 +1,21 @@
+CREATE TABLE /*$wgDBprefix*/spoofuser (
+ -- Equivalent to user_name, but not guaranteed to be in sync.
+ -- Do a join against user_name to confirm that an account hasn't
+ -- been renamed or deleted away.
+ su_name VARCHAR(255),
+
+ -- Normalized form of name for similarity-spoofing checks
+ su_normalized VARCHAR(255),
+
+ -- ok/not-ok according to the looks-like-a-valid-name check
+ su_legal BOOL,
+
+ -- error message that came out of the unicode check, if any
+ su_error TEXT,
+
+ -- unique record per username
+ PRIMARY KEY (su_name),
+
+ -- for checking matching possible spoofs
+ KEY(su_normalized, su_name)
+) /*$wgDBTableOptions*/;
diff --git a/AntiSpoof/sql/patch-antispoof.postgres.sql b/AntiSpoof/sql/patch-antispoof.postgres.sql
new file mode 100644
index 00000000..feba45f5
--- /dev/null
+++ b/AntiSpoof/sql/patch-antispoof.postgres.sql
@@ -0,0 +1,17 @@
+CREATE TABLE spoofuser (
+ -- Equivalent to user_name, but not guaranteed to be in sync.
+ -- Do a join against user_name to confirm that an account hasn't
+ -- been renamed or deleted away.
+ su_name character varying PRIMARY KEY,
+
+ -- Normalized form of name for similarity-spoofing checks
+ su_normalized character varying,
+
+ -- ok/not-ok according to the looks-like-a-valid-name check
+ su_legal boolean,
+
+ -- error message that came out of the unicode check, if any
+ su_error text
+);
+
+CREATE INDEX su_normname_idx ON spoofuser (su_normalized,su_name);
diff --git a/AntiSpoof/sql/patch-antispoof.sqlite.sql b/AntiSpoof/sql/patch-antispoof.sqlite.sql
new file mode 100644
index 00000000..dc0311b9
--- /dev/null
+++ b/AntiSpoof/sql/patch-antispoof.sqlite.sql
@@ -0,0 +1,21 @@
+CREATE TABLE /*$wgDBprefix*/spoofuser (
+ -- Equivalent to user_name, but not guaranteed to be in sync.
+ -- Do a join against user_name to confirm that an account hasn't
+ -- been renamed or deleted away.
+ su_name VARCHAR(255),
+
+ -- Normalized form of name for similarity-spoofing checks
+ su_normalized VARCHAR(255),
+
+ -- ok/not-ok according to the looks-like-a-valid-name check
+ su_legal BOOL,
+
+ -- error message that came out of the unicode check, if any
+ su_error TEXT,
+
+ -- unique record per username
+ PRIMARY KEY (su_name)
+) /*$wgDBTableOptions*/;
+
+-- for checking matching possible spoofs
+CREATE INDEX su_normname_idx ON /*$wgDBprefix*/spoofuser (su_normalized, su_name);
diff --git a/AntiSpoof/tests/AntiSpoofTest.php b/AntiSpoof/tests/AntiSpoofTest.php
new file mode 100644
index 00000000..f369594d
--- /dev/null
+++ b/AntiSpoof/tests/AntiSpoofTest.php
@@ -0,0 +1,30 @@
+<?php
+class AntiSpoofTest extends MediaWikiTestCase {
+
+ public function providePositives() {
+ return array(
+ /** Format: username -> spoofing attempt */
+ array( 'Laura Fiorucci', 'Låura Fiorucci' ),
+ array( 'Lucien leGrey', 'Lucien le6rey' ),
+ array( 'Poco a poco', 'Poco a ƿoco' ),
+ array( 'Sabbut', 'ЅаЬЬцт'),
+ array( 'BetoCG', 'ВетоС6' )
+ );
+ }
+
+ /**
+ * Some very basic normalization checks
+ *
+ * @covers AntiSpoof::checkUnicodeString
+ * @dataProvider providePositives
+ */
+ public function testCheckUnicodeString( $userName, $spooferName ) {
+ $a = AntiSpoof::checkUnicodeString( $userName );
+ $b = AntiSpoof::checkUnicodeString( $spooferName );
+
+ $this->assertEquals( 'OK', $a[0] );
+ $this->assertEquals( 'OK', $b[0] );
+
+ $this->assertEquals( $a[1], $b[1] );
+ }
+}
diff --git a/AntiSpoof/tests/SpoofUserTest.php b/AntiSpoof/tests/SpoofUserTest.php
new file mode 100644
index 00000000..8e5cf4f3
--- /dev/null
+++ b/AntiSpoof/tests/SpoofUserTest.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * @group Database
+ */
+class SpoofUserTest extends MediaWikiTestCase {
+
+ private static $usernames = array(
+ 'UserFoo',
+ 'UserF00',
+ 'FooBaz',
+ 'FOOBAZ',
+ 'F00BAZ',
+ 'BazFoo',
+ 'BAZFOO',
+ 'BazF00',
+ 'ILIKECAPSLOCKS',
+ );
+
+ public function setUp() {
+ parent::setUp();
+
+ // Put some stuff in the database
+ foreach ( self::$usernames as $user ) {
+ $s = new SpoofUser( $user );
+ $s->record();
+ $user = User::newFromName( $user );
+ $user->addToDatabase();
+ }
+
+ $s = new SpoofUser( 'NotInTheUserTable' );
+ $s->record();
+ }
+
+ public function tearDown() {
+ $dbw = wfGetDB( DB_MASTER );
+ // Clean up the mess we made...
+ $dbw->delete( 'user', '*', __METHOD__ );
+ $dbw->delete( 'spoofuser', '*', __METHOD__ );
+ parent::tearDown();
+ }
+
+ /**
+ * @covers SpoofUser::record
+ */
+ public function testRecord() {
+ $user = User::newFromName( 'SomeUsername' );
+ $user->addToDatabase();
+ $s = new SpoofUser( 'SomeUsername' );
+ $this->assertTrue( $s->record() );
+ // Check that it made it into the database
+ $this->assertArrayEquals( array( 'SomeUsername' ), $s->getConflicts() );
+ }
+
+ /**
+ * @covers SpoofUser::getConflicts
+ * @dataProvider provideGetConflicts
+ */
+ public function testGetConflicts( $user, $conflicts ) {
+ $s = new SpoofUser( $user );
+ $this->assertArrayEquals( $conflicts, $s->getConflicts() );
+ }
+
+ public static function provideGetConflicts() {
+ return array(
+ array( 'UserFoo', array( 'UserF00', 'UserFoo' ) ),
+ array( 'FooBaz', array( 'F00BAZ', 'FOOBAZ', 'FooBaz' ) ),
+ array( 'ILIKECAPSLOCKS', array( 'ILIKECAPSLOCKS' ) ),
+ array( 'NotInTheUserTable', array() ),
+ array( 'UsErFoO', array( 'UserF00', 'UserFoo' ) ),
+ );
+ }
+
+ /**
+ * @covers SpoofUser::update
+ */
+ public function testUpdate() {
+ $user = User::newFromName( 'MyNewUserName' );
+ $user->addToDatabase();
+ $s = new SpoofUser( 'MyNewUserName' );
+ $s->update( 'BAZFOO' );
+ $this->assertArrayEquals( array( 'MyNewUserName' ), $s->getConflicts() );
+ $foobaz = new SpoofUser( 'BAZFOO' );
+ $this->assertArrayEquals( array( 'BazF00', 'BazFoo' ), $foobaz->getConflicts() );
+ }
+}
diff --git a/AntiSpoof/vendor/autoload.php b/AntiSpoof/vendor/autoload.php
new file mode 100644
index 00000000..5bf3b955
--- /dev/null
+++ b/AntiSpoof/vendor/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer' . '/autoload_real.php';
+
+return ComposerAutoloaderInitba7436ce9413b18de9e8955c082ff944::getLoader();
diff --git a/AntiSpoof/vendor/composer/ClassLoader.php b/AntiSpoof/vendor/composer/ClassLoader.php
new file mode 100644
index 00000000..5e1469e8
--- /dev/null
+++ b/AntiSpoof/vendor/composer/ClassLoader.php
@@ -0,0 +1,413 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0 class loader
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+
+ private $classMapAuthoritative = false;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-0 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+ if ('\\' == $class[0]) {
+ $class = substr($class, 1);
+ }
+
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative) {
+ return false;
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if ($file === null && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if ($file === null) {
+ // Remember that this class does not exist.
+ return $this->classMap[$class] = false;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/AntiSpoof/vendor/composer/autoload_classmap.php b/AntiSpoof/vendor/composer/autoload_classmap.php
new file mode 100644
index 00000000..7a91153b
--- /dev/null
+++ b/AntiSpoof/vendor/composer/autoload_classmap.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/AntiSpoof/vendor/composer/autoload_namespaces.php b/AntiSpoof/vendor/composer/autoload_namespaces.php
new file mode 100644
index 00000000..38f805f9
--- /dev/null
+++ b/AntiSpoof/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'Composer\\Installers\\' => array($vendorDir . '/composer/installers/src'),
+);
diff --git a/AntiSpoof/vendor/composer/autoload_psr4.php b/AntiSpoof/vendor/composer/autoload_psr4.php
new file mode 100644
index 00000000..b265c64a
--- /dev/null
+++ b/AntiSpoof/vendor/composer/autoload_psr4.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/AntiSpoof/vendor/composer/autoload_real.php b/AntiSpoof/vendor/composer/autoload_real.php
new file mode 100644
index 00000000..68c989ab
--- /dev/null
+++ b/AntiSpoof/vendor/composer/autoload_real.php
@@ -0,0 +1,50 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitba7436ce9413b18de9e8955c082ff944
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitba7436ce9413b18de9e8955c082ff944', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitba7436ce9413b18de9e8955c082ff944', 'loadClassLoader'));
+
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
+
+function composerRequireba7436ce9413b18de9e8955c082ff944($file)
+{
+ require $file;
+}
diff --git a/AntiSpoof/vendor/composer/installed.json b/AntiSpoof/vendor/composer/installed.json
new file mode 100644
index 00000000..19e58da8
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installed.json
@@ -0,0 +1,102 @@
+[
+ {
+ "name": "composer/installers",
+ "version": "v1.0.22",
+ "version_normalized": "1.0.22.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/installers.git",
+ "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/installers/zipball/bd9b14f094c89c8b5804a4e41edeb7853bb85046",
+ "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "1.0.0"
+ },
+ "replace": {
+ "roundcube/plugin-installer": "*",
+ "shama/baton": "*"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "phpunit/phpunit": "4.1.*"
+ },
+ "time": "2015-10-29 23:28:48",
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Composer\\Installers\\Plugin",
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Composer\\Installers\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kyle Robinson Young",
+ "email": "kyle@dontkry.com",
+ "homepage": "https://github.com/shama"
+ }
+ ],
+ "description": "A multi-framework Composer library installer",
+ "homepage": "http://composer.github.com/installers/",
+ "keywords": [
+ "Craft",
+ "Dolibarr",
+ "Hurad",
+ "MODX Evo",
+ "OXID",
+ "SMF",
+ "Thelia",
+ "WolfCMS",
+ "agl",
+ "aimeos",
+ "annotatecms",
+ "bitrix",
+ "cakephp",
+ "chef",
+ "codeigniter",
+ "concrete5",
+ "croogo",
+ "dokuwiki",
+ "drupal",
+ "elgg",
+ "fuelphp",
+ "grav",
+ "installer",
+ "joomla",
+ "kohana",
+ "laravel",
+ "lithium",
+ "magento",
+ "mako",
+ "mediawiki",
+ "modulework",
+ "moodle",
+ "phpbb",
+ "piwik",
+ "ppi",
+ "puppet",
+ "roundcube",
+ "shopware",
+ "silverstripe",
+ "symfony",
+ "typo3",
+ "wordpress",
+ "zend",
+ "zikula"
+ ]
+ }
+]
diff --git a/AntiSpoof/vendor/composer/installers/.editorconfig b/AntiSpoof/vendor/composer/installers/.editorconfig
new file mode 100644
index 00000000..153cf3ef
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/.editorconfig
@@ -0,0 +1,10 @@
+; top-most EditorConfig file
+root = true
+
+; Unix-style newlines
+[*]
+end_of_line = LF
+
+[*.php]
+indent_style = space
+indent_size = 4
diff --git a/AntiSpoof/vendor/composer/installers/.gitignore b/AntiSpoof/vendor/composer/installers/.gitignore
new file mode 100644
index 00000000..ff7f293d
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/.gitignore
@@ -0,0 +1,3 @@
+vendor/
+composer.lock
+.idea/
diff --git a/AntiSpoof/vendor/composer/installers/.travis.yml b/AntiSpoof/vendor/composer/installers/.travis.yml
new file mode 100644
index 00000000..dc4ecf4c
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/.travis.yml
@@ -0,0 +1,21 @@
+language: php
+
+php:
+ - 5.3
+ - 5.4
+ - 5.5
+ - 5.6
+ - 7.0
+ - hhvm
+
+matrix:
+ fast_finish: true
+ allow_failures:
+ - php: 7.0
+
+before_script:
+ - composer self-update
+ - composer install
+
+script:
+ - phpunit
diff --git a/AntiSpoof/vendor/composer/installers/LICENSE b/AntiSpoof/vendor/composer/installers/LICENSE
new file mode 100644
index 00000000..85f97fc7
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2012 Kyle Robinson Young
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/AntiSpoof/vendor/composer/installers/README.md b/AntiSpoof/vendor/composer/installers/README.md
new file mode 100644
index 00000000..3a9664e2
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/README.md
@@ -0,0 +1,193 @@
+# A Multi-Framework [Composer](http://getcomposer.org) Library Installer
+
+[![Build Status](http://img.shields.io/travis/composer/installers.svg)](http://travis-ci.org/composer/installers)
+
+This is for PHP package authors to require in their `composer.json`. It will
+install their package to the correct location based on the specified package
+type.
+
+The goal of `installers` is to be a simple package type to install path map.
+Users can also customize the install path per package and package authors can
+modify the package name upon installing.
+
+`installers` isn't intended on replacing all custom installers. If your
+package requires special installation handling then by all means, create a
+custom installer to handle it.
+
+**Natively Supported Frameworks**:
+
+The following frameworks natively work with Composer and will be
+installed to the default `vendor` directory. `composer/installers`
+is not needed to install packages with these frameworks:
+
+* Aura
+* Symfony2
+* Yii
+* Yii2
+
+**Current Supported Package Types**:
+
+> Stable types are marked as **bold**, this means that installation paths
+> for those type will not be changed. Any adjustment for those types would
+> require creation of brand new type that will cover required changes.
+
+| Framework | Types
+| --------- | -----
+| Aimeos | `aimeos-extension`
+| Asgard | `asgard-module`<br>`asgard-theme`
+| AGL | `agl-module`
+| Bonefish | `bonefish-package`
+| AnnotateCms | `annotatecms-module`<br>`annotatecms-component`<br>`annotatecms-service`
+| Bitrix | `bitrix-module`<br>`bitrix-component`<br>`bitrix-theme`
+| CakePHP 2+ | **`cakephp-plugin`**
+| Chef | `chef-cookbook`<br>`chef-role`
+| CCFramework | `ccframework-ship`<br>`ccframework-theme`
+| CodeIgniter | `codeigniter-library`<br>`codeigniter-third-party`<br>`codeigniter-module`
+| concrete5 | `concrete5-block`<br>`concrete5-package`<br>`concrete5-theme`<br>`concrete5-update`
+| Craft | `craft-plugin`
+| Croogo | `croogo-plugin`<br>`croogo-theme`
+| DokuWiki | `dokuwiki-plugin`<br>`dokuwiki-template`
+| Dolibarr | `dolibarr-module`
+| Drupal | <b>`drupal-module`<br>`drupal-theme`</b><br>`drupal-library`<br>`drupal-profile`<br>`drupal-drush`
+| Elgg | `elgg-plugin`
+| FuelPHP v1.x | `fuel-module`<br>`fuel-package`<br/>`fuel-theme`
+| FuelPHP v2.x | `fuelphp-component`
+| Grav | `grav-plugin`<br>`grav-theme`
+| Hurad | `hurad-plugin`<br>`hurad-theme`
+| Joomla | `joomla-component`<br>`joomla-module`<br>`joomla-template`<br>`joomla-plugin`<br>`joomla-library`
+| Kirby | **`kirby-plugin`**
+| KodiCMS | `kodicms-plugin`<br>`kodicms-media`
+| Kohana | **`kohana-module`**
+| Laravel | `laravel-library`
+| Lithium | **`lithium-library`<br>`lithium-source`**
+| Magento | `magento-library`<br>`magento-skin`<br>`magento-theme`
+| Mako | `mako-package`
+| MODX Evo | `modxevo-snippet`<br>`modxevo-plugin`<br>`modxevo-module`<br>`modxevo-template`<br>`modxevo-lib`
+| MediaWiki | `mediawiki-extension`
+| October | **`october-module`<br>`october-plugin`<br>`october-theme`**
+| OXID | `oxid-module`<br>`oxid-theme`<br>`oxid-out`
+| MODULEWork | `modulework-module`
+| Moodle | `moodle-*` (Please [check source](https://raw.githubusercontent.com/composer/installers/master/src/Composer/Installers/MoodleInstaller.php) for all supported types)
+| Piwik | `piwik-plugin`
+| phpBB | `phpbb-extension`<br>`phpbb-style`<br>`phpbb-language`
+| Pimcore | `pimcore-plugin`
+| PPI | **`ppi-module`**
+| Puppet | `puppet-module`
+| REDAXO | `redaxo-addon`
+| Roundcube | `roundcube-plugin`
+| shopware | `shopware-backend-plugin`<br/>`shopware-core-plugin`<br/>`shopware-frontend-plugin`<br/>`shopware-theme`
+| SilverStripe | `silverstripe-module`<br>`silverstripe-theme`
+| SMF | `smf-module`<br>`smf-theme`
+| symfony1 | **`symfony1-plugin`**
+| Tusk | `tusk-task`<br>`tusk-command`<br>`tusk-asset`
+| TYPO3 Flow | `typo3-flow-package`<br>`typo3-flow-framework`<br>`typo3-flow-plugin`<br>`typo3-flow-site`<br>`typo3-flow-boilerplate`<br>`typo3-flow-build`
+| TYPO3 CMS | `typo3-cms-extension`
+| Wolf CMS | `wolfcms-plugin`
+| WordPress | <b>`wordpress-plugin`<br>`wordpress-theme`</b><br>`wordpress-muplugin`
+| Zend | `zend-library`<br>`zend-extra`<br>`zend-module`
+| Zikula | `zikula-module`<br>`zikula-theme`
+| Prestashop | `prestashop-module`<br>`prestashop-theme`
+
+## Example `composer.json` File
+
+This is an example for a CakePHP plugin. The only important parts to set in your
+composer.json file are `"type": "cakephp-plugin"` which describes what your
+package is and `"require": { "composer/installers": "~1.0" }` which tells composer
+to load the custom installers.
+
+```json
+{
+ "name": "you/ftp",
+ "type": "cakephp-plugin",
+ "require": {
+ "composer/installers": "~1.0"
+ }
+}
+```
+
+This would install your package to the `Plugin/Ftp/` folder of a CakePHP app
+when a user runs `php composer.phar install`.
+
+So submit your packages to [packagist.org](http://packagist.org)!
+
+## Custom Install Paths
+
+If you are consuming a package that uses the `composer/installers` you can
+override the install path with the following extra in your `composer.json`:
+
+```json
+{
+ "extra": {
+ "installer-paths": {
+ "your/custom/path/{$name}/": ["shama/ftp", "vendor/package"]
+ }
+ }
+}
+```
+
+A package type can have a custom installation path with a `type:` prefix.
+
+``` json
+{
+ "extra": {
+ "installer-paths": {
+ "your/custom/path/{$name}/": ["type:wordpress-plugin"]
+ }
+ }
+}
+```
+
+This would use your custom path for each of the listed packages. The available
+variables to use in your paths are: `{$name}`, `{$vendor}`, `{$type}`.
+
+## Custom Install Names
+
+If you're a package author and need your package to be named differently when
+installed consider using the `installer-name` extra.
+
+For example you have a package named `shama/cakephp-ftp` with the type
+`cakephp-plugin`. Installing with `composer/installers` would install to the
+path `Plugin/CakephpFtp`. Due to the strict naming conventions, you as a
+package author actually need the package to be named and installed to
+`Plugin/Ftp`. Using the following config within your **package** `composer.json`
+will allow this:
+
+```json
+{
+ "name": "shama/cakephp-ftp",
+ "type": "cakephp-plugin",
+ "extra": {
+ "installer-name": "Ftp"
+ }
+}
+```
+
+Please note the name entered into `installer-name` will be the final and will
+not be inflected.
+
+## Contribute!
+
+* [Fork and clone](https://help.github.com/articles/fork-a-repo).
+* Run the command `php composer.phar install` to install the dependencies.
+ This will also install the dev dependencies. See [Composer](https://getcomposer.org/doc/03-cli.md#install).
+* Use the command `phpunit` to run the tests. See [PHPUnit](http://phpunit.de).
+* Create a branch, commit, push and send us a
+ [pull request](https://help.github.com/articles/using-pull-requests).
+
+To ensure a consistent code base, you should make sure the code follows the
+[Coding Standards](http://symfony.com/doc/2.0/contributing/code/standards.html)
+which we borrowed from Symfony.
+
+If you would like to help, please take a look at the list of
+[issues](https://github.com/composer/installers/issues).
+
+### Should we allow dynamic package types or paths? No.
+What are they? The ability for a package author to determine where a package
+will be installed either through setting the path directly in their
+`composer.json` or through a dynamic package type: `"type":
+"framework-install-here"`.
+
+It has been proposed many times. Even implemented once early on and then
+removed. `installers` won't do this because it would allow a single package
+author to wipe out entire folders without the user's consent. That user would
+then come here to yell at us.
diff --git a/AntiSpoof/vendor/composer/installers/composer.json b/AntiSpoof/vendor/composer/installers/composer.json
new file mode 100644
index 00000000..19e5f0fb
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/composer.json
@@ -0,0 +1,80 @@
+{
+ "name": "composer/installers",
+ "type": "composer-plugin",
+ "license": "MIT",
+ "description": "A multi-framework Composer library installer",
+ "keywords": [
+ "installer",
+ "Aimeos",
+ "AGL",
+ "AnnotateCms",
+ "Bitrix",
+ "CakePHP",
+ "Chef",
+ "CodeIgniter",
+ "concrete5",
+ "Craft",
+ "Croogo",
+ "DokuWiki",
+ "Dolibarr",
+ "Drupal",
+ "Elgg",
+ "FuelPHP",
+ "Grav",
+ "Hurad",
+ "Joomla",
+ "Kohana",
+ "Laravel",
+ "Lithium",
+ "Magento",
+ "Mako",
+ "MODX Evo",
+ "MediaWiki",
+ "OXID",
+ "MODULEWork",
+ "Moodle",
+ "Piwik",
+ "phpBB",
+ "PPI",
+ "Puppet",
+ "Roundcube",
+ "shopware",
+ "SilverStripe",
+ "SMF",
+ "symfony",
+ "Thelia",
+ "TYPO3",
+ "WolfCMS",
+ "WordPress",
+ "Zend",
+ "Zikula"
+ ],
+ "homepage": "http://composer.github.com/installers/",
+ "authors": [
+ {
+ "name": "Kyle Robinson Young",
+ "email": "kyle@dontkry.com",
+ "homepage": "https://github.com/shama"
+ }
+ ],
+ "autoload": {
+ "psr-0": { "Composer\\Installers\\": "src/" }
+ },
+ "extra": {
+ "class": "Composer\\Installers\\Plugin",
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "replace": {
+ "shama/baton": "*",
+ "roundcube/plugin-installer": "*"
+ },
+ "require": {
+ "composer-plugin-api": "1.0.0"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "phpunit/phpunit": "4.1.*"
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/phpunit.xml.dist b/AntiSpoof/vendor/composer/installers/phpunit.xml.dist
new file mode 100644
index 00000000..cc5cc991
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/phpunit.xml.dist
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+ backupStaticAttributes="false"
+ colors="true"
+ convertErrorsToExceptions="true"
+ convertNoticesToExceptions="true"
+ convertWarningsToExceptions="true"
+ processIsolation="false"
+ stopOnFailure="false"
+ syntaxCheck="false"
+ bootstrap="tests/bootstrap.php"
+>
+ <testsuites>
+ <testsuite name="Installers Test Suite">
+ <directory>tests/Composer/Installers</directory>
+ </testsuite>
+ </testsuites>
+
+ <filter>
+ <whitelist>
+ <directory>src/Composer/Installers</directory>
+ </whitelist>
+ </filter>
+</phpunit> \ No newline at end of file
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AglInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AglInstaller.php
new file mode 100644
index 00000000..01b8a416
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AglInstaller.php
@@ -0,0 +1,21 @@
+<?php
+namespace Composer\Installers;
+
+class AglInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'More/{$name}/',
+ );
+
+ /**
+ * Format package name to CamelCase
+ */
+ public function inflectPackageVars($vars)
+ {
+ $vars['name'] = preg_replace_callback('/(?:^|_|-)(.?)/', function ($matches) {
+ return strtoupper($matches[1]);
+ }, $vars['name']);
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php
new file mode 100644
index 00000000..79a0e958
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class AimeosInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'extension' => 'ext/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php
new file mode 100644
index 00000000..89d7ad90
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class AnnotateCmsInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'addons/modules/{$name}/',
+ 'component' => 'addons/components/{$name}/',
+ 'service' => 'addons/services/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php
new file mode 100644
index 00000000..995ee2b4
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php
@@ -0,0 +1,45 @@
+<?php
+namespace Composer\Installers;
+
+class AsgardInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'Modules/{$name}/',
+ 'theme' => 'Themes/{$name}/'
+ );
+
+ /**
+ * Format package name.
+ *
+ * For package type asgard-module, cut off a trailing '-plugin' if present.
+ *
+ * For package type asgard-theme, cut off a trailing '-theme' if present.
+ *
+ */
+ public function inflectPackageVars($vars)
+ {
+ if ($vars['type'] === 'asgard-module') {
+ return $this->inflectPluginVars($vars);
+ }
+
+ if ($vars['type'] === 'asgard-theme') {
+ return $this->inflectThemeVars($vars);
+ }
+
+ return $vars;
+ }
+
+ protected function inflectPluginVars($vars)
+ {
+ $vars['name'] = ucfirst(preg_replace('/-module/', '', $vars['name']));
+
+ return $vars;
+ }
+
+ protected function inflectThemeVars($vars)
+ {
+ $vars['name'] = ucfirst(preg_replace('/-theme$/', '', $vars['name']));
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php
new file mode 100644
index 00000000..43938ec5
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php
@@ -0,0 +1,135 @@
+<?php
+namespace Composer\Installers;
+
+use Composer\IO\IOInterface;
+use Composer\Composer;
+use Composer\Package\PackageInterface;
+
+abstract class BaseInstaller
+{
+ protected $locations = array();
+ protected $composer;
+ protected $package;
+ protected $io;
+
+ /**
+ * Initializes base installer.
+ *
+ * @param PackageInterface $package
+ * @param Composer $composer
+ * @param IOInterface $io
+ */
+ public function __construct(PackageInterface $package = null, Composer $composer = null, IOInterface $io = null)
+ {
+ $this->composer = $composer;
+ $this->package = $package;
+ $this->io = $io;
+ }
+
+ /**
+ * Return the install path based on package type.
+ *
+ * @param PackageInterface $package
+ * @param string $frameworkType
+ * @return string
+ */
+ public function getInstallPath(PackageInterface $package, $frameworkType = '')
+ {
+ $type = $this->package->getType();
+
+ $prettyName = $this->package->getPrettyName();
+ if (strpos($prettyName, '/') !== false) {
+ list($vendor, $name) = explode('/', $prettyName);
+ } else {
+ $vendor = '';
+ $name = $prettyName;
+ }
+
+ $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type'));
+
+ $extra = $package->getExtra();
+ if (!empty($extra['installer-name'])) {
+ $availableVars['name'] = $extra['installer-name'];
+ }
+
+ if ($this->composer->getPackage()) {
+ $extra = $this->composer->getPackage()->getExtra();
+ if (!empty($extra['installer-paths'])) {
+ $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type);
+ if ($customPath !== false) {
+ return $this->templatePath($customPath, $availableVars);
+ }
+ }
+ }
+
+ $packageType = substr($type, strlen($frameworkType) + 1);
+ $locations = $this->getLocations();
+ if (!isset($locations[$packageType])) {
+ throw new \InvalidArgumentException(sprintf('Package type "%s" is not supported', $type));
+ }
+
+ return $this->templatePath($locations[$packageType], $availableVars);
+ }
+
+ /**
+ * For an installer to override to modify the vars per installer.
+ *
+ * @param array $vars
+ * @return array
+ */
+ public function inflectPackageVars($vars)
+ {
+ return $vars;
+ }
+
+ /**
+ * Gets the installer's locations
+ *
+ * @return array
+ */
+ public function getLocations()
+ {
+ return $this->locations;
+ }
+
+ /**
+ * Replace vars in a path
+ *
+ * @param string $path
+ * @param array $vars
+ * @return string
+ */
+ protected function templatePath($path, array $vars = array())
+ {
+ if (strpos($path, '{') !== false) {
+ extract($vars);
+ preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches);
+ if (!empty($matches[1])) {
+ foreach ($matches[1] as $var) {
+ $path = str_replace('{$' . $var . '}', $$var, $path);
+ }
+ }
+ }
+
+ return $path;
+ }
+
+ /**
+ * Search through a passed paths array for a custom install path.
+ *
+ * @param array $paths
+ * @param string $name
+ * @param string $type
+ * @return string
+ */
+ protected function mapCustomInstallPaths(array $paths, $name, $type)
+ {
+ foreach ($paths as $path => $names) {
+ if (in_array($name, $names) || in_array('type:' . $type, $names)) {
+ return $path;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php
new file mode 100644
index 00000000..9c79838f
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php
@@ -0,0 +1,89 @@
+<?php
+namespace Composer\Installers;
+
+use Composer\Util\Filesystem;
+
+/**
+ * Installer for Bitrix Framework
+ *
+ * @author Nik Samokhvalov <nik@samokhvalov.info>
+ * @author Denis Kulichkin <onexhovia@gmail.com>
+ */
+class BitrixInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'bitrix/modules/{$name}/',
+ 'component' => 'bitrix/components/{$name}/',
+ 'theme' => 'bitrix/templates/{$name}/',
+ );
+
+ /**
+ * @var array Storage for informations about duplicates at all the time of installation packages
+ */
+ private static $checkedDuplicates = array();
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function templatePath($path, array $vars = array())
+ {
+ $templatePath = parent::templatePath($path, $vars);
+ $this->checkDuplicates($templatePath, $vars);
+
+ return $templatePath;
+ }
+
+ /**
+ * Duplicates search packages
+ *
+ * @param string $templatePath
+ * @param array $vars
+ */
+ protected function checkDuplicates($templatePath, array $vars = array())
+ {
+ /**
+ * Incorrect paths for backward compatibility
+ */
+ $oldLocations = array(
+ 'module' => 'local/modules/{$name}/',
+ 'component' => 'local/components/{$name}/',
+ 'theme' => 'local/templates/{$name}/'
+ );
+
+ $packageType = substr($vars['type'], strlen('bitrix') + 1);
+ $oldLocation = str_replace('{$name}', $vars['name'], $oldLocations[$packageType]);
+
+ if (in_array($oldLocation, static::$checkedDuplicates)) {
+ return;
+ }
+
+ if ($oldLocation !== $templatePath && file_exists($oldLocation) && $this->io && $this->io->isInteractive()) {
+
+ $this->io->writeError(' <error>Duplication of packages:</error>');
+ $this->io->writeError(' <info>Package ' . $oldLocation . ' will be called instead package ' . $templatePath . '</info>');
+
+ while (true) {
+ switch ($this->io->ask(' <info>Delete ' . $oldLocation . ' [y,n,?]?</info> ', '?')) {
+ case 'y':
+ $fs = new Filesystem();
+ $fs->removeDirectory($oldLocation);
+ break 2;
+
+ case 'n':
+ break 2;
+
+ case '?':
+ default:
+ $this->io->writeError(array(
+ ' y - delete package ' . $oldLocation . ' and to continue with the installation',
+ ' n - don\'t delete and to continue with the installation',
+ ));
+ $this->io->writeError(' ? - print help');
+ break;
+ }
+ }
+ }
+
+ static::$checkedDuplicates[] = $oldLocation;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php
new file mode 100644
index 00000000..da3aad2a
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class BonefishInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'package' => 'Packages/{$vendor}/{$name}/'
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php
new file mode 100644
index 00000000..176c91a9
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php
@@ -0,0 +1,84 @@
+<?php
+namespace Composer\Installers;
+
+use Composer\DependencyResolver\Pool;
+use Composer\Package\PackageInterface;
+
+class CakePHPInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'Plugin/{$name}/',
+ );
+
+ /**
+ * Format package name to CamelCase
+ */
+ public function inflectPackageVars($vars)
+ {
+ if ($this->matchesCakeVersion('>=', '3.0.0')) {
+ return $vars;
+ }
+
+ $nameParts = explode('/', $vars['name']);
+ foreach ($nameParts as &$value) {
+ $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value));
+ $value = str_replace(array('-', '_'), ' ', $value);
+ $value = str_replace(' ', '', ucwords($value));
+ }
+ $vars['name'] = implode('/', $nameParts);
+
+ return $vars;
+ }
+
+ /**
+ * Change the default plugin location when cakephp >= 3.0
+ */
+ public function getLocations()
+ {
+ if ($this->matchesCakeVersion('>=', '3.0.0')) {
+ $this->locations['plugin'] = $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/';
+ }
+ return $this->locations;
+ }
+
+ /**
+ * Check if CakePHP version matches against a version
+ *
+ * @param string $matcher
+ * @param string $version
+ * @return bool
+ */
+ protected function matchesCakeVersion($matcher, $version)
+ {
+ if (class_exists('Composer\Semver\Constraint\MultiConstraint')) {
+ $multiClass = 'Composer\Semver\Constraint\MultiConstraint';
+ $constraintClass = 'Composer\Semver\Constraint\Constraint';
+ } else {
+ $multiClass = 'Composer\Package\LinkConstraint\MultiConstraint';
+ $constraintClass = 'Composer\Package\LinkConstraint\VersionConstraint';
+ }
+
+ $repositoryManager = $this->composer->getRepositoryManager();
+ if ($repositoryManager) {
+ $repos = $repositoryManager->getLocalRepository();
+ if (!$repos) {
+ return false;
+ }
+ $cake3 = new $multiClass(array(
+ new $constraintClass($matcher, $version),
+ new $constraintClass('!=', '9999999-dev'),
+ ));
+ $pool = new Pool('dev');
+ $pool->addRepository($repos);
+ $packages = $pool->whatProvides('cakephp/cakephp');
+ foreach ($packages as $package) {
+ $installed = new $constraintClass('=', $package->getVersion());
+ if ($cake3->matches($installed)) {
+ return true;
+ break;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php
new file mode 100644
index 00000000..ab2f9aad
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class ChefInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'cookbook' => 'Chef/{$vendor}/{$name}/',
+ 'role' => 'Chef/roles/{$name}/',
+ );
+}
+
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php
new file mode 100644
index 00000000..c887815c
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class ClanCatsFrameworkInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'ship' => 'CCF/orbit/{$name}/',
+ 'theme' => 'CCF/app/themes/{$name}/',
+ );
+} \ No newline at end of file
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php
new file mode 100644
index 00000000..3b4a4ece
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class CodeIgniterInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'library' => 'application/libraries/{$name}/',
+ 'third-party' => 'application/third_party/{$name}/',
+ 'module' => 'application/modules/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php
new file mode 100644
index 00000000..4d398a44
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php
@@ -0,0 +1,12 @@
+<?php
+namespace Composer\Installers;
+
+class Concrete5Installer extends BaseInstaller
+{
+ protected $locations = array(
+ 'block' => 'blocks/{$name}/',
+ 'package' => 'packages/{$name}/',
+ 'theme' => 'themes/{$name}/',
+ 'update' => 'updates/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php
new file mode 100644
index 00000000..d37a77ae
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php
@@ -0,0 +1,35 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * Installer for Craft Plugins
+ */
+class CraftInstaller extends BaseInstaller
+{
+ const NAME_PREFIX = 'craft';
+ const NAME_SUFFIX = 'plugin';
+
+ protected $locations = array(
+ 'plugin' => 'craft/plugins/{$name}/',
+ );
+
+ /**
+ * Strip `craft-` prefix and/or `-plugin` suffix from package names
+ *
+ * @param array $vars
+ *
+ * @return array
+ */
+ final public function inflectPackageVars($vars)
+ {
+ return $this->inflectPluginVars($vars);
+ }
+
+ private function inflectPluginVars($vars)
+ {
+ $vars['name'] = preg_replace('/-' . self::NAME_SUFFIX . '$/i', '', $vars['name']);
+ $vars['name'] = preg_replace('/^' . self::NAME_PREFIX . '-/i', '', $vars['name']);
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php
new file mode 100644
index 00000000..d94219d3
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php
@@ -0,0 +1,21 @@
+<?php
+namespace Composer\Installers;
+
+class CroogoInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'Plugin/{$name}/',
+ 'theme' => 'View/Themed/{$name}/',
+ );
+
+ /**
+ * Format package name to CamelCase
+ */
+ public function inflectPackageVars($vars)
+ {
+ $vars['name'] = strtolower(str_replace(array('-', '_'), ' ', $vars['name']));
+ $vars['name'] = str_replace(' ', '', ucwords($vars['name']));
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php
new file mode 100644
index 00000000..cfd638d5
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php
@@ -0,0 +1,50 @@
+<?php
+namespace Composer\Installers;
+
+class DokuWikiInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'lib/plugins/{$name}/',
+ 'template' => 'lib/tpl/{$name}/',
+ );
+
+ /**
+ * Format package name.
+ *
+ * For package type dokuwiki-plugin, cut off a trailing '-plugin',
+ * or leading dokuwiki_ if present.
+ *
+ * For package type dokuwiki-template, cut off a trailing '-template' if present.
+ *
+ */
+ public function inflectPackageVars($vars)
+ {
+
+ if ($vars['type'] === 'dokuwiki-plugin') {
+ return $this->inflectPluginVars($vars);
+ }
+
+ if ($vars['type'] === 'dokuwiki-template') {
+ return $this->inflectTemplateVars($vars);
+ }
+
+ return $vars;
+ }
+
+ protected function inflectPluginVars($vars)
+ {
+ $vars['name'] = preg_replace('/-plugin$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectTemplateVars($vars)
+ {
+ $vars['name'] = preg_replace('/-template$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']);
+
+ return $vars;
+ }
+
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php
new file mode 100644
index 00000000..21f7e8e8
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php
@@ -0,0 +1,16 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * Class DolibarrInstaller
+ *
+ * @package Composer\Installers
+ * @author Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
+ */
+class DolibarrInstaller extends BaseInstaller
+{
+ //TODO: Add support for scripts and themes
+ protected $locations = array(
+ 'module' => 'htdocs/custom/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php
new file mode 100644
index 00000000..17941314
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php
@@ -0,0 +1,14 @@
+<?php
+namespace Composer\Installers;
+
+class DrupalInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'core' => 'core/',
+ 'module' => 'modules/{$name}/',
+ 'theme' => 'themes/{$name}/',
+ 'library' => 'libraries/{$name}/',
+ 'profile' => 'profiles/{$name}/',
+ 'drush' => 'drush/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php
new file mode 100644
index 00000000..c0bb609f
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class ElggInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'mod/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php
new file mode 100644
index 00000000..6eba2e34
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class FuelInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'fuel/app/modules/{$name}/',
+ 'package' => 'fuel/packages/{$name}/',
+ 'theme' => 'fuel/app/themes/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php
new file mode 100644
index 00000000..29d980b3
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class FuelphpInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'component' => 'components/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/GravInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/GravInstaller.php
new file mode 100644
index 00000000..dbe63e07
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/GravInstaller.php
@@ -0,0 +1,30 @@
+<?php
+namespace Composer\Installers;
+
+class GravInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'user/plugins/{$name}/',
+ 'theme' => 'user/themes/{$name}/',
+ );
+
+ /**
+ * Format package name
+ *
+ * @param array $vars
+ *
+ * @return array
+ */
+ public function inflectPackageVars($vars)
+ {
+ $restrictedWords = implode('|', array_keys($this->locations));
+
+ $vars['name'] = strtolower($vars['name']);
+ $vars['name'] = preg_replace('/^(?:grav-)?(?:(?:'.$restrictedWords.')-)?(.*?)(?:-(?:'.$restrictedWords.'))?$/ui',
+ '$1',
+ $vars['name']
+ );
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php
new file mode 100644
index 00000000..8fe017f0
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php
@@ -0,0 +1,25 @@
+<?php
+namespace Composer\Installers;
+
+class HuradInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'plugins/{$name}/',
+ 'theme' => 'plugins/{$name}/',
+ );
+
+ /**
+ * Format package name to CamelCase
+ */
+ public function inflectPackageVars($vars)
+ {
+ $nameParts = explode('/', $vars['name']);
+ foreach ($nameParts as &$value) {
+ $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value));
+ $value = str_replace(array('-', '_'), ' ', $value);
+ $value = str_replace(' ', '', ucwords($value));
+ }
+ $vars['name'] = implode('/', $nameParts);
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Installer.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Installer.php
new file mode 100644
index 00000000..6d04c61d
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Installer.php
@@ -0,0 +1,176 @@
+<?php
+namespace Composer\Installers;
+
+use Composer\IO\IOInterface;
+use Composer\Installer\LibraryInstaller;
+use Composer\Package\PackageInterface;
+use Composer\Repository\InstalledRepositoryInterface;
+
+class Installer extends LibraryInstaller
+{
+ /**
+ * Package types to installer class map
+ *
+ * @var array
+ */
+ private $supportedTypes = array(
+ 'aimeos' => 'AimeosInstaller',
+ 'asgard' => 'AsgardInstaller',
+ 'agl' => 'AglInstaller',
+ 'annotatecms' => 'AnnotateCmsInstaller',
+ 'bitrix' => 'BitrixInstaller',
+ 'bonefish' => 'BonefishInstaller',
+ 'cakephp' => 'CakePHPInstaller',
+ 'chef' => 'ChefInstaller',
+ 'ccframework' => 'ClanCatsFrameworkInstaller',
+ 'codeigniter' => 'CodeIgniterInstaller',
+ 'concrete5' => 'Concrete5Installer',
+ 'craft' => 'CraftInstaller',
+ 'croogo' => 'CroogoInstaller',
+ 'dokuwiki' => 'DokuWikiInstaller',
+ 'dolibarr' => 'DolibarrInstaller',
+ 'drupal' => 'DrupalInstaller',
+ 'elgg' => 'ElggInstaller',
+ 'fuel' => 'FuelInstaller',
+ 'fuelphp' => 'FuelphpInstaller',
+ 'grav' => 'GravInstaller',
+ 'hurad' => 'HuradInstaller',
+ 'joomla' => 'JoomlaInstaller',
+ 'kirby' => 'KirbyInstaller',
+ 'kodicms' => 'KodiCMSInstaller',
+ 'kohana' => 'KohanaInstaller',
+ 'laravel' => 'LaravelInstaller',
+ 'lithium' => 'LithiumInstaller',
+ 'magento' => 'MagentoInstaller',
+ 'mako' => 'MakoInstaller',
+ 'mediawiki' => 'MediaWikiInstaller',
+ 'microweber' => 'MicroweberInstaller',
+ 'modulework' => 'MODULEWorkInstaller',
+ 'modxevo' => 'MODXEvoInstaller',
+ 'moodle' => 'MoodleInstaller',
+ 'october' => 'OctoberInstaller',
+ 'oxid' => 'OxidInstaller',
+ 'phpbb' => 'PhpBBInstaller',
+ 'pimcore' => 'PimcoreInstaller',
+ 'piwik' => 'PiwikInstaller',
+ 'ppi' => 'PPIInstaller',
+ 'puppet' => 'PuppetInstaller',
+ 'redaxo' => 'RedaxoInstaller',
+ 'roundcube' => 'RoundcubeInstaller',
+ 'shopware' => 'ShopwareInstaller',
+ 'silverstripe' => 'SilverStripeInstaller',
+ 'smf' => 'SMFInstaller',
+ 'symfony1' => 'Symfony1Installer',
+ 'thelia' => 'TheliaInstaller',
+ 'tusk' => 'TuskInstaller',
+ 'typo3-cms' => 'TYPO3CmsInstaller',
+ 'typo3-flow' => 'TYPO3FlowInstaller',
+ 'whmcs' => 'WHMCSInstaller',
+ 'wolfcms' => 'WolfCMSInstaller',
+ 'wordpress' => 'WordPressInstaller',
+ 'zend' => 'ZendInstaller',
+ 'zikula' => 'ZikulaInstaller',
+ 'prestashop' => 'PrestashopInstaller'
+ );
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getInstallPath(PackageInterface $package)
+ {
+ $type = $package->getType();
+ $frameworkType = $this->findFrameworkType($type);
+
+ if ($frameworkType === false) {
+ throw new \InvalidArgumentException(
+ 'Sorry the package type of this package is not yet supported.'
+ );
+ }
+
+ $class = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType];
+ $installer = new $class($package, $this->composer, $this->getIO());
+
+ return $installer->getInstallPath($package, $frameworkType);
+ }
+
+ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package)
+ {
+ if (!$repo->hasPackage($package)) {
+ throw new \InvalidArgumentException('Package is not installed: '.$package);
+ }
+
+ $repo->removePackage($package);
+
+ $installPath = $this->getInstallPath($package);
+ $this->io->write(sprintf('Deleting %s - %s', $installPath, $this->filesystem->removeDirectory($installPath) ? '<comment>deleted</comment>' : '<error>not deleted</error>'));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function supports($packageType)
+ {
+ $frameworkType = $this->findFrameworkType($packageType);
+
+ if ($frameworkType === false) {
+ return false;
+ }
+
+ $locationPattern = $this->getLocationPattern($frameworkType);
+
+ return preg_match('#' . $frameworkType . '-' . $locationPattern . '#', $packageType, $matches) === 1;
+ }
+
+ /**
+ * Finds a supported framework type if it exists and returns it
+ *
+ * @param string $type
+ * @return string
+ */
+ protected function findFrameworkType($type)
+ {
+ $frameworkType = false;
+
+ krsort($this->supportedTypes);
+
+ foreach ($this->supportedTypes as $key => $val) {
+ if ($key === substr($type, 0, strlen($key))) {
+ $frameworkType = substr($type, 0, strlen($key));
+ break;
+ }
+ }
+
+ return $frameworkType;
+ }
+
+ /**
+ * Get the second part of the regular expression to check for support of a
+ * package type
+ *
+ * @param string $frameworkType
+ * @return string
+ */
+ protected function getLocationPattern($frameworkType)
+ {
+ $pattern = false;
+ if (!empty($this->supportedTypes[$frameworkType])) {
+ $frameworkClass = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType];
+ /** @var BaseInstaller $framework */
+ $framework = new $frameworkClass(null, $this->composer, $this->getIO());
+ $locations = array_keys($framework->getLocations());
+ $pattern = $locations ? '(' . implode('|', $locations) . ')' : false;
+ }
+
+ return $pattern ? : '(\w+)';
+ }
+
+ /**
+ * Get I/O object
+ *
+ * @return IOInterface
+ */
+ private function getIO()
+ {
+ return $this->io;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php
new file mode 100644
index 00000000..9ee77596
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php
@@ -0,0 +1,15 @@
+<?php
+namespace Composer\Installers;
+
+class JoomlaInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'component' => 'components/{$name}/',
+ 'module' => 'modules/{$name}/',
+ 'template' => 'templates/{$name}/',
+ 'plugin' => 'plugins/{$name}/',
+ 'library' => 'libraries/{$name}/',
+ );
+
+ // TODO: Add inflector for mod_ and com_ names
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php
new file mode 100644
index 00000000..ae7ba8a4
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class KirbyInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'site/plugins/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php
new file mode 100644
index 00000000..7143e232
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class KodiCMSInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'cms/plugins/{$name}/',
+ 'media' => 'cms/media/vendor/{$name}/'
+ );
+} \ No newline at end of file
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php
new file mode 100644
index 00000000..dcd6d263
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class KohanaInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php
new file mode 100644
index 00000000..be4d53a7
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class LaravelInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'library' => 'libraries/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php
new file mode 100644
index 00000000..47bbd4ca
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class LithiumInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'library' => 'libraries/{$name}/',
+ 'source' => 'libraries/_source/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php
new file mode 100644
index 00000000..9c2e9fb4
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class MODULEWorkInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php
new file mode 100644
index 00000000..5a664608
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php
@@ -0,0 +1,16 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * An installer to handle MODX Evolution specifics when installing packages.
+ */
+class MODXEvoInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'snippet' => 'assets/snippets/{$name}/',
+ 'plugin' => 'assets/plugins/{$name}/',
+ 'module' => 'assets/modules/{$name}/',
+ 'template' => 'assets/templates/{$name}/',
+ 'lib' => 'assets/lib/{$name}/'
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php
new file mode 100644
index 00000000..cf18e947
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class MagentoInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'theme' => 'app/design/frontend/{$name}/',
+ 'skin' => 'skin/frontend/default/{$name}/',
+ 'library' => 'lib/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php
new file mode 100644
index 00000000..ca3cfacb
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class MakoInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'package' => 'app/packages/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php
new file mode 100644
index 00000000..01008c63
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php
@@ -0,0 +1,50 @@
+<?php
+namespace Composer\Installers;
+
+class MediaWikiInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'extension' => 'extensions/{$name}/',
+ 'skin' => 'skins/{$name}/',
+ );
+
+ /**
+ * Format package name.
+ *
+ * For package type mediawiki-extension, cut off a trailing '-extension' if present and transform
+ * to CamelCase keeping existing uppercase chars.
+ *
+ * For package type mediawiki-skin, cut off a trailing '-skin' if present.
+ *
+ */
+ public function inflectPackageVars($vars)
+ {
+
+ if ($vars['type'] === 'mediawiki-extension') {
+ return $this->inflectExtensionVars($vars);
+ }
+
+ if ($vars['type'] === 'mediawiki-skin') {
+ return $this->inflectSkinVars($vars);
+ }
+
+ return $vars;
+ }
+
+ protected function inflectExtensionVars($vars)
+ {
+ $vars['name'] = preg_replace('/-extension$/', '', $vars['name']);
+ $vars['name'] = str_replace('-', ' ', $vars['name']);
+ $vars['name'] = str_replace(' ', '', ucwords($vars['name']));
+
+ return $vars;
+ }
+
+ protected function inflectSkinVars($vars)
+ {
+ $vars['name'] = preg_replace('/-skin$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php
new file mode 100644
index 00000000..4bbbec8c
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php
@@ -0,0 +1,111 @@
+<?php
+namespace Composer\Installers;
+
+class MicroweberInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'userfiles/modules/{$name}/',
+ 'module-skin' => 'userfiles/modules/{$name}/templates/',
+ 'template' => 'userfiles/templates/{$name}/',
+ 'element' => 'userfiles/elements/{$name}/',
+ 'vendor' => 'vendor/{$name}/',
+ 'components' => 'components/{$name}/'
+ );
+
+ /**
+ * Format package name.
+ *
+ * For package type microweber-module, cut off a trailing '-module' if present
+ *
+ * For package type microweber-template, cut off a trailing '-template' if present.
+ *
+ */
+ public function inflectPackageVars($vars)
+ {
+ if ($vars['type'] === 'microweber-template') {
+ return $this->inflectTemplateVars($vars);
+ }
+ if ($vars['type'] === 'microweber-templates') {
+ return $this->inflectTemplatesVars($vars);
+ }
+ if ($vars['type'] === 'microweber-core') {
+ return $this->inflectCoreVars($vars);
+ }
+ if ($vars['type'] === 'microweber-adapter') {
+ return $this->inflectCoreVars($vars);
+ }
+ if ($vars['type'] === 'microweber-module') {
+ return $this->inflectModuleVars($vars);
+ }
+ if ($vars['type'] === 'microweber-modules') {
+ return $this->inflectModulesVars($vars);
+ }
+ if ($vars['type'] === 'microweber-skin') {
+ return $this->inflectSkinVars($vars);
+ }
+ if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') {
+ return $this->inflectElementVars($vars);
+ }
+
+ return $vars;
+ }
+
+ protected function inflectTemplateVars($vars)
+ {
+ $vars['name'] = preg_replace('/-template$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/template-$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectTemplatesVars($vars)
+ {
+ $vars['name'] = preg_replace('/-templates$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/templates-$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectCoreVars($vars)
+ {
+ $vars['name'] = preg_replace('/-providers$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/-provider$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/-adapter$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectModuleVars($vars)
+ {
+ $vars['name'] = preg_replace('/-module$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/module-$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectModulesVars($vars)
+ {
+ $vars['name'] = preg_replace('/-modules$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/modules-$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectSkinVars($vars)
+ {
+ $vars['name'] = preg_replace('/-skin$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/skin-$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectElementVars($vars)
+ {
+ $vars['name'] = preg_replace('/-elements$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/elements-$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/-element$/', '', $vars['name']);
+ $vars['name'] = preg_replace('/element-$/', '', $vars['name']);
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php
new file mode 100644
index 00000000..3cdda6ca
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php
@@ -0,0 +1,56 @@
+<?php
+namespace Composer\Installers;
+
+class MoodleInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'mod' => 'mod/{$name}/',
+ 'admin_report' => 'admin/report/{$name}/',
+ 'atto' => 'lib/editor/atto/plugins/{$name}/',
+ 'tool' => 'admin/tool/{$name}/',
+ 'assignment' => 'mod/assignment/type/{$name}/',
+ 'assignsubmission' => 'mod/assign/submission/{$name}/',
+ 'assignfeedback' => 'mod/assign/feedback/{$name}/',
+ 'auth' => 'auth/{$name}/',
+ 'availability' => 'availability/condition/{$name}/',
+ 'block' => 'blocks/{$name}/',
+ 'booktool' => 'mod/book/tool/{$name}/',
+ 'cachestore' => 'cache/stores/{$name}/',
+ 'cachelock' => 'cache/locks/{$name}/',
+ 'calendartype' => 'calendar/type/{$name}/',
+ 'format' => 'course/format/{$name}/',
+ 'coursereport' => 'course/report/{$name}/',
+ 'datafield' => 'mod/data/field/{$name}/',
+ 'datapreset' => 'mod/data/preset/{$name}/',
+ 'editor' => 'lib/editor/{$name}/',
+ 'enrol' => 'enrol/{$name}/',
+ 'filter' => 'filter/{$name}/',
+ 'gradeexport' => 'grade/export/{$name}/',
+ 'gradeimport' => 'grade/import/{$name}/',
+ 'gradereport' => 'grade/report/{$name}/',
+ 'gradingform' => 'grade/grading/form/{$name}/',
+ 'local' => 'local/{$name}/',
+ 'logstore' => 'admin/tool/log/store/{$name}/',
+ 'ltisource' => 'mod/lti/source/{$name}/',
+ 'ltiservice' => 'mod/lti/service/{$name}/',
+ 'message' => 'message/output/{$name}/',
+ 'mnetservice' => 'mnet/service/{$name}/',
+ 'plagiarism' => 'plagiarism/{$name}/',
+ 'portfolio' => 'portfolio/{$name}/',
+ 'qbehaviour' => 'question/behaviour/{$name}/',
+ 'qformat' => 'question/format/{$name}/',
+ 'qtype' => 'question/type/{$name}/',
+ 'quizaccess' => 'mod/quiz/accessrule/{$name}/',
+ 'quiz' => 'mod/quiz/report/{$name}/',
+ 'report' => 'report/{$name}/',
+ 'repository' => 'repository/{$name}/',
+ 'scormreport' => 'mod/scorm/report/{$name}/',
+ 'theme' => 'theme/{$name}/',
+ 'tinymce' => 'lib/editor/tinymce/plugins/{$name}/',
+ 'profilefield' => 'user/profile/field/{$name}/',
+ 'webservice' => 'webservice/{$name}/',
+ 'workshopallocation' => 'mod/workshop/allocation/{$name}/',
+ 'workshopeval' => 'mod/workshop/eval/{$name}/',
+ 'workshopform' => 'mod/workshop/form/{$name}/'
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php
new file mode 100644
index 00000000..6bf53fd1
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php
@@ -0,0 +1,46 @@
+<?php
+namespace Composer\Installers;
+
+class OctoberInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$name}/',
+ 'plugin' => 'plugins/{$vendor}/{$name}/',
+ 'theme' => 'themes/{$name}/'
+ );
+
+ /**
+ * Format package name.
+ *
+ * For package type october-plugin, cut off a trailing '-plugin' if present.
+ *
+ * For package type october-theme, cut off a trailing '-theme' if present.
+ *
+ */
+ public function inflectPackageVars($vars)
+ {
+ if ($vars['type'] === 'october-plugin') {
+ return $this->inflectPluginVars($vars);
+ }
+
+ if ($vars['type'] === 'october-theme') {
+ return $this->inflectThemeVars($vars);
+ }
+
+ return $vars;
+ }
+
+ protected function inflectPluginVars($vars)
+ {
+ $vars['name'] = preg_replace('/-plugin$/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ protected function inflectThemeVars($vars)
+ {
+ $vars['name'] = preg_replace('/-theme$/', '', $vars['name']);
+
+ return $vars;
+ }
+} \ No newline at end of file
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php
new file mode 100644
index 00000000..22fb56aa
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class OxidInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$name}/',
+ 'theme' => 'application/views/{$name}/',
+ 'out' => 'out/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php
new file mode 100644
index 00000000..170136f9
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class PPIInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php
new file mode 100644
index 00000000..deb2b77a
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class PhpBBInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'extension' => 'ext/{$vendor}/{$name}/',
+ 'language' => 'language/{$name}/',
+ 'style' => 'styles/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php
new file mode 100644
index 00000000..4781fa6d
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php
@@ -0,0 +1,21 @@
+<?php
+namespace Composer\Installers;
+
+class PimcoreInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'plugins/{$name}/',
+ );
+
+ /**
+ * Format package name to CamelCase
+ */
+ public function inflectPackageVars($vars)
+ {
+ $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name']));
+ $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);
+ $vars['name'] = str_replace(' ', '', ucwords($vars['name']));
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php
new file mode 100644
index 00000000..c17f4572
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php
@@ -0,0 +1,32 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * Class PiwikInstaller
+ *
+ * @package Composer\Installers
+ */
+class PiwikInstaller extends BaseInstaller
+{
+ /**
+ * @var array
+ */
+ protected $locations = array(
+ 'plugin' => 'plugins/{$name}/',
+ );
+
+ /**
+ * Format package name to CamelCase
+ * @param array $vars
+ *
+ * @return array
+ */
+ public function inflectPackageVars($vars)
+ {
+ $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name']));
+ $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);
+ $vars['name'] = str_replace(' ', '', ucwords($vars['name']));
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Plugin.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Plugin.php
new file mode 100644
index 00000000..5eb04af1
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Plugin.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Composer\Installers;
+
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use Composer\Plugin\PluginInterface;
+
+class Plugin implements PluginInterface
+{
+
+ public function activate(Composer $composer, IOInterface $io)
+ {
+ $installer = new Installer($io, $composer);
+ $composer->getInstallationManager()->addInstaller($installer);
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php
new file mode 100644
index 00000000..4c8421e3
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class PrestashopInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$name}/',
+ 'theme' => 'themes/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php
new file mode 100644
index 00000000..77cc3dd8
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace Composer\Installers;
+
+class PuppetInstaller extends BaseInstaller
+{
+
+ protected $locations = array(
+ 'module' => 'modules/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php
new file mode 100644
index 00000000..09544576
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class RedaxoInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'addon' => 'redaxo/include/addons/{$name}/',
+ 'bestyle-plugin' => 'redaxo/include/addons/be_style/plugins/{$name}/'
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php
new file mode 100644
index 00000000..d8d795be
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php
@@ -0,0 +1,22 @@
+<?php
+namespace Composer\Installers;
+
+class RoundcubeInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'plugins/{$name}/',
+ );
+
+ /**
+ * Lowercase name and changes the name to a underscores
+ *
+ * @param array $vars
+ * @return array
+ */
+ public function inflectPackageVars($vars)
+ {
+ $vars['name'] = strtolower(str_replace('-', '_', $vars['name']));
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php
new file mode 100644
index 00000000..1acd3b14
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class SMFInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'Sources/{$name}/',
+ 'theme' => 'Themes/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php
new file mode 100644
index 00000000..673f1fc1
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php
@@ -0,0 +1,58 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * Plugin/theme installer for shopware
+ * @author Benjamin Boit
+ */
+class ShopwareInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'backend-plugin' => 'engine/Shopware/Plugins/Local/Backend/{$name}/',
+ 'core-plugin' => 'engine/Shopware/Plugins/Local/Core/{$name}/',
+ 'frontend-plugin' => 'engine/Shopware/Plugins/Local/Frontend/{$name}/',
+ 'theme' => 'templates/{$name}/'
+ );
+
+ /**
+ * Transforms the names
+ * @param array $vars
+ * @return array
+ */
+ public function inflectPackageVars($vars)
+ {
+ if ($vars['type'] === 'shopware-theme') {
+ return $this->correctThemeName($vars);
+ } else {
+ return $this->correctPluginName($vars);
+ }
+ }
+
+ /**
+ * Changes the name to a camelcased combination of vendor and name
+ * @param array $vars
+ * @return array
+ */
+ private function correctPluginName($vars)
+ {
+ $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) {
+ return strtoupper($matches[0][1]);
+ }, $vars['name']);
+
+ $vars['name'] = ucfirst($vars['vendor']) . ucfirst($camelCasedName);
+
+ return $vars;
+ }
+
+ /**
+ * Changes the name to a underscore separated name
+ * @param array $vars
+ * @return array
+ */
+ private function correctThemeName($vars)
+ {
+ $vars['name'] = str_replace('-', '_', $vars['name']);
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php
new file mode 100644
index 00000000..17ca543a
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php
@@ -0,0 +1,36 @@
+<?php
+namespace Composer\Installers;
+
+use Composer\Package\PackageInterface;
+
+class SilverStripeInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => '{$name}/',
+ 'theme' => 'themes/{$name}/',
+ );
+
+ /**
+ * Return the install path based on package type.
+ *
+ * Relies on built-in BaseInstaller behaviour with one exception: silverstripe/framework
+ * must be installed to 'sapphire' and not 'framework' if the version is <3.0.0
+ *
+ * @param PackageInterface $package
+ * @param string $frameworkType
+ * @return string
+ */
+ public function getInstallPath(PackageInterface $package, $frameworkType = '')
+ {
+ if (
+ $package->getName() == 'silverstripe/framework'
+ && preg_match('/^\d+\.\d+\.\d+/', $package->getVersion())
+ && version_compare($package->getVersion(), '2.999.999') < 0
+ ) {
+ return $this->templatePath($this->locations['module'], array('name' => 'sapphire'));
+ } else {
+ return parent::getInstallPath($package, $frameworkType);
+ }
+
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php
new file mode 100644
index 00000000..1675c4f2
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php
@@ -0,0 +1,26 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * Plugin installer for symfony 1.x
+ *
+ * @author Jérôme Tamarelle <jerome@tamarelle.net>
+ */
+class Symfony1Installer extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'plugins/{$name}/',
+ );
+
+ /**
+ * Format package name to CamelCase
+ */
+ public function inflectPackageVars($vars)
+ {
+ $vars['name'] = preg_replace_callback('/(-[a-z])/', function ($matches) {
+ return strtoupper($matches[0][1]);
+ }, $vars['name']);
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php
new file mode 100644
index 00000000..8220b40d
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php
@@ -0,0 +1,14 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * Extension installer for TYPO3 CMS
+ *
+ * @author Sascha Egerer <sascha.egerer@dkd.de>
+ */
+class TYPO3CmsInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'extension' => 'typo3conf/ext/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php
new file mode 100644
index 00000000..42572f44
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php
@@ -0,0 +1,38 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * An installer to handle TYPO3 Flow specifics when installing packages.
+ */
+class TYPO3FlowInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'package' => 'Packages/Application/{$name}/',
+ 'framework' => 'Packages/Framework/{$name}/',
+ 'plugin' => 'Packages/Plugins/{$name}/',
+ 'site' => 'Packages/Sites/{$name}/',
+ 'boilerplate' => 'Packages/Boilerplates/{$name}/',
+ 'build' => 'Build/{$name}/',
+ );
+
+ /**
+ * Modify the package name to be a TYPO3 Flow style key.
+ *
+ * @param array $vars
+ * @return array
+ */
+ public function inflectPackageVars($vars)
+ {
+ $autoload = $this->package->getAutoload();
+ if (isset($autoload['psr-0']) && is_array($autoload['psr-0'])) {
+ $namespace = key($autoload['psr-0']);
+ $vars['name'] = str_replace('\\', '.', $namespace);
+ }
+ if (isset($autoload['psr-4']) && is_array($autoload['psr-4'])) {
+ $namespace = key($autoload['psr-4']);
+ $vars['name'] = rtrim(str_replace('\\', '.', $namespace), '.');
+ }
+
+ return $vars;
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php
new file mode 100644
index 00000000..158af526
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php
@@ -0,0 +1,12 @@
+<?php
+namespace Composer\Installers;
+
+class TheliaInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'local/modules/{$name}/',
+ 'frontoffice-template' => 'templates/frontOffice/{$name}/',
+ 'backoffice-template' => 'templates/backOffice/{$name}/',
+ 'email-template' => 'templates/email/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php
new file mode 100644
index 00000000..7c0113b8
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php
@@ -0,0 +1,14 @@
+<?php
+ namespace Composer\Installers;
+ /**
+ * Composer installer for 3rd party Tusk utilities
+ * @author Drew Ewing <drew@phenocode.com>
+ */
+ class TuskInstaller extends BaseInstaller
+ {
+ protected $locations = array(
+ 'task' => '.tusk/tasks/{$name}/',
+ 'command' => '.tusk/commands/{$name}/',
+ 'asset' => 'assets/tusk/{$name}/',
+ );
+ }
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php
new file mode 100644
index 00000000..2cbb4a46
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Composer\Installers;
+
+class WHMCSInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'gateway' => 'modules/gateways/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php
new file mode 100644
index 00000000..cb387881
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php
@@ -0,0 +1,9 @@
+<?php
+namespace Composer\Installers;
+
+class WolfCMSInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'wolf/plugins/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php
new file mode 100644
index 00000000..b03219c6
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class WordPressInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'wp-content/plugins/{$name}/',
+ 'theme' => 'wp-content/themes/{$name}/',
+ 'muplugin' => 'wp-content/mu-plugins/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php
new file mode 100644
index 00000000..bde9bc8c
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class ZendInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'library' => 'library/{$name}/',
+ 'extra' => 'extras/library/{$name}/',
+ 'module' => 'module/{$name}/',
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php
new file mode 100644
index 00000000..56cdf5da
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class ZikulaInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$vendor}-{$name}/',
+ 'theme' => 'themes/{$vendor}-{$name}/'
+ );
+}
diff --git a/AntiSpoof/vendor/composer/installers/src/bootstrap.php b/AntiSpoof/vendor/composer/installers/src/bootstrap.php
new file mode 100644
index 00000000..0de276ee
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/src/bootstrap.php
@@ -0,0 +1,13 @@
+<?php
+function includeIfExists($file)
+{
+ if (file_exists($file)) {
+ return include $file;
+ }
+}
+if ((!$loader = includeIfExists(__DIR__ . '/../vendor/autoload.php')) && (!$loader = includeIfExists(__DIR__ . '/../../../autoload.php'))) {
+ die('You must set up the project dependencies, run the following commands:'.PHP_EOL.
+ 'curl -s http://getcomposer.org/installer | php'.PHP_EOL.
+ 'php composer.phar install'.PHP_EOL);
+}
+return $loader;
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/AsgardInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/AsgardInstallerTest.php
new file mode 100644
index 00000000..71480eca
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/AsgardInstallerTest.php
@@ -0,0 +1,61 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Installers\AsgardInstaller;
+use Composer\Package\Package;
+use Composer\Composer;
+
+class AsgardInstallerTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var OctoberInstaller
+ */
+ private $installer;
+
+ public function setUp()
+ {
+ $this->installer = new AsgardInstaller(
+ new Package('NyanCat', '4.2', '4.2'),
+ new Composer()
+ );
+ }
+
+ /**
+ * @dataProvider packageNameInflectionProvider
+ */
+ public function testInflectPackageVars($type, $name, $expected)
+ {
+ $this->assertEquals(
+ $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)),
+ array('name' => $expected, 'type' => $type)
+ );
+ }
+
+ public function packageNameInflectionProvider()
+ {
+ return array(
+ array(
+ 'asgard-module',
+ 'asgard-module',
+ 'Asgard'
+ ),
+ array(
+ 'asgard-module',
+ 'blog',
+ 'Blog'
+ ),
+ // tests that exactly one '-theme' is cut off
+ array(
+ 'asgard-theme',
+ 'some-theme-theme',
+ 'Some-theme',
+ ),
+ // tests that names without '-theme' suffix stay valid
+ array(
+ 'asgard-theme',
+ 'someothertheme',
+ 'Someothertheme',
+ ),
+ );
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php
new file mode 100644
index 00000000..523e8476
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php
@@ -0,0 +1,115 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Installers\CakePHPInstaller;
+use Composer\Repository\RepositoryManager;
+use Composer\Repository\InstalledArrayRepository;
+use Composer\Package\Package;
+use Composer\Package\RootPackage;
+use Composer\Package\Link;
+use Composer\Package\Version\VersionParser;
+use Composer\Composer;
+use Composer\Config;
+
+class CakePHPInstallerTest extends TestCase
+{
+ private $composer;
+ private $io;
+
+ /**
+ * setUp
+ *
+ * @return void
+ */
+ public function setUp()
+ {
+ $this->package = new Package('CamelCased', '1.0', '1.0');
+ $this->io = $this->getMock('Composer\IO\PackageInterface');
+ $this->composer = new Composer();
+ $this->composer->setConfig(new Config(false));
+ }
+
+ /**
+ * testInflectPackageVars
+ *
+ * @return void
+ */
+ public function testInflectPackageVars()
+ {
+ $installer = new CakePHPInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'CamelCased'));
+ $this->assertEquals($result, array('name' => 'CamelCased'));
+
+ $installer = new CakePHPInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'with-dash'));
+ $this->assertEquals($result, array('name' => 'WithDash'));
+
+ $installer = new CakePHPInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'with_underscore'));
+ $this->assertEquals($result, array('name' => 'WithUnderscore'));
+
+ $installer = new CakePHPInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'cake/acl'));
+ $this->assertEquals($result, array('name' => 'Cake/Acl'));
+
+ $installer = new CakePHPInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'cake/debug-kit'));
+ $this->assertEquals($result, array('name' => 'Cake/DebugKit'));
+ }
+
+ /**
+ * Test getLocations returning appropriate values based on CakePHP version
+ *
+ */
+ public function testGetLocations() {
+ $package = new RootPackage('CamelCased', '1.0', '1.0');
+ $composer = $this->composer;
+ $rm = new RepositoryManager(
+ $this->getMock('Composer\IO\IOInterface'),
+ $this->getMock('Composer\Config')
+ );
+ $composer->setRepositoryManager($rm);
+ $installer = new CakePHPInstaller($package, $composer);
+
+ // 2.0 < cakephp < 3.0
+ $this->setCakephpVersion($rm, '2.0.0');
+ $result = $installer->getLocations();
+ $this->assertContains('Plugin/', $result['plugin']);
+
+ $this->setCakephpVersion($rm, '2.5.9');
+ $result = $installer->getLocations();
+ $this->assertContains('Plugin/', $result['plugin']);
+
+ $this->setCakephpVersion($rm, '~2.5');
+ $result = $installer->getLocations();
+ $this->assertContains('Plugin/', $result['plugin']);
+
+ // special handling for 2.x versions when 3.x is still in development
+ $this->setCakephpVersion($rm, 'dev-master');
+ $result = $installer->getLocations();
+ $this->assertContains('Plugin/', $result['plugin']);
+
+ $this->setCakephpVersion($rm, '>=2.5');
+ $result = $installer->getLocations();
+ $this->assertContains('Plugin/', $result['plugin']);
+
+ // cakephp >= 3.0
+ $this->setCakephpVersion($rm, '3.0.*-dev');
+ $result = $installer->getLocations();
+ $this->assertContains('vendor/{$vendor}/{$name}/', $result['plugin']);
+
+ $this->setCakephpVersion($rm, '~8.8');
+ $result = $installer->getLocations();
+ $this->assertContains('vendor/{$vendor}/{$name}/', $result['plugin']);
+ }
+
+ protected function setCakephpVersion($rm, $version) {
+ $parser = new VersionParser();
+ list(, $version) = explode(' ', $parser->parseConstraints($version));
+ $installed = new InstalledArrayRepository();
+ $package = new Package('cakephp/cakephp', $version, $version);
+ $installed->addPackage($package);
+ $rm->setLocalRepository($installed);
+ }
+
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php
new file mode 100644
index 00000000..31ccecdb
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Composer\Installers\Test;
+
+use Composer\Installers\CraftInstaller;
+
+/**
+ * Tests for the CraftInstaller Class
+ *
+ * @coversDefaultClass Composer\Installers\CraftInstaller
+ */
+class CraftInstallerTest extends TestCase
+{
+ /** @var CraftInstaller */
+ private $installer;
+
+ /**
+ * Sets up the fixture, for example, instantiate the class-under-test.
+ *
+ * This method is called before a test is executed.
+ */
+ final public function setup()
+ {
+ $this->installer = new CraftInstaller();
+ }
+
+ /**
+ * @param string $packageName
+ * @param string $expectedName
+ *
+ * @covers ::inflectPackageVars
+ *
+ * @dataProvider provideExpectedInflectionResults
+ */
+ final public function testInflectPackageVars($packageName, $expectedName)
+ {
+ $installer = $this->installer;
+
+ $vars = array('name' => $packageName);
+ $expected = array('name' => $expectedName);
+
+ $actual = $installer->inflectPackageVars($vars);
+
+ $this->assertEquals($actual, $expected);
+ }
+
+ /**
+ * Provides various names for packages and the expected result after inflection
+ *
+ * @return array
+ */
+ final public function provideExpectedInflectionResults()
+ {
+ return array(
+ // lowercase
+ array('foo', 'foo'),
+ array('craftfoo', 'craftfoo'),
+ array('fooplugin', 'fooplugin'),
+ array('craftfooplugin', 'craftfooplugin'),
+ // lowercase - dash
+ array('craft-foo', 'foo'),
+ array('foo-plugin', 'foo'),
+ array('craft-foo-plugin', 'foo'),
+ // lowercase - underscore
+ array('craft_foo', 'craft_foo'),
+ array('foo_plugin', 'foo_plugin'),
+ array('craft_foo_plugin', 'craft_foo_plugin'),
+ // CamelCase
+ array('Foo', 'Foo'),
+ array('CraftFoo', 'CraftFoo'),
+ array('FooPlugin', 'FooPlugin'),
+ array('CraftFooPlugin', 'CraftFooPlugin'),
+ // CamelCase - Dash
+ array('Craft-Foo', 'Foo'),
+ array('Foo-Plugin', 'Foo'),
+ array('Craft-Foo-Plugin', 'Foo'),
+ // CamelCase - underscore
+ array('Craft_Foo', 'Craft_Foo'),
+ array('Foo_Plugin', 'Foo_Plugin'),
+ array('Craft_Foo_Plugin', 'Craft_Foo_Plugin'),
+ );
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php
new file mode 100644
index 00000000..9e385e6a
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php
@@ -0,0 +1,89 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Installers\DokuWikiInstaller;
+use Composer\Package\Package;
+use Composer\Composer;
+
+class DokuWikiInstallerTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var DokuWikiInstaller
+ */
+ private $installer;
+
+ public function setUp()
+ {
+ $this->installer = new DokuWikiInstaller(
+ new Package('NyanCat', '4.2', '4.2'),
+ new Composer()
+ );
+ }
+
+ /**
+ * @dataProvider packageNameInflectionProvider
+ */
+ public function testInflectPackageVars($type, $name, $expected)
+ {
+ $this->assertEquals(
+ $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)),
+ array('name' => $expected, 'type'=>$type)
+ );
+ }
+
+ public function packageNameInflectionProvider()
+ {
+ return array(
+ array(
+ 'dokuwiki-plugin',
+ 'dokuwiki-test-plugin',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-plugin',
+ 'test-plugin',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-plugin',
+ 'dokuwiki_test',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-plugin',
+ 'test',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-plugin',
+ 'test-template',
+ 'test-template',
+ ),
+ array(
+ 'dokuwiki-template',
+ 'dokuwiki-test-template',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-template',
+ 'test-template',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-template',
+ 'dokuwiki_test',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-template',
+ 'test',
+ 'test',
+ ),
+ array(
+ 'dokuwiki-template',
+ 'test-plugin',
+ 'test-plugin',
+ ),
+ );
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php
new file mode 100644
index 00000000..b757799b
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php
@@ -0,0 +1,63 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Composer;
+use Composer\Installers\GravInstaller;
+
+class GravInstallerTest extends TestCase
+{
+ /* @var \Composer\Composer */
+ protected $composer;
+
+ public function setUp()
+ {
+ $this->composer = new Composer();
+ }
+
+ public function testInflectPackageVars()
+ {
+ $package = $this->getPackage('vendor/name', '0.0.0');
+ $installer = new GravInstaller($package, $this->composer);
+ $packageVars = $this->getPackageVars($package);
+
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => 'test')));
+ $this->assertEquals('test', $result['name']);
+
+ foreach ($installer->getLocations() as $name => $location) {
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test")));
+ $this->assertEquals('test', $result['name']);
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-$name")));
+ $this->assertEquals('test', $result['name']);
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test-test")));
+ $this->assertEquals('test-test', $result['name']);
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-test-$name")));
+ $this->assertEquals('test-test', $result['name']);
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test")));
+ $this->assertEquals('test', $result['name']);
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-$name")));
+ $this->assertEquals('test', $result['name']);
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test-test")));
+ $this->assertEquals('test-test', $result['name']);
+ $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-test-$name")));
+ $this->assertEquals('test-test', $result['name']);
+ }
+ }
+
+ /**
+ * @param $package \Composer\Package\PackageInterface
+ */
+ public function getPackageVars($package)
+ {
+ $type = $package->getType();
+
+ $prettyName = $package->getPrettyName();
+ if (strpos($prettyName, '/') !== false) {
+ list($vendor, $name) = explode('/', $prettyName);
+ } else {
+ $vendor = '';
+ $name = $prettyName;
+ }
+
+ return compact('name', 'vendor', 'type');
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php
new file mode 100644
index 00000000..610b8e6e
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php
@@ -0,0 +1,428 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Installers\Installer;
+use Composer\Util\Filesystem;
+use Composer\Package\Package;
+use Composer\Package\RootPackage;
+use Composer\Composer;
+use Composer\Config;
+
+class InstallerTest extends TestCase
+{
+ private $composer;
+ private $config;
+ private $vendorDir;
+ private $binDir;
+ private $dm;
+ private $repository;
+ private $io;
+ private $fs;
+
+ /**
+ * setUp
+ *
+ * @return void
+ */
+ public function setUp()
+ {
+ $this->fs = new Filesystem;
+
+ $this->composer = new Composer();
+ $this->config = new Config();
+ $this->composer->setConfig($this->config);
+
+ $this->vendorDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-vendor';
+ $this->ensureDirectoryExistsAndClear($this->vendorDir);
+
+ $this->binDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-bin';
+ $this->ensureDirectoryExistsAndClear($this->binDir);
+
+ $this->config->merge(array(
+ 'config' => array(
+ 'vendor-dir' => $this->vendorDir,
+ 'bin-dir' => $this->binDir,
+ ),
+ ));
+
+ $this->dm = $this->getMockBuilder('Composer\Downloader\DownloadManager')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->composer->setDownloadManager($this->dm);
+
+ $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface');
+ $this->io = $this->getMock('Composer\IO\IOInterface');
+ }
+
+ /**
+ * tearDown
+ *
+ * @return void
+ */
+ public function tearDown()
+ {
+ $this->fs->removeDirectory($this->vendorDir);
+ $this->fs->removeDirectory($this->binDir);
+ }
+
+ /**
+ * testSupports
+ *
+ * @return void
+ *
+ * @dataProvider dataForTestSupport
+ */
+ public function testSupports($type, $expected)
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $this->assertSame($expected, $installer->supports($type), sprintf('Failed to show support for %s', $type));
+ }
+
+ /**
+ * dataForTestSupport
+ */
+ public function dataForTestSupport()
+ {
+ return array(
+ array('agl-module', true),
+ array('aimeos-extension', true),
+ array('annotatecms-module', true),
+ array('annotatecms-component', true),
+ array('annotatecms-service', true),
+ array('bitrix-module', true),
+ array('bitrix-component', true),
+ array('bitrix-theme', true),
+ array('bonefish-package', true),
+ array('cakephp', false),
+ array('cakephp-', false),
+ array('cakephp-app', false),
+ array('cakephp-plugin', true),
+ array('chef-cookbook', true),
+ array('chef-role', true),
+ array('codeigniter-app', false),
+ array('codeigniter-library', true),
+ array('codeigniter-third-party', true),
+ array('codeigniter-module', true),
+ array('concrete5-block', true),
+ array('concrete5-package', true),
+ array('concrete5-theme', true),
+ array('concrete5-update', true),
+ array('craft-plugin', true),
+ array('croogo-plugin', true),
+ array('croogo-theme', true),
+ array('dokuwiki-plugin', true),
+ array('dokuwiki-template', true),
+ array('drupal-module', true),
+ array('dolibarr-module', true),
+ array('elgg-plugin', true),
+ array('fuel-module', true),
+ array('fuel-package', true),
+ array('fuel-theme', true),
+ array('fuelphp-component', true),
+ array('hurad-plugin', true),
+ array('hurad-theme', true),
+ array('joomla-library', true),
+ array('kirby-plugin', true),
+ array('kohana-module', true),
+ array('laravel-library', true),
+ array('lithium-library', true),
+ array('magento-library', true),
+ array('mako-package', true),
+ array('modxevo-snippet', true),
+ array('modxevo-plugin', true),
+ array('modxevo-module', true),
+ array('modxevo-template', true),
+ array('modxevo-lib', true),
+ array('mediawiki-extension', true),
+ array('mediawiki-skin', true),
+ array('microweber-module', true),
+ array('modulework-module', true),
+ array('moodle-mod', true),
+ array('october-module', true),
+ array('october-plugin', true),
+ array('piwik-plugin', true),
+ array('phpbb-extension', true),
+ array('pimcore-plugin', true),
+ array('ppi-module', true),
+ array('prestashop-module', true),
+ array('prestashop-theme', true),
+ array('puppet-module', true),
+ array('redaxo-addon', true),
+ array('redaxo-bestyle-plugin', true),
+ array('roundcube-plugin', true),
+ array('shopware-backend-plugin', true),
+ array('shopware-core-plugin', true),
+ array('shopware-frontend-plugin', true),
+ array('shopware-theme', true),
+ array('silverstripe-module', true),
+ array('silverstripe-theme', true),
+ array('smf-module', true),
+ array('smf-theme', true),
+ array('symfony1-plugin', true),
+ array('thelia-module', true),
+ array('thelia-frontoffice-template', true),
+ array('thelia-backoffice-template', true),
+ array('thelia-email-template', true),
+ array('tusk-task', true),
+ array('tusk-asset', true),
+ array('typo3-flow-plugin', true),
+ array('typo3-cms-extension', true),
+ array('whmcs-gateway', true),
+ array('wolfcms-plugin', true),
+ array('wordpress-plugin', true),
+ array('wordpress-core', false),
+ array('zend-library', true),
+ array('zikula-module', true),
+ array('zikula-theme', true),
+ array('kodicms-plugin', true),
+ array('kodicms-media', true),
+ );
+ }
+
+ /**
+ * testInstallPath
+ *
+ * @dataProvider dataForTestInstallPath
+ */
+ public function testInstallPath($type, $path, $name, $version = '1.0.0')
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $package = new Package($name, $version, $version);
+
+ $package->setType($type);
+ $result = $installer->getInstallPath($package);
+ $this->assertEquals($path, $result);
+ }
+
+ /**
+ * dataFormTestInstallPath
+ */
+ public function dataForTestInstallPath()
+ {
+ return array(
+ array('agl-module', 'More/MyTestPackage/', 'agl/my_test-package'),
+ array('aimeos-extension', 'ext/ai-test/', 'author/ai-test'),
+ array('annotatecms-module', 'addons/modules/my_module/', 'vysinsky/my_module'),
+ array('annotatecms-component', 'addons/components/my_component/', 'vysinsky/my_component'),
+ array('annotatecms-service', 'addons/services/my_service/', 'vysinsky/my_service'),
+ array('bitrix-module', 'bitrix/modules/my_module/', 'author/my_module'),
+ array('bitrix-component', 'bitrix/components/my_component/', 'author/my_component'),
+ array('bitrix-theme', 'bitrix/templates/my_theme/', 'author/my_theme'),
+ array('bonefish-package', 'Packages/bonefish/package/', 'bonefish/package'),
+ array('cakephp-plugin', 'Plugin/Ftp/', 'shama/ftp'),
+ array('chef-cookbook', 'Chef/mre/my_cookbook/', 'mre/my_cookbook'),
+ array('chef-role', 'Chef/roles/my_role/', 'mre/my_role'),
+ array('codeigniter-library', 'application/libraries/my_package/', 'shama/my_package'),
+ array('codeigniter-module', 'application/modules/my_package/', 'shama/my_package'),
+ array('concrete5-block', 'blocks/concrete5_block/', 'remo/concrete5_block'),
+ array('concrete5-package', 'packages/concrete5_package/', 'remo/concrete5_package'),
+ array('concrete5-theme', 'themes/concrete5_theme/', 'remo/concrete5_theme'),
+ array('concrete5-update', 'updates/concrete5/', 'concrete5/concrete5'),
+ array('craft-plugin', 'craft/plugins/my_plugin/', 'mdcpepper/my_plugin'),
+ array('croogo-plugin', 'Plugin/Sitemaps/', 'fahad19/sitemaps'),
+ array('croogo-theme', 'View/Themed/Readable/', 'rchavik/readable'),
+ array('dokuwiki-plugin', 'lib/plugins/someplugin/', 'author/someplugin'),
+ array('dokuwiki-template', 'lib/tpl/sometemplate/', 'author/sometemplate'),
+ array('dolibarr-module', 'htdocs/custom/my_module/', 'shama/my_module'),
+ array('drupal-module', 'modules/my_module/', 'shama/my_module'),
+ array('drupal-theme', 'themes/my_module/', 'shama/my_module'),
+ array('drupal-profile', 'profiles/my_module/', 'shama/my_module'),
+ array('drupal-drush', 'drush/my_module/', 'shama/my_module'),
+ array('elgg-plugin', 'mod/sample_plugin/', 'test/sample_plugin'),
+ array('fuel-module', 'fuel/app/modules/module/', 'fuel/module'),
+ array('fuel-package', 'fuel/packages/orm/', 'fuel/orm'),
+ array('fuel-theme', 'fuel/app/themes/theme/', 'fuel/theme'),
+ array('fuelphp-component', 'components/demo/', 'fuelphp/demo'),
+ array('hurad-plugin', 'plugins/Akismet/', 'atkrad/akismet'),
+ array('hurad-theme', 'plugins/Hurad2013/', 'atkrad/Hurad2013'),
+ array('joomla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'),
+ array('kirby-plugin', 'site/plugins/my_plugin/', 'shama/my_plugin'),
+ array('kohana-module', 'modules/my_package/', 'shama/my_package'),
+ array('laravel-library', 'libraries/my_package/', 'shama/my_package'),
+ array('lithium-library', 'libraries/li3_test/', 'user/li3_test'),
+ array('magento-library', 'lib/foo/', 'test/foo'),
+ array('modxevo-snippet', 'assets/snippets/my_snippet/', 'shama/my_snippet'),
+ array('modxevo-plugin', 'assets/plugins/my_plugin/', 'shama/my_plugin'),
+ array('modxevo-module', 'assets/modules/my_module/', 'shama/my_module'),
+ array('modxevo-template', 'assets/templates/my_template/', 'shama/my_template'),
+ array('modxevo-lib', 'assets/lib/my_lib/', 'shama/my_lib'),
+ array('mako-package', 'app/packages/my_package/', 'shama/my_package'),
+ array('mediawiki-extension', 'extensions/APC/', 'author/APC'),
+ array('mediawiki-extension', 'extensions/APC/', 'author/APC-extension'),
+ array('mediawiki-extension', 'extensions/UploadWizard/', 'author/upload-wizard'),
+ array('mediawiki-extension', 'extensions/SyntaxHighlight_GeSHi/', 'author/syntax-highlight_GeSHi'),
+ array('mediawiki-skin', 'skins/someskin/', 'author/someskin-skin'),
+ array('mediawiki-skin', 'skins/someskin/', 'author/someskin'),
+ array('microweber-module', 'userfiles/modules/my-thing/', 'author/my-thing-module'),
+ array('modulework-module', 'modules/my_package/', 'shama/my_package'),
+ array('moodle-mod', 'mod/my_package/', 'shama/my_package'),
+ array('october-module', 'modules/my_plugin/', 'shama/my_plugin'),
+ array('october-plugin', 'plugins/shama/my_plugin/', 'shama/my_plugin'),
+ array('october-theme', 'themes/my_theme/', 'shama/my_theme'),
+ array('piwik-plugin', 'plugins/VisitSummary/', 'shama/visit-summary'),
+ array('prestashop-module', 'modules/a-module/', 'vendor/a-module'),
+ array('prestashop-theme', 'themes/a-theme/', 'vendor/a-theme'),
+ array('phpbb-extension', 'ext/test/foo/', 'test/foo'),
+ array('phpbb-style', 'styles/foo/', 'test/foo'),
+ array('phpbb-language', 'language/foo/', 'test/foo'),
+ array('pimcore-plugin', 'plugins/MyPlugin/', 'ubikz/my_plugin'),
+ array('ppi-module', 'modules/foo/', 'test/foo'),
+ array('puppet-module', 'modules/puppet-name/', 'puppet/puppet-name'),
+ array('redaxo-addon', 'redaxo/include/addons/my_plugin/', 'shama/my_plugin'),
+ array('redaxo-bestyle-plugin', 'redaxo/include/addons/be_style/plugins/my_plugin/', 'shama/my_plugin'),
+ array('roundcube-plugin', 'plugins/base/', 'test/base'),
+ array('roundcube-plugin', 'plugins/replace_dash/', 'test/replace-dash'),
+ array('shopware-backend-plugin', 'engine/Shopware/Plugins/Local/Backend/ShamaMyBackendPlugin/', 'shama/my-backend-plugin'),
+ array('shopware-core-plugin', 'engine/Shopware/Plugins/Local/Core/ShamaMyCorePlugin/', 'shama/my-core-plugin'),
+ array('shopware-frontend-plugin', 'engine/Shopware/Plugins/Local/Frontend/ShamaMyFrontendPlugin/', 'shama/my-frontend-plugin'),
+ array('shopware-theme', 'templates/my_theme/', 'shama/my-theme'),
+ array('silverstripe-module', 'my_module/', 'shama/my_module'),
+ array('silverstripe-module', 'sapphire/', 'silverstripe/framework', '2.4.0'),
+ array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0'),
+ array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0-rc1'),
+ array('silverstripe-module', 'framework/', 'silverstripe/framework', 'my/branch'),
+ array('silverstripe-theme', 'themes/my_theme/', 'shama/my_theme'),
+ array('smf-module', 'Sources/my_module/', 'shama/my_module'),
+ array('smf-theme', 'Themes/my_theme/', 'shama/my_theme'),
+ array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sfShamaPlugin'),
+ array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sf-shama-plugin'),
+ array('thelia-module', 'local/modules/my_module/', 'shama/my_module'),
+ array('thelia-frontoffice-template', 'templates/frontOffice/my_template_fo/', 'shama/my_template_fo'),
+ array('thelia-backoffice-template', 'templates/backOffice/my_template_bo/', 'shama/my_template_bo'),
+ array('thelia-email-template', 'templates/email/my_template_email/', 'shama/my_template_email'),
+ array('tusk-task', '.tusk/tasks/my_task/', 'shama/my_task'),
+ array('typo3-flow-package', 'Packages/Application/my_package/', 'shama/my_package'),
+ array('typo3-flow-build', 'Build/my_package/', 'shama/my_package'),
+ array('typo3-cms-extension', 'typo3conf/ext/my_extension/', 'shama/my_extension'),
+ array('whmcs-gateway', 'modules/gateways/gateway_name/', 'vendor/gateway_name'),
+ array('wolfcms-plugin', 'wolf/plugins/my_plugin/', 'shama/my_plugin'),
+ array('wordpress-plugin', 'wp-content/plugins/my_plugin/', 'shama/my_plugin'),
+ array('wordpress-muplugin', 'wp-content/mu-plugins/my_plugin/', 'shama/my_plugin'),
+ array('zend-extra', 'extras/library/zend_test/', 'shama/zend_test'),
+ array('zikula-module', 'modules/my-test_module/', 'my/test_module'),
+ array('zikula-theme', 'themes/my-test_theme/', 'my/test_theme'),
+ array('kodicms-media', 'cms/media/vendor/my_media/', 'shama/my_media'),
+ array('kodicms-plugin', 'cms/plugins/my_plugin/', 'shama/my_plugin'),
+ );
+ }
+
+ /**
+ * testGetCakePHPInstallPathException
+ *
+ * @return void
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testGetCakePHPInstallPathException()
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $package = new Package('shama/ftp', '1.0.0', '1.0.0');
+
+ $package->setType('cakephp-whoops');
+ $result = $installer->getInstallPath($package);
+ }
+
+ /**
+ * testCustomInstallPath
+ */
+ public function testCustomInstallPath()
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $package = new Package('shama/ftp', '1.0.0', '1.0.0');
+ $package->setType('cakephp-plugin');
+ $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0');
+ $this->composer->setPackage($consumerPackage);
+ $consumerPackage->setExtra(array(
+ 'installer-paths' => array(
+ 'my/custom/path/{$name}/' => array(
+ 'shama/ftp',
+ 'foo/bar',
+ ),
+ ),
+ ));
+ $result = $installer->getInstallPath($package);
+ $this->assertEquals('my/custom/path/Ftp/', $result);
+ }
+
+ /**
+ * testCustomInstallerName
+ */
+ public function testCustomInstallerName()
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $package = new Package('shama/cakephp-ftp-plugin', '1.0.0', '1.0.0');
+ $package->setType('cakephp-plugin');
+ $package->setExtra(array(
+ 'installer-name' => 'FTP',
+ ));
+ $result = $installer->getInstallPath($package);
+ $this->assertEquals('Plugin/FTP/', $result);
+ }
+
+ /**
+ * testCustomTypePath
+ */
+ public function testCustomTypePath()
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $package = new Package('slbmeh/my_plugin', '1.0.0', '1.0.0');
+ $package->setType('wordpress-plugin');
+ $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0');
+ $this->composer->setPackage($consumerPackage);
+ $consumerPackage->setExtra(array(
+ 'installer-paths' => array(
+ 'my/custom/path/{$name}/' => array(
+ 'type:wordpress-plugin'
+ ),
+ ),
+ ));
+ $result = $installer->getInstallPath($package);
+ $this->assertEquals('my/custom/path/my_plugin/', $result);
+ }
+
+ /**
+ * testNoVendorName
+ */
+ public function testNoVendorName()
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $package = new Package('sfPhpunitPlugin', '1.0.0', '1.0.0');
+
+ $package->setType('symfony1-plugin');
+ $result = $installer->getInstallPath($package);
+ $this->assertEquals('plugins/sfPhpunitPlugin/', $result);
+ }
+
+ /**
+ * testTypo3Inflection
+ */
+ public function testTypo3Inflection()
+ {
+ $installer = new Installer($this->io, $this->composer);
+ $package = new Package('typo3/fluid', '1.0.0', '1.0.0');
+
+ $package->setAutoload(array(
+ 'psr-0' => array(
+ 'TYPO3\\Fluid' => 'Classes',
+ ),
+ ));
+
+ $package->setType('typo3-flow-package');
+ $result = $installer->getInstallPath($package);
+ $this->assertEquals('Packages/Application/TYPO3.Fluid/', $result);
+ }
+
+ public function testUninstallAndDeletePackageFromLocalRepo()
+ {
+ $package = new Package('foo', '1.0.0', '1.0.0');
+
+ $installer = $this->getMock('Composer\Installers\Installer', array('getInstallPath'), array($this->io, $this->composer));
+ $installer->expects($this->once())->method('getInstallPath')->with($package)->will($this->returnValue(sys_get_temp_dir().'/foo'));
+
+ $repo = $this->getMock('Composer\Repository\InstalledRepositoryInterface');
+ $repo->expects($this->once())->method('hasPackage')->with($package)->will($this->returnValue(true));
+ $repo->expects($this->once())->method('removePackage')->with($package);
+
+ $installer->uninstall($repo, $package);
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php
new file mode 100644
index 00000000..3675e188
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php
@@ -0,0 +1,66 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Installers\MediaWikiInstaller;
+use Composer\Package\Package;
+use Composer\Composer;
+
+class MediaWikiInstallerTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var MediaWikiInstaller
+ */
+ private $installer;
+
+ public function setUp()
+ {
+ $this->installer = new MediaWikiInstaller(
+ new Package('NyanCat', '4.2', '4.2'),
+ new Composer()
+ );
+ }
+
+ /**
+ * @dataProvider packageNameInflectionProvider
+ */
+ public function testInflectPackageVars($type, $name, $expected)
+ {
+ $this->assertEquals(
+ $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)),
+ array('name' => $expected, 'type'=>$type)
+ );
+ }
+
+ public function packageNameInflectionProvider()
+ {
+ return array(
+ array(
+ 'mediawiki-extension',
+ 'sub-page-list',
+ 'SubPageList',
+ ),
+ array(
+ 'mediawiki-extension',
+ 'sub-page-list-extension',
+ 'SubPageList',
+ ),
+ array(
+ 'mediawiki-extension',
+ 'semantic-mediawiki',
+ 'SemanticMediawiki',
+ ),
+ // tests that exactly one '-skin' is cut off, and that skins do not get ucwords treatment like extensions
+ array(
+ 'mediawiki-skin',
+ 'some-skin-skin',
+ 'some-skin',
+ ),
+ // tests that names without '-skin' suffix stay valid
+ array(
+ 'mediawiki-skin',
+ 'someotherskin',
+ 'someotherskin',
+ ),
+ );
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php
new file mode 100644
index 00000000..fd427cdc
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php
@@ -0,0 +1,66 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Installers\OctoberInstaller;
+use Composer\Package\Package;
+use Composer\Composer;
+
+class OctoberInstallerTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @var OctoberInstaller
+ */
+ private $installer;
+
+ public function setUp()
+ {
+ $this->installer = new OctoberInstaller(
+ new Package('NyanCat', '4.2', '4.2'),
+ new Composer()
+ );
+ }
+
+ /**
+ * @dataProvider packageNameInflectionProvider
+ */
+ public function testInflectPackageVars($type, $name, $expected)
+ {
+ $this->assertEquals(
+ $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)),
+ array('name' => $expected, 'type' => $type)
+ );
+ }
+
+ public function packageNameInflectionProvider()
+ {
+ return array(
+ array(
+ 'october-plugin',
+ 'subpagelist',
+ 'subpagelist',
+ ),
+ array(
+ 'october-plugin',
+ 'subpagelist-plugin',
+ 'subpagelist',
+ ),
+ array(
+ 'october-plugin',
+ 'semanticoctober',
+ 'semanticoctober',
+ ),
+ // tests that exactly one '-theme' is cut off
+ array(
+ 'october-theme',
+ 'some-theme-theme',
+ 'some-theme',
+ ),
+ // tests that names without '-theme' suffix stay valid
+ array(
+ 'october-theme',
+ 'someothertheme',
+ 'someothertheme',
+ ),
+ );
+ }
+} \ No newline at end of file
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php
new file mode 100644
index 00000000..ea79374b
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php
@@ -0,0 +1,44 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Installers\PimcoreInstaller;
+use Composer\Package\Package;
+use Composer\Composer;
+
+class PimcoreInstallerTest extends TestCase
+{
+ private $composer;
+ private $io;
+
+ /**
+ * setUp
+ *
+ * @return void
+ */
+ public function setUp()
+ {
+ $this->package = new Package('CamelCased', '1.0', '1.0');
+ $this->io = $this->getMock('Composer\IO\PackageInterface');
+ $this->composer = new Composer();
+ }
+
+ /**
+ * testInflectPackageVars
+ *
+ * @return void
+ */
+ public function testInflectPackageVars()
+ {
+ $installer = new PimcoreInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'CamelCased'));
+ $this->assertEquals($result, array('name' => 'CamelCased'));
+
+ $installer = new PimcoreInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'with-dash'));
+ $this->assertEquals($result, array('name' => 'WithDash'));
+
+ $installer = new PimcoreInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'with_underscore'));
+ $this->assertEquals($result, array('name' => 'WithUnderscore'));
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php
new file mode 100644
index 00000000..8d9ff3f8
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php
@@ -0,0 +1,63 @@
+<?php
+namespace Composer\Installers\Test;
+
+use Composer\Composer;
+use Composer\Installers\PiwikInstaller;
+use Composer\Package\Package;
+use Composer\Package\PackageInterface;
+
+/**
+ * Class PiwikInstallerTest
+ *
+ * @package Composer\Installers\Test
+ */
+class PiwikInstallerTest extends TestCase
+{
+ /**
+ * @varComposer
+ */
+ private $composer;
+
+ /**
+ * @var PackageInterface
+ */
+ private $io;
+
+ /**
+ * @var Package
+ */
+ private $package;
+
+ /**
+ * setUp
+ *
+ * @return void
+ */
+ public function setUp()
+ {
+ $this->package = new Package('VisitSummary', '1.0', '1.0');
+ $this->io = $this->getMock('Composer\IO\PackageInterface');
+ $this->composer = new Composer();
+ }
+
+ /**
+ * testInflectPackageVars
+ *
+ * @return void
+ */
+ public function testInflectPackageVars()
+ {
+ $installer = new PiwikInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'VisitSummary'));
+ $this->assertEquals($result, array('name' => 'VisitSummary'));
+
+ $installer = new PiwikInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'visit-summary'));
+ $this->assertEquals($result, array('name' => 'VisitSummary'));
+
+ $installer = new PiwikInstaller($this->package, $this->composer);
+ $result = $installer->inflectPackageVars(array('name' => 'visit_summary'));
+ $this->assertEquals($result, array('name' => 'VisitSummary'));
+ }
+
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php
new file mode 100644
index 00000000..6418a03b
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Installers\Test;
+
+use Composer\Package\Version\VersionParser;
+use Composer\Package\Package;
+use Composer\Package\AliasPackage;
+use Composer\Package\LinkConstraint\VersionConstraint;
+use Composer\Util\Filesystem;
+
+abstract class TestCase extends \PHPUnit_Framework_TestCase
+{
+ private static $parser;
+
+ protected static function getVersionParser()
+ {
+ if (!self::$parser) {
+ self::$parser = new VersionParser();
+ }
+
+ return self::$parser;
+ }
+
+ protected function getVersionConstraint($operator, $version)
+ {
+ return new VersionConstraint(
+ $operator,
+ self::getVersionParser()->normalize($version)
+ );
+ }
+
+ protected function getPackage($name, $version)
+ {
+ $normVersion = self::getVersionParser()->normalize($version);
+
+ return new Package($name, $normVersion, $version);
+ }
+
+ protected function getAliasPackage($package, $version)
+ {
+ $normVersion = self::getVersionParser()->normalize($version);
+
+ return new AliasPackage($package, $normVersion, $version);
+ }
+
+ protected function ensureDirectoryExistsAndClear($directory)
+ {
+ $fs = new Filesystem();
+ if (is_dir($directory)) {
+ $fs->removeDirectory($directory);
+ }
+ mkdir($directory, 0777, true);
+ }
+}
diff --git a/AntiSpoof/vendor/composer/installers/tests/bootstrap.php b/AntiSpoof/vendor/composer/installers/tests/bootstrap.php
new file mode 100644
index 00000000..30c8fdc6
--- /dev/null
+++ b/AntiSpoof/vendor/composer/installers/tests/bootstrap.php
@@ -0,0 +1,4 @@
+<?php
+
+$loader = require __DIR__ . '/../src/bootstrap.php';
+$loader->add('Composer\Installers\Test', __DIR__);
diff --git a/AntiSpoof/version b/AntiSpoof/version
new file mode 100644
index 00000000..e6f1b29e
--- /dev/null
+++ b/AntiSpoof/version
@@ -0,0 +1,4 @@
+AntiSpoof: REL1_26
+2015-11-17T01:01:05
+
+b4b05f0