cyrus-imspd-v1.8/Makefile.in0100644004310100000120000000453110035057302015227 0ustar shadowstaff# Top-level Makefile for cyrus software # # (C) Copyright 1994-1996 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # SUBDIRS = lib imsp @EXTRA_SUBDIRS@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh all:: @for d in $(SUBDIRS); \ do \ (cd $$d; echo "### Making" all "in" `pwd`; \ $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) all; \ echo "### Done with" `pwd`); \ done install:: - mkdir ${DESTDIR}/cyrus - mkdir ${DESTDIR}/cyrus/usr - mkdir ${DESTDIR}/cyrus/usr/cyrus - mkdir ${DESTDIR}/cyrus/usr/cyrus/bin @for d in $(SUBDIRS); \ do \ (cd $$d; echo "### Making" install "in" `pwd`; \ $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) install ; \ echo "### Done with" `pwd`); \ done clean:: @-for d in $(SUBDIRS); \ do \ (cd $$d; echo "### Making" clean "in" `pwd`; \ $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) clean ; \ echo "### Done with" `pwd`); \ done distclean:: @-for d in $(SUBDIRS); \ do \ (cd $$d; echo "### Making" clean "in" `pwd`; \ $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) distclean ; \ echo "### Done with" `pwd`); \ done rm -f Makefile config.* depend:: @for d in $(SUBDIRS); \ do \ (cd $$d; echo "### Making" depend "in" `pwd`; \ $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) depend ; \ echo "### Done with" `pwd`); \ done Makefile: Makefile.in config.status $(SHELL) config.status config.status: configure $(SHELL) config.status --recheck configure: configure.in cd $(srcdir); autoconf cyrus-imspd-v1.8/README0100644004310100000120000000210007105637052014042 0ustar shadowstaff$Id: README,v 1.3 2000/05/08 22:22:34 wcw Exp $ This is the Cyrus IMSP server. The location for the software is in ftp://ftp.andrew.cmu.edu/cyrus-mail. See the files in the "notes" subdirectory for important information about this software. In there, you'll find instructions for building and setting up the server as well as notes on the implementation details. Please report any problems to cyrus-bugs+@andrew.cmu.edu. FILES OF INTEREST ----------------- notes/Build-instructions -- Short guide to configuring and compiling configure.in -- All the build options are "documented" here notes/Setup-instructions -- Short guide to getting the server running imsp/options.sample -- Sample options file to copy to /var/imsp/options notes/option.registry -- Registered option names as of last update notes/Changes-Todo -- What been changed and what was left undone notes/imsp.implementation -- A discussion of implementation details notes/imsp.implementation.updates -- Some of the latest details, as of version 1.6a1 cyrus-imspd-v1.8/configure0100755004310100000120000041227310170575200015101 0ustar shadowstaff#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-gssapi= enable GSSAPI authentication [yes] " ac_help="$ac_help --with-gss_impl={heimdal|mit|cybersafe|seam|auto} choose specific GSSAPI implementation [[auto]] " ac_help="$ac_help --with-sasl=DIR Compile with libsasl2 in " ac_help="$ac_help --with-staticsasl=DIR Compile with staticly linked libsasl2 in " ac_help="$ac_help --with-ldap=LIBRARY use LDAP address book features LIBRARY is the name of your LDAP library" ac_help="$ac_help --with-lock=METHOD force use of METHOD for locking (flock or fcntl)" ac_help="$ac_help " ac_help="$ac_help --with-auth=METHOD use authorization module METHOD METHOD is unix, krb, or krb_pts" ac_help="$ac_help --with-krb=PATH use Kerberos from PATH" ac_help="$ac_help --with-krbdes use Kerberos DES implementation [[yes]]" ac_help="$ac_help --with-afs=PATH use AFS libraries from PATH" ac_help="$ac_help --with-statedir=DIR use DIR as state directory for ptclient, only needed when using krb_pts for authorization" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=imsp/imsp_server.c # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 echo "configure:580: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:603: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:633: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:684: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:716: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 727 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:758: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:763: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:791: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:834: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:889: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:917: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:944: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:965: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:982: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for AIX""... $ac_c" 1>&6 echo "configure:1024: checking for AIX" >&5 cat > conftest.$ac_ext <&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define _ALL_SOURCE 1 EOF else rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6 echo "configure:1049: checking for strerror in -lcposix" >&5 ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcposix $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lcposix" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:1091: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:1145: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi echo $ac_n "checking for long file names""... $ac_c" 1>&6 echo "configure:1166: checking for long file names" >&5 if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # eval it to expand exec_prefix. # $TMPDIR if set, where it might want to write temporary files # if $TMPDIR is not set: # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then ac_tmpdirs="$TMPDIR" else ac_tmpdirs='/tmp /var/tmp /usr/tmp' fi for ac_dir in . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do test -d $ac_dir || continue test -w $ac_dir || continue # It is less confusing to not echo anything here. (echo 1 > $ac_dir/conftest9012345) 2>/dev/null (echo 2 > $ac_dir/conftest9012346) 2>/dev/null val=`cat $ac_dir/conftest9012345 2>/dev/null` if test ! -f $ac_dir/conftest9012345 || test "$val" != 1; then ac_cv_sys_long_file_names=no rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null break fi rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null done fi echo "$ac_t""$ac_cv_sys_long_file_names" 1>&6 if test $ac_cv_sys_long_file_names = yes; then cat >> confdefs.h <<\EOF #define HAVE_LONG_FILE_NAMES 1 EOF fi if test $ac_cv_sys_long_file_names = no; then { echo "configure: error: The Cyrus IMSPD requires support for long file names" 1>&2; exit 1; } fi for ac_hdr in unistd.h stdarg.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1216: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1226: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_func in memmove strcasecmp ftruncate getdtablesize getaddrinfo getnameinfo do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:1255: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:1283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" fi done for ac_func in strlcat strlcpy do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:1312: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:1340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 echo "configure:1369: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> int main() { DIR *dirp = 0; ; return 0; } EOF if { (eval echo configure:1382: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 echo "configure:1407: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -ldir" else echo "$ac_t""no" 1>&6 fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 echo "configure:1448: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lx" else echo "$ac_t""no" 1>&6 fi fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 echo "configure:1494: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char vprintf(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_vprintf) || defined (__stub___vprintf) choke me #else vprintf(); #endif ; return 0; } EOF if { (eval echo configure:1522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_vprintf=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_VPRINTF 1 EOF else echo "$ac_t""no" 1>&6 fi if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 echo "configure:1546: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _doprnt(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub__doprnt) || defined (__stub____doprnt) choke me #else _doprnt(); #endif ; return 0; } EOF if { (eval echo configure:1574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func__doprnt=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DOPRNT 1 EOF else echo "$ac_t""no" 1>&6 fi fi echo $ac_n "checking for strerror""... $ac_c" 1>&6 echo "configure:1599: checking for strerror" >&5 if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strerror(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_strerror) || defined (__stub___strerror) choke me #else strerror(); #endif ; return 0; } EOF if { (eval echo configure:1627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_strerror=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_strerror=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'strerror`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAS_STRERROR EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking nonblocking method""... $ac_c" 1>&6 echo "configure:1651: checking nonblocking method" >&5 if eval "test \"`echo '$''{'cyrus_cv_sys_nonblock'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #ifndef FNDELAY #define FNDELAY O_NDELAY #endif int main() { fcntl(0, F_GETFL, 0)&FNDELAY ; return 0; } EOF if { (eval echo configure:1668: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* cyrus_cv_sys_nonblock=fcntl else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cyrus_cv_sys_nonblock=ioctl fi rm -f conftest* fi WITH_NONBLOCK=$cyrus_cv_sys_nonblock echo "$ac_t""$WITH_NONBLOCK" 1>&6 echo $ac_n "checking timezone GMT offset method""... $ac_c" 1>&6 echo "configure:1685: checking timezone GMT offset method" >&5 if eval "test \"`echo '$''{'cyrus_cv_struct_sys_gmtoff'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct tm tm; tm.tm_gmtoff = 0; ; return 0; } EOF if { (eval echo configure:1700: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cyrus_cv_struct_sys_gmtoff=tm else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cyrus_cv_struct_sys_gmtoff=gmtime fi rm -f conftest* fi WITH_GMTOFF=$cyrus_cv_struct_sys_gmtoff echo "$ac_t""$WITH_GMTOFF" 1>&6 # CMU GUESS RUNPATH SWITCH echo $ac_n "checking for runpath switch""... $ac_c" 1>&6 echo "configure:1719: checking for runpath switch" >&5 if eval "test \"`echo '$''{'andrew_runpath_switch'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # first, try -R SAVE_LDFLAGS="${LDFLAGS}" LDFLAGS="-R /usr/lib" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* andrew_runpath_switch="-R" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LDFLAGS="-Wl,-rpath,/usr/lib" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* andrew_runpath_switch="-Wl,-rpath," else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* andrew_runpath_switch="none" fi rm -f conftest* fi rm -f conftest* LDFLAGS="${SAVE_LDFLAGS}" fi echo "$ac_t""$andrew_runpath_switch" 1>&6 CPPFLAGS="-I/usr/local/include ${CPPFLAGS}" # this is CMU ADD LIBPATH if test "$andrew_runpath_switch" = "none" ; then LDFLAGS="-L"/usr/local/lib" ${LDFLAGS}" else LDFLAGS="-L"/usr/local/lib" $andrew_runpath_switch"/usr/local/lib" ${LDFLAGS}" fi echo $ac_n "checking for dbopen""... $ac_c" 1>&6 echo "configure:1782: checking for dbopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dbopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dbopen(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dbopen) || defined (__stub___dbopen) choke me #else dbopen(); #endif ; return 0; } EOF if { (eval echo configure:1810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dbopen=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dbopen=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'dbopen`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LIBDB EOF use_db=1 else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dbopen in -ldb""... $ac_c" 1>&6 echo "configure:1832: checking for dbopen in -ldb" >&5 ac_lib_var=`echo db'_'dbopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldb $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LIBDB EOF LIBS=" -ldb ${LIBS}" use_db=1 else echo "$ac_t""no" 1>&6 fi fi ac_safe=`echo "db_185.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for db_185.h""... $ac_c" 1>&6 echo "configure:1880: checking for db_185.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DB_185_H EOF cat >> confdefs.h <<\EOF #define HAVE_LIBDB EOF LIBS="-ldb ${LIBS}" use_db=1 else echo "$ac_t""no" 1>&6 fi if test -z "use_db"; then echo $ac_n "checking for dbm_open in -lndbm""... $ac_c" 1>&6 echo "configure:1923: checking for dbm_open in -lndbm" >&5 ac_lib_var=`echo ndbm'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lndbm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo ndbm | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 echo "configure:1970: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldbm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo dbm | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi fi echo $ac_n "checking for accept in -lsocket""... $ac_c" 1>&6 echo "configure:2020: checking for accept in -lsocket" >&5 ac_lib_var=`echo socket'_'accept | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket -lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="${LIBS} -lsocket -lnsl" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6 echo "configure:2060: checking for res_search in -lresolv" >&5 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for dlopen""... $ac_c" 1>&6 echo "configure:2109: checking for dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else dlopen(); #endif ; return 0; } EOF if { (eval echo configure:2137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dlopen=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dlopen=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "configure:2155: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo dl | sed -e 's/^a-zA-Z0-9_/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi fi echo $ac_n "checking for crypt""... $ac_c" 1>&6 echo "configure:2205: checking for crypt" >&5 if eval "test \"`echo '$''{'ac_cv_func_crypt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char crypt(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_crypt) || defined (__stub___crypt) choke me #else crypt(); #endif ; return 0; } EOF if { (eval echo configure:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_crypt=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_crypt=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'crypt`\" = yes"; then echo "$ac_t""yes" 1>&6 cmu_have_crypt=yes else echo "$ac_t""no" 1>&6 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 echo "configure:2252: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIB_CRYPT="-lcrypt"; cmu_have_crypt=yes else echo "$ac_t""no" 1>&6 cmu_have_crypt=no fi fi save_LIBS="$LIBS" LIB_SOCKET="" echo $ac_n "checking for connect""... $ac_c" 1>&6 echo "configure:2300: checking for connect" >&5 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else connect(); #endif ; return 0; } EOF if { (eval echo configure:2328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_connect=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_connect=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 echo "configure:2346: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIB_SOCKET="-lnsl $LIB_SOCKET" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 echo "configure:2386: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIB_SOCKET="-lsocket $LIB_SOCKET" else echo "$ac_t""no" 1>&6 fi fi LIBS="$LIB_SOCKET $save_LIBS" echo $ac_n "checking for res_search""... $ac_c" 1>&6 echo "configure:2430: checking for res_search" >&5 if eval "test \"`echo '$''{'ac_cv_func_res_search'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char res_search(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_res_search) || defined (__stub___res_search) choke me #else res_search(); #endif ; return 0; } EOF if { (eval echo configure:2458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_res_search=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_res_search=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'res_search`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6 echo "configure:2476: checking for res_search in -lresolv" >&5 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIB_SOCKET="-lresolv $LIB_SOCKET" else echo "$ac_t""no" 1>&6 fi fi LIBS="$LIB_SOCKET $save_LIBS" for ac_func in dn_expand dns_lookup do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2522: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:2550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done LIBS="$save_LIBS" # Check whether --enable-gssapi or --disable-gssapi was given. if test "${enable_gssapi+set}" = set; then enableval="$enable_gssapi" gssapi=$enableval else gssapi=yes fi # Check whether --with-gss_impl or --without-gss_impl was given. if test "${with_gss_impl+set}" = set; then withval="$with_gss_impl" gss_impl=$withval else gss_impl=auto fi if test "$gssapi" != no; then platform= case "${host}" in *-*-linux*) platform=__linux ;; *-*-hpux*) platform=__hpux ;; *-*-irix*) platform=__irix ;; *-*-solaris2*) # When should we use __sunos? platform=__solaris ;; *-*-aix*) platform=__aix ;; *) echo "configure: warning: The system type is not recognized. If you believe that CyberSafe GSSAPI works on this platform, please update the configure script" 1>&2 if test "$gss_impl" = "cybersafe"; then { echo "configure: error: CyberSafe was forced, cannot continue as platform is not supported" 1>&2; exit 1; } fi ;; esac cmu_saved_CPPFLAGS=$CPPFLAGS if test -d ${gssapi}; then CPPFLAGS="$CPPFLAGS -I$gssapi/include" # We want to keep -I in our CPPFLAGS, but only if we succeed cmu_saved_CPPFLAGS=$CPPFLAGS LDFLAGS="$LDFLAGS -L$gssapi/lib" if test -n "$platform"; then if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then CPPFLAGS="$CPPFLAGS -D$platform" if test -d "${gssapi}/appsec-sdk/include"; then CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include" fi fi fi fi ac_safe=`echo "gssapi.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for gssapi.h""... $ac_c" 1>&6 echo "configure:2643: checking for gssapi.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_GSSAPI_H EOF else echo "$ac_t""no" 1>&6 ac_safe=`echo "gssapi/gssapi.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for gssapi/gssapi.h""... $ac_c" 1>&6 echo "configure:2678: checking for gssapi/gssapi.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2688: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo "configure: warning: Disabling GSSAPI - no include files found" 1>&2; gssapi=no fi fi CPPFLAGS=$cmu_saved_CPPFLAGS fi if test "$gssapi" != no; then echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6 echo "configure:2720: checking for res_search in -lresolv" >&5 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi if test -d ${gssapi}; then gssapi_dir="${gssapi}/lib" GSSAPIBASE_LIBS="-L$gssapi_dir" GSSAPIBASE_STATIC_LIBS="-L$gssapi_dir" else gssapi_dir="/usr/local/lib" fi # Check a full link against the Heimdal libraries. # If this fails, check a full link against the MIT libraries. # If this fails, check a full link against the CyberSafe libraries. # If this fails, check a full link against the Solaris 8 and up libgss. if test "$gss_impl" = "auto" -o "$gss_impl" = "heimdal"; then gss_failed=0 echo $ac_n "checking for gss_unwrap in -lgssapi""... $ac_c" 1>&6 echo "configure:2782: checking for gss_unwrap in -lgssapi" >&5 ac_lib_var=`echo gssapi'_'gss_unwrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgssapi $GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err ${LIB_SOCKET} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 gss_impl="heimdal" else echo "$ac_t""no" 1>&6 gss_failed=1 fi if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi if test "$gss_impl" = "auto" -o "$gss_impl" = "mit"; then gss_failed=0 echo $ac_n "checking for gss_unwrap in -lgssapi_krb5""... $ac_c" 1>&6 echo "configure:2830: checking for gss_unwrap in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_unwrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err ${LIB_SOCKET} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 gss_impl="mit" else echo "$ac_t""no" 1>&6 gss_failed=1 fi if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi # For Cybersafe one has to set a platform define in order to make compilation work if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then cmu_saved_CPPFLAGS=$CPPFLAGS cmu_saved_GSSAPIBASE_LIBS=$GSSAPIBASE_LIBS # FIX ME - Note that the libraries are in .../lib/64 for 64bit kernels if test -d "${gssapi}/appsec-rt/lib"; then GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -L${gssapi}/appsec-rt/lib" fi CPPFLAGS="$CPPFLAGS -D$platform" if test -d "${gssapi}/appsec-sdk/include"; then CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include" fi gss_failed=0 # Check for CyberSafe with two libraries first, than fall back to a single # library (older CyberSafe) unset ac_cv_lib_gss_csf_gss_acq_user echo $ac_n "checking for csf_gss_acq_user in -lgss""... $ac_c" 1>&6 echo "configure:2896: checking for csf_gss_acq_user in -lgss" >&5 ac_lib_var=`echo gss'_'csf_gss_acq_user | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgss $GSSAPIBASE_LIBS -lgss -lcstbk5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 gss_impl="cybersafe03" else echo "$ac_t""no" 1>&6 unset ac_cv_lib_gss_csf_gss_acq_user;echo $ac_n "checking for csf_gss_acq_user in -lgss""... $ac_c" 1>&6 echo "configure:2935: checking for csf_gss_acq_user in -lgss" >&5 ac_lib_var=`echo gss'_'csf_gss_acq_user | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgss $GSSAPIBASE_LIBS -lgss $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 gss_impl="cybersafe" else echo "$ac_t""no" 1>&6 gss_failed=1 fi fi if test "$gss_failed" = "1"; then # Restore variables GSSAPIBASE_LIBS=$cmu_saved_GSSAPIBASE_LIBS CPPFLAGS=$cmu_saved_CPPFLAGS if test "$gss_impl" != "auto"; then gss_impl="failed" fi fi fi if test "$gss_impl" = "auto" -o "$gss_impl" = "seam"; then gss_failed=0 echo $ac_n "checking for gss_unwrap in -lgss""... $ac_c" 1>&6 echo "configure:2992: checking for gss_unwrap in -lgss" >&5 ac_lib_var=`echo gss'_'gss_unwrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgss -lgss $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 gss_impl="seam" else echo "$ac_t""no" 1>&6 gss_failed=1 fi if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi if test "$gss_impl" = "mit"; then GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_LIBS $gssapi_dir/libgssapi_krb5.a $gssapi_dir/libkrb5.a $gssapi_dir/libk5crypto.a $gssapi_dir/libcom_err.a" elif test "$gss_impl" = "heimdal"; then CPPFLAGS="$CPPFLAGS -DKRB5_HEIMDAL" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err" GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_STATIC_LIBS $gssapi_dir/libgssapi.a $gssapi_dir/libkrb5.a $gssapi_dir/libasn1.a $gssapi_dir/libroken.a $gssapi_dir/libcom_err.a ${LIB_CRYPT}" elif test "$gss_impl" = "cybersafe03"; then # Version of CyberSafe with two libraries CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss -lcstbk5" # there is no static libgss for CyberSafe GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "cybersafe"; then CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss" # there is no static libgss for CyberSafe GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "seam"; then GSSAPIBASE_LIBS=-lgss # there is no static libgss on Solaris 8 and up GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "failed"; then gssapi="no" GSSAPIBASE_LIBS= GSSAPIBASE_STATIC_LIBS= echo "configure: warning: Disabling GSSAPI - specified library not found" 1>&2 else gssapi="no" GSSAPIBASE_LIBS= GSSAPIBASE_STATIC_LIBS= echo "configure: warning: Disabling GSSAPI - no library" 1>&2 fi fi # # Cybersafe defines both GSS_C_NT_HOSTBASED_SERVICE and GSS_C_NT_USER_NAME in gssapi\rfckrb5.h # if test "$gssapi" != "no"; then if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then cat > conftest.$ac_ext < #ifdef GSS_C_NT_HOSTBASED_SERVICE hostbased_service_gss_nt_yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "hostbased_service_gss_nt_yes" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_GSS_C_NT_HOSTBASED_SERVICE EOF else rm -rf conftest* echo "configure: warning: Cybersafe define not found" 1>&2 fi rm -f conftest* elif test "$ac_cv_header_gssapi_h" = "yes"; then cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "GSS_C_NT_HOSTBASED_SERVICE" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_GSS_C_NT_HOSTBASED_SERVICE EOF fi rm -f conftest* elif test "$ac_cv_header_gssapi_gssapi_h"; then cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "GSS_C_NT_HOSTBASED_SERVICE" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_GSS_C_NT_HOSTBASED_SERVICE EOF fi rm -f conftest* fi if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then cat > conftest.$ac_ext < #ifdef GSS_C_NT_USER_NAME user_name_yes_gss_nt #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "user_name_yes_gss_nt" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_GSS_C_NT_USER_NAME EOF else rm -rf conftest* echo "configure: warning: Cybersafe define not found" 1>&2 fi rm -f conftest* elif test "$ac_cv_header_gssapi_h" = "yes"; then cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "GSS_C_NT_USER_NAME" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_GSS_C_NT_USER_NAME EOF fi rm -f conftest* elif test "$ac_cv_header_gssapi_gssapi_h"; then cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "GSS_C_NT_USER_NAME" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_GSS_C_NT_USER_NAME EOF fi rm -f conftest* fi fi GSSAPI_LIBS="" echo $ac_n "checking GSSAPI""... $ac_c" 1>&6 echo "configure:3195: checking GSSAPI" >&5 if test "$gssapi" != no; then echo "$ac_t""with implementation ${gss_impl}" 1>&6 echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6 echo "configure:3199: checking for res_search in -lresolv" >&5 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lresolv" else echo "$ac_t""no" 1>&6 fi SASL_MECHS="$SASL_MECHS libgssapiv2.la" SASL_STATIC_OBJS="$SASL_STATIC_OBJS ../plugins/gssapi.o" cmu_save_LIBS="$LIBS" LIBS="$LIBS $GSSAPIBASE_LIBS" for ac_func in gsskrb5_register_acceptor_identity do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3246: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done LIBS="$cmu_save_LIBS" else echo "$ac_t""disabled" 1>&6 fi # Check whether --with-sasl or --without-sasl was given. if test "${with_sasl+set}" = set; then withval="$with_sasl" with_sasl="$withval" else with_sasl="yes" fi # Check whether --with-staticsasl or --without-staticsasl was given. if test "${with_staticsasl+set}" = set; then withval="$with_staticsasl" with_staticsasl="$withval"; if test $with_staticsasl != "no"; then using_static_sasl="static" fi else with_staticsasl="no"; using_static_sasl="no" fi SASLFLAGS="" LIB_SASL="" cmu_saved_CPPFLAGS=$CPPFLAGS cmu_saved_LDFLAGS=$LDFLAGS cmu_saved_LIBS=$LIBS if test ${with_staticsasl} != "no"; then if test -d ${with_staticsasl}; then if test -d ${with_staticsasl}/lib64 ; then ac_cv_sasl_where_lib=${with_staticsasl}/lib64 else ac_cv_sasl_where_lib=${with_staticsasl}/lib fi ac_cv_sasl_where_lib=${with_staticsasl}/lib ac_cv_sasl_where_inc=${with_staticsasl}/include SASLFLAGS="-I$ac_cv_sasl_where_inc" LIB_SASL="-L$ac_cv_sasl_where_lib" CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}" LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}" else with_staticsasl="/usr" fi ac_safe=`echo "sasl/sasl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sasl/sasl.h""... $ac_c" 1>&6 echo "configure:3356: checking for sasl/sasl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3366: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sasl/saslutil.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sasl/saslutil.h""... $ac_c" 1>&6 echo "configure:3385: checking for sasl/saslutil.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 for i42 in lib64 lib; do if test -r ${with_staticsasl}/$i42/libsasl2.a; then ac_cv_found_sasl=yes echo $ac_n "checking for static libsasl""... $ac_c" 1>&6 echo "configure:3416: checking for static libsasl" >&5 LIB_SASL="$LIB_SASL ${with_staticsasl}/$i42/libsasl2.a" fi done if test ! "$ac_cv_found_sasl" = "yes"; then echo $ac_n "checking for static libsasl""... $ac_c" 1>&6 echo "configure:3422: checking for static libsasl" >&5 { echo "configure: error: Could not find ${with_staticsasl}/lib*/libsasl2.a" 1>&2; exit 1; } fi else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi echo "$ac_t""found" 1>&6 if test "x$SASL_GSSAPI_LIBS_SET" = "x"; then LIB_SASL="$LIB_SASL $GSSAPIBASE_STATIC_LIBS" else SASL_GSSAPI_LIBS_SET="" cmu_saved_LIBS="$GSSAPIBASE_STATIC_LIBS $cmu_saved_LIBS" fi fi if test -d ${with_sasl}; then ac_cv_sasl_where_lib=${with_sasl}/lib ac_cv_sasl_where_inc=${with_sasl}/include DYNSASLFLAGS="-I$ac_cv_sasl_where_inc" if test "$ac_cv_sasl_where_lib" != ""; then # this is CMU ADD LIBPATH TO if test "$andrew_runpath_switch" = "none" ; then LIB_DYN_SASL="-L$ac_cv_sasl_where_lib ${LIB_DYN_SASL}" else LIB_DYN_SASL="-L$ac_cv_sasl_where_lib ${LIB_DYN_SASL} $andrew_runpath_switch$ac_cv_sasl_where_lib" fi fi LIB_DYN_SASL="$LIB_DYN_SASL -lsasl2" CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}" LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}" fi ac_safe=`echo "sasl/sasl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sasl/sasl.h""... $ac_c" 1>&6 echo "configure:3467: checking for sasl/sasl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3477: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sasl/saslutil.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sasl/saslutil.h""... $ac_c" 1>&6 echo "configure:3496: checking for sasl/saslutil.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3506: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for prop_get in -lsasl2""... $ac_c" 1>&6 echo "configure:3524: checking for prop_get in -lsasl2" >&5 ac_lib_var=`echo sasl2'_'prop_get | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsasl2 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_cv_found_sasl=yes else echo "$ac_t""no" 1>&6 ac_cv_found_sasl=no fi else echo "$ac_t""no" 1>&6 ac_cv_found_sasl=no fi else echo "$ac_t""no" 1>&6 ac_cv_found_sasl=no fi if test "$ac_cv_found_sasl" = "yes"; then if test "$ac_cv_sasl_where_lib" != ""; then # this is CMU ADD LIBPATH TO if test "$andrew_runpath_switch" = "none" ; then DYNLIB_SASL="-L$ac_cv_sasl_where_lib ${DYNLIB_SASL}" else DYNLIB_SASL="-L$ac_cv_sasl_where_lib ${DYNLIB_SASL} $andrew_runpath_switch$ac_cv_sasl_where_lib" fi fi DYNLIB_SASL="$DYNLIB_SASL -lsasl2" if test "$using_static_sasl" != "static"; then LIB_SASL=$DYNLIB_SASL SASLFLAGS=$DYNSASLFLAGS fi else DYNLIB_SASL="" DYNSASLFLAGS="" using_static_sasl="staticonly" fi if test "x$SASL_GSSAPI_LIBS_SET" != "x"; then SASL_GSSAPI_LIBS_SET="" cmu_saved_LIBS="$GSSAPIBASE_LIBS $cmu_saved_LIBS" fi LIBS="$cmu_saved_LIBS" LDFLAGS="$cmu_saved_LDFLAGS" CPPFLAGS="$cmu_saved_CPPFLAGS" if test "$ac_cv_found_sasl" != "yes"; then { echo "configure: error: Cannot continue without libsasl2. Get it from ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/." 1>&2; exit 1; } fi LIBS="${LIB_SASL} ${LIBS}" # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then withval="$with_ldap" if test "$with_ldap" = "yes"; then { echo "configure: error: Must provide a library name for --with-ldap" 1>&2; exit 1; } fi if test "$with_ldap" != "no"; then echo $ac_n "checking for ldap_init in -l"$with_ldap"""... $ac_c" 1>&6 echo "configure:3629: checking for ldap_init in -l"$with_ldap"" >&5 ac_lib_var=`echo "$with_ldap"'_'ldap_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l"$with_ldap" -llber -lssl -lcrypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LDAP EOF HAVE_LDAP_OBJS="abook_ldap.o" LIBS="-l$with_ldap -llber -lssl -lcrypto $LIBS" else echo "$ac_t""no" 1>&6 { echo "configure: error: LDAP library does not provide ldap_init" 1>&2; exit 1; } fi fi else echo $ac_n "checking for library containing ldap_init""... $ac_c" 1>&6 echo "configure:3678: checking for library containing ldap_init" >&5 if eval "test \"`echo '$''{'ac_cv_search_ldap_init'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_ldap_init="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_ldap_init="none required" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* test "$ac_cv_search_ldap_init" = "no" && for i in ldap10 ldap; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_ldap_init="-l$i" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done LIBS="$ac_func_search_save_LIBS" fi echo "$ac_t""$ac_cv_search_ldap_init" 1>&6 if test "$ac_cv_search_ldap_init" != "no"; then test "$ac_cv_search_ldap_init" = "none required" || LIBS="$ac_cv_search_ldap_init $LIBS" cat >> confdefs.h <<\EOF #define HAVE_LDAP 1 EOF HAVE_LDAP_OBJS="abook_ldap.o" else : -llber -lssl -lcrypto fi fi # Check whether --with-lock or --without-lock was given. if test "${with_lock+set}" = set; then withval="$with_lock" WITH_LOCK="$withval" else echo $ac_n "checking for fcntl""... $ac_c" 1>&6 echo "configure:3753: checking for fcntl" >&5 if eval "test \"`echo '$''{'ac_cv_func_fcntl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char fcntl(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_fcntl) || defined (__stub___fcntl) choke me #else fcntl(); #endif ; return 0; } EOF if { (eval echo configure:3781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_fcntl=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_fcntl=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'fcntl`\" = yes"; then echo "$ac_t""yes" 1>&6 WITH_LOCK="fcntl" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for flock""... $ac_c" 1>&6 echo "configure:3800: checking for flock" >&5 if eval "test \"`echo '$''{'ac_cv_func_flock'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char flock(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_flock) || defined (__stub___flock) choke me #else flock(); #endif ; return 0; } EOF if { (eval echo configure:3828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_flock=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_flock=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'flock`\" = yes"; then echo "$ac_t""yes" 1>&6 WITH_LOCK="flock" else echo "$ac_t""no" 1>&6 { echo "configure: error: unable to detect locking method" 1>&2; exit 1; } fi fi fi # Check whether --with-login or --without-login was given. if test "${with_login+set}" = set; then withval="$with_login" { echo "configure: error: --with-login is no longer supported. Configure SASL appropriately instead." 1>&2; exit 1; } fi # Check whether --with-auth or --without-auth was given. if test "${with_auth+set}" = set; then withval="$with_auth" WITH_AUTH="$withval" else if test -f /etc/krb.conf -o -f /etc/kerberosIV/krb.conf ; then WITH_AUTH="krb" else WITH_AUTH="unix" fi fi # Check whether --with-krb or --without-krb was given. if test "${with_krb+set}" = set; then withval="$with_krb" with_krb="$withval" else with_krb="yes" fi if test "$WITH_AUTH" = "krb" -o "$WITH_AUTH" = "krb_pts" ; then echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6 echo "configure:3892: checking for res_search in -lresolv" >&5 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi # Check whether --with-krbdes or --without-krbdes was given. if test "${with_krbdes+set}" = set; then withval="$with_krbdes" with_krbdes="$withval" else with_krbdes="yes" fi if test "$with_krbdes" = "yes"; then echo $ac_n "checking for des_ecb_encrypt in -ldes""... $ac_c" 1>&6 echo "configure:3949: checking for des_ecb_encrypt in -ldes" >&5 ac_lib_var=`echo des'_'des_ecb_encrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldes $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="${LIBS} -ldes" else echo "$ac_t""no" 1>&6 { echo "configure: error: The Kerberos DES library is required for Kerberos support." 1>&2; exit 1; } fi fi if test -d ${with_krb}; then echo $ac_n "checking for Kerberos includes""... $ac_c" 1>&6 echo "configure:3993: checking for Kerberos includes" >&5 if eval "test \"`echo '$''{'cyrus_krbinclude'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for krbhloc in include/kerberosIV include do if test -f ${with_krb}/${krbhloc}/krb.h ; then cyrus_krbinclude=${with_krb}/${krbhloc} break fi done fi echo "$ac_t""$cyrus_krbinclude" 1>&6 if test -n "${cyrus_krbinclude}"; then CPPFLAGS="$CPPFLAGS -I${cyrus_krbinclude}" fi LDFLAGS="$LDFLAGS -L${with_krb}/lib" fi ac_safe=`echo "krb.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for krb.h""... $ac_c" 1>&6 echo "configure:4018: checking for krb.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for krb_mk_priv in -lkrb""... $ac_c" 1>&6 echo "configure:4045: checking for krb_mk_priv in -lkrb" >&5 ac_lib_var=`echo krb'_'krb_mk_priv | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lkrb $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo krb | sed -e 's/^a-zA-Z0-9_/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo "configure: warning: No Kerberos V4 found" 1>&2; krb4=no fi else echo "$ac_t""no" 1>&6 echo "configure: warning: No Kerberos V4 found" 1>&2; krb4=no fi if test "${krb4}" != no; then cat >> confdefs.h <<\EOF #define HAVE_KRB EOF else { echo "configure: error: Kerberos not found for authorization module" 1>&2; exit 1; } fi fi # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" with_afs="${withval}" CFLAGS="${CFLAGS} -I${withval}/include" else with_afs="/usr/local" fi if test "$WITH_AUTH" = "krb_pts" ; then EXTRA_SUBDIRS="${EXTRA_SUBDIRS} ptclient" EXTRA_OUTPUT="${EXTRA_OUTPUT} ptclient/Makefile" AFS_LIBS="${with_afs}/lib/afs/libkauth.a ${with_afs}/lib/afs/libprot.a ${with_afs}/lib/afs/libauth.a ${with_afs}/lib/afs/libsys.a ${with_afs}/lib/librxkad.a ${with_afs}/lib/librx.a ${with_afs}/lib/afs/libsys.a ${with_afs}/lib/libubik.a ${with_afs}/lib/liblwp.a ${with_afs}/lib/afs/util.a" if test -f ${with_afs}/lib/afs/libaudit.a; then AFS_LIBS="$AFS_LIBS ${with_afs}/lib/afs/libaudit.a" fi if test -f /usr/ucblib/libucb.a; then # this is CMU ADD LIBPATH TO if test "$andrew_runpath_switch" = "none" ; then AFS_LDFLAGS="-L/usr/ucblib ${AFS_LDFLAGS}" else AFS_LDFLAGS="-L/usr/ucblib ${AFS_LDFLAGS} $andrew_runpath_switch/usr/ucblib" fi AFS_LIBS="$AFS_LIBS -lc -lucb" fi if eval "test \"`echo '$''{'cyrus_afs_pr_end'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else SAVE_LIBS="$LIBS" LIBS="$AFS_LIBS" echo $ac_n "checking if AFS libraries have pr_End""... $ac_c" 1>&6 echo "configure:4144: checking if AFS libraries have pr_End" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 cyrus_afs_pr_end="yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 cyrus_afs_pr_end="no" fi rm -f conftest* fi LIBS="$SAVE_LIBS" if test "$cyrus_afs_pr_end" = no; then cat >> confdefs.h <<\EOF #define HAVE_PR_END 1 EOF fi if eval "test \"`echo '$''{'cyrus_afs_sigvec'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else SAVE_LIBS="$LIBS" LIBS="${with_afs}/lib/liblwp.a" echo $ac_n "checking if AFS libraries need sigvec""... $ac_c" 1>&6 echo "configure:4186: checking if AFS libraries need sigvec" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""no" 1>&6 cyrus_afs_sigvec="no" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""yes" 1>&6 cyrus_afs_sigvec="yes" fi rm -f conftest* fi if test "$cyrus_afs_sigvec" = yes; then if test "$cant_find_sigvec" = yes; then echo "configure: warning: Can't find a sigvec for AFS libraries which seem to" 1>&2 echo "configure: warning: need one; ptloader may not build." 1>&2 else AFS_LIBS="${AFS_LIBS} $cyrus_sigveclib" fi fi LIBS="$SAVE_LIBS" # Check whether --with-statedir or --without-statedir was given. if test "${with_statedir+set}" = set; then withval="$with_statedir" statedir="$withval" else statedir="/var" fi cat >> confdefs.h < confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile ptclient/Makefile lib/Makefile imsp/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@CC@%$CC%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@RANLIB@%$RANLIB%g s%@SET_MAKE@%$SET_MAKE%g s%@CPP@%$CPP%g s%@LIBOBJS@%$LIBOBJS%g s%@PRE_SUBDIRS@%$PRE_SUBDIRS%g s%@EXTRA_SUBDIRS@%$EXTRA_SUBDIRS%g s%@DEPLIBS@%$DEPLIBS%g s%@WITH_NONBLOCK@%$WITH_NONBLOCK%g s%@WITH_GMTOFF@%$WITH_GMTOFF%g s%@LIB_CRYPT@%$LIB_CRYPT%g s%@LIB_SOCKET@%$LIB_SOCKET%g s%@GSSAPI_LIBS@%$GSSAPI_LIBS%g s%@GSSAPIBASE_LIBS@%$GSSAPIBASE_LIBS%g s%@LIB_DYN_SASL@%$LIB_DYN_SASL%g s%@DYNSASLFLAGS@%$DYNSASLFLAGS%g s%@LIB_SASL@%$LIB_SASL%g s%@SASLFLAGS@%$SASLFLAGS%g s%@HAVE_LDAP_OBJS@%$HAVE_LDAP_OBJS%g s%@WITH_LOCK@%$WITH_LOCK%g s%@WITH_AUTH@%$WITH_AUTH%g s%@AFS_LIBS@%$AFS_LIBS%g s%@AFS_LDFLAGS@%$AFS_LDFLAGS%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 cyrus-imspd-v1.8/configure.in0100644004310100000120000002024010035057302015466 0ustar shadowstaffdnl Process this file with autoconf to produce a configure script. dnl $Id: configure.in,v 1.24 2004/04/07 20:04:18 rjs3 Exp $ AC_INIT(imsp/imsp_server.c) AC_CONFIG_HEADER(config.h) AC_CANONICAL_HOST AC_PROG_CC AC_PROG_INSTALL AC_PROG_RANLIB AC_PROG_MAKE_SET AC_AIX AC_ISC_POSIX AC_C_CONST AC_SYS_LONG_FILE_NAMES if test $ac_cv_sys_long_file_names = no; then AC_MSG_ERROR(The Cyrus IMSPD requires support for long file names) fi AC_CHECK_HEADERS(unistd.h stdarg.h) AC_REPLACE_FUNCS(memmove strcasecmp ftruncate getdtablesize getaddrinfo getnameinfo) AC_CHECK_FUNCS(strlcat strlcpy) AC_HEADER_DIRENT AC_SUBST(CPPFLAGS) AC_SUBST(PRE_SUBDIRS) AC_SUBST(EXTRA_SUBDIRS) AC_SUBST(DEPLIBS) AC_FUNC_VPRINTF dnl for et routines AC_FUNC_CHECK(strerror,AC_DEFINE(HAS_STRERROR,[],[Do we have strerror?])) AC_MSG_CHECKING(nonblocking method) AC_CACHE_VAL(cyrus_cv_sys_nonblock,AC_TRY_LINK([#include #include #include #ifndef FNDELAY #define FNDELAY O_NDELAY #endif],[fcntl(0, F_GETFL, 0)&FNDELAY], cyrus_cv_sys_nonblock=fcntl,cyrus_cv_sys_nonblock=ioctl)) WITH_NONBLOCK=$cyrus_cv_sys_nonblock AC_SUBST(WITH_NONBLOCK) AC_MSG_RESULT($WITH_NONBLOCK) AC_MSG_CHECKING(timezone GMT offset method) AC_CACHE_VAL(cyrus_cv_struct_sys_gmtoff,AC_TRY_COMPILE([ #include ],[struct tm tm; tm.tm_gmtoff = 0; ],cyrus_cv_struct_sys_gmtoff=tm,cyrus_cv_struct_sys_gmtoff=gmtime)) WITH_GMTOFF=$cyrus_cv_struct_sys_gmtoff AC_SUBST(WITH_GMTOFF) AC_MSG_RESULT($WITH_GMTOFF) dnl dnl check for -R, etc. switch dnl CMU_GUESS_RUNPATH_SWITCH dnl let's just link against local. otherwise we never find anything useful. CPPFLAGS="-I/usr/local/include ${CPPFLAGS}" CMU_ADD_LIBPATH("/usr/local/lib") dnl dnl Get ready to use DB dnl AC_CHECK_FUNC(dbopen, [AC_DEFINE(HAVE_LIBDB,[],[Berkeley DB?]) use_db=1], AC_CHECK_LIB(db,dbopen,[AC_DEFINE(HAVE_LIBDB,[],[Berkeley DB?]) LIBS=" -ldb ${LIBS}" use_db=1])) dnl if db_185.h is present, we're using db2 or 3 and should include db_185.h dnl instead of db.h; otherwise, include db.h. this is handled in the code dnl itself. AC_CHECK_HEADER(db_185.h, [AC_DEFINE(HAVE_DB_185_H,[],[DB 185 h?]) AC_DEFINE(HAVE_LIBDB,[],[Berkeley DB?]) LIBS="-ldb ${LIBS}" use_db=1]) if test -z "use_db"; then AC_CHECK_LIB(ndbm, dbm_open) AC_CHECK_LIB(dbm, dbm_open) fi dnl dnl Random other libraries dnl AC_CHECK_LIB(socket, accept, LIBS="${LIBS} -lsocket -lnsl",,-lnsl) AC_CHECK_LIB(resolv, res_search) dnl dnl Do the checks for SASL dnl AC_CHECK_FUNC(dlopen,,AC_CHECK_LIB(dl,dlopen)) CMU_SASL2_REQUIRED LIBS="${LIB_SASL} ${LIBS}" dnl dnl Stuff that takes configure command-line arguments dnl AC_ARG_WITH(ldap,[ --with-ldap=LIBRARY use LDAP address book features LIBRARY is the name of your LDAP library], [if test "$with_ldap" = "yes"; then AC_MSG_ERROR(Must provide a library name for --with-ldap) fi if test "$with_ldap" != "no"; then AC_CHECK_LIB("$with_ldap", ldap_init, [AC_DEFINE(HAVE_LDAP,[],[Do we have ldap support?]) HAVE_LDAP_OBJS="abook_ldap.o" LIBS="-l$with_ldap -llber -lssl -lcrypto $LIBS"], AC_MSG_ERROR(LDAP library does not provide ldap_init), -llber -lssl -lcrypto) fi], AC_SEARCH_LIBS(ldap_init, [ldap10 ldap], [AC_DEFINE(HAVE_LDAP) HAVE_LDAP_OBJS="abook_ldap.o"], -llber -lssl -lcrypto)) AC_SUBST(HAVE_LDAP_OBJS) AC_ARG_WITH(lock,[ --with-lock=METHOD force use of METHOD for locking (flock or fcntl)], WITH_LOCK="$withval", [ AC_CHECK_FUNC(fcntl,WITH_LOCK="fcntl",[ AC_CHECK_FUNC(flock,WITH_LOCK="flock",[ AC_ERROR(unable to detect locking method) ]) ]) ]) AC_SUBST(WITH_LOCK) AC_ARG_WITH(login,,AC_ERROR([--with-login is no longer supported. Configure SASL appropriately instead.])) AC_ARG_WITH(auth,[ --with-auth=METHOD use authorization module METHOD METHOD is unix, krb, or krb_pts], WITH_AUTH="$withval", if test -f /etc/krb.conf -o -f /etc/kerberosIV/krb.conf ; then WITH_AUTH="krb" else WITH_AUTH="unix" fi) AC_SUBST(WITH_AUTH) dnl this is the new simple check for kerberos; since the person had to dnl compile SASL, we might as well use the same checks. AC_ARG_WITH(krb,[ --with-krb=PATH use Kerberos from PATH], with_krb="$withval", with_krb="yes") if test "$WITH_AUTH" = "krb" -o "$WITH_AUTH" = "krb_pts" ; then dnl In order to compile kerberos4, we need libkrb and libdes. dnl we might need -lresolv for kerberos AC_CHECK_LIB(resolv,res_search) dnl Do we need DES for kerberos? AC_ARG_WITH(krbdes,[ --with-krbdes use Kerberos DES implementation [[yes]]], with_krbdes="$withval", with_krbdes="yes") if test "$with_krbdes" = "yes"; then AC_CHECK_LIB(des,des_ecb_encrypt, LIBS="${LIBS} -ldes", AC_MSG_ERROR([The Kerberos DES library is required for Kerberos support.])) fi dnl if we were ambitious, we'd look more aggressively for the dnl krb4 install if test -d ${with_krb}; then AC_CACHE_CHECK(for Kerberos includes, cyrus_krbinclude, [ for krbhloc in include/kerberosIV include do if test -f ${with_krb}/${krbhloc}/krb.h ; then cyrus_krbinclude=${with_krb}/${krbhloc} break fi done ]) if test -n "${cyrus_krbinclude}"; then CPPFLAGS="$CPPFLAGS -I${cyrus_krbinclude}" fi LDFLAGS="$LDFLAGS -L${with_krb}/lib" fi AC_CHECK_HEADER(krb.h, AC_CHECK_LIB(krb, krb_mk_priv,, AC_WARN(No Kerberos V4 found); krb4=no), AC_WARN(No Kerberos V4 found); krb4=no) if test "${krb4}" != no; then AC_DEFINE(HAVE_KRB, [], [Do we have kerberos support?]) else AC_ERROR([Kerberos not found for authorization module]) fi fi AC_ARG_WITH(afs,[ --with-afs=PATH use AFS libraries from PATH], [with_afs="${withval}" CFLAGS="${CFLAGS} -I${withval}/include"],with_afs="/usr/local") if test "$WITH_AUTH" = "krb_pts" ; then EXTRA_SUBDIRS="${EXTRA_SUBDIRS} ptclient" EXTRA_OUTPUT="${EXTRA_OUTPUT} ptclient/Makefile" AFS_LIBS="${with_afs}/lib/afs/libkauth.a ${with_afs}/lib/afs/libprot.a ${with_afs}/lib/afs/libauth.a ${with_afs}/lib/afs/libsys.a ${with_afs}/lib/librxkad.a ${with_afs}/lib/librx.a ${with_afs}/lib/afs/libsys.a ${with_afs}/lib/libubik.a ${with_afs}/lib/liblwp.a ${with_afs}/lib/afs/util.a" if test -f ${with_afs}/lib/afs/libaudit.a; then AFS_LIBS="$AFS_LIBS ${with_afs}/lib/afs/libaudit.a" fi if test -f /usr/ucblib/libucb.a; then CMU_ADD_LIBPATH_TO(/usr/ucblib, AFS_LDFLAGS) AFS_LIBS="$AFS_LIBS -lc -lucb" fi AC_CACHE_VAL(cyrus_afs_pr_end,[ SAVE_LIBS="$LIBS" LIBS="$AFS_LIBS" AC_MSG_CHECKING(if AFS libraries have pr_End) AC_TRY_LINK([pr_End();], [pr_End()], [ dnl it linked; have it AC_MSG_RESULT(yes) cyrus_afs_pr_end="yes" ], [ dnl didn't link; use old code AC_MSG_RESULT(no) cyrus_afs_pr_end="no" ]) ]) LIBS="$SAVE_LIBS" if test "$cyrus_afs_pr_end" = no; then AC_DEFINE(HAVE_PR_END) fi AC_CACHE_VAL(cyrus_afs_sigvec,[ SAVE_LIBS="$LIBS" LIBS="${with_afs}/lib/liblwp.a" AC_MSG_CHECKING(if AFS libraries need sigvec) dnl Does AFS need sigvec? We have to link against lwp and see dnl if IOMGR_Initialize wants it AC_TRY_LINK([IOMGR_Initialize();], [IOMGR_Initialize()], [ dnl it linked; don't need it AC_MSG_RESULT(no) cyrus_afs_sigvec="no" ], [ dnl didn't link; pick up sigvec AC_MSG_RESULT(yes) cyrus_afs_sigvec="yes" ]) ]) if test "$cyrus_afs_sigvec" = yes; then if test "$cant_find_sigvec" = yes; then AC_MSG_WARN([Can't find a sigvec for AFS libraries which seem to]) AC_MSG_WARN([need one; ptloader may not build.]) else AFS_LIBS="${AFS_LIBS} $cyrus_sigveclib" fi fi LIBS="$SAVE_LIBS" AC_SUBST(AFS_LIBS) AC_SUBST(AFS_LDFLAGS) AC_ARG_WITH(statedir, [ --with-statedir=DIR use DIR as state directory for ptclient, only needed when using krb_pts for authorization], statedir="$withval",statedir="/var") AC_DEFINE_UNQUOTED(STATEDIR,"$statedir",[ptclient state directory?]) fi AC_SUBST(EXTRA_SUBDIRS) AC_OUTPUT(Makefile ptclient/Makefile lib/Makefile imsp/Makefile) cyrus-imspd-v1.8/aclocal.m40100644004310100000120000004336010170575164015040 0ustar shadowstaffdnl aclocal.m4 generated automatically by aclocal 1.4-p6 dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. # isc-posix.m4 serial 2 (gettext-0.11.2) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) dnl dnl Additional macros for configure.in packaged up for easier theft. dnl $Id: cyrus.m4,v 1.4 2003/10/08 20:35:24 rjs3 Exp $ dnl tjs@andrew.cmu.edu 6-may-1998 dnl dnl It would be good if ANDREW_ADD_LIBPATH could detect if something was dnl already there and not redundantly add it if it is. dnl add -L(arg), and possibly (runpath switch)(arg), to LDFLAGS dnl (so the runpath for shared libraries is set). AC_DEFUN([CMU_ADD_LIBPATH], [ # this is CMU ADD LIBPATH if test "$andrew_runpath_switch" = "none" ; then LDFLAGS="-L$1 ${LDFLAGS}" else LDFLAGS="-L$1 $andrew_runpath_switch$1 ${LDFLAGS}" fi ]) dnl add -L(1st arg), and possibly (runpath switch)(1st arg), to (2nd arg) dnl (so the runpath for shared libraries is set). AC_DEFUN([CMU_ADD_LIBPATH_TO], [ # this is CMU ADD LIBPATH TO if test "$andrew_runpath_switch" = "none" ; then $2="-L$1 ${$2}" else $2="-L$1 ${$2} $andrew_runpath_switch$1" fi ]) dnl runpath initialization AC_DEFUN([CMU_GUESS_RUNPATH_SWITCH], [ # CMU GUESS RUNPATH SWITCH AC_CACHE_CHECK(for runpath switch, andrew_runpath_switch, [ # first, try -R SAVE_LDFLAGS="${LDFLAGS}" LDFLAGS="-R /usr/lib" AC_TRY_LINK([],[],[andrew_runpath_switch="-R"], [ LDFLAGS="-Wl,-rpath,/usr/lib" AC_TRY_LINK([],[],[andrew_runpath_switch="-Wl,-rpath,"], [andrew_runpath_switch="none"]) ]) LDFLAGS="${SAVE_LDFLAGS}" ])]) dnl sasl2.m4--sasl2 libraries and includes dnl Rob Siemborski dnl $Id: sasl2.m4,v 1.48 2004/09/13 21:06:34 shadow Exp $ AC_DEFUN([SASL_GSSAPI_CHK],[ AC_ARG_ENABLE(gssapi, [ --enable-gssapi= enable GSSAPI authentication [yes] ], gssapi=$enableval, gssapi=yes) AC_ARG_WITH(gss_impl, [ --with-gss_impl={heimdal|mit|cybersafe|seam|auto} choose specific GSSAPI implementation [[auto]] ], gss_impl=$withval, gss_impl=auto) AC_REQUIRE([SASL2_CRYPT_CHK]) AC_REQUIRE([CMU_SOCKETS]) if test "$gssapi" != no; then platform= case "${host}" in *-*-linux*) platform=__linux ;; *-*-hpux*) platform=__hpux ;; *-*-irix*) platform=__irix ;; *-*-solaris2*) # When should we use __sunos? platform=__solaris ;; *-*-aix*) platform=__aix ;; *) AC_WARN([The system type is not recognized. If you believe that CyberSafe GSSAPI works on this platform, please update the configure script]) if test "$gss_impl" = "cybersafe"; then AC_ERROR([CyberSafe was forced, cannot continue as platform is not supported]) fi ;; esac cmu_saved_CPPFLAGS=$CPPFLAGS if test -d ${gssapi}; then CPPFLAGS="$CPPFLAGS -I$gssapi/include" # We want to keep -I in our CPPFLAGS, but only if we succeed cmu_saved_CPPFLAGS=$CPPFLAGS LDFLAGS="$LDFLAGS -L$gssapi/lib" if test -n "$platform"; then if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then CPPFLAGS="$CPPFLAGS -D$platform" if test -d "${gssapi}/appsec-sdk/include"; then CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include" fi fi fi fi AC_CHECK_HEADER(gssapi.h, AC_DEFINE(HAVE_GSSAPI_H,,[Define if you have the gssapi.h header file]), [ AC_CHECK_HEADER(gssapi/gssapi.h,, AC_WARN(Disabling GSSAPI - no include files found); gssapi=no)]) CPPFLAGS=$cmu_saved_CPPFLAGS fi if test "$gssapi" != no; then dnl We need to find out which gssapi implementation we are dnl using. Supported alternatives are: MIT Kerberos 5, dnl Heimdal Kerberos 5 (http://www.pdc.kth.se/heimdal), dnl CyberSafe Kerberos 5 (http://www.cybersafe.com/) dnl and Sun SEAM (http://wwws.sun.com/software/security/kerberos/) dnl dnl The choice is reflected in GSSAPIBASE_LIBS AC_CHECK_LIB(resolv,res_search) if test -d ${gssapi}; then gssapi_dir="${gssapi}/lib" GSSAPIBASE_LIBS="-L$gssapi_dir" GSSAPIBASE_STATIC_LIBS="-L$gssapi_dir" else dnl FIXME: This is only used for building cyrus, and then only as dnl a real hack. it needs to be fixed. gssapi_dir="/usr/local/lib" fi # Check a full link against the Heimdal libraries. # If this fails, check a full link against the MIT libraries. # If this fails, check a full link against the CyberSafe libraries. # If this fails, check a full link against the Solaris 8 and up libgss. if test "$gss_impl" = "auto" -o "$gss_impl" = "heimdal"; then gss_failed=0 AC_CHECK_LIB(gssapi,gss_unwrap,gss_impl="heimdal",gss_failed=1,$GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err ${LIB_SOCKET}) if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi if test "$gss_impl" = "auto" -o "$gss_impl" = "mit"; then gss_failed=0 AC_CHECK_LIB(gssapi_krb5,gss_unwrap,gss_impl="mit",gss_failed=1,$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err ${LIB_SOCKET}) if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi # For Cybersafe one has to set a platform define in order to make compilation work if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then cmu_saved_CPPFLAGS=$CPPFLAGS cmu_saved_GSSAPIBASE_LIBS=$GSSAPIBASE_LIBS # FIX ME - Note that the libraries are in .../lib/64 for 64bit kernels if test -d "${gssapi}/appsec-rt/lib"; then GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -L${gssapi}/appsec-rt/lib" fi CPPFLAGS="$CPPFLAGS -D$platform" if test -d "${gssapi}/appsec-sdk/include"; then CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include" fi gss_failed=0 # Check for CyberSafe with two libraries first, than fall back to a single # library (older CyberSafe) unset ac_cv_lib_gss_csf_gss_acq_user AC_CHECK_LIB(gss,csf_gss_acq_user,gss_impl="cybersafe03",[ unset ac_cv_lib_gss_csf_gss_acq_user;AC_CHECK_LIB(gss,csf_gss_acq_user,gss_impl="cybersafe",gss_failed=1,$GSSAPIBASE_LIBS -lgss)],$GSSAPIBASE_LIBS -lgss -lcstbk5) if test "$gss_failed" = "1"; then # Restore variables GSSAPIBASE_LIBS=$cmu_saved_GSSAPIBASE_LIBS CPPFLAGS=$cmu_saved_CPPFLAGS if test "$gss_impl" != "auto"; then gss_impl="failed" fi fi fi if test "$gss_impl" = "auto" -o "$gss_impl" = "seam"; then gss_failed=0 AC_CHECK_LIB(gss,gss_unwrap,gss_impl="seam",gss_failed=1,-lgss) if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi if test "$gss_impl" = "mit"; then GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_LIBS $gssapi_dir/libgssapi_krb5.a $gssapi_dir/libkrb5.a $gssapi_dir/libk5crypto.a $gssapi_dir/libcom_err.a" elif test "$gss_impl" = "heimdal"; then CPPFLAGS="$CPPFLAGS -DKRB5_HEIMDAL" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err" GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_STATIC_LIBS $gssapi_dir/libgssapi.a $gssapi_dir/libkrb5.a $gssapi_dir/libasn1.a $gssapi_dir/libroken.a $gssapi_dir/libcom_err.a ${LIB_CRYPT}" elif test "$gss_impl" = "cybersafe03"; then # Version of CyberSafe with two libraries CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss -lcstbk5" # there is no static libgss for CyberSafe GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "cybersafe"; then CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss" # there is no static libgss for CyberSafe GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "seam"; then GSSAPIBASE_LIBS=-lgss # there is no static libgss on Solaris 8 and up GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "failed"; then gssapi="no" GSSAPIBASE_LIBS= GSSAPIBASE_STATIC_LIBS= AC_WARN(Disabling GSSAPI - specified library not found) else gssapi="no" GSSAPIBASE_LIBS= GSSAPIBASE_STATIC_LIBS= AC_WARN(Disabling GSSAPI - no library) fi fi # # Cybersafe defines both GSS_C_NT_HOSTBASED_SERVICE and GSS_C_NT_USER_NAME in gssapi\rfckrb5.h # if test "$gssapi" != "no"; then if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then AC_EGREP_CPP(hostbased_service_gss_nt_yes, [#include #ifdef GSS_C_NT_HOSTBASED_SERVICE hostbased_service_gss_nt_yes #endif ], AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,[Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE]), AC_WARN(Cybersafe define not found)) elif test "$ac_cv_header_gssapi_h" = "yes"; then AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,[Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE])) elif test "$ac_cv_header_gssapi_gssapi_h"; then AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi/gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,[Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE])) fi if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then AC_EGREP_CPP(user_name_yes_gss_nt, [#include #ifdef GSS_C_NT_USER_NAME user_name_yes_gss_nt #endif ], AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,[Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME]), AC_WARN(Cybersafe define not found)) elif test "$ac_cv_header_gssapi_h" = "yes"; then AC_EGREP_HEADER(GSS_C_NT_USER_NAME, gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,[Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME])) elif test "$ac_cv_header_gssapi_gssapi_h"; then AC_EGREP_HEADER(GSS_C_NT_USER_NAME, gssapi/gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,[Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME])) fi fi GSSAPI_LIBS="" AC_MSG_CHECKING(GSSAPI) if test "$gssapi" != no; then AC_MSG_RESULT(with implementation ${gss_impl}) AC_CHECK_LIB(resolv,res_search,GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lresolv") SASL_MECHS="$SASL_MECHS libgssapiv2.la" SASL_STATIC_OBJS="$SASL_STATIC_OBJS ../plugins/gssapi.o" cmu_save_LIBS="$LIBS" LIBS="$LIBS $GSSAPIBASE_LIBS" AC_CHECK_FUNCS(gsskrb5_register_acceptor_identity) LIBS="$cmu_save_LIBS" else AC_MSG_RESULT(disabled) fi AC_SUBST(GSSAPI_LIBS) AC_SUBST(GSSAPIBASE_LIBS) ]) AC_DEFUN([SASL_SET_GSSAPI_LIBS], [ SASL_GSSAPI_LIBS_SET="yes" ]) dnl What we want to do here is setup LIB_SASL with what one would dnl generally want to have (e.g. if static is requested, make it that, dnl otherwise make it dynamic. dnl We also want to create LIB_DYN_SASL and DYNSASLFLAGS. dnl Also sets using_static_sasl to "no" "static" or "staticonly" AC_DEFUN([CMU_SASL2], [ AC_REQUIRE([SASL_GSSAPI_CHK]) AC_ARG_WITH(sasl, [ --with-sasl=DIR Compile with libsasl2 in ], with_sasl="$withval", with_sasl="yes") AC_ARG_WITH(staticsasl, [ --with-staticsasl=DIR Compile with staticly linked libsasl2 in ], with_staticsasl="$withval"; if test $with_staticsasl != "no"; then using_static_sasl="static" fi, with_staticsasl="no"; using_static_sasl="no") SASLFLAGS="" LIB_SASL="" cmu_saved_CPPFLAGS=$CPPFLAGS cmu_saved_LDFLAGS=$LDFLAGS cmu_saved_LIBS=$LIBS if test ${with_staticsasl} != "no"; then if test -d ${with_staticsasl}; then if test -d ${with_staticsasl}/lib64 ; then ac_cv_sasl_where_lib=${with_staticsasl}/lib64 else ac_cv_sasl_where_lib=${with_staticsasl}/lib fi ac_cv_sasl_where_lib=${with_staticsasl}/lib ac_cv_sasl_where_inc=${with_staticsasl}/include SASLFLAGS="-I$ac_cv_sasl_where_inc" LIB_SASL="-L$ac_cv_sasl_where_lib" CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}" LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}" else with_staticsasl="/usr" fi AC_CHECK_HEADER(sasl/sasl.h, [ AC_CHECK_HEADER(sasl/saslutil.h, [ for i42 in lib64 lib; do if test -r ${with_staticsasl}/$i42/libsasl2.a; then ac_cv_found_sasl=yes AC_MSG_CHECKING(for static libsasl) LIB_SASL="$LIB_SASL ${with_staticsasl}/$i42/libsasl2.a" fi done if test ! "$ac_cv_found_sasl" = "yes"; then AC_MSG_CHECKING(for static libsasl) AC_ERROR([Could not find ${with_staticsasl}/lib*/libsasl2.a]) fi ])]) AC_MSG_RESULT(found) if test "x$SASL_GSSAPI_LIBS_SET" = "x"; then LIB_SASL="$LIB_SASL $GSSAPIBASE_STATIC_LIBS" else SASL_GSSAPI_LIBS_SET="" cmu_saved_LIBS="$GSSAPIBASE_STATIC_LIBS $cmu_saved_LIBS" fi fi if test -d ${with_sasl}; then ac_cv_sasl_where_lib=${with_sasl}/lib ac_cv_sasl_where_inc=${with_sasl}/include DYNSASLFLAGS="-I$ac_cv_sasl_where_inc" if test "$ac_cv_sasl_where_lib" != ""; then CMU_ADD_LIBPATH_TO($ac_cv_sasl_where_lib, LIB_DYN_SASL) fi LIB_DYN_SASL="$LIB_DYN_SASL -lsasl2" CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}" LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}" fi dnl be sure to check for a SASLv2 specific function AC_CHECK_HEADER(sasl/sasl.h, [ AC_CHECK_HEADER(sasl/saslutil.h, [ AC_CHECK_LIB(sasl2, prop_get, ac_cv_found_sasl=yes, ac_cv_found_sasl=no)], ac_cv_found_sasl=no)], ac_cv_found_sasl=no) if test "$ac_cv_found_sasl" = "yes"; then if test "$ac_cv_sasl_where_lib" != ""; then CMU_ADD_LIBPATH_TO($ac_cv_sasl_where_lib, DYNLIB_SASL) fi DYNLIB_SASL="$DYNLIB_SASL -lsasl2" if test "$using_static_sasl" != "static"; then LIB_SASL=$DYNLIB_SASL SASLFLAGS=$DYNSASLFLAGS fi else DYNLIB_SASL="" DYNSASLFLAGS="" using_static_sasl="staticonly" fi if test "x$SASL_GSSAPI_LIBS_SET" != "x"; then SASL_GSSAPI_LIBS_SET="" cmu_saved_LIBS="$GSSAPIBASE_LIBS $cmu_saved_LIBS" fi LIBS="$cmu_saved_LIBS" LDFLAGS="$cmu_saved_LDFLAGS" CPPFLAGS="$cmu_saved_CPPFLAGS" AC_SUBST(LIB_DYN_SASL) AC_SUBST(DYNSASLFLAGS) AC_SUBST(LIB_SASL) AC_SUBST(SASLFLAGS) ]) AC_DEFUN([CMU_SASL2_REQUIRED], [AC_REQUIRE([CMU_SASL2]) if test "$ac_cv_found_sasl" != "yes"; then AC_ERROR([Cannot continue without libsasl2. Get it from ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/.]) fi]) AC_DEFUN([CMU_SASL2_REQUIRE_VER], [ AC_REQUIRE([CMU_SASL2_REQUIRED]) cmu_saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $SASLFLAGS" AC_TRY_CPP([ #include #ifndef SASL_VERSION_MAJOR #error SASL_VERSION_MAJOR not defined #endif #ifndef SASL_VERSION_MINOR #error SASL_VERSION_MINOR not defined #endif #ifndef SASL_VERSION_STEP #error SASL_VERSION_STEP not defined #endif #if SASL_VERSION_MAJOR < $1 || SASL_VERSION_MINOR < $2 || SASL_VERSION_STEP < $3 #error SASL version is less than $1.$2.$3 #endif ],,AC_ERROR([Incorrect SASL headers found. This package requires SASL $1.$2.$3 or newer.])) CPPFLAGS=$cmu_saved_CPPFLAGS ]) AC_DEFUN([CMU_SASL2_CHECKAPOP_REQUIRED], [ AC_REQUIRE([CMU_SASL2_REQUIRED]) cmu_saved_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $LIB_SASL" AC_CHECK_LIB(sasl2, sasl_checkapop, AC_DEFINE(HAVE_APOP,[],[Does SASL support APOP?]), AC_MSG_ERROR([libsasl2 without working sasl_checkapop. Cannot continue.])) LDFLAGS=$cmu_saved_LDFLAGS ]) AC_DEFUN([SASL2_CRYPT_CHK],[ AC_CHECK_FUNC(crypt, cmu_have_crypt=yes, [ AC_CHECK_LIB(crypt, crypt, LIB_CRYPT="-lcrypt"; cmu_have_crypt=yes, cmu_have_crypt=no)]) AC_SUBST(LIB_CRYPT) ]) dnl bsd_sockets.m4--which socket libraries do we need? dnl Derrick Brashear dnl from Zephyr dnl $Id: bsd_sockets.m4,v 1.9 2003/10/08 20:35:24 rjs3 Exp $ dnl Hacked on by Rob Earhart to not just toss stuff in LIBS dnl It now puts everything required for sockets into LIB_SOCKET AC_DEFUN([CMU_SOCKETS], [ save_LIBS="$LIBS" LIB_SOCKET="" AC_CHECK_FUNC(connect, :, AC_CHECK_LIB(nsl, gethostbyname, LIB_SOCKET="-lnsl $LIB_SOCKET") AC_CHECK_LIB(socket, connect, LIB_SOCKET="-lsocket $LIB_SOCKET") ) LIBS="$LIB_SOCKET $save_LIBS" AC_CHECK_FUNC(res_search, :, AC_CHECK_LIB(resolv, res_search, LIB_SOCKET="-lresolv $LIB_SOCKET") ) LIBS="$LIB_SOCKET $save_LIBS" AC_CHECK_FUNCS(dn_expand dns_lookup) LIBS="$save_LIBS" AC_SUBST(LIB_SOCKET) ]) cyrus-imspd-v1.8/config.guess0100644004310100000120000007477407754522070015534 0ustar shadowstaff#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 # Free Software Foundation, Inc. # # This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Written by Per Bothner . # The master version of this file is at the FSF in /home/gd/gnu/lib. # Please send patches to . # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit system type (host/target name). # # Only a few systems have been added to this list; please add others # (but try to keep the structure clean). # # Use $HOST_CC if defined. $CC may point to a cross-compiler if test x"$CC_FOR_BUILD" = x; then if test x"$HOST_CC" != x; then CC_FOR_BUILD="$HOST_CC" else if test x"$CC" != x; then CC_FOR_BUILD="$CC" else CC_FOR_BUILD=cc fi fi fi # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <$dummy.s .globl main .ent main main: .frame \$30,0,\$26,0 .prologue 0 .long 0x47e03d80 # implver $0 lda \$2,259 .long 0x47e20c21 # amask $2,$1 srl \$1,8,\$2 sll \$2,2,\$2 sll \$0,3,\$0 addl \$1,\$0,\$0 addl \$2,\$0,\$0 ret \$31,(\$26),1 .end main EOF $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" ;; 15) UNAME_MACHINE="alphaev5" ;; 14) UNAME_MACHINE="alphaev56" ;; 10) UNAME_MACHINE="alphapca56" ;; 16) UNAME_MACHINE="alphaev6" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-cbm-sysv4 exit 0;; amiga:NetBSD:*:*) echo m68k-cbm-netbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hkmips:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; arm32:NetBSD:*:*) echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; SR2?01:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; atari*:NetBSD:*:*) echo m68k-atari-netbsd${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; sun3*:NetBSD:*:*) echo m68k-sun-netbsd${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:NetBSD:*:*) echo m68k-apple-netbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; macppc:NetBSD:*:*) echo powerpc-apple-netbsd${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i?86:AIX:*:*) echo i386-ibm-aix exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:4) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=4.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) sed 's/^ //' << EOF >$dummy.c #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` rm -f $dummy.c $dummy esac HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i?86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; hppa*:OpenBSD:*:*) echo hppa-unknown-openbsd exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*T3E:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F300:UNIX_System_V:*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; F301:UNIX_System_V:*:*) echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` exit 0 ;; hp3[0-9][05]:NetBSD:*:*) echo m68k-hp-netbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; i?86:BSD/386:*:* | i?86:BSD/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) if test -x /usr/bin/objformat; then if test "elf" = "`/usr/bin/objformat`"; then echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` exit 0 fi fi echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:NetBSD:*:*) echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ld_help_string=`cd /; ld --help 2>&1` ld_supported_emulations=`echo $ld_help_string \ | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g s/.*supported emulations: *// s/ .*// p'` case "$ld_supported_emulations" in *ia64) echo "${UNAME_MACHINE}-unknown-linux" exit 0 ;; i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32arm*) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; armelf_linux*) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32ppc) # Determine Lib Version cat >$dummy.c < #if defined(__GLIBC__) extern char __libc_version[]; extern char __libc_release[]; #endif main(argc, argv) int argc; char *argv[]; { #if defined(__GLIBC__) printf("%s %s\n", __libc_version, __libc_release); #else printf("unkown\n"); #endif return 0; } EOF LIBC="" $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy | grep 1\.99 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.c $dummy echo powerpc-unknown-linux-gnu${LIBC} exit 0 ;; esac if test "${UNAME_MACHINE}" = "alpha" ; then sed 's/^ //' <$dummy.s .globl main .ent main main: .frame \$30,0,\$26,0 .prologue 0 .long 0x47e03d80 # implver $0 lda \$2,259 .long 0x47e20c21 # amask $2,$1 srl \$1,8,\$2 sll \$2,2,\$2 sll \$0,3,\$0 addl \$1,\$0,\$0 addl \$2,\$0,\$0 ret \$31,(\$26),1 .end main EOF LIBC="" $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" ;; 15) UNAME_MACHINE="alphaev5" ;; 14) UNAME_MACHINE="alphaev56" ;; 10) UNAME_MACHINE="alphapca56" ;; 16) UNAME_MACHINE="alphaev6" ;; esac objdump --private-headers $dummy | \ grep ld.so.1 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 elif test "${UNAME_MACHINE}" = "mips" ; then cat >$dummy.c </dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy else # Either a pre-BFD a.out linker (linux-gnuoldld) # or one that does not give us useful --help. # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. # If ld does not provide *any* "supported emulations:" # that means it is gnuoldld. echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 case "${UNAME_MACHINE}" in i?86) VENDOR=pc; ;; *) VENDOR=unknown; ;; esac # Determine whether the default compiler is a.out or elf cat >$dummy.c < #ifdef __cplusplus int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. i?86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; i?86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i?86:*:5:7*) # Fixed at (any) Pentium or better UNAME_MACHINE=i586 if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; i?86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:*:6*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-qnx-qnx${UNAME_VERSION} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) printf ("vax-dec-bsd\n"); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi #echo '(Unable to guess system type)' 1>&2 exit 1 cyrus-imspd-v1.8/install-sh0100755004310100000120000001124307057313173015177 0ustar shadowstaff#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 cyrus-imspd-v1.8/cmulocal/0040755004310100000120000000000010170575121014765 5ustar shadowstaffcyrus-imspd-v1.8/cmulocal/COPYING0100644004310100000120000000202406605243477016031 0ustar shadowstaff Copyright 1998 by Carnegie Mellon University All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Carnegie Mellon University not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. cyrus-imspd-v1.8/cmulocal/README.andrew0100644004310100000120000000572510014167216017131 0ustar shadowstaffThis is a collection of autoconf macros which've been written by various people at CMU. To use it, use "aclocal -I cmulocal" (after the first time, automake should automatically use the -I cmulocal, if you've called CMU_INIT_AUTOMAKE in configure.in). CMU_INIT_AUTOMAKE If you use automake, you should call this after AM_INIT_AUTOMAKE. It adds "-I cmulocal" to the aclocal command line, so that when automake runs aclocal, aclocal'll continue to pick up these macros. CMU_ADD_LIBPATH Add -L(arg), and possibly -R(arg) (or whatever the runpath is) to LDFLAGS. CMU_ADD_LIBPATH_TO Likewise to above, except adds it to the specified variable (arg 2). CMU_GUESS_RUNPATH_SWITCH Attempts to guess what the runpath switch is (-R or whatever). CMU_COMERR Requires that com_err exist in the collection (at CMU, do this by running "cvs checkout com_err", and adding com_err to DIST_SUBDIRS in your Makefile.am). It sets the output variable COMPILE_ET to the compile_et program to use, and adds the appropriate paths to LDFLAGS and CPPFLAGS. It does *not* add -lcom_err to LIBS (this would cause later library checks to fail if com_err needs to be built), so Makefiles need to explicitly add -lcom_err (which, after all, should always exist as long as the com_err compile doesn't blow up). Makefiles should do this by using LIB_COMERR, which will substitute to the appropriate magic to use to grab the library. (This may involve a libtool archive; you should be using libtool to link your program if you distribute libraries with it that the program may link against). Note that com_err will only be compiled if the configure script can't find compile_et or libcom_err; if the system already has them, the configure script will use the system installation (although, due to some autoconf wonkiness, com_err will still be configured; it just won't show up in the @subdirs@ expansion). CMU_NANA Adds --with-nana, set by default; if set, attempts to link against libnana. If not set, or if libnana is unavailable, or if we're not using gcc, it defines WITHOUT_NANA. CMU_PROG_LIBTOOL Just like AM_PROG_LIBTOOL, except it performs a couple little hacks to make sure that things don't break on picky vendor compilers which whine about empty translation units. [DEPRECATED - DO NOT USE] CMU_PTHREADS This attempts to link against libpthread (failing if it can't be found), and attempts to do any system-specific setup required for thread support (for example, most things want _REENTRANT to be defined, but Solaris wants _POSIX_PTHREAD_SEMANTICS and __EXTENSIONS__, IRIX wants to see _SGI_REENTRANT_FUNCTIONS, etc). CMU_SASL This tries to find a SASL library, and calls AC_SUBST on LIB_SASL if it finds one, or tells the user to go ftp it if it doesn't exist. Provides --with-sasldir. CMU_KRB4 This attempts to find Kerberos 4 libraries and set up CFLAGS and LIBS appropriately. It also updates and substitutes RPATH for shared library stuff. cyrus-imspd-v1.8/cmulocal/afs.m40100644004310100000120000003014710044275347016011 0ustar shadowstaffdnl afs.m4--AFS libraries, includes, and dependencies dnl $Id: afs.m4,v 1.28 2004/04/29 22:00:07 cg2v Exp $ dnl Chaskiel Grundman dnl based on kerberos_v4.m4 dnl Derrick Brashear dnl from KTH krb and Arla AC_DEFUN([CMU_AFS_INC_WHERE1], [ cmu_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$cmu_save_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [#ifndef SYS_NAME choke me #endif int foo;], ac_cv_found_afs_inc=yes, ac_cv_found_afs_inc=no) CPPFLAGS=$cmu_save_CPPFLAGS ]) AC_DEFUN([CMU_AFS_LIB_WHERE1], [ save_LIBS="$LIBS" save_LDFLAGS="$LDFLAGS" LIBS="-lauth $1/afs/util.a $LIB_SOCKET $LIBS" LDFLAGS="-L$1 -L$1/afs $LDFLAGS" dnl suppress caching AC_TRY_LINK([],[afsconf_Open();], ac_cv_found_afs_lib=yes, ac_cv_found_afs_lib=no) LIBS="$save_LIBS" LDFLAGS="$save_LDFLAGS" ]) AC_DEFUN([CMU_AFS_WHERE], [ for i in $1; do AC_MSG_CHECKING(for AFS in $i) CMU_AFS_INC_WHERE1("$i/include") ac_cv_found_lwp_inc=$ac_cv_found_afs_inc CMU_TEST_INCPATH($i/include, lwp) ac_cv_found_afs_inc=$ac_cv_found_lwp_inc if test "$ac_cv_found_afs_inc" = "yes"; then CMU_AFS_LIB_WHERE1("$i/lib") if test "$ac_cv_found_afs_lib" = "yes"; then ac_cv_afs_where=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_AFS], [ AC_REQUIRE([CMU_SOCKETS]) AC_REQUIRE([CMU_LIBSSL]) AC_ARG_WITH(AFS, [ --with-afs=PREFIX Compile with AFS support], [if test "X$with_AFS" = "X"; then with_AFS=yes fi]) if test "X$with_AFS" != "X"; then ac_cv_afs_where=$with_AFS fi if test "X$ac_cv_afs_where" = "X"; then CMU_AFS_WHERE(/usr/afsws /usr/local /usr/athena /Library/OpenAFS/Tools) fi AC_MSG_CHECKING(whether to include AFS) if test "X$ac_cv_afs_where" = "Xno" -o "X$ac_cv_afs_where" = "X"; then ac_cv_found_afs=no AC_MSG_RESULT(no) else ac_cv_found_afs=yes AC_MSG_RESULT(yes) AFS_INC_DIR="$ac_cv_afs_where/include" AFS_LIB_DIR="$ac_cv_afs_where/lib" AFS_TOP_DIR="$ac_cv_afs_where" AFS_INC_FLAGS="-I${AFS_INC_DIR}" AFS_LIB_FLAGS="-L${AFS_LIB_DIR} -L${AFS_LIB_DIR}/afs" cmu_save_LIBS="$LIBS" cmu_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS ${AFS_INC_FLAGS}" cmu_save_LDFLAGS="$LDFLAGS" LDFLAGS="$cmu_save_LDFLAGS ${AFS_LIB_FLAGS}" AC_CHECK_HEADERS(afs/stds.h) AC_MSG_CHECKING([if libdes is needed]) AC_TRY_LINK([],[des_quad_cksum();],AFS_DES_LIB="",AFS_DES_LIB="maybe") if test "X$AFS_DES_LIB" != "X"; then LIBS="$cmu_save_LIBS -ldes" AC_TRY_LINK([], [des_quad_cksum();],AFS_DES_LIB="yes") if test "X$AFS_DES_LIB" = "Xyes"; then AC_MSG_RESULT([yes]) AFS_LIBDES="-ldes" AFS_LIBDESA="${AFS_LIB_DIR}/libdes.a" else LIBS="$cmu_save_LIBS $LIBSSL_LIB_FLAGS" AC_TRY_LINK([], [des_quad_cksum();],AFS_DES_LIB="libcrypto") if test "X$AFS_DES_LIB" = "Xlibcrypto"; then AC_MSG_RESULT([libcrypto]) AFS_LIBDES="$LIBSSL_LIB_FLAGS" AFS_LIBDESA="$LIBSSL_LIB_FLAGS" else AC_MSG_RESULT([unknown]) AC_MSG_ERROR([Could not use -ldes]) fi fi else AC_MSG_RESULT([no]) fi AFS_CLIENT_LIBS_STATIC="${AFS_LIB_DIR}/afs/libvolser.a ${AFS_LIB_DIR}/afs/libvldb.a ${AFS_LIB_DIR}/afs/libkauth.a ${AFS_LIB_DIR}/afs/libprot.a ${AFS_LIB_DIR}/libubik.a ${AFS_LIB_DIR}/afs/libauth.a ${AFS_LIB_DIR}/librxkad.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/afs/libsys.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/liblwp.a ${AFS_LIBDESA} ${AFS_LIB_DIR}/afs/libcmd.a ${AFS_LIB_DIR}/afs/libcom_err.a ${AFS_LIB_DIR}/afs/util.a" AFS_KTC_LIBS_STATIC="${AFS_LIB_DIR}/afs/libauth.a ${AFS_LIB_DIR}/afs/libsys.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/liblwp.a ${AFS_LIBDESA} ${AFS_LIB_DIR}/afs/libcom_err.a ${AFS_LIB_DIR}/afs/util.a" AFS_CLIENT_LIBS="-lvolser -lvldb -lkauth -lprot -lubik -lauth -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a" AFS_RX_LIBS="-lauth -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a" AFS_KTC_LIBS="-lauth ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcom_err ${AFS_LIB_DIR}/afs/util.a" LIBS="$cmu_save_LIBS $AFS_CLIENT_LIBS ${LIB_SOCKET}" AC_CHECK_FUNC(des_pcbc_init) if test "X$ac_cv_func_des_pcbc_init" != "Xyes"; then AC_CHECK_LIB(descompat, des_pcbc_init, AFS_DESCOMPAT_LIB="-ldescompat") if test "X$AFS_DESCOMPAT_LIB" != "X" ; then AFS_CLIENT_LIBS_STATIC="$AFS_CLIENT_LIBS_STATIC $AFS_DESCOMPAT_LIB" AFS_KTC_LIBS_STATIC="$AFS_KTC_LIBS_STATIC $AFS_DESCOMPAT_LIB" AFS_CLIENT_LIBS="$AFS_CLIENT_LIBS $AFS_DESCOMPAT_LIB" AFS_KTC_LIBS="$AFS_KTC_LIBS $AFS_DESCOMPAT_LIB" else AC_MSG_CHECKING([if rxkad needs des_pcbc_init]) AC_TRY_LINK(,[tkt_DecodeTicket();],RXKAD_PROBLEM=no,RXKAD_PROBLEM=maybe) if test "$RXKAD_PROBLEM" = "maybe"; then AC_TRY_LINK([int des_pcbc_init() { return 0;}], [tkt_DecodeTicket();],RXKAD_PROBLEM=yes,RXKAD_PROBLEM=error) if test "$RXKAD_PROBLEM" = "yes"; then AC_MSG_RESULT([yes]) AC_MSG_ERROR([cannot use rxkad]) else AC_MSG_RESULT([unknown]) AC_MSG_ERROR([Unknown error testing rxkad]) fi else AC_MSG_RESULT([no]) fi fi fi LIBS="$cmu_save_LIBS" AC_CHECK_FUNC(flock) LIBS="$cmu_save_LIBS ${AFS_CLIENT_LIBS} ${LIB_SOCKET}" if test "X$ac_cv_func_flock" != "Xyes"; then AC_MSG_CHECKING([if AFS needs flock]) AC_TRY_LINK([#include #ifdef HAVE_AFS_STDS_H #include #endif #include #include #include #include struct ubik_client * cstruct; int sigvec() {return 0;} extern int UV_SetSecurity();], [vsu_ClientInit(1,"","",0, &cstruct,UV_SetSecurity)], AFS_FLOCK=no,AFS_FLOCK=yes) if test $AFS_FLOCK = "no"; then AC_MSG_RESULT([no]) else AC_MSG_RESULT([yes]) LDFLAGS="$LDFLAGS -L/usr/ucblib" AC_CHECK_LIB(ucb, flock,:, [AC_CHECK_LIB(BSD, flock)]) fi fi LIBS="$cmu_save_LIBS" AC_CHECK_FUNC(sigvec) LIBS="$cmu_save_LIBS ${AFS_CLIENT_LIBS} ${LIB_SOCKET}" if test "X$ac_cv_func_sigvec" != "Xyes"; then AC_MSG_CHECKING([if AFS needs sigvec]) AC_TRY_LINK([#include #ifdef HAVE_AFS_STDS_H #include #endif #include #include #include #include struct ubik_client * cstruct; int flock() {return 0;} extern int UV_SetSecurity();], [vsu_ClientInit(1,"","",0, &cstruct,UV_SetSecurity)], AFS_SIGVEC=no,AFS_SIGVEC=yes) if test $AFS_SIGVEC = "no"; then AC_MSG_RESULT([no]) else AC_MSG_RESULT([yes]) LDFLAGS="$LDFLAGS -L/usr/ucblib" AC_CHECK_LIB(ucb, sigvec,:,[AC_CHECK_LIB(BSD, sigvec)]) fi fi if test "$ac_cv_lib_ucb_flock" = "yes" -o "$ac_cv_lib_ucb_sigvec" = "yes"; then AFS_LIB_FLAGS="${AFS_LIB_FLAGS} -L/usr/ucblib -R/usr/ucblib" fi if test "$ac_cv_lib_ucb_flock" = "yes" -o "$ac_cv_lib_ucb_sigvec" = "yes"; then AFS_BSD_LIB="-lucb" elif test "$ac_cv_lib_BSD_flock" = "yes" -o "$ac_cv_lib_BSD_sigvec" = "yes"; then AFS_BSD_LIB="-lBSD" fi if test "X$AFS_BSD_LIB" != "X" ; then AFS_CLIENT_LIBS_STATIC="$AFS_CLIENT_LIBS_STATIC $AFS_BSD_LIB" AFS_KTC_LIBS_STATIC="$AFS_KTC_LIBS_STATIC $AFS_BSD_LIB" AFS_CLIENT_LIBS="$AFS_CLIENT_LIBS $AFS_BSD_LIB" AFS_RX_LIBS="$AFS_CLIENT_LIBS $AFS_BSD_LIB" AFS_KTC_LIBS="$AFS_KTC_LIBS $AFS_BSD_LIB" fi AC_MSG_CHECKING([if libaudit is needed]) AFS_LIBAUDIT="" LIBS="$cmu_save_LIBS $AFS_CLIENT_LIBS ${LIB_SOCKET}" AC_TRY_LINK([#include #ifdef HAVE_AFS_STDS_H #include #endif #include #include ], [afsconf_SuperUser();],AFS_AUDIT_LIB="",AFS_AUDIT_LIB="maybe") if test "X$AFS_AUDIT_LIB" != "X"; then LIBS="$cmu_save_LIBS -lvolser -lvldb -lkauth -lprot -lubik -lauth -laudit -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a $AFS_BSD_LIB $AFS_DESCOMPAT_LIB $LIB_SOCKET" AC_TRY_LINK([#include #ifdef HAVE_AFS_STDS_H #include #endif #include #include ], [afsconf_SuperUser();],AFS_AUDIT_LIB="yes") if test "X$AFS_AUDIT_LIB" = "Xyes"; then AC_MSG_RESULT([yes]) AFS_LIBAUDIT="-laudit" AFS_CLIENT_LIBS_STATIC="${AFS_LIB_DIR}/afs/libvolser.a ${AFS_LIB_DIR}/afs/libvldb.a ${AFS_LIB_DIR}/afs/libkauth.a ${AFS_LIB_DIR}/afs/libprot.a ${AFS_LIB_DIR}/libubik.a ${AFS_LIB_DIR}/afs/libauth.a ${AFS_LIB_DIR}/afs/libaudit.a ${AFS_LIB_DIR}/librxkad.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/afs/libsys.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/liblwp.a ${AFS_LIBDESA} ${AFS_LIB_DIR}/afs/libcmd.a ${AFS_LIB_DIR}/afs/libcom_err.a ${AFS_LIB_DIR}/afs/util.a" AFS_CLIENT_LIBS="-lvolser -lvldb -lkauth -lprot -lubik -lauth -laudit -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a $AFS_BSD_LIB $AFS_DESCOMPAT_LIB" AFS_RX_LIBS="-lauth -laudit -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a $AFS_BSD_LIB $AFS_DESCOMPAT_LIB" else AC_MSG_RESULT([unknown]) AC_MSG_ERROR([Could not use -lauth while testing for -laudit]) fi else AC_MSG_RESULT([no]) fi AC_CHECK_FUNCS(VL_ProbeServer) AC_MSG_CHECKING([if new-style afs_ integer types are defined]) AC_CACHE_VAL(ac_cv_afs_int32, dnl The next few lines contain a quoted argument to egrep dnl It is critical that there be no leading or trailing whitespace dnl or newlines [AC_EGREP_CPP(dnl changequote(<<,>>)dnl <<(^|[^a-zA-Z_0-9])afs_int32[^a-zA-Z_0-9]>>dnl changequote([,]), [#include #ifdef HAVE_AFS_STDS_H #include #endif], ac_cv_afs_int32=yes, ac_cv_afs_int32=no)]) AC_MSG_RESULT($ac_cv_afs_int32) if test $ac_cv_afs_int32 = yes ; then AC_DEFINE(HAVE_AFS_INT32,, [AFS provides new "unambiguous" type names]) else AC_DEFINE(afs_int16, int16, [it's a type definition]) AC_DEFINE(afs_int32, int32, [it's a type definition]) AC_DEFINE(afs_uint16, u_int16, [it's a type definition]) AC_DEFINE(afs_uint32, u_int32, [it's a type definition]) fi CPPFLAGS="${cmu_save_CPPFLAGS}" LDFLAGS="${cmu_save_LDFLAGS}" LIBS="${cmu_save_LIBS}" AC_DEFINE(AFS_ENV,, [Use AFS. (find what needs this and nuke it)]) AC_DEFINE(AFS,, [Use AFS. (find what needs this and nuke it)]) AC_SUBST(AFS_CLIENT_LIBS_STATIC) AC_SUBST(AFS_KTC_LIBS_STATIC) AC_SUBST(AFS_CLIENT_LIBS) AC_SUBST(AFS_RX_LIBS) AC_SUBST(AFS_KTC_LIBS) AC_SUBST(AFS_INC_FLAGS) AC_SUBST(AFS_LIB_FLAGS) AC_SUBST(AFS_TOP_DIR) AC_SUBST(AFS_LIBAUDIT) AC_SUBST(AFS_LIBDES) AC_SUBST(AFS_LIBDESA) fi ]) AC_DEFUN([CMU_NEEDS_AFS], [AC_REQUIRE([CMU_AFS]) if test "$ac_cv_found_afs" != "yes"; then AC_ERROR([Cannot continue without AFS]) fi]) cyrus-imspd-v1.8/cmulocal/agentx.m40100644004310100000120000000242107741072414016520 0ustar shadowstaffdnl agentx.m4--detect agentx libraries dnl copied from x-unixrc dnl Tim Martin dnl $Id: agentx.m4,v 1.5 2003/10/08 20:35:24 rjs3 Exp $ AC_DEFUN([CMU_AGENTX], [ dnl dnl CMU AgentX dnl AC_MSG_CHECKING([for AgentX]) AC_ARG_WITH(agentx, [ --with-agentx CMU AgentX libraries located in (val)], AGENTX_DIR="$withval", AGENTX_DIR=no) found_agentx="no" if test "${AGENTX_DIR}" != "no" && test -f $AGENTX_DIR/lib${ABILIBDIR}/libagentx.a && test -f $AGENTX_DIR/include/agentx.h; then AGENTX_DIR="$AGENTX_DIR" found_agentx="yes" elif test -d /usr/local && test -f /usr/local/lib${ABILIBDIR}/libagentx.a && test -f /usr/local/include/agentx.h; then AGENTX_DIR="/usr/local" found_agentx="yes" elif test -d /usr/ng && test -f /usr/ng/lib${ABILIBDIR}/libagentx.a && test -f /usr/ng/include/agentx.h; then AGENTX_DIR="/usr/ng" found_agentx="yes" fi if test "$found_agentx" = "no"; then AC_MSG_WARN([Could not locate AgentX Libraries! http://www.net.cmu.edu/groups/netdev/agentx/]) else LIB_AGENTX="-L$AGENTX_DIR/lib${ABILIBDIR} -lagentx" AC_SUBST(LIB_AGENTX) AGENTXFLAGS="-I$AGENTX_DIR/include" AC_SUBST(AGENTXFLAGS) AC_MSG_RESULT([found $AGENTX_DIR/lib${ABILIBDIR}/libagentx.a]) fi ]) cyrus-imspd-v1.8/cmulocal/arx.m40100644004310100000120000000742107741072414016031 0ustar shadowstaffdnl $Id: arx.m4,v 1.5 2003/10/08 20:35:24 rjs3 Exp $ AC_DEFUN([CMU_ARX_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [arx_context *foo;], ac_cv_found_arx_inc=yes, ac_cv_found_arx_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_ARX_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for arx headers in $i) CMU_ARX_INC_WHERE1($i) CMU_TEST_INCPATH($i, arx) if test "$ac_cv_found_arx_inc" = "yes"; then ac_cv_arx_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for lib files # AC_DEFUN([CMU_ARX_LIB_WHERE1], [ AC_REQUIRE([CMU_AFS]) AC_REQUIRE([CMU_KRB4]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -larx $AFS_LIB_FLAGS $AFS_CLIENT_LIBS $KRB_LIB_FLAGS $LIB_SOCKET" AC_TRY_LINK(, [arx_Init();], [ac_cv_found_arx_lib=yes], ac_cv_found_arx_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_ARX_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for arx libraries in $i) CMU_ARX_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, arx) if test "$ac_cv_found_arx_lib" = "yes" ; then ac_cv_arx_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_USE_ARX], [ AC_ARG_WITH(arx, [ --with-arx=PREFIX Compile with arx support], [if test "X$with_arx" = "X"; then with_arx=yes fi]) AC_ARG_WITH(arx-lib, [ --with-arx-lib=dir use arx libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-arx-lib]) fi]) AC_ARG_WITH(arx-include, [ --with-arx-include=dir use arx headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-arx-include]) fi]) if test "X$with_arx" != "X"; then if test "$with_arx" != "yes"; then ac_cv_arx_where_lib=$with_arx/lib ac_cv_arx_where_inc=$with_arx/include fi fi if test "X$with_arx_lib" != "X"; then ac_cv_arx_where_lib=$with_arx_lib fi if test "X$ac_cv_arx_where_lib" = "X"; then CMU_ARX_LIB_WHERE(/usr/athena/lib /usr/local/lib /usr/lib) fi if test "X$with_arx_include" != "X"; then ac_cv_arx_where_inc=$with_arx_include fi if test "X$ac_cv_arx_where_inc" = "X"; then CMU_ARX_INC_WHERE(/usr/athena/include /usr/local/include) fi AC_MSG_CHECKING(whether to include arx) if test "X$ac_cv_arx_where_lib" = "X" -o "X$ac_cv_arx_where_inc" = "X"; then ac_cv_found_arx=no AC_MSG_RESULT(no) else ac_cv_found_arx=yes AC_MSG_RESULT(yes) ARX_INC_DIR=$ac_cv_arx_where_inc ARX_LIB_DIR=$ac_cv_arx_where_lib ARX_INC_FLAGS="-I${ARX_INC_DIR}" ARX_LIB_FLAGS="-L${ARX_LIB_DIR} -larx" ARX_LD_FLAGS="-L${ARX_LIB_DIR}" dnl Do not force configure.in to put these in CFLAGS and LIBS unconditionally dnl Allow makefile substitutions.... AC_SUBST(ARX_INC_FLAGS) AC_SUBST(ARX_LIB_FLAGS) AC_SUBST(ARX_LD_FLAGS) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${ARX_LIB_DIR}" else RPATH="${RPATH}:${ARX_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${ARX_LIB_DIR}" else RPATH="${RPATH}:${ARX_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${ARX_LIB_DIR}" else RPATH="${RPATH}:${ARX_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${ARX_LIB_DIR}" else RPATH="${RPATH}:${ARX_LIB_DIR}" fi else RPATH="${RPATH} -R${ARX_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/berkdb.m40100644004310100000120000001603310167317224016464 0ustar shadowstaffdnl $Id: berkdb.m4,v 1.19 2005/01/06 20:24:52 shadow Exp $ AC_DEFUN([CMU_DB_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [DB *db; db_create(&db, NULL, 0); db->open(db, "foo.db", NULL, DB_UNKNOWN, DB_RDONLY, 0644);], ac_cv_found_db_inc=yes, ac_cv_found_db_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_DB_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for db headers in $i) CMU_DB_INC_WHERE1($i) CMU_TEST_INCPATH($i, db) if test "$ac_cv_found_db_inc" = "yes"; then ac_cv_db_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for lib files # AC_DEFUN([CMU_DB3_LIB_WHERE1], [ AC_REQUIRE([CMU_AFS]) AC_REQUIRE([CMU_KRB4]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -ldb-3" AC_TRY_LINK([#include ], [db_env_create(NULL, 0);], [ac_cv_found_db_3_lib=yes], ac_cv_found_db_3_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_DB4_LIB_WHERE1], [ AC_REQUIRE([CMU_AFS]) AC_REQUIRE([CMU_KRB4]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -ldb-4" AC_TRY_LINK([#include ], [db_env_create(NULL, 0);], [ac_cv_found_db_4_lib=yes], ac_cv_found_db_4_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_DB_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for db libraries in $i) if test "$enable_db4" = "yes"; then CMU_DB4_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, [db-4]) ac_cv_found_db_lib=$ac_cv_found_db_4_lib else CMU_DB3_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, [db-3]) ac_cv_found_db_lib=$ac_cv_found_db_3_lib fi if test "$ac_cv_found_db_lib" = "yes" ; then ac_cv_db_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_USE_DB], [ AC_ARG_WITH(db, [ --with-db=PREFIX Compile with db support], [if test "X$with_db" = "X"; then with_db=yes fi]) AC_ARG_WITH(db-lib, [ --with-db-lib=dir use db libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-db-lib]) fi]) AC_ARG_WITH(db-include, [ --with-db-include=dir use db headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-db-include]) fi]) AC_ARG_ENABLE(db4, [ --enable-db4 use db 4.x libraries]) if test "X$with_db" != "X"; then if test "$with_db" != "yes"; then ac_cv_db_where_lib=$with_db/lib ac_cv_db_where_inc=$with_db/include fi fi if test "X$with_db_lib" != "X"; then ac_cv_db_where_lib=$with_db_lib fi if test "X$ac_cv_db_where_lib" = "X"; then CMU_DB_LIB_WHERE(/usr/athena/lib /usr/lib /usr/local/lib) fi if test "X$with_db_include" != "X"; then ac_cv_db_where_inc=$with_db_include fi if test "X$ac_cv_db_where_inc" = "X"; then CMU_DB_INC_WHERE(/usr/athena/include /usr/local/include) fi AC_MSG_CHECKING(whether to include db) if test "X$ac_cv_db_where_lib" = "X" -o "X$ac_cv_db_where_inc" = "X"; then ac_cv_found_db=no AC_MSG_RESULT(no) else ac_cv_found_db=yes AC_MSG_RESULT(yes) DB_INC_DIR=$ac_cv_db_where_inc DB_LIB_DIR=$ac_cv_db_where_lib DB_INC_FLAGS="-I${DB_INC_DIR}" if test "$enable_db4" = "yes"; then DB_LIB_FLAGS="-L${DB_LIB_DIR} -ldb-4" else DB_LIB_FLAGS="-L${DB_LIB_DIR} -ldb-3" fi dnl Do not force configure.in to put these in CFLAGS and LIBS unconditionally dnl Allow makefile substitutions.... AC_SUBST(DB_INC_FLAGS) AC_SUBST(DB_LIB_FLAGS) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi else RPATH="${RPATH} -R${DB_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) dnl ---- CUT HERE --- dnl These are the Cyrus Berkeley DB macros. In an ideal world these would be dnl identical to the above. dnl They are here so that they can be shared between Cyrus IMAPd dnl and Cyrus SASL with relative ease. dnl The big difference between this and the ones above is that we don't assume dnl that we know the name of the library, and we try a lot of permutations dnl instead. We also assume that DB4 is acceptable. dnl When we're done, there will be a BDB_LIBADD and a BDB_INCADD which should dnl be used when necessary. We should probably be smarter about our RPATH dnl handling. dnl Call these with BERKELEY_DB_CHK. dnl We will also set $dblib to "berkeley" if we are successful, "no" otherwise. dnl this is unbelievably painful due to confusion over what db-3 should be dnl named and where the db-3 header file is located. arg. AC_DEFUN([CYRUS_BERKELEY_DB_CHK_LIB], [ BDB_SAVE_LDFLAGS=$LDFLAGS if test -d $with_bdb_lib; then CMU_ADD_LIBPATH_TO($with_bdb_lib, LDFLAGS) CMU_ADD_LIBPATH_TO($with_bdb_lib, BDB_LIBADD) else BDB_LIBADD="" fi saved_LIBS=$LIBS for dbname in db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db do LIBS="$saved_LIBS -l$dbname" AC_TRY_LINK([#include ], [db_create(NULL, NULL, 0);], BDB_LIBADD="$BDB_LIBADD -l$dbname"; dblib="berkeley"; dbname=db, dblib="no") if test "$dblib" = "berkeley"; then break; fi done if test "$dblib" = "no"; then LIBS="$saved_LIBS -ldb" AC_TRY_LINK([#include ], [db_open(NULL, 0, 0, 0, NULL, NULL, NULL);], BDB_LIBADD="$BDB_LIBADD -ldb"; dblib="berkeley"; dbname=db, dblib="no") fi LIBS=$saved_LIBS LDFLAGS=$BDB_SAVE_LDFLAGS ]) AC_DEFUN([CYRUS_BERKELEY_DB_OPTS], [ AC_ARG_WITH(bdb-libdir, [ --with-bdb-libdir=DIR Berkeley DB lib files are in DIR], with_bdb_lib=$withval, [ test "${with_bdb_lib+set}" = set || with_bdb_lib=none]) AC_ARG_WITH(bdb-incdir, [ --with-bdb-incdir=DIR Berkeley DB include files are in DIR], with_bdb_inc=$withval, [ test "${with_bdb_inc+set}" = set || with_bdb_inc=none ]) ]) AC_DEFUN([CYRUS_BERKELEY_DB_CHK], [ AC_REQUIRE([CYRUS_BERKELEY_DB_OPTS]) cmu_save_CPPFLAGS=$CPPFLAGS if test -d $with_bdb_inc; then CPPFLAGS="$CPPFLAGS -I$with_bdb_inc" BDB_INCADD="-I$with_bdb_inc" else BDB_INCADD="" fi dnl Note that FreeBSD puts it in a wierd place dnl (but they should use with-bdb-incdir) AC_CHECK_HEADER(db.h, [CYRUS_BERKELEY_DB_CHK_LIB()], dblib="no") CPPFLAGS=$cmu_save_CPPFLAGS ]) cyrus-imspd-v1.8/cmulocal/bsd_sockets.m40100644004310100000120000000146407741072414017543 0ustar shadowstaffdnl bsd_sockets.m4--which socket libraries do we need? dnl Derrick Brashear dnl from Zephyr dnl $Id: bsd_sockets.m4,v 1.9 2003/10/08 20:35:24 rjs3 Exp $ dnl Hacked on by Rob Earhart to not just toss stuff in LIBS dnl It now puts everything required for sockets into LIB_SOCKET AC_DEFUN([CMU_SOCKETS], [ save_LIBS="$LIBS" LIB_SOCKET="" AC_CHECK_FUNC(connect, :, AC_CHECK_LIB(nsl, gethostbyname, LIB_SOCKET="-lnsl $LIB_SOCKET") AC_CHECK_LIB(socket, connect, LIB_SOCKET="-lsocket $LIB_SOCKET") ) LIBS="$LIB_SOCKET $save_LIBS" AC_CHECK_FUNC(res_search, :, AC_CHECK_LIB(resolv, res_search, LIB_SOCKET="-lresolv $LIB_SOCKET") ) LIBS="$LIB_SOCKET $save_LIBS" AC_CHECK_FUNCS(dn_expand dns_lookup) LIBS="$save_LIBS" AC_SUBST(LIB_SOCKET) ]) cyrus-imspd-v1.8/cmulocal/c-attribute.m40100644004310100000120000000106307741072414017456 0ustar shadowstaffdnl dnl $Id: c-attribute.m4,v 1.3 2003/10/08 20:35:24 rjs3 Exp $ dnl dnl dnl Test for __attribute__ dnl AC_DEFUN([CMU_C___ATTRIBUTE__], [ AC_MSG_CHECKING(for __attribute__) AC_CACHE_VAL(ac_cv___attribute__, [ AC_TRY_COMPILE([ #include ], [ static void foo(void) __attribute__ ((noreturn)); static void foo(void) { exit(1); } ], ac_cv___attribute__=yes, ac_cv___attribute__=no)]) if test "$ac_cv___attribute__" = "yes"; then AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__]) fi AC_MSG_RESULT($ac_cv___attribute__) ]) cyrus-imspd-v1.8/cmulocal/c-fpic.m40100644004310100000120000000075007741072414016376 0ustar shadowstaffdnl dnl $Id: c-fpic.m4,v 1.2 2003/10/08 20:35:24 rjs3 Exp $ dnl dnl dnl Test for -fPIC dnl AC_DEFUN([CMU_C_FPIC], [ AC_MSG_CHECKING(if compiler supports -fPIC) AC_CACHE_VAL(ac_cv_fpic, [ save_CFLAGS=$CFLAGS CFLAGS="${CFLAGS} -fPIC" AC_TRY_COMPILE([ #include ], [ static void foo(void) { exit(1); } ], ac_cv_fpic=yes, ac_cv_fpic=no) CFLAGS=$save_CFLAGS ]) if test "$ac_cv_fpic" = "yes"; then FPIC_CFLAGS="-fPIC" else FPIC_CFLAGS="" fi AC_MSG_RESULT($ac_cv_fpic) ]) cyrus-imspd-v1.8/cmulocal/com_err.m40100644004310100000120000000157307741072414016667 0ustar shadowstaffdnl com_err.m4--com_err detection macro dnl Rob Earhart dnl $Id: com_err.m4,v 1.6 2003/10/08 20:35:24 rjs3 Exp $ AC_DEFUN([CMU_COMERR], [ cmu_need_compile_et=no AC_CHECK_PROGS(COMPILE_ET, compile_et, no) if test "$COMPILE_ET" = no; then COMPILE_ET="\$(top_builddir)/com_err/compile_et" cmu_need_to_compile_com_err=yes fi AC_CHECK_HEADER(com_err.h,,CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/com_err") cmu_save_LIBS="$LIBS" AC_CHECK_LIB(com_err, com_err, LIB_COMERR="-lcom_err", LDFLAGS="$LDFLAGS -L`pwd`/com_err" LIB_COMERR="\$(top_builddir)/com_err/libcom_err.la" cmu_need_to_compile_com_err=yes) AC_SUBST(LIB_COMERR) LIBS="$cmu_save_LIBS" AC_MSG_CHECKING(whether we need to compile com_err) if test "$cmu_need_to_compile_com_err" = yes; then AC_MSG_RESULT(yes) AC_CONFIG_SUBDIRS(com_err) else AC_MSG_RESULT(no) fi ]) cyrus-imspd-v1.8/cmulocal/com_err_link.m40100644004310100000120000001004207741072414017673 0ustar shadowstaffdnl damnit, i don't want to figure out if I need to build an integral com_err dnl library with the collection, I just want to know where it's installed, dnl so don't bitch, Rob... dnl Derrick Brashear dnl $Id: com_err_link.m4,v 1.7 2003/10/08 20:35:24 rjs3 Exp $ AC_DEFUN([CMU_COMERR_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [int foo;], ac_cv_found_com_err_inc=yes, ac_cv_found_com_err_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_COMERR_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for com_err headers in $i) CMU_COMERR_INC_WHERE1($i) CMU_TEST_INCPATH($i, com_err) if test "$ac_cv_found_com_err_inc" = "yes"; then ac_cv_comerr_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for lib files # AC_DEFUN([CMU_COMERR_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lcom_err" AC_TRY_LINK(, [com_err();], [ac_cv_found_com_err_lib=yes], ac_cv_found_com_err_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_COMERR_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for com_err libraries in $i) CMU_COMERR_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, com_err) if test "$ac_cv_found_com_err_lib" = "yes" ; then ac_cv_comerr_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_USE_COMERR], [ AC_ARG_WITH(comerr, [ --with-comerr=PREFIX Compile with com_err support], [if test "X$with_comerr" = "X"; then with_comerr=yes fi]) AC_ARG_WITH(comerr-lib, [ --with-comerr-lib=dir use com_err libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-comerr-lib]) fi]) AC_ARG_WITH(comerr-include, [ --with-comerr-include=dir use com_err headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-comerr-include]) fi]) if test "X$with_comerr" != "X"; then if test "$with_comerr" != "yes"; then ac_cv_comerr_where_lib=$with_comerr/lib ac_cv_comerr_where_inc=$with_comerr/include fi fi if test "X$with_comerr_lib" != "X"; then ac_cv_comerr_where_lib=$with_comerr_lib fi if test "X$ac_cv_comerr_where_lib" = "X"; then CMU_COMERR_LIB_WHERE(/usr/athena/lib /usr/lib /usr/local/lib) fi if test "X$with_comerr_include" != "X"; then ac_cv_comerr_where_inc=$with_comerr_include fi if test "X$ac_cv_comerr_where_inc" = "X"; then CMU_COMERR_INC_WHERE(/usr/athena/include /usr/local/include) fi AC_MSG_CHECKING(whether to include com_err) if test "X$ac_cv_comerr_where_lib" = "X" -a "X$ac_cv_comerr_where_inc" = "X"; then ac_cv_found_com_err=no AC_MSG_RESULT(no) else ac_cv_found_com_err=yes AC_MSG_RESULT(yes) COMERR_INC_DIR=$ac_cv_comerr_where_inc COMERR_LIB_DIR=$ac_cv_comerr_where_lib COMERR_INC_FLAGS="-I${COMERR_INC_DIR}" COMERR_LIB_FLAGS="-L${COMERR_LIB_DIR} -lcom_err" dnl Do not force configure.in to put these in CFLAGS and LIBS unconditionally dnl Allow makefile substitutions.... AC_SUBST(COMERR_INC_FLAGS) AC_SUBST(COMERR_LIB_FLAGS) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${COMERR_LIB_DIR}" else RPATH="${RPATH}:${COMERR_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${COMERR_LIB_DIR}" else RPATH="${RPATH}:${COMERR_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${COMERR_LIB_DIR}" else RPATH="${RPATH}:${COMERR_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${COMERR_LIB_DIR}" else RPATH="${RPATH}:${COMERR_LIB_DIR}" fi else RPATH="${RPATH} -R${COMERR_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/common.m40100644004310100000120000000215607741072414016527 0ustar shadowstaffdnl $Id: common.m4,v 1.11 2003/10/08 20:35:24 rjs3 Exp $ AC_DEFUN([CMU_TEST_LIBPATH], [ changequote(<<, >>) define(<>, translit(ac_cv_found_$2_lib, <<- *>>, <<__p>>)) changequote([, ]) if test "$CMU_AC_CV_FOUND" = "yes"; then if test \! -r "$1/lib$2.a" -a \! -r "$1/lib$2.so" -a \! -r "$1/lib$2.sl"; then CMU_AC_CV_FOUND=no fi fi ]) AC_DEFUN([CMU_TEST_INCPATH], [ changequote(<<, >>) define(<>, translit(ac_cv_found_$2_inc, [ *], [_p])) changequote([, ]) if test "$CMU_AC_CV_FOUND" = "yes"; then if test \! -r "$1/$2.h"; then CMU_AC_CV_FOUND=no fi fi ]) dnl CMU_CHECK_HEADER_NOCACHE(HEADER-FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) AC_DEFUN([CMU_CHECK_HEADER_NOCACHE], [dnl Do the transliteration at runtime so arg 1 can be a shell variable. ac_safe=`echo "$1" | sed 'y%./+-%__p_%'` AC_MSG_CHECKING([for $1]) AC_TRY_CPP([#include <$1>], eval "ac_cv_header_$ac_safe=yes", eval "ac_cv_header_$ac_safe=no") if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) ifelse([$3], , , [$3 ])dnl fi ]) cyrus-imspd-v1.8/cmulocal/cyrus.m40100644004310100000120000000255407741072414016406 0ustar shadowstaffdnl dnl Additional macros for configure.in packaged up for easier theft. dnl $Id: cyrus.m4,v 1.4 2003/10/08 20:35:24 rjs3 Exp $ dnl tjs@andrew.cmu.edu 6-may-1998 dnl dnl It would be good if ANDREW_ADD_LIBPATH could detect if something was dnl already there and not redundantly add it if it is. dnl add -L(arg), and possibly (runpath switch)(arg), to LDFLAGS dnl (so the runpath for shared libraries is set). AC_DEFUN([CMU_ADD_LIBPATH], [ # this is CMU ADD LIBPATH if test "$andrew_runpath_switch" = "none" ; then LDFLAGS="-L$1 ${LDFLAGS}" else LDFLAGS="-L$1 $andrew_runpath_switch$1 ${LDFLAGS}" fi ]) dnl add -L(1st arg), and possibly (runpath switch)(1st arg), to (2nd arg) dnl (so the runpath for shared libraries is set). AC_DEFUN([CMU_ADD_LIBPATH_TO], [ # this is CMU ADD LIBPATH TO if test "$andrew_runpath_switch" = "none" ; then $2="-L$1 ${$2}" else $2="-L$1 ${$2} $andrew_runpath_switch$1" fi ]) dnl runpath initialization AC_DEFUN([CMU_GUESS_RUNPATH_SWITCH], [ # CMU GUESS RUNPATH SWITCH AC_CACHE_CHECK(for runpath switch, andrew_runpath_switch, [ # first, try -R SAVE_LDFLAGS="${LDFLAGS}" LDFLAGS="-R /usr/lib" AC_TRY_LINK([],[],[andrew_runpath_switch="-R"], [ LDFLAGS="-Wl,-rpath,/usr/lib" AC_TRY_LINK([],[],[andrew_runpath_switch="-Wl,-rpath,"], [andrew_runpath_switch="none"]) ]) LDFLAGS="${SAVE_LDFLAGS}" ])]) cyrus-imspd-v1.8/cmulocal/db.m40100644004310100000120000000167410013510042015604 0ustar shadowstaffdnl $Id: db.m4,v 1.2 2004/02/14 21:16:18 cg2v Exp $ dnl dnl tests for various db libraries dnl AC_DEFUN([rk_DB],[berkeley_db=db AC_ARG_WITH(berkeley-db, [ --without-berkeley-db if you don't want berkeley db],[ if test "$withval" = no; then berkeley_db="" fi ]) if test "$berkeley_db"; then AC_CHECK_HEADERS([ \ db.h \ db_185.h \ ]) fi AC_FIND_FUNC_NO_LIBS2(dbopen, $berkeley_db, [ #include #if defined(HAVE_DB_185_H) #include #elif defined(HAVE_DB_H) #include #endif ],[NULL, 0, 0, 0, NULL]) AC_FIND_FUNC_NO_LIBS(dbm_firstkey, $berkeley_db gdbm ndbm) AC_FIND_FUNC_NO_LIBS2(db_create, $berkeley_db, [ #include #if defined(HAVE_DB_H) #include #endif ],[NULL, NULL, 0]) DBLIB="$LIB_dbopen" if test "$LIB_dbopen" != "$LIB_db_create"; then DBLIB="$DBLIB $LIB_db_create" fi if test "$LIB_dbopen" != "$LIB_dbm_firstkey"; then DBLIB="$DBLIB $LIB_dbm_firstkey" fi AC_SUBST(DBLIB)dnl ]) cyrus-imspd-v1.8/cmulocal/find-func-no-libs.m40100644004310100000120000000050107741072414020441 0ustar shadowstaffdnl $Id: find-func-no-libs.m4,v 1.2 2003/10/08 20:35:24 rjs3 Exp $ dnl dnl dnl Look for function in any of the specified libraries dnl dnl AC_FIND_FUNC_NO_LIBS(func, libraries, includes, arguments, extra libs, extra args) AC_DEFUN([AC_FIND_FUNC_NO_LIBS], [ AC_FIND_FUNC_NO_LIBS2([$1], ["" $2], [$3], [$4], [$5], [$6])]) cyrus-imspd-v1.8/cmulocal/find-func-no-libs2.m40100644004310100000120000000272107741072414020531 0ustar shadowstaffdnl $Id: find-func-no-libs2.m4,v 1.2 2003/10/08 20:35:24 rjs3 Exp $ dnl dnl dnl Look for function in any of the specified libraries dnl dnl AC_FIND_FUNC_NO_LIBS2(func, libraries, includes, arguments, extra libs, extra args) AC_DEFUN([AC_FIND_FUNC_NO_LIBS2], [ AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(ac_cv_funclib_$1, [ if eval "test \"\$ac_cv_func_$1\" != yes" ; then ac_save_LIBS="$LIBS" for ac_lib in $2; do if test -n "$ac_lib"; then ac_lib="-l$ac_lib" else ac_lib="" fi LIBS="$6 $ac_lib $5 $ac_save_LIBS" AC_TRY_LINK([$3],[$1($4)],eval "if test -n \"$ac_lib\";then ac_cv_funclib_$1=$ac_lib; else ac_cv_funclib_$1=yes; fi";break) done eval "ac_cv_funclib_$1=\${ac_cv_funclib_$1-no}" LIBS="$ac_save_LIBS" fi ]) eval "ac_res=\$ac_cv_funclib_$1" if false; then AC_CHECK_FUNCS($1) dnl AC_CHECK_LIBS($2, foo) fi # $1 ac_tr_func=HAVE_`echo $1 | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` ac_tr_lib=HAVE_LIB_`echo $ac_res |sed 's/-l//' | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` eval "LIB_$1=$ac_res" case "$ac_res" in yes) eval "ac_cv_func_$1=yes" eval "LIB_$1=" AC_DEFINE_UNQUOTED($ac_tr_func) AC_MSG_RESULT([yes]) ;; no) eval "ac_cv_func_$1=no" eval "LIB_$1=" AC_MSG_RESULT([no]) ;; *) eval "ac_cv_func_$1=yes" eval "ac_cv_lib_`echo "$ac_res" | sed 's/-l//'`=yes" AC_DEFINE_UNQUOTED($ac_tr_func) AC_DEFINE_UNQUOTED($ac_tr_lib) AC_MSG_RESULT([yes, in $ac_res]) ;; esac AC_SUBST(LIB_$1) ]) cyrus-imspd-v1.8/cmulocal/find-func.m40100644004310100000120000000036507741072414017110 0ustar shadowstaffdnl $Id: find-func.m4,v 1.2 2003/10/08 20:35:24 rjs3 Exp $ dnl dnl AC_FIND_FUNC(func, libraries, includes, arguments) AC_DEFUN([AC_FIND_FUNC], [ AC_FIND_FUNC_NO_LIBS([$1], [$2], [$3], [$4]) if test -n "$LIB_$1"; then LIBS="$LIB_$1 $LIBS" fi ]) cyrus-imspd-v1.8/cmulocal/heimdal.m40100644004310100000120000001256310034720374016637 0ustar shadowstaffdnl kerberos_v5.m4--Kerberos 5 libraries and includes dnl Derrick Brashear dnl from KTH krb and Arla dnl $Id: heimdal.m4,v 1.8 2004/04/07 06:34:36 shadow Exp $ AC_DEFUN([CMU_LIBHEIMDAL_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [krb5_keyblock foo;], ac_cv_found_libheimdal_inc=yes, ac_cv_found_libheimdal_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_LIBHEIMDAL_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for heimdal headers in $i) CMU_LIBHEIMDAL_INC_WHERE1($i) CMU_TEST_INCPATH($i, krb5) if test "$ac_cv_found_libheimdal_inc" = "yes"; then ac_cv_libheimdal_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for kerberos lib files # AC_DEFUN([CMU_LIBHEIMDAL_LIB_WHERE1], [ AC_REQUIRE([CMU_SOCKETS]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lkadm5clnt -lkrb5 -lasn1 -lkadm5clnt -lroken $LIB_SOCKET" AC_TRY_LINK(, [krb5_get_in_tkt();], [ac_cv_found_libheimdal_lib=yes], ac_cv_found_libheimdal_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_LIBHEIMDAL_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for heimdal libraries in $i) CMU_LIBHEIMDAL_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, krb5) if test "$ac_cv_found_libheimdal_lib" = "yes" ; then ac_cv_libheimdal_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBHEIMDAL_LIBDES], [ AC_REQUIRE([CMU_LIBSSL]) cmu_save_LIBS=$LIBS AC_MSG_CHECKING([if libdes is needed]) AC_TRY_LINK([],[des_quad_cksum();],HEIM_DES_LIB="",HEIM_DES_LIB="maybe") if test "X$HEIM_DES_LIB" != "X"; then LIBS="$cmu_save_LIBS -L$1 -ldes" AC_TRY_LINK([], [des_quad_cksum();],HEIM_DES_LIB="yes") if test "X$HEIM_DES_LIB" = "Xyes"; then AC_MSG_RESULT([yes]) HEIM_LIBDES="-ldes" HEIM_LIBDESA="$1/libdes.a" else LIBS="$cmu_save_LIBS $LIBSSL_LIB_FLAGS" AC_TRY_LINK([], [des_quad_cksum();],HEIM_DES_LIB="libcrypto") if test "X$HEIM_DES_LIB" = "Xlibcrypto"; then AC_MSG_RESULT([libcrypto]) HEIM_LIBDES="$LIBSSL_LIB_FLAGS" HEIM_LIBDESA="$LIBSSL_LIB_FLAGS" else AC_MSG_RESULT([unknown]) AC_MSG_ERROR([Could not use -ldes]) fi fi else AC_MSG_RESULT([no]) fi ]) AC_DEFUN([CMU_LIBHEIMDAL], [ AC_REQUIRE([CMU_SOCKETS]) AC_REQUIRE([CMU_USE_COMERR]) AC_ARG_WITH(LIBHEIMDAL, [ --with-libheimdal=PREFIX Compile with Heimdal support], [if test "X$with_libheimdal" = "X"; then with_libheimdal=yes fi]) AC_ARG_WITH(libheimdal-lib, [ --with-libheimdal-lib=dir use heimdal libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libheimdal-lib]) fi]) AC_ARG_WITH(libheimdal-include, [ --with-libheimdal-include=dir use heimdal headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libheimdal-include]) fi]) if test "X$with_libheimdal" != "X"; then if test "$with_libheimdal" != "yes" -a "$with_libheimdal" != "no"; then ac_cv_libheimdal_where_lib=$with_libheimdal/lib ac_cv_libheimdal_where_inc=$with_libheimdal/include fi fi if test "$with_libheimdal" != "no"; then if test "X$with_libheimdal_lib" != "X"; then ac_cv_libheimdal_where_lib=$with_libheimdal_lib fi if test "X$ac_cv_libheimdal_where_lib" = "X"; then CMU_LIBHEIMDAL_LIB_WHERE(/usr/athena/lib /usr/lib /usr/heimdal/lib /usr/local/lib) fi if test "X$with_libheimdal_include" != "X"; then ac_cv_libheimdal_where_inc=$with_libheimdal_include fi if test "X$ac_cv_libheimdal_where_inc" = "X"; then CMU_LIBHEIMDAL_INC_WHERE(/usr/athena/include /usr/heimdal/include /usr/local/include) fi fi AC_MSG_CHECKING(whether to include heimdal) if test "X$ac_cv_libheimdal_where_lib" = "X" -a "X$ac_cv_libheimdal_where_inc" = "X"; then ac_cv_found_libheimdal=no AC_MSG_RESULT(no) else ac_cv_found_libheimdal=yes AC_MSG_RESULT(yes) LIBHEIMDAL_INC_DIR=$ac_cv_libheimdal_where_inc LIBHEIMDAL_LIB_DIR=$ac_cv_libheimdal_where_lib CMU_LIBHEIMDAL_LIBDES($LIBHEIMDAL_LIB_DIR) LIBHEIMDAL_INC_FLAGS="-I${LIBHEIMDAL_INC_DIR}" LIBHEIMDAL_LIB_FLAGS="-L${LIBHEIMDAL_LIB_DIR} -lkadm5clnt -lkrb5 -lasn1 ${HEIM_LIBDES} -lroken $LIB_SOCKET" AC_SUBST(LIBHEIMDAL_INC_FLAGS) AC_SUBST(LIBHEIMDAL_LIB_FLAGS) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBHEIMDAL_LIB_DIR}" else RPATH="${RPATH}:${LIBHEIMDAL_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${LIBHEIMDAL_LIB_DIR}" else RPATH="${RPATH}:${LIBHEIMDAL_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBHEIMDAL_LIB_DIR}" else RPATH="${RPATH}:${LIBHEIMDAL_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${LIBHEIMDAL_LIB_DIR}" else RPATH="${RPATH}:${LIBHEIMDAL_LIB_DIR}" fi else RPATH="${RPATH} -R${LIBHEIMDAL_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/init_automake.m40100644004310100000120000000036707741072414020072 0ustar shadowstaffdnl init_automake.m4--cmulocal automake setup macro dnl Rob Earhart dnl $Id: init_automake.m4,v 1.4 2003/10/08 20:35:24 rjs3 Exp $ AC_DEFUN([CMU_INIT_AUTOMAKE], [ AC_REQUIRE([AM_INIT_AUTOMAKE]) ACLOCAL="$ACLOCAL -I \$(top_srcdir)/cmulocal" ]) cyrus-imspd-v1.8/cmulocal/ipv6.m40100644004310100000120000000617007765657403016140 0ustar shadowstaffdnl See whether we can use IPv6 related functions dnl contributed by Hajimu UMEMOTO AC_DEFUN([IPv6_CHECK_FUNC], [ AC_CHECK_FUNC($1, [dnl ac_cv_lib_socket_$1=no ac_cv_lib_inet6_$1=no ], [dnl AC_CHECK_LIB(socket, $1, [dnl LIBS="$LIBS -lsocket" ac_cv_lib_inet6_$1=no ], [dnl AC_MSG_CHECKING([whether your system has IPv6 directory]) AC_CACHE_VAL(ipv6_cv_dir, [dnl for ipv6_cv_dir in /usr/local/v6 /usr/inet6 no; do if test $ipv6_cv_dir = no -o -d $ipv6_cv_dir; then break fi done])dnl AC_MSG_RESULT($ipv6_cv_dir) if test $ipv6_cv_dir = no; then ac_cv_lib_inet6_$1=no else if test x$ipv6_libinet6 = x; then ipv6_libinet6=no SAVELDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -L$ipv6_cv_dir/lib" fi AC_CHECK_LIB(inet6, $1, [dnl if test $ipv6_libinet6 = no; then ipv6_libinet6=yes LIBS="$LIBS -linet6" fi],)dnl if test $ipv6_libinet6 = no; then LDFLAGS="$SAVELDFLAGS" fi fi])dnl ])dnl ipv6_cv_$1=no if test $ac_cv_func_$1 = yes -o $ac_cv_lib_socket_$1 = yes \ -o $ac_cv_lib_inet6_$1 = yes then ipv6_cv_$1=yes fi if test $ipv6_cv_$1 = no; then if test $1 = getaddrinfo; then for ipv6_cv_pfx in o n; do AC_EGREP_HEADER(${ipv6_cv_pfx}$1, netdb.h, [AC_CHECK_FUNC(${ipv6_cv_pfx}$1)]) if eval test X\$ac_cv_func_${ipv6_cv_pfx}$1 = Xyes; then AC_DEFINE(HAVE_GETADDRINFO,[],[Do we have a getaddrinfo?]) ipv6_cv_$1=yes break fi done fi fi if test $ipv6_cv_$1 = yes; then ifelse([$2], , :, [$2]) else ifelse([$3], , :, [$3]) fi]) dnl See whether we have ss_family in sockaddr_storage AC_DEFUN([IPv6_CHECK_SS_FAMILY], [ AC_MSG_CHECKING([whether you have ss_family in struct sockaddr_storage]) AC_CACHE_VAL(ipv6_cv_ss_family, [dnl AC_TRY_COMPILE([#include #include ], [struct sockaddr_storage ss; int i = ss.ss_family;], [ipv6_cv_ss_family=yes], [ipv6_cv_ss_family=no])])dnl if test $ipv6_cv_ss_family = yes; then ifelse([$1], , AC_DEFINE(HAVE_SS_FAMILY,[],[Is there an ss_family in sockaddr_storage?]), [$1]) else ifelse([$2], , :, [$2]) fi AC_MSG_RESULT($ipv6_cv_ss_family)]) dnl whether you have sa_len in struct sockaddr AC_DEFUN([IPv6_CHECK_SA_LEN], [ AC_MSG_CHECKING([whether you have sa_len in struct sockaddr]) AC_CACHE_VAL(ipv6_cv_sa_len, [dnl AC_TRY_COMPILE([#include #include ], [struct sockaddr sa; int i = sa.sa_len;], [ipv6_cv_sa_len=yes], [ipv6_cv_sa_len=no])])dnl if test $ipv6_cv_sa_len = yes; then ifelse([$1], , AC_DEFINE(HAVE_SOCKADDR_SA_LEN,[],[Does sockaddr have an sa_len?]), [$1]) else ifelse([$2], , :, [$2]) fi AC_MSG_RESULT($ipv6_cv_sa_len)]) dnl See whether sys/socket.h has socklen_t AC_DEFUN([IPv6_CHECK_SOCKLEN_T], [ AC_MSG_CHECKING(for socklen_t) AC_CACHE_VAL(ipv6_cv_socklen_t, [dnl AC_TRY_LINK([#include #include ], [socklen_t len = 0;], [ipv6_cv_socklen_t=yes], [ipv6_cv_socklen_t=no])])dnl if test $ipv6_cv_socklen_t = yes; then ifelse([$1], , AC_DEFINE(HAVE_SOCKLEN_T,[],[Do we have a socklen_t?]), [$1]) else ifelse([$2], , :, [$2]) fi AC_MSG_RESULT($ipv6_cv_socklen_t)]) cyrus-imspd-v1.8/cmulocal/kafs.m40100644004310100000120000001020707741072414016157 0ustar shadowstaffdnl kerberos_v4.m4--Kafs libraries and includes dnl Derrick Brashear dnl from KTH kafs and Arla dnl $Id: kafs.m4,v 1.6 2003/10/08 20:35:24 rjs3 Exp $ AC_DEFUN([CMU_KAFS_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([ #include #include #include ], [struct ClearToken foo;], ac_cv_found_kafs_inc=yes, ac_cv_found_kafs_inc=no) if test "$ac_cv_found_kafs_inc" = "no"; then CPPFLAGS="$saved_CPPFLAGS -I$1 -I$1/kerberosIV" AC_TRY_COMPILE([ #include #include #include ], [struct ClearToken foo;], [ac_cv_found_kafs_inc=yes], ac_cv_found_kafs_inc=no) fi CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_KAFS_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for kafs headers in $i) CMU_KAFS_INC_WHERE1($i) CMU_TEST_INCPATH($i, kafs) if test "$ac_cv_found_kafs_inc" = "yes"; then ac_cv_kafs_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_KAFS_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lkafs $KRB_LIB_FLAGS $KRB5_LIB_FLAGS" AC_TRY_LINK(, [krb_afslog();], [ac_cv_found_kafs_lib=yes], ac_cv_found_kafs_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_KAFS_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for kafs libraries in $i) CMU_KAFS_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, kafs) if test "$ac_cv_found_kafs_lib" = "yes" ; then ac_cv_kafs_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_KAFS], [ AC_REQUIRE([CMU_SOCKETS]) AC_REQUIRE([CMU_KRB4]) AC_REQUIRE([CMU_KRB5]) AC_ARG_WITH(kafs, [ --with-kafs=PREFIX Compile with Kafs support], [if test "X$with_kafs" = "X"; then with_kafs=yes fi]) AC_ARG_WITH(kafs-lib, [ --with-kafs-lib=dir use kafs libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-kafs-lib]) fi]) AC_ARG_WITH(kafs-include, [ --with-kafs-include=dir use kafs headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-kafs-include]) fi]) if test "X$with_kafs" != "X"; then if test "$with_kafs" != "yes" -a "$with_kafs" != no; then ac_cv_kafs_where_lib=$with_kafs/lib ac_cv_kafs_where_inc=$with_kafs/include fi fi if test "$with_kafs" != "no"; then if test "X$with_kafs_lib" != "X"; then ac_cv_kafs_where_lib=$with_kafs_lib fi if test "X$ac_cv_kafs_where_lib" = "X"; then CMU_KAFS_LIB_WHERE(/usr/athena/lib /usr/local/lib /usr/lib) fi if test "X$with_kafs_include" != "X"; then ac_cv_kafs_where_inc=$with_kafs_include fi if test "X$ac_cv_kafs_where_inc" = "X"; then CMU_KAFS_INC_WHERE(/usr/athena/include /usr/include/kerberosIV /usr/local/include /usr/include/kerberos) fi fi AC_MSG_CHECKING(whether to include kafs) if test "X$ac_cv_kafs_where_lib" = "X" -a "X$ac_cv_kafs_where_inc" = "X"; then ac_cv_found_kafs=no AC_MSG_RESULT(no) else ac_cv_found_kafs=yes AC_MSG_RESULT(yes) KAFS_INC_DIR=$ac_cv_kafs_where_inc KAFS_LIB_DIR=$ac_cv_kafs_where_lib KAFS_INC_FLAGS="-I${KAFS_INC_DIR}" KAFS_LIB_FLAGS="-L${KAFS_LIB_DIR} -lkafs" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${KAFS_LIB_DIR}" else RPATH="${RPATH}:${KAFS_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${KAFS_LIB_DIR}" else RPATH="${RPATH}:${KAFS_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${KAFS_LIB_DIR}" else RPATH="${RPATH}:${KAFS_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${KAFS_LIB_DIR}" else RPATH="${RPATH}:${KAFS_LIB_DIR}" fi else RPATH="${RPATH} -R${KAFS_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/kerberos_v4.m40100644004310100000120000001760210010505537017454 0ustar shadowstaffdnl kerberos_v4.m4--Kerberos 4 libraries and includes dnl Derrick Brashear dnl from KTH krb and Arla dnl $Id: kerberos_v4.m4,v 1.27 2004/02/05 18:28:47 cg2v Exp $ AC_DEFUN([CMU_KRB_SENDAUTH_PROTO], [ AC_MSG_CHECKING(for krb_sendauth prototype) AC_TRY_COMPILE( [#include int krb_sendauth (long options, int fd, KTEXT ktext, char *service, char *inst, char *realm, u_long checksum, MSG_DAT *msg_data, CREDENTIALS *cred, Key_schedule schedule, struct sockaddr_in *laddr, struct sockaddr_in *faddr, char *version);], [int foo = krb_sendauth(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); ], ac_cv_krb_sendauth_proto=no, ac_cv_krb_sendauth_proto=yes) AC_MSG_RESULT($ac_cv_krb_sendauth_proto) if test "$ac_cv_krb_sendauth_proto" = yes; then AC_DEFINE(HAVE_KRB_SENDAUTH_PROTO)dnl fi AC_MSG_RESULT($ac_cv_krb_sendauth_proto) ]) AC_DEFUN([CMU_KRB_SET_KEY_PROTO], [ AC_MSG_CHECKING(for krb_set_key prototype) AC_CACHE_VAL(ac_cv_krb_set_key_proto, [ cmu_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} ${KRB_INC_FLAGS}" AC_TRY_COMPILE( [#include int krb_set_key(char *key, int cvt);], [int foo = krb_set_key(0, 0);], ac_cv_krb_set_key_proto=no, ac_cv_krb_set_key_proto=yes) ]) CPPFLAGS="${cmu_save_CPPFLAGS}" if test "$ac_cv_krb_set_key_proto" = yes; then AC_DEFINE(HAVE_KRB_SET_KEY_PROTO)dnl fi AC_MSG_RESULT($ac_cv_krb_set_key_proto) ]) AC_DEFUN([CMU_KRB4_32_DEFN], [ AC_MSG_CHECKING(for KRB4_32 definition) AC_CACHE_VAL(ac_cv_krb4_32_defn, [ cmu_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} ${KRB_INC_FLAGS}" AC_TRY_COMPILE( [#include ], [KRB4_32 foo = 1;], ac_cv_krb4_32_defn=yes, ac_cv_krb4_32_defn=no) ]) CPPFLAGS="${cmu_save_CPPFLAGS}" if test "$ac_cv_krb4_32_defn" = yes; then AC_DEFINE(HAVE_KRB4_32_DEFINE)dnl fi AC_MSG_RESULT($ac_cv_krb4_32_defn) ]) AC_DEFUN([CMU_KRB_RD_REQ_PROTO], [ AC_MSG_CHECKING(for krb_rd_req prototype) AC_CACHE_VAL(ac_cv_krb_rd_req_proto, [ cmu_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} ${KRB_INC_FLAGS}" AC_TRY_COMPILE( [#include int krb_rd_req(KTEXT authent, char *service, char *instance, unsigned KRB_INT32 from_addr, AUTH_DAT *ad, char *fn);], [int foo = krb_rd_req(0,0,0,0,0,0);], ac_cv_krb_rd_req_proto=no, ac_cv_krb_rd_req_proto=yes) ]) CPPFLAGS="${cmu_save_CPPFLAGS}" if test "$ac_cv_krb_rd_req_proto" = yes; then AC_DEFINE(HAVE_KRB_RD_REQ_PROTO)dnl fi AC_MSG_RESULT($ac_cv_krb_rd_req_proto) ]) AC_DEFUN([CMU_KRB_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [struct ktext foo;], ac_cv_found_krb_inc=yes, ac_cv_found_krb_inc=no) if test "$ac_cv_found_krb_inc" = "no"; then CPPFLAGS="$saved_CPPFLAGS -I$1 -I$1/kerberosIV" AC_TRY_COMPILE([#include ], [struct ktext foo;], [ac_cv_found_krb_inc=yes], ac_cv_found_krb_inc=no) fi CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_KRB_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for kerberos headers in $i) CMU_KRB_INC_WHERE1($i) CMU_TEST_INCPATH($i, krb) if test "$ac_cv_found_krb_inc" = "yes"; then ac_cv_krb_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for kerberos lib files # AC_DEFUN([CMU_KRB_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lkrb ${KRB_LIBDES}" AC_TRY_LINK(, [dest_tkt();], [ac_cv_found_krb_lib=yes], ac_cv_found_krb_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_KRB_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for kerberos libraries in $i) CMU_KRB_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, krb) if test "$ac_cv_found_krb_lib" = "yes" ; then ac_cv_krb_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_KRB4], [ AC_REQUIRE([CMU_SOCKETS]) AC_REQUIRE([CMU_LIBSSL]) AC_ARG_WITH(krb4, [ --with-krb4=PREFIX Compile with Kerberos 4 support], [if test "X$with_krb4" = "X"; then with_krb4=yes fi]) AC_ARG_WITH(krb4-lib, [ --with-krb4-lib=dir use kerberos 4 libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-krb4-lib]) fi]) AC_ARG_WITH(krb4-include, [ --with-krb4-include=dir use kerberos 4 headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-krb4-include]) fi]) if test "X$with_krb4" != "X"; then if test "$with_krb4" != "yes" -a "$with_krb4" != "no"; then ac_cv_krb_where_lib=$with_krb4/lib ac_cv_krb_where_inc=$with_krb4/include fi fi if test "$with_krb4" != "no"; then if test "X$with_krb4_lib" != "X"; then ac_cv_krb_where_lib=$with_krb4_lib fi if test "X$with_krb4_include" != "X"; then ac_cv_krb_where_inc=$with_krb4_include fi if test "X$ac_cv_krb_where_inc" = "X"; then CMU_KRB_INC_WHERE(/usr/athena/include /usr/include/kerberosIV /usr/local/include /usr/include/kerberos) fi AC_MSG_CHECKING([if libdes is needed]) AC_TRY_LINK([],[des_quad_cksum();],KRB_DES_LIB="",KRB_DES_LIB="maybe") if test "X$KRB_DES_LIB" != "X"; then LIBS="$cmu_save_LIBS -ldes" AC_TRY_LINK([], [des_quad_cksum();],KRB_DES_LIB="yes") if test "X$KRB_DES_LIB" = "Xyes"; then AC_MSG_RESULT([yes]) KRB_LIBDES="-ldes" KRB_LIBDESA='$(KRB_LIB_DIR)/libdes.a' else LIBS="$cmu_save_LIBS $LIBSSL_LIB_FLAGS" AC_TRY_LINK([], [des_quad_cksum();],KRB_DES_LIB="libcrypto") if test "X$KRB_DES_LIB" = "Xlibcrypto"; then AC_MSG_RESULT([libcrypto]) KRB_LIBDES="$LIBSSL_LIB_FLAGS" KRB_LIBDESA="$LIBSSL_LIB_FLAGS" else AC_MSG_RESULT([unknown]) AC_MSG_ERROR([Could not use -ldes]) fi fi else AC_MSG_RESULT([no]) fi if test "X$ac_cv_krb_where_lib" = "X"; then CMU_KRB_LIB_WHERE(/usr/athena/lib /usr/local/lib /usr/lib) fi fi LIBS="${cmu_save_LIBS}" AC_MSG_CHECKING([whether to include kerberos 4]) if test "X$ac_cv_krb_where_lib" = "X" -o "X$ac_cv_krb_where_inc" = "X"; then ac_cv_found_krb=no AC_MSG_RESULT(no) else ac_cv_found_krb=yes AC_MSG_RESULT(yes) KRB_INC_DIR=$ac_cv_krb_where_inc KRB_LIB_DIR=$ac_cv_krb_where_lib KRB_INC_FLAGS="-I${KRB_INC_DIR}" KRB_LIB_FLAGS="-L${KRB_LIB_DIR} -lkrb ${KRB_LIBDES}" LIBS="${cmu_save_LIBS} ${KRB_LIB_FLAGS}" AC_CHECK_LIB(resolv, dns_lookup, KRB_LIB_FLAGS="${KRB_LIB_FLAGS} -lresolv",,"${KRB_LIB_FLAGS}") AC_CHECK_LIB(crypt, crypt, KRB_LIB_FLAGS="${KRB_LIB_FLAGS} -lcrypt",,"${KRB_LIB_FLAGS}") LIBS="${LIBS} ${KRB_LIB_FLAGS}" AC_CHECK_FUNCS(krb_get_int krb_life_to_time) AC_SUBST(KRB_INC_FLAGS) AC_SUBST(KRB_LIB_FLAGS) LIBS="${cmu_save_LIBS}" AC_DEFINE(KERBEROS,,[Use kerberos 4. find out what needs this symbol]) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${KRB_LIB_DIR}" else RPATH="${RPATH}:${KRB_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${KRB_LIB_DIR}" else RPATH="${RPATH}:${KRB_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${KRB_LIB_DIR}" else RPATH="${RPATH}:${KRB_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${KRB_LIB_DIR}" else RPATH="${RPATH}:${KRB_LIB_DIR}" fi else RPATH="${RPATH} -R${KRB_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/kerberos_v5.m40100644004310100000120000001206510034720374017457 0ustar shadowstaffdnl kerberos_v5.m4--Kerberos 5 libraries and includes dnl Derrick Brashear dnl from KTH krb and Arla dnl $Id: kerberos_v5.m4,v 1.8 2004/04/07 06:34:36 shadow Exp $ AC_DEFUN([CMU_KRB5_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [krb5_keyblock foo;], ac_cv_found_krb5_inc=yes, ac_cv_found_krb5_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_KRB5_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for krb5 headers in $i) CMU_KRB5_INC_WHERE1($i) CMU_TEST_INCPATH($i, krb5) if test "$ac_cv_found_krb5_inc" = "yes"; then ac_cv_krb5_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for kerberos lib files # AC_DEFUN([CMU_KRB5_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lkrb5 -lk5crypto" AC_TRY_LINK(, [krb5_get_in_tkt();], [ac_cv_found_krb5_lib=yes], ac_cv_found_krb5_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_KRB5_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for krb5 libraries in $i) CMU_KRB5_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, krb5) if test "$ac_cv_found_krb5_lib" = "yes" ; then ac_cv_krb5_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_KRB5], [ AC_REQUIRE([CMU_SOCKETS]) AC_REQUIRE([CMU_USE_COMERR]) AC_ARG_WITH(krb5, [ --with-krb5=PREFIX Compile with Kerberos 5 support], [if test "X$with_krb5" = "X"; then with_krb5=yes fi]) AC_ARG_WITH(krb5-lib, [ --with-krb5-lib=dir use kerberos 5 libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-krb5-lib]) fi]) AC_ARG_WITH(krb5-include, [ --with-krb5-include=dir use kerberos 5 headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-krb5-include]) fi]) AC_ARG_WITH(krb5-impl, [ --with-krb5-impl=heimdal use heimdal kerberos 5 libraries --with-krb5-impl=mit use MIT kerberos 5 libraries], [if test "$withval" != "heimdal" -a "$withval" != "mit"; then AC_MSG_ERROR([Invalid argument for --with-krb5-impl]) fi]) if test "X$with_krb5" != "X"; then if test "$with_krb5" != "yes" -a "$with_krb5" != "no"; then ac_cv_krb5_where_lib=$with_krb5/lib ac_cv_krb5_where_inc=$with_krb5/include ac_cv_krb5_impl=mit fi fi if test "$with_krb5" != "no"; then if test "X$with_krb5_lib" != "X"; then ac_cv_krb5_where_lib=$with_krb5_lib ac_cv_krb5_impl=mit fi if test "X$with_krb5_impl" != "X"; then ac_cv_krb5_impl=$with_krb5_impl fi if test "X$ac_cv_krb5_where_lib" = "X" -a "X$with_krb5_impl" != "Xheimdal"; then CMU_KRB5_LIB_WHERE(/usr/athena/lib /usr/lib /usr/local/lib) if test "X$ac_cv_krb5_where_lib" != "X"; then ac_cv_krb5_impl=mit fi fi if test "X$ac_cv_krb5_where_lib" = "X" -a "X$with_krb5_impl" != "Xmit"; then CMU_LIBHEIMDAL_LIB_WHERE(/usr/athena/lib /usr/lib /usr/heimdal/lib /usr/local/lib) if test "X$ac_cv_libheimdal_where_lib" != "X"; then ac_cv_krb5_where_lib=$ac_cv_libheimdal_where_lib ac_cv_krb5_impl=heimdal fi fi if test "X$with_krb5_include" != "X"; then ac_cv_krb5_where_inc=$with_krb5_include fi if test "X$ac_cv_krb5_where_inc" = "X"; then CMU_KRB5_INC_WHERE(/usr/athena/include /usr/include/kerberos /usr/local/include /usr/include) fi fi AC_MSG_CHECKING(whether to include kerberos 5) if test "X$ac_cv_krb5_where_lib" = "X" -o "X$ac_cv_krb5_where_inc" = "X"; then ac_cv_found_krb5=no AC_MSG_RESULT(no) else ac_cv_found_krb5=yes AC_MSG_RESULT(yes) KRB5_INC_DIR=$ac_cv_krb5_where_inc KRB5_LIB_DIR=$ac_cv_krb5_where_lib if test "X$ac_cv_krb5_impl" != "Xheimdal"; then KRB5_LIB_FLAGS="-L${KRB5_LIB_DIR} -lkrb5 -lk5crypto" else CMU_LIBHEIMDAL_LIBDES($KRB5_LIB_DIR) KRB5_LIB_FLAGS="-L${KRB5_LIB_DIR} -lkadm5clnt -lkrb5 -lasn1 ${HEIM_LIBDES} -lroken $LIB_SOCKET" AC_DEFINE(HEIMDAL,,[we found heimdal krb5 and not MIT krb5]) fi KRB5_INC_FLAGS="-I${KRB5_INC_DIR}" AC_SUBST(KRB5_INC_FLAGS) AC_SUBST(KRB5_LIB_FLAGS) AC_DEFINE(KRB5,,[Use Kerberos 5. (maybe find what needs this and nuke it)]) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${KRB5_LIB_DIR}" else RPATH="${RPATH}:${KRB5_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${KRB5_LIB_DIR}" else RPATH="${RPATH}:${KRB5_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${KRB5_LIB_DIR}" else RPATH="${RPATH}:${KRB5_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${KRB5_LIB_DIR}" else RPATH="${RPATH}:${KRB5_LIB_DIR}" fi else RPATH="${RPATH} -R${KRB5_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/libXau.m40100644004310100000120000000701207741072415016460 0ustar shadowstaffdnl $Id: libXau.m4,v 1.4 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_XAU_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([ #include ], [Xauth foo;], ac_cv_found_Xau_inc=yes, ac_cv_found_Xau_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_XAU_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for Xau headers in $i) CMU_XAU_INC_WHERE1($i) CMU_TEST_INCPATH($i, X11/Xauth) if test "$ac_cv_found_Xau_inc" = "yes"; then ac_cv_Xau_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_XAU_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lXau $LIB_SOCKET" AC_TRY_LINK(, [XauDisposeAuth();], [ac_cv_found_Xau_lib=yes], ac_cv_found_Xau_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_XAU_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for Xau libraries in $i) CMU_XAU_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, Xau) if test "$ac_cv_found_Xau_lib" = "yes" ; then ac_cv_Xau_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_XAU], [ AC_REQUIRE([CMU_SOCKETS]) AC_ARG_WITH(Xau, [ --with-Xau=PREFIX Compile with Xau support], [if test "X$with_Xau" = "X"; then with_Xau=yes fi]) AC_ARG_WITH(Xau-lib, [ --with-Xau-lib=dir use Xau libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-Xau-lib]) fi]) AC_ARG_WITH(Xau-include, [ --with-Xau-include=dir use Xau headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-Xau-include]) fi]) if test "X$with_Xau" != "X"; then if test "$with_Xau" != "yes"; then ac_cv_Xau_where_lib=$with_Xau/lib ac_cv_Xau_where_inc=$with_Xau/include fi fi if test "X$with_Xau_lib" != "X"; then ac_cv_Xau_where_lib=$with_Xau_lib fi if test "X$ac_cv_Xau_where_lib" = "X"; then CMU_XAU_LIB_WHERE(/usr/X11R6/lib /usr/local/lib /usr/openwin/lib) fi if test "X$with_Xau_include" != "X"; then ac_cv_Xau_where_inc=$with_Xau_include fi if test "X$ac_cv_Xau_where_inc" = "X"; then CMU_XAU_INC_WHERE(/usr/X11R6/include /usr/local/include /usr/openwin/include) fi AC_MSG_CHECKING(whether to include Xau) if test "X$ac_cv_Xau_where_lib" = "X" -a "X$ac_cv_Xau_where_inc" = "X"; then ac_cv_found_Xau=no AC_MSG_RESULT(no) else ac_cv_found_Xau=yes AC_MSG_RESULT(yes) XAU_INC_DIR=$ac_cv_Xau_where_inc XAU_LIB_DIR=$ac_cv_Xau_where_lib XAU_INC_FLAGS="-I${XAU_INC_DIR}" XAU_LIB_FLAGS="-L${XAU_LIB_DIR} -lXau" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${XAU_LIB_DIR}" else RPATH="${RPATH}:${XAU_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${XAU_LIB_DIR}" else RPATH="${RPATH}:${XAU_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${XAU_LIB_DIR}" else RPATH="${RPATH}:${XAU_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${XAU_LIB_DIR}" else RPATH="${RPATH}:${XAU_LIB_DIR}" fi else RPATH="${RPATH} -R${XAU_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/libcyrus.m40100644004310100000120000001032107741072415017065 0ustar shadowstaffdnl libcyrus.m4--Cyrus libraries and includes dnl Derrick Brashear dnl from KTH kafs and Arla dnl $Id: libcyrus.m4,v 1.19 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_LIBCYRUS_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1 $SASLFLAGS" CMU_CHECK_HEADER_NOCACHE(cyrus/imclient.h, ac_cv_found_cyrus_inc=yes, ac_cv_found_cyrus_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_LIBCYRUS_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for libcyrus headers in $i) CMU_LIBCYRUS_INC_WHERE1($i) CMU_TEST_INCPATH($i, imclient) if test "$ac_cv_found_cyrus_inc" = "yes"; then ac_cv_cyrus_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBCYRUS_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lcyrus ${LIB_SASL} ${LIBSSL_LIB_FLAGS} ${LIB_SOCKET}" AC_TRY_LINK([void fatal(){}], [imclient_authenticate();], [ac_cv_found_cyrus_lib=yes], ac_cv_found_cyrus_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_LIBCYRUS_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for libcyrus libraries in $i) CMU_LIBCYRUS_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, cyrus) if test "$ac_cv_found_cyrus_lib" = "yes" ; then ac_cv_cyrus_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBCYRUS], [ AC_REQUIRE([CMU_SOCKETS]) AC_REQUIRE([CMU_SASL2]) AC_REQUIRE([CMU_LIBSSL]) AC_ARG_WITH(libcyrus, [ --with-libcyrus=PREFIX Compile with Libcyrus support], [if test "X$with_libcyrus" = "X"; then with_libcyrus=yes fi]) AC_ARG_WITH(libcyrus-lib, [ --with-libcyrus-lib=dir use libcyrus libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libcyrus-lib]) fi]) AC_ARG_WITH(libcyrus-include, [ --with-libcyrus-include=dir use libcyrus headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libcyrus-include]) fi]) if test "X$with_libcyrus" != "X"; then if test "$with_libcyrus" != "yes" -a "$with_libcyrus" != no; then ac_cv_cyrus_where_lib=$with_libcyrus/lib ac_cv_cyrus_where_inc=$with_libcyrus/include fi fi if test "$with_libcyrus" != "no"; then if test "X$with_libcyrus_lib" != "X"; then ac_cv_cyrus_where_lib=$with_libcyrus_lib fi if test "X$ac_cv_cyrus_where_lib" = "X"; then CMU_LIBCYRUS_LIB_WHERE(/usr/cyrus/lib /usr/local/lib /usr/lib) fi if test "X$with_libcyrus_include" != "X"; then ac_cv_cyrus_where_inc=$with_libcyrus_include fi if test "X$ac_cv_cyrus_where_inc" = "X"; then CMU_LIBCYRUS_INC_WHERE(/usr/cyrus/include /usr/local/include /usr/local/include/cyrus /usr/include/cyrus) fi fi AC_MSG_CHECKING(whether to include libcyrus) if test "X$ac_cv_cyrus_where_lib" = "X" -o "X$ac_cv_cyrus_where_inc" = "X"; then ac_cv_found_cyrus=no AC_MSG_RESULT(no) else ac_cv_found_cyrus=yes AC_MSG_RESULT(yes) LIBCYRUS_INC_DIR=$ac_cv_cyrus_where_inc LIBCYRUS_LIB_DIR=$ac_cv_cyrus_where_lib LIBCYRUS_INC_FLAGS="-I${LIBCYRUS_INC_DIR}" LIBCYRUS_LIB_FLAGS="-L${LIBCYRUS_LIB_DIR} -lcyrus" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBCYRUS_LIB_DIR}" else RPATH="${RPATH}:${LIBCYRUS_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${LIBCYRUS_LIB_DIR}" else RPATH="${RPATH}:${LIBCYRUS_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBCYRUS_LIB_DIR}" else RPATH="${RPATH}:${LIBCYRUS_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${LIBCYRUS_LIB_DIR}" else RPATH="${RPATH}:${LIBCYRUS_LIB_DIR}" fi else RPATH="${RPATH} -R${LIBCYRUS_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi AC_SUBST(LIBCYRUS_INC_DIR) AC_SUBST(LIBCYRUS_LIB_DIR) AC_SUBST(LIBCYRUS_INC_FLAGS) AC_SUBST(LIBCYRUS_LIB_FLAGS) ]) cyrus-imspd-v1.8/cmulocal/libloguse.m40100644004310100000120000000457007741072415017227 0ustar shadowstaffdnl libloguse.m4--LOGUSE libraries and includes dnl Derrick Brashear dnl from KTH krb and Arla dnl $Id: libloguse.m4,v 1.5 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_LOGUSE_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lloguse" AC_TRY_LINK(, [loguse("","","");], [ac_cv_found_loguse_lib=yes], ac_cv_found_loguse_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_LOGUSE_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for loguse library in $i) CMU_LOGUSE_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, loguse) if test "$ac_cv_found_loguse_lib" = "yes" ; then ac_cv_loguse_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(no found) fi done ]) AC_DEFUN([CMU_LOGUSE], [ AC_REQUIRE([CMU_SOCKETS]) AC_ARG_WITH(loguse, [ --with-loguse=PREFIX Compile with LOGUSE support], [if test "X$with_loguse" = "X"; then with_loguse=yes fi]) if test "X$with_loguse" != "X"; then if test "$with_loguse" != "yes"; then ac_cv_loguse_where_lib=$with_loguse/lib fi fi if test "X$with_loguse_lib" != "X"; then ac_cv_loguse_where_lib=$with_loguse_lib fi if test "X$ac_cv_loguse_where_lib" = "X"; then CMU_LOGUSE_LIB_WHERE(/usr/lib /usr/local/lib) fi AC_MSG_CHECKING(whether to include loguse) if test "X$ac_cv_loguse_where_lib" = "X"; then ac_cv_found_loguse=no AC_MSG_RESULT(no) else ac_cv_found_loguse=yes AC_DEFINE(HAVE_LOGUSE) AC_MSG_RESULT(yes) LOGUSE_LIB_DIR=$ac_cv_loguse_where_lib LOGUSE_LIB_FLAGS="-L${LOGUSE_LIB_DIR} -lloguse" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LOGUSE_LIB_DIR}" else RPATH="${RPATH}:${LOGUSE_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${LOGUSE_LIB_DIR}" else RPATH="${RPATH}:${LOGUSE_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LOGUSE_LIB_DIR}" else RPATH="${RPATH}:${LOGUSE_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${LOGUSE_LIB_DIR}" else RPATH="${RPATH}:${LOGUSE_LIB_DIR}" fi else RPATH="${RPATH} -R${LOGUSE_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/libnet.m40100644004310100000120000001166607741072415016523 0ustar shadowstaffdnl libnet.m4--libnet and includes dnl Derrick Brashear dnl from KTH krb and Arla dnl $Id: libnet.m4,v 1.7 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_LIBNET_CFG_WHERE1], [ ac_cv_found_libnet_bin=no if test -f "$1/libnet-config" ; then ac_cv_found_libnet_cfg=yes fi ]) AC_DEFUN([CMU_LIBNET_CFG_WHERE], [ for i in $1; do AC_MSG_CHECKING(for libnet config in $i) CMU_LIBNET_CFG_WHERE1($i) if test "$ac_cv_found_libnet_cfg" = "yes"; then ac_cv_libnet_where_cfg=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBNET_INC_WHERE1], [ ac_cv_found_libnet_inc=no if test -f "$1/libnet.h" ; then ac_cv_found_libnet_inc=yes fi ]) AC_DEFUN([CMU_LIBNET_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for libnet header in $i) CMU_LIBNET_INC_WHERE1($i) if test "$ac_cv_found_libnet_inc" = "yes"; then ac_cv_libnet_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBNET_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lnet" AC_TRY_LINK(, [open_link_interface("","");], [ac_cv_found_libnet_lib=yes], AC_TRY_LINK(, [libnet_open_link_interface("","");], [ CMU_LIBNET_CFLAGS_ADD="-DNEW_LIBNET_INTERFACE" ac_cv_found_libnet_lib=yes ], ac_cv_found_libnet_lib=no) ) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_LIBNET_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for libnet library in $i) CMU_LIBNET_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, net) if test "$ac_cv_found_libnet_lib" = "yes" ; then ac_cv_libnet_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBNET], [ AC_ARG_WITH(libnet, [ --with-libnet=PREFIX Compile with LIBNET support], [if test "X$with_libnet" = "X"; then with_libnet=yes fi]) AC_ARG_WITH(libnet-config, [ --with-libnet-config=dir use libnet config program in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libnet-config]) fi]) AC_ARG_WITH(libnet-lib, [ --with-libnet-lib=dir use libnet libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libnet-lib]) fi]) AC_ARG_WITH(libnet-include, [ --with-libnet-include=dir use libnet headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libnet-include]) fi]) if test "X$with_libnet" != "X"; then if test "$with_libnet" != "yes"; then if test -f "$with_libnet/libnet-config"; then ac_cv_libnet_where_cfg=$with_libnet else ac_cv_libnet_where_cfg=$with_libnet/bin fi ac_cv_libnet_where_lib=$with_libnet/lib ac_cv_libnet_where_inc=$with_libnet/include fi fi if test "X$with_libnet_cfg" != "X"; then ac_cv_libnet_where_cfg=$with_libnet_cfg fi if test "X$ac_cv_libnet_where_cfg" = "X"; then CMU_LIBNET_CFG_WHERE(/usr/ng/bin /usr/bin /usr/local/bin) fi if test "X$with_libnet_lib" != "X"; then ac_cv_libnet_where_lib=$with_libnet_lib fi if test "X$ac_cv_libnet_where_lib" = "X"; then CMU_LIBNET_LIB_WHERE(/usr/ng/lib /usr/lib /usr/local/lib) fi if test "X$with_libnet_include" != "X"; then ac_cv_libnet_where_inc=$with_libnet_include fi if test "X$ac_cv_libnet_where_inc" = "X"; then CMU_LIBNET_INC_WHERE(/usr/ng/include /usr/include /usr/local/include) fi AC_MSG_CHECKING(whether to include libnet) if test "X$ac_cv_libnet_where_lib" = "X" -o "X$ac_cv_libnet_where_inc" = "X" -o "X$ac_cv_libnet_where_cfg" = "X"; then ac_cv_found_libnet=no AC_MSG_RESULT(no) else ac_cv_found_libnet=yes AC_MSG_RESULT(yes) LIBNET_CONFIG=$ac_cv_libnet_where_cfg/libnet-config LIBNET_INC_DIR=$ac_cv_libnet_where_inc LIBNET_LIB_DIR=$ac_cv_libnet_where_lib LIBNET_CFLAGS="`$LIBNET_CONFIG --cflags` ${CMU_LIBNET_CFLAGS_ADD}" LIBNET_DEF_FLAGS="`$LIBNET_CONFIG --defines`" LIBNET_INC_FLAGS="-I${LIBNET_INC_DIR}" LIBNET_LIB_FLAGS="-L${LIBNET_LIB_DIR} `${LIBNET_CONFIG} --libs`" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBNET_LIB_DIR}" else RPATH="${RPATH}:${LIBNET_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${LIBNET_LIB_DIR}" else RPATH="${RPATH}:${LIBNET_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBNET_LIB_DIR}" else RPATH="${RPATH}:${LIBNET_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${LIBNET_LIB_DIR}" else RPATH="${RPATH}:${LIBNET_LIB_DIR}" fi else RPATH="${RPATH} -R${LIBNET_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/libpcap.m40100644004310100000120000000664107741072415016655 0ustar shadowstaffdnl libpcap.m4--PCAP libraries and includes dnl Derrick Brashear dnl from KTH krb and Arla dnl $Id: libpcap.m4,v 1.8 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_PCAP_INC_WHERE1], [ ac_cv_found_pcap_inc=no if test -f "$1/pcap.h" ; then ac_cv_found_pcap_inc=yes fi ]) AC_DEFUN([CMU_PCAP_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for pcap header in $i) CMU_PCAP_INC_WHERE1($i) if test "$ac_cv_found_pcap_inc" = "yes"; then ac_cv_pcap_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(no found) fi done ]) AC_DEFUN([CMU_PCAP_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lpcap" AC_TRY_LINK(, [pcap_lookupdev("");], [ac_cv_found_pcap_lib=yes], ac_cv_found_pcap_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_PCAP_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for pcap library in $i) CMU_PCAP_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, pcap) if test "$ac_cv_found_pcap_lib" = "yes" ; then ac_cv_pcap_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(no found) fi done ]) AC_DEFUN([CMU_PCAP], [ AC_ARG_WITH(pcap, [ --with-pcap=PREFIX Compile with PCAP support], [if test "X$with_pcap" = "X"; then with_pcap=yes fi]) AC_ARG_WITH(pcap-lib, [ --with-pcap-lib=dir use pcap libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-pcap-lib]) fi]) AC_ARG_WITH(pcap-include, [ --with-pcap-include=dir use pcap headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-pcap-include]) fi]) if test "X$with_pcap" != "X"; then if test "$with_pcap" != "yes"; then ac_cv_pcap_where_lib=$with_pcap/lib ac_cv_pcap_where_inc=$with_pcap/include fi fi if test "X$with_pcap_lib" != "X"; then ac_cv_pcap_where_lib=$with_pcap_lib fi if test "X$ac_cv_pcap_where_lib" = "X"; then CMU_PCAP_LIB_WHERE(/usr/ng/lib /usr/lib /usr/local/lib) fi if test "X$with_pcap_include" != "X"; then ac_cv_pcap_where_inc=$with_pcap_include fi if test "X$ac_cv_pcap_where_inc" = "X"; then CMU_PCAP_INC_WHERE(/usr/ng/include /usr/include /usr/local/include) fi AC_MSG_CHECKING(whether to include pcap) if test "X$ac_cv_pcap_where_lib" = "X" -a "X$ac_cv_pcap_where_inc" = "X"; then ac_cv_found_pcap=no AC_MSG_RESULT(no) else ac_cv_found_pcap=yes AC_MSG_RESULT(yes) PCAP_INC_DIR=$ac_cv_pcap_where_inc PCAP_LIB_DIR=$ac_cv_pcap_where_lib PCAP_INC_FLAGS="-I${PCAP_INC_DIR}" PCAP_LIB_FLAGS="-L${PCAP_LIB_DIR} -lpcap" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${PCAP_LIB_DIR}" else RPATH="${RPATH}:${PCAP_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${PCAP_LIB_DIR}" else RPATH="${RPATH}:${PCAP_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${PCAP_LIB_DIR}" else RPATH="${RPATH}:${PCAP_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${PCAP_LIB_DIR}" else RPATH="${RPATH}:${PCAP_LIB_DIR}" fi else RPATH="${RPATH} -R${PCAP_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/librestrict.m40100644004310100000120000000467207741072415017573 0ustar shadowstaffdnl librestrict.m4--restrict libraries and includes dnl Derrick Brashear dnl from KTH krb and Arla dnl $Id: librestrict.m4,v 1.4 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_RESTRICT_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lrestrict" AC_TRY_LINK(, [ConsoleInUse();], [ac_cv_found_restrict_lib=yes], ac_cv_found_restrict_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_RESTRICT_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for restrict library in $i) CMU_RESTRICT_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, restrict) if test "$ac_cv_found_restrict_lib" = "yes" ; then ac_cv_restrict_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(no found) fi done ]) AC_DEFUN([CMU_RESTRICT], [ AC_ARG_WITH(restrict, [ --with-restrict=PREFIX Compile with RESTRICT support], [if test "X$with_restrict" = "X"; then with_restrict=yes fi]) if test "X$with_restrict" != "X"; then if test "$with_restrict" != "yes"; then ac_cv_restrict_where_lib=$with_restrict/lib fi fi if test "X$with_restrict_lib" != "X"; then ac_cv_restrict_where_lib=$with_restrict_lib fi if test "X$ac_cv_restrict_where_lib" = "X"; then CMU_RESTRICT_LIB_WHERE(/usr/lib /usr/local/lib) fi AC_MSG_CHECKING(whether to include restrict) if test "X$ac_cv_restrict_where_lib" = "X"; then ac_cv_found_restrict=no AC_MSG_RESULT(no) else ac_cv_found_restrict=yes AC_DEFINE(HAVE_RESTRICT) AC_MSG_RESULT(yes) RESTRICT_LIB_DIR=$ac_cv_restrict_where_lib RESTRICT_LIB_FLAGS="-L${RESTRICT_LIB_DIR} -lrestrict" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${RESTRICT_LIB_DIR}" else RPATH="${RPATH}:${RESTRICT_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${RESTRICT_LIB_DIR}" else RPATH="${RPATH}:${RESTRICT_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${RESTRICT_LIB_DIR}" else RPATH="${RPATH}:${RESTRICT_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${RESTRICT_LIB_DIR}" else RPATH="${RPATH}:${RESTRICT_LIB_DIR}" fi else RPATH="${RPATH} -R${RESTRICT_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/libssl.m40100644004310100000120000000773307741072415016536 0ustar shadowstaffdnl libssl.m4--Ssl libraries and includes dnl Derrick Brashear dnl from KTH kafs and Arla dnl $Id: libssl.m4,v 1.9 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_LIBSSL_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" CMU_CHECK_HEADER_NOCACHE(openssl/ssl.h, ac_cv_found_libssl_inc=yes, ac_cv_found_libssl_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_LIBSSL_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for libssl headers in $i) CMU_LIBSSL_INC_WHERE1($i) CMU_TEST_INCPATH($i, ssl) if test "$ac_cv_found_libssl_inc" = "yes"; then ac_cv_libssl_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBSSL_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lssl -lcrypto $LIB_SOCKET" AC_TRY_LINK(, [SSL_write();], [ac_cv_found_ssl_lib=yes], ac_cv_found_ssl_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_LIBSSL_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for libssl libraries in $i) CMU_LIBSSL_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, ssl) if test "$ac_cv_found_ssl_lib" = "yes" ; then ac_cv_libssl_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_LIBSSL], [ AC_REQUIRE([CMU_SOCKETS]) AC_ARG_WITH(libssl, [ --with-libssl=PREFIX Compile with Libssl support], [if test "X$with_libssl" = "X"; then with_libssl=yes fi]) AC_ARG_WITH(libssl-lib, [ --with-libssl-lib=dir use libssl libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libssl-lib]) fi]) AC_ARG_WITH(libssl-include, [ --with-libssl-include=dir use libssl headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-libssl-include]) fi]) if test "X$with_libssl" != "X"; then if test "$with_libssl" != "yes" -a "$with_libssl" != no; then ac_cv_libssl_where_lib=$with_libssl/lib ac_cv_libssl_where_inc=$with_libssl/include fi fi if test "$with_libssl" != "no"; then if test "X$with_libssl_lib" != "X"; then ac_cv_libssl_where_lib=$with_libssl_lib fi if test "X$ac_cv_libssl_where_lib" = "X"; then CMU_LIBSSL_LIB_WHERE(/usr/local/lib/openssl /usr/lib/openssl /usr/local/lib /usr/lib) fi if test "X$with_libssl_include" != "X"; then ac_cv_libssl_where_inc=$with_libssl_include fi if test "X$ac_cv_libssl_where_inc" = "X"; then CMU_LIBSSL_INC_WHERE(/usr/local/include /usr/include) fi fi AC_MSG_CHECKING(whether to include libssl) if test "X$ac_cv_libssl_where_lib" = "X" -a "X$ac_cv_libssl_where_inc" = "X"; then ac_cv_found_libssl=no AC_MSG_RESULT(no) else ac_cv_found_libssl=yes AC_MSG_RESULT(yes) LIBSSL_INC_DIR=$ac_cv_libssl_where_inc LIBSSL_LIB_DIR=$ac_cv_libssl_where_lib LIBSSL_INC_FLAGS="-I${LIBSSL_INC_DIR}" LIBSSL_LIB_FLAGS="-L${LIBSSL_LIB_DIR} -lssl -lcrypto" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBSSL_LIB_DIR}" else RPATH="${RPATH}:${LIBSSL_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${LIBSSL_LIB_DIR}" else RPATH="${RPATH}:${LIBSSL_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${LIBSSL_LIB_DIR}" else RPATH="${RPATH}:${LIBSSL_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${LIBSSL_LIB_DIR}" else RPATH="${RPATH}:${LIBSSL_LIB_DIR}" fi else RPATH="${RPATH} -R${LIBSSL_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi AC_SUBST(LIBSSL_INC_DIR) AC_SUBST(LIBSSL_LIB_DIR) AC_SUBST(LIBSSL_INC_FLAGS) AC_SUBST(LIBSSL_LIB_FLAGS) ]) cyrus-imspd-v1.8/cmulocal/libtoolhack.m40100644004310100000120000000146407741072415017534 0ustar shadowstaffdnl libtoolhack.m4--hack to make libtool behave better dnl Rob Earhart dnl $Id: libtoolhack.m4,v 1.4 2003/10/08 20:35:25 rjs3 Exp $ dnl Libtool tries to compile an empty file to see whether it can build dnl shared libraries, and treats *any* warning as a problem. dnl Solaris's and HP's cc complains about the empty file. So we hack dnl the CFLAGS to make cc not complain. AC_DEFUN([CMU_PROG_LIBTOOL], [ AC_REQUIRE([AC_PROG_CC]) if test "$ac_cv_prog_gcc" = no; then case "$host_os" in solaris2*) save_cflags="${CFLAGS}" CFLAGS="-erroff=E_EMPTY_TRANSLATION_UNIT ${CFLAGS}" ;; hpux*) save_cflags="${CFLAGS}" CFLAGS="-w" ;; esac fi AC_PROG_LIBTOOL if test "$ac_cv_prog_gcc" = no; then case "$host_os" in solaris2*|hpux*) CFLAGS="${save_cflags}" esac fi ]) cyrus-imspd-v1.8/cmulocal/libwrap.m40100644004310100000120000000174607745550532016711 0ustar shadowstaffdnl libwrap.m4 --- do we have libwrap, the access control library? dnl $Id: libwrap.m4,v 1.9 2003/10/22 18:50:02 rjs3 Exp $ AC_DEFUN([CMU_LIBWRAP], [ AC_REQUIRE([CMU_SOCKETS]) AC_ARG_WITH(libwrap, [ --with-libwrap=DIR use libwrap (rooted in DIR) [yes] ], with_libwrap=$withval, with_libwrap=yes) if test "$with_libwrap" != no; then if test -d "$with_libwrap"; then CPPFLAGS="$CPPFLAGS -I${with_libwrap}/include" LDFLAGS="$LDFLAGS -L${with_libwrap}/lib" fi cmu_save_LIBS="$LIBS" AC_CHECK_LIB(wrap, request_init, [ AC_CHECK_HEADER(tcpd.h,, with_libwrap=no)], with_libwrap=no, ${LIB_SOCKET}) LIBS="$cmu_save_LIBS" fi AC_MSG_CHECKING(libwrap support) AC_MSG_RESULT($with_libwrap) LIB_WRAP="" if test "$with_libwrap" != no; then AC_DEFINE(HAVE_LIBWRAP,[],[Do we have TCP wrappers?]) LIB_WRAP="-lwrap" AC_CHECK_LIB(nsl, yp_get_default_domain, LIB_WRAP="${LIB_WRAP} -lnsl") fi AC_SUBST(LIB_WRAP) ]) cyrus-imspd-v1.8/cmulocal/mips-abi.m40100644004310100000120000000517507741072415016745 0ustar shadowstaffdnl mips-abi.m4--Check for MIPS/IRIX ABI flags. Sets $abi and $abilibdirext dnl to some value dnl Derrick Brashear dnl from KTH krb (from CMU) dnl $Id: mips-abi.m4,v 1.5 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([AC_MIPS_ABI], [ AC_ARG_WITH(mips_abi, [ --with-mips-abi=abi ABI to use for IRIX (32, n32, or 64)]) case "$host_os" in irix*) with_mips_abi="${with_mips_abi:-yes}" if test -n "$GCC"; then # GCC < 2.8 only supports the O32 ABI. GCC >= 2.8 has a flag to select # which ABI to use, but only supports (as of 2.8.1) the N32 and 64 ABIs. # # Default to N32, but if GCC doesn't grok -mabi=n32, we assume an old # GCC and revert back to O32. The same goes if O32 is asked for - old # GCCs doesn't like the -mabi option, and new GCCs can't output O32. # # Don't you just love *all* the different SGI ABIs? case "${with_mips_abi}" in 32|o32) abi='-mabi=32'; abilibdirext='' ;; n32|yes) abi='-mabi=n32'; abilibdirext='32' ;; 64) abi='-mabi=64'; abilibdirext='64' ;; no) abi=''; abilibdirext='';; *) AC_ERROR("Invalid ABI specified") ;; esac if test -n "$abi" ; then ac_foo=krb_cv_gcc_`echo $abi | tr =- __` dnl dnl can't use AC_CACHE_CHECK here, since it doesn't quote CACHE-ID to dnl AC_MSG_RESULT dnl AC_MSG_CHECKING([if $CC supports the $abi option]) AC_CACHE_VAL($ac_foo, [ save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $abi" AC_TRY_COMPILE(,int x;, eval $ac_foo=yes, eval $ac_foo=no) CFLAGS="$save_CFLAGS" ]) ac_res=`eval echo \\\$$ac_foo` AC_MSG_RESULT($ac_res) if test $ac_res = no; then # Try to figure out why that failed... case $abi in -mabi=32) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -mabi=n32" AC_TRY_COMPILE(,int x;, ac_res=yes, ac_res=no) CLAGS="$save_CFLAGS" if test $ac_res = yes; then # New GCC AC_ERROR([$CC does not support the $with_mips_abi ABI]) fi # Old GCC abi='' abilibdirext='' ;; -mabi=n32|-mabi=64) if test $with_mips_abi = yes; then # Old GCC, default to O32 abi='' abilibdirext='' else # Some broken GCC AC_ERROR([$CC does not support the $with_mips_abi ABI]) fi ;; esac fi #if test $ac_res = no; then fi #if test -n "$abi" ; then else case "${with_mips_abi}" in 32|o32) abi='-32'; abilibdirext='' ;; n32|yes) abi='-n32'; abilibdirext='32' ;; 64) abi='-64'; abilibdirext='64' ;; no) abi=''; abilibdirext='';; *) AC_ERROR("Invalid ABI specified") ;; esac fi #if test -n "$GCC"; then ;; esac dnl And then we munge variables to make things work CFLAGS="${CFLAGS} $abi" libdir=`echo $libdir | sed 's,/*$,$abilibdirext,'` LDFLAGS=`echo $LDFLAGS | sed -e "s,/lib$,/lib$abilibdirext," -e "s,\\\(/lib[^a-zA-Z]\\\),\\\1$abilibdirext,g"` ]) cyrus-imspd-v1.8/cmulocal/nadine.m40100644004310100000120000001057107741072415016476 0ustar shadowstaffdnl nadine.m4--The nadine event library dnl Derrick Brashear dnl from KTH kafs and Arla dnl $Id: nadine.m4,v 1.6 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_NADINE_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" CMU_CHECK_HEADER_NOCACHE(libevent/libevent.h, ac_cv_found_event_inc=yes, ac_cv_found_event_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_NADINE_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for nadine headers in $i) CMU_NADINE_INC_WHERE1($i) dnl CMU_TEST_INCPATH($i, ssl) dnl CMU_TEST_INCPATH isn't very versatile if test "$ac_cv_found_event_inc" = "yes"; then if test \! -f $i/libevent/libevent.h ; then ac_cv_found_event_inc=no fi fi if test "$ac_cv_found_event_inc" = "yes"; then ac_cv_event_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_NADINE_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -levent" AC_TRY_LINK(, [libevent_Initialize();], [ac_cv_found_event_lib=yes], ac_cv_found_event_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_NADINE_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for event libraries in $i) CMU_NADINE_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, event) if test "$ac_cv_found_event_lib" = "yes" ; then ac_cv_event_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_NADINE], [ AC_REQUIRE([CMU_SOCKETS]) AC_ARG_WITH(nadine, [ --with-nadine=PREFIX Compile with nadine libevent support], [if test "X$with_nadine" = "X"; then with_nadine=yes fi]) AC_ARG_WITH(nadine-lib, [ --with-nadine-lib=dir use nadine libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-nadine-lib]) fi]) AC_ARG_WITH(nadine-include, [ --with-nadine-include=dir use nadine headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-nadine-include]) fi]) if test "$with_ucdsnmp" = "no" ; then AC_MSG_WARN([Nadine requires UCD SNMP. Disabling Nadine support]) with_nadine=no with_nadine_lib=no with_nadine_include=no fi if test "X$with_nadine" != "X"; then if test "$with_nadine" != "yes" -a "$with_nadine" != no; then ac_cv_event_where_lib=$with_nadine/lib ac_cv_event_where_inc=$with_nadine/include fi fi if test "$with_nadine" != "no"; then if test "X$with_nadine_lib" != "X"; then ac_cv_event_where_lib=$with_nadine_lib fi if test "X$ac_cv_event_where_lib" = "X"; then CMU_NADINE_LIB_WHERE(/usr/local/lib /usr/ng/lib /usr/lib) fi if test "X$with_nadine_include" != "X"; then ac_cv_event_where_inc=$with_nadine_include fi if test "X$ac_cv_event_where_inc" = "X"; then CMU_NADINE_INC_WHERE(/usr/local/include /usr/ng/include /usr/include) fi fi AC_MSG_CHECKING(whether to include nadine) if test "X$ac_cv_event_where_lib" = "X" -a "X$ac_cv_event_where_inc" = "X"; then ac_cv_found_event=no AC_MSG_RESULT(no) else ac_cv_found_event=yes AC_MSG_RESULT(yes) NADINE_INC_DIR=$ac_cv_event_where_inc NADINE_LIB_DIR=$ac_cv_event_where_lib NADINE_INC_FLAGS="-I${NADINE_INC_DIR}" NADINE_LIB_FLAGS="-L${NADINE_LIB_DIR} -levent" if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${NADINE_LIB_DIR}" else RPATH="${RPATH}:${NADINE_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${NADINE_LIB_DIR}" else RPATH="${RPATH}:${NADINE_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${NADINE_LIB_DIR}" else RPATH="${RPATH}:${NADINE_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${NADINE_LIB_DIR}" else RPATH="${RPATH}:${NADINE_LIB_DIR}" fi else RPATH="${RPATH} -R${NADINE_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi AC_SUBST(NADINE_INC_DIR) AC_SUBST(NADINE_LIB_DIR) AC_SUBST(NADINE_INC_FLAGS) AC_SUBST(NADINE_LIB_FLAGS) ]) cyrus-imspd-v1.8/cmulocal/nana.m40100644004310100000120000000126007741072415016150 0ustar shadowstaffdnl nana.m4--nana macro dnl Rob Earhart dnl $Id: nana.m4,v 1.5 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_NANA], [ AC_REQUIRE([AC_PROG_CC]) AC_ARG_WITH(nana, [[ --with-nana use NANA [yes] ]],,with_nana=yes) if test "$GCC" != yes; then with_nana=no elif test "$with_nana" = yes; then AC_CHECK_PROGS(NANA, nana, :) if test "$NANA" = ":"; then with_nana=no else AC_CHECK_HEADER(nana.h, AC_CHECK_LIB(nana, nana_error,,with_nana=no), with_nana=no) fi else with_nana=no fi AC_MSG_CHECKING([whether to use NANA]) AC_MSG_RESULT($with_nana) if test "$with_nana" != yes; then AC_DEFINE(WITHOUT_NANA) fi ]) cyrus-imspd-v1.8/cmulocal/openssl.m40100644004310100000120000000213707774306776016742 0ustar shadowstaffdnl dnl macros for configure.in to detect openssl dnl $Id: openssl.m4,v 1.9 2003/12/30 14:38:54 rjs3 Exp $ dnl AC_DEFUN([CMU_HAVE_OPENSSL], [ AC_ARG_WITH(openssl,[ --with-openssl=PATH use OpenSSL from PATH], with_openssl=$withval, with_openssl="yes") save_CPPFLAGS=$CPPFLAGS save_LDFLAGS=$LDFLAGS if test -d $with_openssl; then CPPFLAGS="${CPPFLAGS} -I${with_openssl}/include" CMU_ADD_LIBPATH(${with_openssl}/lib) fi case "$with_openssl" in no) with_openssl="no";; *) dnl if openssl has been compiled with the rsaref2 libraries, dnl we need to include the rsaref libraries in the crypto check LIB_RSAREF="" AC_CHECK_LIB(rsaref, RSAPublicEncrypt, LIB_RSAREF="-lRSAglue -lrsaref"; cmu_have_rsaref=yes, cmu_have_rsaref=no) AC_CHECK_HEADER(openssl/evp.h, [ AC_CHECK_LIB(crypto, EVP_DigestInit, with_openssl="yes", with_openssl="no", $LIB_RSAREF)], with_openssl=no) ;; esac if test "$with_openssl" != "no"; then AC_DEFINE(HAVE_OPENSSL,[],[Do we have OpenSSL?]) else CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS fi ]) cyrus-imspd-v1.8/cmulocal/pthreads.m40100644004310100000120000000115707741072415017052 0ustar shadowstaffdnl pthreads.m4--pthreads setup macro dnl Rob Earhart dnl $Id: pthreads.m4,v 1.11 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_PTHREADS], [ AC_REQUIRE([AC_CANONICAL_HOST]) cmu_save_LIBS="$LIBS" AC_CHECK_LIB(pthread, pthread_create,LIB_PTHREAD="-lpthread", AC_CHECK_LIB(c_r, pthread_create,LIB_PTHREAD="-lc_r", AC_ERROR([Can't compile without pthreads]))) LIBS="$cmu_save_LIBS" AC_SUBST(LIB_PTHREAD) AC_DEFINE(_REENTRANT) case "$host_os" in solaris2*) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) AC_DEFINE(__EXTENSIONS__) ;; irix6*) AC_DEFINE(_SGI_REENTRANT_FUNCTIONS) ;; esac ]) cyrus-imspd-v1.8/cmulocal/sasl.m40100644004310100000120000000437007741072415016202 0ustar shadowstaffdnl sasl.m4--sasl libraries and includes dnl Derrick Brashear dnl from KTH sasl and Arla dnl $Id: sasl.m4,v 1.22 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_SASL_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" CMU_CHECK_HEADER_NOCACHE(sasl.h, ac_cv_found_sasl_inc=yes, ac_cv_found_sasl_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_SASL_INC_WHERE], [ for i in $1; do CMU_SASL_INC_WHERE1($i) CMU_TEST_INCPATH($i, sasl) if test "$ac_cv_found_sasl_inc" = "yes"; then ac_cv_sasl_where_inc=$i break fi done ]) AC_DEFUN([CMU_SASL_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lsasl" AC_TRY_LINK(, [sasl_getprop();], [ac_cv_found_sasl_lib=yes], ac_cv_found_sasl_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_SASL_LIB_WHERE], [ for i in $1; do CMU_SASL_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, sasl) if test "$ac_cv_found_sasl_lib" = "yes" ; then ac_cv_sasl_where_lib=$i break fi done ]) AC_DEFUN([CMU_SASL], [ AC_ARG_WITH(sasl, [ --with-sasl=DIR Compile with libsasl in ], with_sasl="$withval", with_sasl="yes") SASLFLAGS="" LIB_SASL="" cmu_saved_CPPFLAGS=$CPPFLAGS cmu_saved_LDFLAGS=$LDFLAGS cmu_saved_LIBS=$LIBS if test -d ${with_sasl}; then ac_cv_sasl_where_lib=${with_sasl}/lib ac_cv_sasl_where_inc=${with_sasl}/include SASLFLAGS="-I$ac_cv_sasl_where_inc" LIB_SASL="-L$ac_cv_sasl_where_lib" CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}" LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}" fi AC_CHECK_HEADER(sasl.h, AC_CHECK_LIB(sasl, sasl_getprop, ac_cv_found_sasl=yes, ac_cv_found_sasl=no), ac_cv_found_sasl=no) LIBS="$cmu_saved_LIBS" LDFLAGS="$cmu_saved_LDFLAGS" CPPFLAGS="$cmu_saved_CPPFLAGS" if test "$ac_cv_found_sasl" = yes; then LIB_SASL="$LIB_SASL -lsasl" else LIB_SASL="" SASLFLAGS="" fi AC_SUBST(LIB_SASL) AC_SUBST(SASLFLAGS) ]) AC_DEFUN([CMU_SASL_REQUIRED], [AC_REQUIRE([CMU_SASL]) if test "$ac_cv_found_sasl" != "yes"; then AC_ERROR([Cannot continue without libsasl. Get it from ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/.]) fi]) cyrus-imspd-v1.8/cmulocal/sasl2.m40100644004310100000120000003413510121405732016252 0ustar shadowstaffdnl sasl2.m4--sasl2 libraries and includes dnl Rob Siemborski dnl $Id: sasl2.m4,v 1.48 2004/09/13 21:06:34 shadow Exp $ AC_DEFUN([SASL_GSSAPI_CHK],[ AC_ARG_ENABLE(gssapi, [ --enable-gssapi= enable GSSAPI authentication [yes] ], gssapi=$enableval, gssapi=yes) AC_ARG_WITH(gss_impl, [ --with-gss_impl={heimdal|mit|cybersafe|seam|auto} choose specific GSSAPI implementation [[auto]] ], gss_impl=$withval, gss_impl=auto) AC_REQUIRE([SASL2_CRYPT_CHK]) AC_REQUIRE([CMU_SOCKETS]) if test "$gssapi" != no; then platform= case "${host}" in *-*-linux*) platform=__linux ;; *-*-hpux*) platform=__hpux ;; *-*-irix*) platform=__irix ;; *-*-solaris2*) # When should we use __sunos? platform=__solaris ;; *-*-aix*) ###_AIX platform=__aix ;; *) AC_WARN([The system type is not recognized. If you believe that CyberSafe GSSAPI works on this platform, please update the configure script]) if test "$gss_impl" = "cybersafe"; then AC_ERROR([CyberSafe was forced, cannot continue as platform is not supported]) fi ;; esac cmu_saved_CPPFLAGS=$CPPFLAGS if test -d ${gssapi}; then CPPFLAGS="$CPPFLAGS -I$gssapi/include" # We want to keep -I in our CPPFLAGS, but only if we succeed cmu_saved_CPPFLAGS=$CPPFLAGS ### I am not sure how useful is this (and whether this is required at all ### especially when we have to provide two -L flags for new CyberSafe LDFLAGS="$LDFLAGS -L$gssapi/lib" if test -n "$platform"; then if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then CPPFLAGS="$CPPFLAGS -D$platform" if test -d "${gssapi}/appsec-sdk/include"; then CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include" fi fi fi fi AC_CHECK_HEADER(gssapi.h, AC_DEFINE(HAVE_GSSAPI_H,,[Define if you have the gssapi.h header file]), [ AC_CHECK_HEADER(gssapi/gssapi.h,, AC_WARN(Disabling GSSAPI - no include files found); gssapi=no)]) CPPFLAGS=$cmu_saved_CPPFLAGS fi if test "$gssapi" != no; then dnl We need to find out which gssapi implementation we are dnl using. Supported alternatives are: MIT Kerberos 5, dnl Heimdal Kerberos 5 (http://www.pdc.kth.se/heimdal), dnl CyberSafe Kerberos 5 (http://www.cybersafe.com/) dnl and Sun SEAM (http://wwws.sun.com/software/security/kerberos/) dnl dnl The choice is reflected in GSSAPIBASE_LIBS AC_CHECK_LIB(resolv,res_search) if test -d ${gssapi}; then gssapi_dir="${gssapi}/lib" GSSAPIBASE_LIBS="-L$gssapi_dir" GSSAPIBASE_STATIC_LIBS="-L$gssapi_dir" else dnl FIXME: This is only used for building cyrus, and then only as dnl a real hack. it needs to be fixed. gssapi_dir="/usr/local/lib" fi # Check a full link against the Heimdal libraries. # If this fails, check a full link against the MIT libraries. # If this fails, check a full link against the CyberSafe libraries. # If this fails, check a full link against the Solaris 8 and up libgss. if test "$gss_impl" = "auto" -o "$gss_impl" = "heimdal"; then gss_failed=0 AC_CHECK_LIB(gssapi,gss_unwrap,gss_impl="heimdal",gss_failed=1,$GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err ${LIB_SOCKET}) if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi if test "$gss_impl" = "auto" -o "$gss_impl" = "mit"; then gss_failed=0 AC_CHECK_LIB(gssapi_krb5,gss_unwrap,gss_impl="mit",gss_failed=1,$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err ${LIB_SOCKET}) if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi # For Cybersafe one has to set a platform define in order to make compilation work if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then cmu_saved_CPPFLAGS=$CPPFLAGS cmu_saved_GSSAPIBASE_LIBS=$GSSAPIBASE_LIBS # FIX ME - Note that the libraries are in .../lib/64 for 64bit kernels if test -d "${gssapi}/appsec-rt/lib"; then GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -L${gssapi}/appsec-rt/lib" fi CPPFLAGS="$CPPFLAGS -D$platform" if test -d "${gssapi}/appsec-sdk/include"; then CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include" fi gss_failed=0 # Check for CyberSafe with two libraries first, than fall back to a single # library (older CyberSafe) unset ac_cv_lib_gss_csf_gss_acq_user AC_CHECK_LIB(gss,csf_gss_acq_user,gss_impl="cybersafe03",[ unset ac_cv_lib_gss_csf_gss_acq_user;AC_CHECK_LIB(gss,csf_gss_acq_user,gss_impl="cybersafe",gss_failed=1,$GSSAPIBASE_LIBS -lgss)],$GSSAPIBASE_LIBS -lgss -lcstbk5) if test "$gss_failed" = "1"; then # Restore variables GSSAPIBASE_LIBS=$cmu_saved_GSSAPIBASE_LIBS CPPFLAGS=$cmu_saved_CPPFLAGS if test "$gss_impl" != "auto"; then gss_impl="failed" fi fi fi if test "$gss_impl" = "auto" -o "$gss_impl" = "seam"; then gss_failed=0 AC_CHECK_LIB(gss,gss_unwrap,gss_impl="seam",gss_failed=1,-lgss) if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then gss_impl="failed" fi fi if test "$gss_impl" = "mit"; then GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_LIBS $gssapi_dir/libgssapi_krb5.a $gssapi_dir/libkrb5.a $gssapi_dir/libk5crypto.a $gssapi_dir/libcom_err.a" elif test "$gss_impl" = "heimdal"; then CPPFLAGS="$CPPFLAGS -DKRB5_HEIMDAL" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err" GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_STATIC_LIBS $gssapi_dir/libgssapi.a $gssapi_dir/libkrb5.a $gssapi_dir/libasn1.a $gssapi_dir/libroken.a $gssapi_dir/libcom_err.a ${LIB_CRYPT}" elif test "$gss_impl" = "cybersafe03"; then # Version of CyberSafe with two libraries CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss -lcstbk5" # there is no static libgss for CyberSafe GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "cybersafe"; then CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include" GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss" # there is no static libgss for CyberSafe GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "seam"; then GSSAPIBASE_LIBS=-lgss # there is no static libgss on Solaris 8 and up GSSAPIBASE_STATIC_LIBS=none elif test "$gss_impl" = "failed"; then gssapi="no" GSSAPIBASE_LIBS= GSSAPIBASE_STATIC_LIBS= AC_WARN(Disabling GSSAPI - specified library not found) else gssapi="no" GSSAPIBASE_LIBS= GSSAPIBASE_STATIC_LIBS= AC_WARN(Disabling GSSAPI - no library) fi fi # # Cybersafe defines both GSS_C_NT_HOSTBASED_SERVICE and GSS_C_NT_USER_NAME in gssapi\rfckrb5.h # if test "$gssapi" != "no"; then if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then AC_EGREP_CPP(hostbased_service_gss_nt_yes, [#include #ifdef GSS_C_NT_HOSTBASED_SERVICE hostbased_service_gss_nt_yes #endif ], AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,[Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE]), AC_WARN(Cybersafe define not found)) elif test "$ac_cv_header_gssapi_h" = "yes"; then AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,[Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE])) elif test "$ac_cv_header_gssapi_gssapi_h"; then AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi/gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,[Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE])) fi if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then AC_EGREP_CPP(user_name_yes_gss_nt, [#include #ifdef GSS_C_NT_USER_NAME user_name_yes_gss_nt #endif ], AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,[Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME]), AC_WARN(Cybersafe define not found)) elif test "$ac_cv_header_gssapi_h" = "yes"; then AC_EGREP_HEADER(GSS_C_NT_USER_NAME, gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,[Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME])) elif test "$ac_cv_header_gssapi_gssapi_h"; then AC_EGREP_HEADER(GSS_C_NT_USER_NAME, gssapi/gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,[Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME])) fi fi GSSAPI_LIBS="" AC_MSG_CHECKING(GSSAPI) if test "$gssapi" != no; then AC_MSG_RESULT(with implementation ${gss_impl}) AC_CHECK_LIB(resolv,res_search,GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lresolv") SASL_MECHS="$SASL_MECHS libgssapiv2.la" SASL_STATIC_OBJS="$SASL_STATIC_OBJS ../plugins/gssapi.o" cmu_save_LIBS="$LIBS" LIBS="$LIBS $GSSAPIBASE_LIBS" AC_CHECK_FUNCS(gsskrb5_register_acceptor_identity) LIBS="$cmu_save_LIBS" else AC_MSG_RESULT(disabled) fi AC_SUBST(GSSAPI_LIBS) AC_SUBST(GSSAPIBASE_LIBS) ]) AC_DEFUN([SASL_SET_GSSAPI_LIBS], [ SASL_GSSAPI_LIBS_SET="yes" ]) dnl What we want to do here is setup LIB_SASL with what one would dnl generally want to have (e.g. if static is requested, make it that, dnl otherwise make it dynamic. dnl We also want to create LIB_DYN_SASL and DYNSASLFLAGS. dnl Also sets using_static_sasl to "no" "static" or "staticonly" AC_DEFUN([CMU_SASL2], [ AC_REQUIRE([SASL_GSSAPI_CHK]) AC_ARG_WITH(sasl, [ --with-sasl=DIR Compile with libsasl2 in ], with_sasl="$withval", with_sasl="yes") AC_ARG_WITH(staticsasl, [ --with-staticsasl=DIR Compile with staticly linked libsasl2 in ], with_staticsasl="$withval"; if test $with_staticsasl != "no"; then using_static_sasl="static" fi, with_staticsasl="no"; using_static_sasl="no") SASLFLAGS="" LIB_SASL="" cmu_saved_CPPFLAGS=$CPPFLAGS cmu_saved_LDFLAGS=$LDFLAGS cmu_saved_LIBS=$LIBS if test ${with_staticsasl} != "no"; then if test -d ${with_staticsasl}; then if test -d ${with_staticsasl}/lib64 ; then ac_cv_sasl_where_lib=${with_staticsasl}/lib64 else ac_cv_sasl_where_lib=${with_staticsasl}/lib fi ac_cv_sasl_where_lib=${with_staticsasl}/lib ac_cv_sasl_where_inc=${with_staticsasl}/include SASLFLAGS="-I$ac_cv_sasl_where_inc" LIB_SASL="-L$ac_cv_sasl_where_lib" CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}" LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}" else with_staticsasl="/usr" fi AC_CHECK_HEADER(sasl/sasl.h, [ AC_CHECK_HEADER(sasl/saslutil.h, [ for i42 in lib64 lib; do if test -r ${with_staticsasl}/$i42/libsasl2.a; then ac_cv_found_sasl=yes AC_MSG_CHECKING(for static libsasl) LIB_SASL="$LIB_SASL ${with_staticsasl}/$i42/libsasl2.a" fi done if test ! "$ac_cv_found_sasl" = "yes"; then AC_MSG_CHECKING(for static libsasl) AC_ERROR([Could not find ${with_staticsasl}/lib*/libsasl2.a]) fi ])]) AC_MSG_RESULT(found) if test "x$SASL_GSSAPI_LIBS_SET" = "x"; then LIB_SASL="$LIB_SASL $GSSAPIBASE_STATIC_LIBS" else SASL_GSSAPI_LIBS_SET="" cmu_saved_LIBS="$GSSAPIBASE_STATIC_LIBS $cmu_saved_LIBS" fi fi if test -d ${with_sasl}; then ac_cv_sasl_where_lib=${with_sasl}/lib ac_cv_sasl_where_inc=${with_sasl}/include DYNSASLFLAGS="-I$ac_cv_sasl_where_inc" if test "$ac_cv_sasl_where_lib" != ""; then CMU_ADD_LIBPATH_TO($ac_cv_sasl_where_lib, LIB_DYN_SASL) fi LIB_DYN_SASL="$LIB_DYN_SASL -lsasl2" CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}" LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}" fi dnl be sure to check for a SASLv2 specific function AC_CHECK_HEADER(sasl/sasl.h, [ AC_CHECK_HEADER(sasl/saslutil.h, [ AC_CHECK_LIB(sasl2, prop_get, ac_cv_found_sasl=yes, ac_cv_found_sasl=no)], ac_cv_found_sasl=no)], ac_cv_found_sasl=no) if test "$ac_cv_found_sasl" = "yes"; then if test "$ac_cv_sasl_where_lib" != ""; then CMU_ADD_LIBPATH_TO($ac_cv_sasl_where_lib, DYNLIB_SASL) fi DYNLIB_SASL="$DYNLIB_SASL -lsasl2" if test "$using_static_sasl" != "static"; then LIB_SASL=$DYNLIB_SASL SASLFLAGS=$DYNSASLFLAGS fi else DYNLIB_SASL="" DYNSASLFLAGS="" using_static_sasl="staticonly" fi if test "x$SASL_GSSAPI_LIBS_SET" != "x"; then SASL_GSSAPI_LIBS_SET="" cmu_saved_LIBS="$GSSAPIBASE_LIBS $cmu_saved_LIBS" fi LIBS="$cmu_saved_LIBS" LDFLAGS="$cmu_saved_LDFLAGS" CPPFLAGS="$cmu_saved_CPPFLAGS" AC_SUBST(LIB_DYN_SASL) AC_SUBST(DYNSASLFLAGS) AC_SUBST(LIB_SASL) AC_SUBST(SASLFLAGS) ]) AC_DEFUN([CMU_SASL2_REQUIRED], [AC_REQUIRE([CMU_SASL2]) if test "$ac_cv_found_sasl" != "yes"; then AC_ERROR([Cannot continue without libsasl2. Get it from ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/.]) fi]) AC_DEFUN([CMU_SASL2_REQUIRE_VER], [ AC_REQUIRE([CMU_SASL2_REQUIRED]) cmu_saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $SASLFLAGS" AC_TRY_CPP([ #include #ifndef SASL_VERSION_MAJOR #error SASL_VERSION_MAJOR not defined #endif #ifndef SASL_VERSION_MINOR #error SASL_VERSION_MINOR not defined #endif #ifndef SASL_VERSION_STEP #error SASL_VERSION_STEP not defined #endif #if SASL_VERSION_MAJOR < $1 || SASL_VERSION_MINOR < $2 || SASL_VERSION_STEP < $3 #error SASL version is less than $1.$2.$3 #endif ],,AC_ERROR([Incorrect SASL headers found. This package requires SASL $1.$2.$3 or newer.])) CPPFLAGS=$cmu_saved_CPPFLAGS ]) AC_DEFUN([CMU_SASL2_CHECKAPOP_REQUIRED], [ AC_REQUIRE([CMU_SASL2_REQUIRED]) cmu_saved_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $LIB_SASL" AC_CHECK_LIB(sasl2, sasl_checkapop, AC_DEFINE(HAVE_APOP,[],[Does SASL support APOP?]), AC_MSG_ERROR([libsasl2 without working sasl_checkapop. Cannot continue.])) LDFLAGS=$cmu_saved_LDFLAGS ]) AC_DEFUN([SASL2_CRYPT_CHK],[ AC_CHECK_FUNC(crypt, cmu_have_crypt=yes, [ AC_CHECK_LIB(crypt, crypt, LIB_CRYPT="-lcrypt"; cmu_have_crypt=yes, cmu_have_crypt=no)]) AC_SUBST(LIB_CRYPT) ]) cyrus-imspd-v1.8/cmulocal/tcl.m40100644004310100000120000001347407741072415016027 0ustar shadowstaffdnl FIRST PASS AFTER STEALING THIS FROM CYRUS! dnl USE AT YOUR OWN PERIL! dnl I MEAN IT! dnl dnl tcl.m4: an autoconf Tcl locator dnl $Id: tcl.m4,v 1.4 2003/10/08 20:35:25 rjs3 Exp $ dnl dnl This is rob's Tcl macro, fixed by tjs. It may need occasional tweaking, dnl but until the next impediment to compilation, it's fill-in-the-blank, dnl and it should be able to do reasonable things with user input. dnl dnl This will probably just work on Andrew systems, but given the variety dnl and apparent creativity of people who compile Tcl elsewhere, I don't know dnl what it will do. I have yet to see an autoconf Tcl test that users were dnl happy with. dnl dnl BUGS dnl The command-line arguments are overcomplicated. dnl There are doubtlessly others... dnl To use this macro, just do CMU_TCL. It outputs dnl TCL_LIBS, TCL_CPPFLAGS, and TCL_DEFS and SUBSTs them. dnl If successful, these have stuff in them. If not, they're empty. dnl If not successful, with_tcl has the value "no". AC_DEFUN([CMU_TCL], [ # --- BEGIN CMU_TCL --- dnl To link against Tcl, configure does several things to make my life dnl "easier". dnl dnl * maybe ask the user where they think Tcl lives, and try to find it dnl * maybe ask the user what "tclsh" is called this week (i.e., "tclsh8.0") dnl * run tclsh, ask it for a path, then run that path through sed dnl * sanity check its result (many installs are a little broken) dnl * try to figure out where Tcl is based on this result dnl * try to guess where the Tcl include files are dnl dnl Notes from previous incarnations: dnl > XXX MUST CHECK FOR TCL BEFORE KERBEROS V4 XXX dnl > This is because some genius at MIT named one of the Kerberos v4 dnl > library functions log(). This of course conflicts with the dnl > logarithm function in the standard math library, used by Tcl. dnl dnl > Checking for Tcl first puts -lm before -lkrb on the library list. dnl dnl Check for some information from the user on what the world looks like AC_ARG_WITH(tclconfig,[ --with-tclconfig=PATH use tclConfig.sh from PATH (configure gets Tcl configuration from here)], dnl trim tclConfig.sh off the end so we can add it back on later. TclLibBase=`echo ${withval} | sed s/tclConfig.sh\$//`) AC_ARG_WITH(tcl, [ --with-tcl=PATH use Tcl from PATH], TclLibBase="${withval}/lib") AC_ARG_WITH(tclsh, [ --with-tclsh=TCLSH use TCLSH as the tclsh program (let configure find Tcl using this program)], TCLSH="${withval}") if test "$TCLSH" = "no" -o "$with_tclconfig" = "no" ; then AC_MSG_WARN([Tcl disabled because tclsh or tclconfig specified as "no"]) with_tcl=no fi if test "$with_tcl" != "no"; then if test \! -z "$with_tclconfig" -a \! -d "$with_tclconfig" ; then AC_MSG_ERROR([--with-tclconfig requires a directory argument.]) fi if test \! -z "$TCLSH" -a \! -x "$TCLSH" ; then AC_MSG_ERROR([--with-tclsh must specify an executable file.]) fi if test -z "$TclLibBase"; then # do we already know? # No? Run tclsh and ask it where it lives. # Do we know where a tclsh lives? if test -z "$TCLSH"; then # Try and find tclsh. Any tclsh. # If a new version of tcl comes out and unfortunately adds another # filename, it should be safe to add it (to the front of the line -- # somef vendors have older, badly installed tclshs that we want to avoid # if we can) AC_PATH_PROGS(TCLSH, [tclsh8.1 tclsh8.0 tclsh], "unknown") fi # Do we know where to get a tclsh? if test "${TCLSH}" != "unknown"; then AC_MSG_CHECKING([where Tcl says it lives]) TclLibBase=`echo puts \\\$tcl_library | ${TCLSH} | sed -e 's,[^/]*$,,'` AC_MSG_RESULT($TclLibBase) fi fi if test -z "$TclLibBase" ; then AC_MSG_RESULT([can't find tclsh]) AC_MSG_WARN([can't find Tcl installtion; use of Tcl disabled.]) with_tcl=no else AC_MSG_CHECKING([for tclConfig.sh]) # Check a list of places where the tclConfig.sh file might be. for tcldir in "${TclLibBase}" \ "${TclLibBase}/.." \ "${TclLibBase}"`echo ${TCLSH} | sed s/sh//` ; do if test -f "${tcldir}/tclConfig.sh"; then TclLibBase="${tcldir}" break fi done if test -z "${TclLibBase}" ; then AC_MSG_RESULT("unknown") AC_MSG_WARN([can't find Tcl configuration; use of Tcl disabled.]) with_tcl=no else AC_MSG_RESULT(${TclLibBase}/) fi if test "${with_tcl}" != no ; then AC_MSG_CHECKING([Tcl configuration on what Tcl needs to compile]) . ${TclLibBase}/tclConfig.sh AC_MSG_RESULT(ok) dnl no TK stuff for us. dnl . ${TclLibBase}/tkConfig.sh fi if test "${with_tcl}" != no ; then dnl Now, hunt for the Tcl include files, since we don't strictly dnl know where they are; some folks put them (properly) in the dnl default include path, or maybe in /usr/local; the *BSD folks dnl put them in other places. AC_MSG_CHECKING([where Tcl includes are]) for tclinclude in "${TCL_PREFIX}/include/tcl${TCL_VERSION}" \ "${TCL_PREFIX}/include/tcl" \ "${TCL_PREFIX}/include" ; do if test -r "${tclinclude}/tcl.h" ; then TCL_CPPFLAGS="-I${tclinclude}" break fi done if test -z "${TCL_CPPFLAGS}" ; then AC_MSG_WARN(can't find Tcl includes; use of Tcl disabled.) with_tcl=no fi AC_MSG_RESULT(${TCL_CPPFLAGS}) fi # Finally, pick up the Tcl configuration if we haven't found an # excuse not to. if test "${with_tcl}" != no; then dnl TCL_LIBS="${TK_LIB_SPEC} ${TK_XLIBSW} ${TCL_LD_SEARCH_FLAGS} ${TCL_LIB_SPEC}" TCL_LIBS="${TCL_LD_SEARCH_FLAGS} ${TCL_LIB_SPEC} ${TCL_LIBS}" fi fi fi AC_SUBST(TCL_DEFS) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_CPPFLAGS) # --- END CMU_TCL --- ]) dnl CMU_TCL cyrus-imspd-v1.8/cmulocal/telnet.m40100644004310100000120000001252207741072415016531 0ustar shadowstaffdnl telnet.m4--telnet special macros dnl Derrick Brashear dnl $Id: telnet.m4,v 1.12 2003/10/08 20:35:25 rjs3 Exp $ AC_DEFUN([CMU_TELNET_WHICH_TERM], [ AC_CHECK_LIB(termlib, setupterm, [ AC_DEFINE(HAVE_SETUPTERM) AC_CHECK_LIB(c, setupterm, TCLIB="/usr/ccs/lib/libtermlib.a",TCLIB="-ltermlib","/usr/ccs/lib/libtermlib.a") ], TCLIB="-ltermcap") ]) AC_DEFUN([CMU_TELNET_CC_T], [ AC_MSG_CHECKING(for cc_t definition) AC_CACHE_VAL(cmu_cv_cc_t_definition, [ AC_TRY_COMPILE( [ #ifdef HAVE_SYS_TERMIOS_H #include #else #ifdef HAVE_SYS_TERMIO_H #include #endif #endif ], [cc_t ffoo;], cmu_cv_cc_t_definition=yes, cmu_cv_cc_t_definition=no) ]) if test "$cmu_cv_cc_t_definition" = "no"; then AC_DEFINE(NO_CC_T) fi AC_MSG_RESULT($cmu_cv_cc_t_definition) ]) AC_DEFUN([CMU_STREAMS], [ if test "$ac_cv_header_sys_stropts_h" = "yes" -o "$ac_cv_header_stropts_h" = "yes"; then AC_DEFINE(HAVE_STREAMS)dnl fi ]) AC_DEFUN([CMU_TERMIO_MODEL], [ if test "$ac_cv_header_sys_termio_h" = "yes" -o "$ac_cv_header_sys_termios_h" = "yes"; then AC_DEFINE(USE_TERMIO)dnl if test "$ac_cv_header_sys_termios_h" = "no"; then AC_DEFINE(SYSV_TERMIO)dnl fi fi ]) AC_DEFUN([CMU_TELNET_DES_STRING_TO_KEY_PROTO], [ AC_MSG_CHECKING(for des_string_to_key prototype) AC_CACHE_VAL(cmu_cv_des_string_to_key_proto, [ AC_TRY_COMPILE( [#include typedef unsigned char Block[8]; int des_string_to_key(char *, Block);], [int foo = des_string_to_key(NULL, NULL);], cmu_cv_des_string_to_key_proto=no, cmu_cv_des_string_to_key_proto=yes) ]) if test "$cmu_cv_des_string_to_key_proto" = yes; then AC_DEFINE(HAVE_DES_STRING_TO_KEY_PROTO)dnl fi AC_MSG_RESULT($cmu_cv_des_string_to_key_proto) ]) AC_DEFUN([CMU_TELNET_DES_KEY_SCHED_PROTO], [ AC_MSG_CHECKING(for des_key_sched prototype) AC_CACHE_VAL(cmu_cv_des_key_sched_proto, [ AC_TRY_COMPILE( [ #include char des_key_sched(int foo, int bar, int baz); ], [des_key_sched(NULL, NULL);], cmu_cv_des_key_sched_proto=no, cmu_cv_des_key_sched_proto=yes) ]) if test "$cmu_cv_des_key_sched_proto" = yes; then AC_DEFINE(HAVE_DES_KEY_SCHED_PROTO)dnl fi AC_MSG_RESULT($cmu_cv_des_key_sched_proto) ]) AC_DEFUN([CMU_TELNET_DES_SET_RANDOM_GENERATOR_SEED_PROTO], [ AC_MSG_CHECKING(for des_set_random_generator_seed prototype) AC_CACHE_VAL(cmu_cv_des_set_random_generator_seed_proto, [ AC_TRY_COMPILE( [ #include char des_set_random_generator_seed(int foo, int bar, int baz); ], [des_set_random_generator_seed(NULL, NULL);], cmu_cv_des_set_random_generator_seed_proto=no, cmu_cv_des_set_random_generator_seed_proto=yes) ]) if test "$cmu_cv_des_set_random_generator_seed_proto" = yes; then AC_DEFINE(HAVE_DES_SET_RANDOM_GENERATOR_SEED_PROTO)dnl fi AC_MSG_RESULT($cmu_cv_des_set_random_generator_seed_proto) ]) AC_DEFUN([CMU_TELNET_DES_NEW_RANDOM_KEY_PROTO], [ AC_MSG_CHECKING(for des_new_random_key prototype) AC_CACHE_VAL(cmu_cv_des_new_random_key_proto, [ AC_TRY_COMPILE( [ #include char des_new_random_key(int foo, int bar, int baz); ], [des_new_random_key(NULL, NULL);], cmu_cv_des_new_random_key_proto=no, cmu_cv_des_new_random_key_proto=yes) ]) if test "$cmu_cv_des_new_random_key_proto" = yes; then AC_DEFINE(HAVE_DES_NEW_RANDOM_KEY_PROTO)dnl fi AC_MSG_RESULT($cmu_cv_des_new_random_key_proto) ]) AC_DEFUN([CMU_TELNET_DES_ECB_ENCRYPT_PROTO], [ AC_MSG_CHECKING(for des_ecb_encrypt prototype) AC_CACHE_VAL(cmu_cv_des_ecb_encrypt_proto, [ AC_TRY_COMPILE( [#include typedef unsigned char Block[8]; typedef struct { Block _; } Schedule[16]; void des_ecb_encrypt(Block, Block, Schedule, int);], [int foo = des_ecb_encrypt(NULL, NULL, NULL, 0);], cmu_cv_des_ecb_encrypt_proto=no, cmu_cv_des_ecb_encrypt_proto=yes) ]) if test "$cmu_cv_des_ecb_encrypt_proto" = yes; then AC_DEFINE(HAVE_DES_ECB_ENCRYPT_PROTO)dnl fi AC_MSG_RESULT($cmu_cv_des_ecb_encrypt_proto) ]) AC_DEFUN([CMU_TELNET_NEWDES], [ AC_REQUIRE([CMU_KRB4]) AC_REQUIRE([CMU_KRB5]) AC_MSG_CHECKING(for des_new_random_key prototype) AC_CACHE_VAL(ac_cv_func_des_new_random_key_proto, [ AC_TRY_COMPILE( [#include des_cblock key;], [des_new_random_key(&key);], ac_cv_func_des_new_random_key=yes, ac_cv_func_des_new_random_key=no) ]) if test "$ac_cv_func_des_new_random_key" = yes; then AC_DEFINE(NEWDESLIB)dnl fi AC_MSG_RESULT($ac_cv_func_des_new_random_key) ]) AC_DEFUN([CMU_TELNET_OLDNEWDES], [ AC_REQUIRE([CMU_KRB4]) AC_REQUIRE([CMU_KRB5]) saved_LIBS=$LIBS LIBS="$KRB_LIB_FLAGS $KRB5_LIB_FLAGS" if test "$with_des" = yes; then AC_CHECK_FUNCS(des_new_random_key) if test "$ac_cv_func_des_new_random_key" = yes; then AC_DEFINE(NEWDESLIB) fi fi LIBS=$saved_LIBS ]) AC_DEFUN([CMU_TELNET_GETTYTAB], [ if test -f "/etc/gettytab"; then AC_CHECK_FUNCS(getent getstr) if test "X$ac_cv_func_getent" != "Xyes"; then AC_DEFINE(HAVE_GETTYTAB) if test "X$ac_cv_func_getstr" = "Xyes"; then CFLAGS="$CFLAGS -Dgetstr=ggetstr" fi fi else AC_CHECK_FUNCS(cgetent) fi ]) AC_DEFUN([CMU_TELNET_ISSUE], [ if test -f "/etc/issue.net"; then AC_DEFINE(ISSUE_FILE, "/etc/issue.net") else if test -f "/etc/issue"; then AC_DEFINE(ISSUE_FILE, "/etc/issue") fi fi ]) AC_DEFUN([CMU_TELNET_PTYDIR], [ if test -d /dev/pts -o -d /dev/pty; then case "${host}" in *-*-irix*) ;; *-*-linux*) AC_DEFINE(PTYDIR) ;; *) AC_DEFINE(PTYDIR) AC_DEFINE(STREAMSPTY) ;; esac fi ]) cyrus-imspd-v1.8/cmulocal/ucdsnmp.m40100644004310100000120000000377510054446065016716 0ustar shadowstaffdnl look for the (ucd|net)snmp libraries dnl $Id: ucdsnmp.m4,v 1.10 2004/05/24 19:25:41 ken3 Exp $ AC_DEFUN([CMU_UCDSNMP], [ AC_REQUIRE([CMU_SOCKETS]) AC_ARG_WITH(snmp, [ --with-snmp=DIR use ucd|net snmp (rooted in DIR) [yes] ], with_snmp=$withval, with_snmp=yes) dnl dnl Maintain backwards compatibility with old --with-ucdsnmp option dnl AC_ARG_WITH(ucdsnmp,, with_snmp=$withval,) if test "$with_snmp" != "no"; then dnl dnl Try net-snmp first dnl if test "$with_snmp" = "yes"; then AC_PATH_PROG(SNMP_CONFIG,net-snmp-config,,[/usr/local/bin:$PATH]) else SNMP_CONFIG="$with_snmp/bin/net-snmp-config" fi if test -x "$SNMP_CONFIG"; then AC_MSG_CHECKING(NET SNMP libraries) SNMP_LIBS=`$SNMP_CONFIG --agent-libs` SNMP_PREFIX=`$SNMP_CONFIG --prefix` if test -n "$SNMP_LIBS" && test -n "$SNMP_PREFIX"; then CPPFLAGS="$CPPFLAGS -I${SNMP_PREFIX}/include" LIB_UCDSNMP=$SNMP_LIBS AC_DEFINE(HAVE_NETSNMP,1,[Do we have Net-SNMP support?]) AC_SUBST(LIB_UCDSNMP) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_WARN([Could not find the required paths. Please check your net-snmp installation.]) fi else dnl dnl Try ucd-snmp if net-snmp test failed dnl if test "$with_snmp" != no; then if test -d "$with_snmp"; then CPPFLAGS="$CPPFLAGS -I${with_snmp}/include" LDFLAGS="$LDFLAGS -L${with_snmp}/lib" fi cmu_save_LIBS="$LIBS" AC_CHECK_LIB(snmp, sprint_objid, [ AC_CHECK_HEADER(ucd-snmp/version.h,, with_snmp=no)], with_snmp=no, ${LIB_SOCKET}) LIBS="$cmu_save_LIBS" fi AC_MSG_CHECKING(UCD SNMP libraries) AC_MSG_RESULT($with_snmp) LIB_UCDSNMP="" if test "$with_snmp" != no; then AC_DEFINE(HAVE_UCDSNMP,1,[Do we have UCD-SNMP support?]) LIB_UCDSNMP="-lucdagent -lucdmibs -lsnmp" AC_CHECK_LIB(rpm, rpmdbOpen, LIB_UCDSNMP="${LIB_UCDSNMP} -lrpm -lpopt",,-lpopt) fi AC_SUBST(LIB_UCDSNMP) fi fi ]) cyrus-imspd-v1.8/cmulocal/util.m40100644004310100000120000000426007741072416016214 0ustar shadowstaffdnl util.m4--robutil macro dnl Rob Earhart dnl $Id: util.m4,v 1.10 2003/10/08 20:35:26 rjs3 Exp $ dnl robutil is a collection of stuff I (Rob Earhart) have found useful dnl to have around when writing code; it's the stuff I wind up rewriting dnl every time I start a project. This does the autoconf setup dnl necessary for it. dnl This is a helper macro, here because there're times when I dnl want to know if a type exists or not, but don't want to define dnl it to something else (the way AC_CHECK_TYPE does). AC_DEFUN([CMU_CHECK_TYPE_EXISTS], [ changequote(<<, >>) define(<>, translit(CMU_HAVE_$1, [a-z *], [A-Z_P])) define(<>, translit(cmu_cv_type_$1, [ *], [_p])) changequote([, ]) AC_REQUIRE([AC_HEADER_STDC]) AC_MSG_CHECKING(for $1) AC_CACHE_VAL(CMU_CV_NAME, [ AC_EGREP_CPP([$1[[^a-zA-Z_0-9]]], [ #include #if STDC_HEADERS #include #include #endif ], CMU_CV_NAME=yes, CMU_CV_NAME=no)]) AC_MSG_RESULT($CMU_CV_NAME) if test $CMU_CV_NAME = yes; then AC_DEFINE(CMU_TYPE_NAME) fi ]) AC_DEFUN([CMU_UTIL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AM_PROG_CC_STDC]) AC_REQUIRE([AC_PROG_RANLIB]) AC_REQUIRE([CMU_NANA]) AC_REQUIRE([CMU_COMERR]) AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([AC_TYPE_MODE_T]) AC_REQUIRE([AC_C_CONST]) AC_CHECK_HEADERS(sys/sysmacros.h) AC_CHECK_HEADER(inttypes.h, AC_DEFINE(HAVE_INTTYPES_H), CMU_CHECK_TYPE_EXISTS(int8_t) CMU_CHECK_TYPE_EXISTS(uint8_t) CMU_CHECK_TYPE_EXISTS(u_int8_t) CMU_CHECK_TYPE_EXISTS(int16_t) CMU_CHECK_TYPE_EXISTS(uint16_t) CMU_CHECK_TYPE_EXISTS(u_int16_t) CMU_CHECK_TYPE_EXISTS(int32_t) CMU_CHECK_TYPE_EXISTS(uint32_t) CMU_CHECK_TYPE_EXISTS(u_int32_t) ) dnl I'm not sure why autoconf gets so annoyed when these dnl are embedded as part of the inttypes check, but, whatever, dnl this works. if test "$ac_cv_header_inttypes_h" = no; then AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) fi AC_CHECK_TYPE(ssize_t, signed) THREADED_UTIL_OBJECTS="" AC_SUBST(THREADED_UTIL_OBJECTS) ]) AC_DEFUN([CMU_THREAD_UTIL], [ AC_REQUIRE([CMU_UTIL]) THREADED_UTIL_OBJECTS="refcache.o rselock.o" ]) cyrus-imspd-v1.8/cmulocal/zephyr.m40100644004310100000120000001123110013507333016537 0ustar shadowstaffdnl zephyr.m4--Zephyr libraries and includes dnl based on kafs.m4, by dnl Derrick Brashear dnl from KTH kafs and Arla dnl $Id: zephyr.m4,v 1.1 2004/02/14 21:10:51 cg2v Exp $ AC_DEFUN([CMU_ZEPHYR_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE( [#include ], [ZNotice_t foo;], ac_cv_found_zephyr_inc=yes, ac_cv_found_zephyr_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_ZEPHYR_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for zephyr headers in $i) CMU_ZEPHYR_INC_WHERE1($i) CMU_TEST_INCPATH($i, zephyr/zephyr) if test "$ac_cv_found_zephyr_inc" = "yes"; then ac_cv_zephyr_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_ZEPHYR_LIB_WHERE1], [ saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -lzephyr $KRB_LIB_FLAGS" AC_TRY_LINK(, [ZInitialize();], [ac_cv_found_zephyr_lib=yes], ac_cv_found_zephyr_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_ZEPHYR_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for zephyr libraries in $i) CMU_ZEPHYR_LIB_WHERE1($i) dnl deal with false positives from implicit link paths CMU_TEST_LIBPATH($i, zephyr) if test "$ac_cv_found_zephyr_lib" = "yes" ; then ac_cv_zephyr_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_ZEPHYR], [ AC_REQUIRE([CMU_SOCKETS]) AC_REQUIRE([CMU_KRB4]) AC_ARG_WITH(zephyr, [ --with-zephyr=PREFIX Compile with Zephyr support], [if test "X$with_zephyr" = "X"; then with_zephyr=yes fi]) AC_ARG_WITH(zephyr-lib, [ --with-zephyr-lib=dir use zephyr libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-zephyr-lib]) fi]) AC_ARG_WITH(zephyr-include, [ --with-zephyr-include=dir use zephyr headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-zephyr-include]) fi]) if test "X$with_zephyr" != "X"; then if test "$with_zephyr" != "yes" -a "$with_zephyr" != no; then ac_cv_zephyr_where_lib=$with_zephyr/lib ac_cv_zephyr_where_inc=$with_zephyr/include fi fi if test "$with_zephyr" != "no"; then if test "X$with_zephyr_lib" != "X"; then ac_cv_zephyr_where_lib=$with_zephyr_lib fi if test "X$ac_cv_zephyr_where_lib" = "X"; then CMU_ZEPHYR_LIB_WHERE(/usr/athena/lib /usr/local/lib /usr/lib) fi if test "X$with_zephyr_include" != "X"; then ac_cv_zephyr_where_inc=$with_zephyr_include fi if test "X$ac_cv_zephyr_where_inc" = "X"; then CMU_ZEPHYR_INC_WHERE(/usr/athena/include /usr/local/include /usr/include) fi fi AC_MSG_CHECKING(whether to include zephyr) if test "X$ac_cv_zephyr_where_lib" = "X" -a "X$ac_cv_zephyr_where_inc" = "X"; then ac_cv_found_zephyr=no AC_MSG_RESULT(no) else ac_cv_found_zephyr=yes AC_MSG_RESULT(yes) ZEPHYR_INC_DIR=$ac_cv_zephyr_where_inc ZEPHYR_LIB_DIR=$ac_cv_zephyr_where_lib ZEPHYR_INC_FLAGS="-I${ZEPHYR_INC_DIR}" ZEPHYR_LIB_FLAGS="-L${ZEPHYR_LIB_DIR} -lzephyr" AC_SUBST(ZEPHYT_INC_FLAGS) AC_SUBST(ZEPHYR_LIB_FLAGS) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${ZEPHYR_LIB_DIR}" else RPATH="${RPATH}:${ZEPHYR_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${ZEPHYR_LIB_DIR}" else RPATH="${RPATH}:${ZEPHYR_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${ZEPHYR_LIB_DIR}" else RPATH="${RPATH}:${ZEPHYR_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${ZEPHYR_LIB_DIR}" else RPATH="${RPATH}:${ZEPHYR_LIB_DIR}" fi else RPATH="${RPATH} -R${ZEPHYR_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) cyrus-imspd-v1.8/cmulocal/ax_path_bdb.m40100644004310100000120000005001410167317224017463 0ustar shadowstaffdnl @synopsis AX_PATH_BDB([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl dnl This macro finds the latest version of Berkeley DB on the system, dnl and ensures that the header file and library versions match. If dnl MINIMUM-VERSION is specified, it will ensure that the library dnl found is at least that version. dnl dnl It determines the name of the library as well as the path to the dnl header file and library. It will check both the default environment dnl as well as the default Berkeley DB install location. When found, it dnl sets BDB_LIBS, BDB_CPPFLAGS, and BDB_LDFLAGS to the necessary values dnl to add to LIBS, CPPFLAGS, and LDFLAGS, as well as setting BDB_VERSION dnl to the version found. HAVE_DB_H is defined also. dnl dnl The option --with-bdb-dir=DIR can be used to specify a specific dnl Berkeley DB installation to use. dnl dnl An example of it's use is: dnl AX_PATH_BDB([3],[ dnl LIBS="$BDB_LIBS $LIBS" dnl LDFLAGS="$BDB_LDFLAGS $LDFLAGS" dnl CPPFLAGS="$CPPFLAGS $BDB_CPPFLAGS" dnl ]) dnl which will locate the latest version of Berkeley DB on the system, dnl and ensure that it is version 3.0 or higher. dnl dnl Details: This macro does not use either AC_CHECK_HEADERS or dnl AC_CHECK_LIB because, first, the functions inside the library are dnl sometimes renamed to contain a version code that is only available dnl from the db.h on the system, and second, because it is common to dnl have multiple db.h and libdb files on a system it is important to dnl make sure the ones being used correspond to the same version. dnl Additionally, there are many different possible names for libdb dnl when installed by an OS distribution, and these need to be checked dnl if db.h does not correspond to libdb. dnl dnl When cross compiling, only header versions are verified since it dnl would be difficult to check the library version. Additionally dnl the default Berkeley DB installation locations /usr/local/BerkeleyDB* dnl are not searched for higher versions of the library. dnl dnl The format for the list of library names to search came from the dnl Cyrus IMAP distribution, although they are generated dynamically dnl here, and only for the version found in db.h. dnl dnl The macro AX_COMPARE_VERSION is required to use this macro, and dnl should be available from the Autoconf Macro Archive. dnl dnl The author would like to acknowledge the generous and valuable feedback dnl from Guido Draheim, without which this macro would be far less robust, dnl and have poor and inconsistent cross compilation support. dnl dnl @version $Id: ax_path_bdb.m4,v 1.1 2005/01/06 20:24:52 shadow Exp $ dnl @author Tim Toolan dnl dnl ######################################################################### AC_DEFUN([AX_PATH_BDB], [ dnl # Used to indicate success or failure of this function. ax_path_bdb_ok=no # Add --with-bdb-dir option to configure. AC_ARG_WITH([bdb-dir], [AC_HELP_STRING([--with-bdb-dir=DIR], [Berkeley DB installation directory])]) # Check if --with-bdb-dir was specified. if test "x$with_bdb_dir" = "x" ; then # No option specified, so just search the system. AX_PATH_BDB_NO_OPTIONS([$1], [HIGHEST], [ ax_path_bdb_ok=yes ]) else # Set --with-bdb-dir option. ax_path_bdb_INC="$with_bdb_dir/include" ax_path_bdb_LIB="$with_bdb_dir/lib" dnl # Save previous environment, and modify with new stuff. ax_path_bdb_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I$ax_path_bdb_INC $CPPFLAGS" ax_path_bdb_save_LDFLAGS=$LDFLAGS LDFLAGS="-L$ax_path_bdb_LIB $LDFLAGS" # Check for specific header file db.h AC_MSG_CHECKING([db.h presence in $ax_path_bdb_INC]) if test -f "$ax_path_bdb_INC/db.h" ; then AC_MSG_RESULT([yes]) # Check for library AX_PATH_BDB_NO_OPTIONS([$1], [ENVONLY], [ ax_path_bdb_ok=yes BDB_CPPFLAGS="-I$ax_path_bdb_INC" BDB_LDFLAGS="-L$ax_path_bdb_LIB" ]) else AC_MSG_RESULT([no]) AC_MSG_NOTICE([no usable Berkeley DB not found]) fi dnl # Restore the environment. CPPFLAGS="$ax_path_bdb_save_CPPFLAGS" LDFLAGS="$ax_path_bdb_save_LDFLAGS" fi dnl # Execute ACTION-IF-FOUND / ACTION-IF-NOT-FOUND. if test "$ax_path_bdb_ok" = "yes" ; then m4_ifvaln([$2],[$2],[:])dnl m4_ifvaln([$3],[else $3])dnl fi ]) dnl AX_PATH_BDB dnl ######################################################################### dnl Check for berkeley DB of at least MINIMUM-VERSION on system. dnl dnl The OPTION argument determines how the checks occur, and can be one of: dnl dnl HIGHEST - Check both the environment and the default installation dnl directories for Berkeley DB and choose the version that dnl is highest. (default) dnl ENVFIRST - Check the environment first, and if no satisfactory dnl library is found there check the default installation dnl directories for Berkeley DB which is /usr/local/BerkeleyDB* dnl ENVONLY - Check the current environment only. dnl dnl Requires AX_PATH_BDB_PATH_GET_VERSION, AX_PATH_BDB_PATH_FIND_HIGHEST, dnl AX_PATH_BDB_ENV_CONFIRM_LIB, AX_PATH_BDB_ENV_GET_VERSION, and dnl AX_COMPARE_VERSION macros. dnl dnl Result: sets ax_path_bdb_no_options_ok to yes or no dnl sets BDB_LIBS, BDB_CPPFLAGS, BDB_LDFLAGS, BDB_VERSION dnl dnl AX_PATH_BDB_NO_OPTIONS([MINIMUM-VERSION], [OPTION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) AC_DEFUN([AX_PATH_BDB_NO_OPTIONS], [ dnl # Used to indicate success or failure of this function. ax_path_bdb_no_options_ok=no # Values to add to environment to use Berkeley DB. BDB_VERSION='' BDB_LIBS='' BDB_CPPFLAGS='' BDB_LDFLAGS='' # Check cross compilation here. if test "x$cross_compiling" = "xyes" ; then # If cross compiling, can't use AC_RUN_IFELSE so do these tests. # The AC_PREPROC_IFELSE confirms that db.h is preprocessable, # and extracts the version number from it. AC_MSG_CHECKING([for db.h]) AS_VAR_PUSHDEF([HEADER_VERSION],[ax_path_bdb_no_options_HEADER_VERSION])dnl HEADER_VERSION='' AC_PREPROC_IFELSE([ AC_LANG_SOURCE([[ #include AX_PATH_BDB_STUFF DB_VERSION_MAJOR,DB_VERSION_MINOR,DB_VERSION_PATCH ]]) ],[ # Extract version from preprocessor output. HEADER_VERSION=`eval "$ac_cpp conftest.$ac_ext" 2> /dev/null \ | grep AX_PATH_BDB_STUFF | sed 's/[[^0-9,]]//g;s/,/./g;1q'` ],[]) if test "x$HEADER_VERSION" = "x" ; then AC_MSG_RESULT([no]) else AC_MSG_RESULT([$HEADER_VERSION]) # Check that version is high enough. AX_COMPARE_VERSION([$HEADER_VERSION],[ge],[$1],[ # get major and minor version numbers AS_VAR_PUSHDEF([MAJ],[ax_path_bdb_no_options_MAJOR])dnl MAJ=`echo $HEADER_VERSION | sed 's,\..*,,'` AS_VAR_PUSHDEF([MIN],[ax_path_bdb_no_options_MINOR])dnl MIN=`echo $HEADER_VERSION | sed 's,^[[0-9]]*\.,,;s,\.[[0-9]]*$,,'` dnl # Save LIBS. ax_path_bdb_no_options_save_LIBS="$LIBS" # Check that we can link with the library. AC_SEARCH_LIBS([db_version], [db db-$MAJ.$MIN db$MAJ.$MIN db$MAJ$MIN db-$MAJ db$MAJ],[ # Sucessfully found library. ax_path_bdb_no_options_ok=yes BDB_VERSION=$HEADER_VERSION # Extract library from LIBS ax_path_bdb_no_options_LEN=` \ echo "x$ax_path_bdb_no_options_save_LIBS" \ | awk '{print(length)}'` BDB_LIBS=`echo "x$LIBS " \ | sed "s/.\{$ax_path_bdb_no_options_LEN\}\$//;s/^x//;s/ //g"` ],[]) dnl # Restore LIBS LIBS="$ax_path_bdb_no_options_save_LIBS" AS_VAR_POPDEF([MAJ])dnl AS_VAR_POPDEF([MIN])dnl ]) fi AS_VAR_POPDEF([HEADER_VERSION])dnl else # Not cross compiling. # Check version of Berkeley DB in the current environment. AX_PATH_BDB_ENV_GET_VERSION([ AX_COMPARE_VERSION([$ax_path_bdb_env_get_version_VERSION],[ge],[$1],[ # Found acceptable version in current environment. ax_path_bdb_no_options_ok=yes BDB_VERSION="$ax_path_bdb_env_get_version_VERSION" BDB_LIBS="$ax_path_bdb_env_get_version_LIBS" ]) ]) # Determine if we need to search /usr/local/BerkeleyDB* ax_path_bdb_no_options_DONE=no if test "x$2" = "xENVONLY" ; then ax_path_bdb_no_options_DONE=yes elif test "x$2" = "xENVFIRST" ; then ax_path_bdb_no_options_DONE=$ax_path_bdb_no_options_ok fi if test "$ax_path_bdb_no_options_DONE" = "no" ; then # Check for highest in /usr/local/BerkeleyDB* AX_PATH_BDB_PATH_FIND_HIGHEST([ if test "$ax_path_bdb_no_options_ok" = "yes" ; then # If we already have an acceptable version use this if higher. AX_COMPARE_VERSION( [$ax_path_bdb_path_find_highest_VERSION],[gt],[$BDB_VERSION]) else # Since we didn't have an acceptable version check if this one is. AX_COMPARE_VERSION( [$ax_path_bdb_path_find_highest_VERSION],[ge],[$1]) fi ]) dnl # If result from _AX_COMPARE_VERSION is true we want this version. if test "$ax_compare_version" = "true" ; then ax_path_bdb_no_options_ok=yes BDB_LIBS="-ldb" BDB_CPPFLAGS="-I$ax_path_bdb_path_find_highest_DIR/include" BDB_LDFLAGS="-L$ax_path_bdb_path_find_highest_DIR/lib" BDB_VERSION="$ax_path_bdb_path_find_highest_VERSION" fi fi fi dnl # Execute ACTION-IF-FOUND / ACTION-IF-NOT-FOUND. if test "$ax_path_bdb_no_options_ok" = "yes" ; then AC_MSG_NOTICE([using Berkeley DB version $BDB_VERSION]) AC_DEFINE([HAVE_DB_H],[1], [Define to 1 if you have the header file.]) m4_ifvaln([$3],[$3])dnl else AC_MSG_NOTICE([no Berkeley DB version $1 or higher found]) m4_ifvaln([$4],[$4])dnl fi ]) dnl AX_PATH_BDB_NO_OPTIONS dnl ######################################################################### dnl Check the default installation directory for Berkeley DB which is dnl of the form /usr/local/BerkeleyDB* for the highest version. dnl dnl Result: sets ax_path_bdb_path_find_highest_ok to yes or no, dnl sets ax_path_bdb_path_find_highest_VERSION to version, dnl sets ax_path_bdb_path_find_highest_DIR to directory. dnl dnl AX_PATH_BDB_PATH_FIND_HIGHEST([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) AC_DEFUN([AX_PATH_BDB_PATH_FIND_HIGHEST], [ dnl # Used to indicate success or failure of this function. ax_path_bdb_path_find_highest_ok=no AS_VAR_PUSHDEF([VERSION],[ax_path_bdb_path_find_highest_VERSION])dnl VERSION='' ax_path_bdb_path_find_highest_DIR='' # find highest verison in default install directory for Berkeley DB AS_VAR_PUSHDEF([CURDIR],[ax_path_bdb_path_find_highest_CURDIR])dnl AS_VAR_PUSHDEF([CUR_VERSION],[ax_path_bdb_path_get_version_VERSION])dnl for CURDIR in `ls -d /usr/local/BerkeleyDB* 2> /dev/null` do AX_PATH_BDB_PATH_GET_VERSION([$CURDIR],[ AX_COMPARE_VERSION([$CUR_VERSION],[gt],[$VERSION],[ ax_path_bdb_path_find_highest_ok=yes ax_path_bdb_path_find_highest_DIR="$CURDIR" VERSION="$CUR_VERSION" ]) ]) done AS_VAR_POPDEF([VERSION])dnl AS_VAR_POPDEF([CUR_VERSION])dnl AS_VAR_POPDEF([CURDIR])dnl dnl # Execute ACTION-IF-FOUND / ACTION-IF-NOT-FOUND. if test "$ax_path_bdb_path_find_highest_ok" = "yes" ; then m4_ifvaln([$1],[$1],[:])dnl m4_ifvaln([$2],[else $2])dnl fi ]) dnl AX_PATH_BDB_PATH_FIND_HIGHEST dnl ######################################################################### dnl Checks for Berkeley DB in specified directory's lib and include dnl subdirectories. dnl dnl Result: sets ax_path_bdb_path_get_version_ok to yes or no, dnl sets ax_path_bdb_path_get_version_VERSION to version. dnl dnl AX_PATH_BDB_PATH_GET_VERSION(BDB-DIR, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) AC_DEFUN([AX_PATH_BDB_PATH_GET_VERSION], [ dnl # Used to indicate success or failure of this function. ax_path_bdb_path_get_version_ok=no # Indicate status of checking for Berkeley DB header. AC_MSG_CHECKING([in $1/include for db.h]) ax_path_bdb_path_get_version_got_header=no test -f "$1/include/db.h" && ax_path_bdb_path_get_version_got_header=yes AC_MSG_RESULT([$ax_path_bdb_path_get_version_got_header]) # Indicate status of checking for Berkeley DB library. AC_MSG_CHECKING([in $1/lib for library -ldb]) ax_path_bdb_path_get_version_VERSION='' if test -d "$1/include" && test -d "$1/lib" && test "$ax_path_bdb_path_get_version_got_header" = "yes" ; then dnl # save and modify environment ax_path_bdb_path_get_version_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I$1/include $CPPFLAGS" ax_path_bdb_path_get_version_save_LIBS="$LIBS" LIBS="$LIBS -ldb" ax_path_bdb_path_get_version_save_LDFLAGS="$LDFLAGS" LDFLAGS="-L$1/lib $LDFLAGS" # Compile and run a program that compares the version defined in # the header file with a version defined in the library function # db_version. AC_RUN_IFELSE([ AC_LANG_SOURCE([[ #include #include int main(int argc,char **argv) { int major,minor,patch; db_version(&major,&minor,&patch); if (argc > 1) printf("%d.%d.%d\n",DB_VERSION_MAJOR,DB_VERSION_MINOR,DB_VERSION_PATCH); if (DB_VERSION_MAJOR == major && DB_VERSION_MINOR == minor && DB_VERSION_PATCH == patch) return 0; else return 1; } ]]) ],[ # Program compiled and ran, so get version by adding argument. ax_path_bdb_path_get_version_VERSION=`./conftest$ac_exeext x` ax_path_bdb_path_get_version_ok=yes ],[],[]) dnl # restore environment CPPFLAGS="$ax_path_bdb_path_get_version_save_CPPFLAGS" LIBS="$ax_path_bdb_path_get_version_save_LIBS" LDFLAGS="$ax_path_bdb_path_get_version_save_LDFLAGS" fi dnl # Finally, execute ACTION-IF-FOUND / ACTION-IF-NOT-FOUND. if test "$ax_path_bdb_path_get_version_ok" = "yes" ; then AC_MSG_RESULT([$ax_path_bdb_path_get_version_VERSION]) m4_ifvaln([$2],[$2])dnl else AC_MSG_RESULT([no]) m4_ifvaln([$3],[$3])dnl fi ]) dnl AX_PATH_BDB_PATH_GET_VERSION ############################################################################# dnl Checks if version of library and header match specified version. dnl Only meant to be used by AX_PATH_BDB_ENV_GET_VERSION macro. dnl dnl Requires AX_COMPARE_VERSION macro. dnl dnl Result: sets ax_path_bdb_env_confirm_lib_ok to yes or no. dnl dnl AX_PATH_BDB_ENV_CONFIRM_LIB(VERSION, [LIBNAME]) AC_DEFUN([AX_PATH_BDB_ENV_CONFIRM_LIB], [ dnl # Used to indicate success or failure of this function. ax_path_bdb_env_confirm_lib_ok=no dnl # save and modify environment to link with library LIBNAME ax_path_bdb_env_confirm_lib_save_LIBS="$LIBS" LIBS="$LIBS $2" # Compile and run a program that compares the version defined in # the header file with a version defined in the library function # db_version. AC_RUN_IFELSE([ AC_LANG_SOURCE([[ #include #include int main(int argc,char **argv) { int major,minor,patch; db_version(&major,&minor,&patch); if (argc > 1) printf("%d.%d.%d\n",DB_VERSION_MAJOR,DB_VERSION_MINOR,DB_VERSION_PATCH); if (DB_VERSION_MAJOR == major && DB_VERSION_MINOR == minor && DB_VERSION_PATCH == patch) return 0; else return 1; } ]]) ],[ # Program compiled and ran, so get version by giving an argument, # which will tell the program to print the output. ax_path_bdb_env_confirm_lib_VERSION=`./conftest$ac_exeext x` # If the versions all match up, indicate success. AX_COMPARE_VERSION([$ax_path_bdb_env_confirm_lib_VERSION],[eq],[$1],[ ax_path_bdb_env_confirm_lib_ok=yes ]) ],[],[]) dnl # restore environment LIBS="$ax_path_bdb_env_confirm_lib_save_LIBS" ]) dnl AX_PATH_BDB_ENV_CONFIRM_LIB ############################################################################# dnl Finds the version and library name for Berkeley DB in the dnl current environment. Tries many different names for library. dnl dnl Requires AX_PATH_BDB_ENV_CONFIRM_LIB macro. dnl dnl Result: set ax_path_bdb_env_get_version_ok to yes or no, dnl set ax_path_bdb_env_get_version_VERSION to the version found, dnl and ax_path_bdb_env_get_version_LIBNAME to the library name. dnl dnl AX_PATH_BDB_ENV_GET_VERSION([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) AC_DEFUN([AX_PATH_BDB_ENV_GET_VERSION], [ dnl # Used to indicate success or failure of this function. ax_path_bdb_env_get_version_ok=no ax_path_bdb_env_get_version_VERSION='' ax_path_bdb_env_get_version_LIBS='' AS_VAR_PUSHDEF([HEADER_VERSION],[ax_path_bdb_env_get_version_HEADER_VERSION])dnl AS_VAR_PUSHDEF([TEST_LIBNAME],[ax_path_bdb_env_get_version_TEST_LIBNAME])dnl # Indicate status of checking for Berkeley DB library. AC_MSG_CHECKING([for db.h]) # Compile and run a program that determines the Berkeley DB version # in the header file db.h. HEADER_VERSION='' AC_RUN_IFELSE([ AC_LANG_SOURCE([[ #include #include int main(int argc,char **argv) { if (argc > 1) printf("%d.%d.%d\n",DB_VERSION_MAJOR,DB_VERSION_MINOR,DB_VERSION_PATCH); return 0; } ]]) ],[ # Program compiled and ran, so get version by adding an argument. HEADER_VERSION=`./conftest$ac_exeext x` AC_MSG_RESULT([$HEADER_VERSION]) ],[AC_MSG_RESULT([no])],[AC_MSG_RESULT([no])]) # Have header version, so try to find corresponding library. # Looks for library names in the order: # nothing, db, db-X.Y, dbX.Y, dbXY, db-X, dbX # and stops when it finds the first one that matches the version # of the header file. if test "x$HEADER_VERSION" != "x" ; then AC_MSG_CHECKING([for library containing Berkeley DB $HEADER_VERSION]) AS_VAR_PUSHDEF([MAJOR],[ax_path_bdb_env_get_version_MAJOR])dnl AS_VAR_PUSHDEF([MINOR],[ax_path_bdb_env_get_version_MINOR])dnl # get major and minor version numbers MAJOR=`echo $HEADER_VERSION | sed 's,\..*,,'` MINOR=`echo $HEADER_VERSION | sed 's,^[[0-9]]*\.,,;s,\.[[0-9]]*$,,'` # see if it is already specified in LIBS TEST_LIBNAME='' AX_PATH_BDB_ENV_CONFIRM_LIB([$HEADER_VERSION], [$TEST_LIBNAME]) if test "$ax_path_bdb_env_confirm_lib_ok" = "no" ; then # try format "db" TEST_LIBNAME='-ldb' AX_PATH_BDB_ENV_CONFIRM_LIB([$HEADER_VERSION], [$TEST_LIBNAME]) fi if test "$ax_path_bdb_env_confirm_lib_ok" = "no" ; then # try format "db-X.Y" TEST_LIBNAME="-ldb-${MAJOR}.$MINOR" AX_PATH_BDB_ENV_CONFIRM_LIB([$HEADER_VERSION], [$TEST_LIBNAME]) fi if test "$ax_path_bdb_env_confirm_lib_ok" = "no" ; then # try format "dbX.Y" TEST_LIBNAME="-ldb${MAJOR}.$MINOR" AX_PATH_BDB_ENV_CONFIRM_LIB([$HEADER_VERSION], [$TEST_LIBNAME]) fi if test "$ax_path_bdb_env_confirm_lib_ok" = "no" ; then # try format "dbXY" TEST_LIBNAME="-ldb$MAJOR$MINOR" AX_PATH_BDB_ENV_CONFIRM_LIB([$HEADER_VERSION], [$TEST_LIBNAME]) fi if test "$ax_path_bdb_env_confirm_lib_ok" = "no" ; then # try format "db-X" TEST_LIBNAME="-ldb-$MAJOR" AX_PATH_BDB_ENV_CONFIRM_LIB([$HEADER_VERSION], [$TEST_LIBNAME]) fi if test "$ax_path_bdb_env_confirm_lib_ok" = "no" ; then # try format "dbX" TEST_LIBNAME="-ldb$MAJOR" AX_PATH_BDB_ENV_CONFIRM_LIB([$HEADER_VERSION], [$TEST_LIBNAME]) fi dnl # Found a valid library. if test "$ax_path_bdb_env_confirm_lib_ok" = "yes" ; then if test "x$TEST_LIBNAME" = "x" ; then AC_MSG_RESULT([none required]) else AC_MSG_RESULT([$TEST_LIBNAME]) fi ax_path_bdb_env_get_version_VERSION="$HEADER_VERSION" ax_path_bdb_env_get_version_LIBS="$TEST_LIBNAME" ax_path_bdb_env_get_version_ok=yes else AC_MSG_RESULT([no]) fi AS_VAR_POPDEF([MAJOR])dnl AS_VAR_POPDEF([MINOR])dnl fi AS_VAR_POPDEF([HEADER_VERSION])dnl AS_VAR_POPDEF([TEST_LIBNAME])dnl dnl # Execute ACTION-IF-FOUND / ACTION-IF-NOT-FOUND. if test "$ax_path_bdb_env_confirm_lib_ok" = "yes" ; then m4_ifvaln([$1],[$1],[:])dnl m4_ifvaln([$2],[else $2])dnl fi ]) dnl BDB_ENV_GET_VERSION ############################################################################# cyrus-imspd-v1.8/cmulocal/berkdb.m4~0100644004310100000120000001576710150703405016667 0ustar shadowstaffdnl $Id: berkdb.m4,v 1.18 2004/11/23 18:52:53 shadow Exp $ AC_DEFUN([CMU_DB_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [DB *db; db_create(&db, NULL, 0); db->open(db, "foo.db", NULL, DB_UNKNOWN, DB_RDONLY, 0644);], ac_cv_found_db_inc=yes, ac_cv_found_db_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_DB_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for db headers in $i) CMU_DB_INC_WHERE1($i) CMU_TEST_INCPATH($i, db) if test "$ac_cv_found_db_inc" = "yes"; then ac_cv_db_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for lib files # AC_DEFUN([CMU_DB3_LIB_WHERE1], [ AC_REQUIRE([CMU_AFS]) AC_REQUIRE([CMU_KRB4]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -ldb-3" AC_TRY_LINK([#include ], [db_env_create(NULL, 0);], [ac_cv_found_db_3_lib=yes], ac_cv_found_db_3_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_DB4_LIB_WHERE1], [ AC_REQUIRE([CMU_AFS]) AC_REQUIRE([CMU_KRB4]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -ldb-4" AC_TRY_LINK([#include ], [db_env_create(NULL, 0);], [ac_cv_found_db_4_lib=yes], ac_cv_found_db_4_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_DB_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for db libraries in $i) if test "$enable_db4" = "yes"; then CMU_DB4_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, [db-4]) ac_cv_found_db_lib=$ac_cv_found_db_4_lib else CMU_DB3_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, [db-3]) ac_cv_found_db_lib=$ac_cv_found_db_3_lib fi if test "$ac_cv_found_db_lib" = "yes" ; then ac_cv_db_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_USE_DB], [ AC_ARG_WITH(db, [ --with-db=PREFIX Compile with db support], [if test "X$with_db" = "X"; then with_db=yes fi]) AC_ARG_WITH(db-lib, [ --with-db-lib=dir use db libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-db-lib]) fi]) AC_ARG_WITH(db-include, [ --with-db-include=dir use db headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-db-include]) fi]) AC_ARG_ENABLE(db4, [ --enable-db4 use db 4.x libraries]) if test "X$with_db" != "X"; then if test "$with_db" != "yes"; then ac_cv_db_where_lib=$with_db/lib ac_cv_db_where_inc=$with_db/include fi fi if test "X$with_db_lib" != "X"; then ac_cv_db_where_lib=$with_db_lib fi if test "X$ac_cv_db_where_lib" = "X"; then CMU_DB_LIB_WHERE(/usr/athena/lib /usr/lib /usr/local/lib) fi if test "X$with_db_include" != "X"; then ac_cv_db_where_inc=$with_db_include fi if test "X$ac_cv_db_where_inc" = "X"; then CMU_DB_INC_WHERE(/usr/athena/include /usr/local/include) fi AC_MSG_CHECKING(whether to include db) if test "X$ac_cv_db_where_lib" = "X" -o "X$ac_cv_db_where_inc" = "X"; then ac_cv_found_db=no AC_MSG_RESULT(no) else ac_cv_found_db=yes AC_MSG_RESULT(yes) DB_INC_DIR=$ac_cv_db_where_inc DB_LIB_DIR=$ac_cv_db_where_lib DB_INC_FLAGS="-I${DB_INC_DIR}" if test "$enable_db4" = "yes"; then DB_LIB_FLAGS="-L${DB_LIB_DIR} -ldb-4" else DB_LIB_FLAGS="-L${DB_LIB_DIR} -ldb-3" fi dnl Do not force configure.in to put these in CFLAGS and LIBS unconditionally dnl Allow makefile substitutions.... AC_SUBST(DB_INC_FLAGS) AC_SUBST(DB_LIB_FLAGS) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi else RPATH="${RPATH} -R${DB_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) dnl ---- CUT HERE --- dnl These are the Cyrus Berkeley DB macros. In an ideal world these would be dnl identical to the above. dnl They are here so that they can be shared between Cyrus IMAPd dnl and Cyrus SASL with relative ease. dnl The big difference between this and the ones above is that we don't assume dnl that we know the name of the library, and we try a lot of permutations dnl instead. We also assume that DB4 is acceptable. dnl When we're done, there will be a BDB_LIBADD and a BDB_INCADD which should dnl be used when necessary. We should probably be smarter about our RPATH dnl handling. dnl Call these with BERKELEY_DB_CHK. dnl We will also set $dblib to "berkeley" if we are successful, "no" otherwise. dnl this is unbelievably painful due to confusion over what db-3 should be dnl named and where the db-3 header file is located. arg. AC_DEFUN([CYRUS_BERKELEY_DB_CHK_LIB], [ BDB_SAVE_LDFLAGS=$LDFLAGS if test -d $with_bdb_lib; then CMU_ADD_LIBPATH_TO($with_bdb_lib, LDFLAGS) CMU_ADD_LIBPATH_TO($with_bdb_lib, BDB_LIBADD) else BDB_LIBADD="" fi saved_LIBS=$LIBS for dbname in db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db do LIBS="$saved_LIBS -l$dbname" AC_TRY_LINK([#include ], [db_create(NULL, NULL, 0);], BDB_LIBADD="$BDB_LIBADD -l$dbname"; dblib="berkeley"; dbname=db, dblib="no") if test "$dblib" = "berkeley"; then break; fi done if test "$dblib" = "no"; then LIBS="$saved_LIBS -ldb" AC_TRY_LINK([#include ], [db_open(NULL, 0, 0, 0, NULL, NULL, NULL);], BDB_LIBADD="$BDB_LIBADD -ldb"; dblib="berkeley"; dbname=db, dblib="no") fi LIBS=$saved_LIBS LDFLAGS=$BDB_SAVE_LDFLAGS ]) AC_DEFUN([CYRUS_BERKELEY_DB_OPTS], [ AC_ARG_WITH(bdb-libdir, [ --with-bdb-libdir=DIR Berkeley DB lib files are in DIR], with_bdb_lib=$withval, [ test "${with_bdb_lib+set}" = set || with_bdb_lib=none]) AC_ARG_WITH(bdb-incdir, [ --with-bdb-incdir=DIR Berkeley DB include files are in DIR], with_bdb_inc=$withval, [ test "${with_bdb_inc+set}" = set || with_bdb_inc=none ]) ]) AC_DEFUN([CYRUS_BERKELEY_DB_CHK], [ AC_REQUIRE([CYRUS_BERKELEY_DB_OPTS]) cmu_save_CPPFLAGS=$CPPFLAGS if test -d $with_bdb_inc; then CPPFLAGS="$CPPFLAGS -I$with_bdb_inc" BDB_INCADD="-I$with_bdb_inc" else BDB_INCADD="" fi dnl Note that FreeBSD puts it in a wierd place dnl (but they should use with-bdb-incdir) AC_CHECK_HEADER(db.h, [CYRUS_BERKELEY_DB_CHK_LIB()], dblib="no") CPPFLAGS=$cmu_save_CPPFLAGS ]) cyrus-imspd-v1.8/cmulocal/.#berkdb.m4.1.160100644004310100000120000001554210121410377017166 0ustar shadowstaffdnl $Id: berkdb.m4,v 1.16 2004/08/22 19:41:47 shadow Exp $ AC_DEFUN([CMU_DB_INC_WHERE1], [ saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$saved_CPPFLAGS -I$1" AC_TRY_COMPILE([#include ], [DB *db; db_create(&db, NULL, 0); db->open(db, "foo.db", NULL, DB_UNKNOWN, DB_RDONLY, 0644);], ac_cv_found_db_inc=yes, ac_cv_found_db_inc=no) CPPFLAGS=$saved_CPPFLAGS ]) AC_DEFUN([CMU_DB_INC_WHERE], [ for i in $1; do AC_MSG_CHECKING(for db headers in $i) CMU_DB_INC_WHERE1($i) CMU_TEST_INCPATH($i, db) if test "$ac_cv_found_db_inc" = "yes"; then ac_cv_db_where_inc=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) # # Test for lib files # AC_DEFUN([CMU_DB3_LIB_WHERE1], [ AC_REQUIRE([CMU_AFS]) AC_REQUIRE([CMU_KRB4]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -ldb-3" AC_TRY_LINK([#include ], [db_env_create(NULL, 0);], [ac_cv_found_db_3_lib=yes], ac_cv_found_db_3_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_DB4_LIB_WHERE1], [ AC_REQUIRE([CMU_AFS]) AC_REQUIRE([CMU_KRB4]) saved_LIBS=$LIBS LIBS="$saved_LIBS -L$1 -ldb-4" AC_TRY_LINK([#include ], [db_env_create(NULL, 0);], [ac_cv_found_db_4_lib=yes], ac_cv_found_db_4_lib=no) LIBS=$saved_LIBS ]) AC_DEFUN([CMU_DB_LIB_WHERE], [ for i in $1; do AC_MSG_CHECKING(for db libraries in $i) if test "$enable_db4" = "yes"; then CMU_DB4_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, [db-4]) ac_cv_found_db_lib=$ac_cv_found_db_4_lib else CMU_DB3_LIB_WHERE1($i) CMU_TEST_LIBPATH($i, [db-3]) ac_cv_found_db_lib=$ac_cv_found_db_3_lib fi if test "$ac_cv_found_db_lib" = "yes" ; then ac_cv_db_where_lib=$i AC_MSG_RESULT(found) break else AC_MSG_RESULT(not found) fi done ]) AC_DEFUN([CMU_USE_DB], [ AC_ARG_WITH(db, [ --with-db=PREFIX Compile with db support], [if test "X$with_db" = "X"; then with_db=yes fi]) AC_ARG_WITH(db-lib, [ --with-db-lib=dir use db libraries in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-db-lib]) fi]) AC_ARG_WITH(db-include, [ --with-db-include=dir use db headers in dir], [if test "$withval" = "yes" -o "$withval" = "no"; then AC_MSG_ERROR([No argument for --with-db-include]) fi]) AC_ARG_ENABLE(db4, [ --enable-db4 use db 4.x libraries]) if test "X$with_db" != "X"; then if test "$with_db" != "yes"; then ac_cv_db_where_lib=$with_db/lib ac_cv_db_where_inc=$with_db/include fi fi if test "X$with_db_lib" != "X"; then ac_cv_db_where_lib=$with_db_lib fi if test "X$ac_cv_db_where_lib" = "X"; then CMU_DB_LIB_WHERE(/usr/athena/lib /usr/lib /usr/local/lib) fi if test "X$with_db_include" != "X"; then ac_cv_db_where_inc=$with_db_include fi if test "X$ac_cv_db_where_inc" = "X"; then CMU_DB_INC_WHERE(/usr/athena/include /usr/local/include) fi AC_MSG_CHECKING(whether to include db) if test "X$ac_cv_db_where_lib" = "X" -o "X$ac_cv_db_where_inc" = "X"; then ac_cv_found_db=no AC_MSG_RESULT(no) else ac_cv_found_db=yes AC_MSG_RESULT(yes) DB_INC_DIR=$ac_cv_db_where_inc DB_LIB_DIR=$ac_cv_db_where_lib DB_INC_FLAGS="-I${DB_INC_DIR}" if test "$enable_db4" = "yes"; then DB_LIB_FLAGS="-L${DB_LIB_DIR} -ldb-4" else DB_LIB_FLAGS="-L${DB_LIB_DIR} -ldb-3" fi dnl Do not force configure.in to put these in CFLAGS and LIBS unconditionally dnl Allow makefile substitutions.... AC_SUBST(DB_INC_FLAGS) AC_SUBST(DB_LIB_FLAGS) if test "X$RPATH" = "X"; then RPATH="" fi case "${host}" in *-*-linux*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-hpux*) if test "X$RPATH" = "X"; then RPATH="-Wl,+b${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-irix*) if test "X$RPATH" = "X"; then RPATH="-Wl,-rpath,${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi ;; *-*-solaris2*) if test "$ac_cv_prog_gcc" = yes; then if test "X$RPATH" = "X"; then RPATH="-Wl,-R${DB_LIB_DIR}" else RPATH="${RPATH}:${DB_LIB_DIR}" fi else RPATH="${RPATH} -R${DB_LIB_DIR}" fi ;; esac AC_SUBST(RPATH) fi ]) dnl ---- CUT HERE --- dnl These are the Cyrus Berkeley DB macros. In an ideal world these would be dnl identical to the above. dnl They are here so that they can be shared between Cyrus IMAPd dnl and Cyrus SASL with relative ease. dnl The big difference between this and the ones above is that we don't assume dnl that we know the name of the library, and we try a lot of permutations dnl instead. We also assume that DB4 is acceptable. dnl When we're done, there will be a BDB_LIBADD and a BDB_INCADD which should dnl be used when necessary. We should probably be smarter about our RPATH dnl handling. dnl Call these with BERKELEY_DB_CHK. dnl We will also set $dblib to "berkeley" if we are successful, "no" otherwise. dnl this is unbelievably painful due to confusion over what db-3 should be dnl named and where the db-3 header file is located. arg. AC_DEFUN([CYRUS_BERKELEY_DB_CHK_LIB], [ BDB_SAVE_LDFLAGS=$LDFLAGS if test -d $with_bdb_lib; then CMU_ADD_LIBPATH_TO($with_bdb_lib, LDFLAGS) CMU_ADD_LIBPATH_TO($with_bdb_lib, BDB_LIBADD) else BDB_LIBADD="" fi for dbname in db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db do AC_TRY_COMPILE([#include ], [db_create(NULL, NULL, 0);], BDB_LIBADD="$BDB_LIBADD -ldb"; dblib="berkeley"; dbname=db, dblib="no") done if test "$dblib" = "no"; then AC_TRY_COMPILE([#include ], [db_open(NULL, 0, 0, 0, NULL, NULL, NULL);], BDB_LIBADD="$BDB_LIBADD -ldb"; dblib="berkeley"; dbname=db, dblib="no") fi LDFLAGS=$BDB_SAVE_LDFLAGS ]) AC_DEFUN([CYRUS_BERKELEY_DB_OPTS], [ AC_ARG_WITH(bdb-libdir, [ --with-bdb-libdir=DIR Berkeley DB lib files are in DIR], with_bdb_lib=$withval, [ test "${with_bdb_lib+set}" = set || with_bdb_lib=none]) AC_ARG_WITH(bdb-incdir, [ --with-bdb-incdir=DIR Berkeley DB include files are in DIR], with_bdb_inc=$withval, [ test "${with_bdb_inc+set}" = set || with_bdb_inc=none ]) ]) AC_DEFUN([CYRUS_BERKELEY_DB_CHK], [ AC_REQUIRE([CYRUS_BERKELEY_DB_OPTS]) cmu_save_CPPFLAGS=$CPPFLAGS if test -d $with_bdb_inc; then CPPFLAGS="$CPPFLAGS -I$with_bdb_inc" BDB_INCADD="-I$with_bdb_inc" else BDB_INCADD="" fi dnl Note that FreeBSD puts it in a wierd place dnl (but they should use with-bdb-incdir) AC_CHECK_HEADER(db.h, [CYRUS_BERKELEY_DB_CHK_LIB()], dblib="no") CPPFLAGS=$cmu_save_CPPFLAGS ]) cyrus-imspd-v1.8/imsp/0040755004310100000120000000000010170575121014136 5ustar shadowstaffcyrus-imspd-v1.8/imsp/Makefile.in0100644004310100000120000000620507217303221016201 0ustar shadowstaff# Makefile for Cyrus IMSP server and associated programs # # Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # 3. The name "Carnegie Mellon University" must not be used to # endorse or promote products derived from this software without # prior written permission. For permission or any other legal # details, please contact # Office of Technology Transfer # Carnegie Mellon University # 5000 Forbes Avenue # Pittsburgh, PA 15213-3890 # (412) 268-4387, fax: (412) 268-7395 # tech-transfer@andrew.cmu.edu # # 4. Redistributions of any form whatsoever must retain the following # acknowledgment: # "This product includes software developed by Computing Services # at Carnegie Mellon University (http://www.cmu.edu/computing/)." # # CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO # THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE # FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN # AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING # OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. DEFINES=-DSETPROCTITLE srcdir = @srcdir@ VPATH = @srcdir@ CC = @CC@ INSTALL = @INSTALL@ DEFS = @DEFS@ $(DEFINES) CPPFLAGS = -I.. -I. -I$(srcdir) -I$(srcdir)/../lib @CPPFLAGS@ LIBS = @LIBS@ DEPLIBS = ../lib/libcyrus.a @DEPLIBS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ IMSPDOBJS= main.o dispatch.o imsp_server.o option.o syncdb.o adate.o \ im_util.o abook.o authize.o alock.o sasl_support.o @HAVE_LDAP_OBJS@ PROGS = cyrus-imspd PUREPROGS = cyrus-imspd.pure PURIFY = purify PUREARGS = -follow-child-processes=yes -threads=yes QUANTIFY = quantify QUANTARGS = -record-child-process-data all: $(PROGS) purify: cyrus-imspd.pure quantify: cyrus-imspd.quant .c.o: $(CC) -c $(CPPFLAGS) $(DEFS) $(CFLAGS) \ $< install: cyrus-imspd $(INSTALL) -s cyrus-imspd $(DESTDIR)/cyrus/usr/cyrus/bin/imspd cyrus-imspd: $(IMSPDOBJS) $(DEPLIBS) $(CC) $(CFLAGS) $(LDFLAGS) -o cyrus-imspd $(IMSPDOBJS) $(DEPLIBS) $(LIBS) cyrus-imspd.pure: $(IMSPDOBJS) $(DEPLIBS) $(PURIFY) $(PUREARGS) $(CC) $(CFLAGS) $(LDFLAGS) -o imspd.purify $(IMSPDOBJS) $(DEPLIBS) $(LIBS) cyrus-imspd.quant: $(IMSPDOBJS) $(DEPLIBS) $(QUANTIFY) $(QUANTARGS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(IMSPDOBJS) $(DEPLIBS) $(LIBS) clean: rm -f *.o *.a Makefile.bak $(PROGS) distclean: clean rm -f Makefile depend: makedepend $(CPPFLAGS) $(DEFS) $(CFLAGS) *.c $(srcdir)/*.c # DO NOT DELETE THIS LINE -- make depend depends on it. cyrus-imspd-v1.8/imsp/abook.c0100644004310100000120000007101207765430215015405 0ustar shadowstaff/* abook.c -- address book routines * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 6/28/93 */ #include #include #include #include "xmalloc.h" #include "util.h" #include "syncdb.h" #include "authize.h" #include "abook.h" #ifdef HAVE_LDAP #include "abook_ldap.h" #endif #include "acl.h" #include "option.h" /* for option_doquota() */ /* import from OS: */ extern char *malloc(); /* database names */ static char abooks[] = "abooks"; static char abooksdb[] = "user/%s/abooks"; static char abooksudb[] = "user/%.*s/abooks"; static char abookdb[] = "user/%.*s/abook.%s"; /* generate the database name for an address book * returns -1 for invalid name, otherwise returns length of owner name */ static int abook_dbname(char *dbname, int maxout, const char *name) { char *split; int len = strlen(name), ownerlen; /* catch empty name */ if (len == 0) return (-1); /* disallow trailing "." */ if (name[len - 1] == '.') return (-1); /* look for split to determine ownerlen */ ownerlen = len; if ((split = strchr(name, '.'))) { ownerlen = split - name; } snprintf(dbname, maxout, abookdb, ownerlen, name, name); return (ownerlen); } /* check an access control list on an address book * returns masked acl bits */ static long abook_rights(id, name, acl) auth_id *id; char *name, *acl; { char dbname[256]; char *uname; int len; long mask = 0; /* look up the database */ len = abook_dbname(dbname, sizeof(dbname), name); if (len < 0) return (0); /* get the ACL */ if (!acl && sdb_get(abooks, name, SDB_ICASE, &acl) < 0) return (0); if (acl) mask = acl_myrights(auth_get_state(id), acl); /* check for administrator */ if (auth_level(id) == AUTH_ADMIN) mask |= ACL_ALL; /* check ownership */ uname = auth_username(id); if (strlen(uname) == len && !strncasecmp(uname, name, len)) { mask |= (ACL_LOOKUP | ACL_ADMIN); if (!acl) mask = ACL_ALL; } #ifdef HAVE_LDAP /* If this abook is implemented via LDAP lookups, turn off all access but READ, LOOKUP and ADMIN. Not even admins are allowed any further rights. Be sure to leave all the USER bits alone. */ if (mask & ACL_USER1) { mask = mask & ((ACL_FULL & ~ACL_ALL) | ACL_READ | ACL_LOOKUP | ACL_ADMIN); } #endif return (mask); } /* get ACL for parent db */ static long abook_parentacl(id, name, pacl) auth_id *id; char *name, **pacl; { char dbname[256]; char *dot, *cname; int exists = -1, nlen = 0; long mask = 0; nlen = strlen(name); if ((cname = malloc(nlen+1)) == NULL) { /* bummer, can't return a failure condition... */ return 0; } (void)strcpy(cname, name); dot = cname + nlen - 1; *pacl = NULL; while (dot >= cname && exists < 0) { while (dot >= cname && *dot != '.') --dot; if (dot >= cname) *dot = '\0'; sdb_get(abooks, cname, SDB_ICASE, pacl); abook_dbname(dbname, sizeof(dbname), cname); exists = sdb_check(dbname); if (exists == 0) mask = abook_rights(id, cname, *pacl); if (dot >= cname) --dot; } free(cname); return (mask); } #ifdef HAVE_LDAP static int abook_usesldap(id, name) auth_id *id; char *name; { return (abook_rights(id, name, NULL) & ACL_USER1 ? 1 : 0); } #endif /* fetch an address book entry * * Look up an entry in an address book, returning all of its contents. * The address book name is given in "name". * "Alias" has the name of the entry being sought. * It sends back an array of (field, data) pairs via the return value pointer. * Also sets "count" to indicate how many fields were found in the entry. * * The "state" pointer is used by the internal database routines. When * using the sdb routines (instead of LDAP), the field/data array is actually * a series of pointers into "state". * * On error, returns the NULL pointer, resulting in a "No such entry" reply. * * Otherwise, the caller must call abook_fetchdone() to let it free the memory * associated with the returned pointer and the state variable. */ abook_fielddata *abook_fetch(state, id, name, alias, count, freedata) abook_state *state; auth_id *id; char *name, *alias; int *count; int *freedata; { sdb_keyvalue *kv; char *pat; int kvcount, i, len; abook_fielddata *fdata = NULL, *fptr; char dbname[256]; state->kv = NULL; *count = 0; *freedata = 0; if (abook_dbname(dbname, sizeof(dbname), name) < 0) return (NULL); #ifdef HAVE_LDAP if (abook_usesldap(id, name)) { /* Lookup using an LDAP server */ fdata = abook_ldap_fetch(alias, count); *freedata = 1; } else #endif { /* Lookup in an IMSP database file */ len = strlen(alias) + 1; pat = malloc(len + 2); if (!pat) return (NULL); snprintf(pat, len + 2, "%s\"*", alias); if (sdb_match(dbname, pat, SDB_ICASE, NULL, 0, &kv, &kvcount) >= 0 && kvcount) { state->kv = kv; state->kvcount = kvcount; fdata = (abook_fielddata *) malloc(sizeof (abook_fielddata) * kvcount); if (fdata) { fptr = fdata; for (i = 0; i < kvcount; ++i) { if (!strncasecmp(pat, kv[i].key, len) && kv[i].key[len] != '\0') { fptr->field = kv[i].key + len; fptr->data = kv[i].value; ++fptr; } } *count = fptr - fdata; } } free(pat); } return (fdata); } /* free storage used by fetch */ void abook_fetchdone(state, data, count, freedata) abook_state *state; abook_fielddata *data; int count; int freedata; { int i; if (data) { if (freedata) { for (i = 0; i < count; i++) { free(data[i].field); free(data[i].data); } } free(data); } if (state->kv) sdb_freematch(state->kv, state->kvcount, 0); state->kv = NULL; } /* check if user has permission to fetch entries for a given address book * returns non-zero if permitted, 0 otherwise */ int abook_canfetch(id, name) auth_id *id; char *name; { return (abook_rights(id, name, NULL) & ACL_READ ? 1 : 0); } /* check if user has permission to lock entries for a given address book * returns non-zero if permitted, 0 otherwise */ int abook_canlock(id, name) auth_id *id; char *name; { return (abook_rights(id, name, NULL) & ACL_WRITE ? 1 : 0); } /* begin a search in address book * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_PERM_LIST */ int abook_searchstart(state, ldap_state, id, name, flist, fcount) abook_state *state; void **ldap_state; auth_id *id; char *name; abook_fielddata *flist; int fcount; { char dbname[256]; char *pat, *key; sdb_keyvalue *nkv; int i, j, result, ncount, cmp, len, kcount; *ldap_state = NULL; /* check permissions */ if (!(abook_rights(id, name, NULL) & ACL_READ)) { return (AB_PERM); } /* Impose Joe's permission check for the "All Andrew Users" addr book: * If the '0' bit is set, don't allow unqualified searches. * This keeps users from "opening" the addr book in Mulberry and Simeon * while still letting them "search" for entries and "resolve nicknames". */ if ((abook_rights(id, name, NULL) & ACL_USER0) && (fcount == 0 || ((fcount == 1) && (strcasecmp(flist[0].field, "name") == 0) && (strcmp(flist[0].data, "*") == 0)) )) { return (AB_PERM_LIST); } #ifdef HAVE_LDAP if (abook_usesldap(id, name)) { state->kv = NULL; /* Compiler warning here because * ldap_state is void **, not the private type used internally by the * abook_ldap module */ if (abook_ldap_searchstart(ldap_state, flist, fcount) < 0) return (AB_FAIL); else return (AB_SUCCESS); } #endif if (abook_dbname(dbname, sizeof(dbname), name) < 0) return (AB_FAIL); /* start match */ if (!fcount) { if (sdb_match(dbname, "*", SDB_ICASE, NULL, 1, &state->kv, &state->kvcount) < 0) { return (AB_FAIL); } } else { state->kv = nkv = NULL; /* first look for the "name" field */ for (i = 0; i < fcount; ++i) { if (!strcasecmp(flist[i].field, "name")) { int patlen = strlen(flist[i].data) + 3; pat = malloc(patlen); if (!pat) return (AB_FAIL); snprintf(pat, patlen, "%s\"*", flist[i].data); result = sdb_match(dbname, pat, SDB_ICASE, NULL, 1, &state->kv, &state->kvcount); free(pat); if (result < 0) return (AB_FAIL); if (!state->kvcount) return (AB_SUCCESS); break; } } /* then do other fields */ while (fcount) { if (strcasecmp(flist->field, "name")) { int patlen = strlen(flist->field) + 3; pat = malloc(patlen); if (!pat) { if (state->kv) sdb_freematch(state->kv, state->kvcount, 1); state->kv = NULL; return (AB_FAIL); } snprintf(pat, patlen, "*\"%s", flist->field); if (!state->kv) { result = sdb_match(dbname, pat, SDB_ICASE, flist->data, 1, &state->kv, &state->kvcount); } else { result = sdb_match(dbname, pat, SDB_ICASE, flist->data, 0, &nkv, &ncount); } free(pat); if (result < 0) { if (state->kv) sdb_freematch(state->kv, state->kvcount, 1); state->kv = NULL; return (AB_FAIL); } if (!state->kvcount) break; if (nkv) { j = 0; kcount = 0; for (i = 0; i < state->kvcount; ++i) { if (j == ncount) { *state->kv[i].key = '\0'; } else if (*(key = state->kv[i].key)) { len = strchr(key, '"') - key + 1; cmp = strncasecmp(key, nkv[j].key, len); while (cmp > 0 && ++j < ncount) { cmp = strncasecmp(key, nkv[j].key, len); } if (cmp) *state->kv[i].key = '\0'; else ++kcount; } } sdb_freematch(nkv, ncount, 0); if (!kcount) break; } } --fcount; ++flist; } } state->kvpos = state->kv; state->kvlast = NULL; return (AB_SUCCESS); } /* get next search element, or NULL */ char *abook_search(state, ldap_state) abook_state *state; void *ldap_state; { #ifdef HAVE_LDAP if (ldap_state) { return (abook_ldap_search(ldap_state)); } else #endif if (state->kvcount) { while (state->kvpos - state->kv < state->kvcount) { if (*state->kvpos->key) { *strchr(state->kvpos->key, '"') = '\0'; if (!state->kvlast || strcasecmp(state->kvpos->key, state->kvlast)) { return (state->kvlast = state->kvpos++->key); } } ++state->kvpos; } } return (NULL); } /* finish search: free storage used */ void abook_searchdone(state, ldap_state) abook_state *state; void *ldap_state; { if (state->kv) sdb_freematch(state->kv, state->kvcount, 1); #ifdef HAVE_LDAP if (ldap_state) abook_ldap_searchdone(ldap_state); #endif state->kv = NULL; } /* create an address book * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_EXIST */ int abook_create(id, name) auth_id *id; char *name; { char dbname[256], acldb[256]; char *acl = NULL; int ownerlen, result = 0; /* find abook, and make sure it doesn't exist */ if ((ownerlen = abook_dbname(dbname, sizeof(dbname), name)) < 0) return (AB_FAIL); if (sdb_check(dbname) == 0) return (AB_EXIST); #if 0 /* The default address book for the current user always exists */ /* 10/97 - Well, the addressbook doesn't always exist so someone * may need to create the sucker. So, this section of the code is * ifdef'd out. It could be 'bad' protocol wise if this returns an * error but it is probably better than giving a non-intuitive error. */ if (!strcasecmp(auth_username(id), name)) { return (AB_EXIST); } #endif /* 0 */ if (auth_level(id) == AUTH_ADMIN) goto skip_acl_check; #ifndef DISABLE_AUTO_CREATE_AB if (!strcasecmp(auth_username(id), name)) { goto skip_acl_check; } #endif /* DISABLE_AUTO_CREATE_AB */ /* check create access */ if (!(abook_parentacl(id, name, &acl) & ACL_CREATE)) { return (AB_PERM); } skip_acl_check: /* create database */ if (sdb_create(dbname) < 0) { return (AB_FAIL); } /* add addressbook to global abooks list, if appropriate */ if (acl && (result = sdb_writelock(abooks, name, SDB_ICASE)) >= 0) { result = sdb_set(abooks, name, SDB_ICASE, acl); if (sdb_unlock(abooks, name, SDB_ICASE) < 0) result = AB_FAIL; } /* add addressbook name to personal abooks list */ snprintf(acldb, sizeof(acldb), abooksudb, ownerlen, name); if (sdb_check(acldb) < 0 && sdb_create(acldb) < 0) { result = AB_FAIL; } else if (!result) { if (!(result = sdb_writelock(acldb, name, SDB_ICASE))) { result = sdb_set(acldb, name, SDB_ICASE, ""); if (sdb_unlock(acldb, name, SDB_ICASE) < 0) result = AB_FAIL; } /* clean up on error */ if (result < 0) { if (sdb_writelock(acldb, name, SDB_ICASE) >= 0) { sdb_remove(acldb, name, SDB_ICASE); sdb_unlock(acldb, name, SDB_ICASE); } } } if (result < 0) { sdb_delete(dbname); } return (result); } /* delete an address book * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_NOEXIST */ int abook_delete(id, name) auth_id *id; char *name; { char dbname[256], uname[256]; int result, ownerlen; int delta, kvcount; sdb_keyvalue *kv, *kvpos; char *sep, *value; /* find abook, and make sure it exists */ if ((ownerlen = abook_dbname(dbname, sizeof(dbname), name)) < 0) { return (AB_FAIL); } if (ownerlen == strlen(name) && auth_level(id) != AUTH_ADMIN) { return (AB_FAIL); } if (sdb_check(dbname) < 0) return (AB_NOEXIST); /* check delete access */ if (!(abook_rights(id, name, NULL) & ACL_DELETE)) { return (AB_PERM); } /* if we need to adjust the quota, compute the delta */ delta = 0; if (sdb_match(dbname, "*", SDB_ICASE, NULL, 0, &kv, &kvcount) >= 0 && kvcount > 0) { for (kvpos = kv; kvcount--; ++kvpos) { if (kvpos->value) delta += strlen(kvpos->value); if ((sep = strchr(kvpos->key, '"'))) delta += strlen(sep + 1); } sdb_freematch(kv, kvcount, 0); snprintf(uname, sizeof(uname), "%.*s", ownerlen, name); } /* remove address book database */ result = sdb_delete(dbname); if (result == AB_SUCCESS) { if (delta) option_doquota(uname, -delta); /* remove database name from abooks list */ snprintf(dbname, sizeof(dbname), abooksudb, ownerlen, name); if (sdb_writelock(dbname, name, SDB_ICASE) >= 0) { sdb_remove(dbname, name, SDB_ICASE); sdb_unlock(dbname, name, SDB_ICASE); if (sdb_count(dbname, SDB_ICASE) == 0) { sdb_delete(dbname); } } /* if set, remove name from global abooks list */ if (sdb_get(abooks, name, SDB_ICASE, &value) >= 0 && value != NULL) { if (sdb_writelock(abooks, name, SDB_ICASE) >= 0) { sdb_remove(abooks, name, SDB_ICASE); sdb_unlock(abooks, name, SDB_ICASE); } } } return (result); } /* rename an address book * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_QUOTA, AB_NOEXIST, AB_EXIST */ int abook_rename(id, name, newname) auth_id *id; char *name, *newname; { char dbsrc[256], dbdst[256], uname[256]; int osrclen, odstlen, default_abook, new_name; int delta, kvcount, result; sdb_keyvalue *kv, *kvpos; char *sep, *value, *tmpacl = NULL; char tmpc; /* make sure names are valid */ if (!strcasecmp(name, newname) || (osrclen = abook_dbname(dbsrc, sizeof(dbsrc), name)) < 0 || (odstlen = abook_dbname(dbdst, sizeof(dbdst), newname)) < 0) { return (AB_FAIL); } if (sdb_check(dbsrc) < 0) return (AB_NOEXIST); if (sdb_check(dbdst) == 0) return (AB_EXIST); default_abook = osrclen == strlen(name); new_name = osrclen != odstlen || strncasecmp(name, newname, osrclen); /* check permission */ if (!(abook_rights(id, name, NULL) & ACL_DELETE) || !(abook_rights(id, newname, NULL) & ACL_CREATE)) { return (AB_PERM); } /* if we need to adjust the quota, compute the delta */ delta = 0; if (new_name) { if (sdb_match(dbsrc, "*", SDB_ICASE, NULL, 0, &kv, &kvcount) >= 0 && kvcount > 0) { for (kvpos = kv; kvcount--; ++kvpos) { if (kvpos->value) delta += strlen(kvpos->value); if ((sep = strchr(kvpos->key, '"'))) delta += strlen(sep + 1); } sdb_freematch(kv, kvcount, 0); } snprintf(uname, sizeof(uname), "%.*s", odstlen, newname); if ((result = option_doquota(uname, delta)) < 0) { return (result); } } /* copy to new location & delete old location */ if (sdb_copy(dbsrc, dbdst, SDB_ICASE) < 0) { if (delta) option_doquota(uname, -delta); return (AB_FAIL); } if (sdb_delete(dbsrc) == 0 && delta) { /* if necessary, adjust down quota for old location */ snprintf(uname, sizeof(uname), "%.*s", osrclen, name); option_doquota(uname, -delta); } if (default_abook) sdb_create(dbsrc); /* update user abooks file */ if (!default_abook) { snprintf(dbsrc, sizeof(dbsrc), abooksudb, osrclen, name); if (sdb_writelock(dbsrc, name, SDB_ICASE) >= 0) { sdb_remove(dbsrc, name, SDB_ICASE); sdb_unlock(dbsrc, name, SDB_ICASE); } } snprintf(dbdst, sizeof(dbdst), abooksudb, odstlen, newname); if (sdb_check(dbdst) >= 0 || sdb_create(dbdst) >= 0) { if (sdb_writelock(dbdst, newname, SDB_ICASE) >= 0) { sdb_set(dbdst, newname, SDB_ICASE, ""); sdb_unlock(dbdst, newname, SDB_ICASE); } } /* update global abooks file (ACL) */ if (sdb_writelock(abooks, newname, SDB_ICASE) >= 0) { if (sdb_get(abooks, name, SDB_ICASE, &value) >= 0) { if (value == NULL && new_name) { tmpacl = malloc(2); if (tmpacl) { strcpy(tmpacl, "\t"); tmpc = name[osrclen]; name[osrclen] = '\0'; acl_set(&tmpacl, name, ACL_MODE_SET, ACL_ALL, NULL, NULL); name[osrclen] = tmpc; } value = tmpacl; } if (value) { sdb_set(abooks, newname, SDB_ICASE, value); if (!default_abook && sdb_writelock(abooks, name, SDB_ICASE) >= 0) { sdb_remove(abooks, name, SDB_ICASE); sdb_unlock(abooks, name, SDB_ICASE); } } if (tmpacl) free(tmpacl); } sdb_unlock(abooks, newname, SDB_ICASE); } return (AB_SUCCESS); } /* store a set of fields * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_QUOTA, AB_NOEXIST */ int abook_store(id, name, alias, flist, fcount) auth_id *id; char *name, *alias; abook_fielddata *flist; int fcount; { char dbname[256], acldb[256], uname[256]; char *key, *scan, *value; int i, result, ownerlen, maxfieldlen, len, keylen; long delta; if ((ownerlen = abook_dbname(dbname, sizeof(dbname), name)) < 0) return (AB_FAIL); snprintf(uname, sizeof(uname), "%.*s", ownerlen, name); /* check for invalid characters in alias or field */ for (scan = alias; *scan && *scan != '*' && *scan != '%' && *scan != '"'; ++scan); if (*scan) return (AB_FAIL); for (i = 0; i < fcount; ++i) { for (scan = flist[i].field; *scan && *scan != '*' && *scan != '?' && *scan != '%'; ++scan); if (*scan) return (AB_FAIL); } /* make sure database exists */ if (sdb_check(dbname) < 0) { if (ownerlen == strlen(name)) { /* create primary address book */ if (sdb_create(dbname) < 0) return (AB_FAIL); } else { return (AB_NOEXIST); } /* add addressbook name to personal abooks list */ snprintf(acldb, sizeof(acldb), abooksudb, ownerlen, name); if (sdb_check(acldb) < 0 && sdb_create(acldb) < 0) { result = AB_FAIL; } else if (!(result = sdb_writelock(acldb, name, SDB_ICASE))) { result = sdb_set(acldb, name, SDB_ICASE, ""); if (sdb_unlock(acldb, name, SDB_ICASE) < 0) result = AB_FAIL; } if (result < 0) { sdb_delete(dbname); return (AB_FAIL); } } /* check permissions */ if (!(abook_rights(id, name, NULL) & ACL_WRITE)) { return (AB_PERM); } /* lock database */ if (sdb_writelock(dbname, NULL, SDB_ICASE) < 0) return (AB_FAIL); /* quota & max field length calculation */ delta = 0; maxfieldlen = 0; for (i = 0; i < fcount; ++i) { if ((len = strlen(flist[i].field)) > maxfieldlen) { maxfieldlen = len; } if (*flist[i].data) { delta += len + strlen(flist[i].data); } } keylen = maxfieldlen + strlen(alias) + 2; if ((key = malloc(keylen)) == NULL) { sdb_unlock(dbname, NULL, SDB_ICASE); return (AB_FAIL); } for (i = 0; i < fcount; ++i) { snprintf(key, keylen, "%s\"%s", alias, flist[i].field); if (sdb_get(dbname, key, SDB_ICASE, &value) == 0 && value != NULL) { delta -= strlen(value) + strlen(flist[i].field); } } if ((result = option_doquota(uname, delta)) < 0) { free(key); sdb_unlock(dbname, NULL, SDB_ICASE); return (result); } /* make changes to database */ snprintf(key, keylen, "%s\"", alias); if (sdb_get(dbname, key, SDB_ICASE, &value) < 0 || value == NULL) { sdb_set(dbname, key, SDB_ICASE, ""); } for (i = 0; i < fcount; ++i) { snprintf(key, keylen, "%s\"%s", alias, flist[i].field); if (*flist[i].data) { sdb_set(dbname, key, SDB_ICASE, flist[i].data); } else { sdb_remove(dbname, key, SDB_ICASE); } } free(key); /* if changes failed, back out quota change */ if ((result = sdb_unlock(dbname, NULL, SDB_ICASE)) < 0) { option_doquota(uname, -delta); } return (result); } /* delete an entry * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_NOEXIST */ int abook_deleteent(id, name, alias) auth_id *id; char *name, *alias; { char *key, *scan; sdb_keyvalue *kv; int i, result, kvcount, ownerlen, keylen; long delta; char dbname[256]; /* check permissions */ if (!(abook_rights(id, name, NULL) & ACL_DELETE)) { return (AB_PERM); } if ((ownerlen = abook_dbname(dbname, sizeof(dbname), name)) < 0) return (AB_FAIL); /* check for invalid characters in alias */ for (scan = alias; *scan && *scan != '*' && *scan != '%'; ++scan); if (*scan) return (AB_FAIL); /* lock database */ if (sdb_writelock(dbname, NULL, SDB_ICASE) < 0) return (AB_FAIL); /* find entries for key */ keylen = strlen(alias) + 3; key = malloc(keylen); if (!key) { sdb_unlock(dbname, NULL, SDB_ICASE); return (AB_FAIL); } snprintf(key, keylen, "%s\"*", alias); result = sdb_match(dbname, key, SDB_ICASE, NULL, 1, &kv, &kvcount); free(key); if (result < 0 || !kvcount) { sdb_unlock(dbname, NULL, SDB_ICASE); return (result < 0 ? AB_FAIL : AB_NOEXIST); } /* quota check */ delta = (strlen(alias) + 1) * kvcount; for (i = 0; i < kvcount; ++i) { delta -= strlen(kv[i].key) + strlen(kv[i].value); } if ((result = option_doquota(auth_username(id), delta)) < 0) { sdb_unlock(dbname, NULL, SDB_ICASE); return (result); } /* nuke the entries */ for (i = 0; i < kvcount; ++i) { sdb_remove(dbname, kv[i].key, SDB_ICASE); } sdb_freematch(kv, kvcount, 0); /* unlock */ if (sdb_unlock(dbname, NULL, SDB_ICASE) < 0) { option_doquota(auth_username(id), -delta); return (AB_FAIL); } return (AB_SUCCESS); } /* set an access control list * rights is NULL to delete an entry: returns 1 if entry doesn't exist * AB_FAIL, AB_NOEXIST, AB_PERM */ int abook_setacl(id, name, ident, rights) auth_id *id; char *name, *ident, *rights; { char dbname[256]; char *value, *acl, tmpc; int ownerlen, result = AB_FAIL; /* check permissions */ if (!(abook_rights(id, name, NULL) & ACL_ADMIN)) { return (AB_PERM); } /* make sure db exists */ if ((ownerlen = abook_dbname(dbname, sizeof(dbname), name)) < 0) return (AB_FAIL); if (sdb_check(dbname) < 0) return (AB_NOEXIST); /* lock acl db */ if (sdb_writelock(abooks, name, SDB_ICASE) < 0) { return (AB_FAIL); } /* check for acl */ if (sdb_get(abooks, name, SDB_ICASE, &value) >= 0) { /* if no ACL, create one */ if (value == NULL) { /* create default acl */ acl = malloc(2); if (acl) { strcpy(acl, "\t"); tmpc = name[ownerlen]; name[ownerlen] = '\0'; acl_set(&acl, name, ACL_MODE_SET, ACL_ALL, NULL, NULL); name[ownerlen] = tmpc; } } else { /* copy acl */ acl = strdup(value); } /* update acl */ if (acl && acl_set(&acl, ident, ACL_MODE_SET, rights ? acl_strtomask(rights) : 0L, NULL, NULL) == 0) { if (sdb_set(abooks, name, SDB_ICASE, acl) == 0) { result = AB_SUCCESS; } } } /* unlock db */ if (sdb_unlock(abooks, name, SDB_ICASE) < 0) result = AB_FAIL; if (acl) free(acl); return (result); } /* return myrights for address book * rights must be ACL_MAXSTR * returns 0 for success */ int abook_myrights(id, name, rights) auth_id *id; char *name, *rights; { /* some more error checking might be in order... */ acl_masktostr(abook_rights(id, name, NULL), rights); return (AB_SUCCESS); } /* return acl string */ char *abook_getacl(id, name) auth_id *id; char *name; { char dbname[256]; char *acl; /* look up the database */ if (abook_dbname(dbname, sizeof(dbname), name) < 0) return (NULL); /* make sure db exists */ if (sdb_check(dbname) < 0) return (NULL); /* check rights */ if (!(abook_rights(id, name, NULL) & ACL_LOOKUP)) return (NULL); /* check acl */ if (sdb_get(abooks, name, SDB_ICASE, &acl) < 0) return (NULL); if (acl == NULL) acl = ""; return (acl); } /* start finding address books */ int abook_findstart(state, id, pat) abook_state *state; auth_id *id; char *pat; { char dbname[256]; int pkvcount; state->kv = state->pkv = NULL; if (sdb_match(abooks, pat, 0, NULL, 0, &state->kv, &state->kvcount) < 0) { return (AB_FAIL); } state->kvend = state->kv + state->kvcount; state->kvpos = state->kv; snprintf(dbname, sizeof(dbname), abooksdb, auth_username(id)); sdb_match(dbname, pat, 0, NULL, 0, &state->pkv, &pkvcount); if (state->pkv) { state->kvend = state->pkv + pkvcount; state->kvpos = state->pkv; } return (AB_SUCCESS); } /* return next address book found * abook is set to address book name * attrs is set to address book attributes * returns NULL or address book name */ char *abook_find(state, id, abook, attrs) abook_state *state; auth_id *id; char **abook; int *attrs; { char *user, *key; int result = 0, ulen; user = auth_username(id); ulen = strlen(user); do { if (!state->kvpos) return (NULL); if (state->kvpos < state->kvend) { key = state->kvpos->key; if (state->pkv || strncmp(user, key, ulen) || (key[ulen] != '.' && key[ulen] != '\0')) { result = abook_rights(id, state->kvpos->key, NULL)&ACL_LOOKUP; *abook = state->kvpos->key; *attrs = 0; } } if (++state->kvpos >= state->kvend) { state->kvpos = NULL; if (state->pkv) { sdb_freematch(state->pkv, state->kvend - state->pkv, 0); state->pkv = NULL; state->kvpos = state->kv; state->kvend = state->kv + state->kvcount; } } } while (!result); return (*abook); } /* finish finding address books */ void abook_finddone(state) abook_state *state; { if (state->pkv) { sdb_freematch(state->pkv, state->kvend - state->pkv, 0); } if (state->kv) { sdb_freematch(state->kv, state->kvcount, 0); } state->kvpos = state->kv = state->pkv = NULL; } cyrus-imspd-v1.8/imsp/abook.h0100644004310100000120000001507707732657011015422 0ustar shadowstaff#ifndef __abook_h #define __abook_h /* abook.h -- definitions for address book routines * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 6/28/93 */ #include "authize.h" #include "syncdb.h" /* return values */ #define AB_SUCCESS 0 /* general success */ #define AB_FAIL -1 /* general failure */ #define AB_PERM -2 /* permission failure */ #define AB_QUOTA -3 /* quota overflow */ #define AB_NOEXIST -4 /* object doesn't exist */ #define AB_EXIST -5 /* item already exists on create */ #define AB_PERM_LIST -6 /* not allowed to list all entries */ /* field/data pairs for an address book entry */ typedef struct abook_fielddata { char *field; char *data; } abook_fielddata; /* address book state holder */ typedef struct abook_state { /* all fields are private to abook module: */ sdb_keyvalue *kv, *kvpos, *kvend, *pkv; char *kvlast, *kvrights, *kvowner; int kvcount; } abook_state; #ifdef __STDC__ /* abook_fetch(state, id, name, alias, count, freedata) * fetch an address book entry * state: pointer to existing abook_state structure */ abook_fielddata *abook_fetch(abook_state *, auth_id *, char *, char *, int *, int*); /* abook_fetchdone(state, data, count, freedata) * free storage used by fetch */ void abook_fetchdone(abook_state *, abook_fielddata *, int, int); /* abook_canfetch(id, name) * check if user can fetch entries for a given name * returns 1 if permitted, 0 otherwise */ int abook_canfetch(auth_id *, char *); /* abook_canlock(id, name) * check if user has permission to lock entries for a given address book * returns non-zero if permitted, 0 otherwise */ int abook_canlock(auth_id *, char *); /* abook_searchstart(state, ldap_state, id, name, flist, fcount) * begin a search in address book * state must point to a valid abook_state variable * ldap_state if non-NULL, stores an LDAP context for the LDAP search * id indicates the authorization * name address book name * flist list of fields and patterns to look for in that field * fcount number of fields of interest (may be 0) * returns: AB_SUCCESS, AB_FAIL, AB_PERM */ int abook_searchstart(abook_state *, void **, auth_id *, char *, abook_fielddata *, int); /* abook_search(state, ldap_state) * get next search element, or NULL * abook_searchstart must have been called on "state" already */ char *abook_search(abook_state *, void *); /* abook_searchdone(state, ldap_state); * finish search: free storage used */ void abook_searchdone(abook_state *, void *); /* abook_create(id, name); * create an address book * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_EXIST */ int abook_create(auth_id *, char *); /* abook_delete(id, name) * delete an address book * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_NOEXIST */ int abook_delete(auth_id *, char *); /* abook_rename(id, oldname, newname) * rename an address book * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_NOEXIST, AB_EXIST */ int abook_rename(auth_id *, char *, char *); /* abook_store(id, name, alias, flist, fcount); * store a set of fields * returns: AB_SUCCESS, AB_FAIL, AB_PERM, AB_QUOTA, AB_NOEXIST */ int abook_store(auth_id *, char *, char *, abook_fielddata *, int); /* abook_deleteent(id, name, alias) * delete an entry * -1 for failure, -2 for permission denied, 1 for key doesn't exist */ int abook_deleteent(auth_id *, char *, char *); /* abook_setacl(id, name, ident, rights) * set an access control list * rights is NULL to delete an entry: returns 1 if entry doesn't exist * -1 for failure, -2 for permission denied, 0 for success */ int abook_setacl(auth_id *, char *, char *, char *); /* abook_myrights(id, name, rights) * return myrights for address book * rights must have minimum length of ACL_MAXSTR * returns -2 for permission denied, -1 for failure, 0 for success */ int abook_myrights(auth_id *, char *, char *); /* abook_getacl(id, name) * return acl for address book * NULL = error * "" = default ACL */ char *abook_getacl(auth_id *, char *); /* abook_findstart(state, id, pat) * start finding address books */ int abook_findstart(abook_state *, auth_id *, char *); /* abook_find(state, id, abook, attrs) * return next address book found * abook is set to address book name * attrs is set to address book attributes * returns NULL or address book name */ char *abook_find(abook_state *, auth_id *, char **, int *); /* finish finding address books */ void abook_finddone(abook_state *); #else abook_fielddata *abook_fetch(); void abook_fetchdone(), abook_searchdone(), abook_finddone(); int abook_canfetch(), abook_canlock(), abook_searchstart(), abook_create(); int abook_delete(), abook_rename(), abook_store(), abook_deleteent(); int abook_setacl(), abook_myrights(), abook_findstart(); char *abook_search(), *abook_getacl(), *abook_find(); #endif #endif /* __abook_h */ cyrus-imspd-v1.8/imsp/abook_ldap.c0100644004310100000120000007414707776354174016434 0ustar shadowstaff/* abook_ldap.c -- address books implemented via LDAP lookups * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include #include #include "xmalloc.h" #include "util.h" #include "syncdb.h" #include "option.h" #include "authize.h" #include "exitcodes.h" #include "abook.h" #include "abook_ldap.h" #define ATTRMAPSIZE 20 struct map_pair { char *field; char *attr; char *append; }; struct ldap_config { int configured; char *searchbase; int scope; char *ldaphost; int ldapport; char *fullnameattr; char *uniqueattr; char *defaultfilter; struct map_pair map[ATTRMAPSIZE]; }; static struct ldap_config config = {0}; static struct ldap_config secondaryconfig = {0}; static char opt_ldap_searchbase[] = "imsp.ldap.searchbase"; static char opt_ldap_scope[] = "imsp.ldap.scope"; static char opt_ldap_ldaphost[] = "imsp.ldap.host"; static char opt_ldap_ldapport[] = "imsp.ldap.port"; static char opt_ldap_fullnameattr[] = "imsp.ldap.fullnameattr"; static char opt_ldap_uniqueattr[] = "imsp.ldap.uniqueattr"; static char opt_ldap_defaultfilter[] = "imsp.ldap.defaultfilter"; static char opt_ldap_attrmap[] = "imsp.ldap.attrmap"; /* * appendmap is used to append a string onto the end of an * attribute before returning it to the client. useful for * fully qualifing an email address. turn foo into foo@bar.baz * by doing something like: * imsp.ldap.appendmap N (email "@bar.baz") * in your options file. */ static char opt_ldap_appendmap[] = "imsp.ldap.appendmap"; /* * If imsp.ldap.secondary.searchbase is defined in the options file, * then use these settings as a backup search if and only if the search * using the primary LDAP settings returns no entries. * * If the scope, host, and port options are undefined, they * will be inherited from the primary settings. * * 9-Nov-2001 jeaton@andrew.cmu.edu */ static char opt_ldap_secondary_searchbase[] = "imsp.ldap.secondary.searchbase"; static char opt_ldap_secondary_scope[] = "imsp.ldap.secondary.scope"; static char opt_ldap_secondary_ldaphost[] = "imsp.ldap.secondary.host"; static char opt_ldap_secondary_ldapport[] = "imsp.ldap.secondary.port"; static char opt_ldap_secondary_fullnameattr[] = "imsp.ldap.secondary.fullnameattr"; static char opt_ldap_secondary_uniqueattr[] = "imsp.ldap.secondary.uniqueattr"; static char opt_ldap_secondary_defaultfilter[] = "imsp.ldap.secondary.defaultfilter"; static char opt_ldap_secondary_attrmap[] = "imsp.ldap.secondary.attrmap"; static char opt_ldap_secondary_appendmap[] = "imsp.ldap.secondary.appendmap"; static char err_ldap_missing[] = "Missing LDAP setting in global options file: %s"; static char err_ldap_badvalue[] = "Illegal value for LDAP option in global options file: %s"; static void config_error(char *reason, char *optname) { syslog(LOG_ERR, reason, optname); } static int config_ldap(void) { int i = 0, j = 0; char *value; option_list *mapping; if (!config.configured) { /* syslog(LOG_NOTICE, "Configuring the LDAP settings for the first time"); */ /* Search Base */ value = option_get("", opt_ldap_searchbase, 1, NULL); if (value) { config.searchbase = strdup(value); } else { config_error(err_ldap_missing, opt_ldap_searchbase); return -1; } /* Scope */ value = option_get("", opt_ldap_scope, 1, NULL); if (value) { if (strcasecmp(value, "subtree") == 0) { config.scope = LDAP_SCOPE_SUBTREE; } else if (strcasecmp(value, "base") == 0) { config.scope = LDAP_SCOPE_BASE; } else if (strcasecmp(value, "onelevel") == 0) { config.scope = LDAP_SCOPE_ONELEVEL; } else { config_error(err_ldap_badvalue, opt_ldap_scope); return -1; } } else { config_error(err_ldap_missing, opt_ldap_scope); return -1; } /* LDAP Server Hostname */ value = option_get("", opt_ldap_ldaphost, 1, NULL); if (value) { config.ldaphost = strdup(value); } else { config_error(err_ldap_missing, opt_ldap_ldaphost); return -1; } /* LDAP Server Port Number */ value = option_get("", opt_ldap_ldapport, 1); if (value) { config.ldapport = atoi(value); } else { config.ldapport = LDAP_PORT; } /* Fullname Attribute */ value = option_get("", opt_ldap_fullnameattr, 1, NULL); if (value) { config.fullnameattr = strdup(value); } else { config_error(err_ldap_missing, opt_ldap_fullnameattr); return -1; } /* Unique Attribute */ value = option_get("", opt_ldap_uniqueattr, 1, NULL); if (value) { config.uniqueattr = strdup(value); } else { config_error(err_ldap_missing, opt_ldap_uniqueattr); return -1; } /* Default Search Filter */ value = option_get("", opt_ldap_defaultfilter, 1, NULL); if (value) { config.defaultfilter = strdup(value); } else { config_error(err_ldap_missing, opt_ldap_defaultfilter); return -1; } /* Mapping from IMSP fields to LDAP attributes */ mapping = option_getlist("", opt_ldap_attrmap, 1); if (mapping == NULL) { config_error(err_ldap_missing, opt_ldap_attrmap); return -1; } /* there must be an even number of items to form pairs */ if (mapping->count == 0 || (mapping->count % 2) != 0 || (mapping->count / 2) > ATTRMAPSIZE) { config_error(err_ldap_badvalue, opt_ldap_attrmap); return -1; } /* step through the items in the map option, assigning them alternatively to the "field" and "value" halfs of the map structure. */ for (i = 0; i < mapping->count; i++) { if (strcasecmp(mapping->item[i], "null") == 0) value = NULL; else value = strdup(mapping->item[i]); if (i % 2 == 0) config.map[i / 2].field = value; else config.map[i / 2].attr = value; config.map[i / 2].append = NULL; } /* add a null terminator pair at the end */ config.map[i / 2].field = NULL; config.map[i / 2].attr = NULL; /* appendmap */ mapping = option_getlist("", opt_ldap_appendmap, 1); if (mapping != NULL) { if (mapping->count == 0 || (mapping->count % 2) != 0 || (mapping->count / 2) > ATTRMAPSIZE) { config_error(err_ldap_badvalue, opt_ldap_appendmap); return -1; } /* * step through the items in the appendmap, * assigning them to the "append" field of the * map structure, where necessary */ for (i = 0; i < mapping->count; i++) { for (j = 0; config.map[j].field != NULL ; j++) { if (strcmp(mapping->item[i], config.map[j].field) == 0) { i++; config.map[j].append = strdup(mapping->item[i]); } } } } /* Secondary search settings, if applicable */ value = option_get("", opt_ldap_secondary_searchbase, 1, NULL); if (value) { secondaryconfig.searchbase = strdup(value); /* Scope */ value = option_get("", opt_ldap_secondary_scope, 1, NULL); if (value) { if (strcasecmp(value, "subtree") == 0) { secondaryconfig.scope = LDAP_SCOPE_SUBTREE; } else if (strcasecmp(value, "base") == 0) { secondaryconfig.scope = LDAP_SCOPE_BASE; } else if (strcasecmp(value, "onelevel") == 0) { secondaryconfig.scope = LDAP_SCOPE_ONELEVEL; } else { config_error(err_ldap_badvalue, opt_ldap_secondary_scope); return -1; } } else { secondaryconfig.scope = config.scope; } /* LDAP Server Hostname */ value = option_get("", opt_ldap_secondary_ldaphost, 1, NULL); if (value) { secondaryconfig.ldaphost = strdup(value); } else { secondaryconfig.ldaphost = strdup(config.ldaphost); } /* LDAP Server Port Number */ value = option_get("", opt_ldap_secondary_ldapport, 1); if (value) { secondaryconfig.ldapport = atoi(value); } else { secondaryconfig.ldapport = config.ldapport; } /* Fullname Attribute */ value = option_get("", opt_ldap_secondary_fullnameattr, 1, NULL); if (value) { secondaryconfig.fullnameattr = strdup(value); } else { secondaryconfig.fullnameattr = strdup(config.fullnameattr); } /* Unique Attribute */ value = option_get("", opt_ldap_secondary_uniqueattr, 1, NULL); if (value) { secondaryconfig.uniqueattr = strdup(value); } else { secondaryconfig.uniqueattr = strdup(config.uniqueattr); } /* Default Search Filter */ value = option_get("", opt_ldap_secondary_defaultfilter, 1, NULL); if (value) { secondaryconfig.defaultfilter = strdup(value); } else { secondaryconfig.defaultfilter = strdup(config.defaultfilter); } /* Mapping from IMSP fields to LDAP attributes */ mapping = option_getlist("", opt_ldap_secondary_attrmap, 1); if (mapping == NULL) { mapping = mapping; } /* there must be an even number of items to form pairs */ if (mapping->count == 0 || (mapping->count % 2) != 0 || (mapping->count / 2) > ATTRMAPSIZE) { config_error(err_ldap_badvalue, opt_ldap_secondary_attrmap); return -1; } /* step through the items in the map option, assigning them alternatively to the "field" and "value" halfs of the map structure. */ for (i = 0; i < mapping->count; i++) { if (strcasecmp(mapping->item[i], "null") == 0) value = NULL; else value = strdup(mapping->item[i]); if (i % 2 == 0) secondaryconfig.map[i / 2].field = value; else secondaryconfig.map[i / 2].attr = value; secondaryconfig.map[i / 2].append = NULL; } /* add a null terminator pair at the end */ secondaryconfig.map[i / 2].field = NULL; secondaryconfig.map[i / 2].attr = NULL; /* appendmap */ mapping = option_getlist("", opt_ldap_secondary_appendmap, 1); if (mapping != NULL) { if (mapping->count == 0 || (mapping->count % 2) != 0 || (mapping->count / 2) > ATTRMAPSIZE) { config_error(err_ldap_badvalue, opt_ldap_secondary_appendmap); return -1; } /* * step through the items in the appendmap, * assigning them to the "append" field of the * map structure, where necessary */ for (i = 0; i < mapping->count; i++) { for (j = 0; secondaryconfig.map[j].field != NULL ; j++) { if (strcmp(mapping->item[i], secondaryconfig.map[j].field) == 0) { i++; secondaryconfig.map[j].append = strdup(mapping->item[i]); } } } } secondaryconfig.configured = 1; } else { /* no secondary search defined */ } config.configured = 1; } return 0; } /* Convert an IMSP search specification to an LDAP search filter. * Returns 0 on success, setting "filter" to the resulting filter. * Returns -1 if none of the IMSP fields could be converted to an * LDAP attribute. */ static int imsp_to_ldap_filter(abook_fielddata *flist, int fcount, char **filter, struct ldap_config ldapconfig) { int i, j; static char filt[2048]; int filter_is_empty = 1; strlcpy(filt, "(&", sizeof(filt)); strlcat(filt, ldapconfig.defaultfilter, sizeof(filt)); for (i = 0; i < fcount; i++) { for (j = 0; ldapconfig.map[j].field != NULL; j++) { if ((strcasecmp(flist[i].field, ldapconfig.map[j].field) == 0)) { if (ldapconfig.map[j].attr == NULL) { syslog(LOG_ERR, "imsp_to_ldap_filter: skipping unmapped" " field '%s'", flist[i].field); } else { filter_is_empty = 0; strlcat(filt, "(", sizeof(filt)); strlcat(filt, ldapconfig.map[j].attr, sizeof(filt)); strlcat(filt, "=", sizeof(filt)); strlcat(filt, flist[i].data, sizeof(filt)); strlcat(filt, ")", sizeof(filt)); } break; } } if (ldapconfig.map[j].field == NULL) { syslog(LOG_ERR, "imsp_to_ldap_filter: skipping unknown" " field '%s'", flist[i].field); } } strlcat(filt, ")", sizeof(filt)); /* syslog(LOG_NOTICE, "Filter: %s", filt); */ if (filter_is_empty) { return -1; } else { *filter = filt; return 0; } } int abook_ldap_searchstart(abook_ldap_state **ldap_state, abook_fielddata *flist, int fcount) { abook_ldap_state *mystate; int msgid, rc; int sizelimit; char *msg; char *attrs[20]; LDAP *ld; LDAPMessage *result; char *filter, *secondaryfilter; int searching_secondary = 0; if (config_ldap() < 0) { syslog(LOG_ERR, "abook_ldap_searchstart: failed to configure LDAP"); return -1; } if (imsp_to_ldap_filter(flist, fcount, &filter, config) < 0) { syslog(LOG_ERR, "abook_ldap_searchstart: failed to convert filter"); return -1; } ld = ldap_init(config.ldaphost, config.ldapport); if (ld == NULL) { syslog(LOG_ERR, "abook_ldap_searchstart: LDAP init failed: %s", strerror(errno)); return -1; } rc = ldap_simple_bind_s(ld, NULL, NULL); if (rc != LDAP_SUCCESS) { syslog(LOG_ERR, "abook_ldap_searchstart: simple bind failed: %s", ldap_err2string(rc)); return -1; } /* For testing the error handlers... sizelimit = 4; ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &sizelimit); */ attrs[0] = config.fullnameattr; attrs[1] = config.uniqueattr; attrs[2] = NULL; msgid = ldap_search(ld, config.searchbase, config.scope, filter, attrs, 0/*attrs-only*/); if (msgid == -1) { syslog(LOG_ERR, "abook_ldap_searchstart: LDAP search failed"); ldap_unbind(ld); return -1; } rc = ldap_result(ld, msgid, 0, NULL, &result); switch (rc) { case LDAP_RES_SEARCH_ENTRY: /* Do nothing here. The abook_search function will pull out this * entry and send it back for display to the user. * The result is freed later. */ break; case LDAP_RES_SEARCH_RESULT: rc = ldap_result2error(ld, result, 1 /* free result */); if (rc == LDAP_SUCCESS) { /* * Search returned successfully, but with no matching entries. * * Try to do the secondary search, if configured to do so. * fails, then set the prevresult to NULL. */ if (secondaryconfig.ldaphost) { searching_secondary = 1; /* close the connection to the primary ldap server */ ldap_unbind(ld); if (imsp_to_ldap_filter(flist, fcount, &secondaryfilter, secondaryconfig) < 0) { syslog(LOG_ERR, "abook_ldap_searchstart: failed to convert filter"); return -1; } /* open connection to the secondary server */ ld = ldap_init(secondaryconfig.ldaphost, secondaryconfig.ldapport); if (ld == NULL) { syslog(LOG_ERR, "abook_ldap_searchstart: LDAP init failed: %s", strerror(errno)); return -1; } rc = ldap_simple_bind_s(ld, NULL, NULL); if (rc != LDAP_SUCCESS) { syslog(LOG_ERR, "abook_ldap_searchstart: simple bind failed: %s", ldap_err2string(rc)); return -1; } attrs[0] = secondaryconfig.fullnameattr; attrs[1] = secondaryconfig.uniqueattr; attrs[2] = NULL; msgid = ldap_search(ld, secondaryconfig.searchbase, secondaryconfig.scope, secondaryfilter, attrs, 0 /*attrs-only*/); if (msgid == -1) { syslog(LOG_ERR, "abook_ldap_searchstart: LDAP search failed"); ldap_unbind(ld); return -1; } rc = ldap_result(ld, msgid, 0, NULL, &result); switch (rc) { case LDAP_RES_SEARCH_ENTRY: /* Do nothing here. The abook_search function will pull out this * entry and send it back for display to the user. * The result is freed later. */ break; case LDAP_RES_SEARCH_RESULT: /* Still didn't get any data. Send a null "prevresult" to the * abook_search function. */ result = NULL; break; default: syslog(LOG_ERR, "abook_ldap_searchstart: ldap_result failed: %s (%d)", ldap_err2string(rc), rc); (void) ldap_msgfree(result); /* ignore message type return value */ ldap_unbind(ld); return -1; } } /* if (secondaryconfig.ldaphost) */ } else { syslog(LOG_ERR,"abook_ldap_searchstart: search returned error: %s", ldap_err2string(rc)); ldap_unbind(ld); return -1; } break; default: syslog(LOG_ERR, "abook_ldap_searchstart: ldap_result failed: A1 SEARCHADDRESS %s", ldap_err2string(rc)); (void) ldap_msgfree(result); /* ignore message type return value */ ldap_unbind(ld); return -1; } mystate = (abook_ldap_state *) malloc (sizeof (abook_ldap_state)); *ldap_state = mystate; if (mystate == NULL) { syslog(LOG_ERR, "abook_ldap_searchstart: Out of memory"); (void) ldap_msgfree(result); /* ignore message type return value */ ldap_unbind(ld); return -1; } mystate->ld = ld; mystate->msgid = msgid; mystate->prevresult = result; if (searching_secondary == 0) { mystate->ldapconfig = &config; } else { mystate->ldapconfig = &secondaryconfig; } return 0; } static int count_identical_fullnames(abook_ldap_state *ldap_state, char *alias) { int rc, count = 0; char filter[1024]; LDAPMessage *results; /* * To limit the work done for this search, look for some bogus attribute * that's probably not in the entry and don't return any values. */ char *attrs[] = {"c", NULL}; snprintf(filter, sizeof(filter), "(&%s(%s=%s))", config.defaultfilter, config.fullnameattr, alias); rc = ldap_search_s(ldap_state->ld, config.searchbase, config.scope, filter, attrs, 1 /*attrs-only*/, &results); if (rc != LDAP_SUCCESS) { syslog(LOG_ERR, "count_identical_fullnames: search failed: %s", ldap_err2string(rc)); count = -1; } else { count = ldap_count_entries(ldap_state->ld, results); /* Returns -1 on error, so just pass that back to the caller */ (void) ldap_msgfree(results); /* ignore message type return value */ } return count; } char * abook_ldap_search(abook_ldap_state *ldap_state) { int rc, count; LDAP *ld; int msgid; LDAPMessage *result, *entry; char *dn; static char alias[1024]; char **values; struct ldap_config* ldapconfig; if (ldap_state->prevresult == NULL) { /* prevresult is set to NULL when the prior call to ldap_result * indicated that the search ended successfully. */ return NULL; } else { ld = ldap_state->ld; msgid = ldap_state->msgid; result = ldap_state->prevresult; ldapconfig = ldap_state->ldapconfig; /* Find the full name associated with this matching entry so we * can return a pointer to it. */ entry = ldap_first_entry(ld, result); if (entry == NULL) { syslog(LOG_ERR, "abook_ldap_search: ldap_first_entry failed"); return NULL; } values = ldap_get_values(ld, entry, ldapconfig->fullnameattr); if (values == NULL || values[0] == NULL) { syslog(LOG_ERR, "abook_ldap_search: ldap_get_values (%s) failed", ldapconfig->fullnameattr); return NULL; } strlcpy(alias, values[0], sizeof(alias)); ldap_value_free(values); values = ldap_get_values(ld, entry, ldapconfig->uniqueattr); if (values == NULL || values[0] == NULL) { syslog(LOG_ERR, "abook_ldap_search: ldap_get_values (%s) failed", ldapconfig->uniqueattr); syslog(LOG_ERR, "abook_ldap_search: previous value (%s) was %s", ldapconfig->fullnameattr, alias); return NULL; } /* always uniqify the fullname, even if we don't have to */ strlcat(alias, "[", sizeof(alias)); strlcat(alias, ldapconfig->uniqueattr, sizeof(alias)); strlcat(alias, ":", sizeof(alias)); strlcat(alias, values[0], sizeof(alias)); strlcat(alias, "]", sizeof(alias)); ldap_value_free(values); #if 0 count = count_identical_fullnames(ldap_state, alias); if (count > 1) { /* Find the uid for this entry */ values = ldap_get_values(ld, entry, ldapconfig->uniqueattr); if (values == NULL || values[0] == NULL) { syslog(LOG_ERR, "abook_ldap_search: ldap_get_values failed for attr '%s'", ldapconfig->uniqueattr); return NULL; } strlcat(alias, "[", sizeof(alias)); strlcat(alias, ldapconfig->uniqueattr, sizeof(alias)); strlcat(alias, ":", sizeof(alias)); strlcat(alias, values[0], sizeof(alias)); strlcat(alias, "]", sizeof(alias)); ldap_value_free(values); } #endif ldap_msgfree(result); /* Now fetch the next result to get ready for the next iteration * of this function. */ rc = ldap_result(ld, msgid, 0, NULL, &result); switch (rc) { case LDAP_RES_SEARCH_ENTRY: ldap_state->prevresult = result; break; case LDAP_RES_SEARCH_RESULT: rc = ldap_result2error(ld, result, 1 /* free result */); /* This result had no entries, but indicated success or failure. * Return the alias corresponding to the previous entry, * but set "prevresult" to NULL to indicate to the next * iteration that searching is completed. */ if (rc != LDAP_SUCCESS) { syslog(LOG_ERR,"abook_ldap_search: search completed with" " error: %s", ldap_err2string(rc)); } ldap_state->prevresult = NULL; break; default: syslog(LOG_ERR, "abook_ldap_search: ldap_result failed: 3: %s", ldap_err2string(rc)); (void) ldap_msgfree(result); /* ignore message type return value */ ldap_state->prevresult = NULL; } return alias; } } void abook_ldap_searchdone(abook_ldap_state *ldap_state) { ldap_unbind(ldap_state->ld); free(ldap_state); } abook_fielddata * abook_ldap_fetch(char *alias, int *count) { int i, rc, ldapcount, mappedfieldcount; char *ptr; char prefix[1024]; char filter[1024]; abook_fielddata *fdata, *fptr; char *searchattr; char *searchkey; LDAP *ld; LDAPMessage *results, *entry; char **values; if (config_ldap() < 0) { syslog(LOG_ERR, "abook_ldap_fetch: failed to configure LDAP"); return NULL; } /* * Decide how to search for the user. */ snprintf(prefix, sizeof(prefix), "[%s:", config.uniqueattr); ptr = strstr(alias, prefix); if (ptr != NULL) { *ptr = '\0'; ptr += 1 /*[*/ + strlen(config.uniqueattr) + 1 /*:*/; searchkey = ptr; ptr += strlen(ptr) - 1 /*]*/; *ptr = '\0'; searchattr = config.uniqueattr; } else { searchkey = alias; searchattr = config.fullnameattr; } snprintf(filter, sizeof(filter), "(&%s(%s=%s))", config.defaultfilter, searchattr, searchkey); ld = ldap_init(config.ldaphost, config.ldapport); if (ld == NULL) { syslog(LOG_ERR, "abook_ldap_fetch: LDAP init failed: %s", strerror(errno)); return NULL; } rc = ldap_simple_bind_s(ld, NULL, NULL); if (rc != LDAP_SUCCESS) { syslog(LOG_ERR, "abook_ldap_fetch: simple bind failed: %s", ldap_err2string(rc)); return NULL; } rc = ldap_search_s(ld, config.searchbase, config.scope, filter, NULL/*get all attrs*/, 0/*attrs-only*/, &results); if (rc != LDAP_SUCCESS) { syslog(LOG_ERR, "abook_ldap_fetch: LDAP search failed: %s", ldap_err2string(rc)); ldap_unbind(ld); return NULL; } ldapcount = ldap_count_entries(ld, results); if (ldapcount == 0) { /* no matches on primary search, try secondary search if configured */ if (secondaryconfig.ldaphost) { /* close the connection to the primary server */ ldap_unbind(ld); snprintf(prefix, sizeof(prefix), "[%s:", secondaryconfig.uniqueattr); ptr = strstr(alias, prefix); if (ptr != NULL) { *ptr = '\0'; ptr += 1 /*[*/ + strlen(secondaryconfig.uniqueattr) + 1 /*:*/; searchkey = ptr; ptr += strlen(ptr) - 1 /*]*/; *ptr = '\0'; searchattr = secondaryconfig.uniqueattr; } else { searchkey = alias; searchattr = secondaryconfig.fullnameattr; } snprintf(filter, sizeof(filter), "(&%s(%s=%s))", secondaryconfig.defaultfilter, searchattr, searchkey); ld=ldap_init(secondaryconfig.ldaphost, secondaryconfig.ldapport); if (ld == NULL){ syslog(LOG_ERR, "abook_ldap_fetch: LDAP secondary init failed: %s", strerror(errno)); return NULL; } rc = ldap_simple_bind_s(ld, NULL, NULL); if (rc != LDAP_SUCCESS) { syslog(LOG_ERR, "abook_ldap_fetch: simple secondary bind failed: %s", ldap_err2string(rc)); return NULL; } rc = ldap_search_s(ld, secondaryconfig.searchbase, secondaryconfig.scope, filter, NULL/*get all attrs*/, 0/*attrs-only*/, &results); if (rc != LDAP_SUCCESS) { syslog(LOG_ERR, "abook_ldap_fetch: LDAP secondary search failed: %s", ldap_err2string(rc)); ldap_unbind(ld); return NULL; } ldapcount = ldap_count_entries(ld, results); if (ldapcount != 1) { syslog(LOG_ERR, "abook_ldap_fetch: unexpected count of secondary search" " hits: %d", ldapcount); (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return NULL; } entry = ldap_first_entry(ld, results); if (entry == NULL) { syslog(LOG_ERR, "abook_ldap_fetch: ldap_first_entry failed"); (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return NULL; } /* This memory is freed by abook_fetchdone() which is called by * show_address() after it's finished sending the field/data pairs * back to the IMSP client */ mappedfieldcount = 0; for (i = 0; secondaryconfig.map[i].field != NULL; i++) { if (secondaryconfig.map[i].attr != NULL) mappedfieldcount++; } fdata = (abook_fielddata *) malloc(sizeof (abook_fielddata) * mappedfieldcount); if (fdata == NULL) { syslog(LOG_ERR, "abook_ldap_fetch: Out of memory"); (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return NULL; } *count = 0; fptr = fdata; for (i = 0; secondaryconfig.map[i].field != NULL; i++) { if ((secondaryconfig.map[i].attr != NULL) && (strcmp(secondaryconfig.map[i].attr, secondaryconfig.fullnameattr) != 0)) { values = ldap_get_values(ld, entry, secondaryconfig.map[i].attr); if (values != NULL && values[0] != NULL) { fptr->field = strdup(secondaryconfig.map[i].field); if (secondaryconfig.map[i].append != NULL) { int fptrdatalen = strlen(values[0])+strlen(secondaryconfig.map[i].append)+1; fptr->data=malloc(fptrdatalen); if(!fptr->data) fatal("out of memory", EC_TEMPFAIL); strlcpy(fptr->data, values[0], fptrdatalen); strlcat(fptr->data, secondaryconfig.map[i].append, fptrdatalen); } else { fptr->data = strdup(values[0]); if(!fptr->data) fatal("out of memory", EC_TEMPFAIL); } (*count)++; fptr++; } if (values != NULL) ldap_value_free(values); } } (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return (fdata); } } if (ldapcount != 1) { syslog(LOG_ERR, "abook_ldap_fetch: unexpected count of search" " hits: %d", ldapcount); (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return NULL; } entry = ldap_first_entry(ld, results); if (entry == NULL) { syslog(LOG_ERR, "abook_ldap_fetch: ldap_first_entry failed"); (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return NULL; } /* This memory is freed by abook_fetchdone() which is called by * show_address() after it's finished sending the field/data pairs * back to the IMSP client */ mappedfieldcount = 0; for (i = 0; config.map[i].field != NULL; i++) { if (config.map[i].attr != NULL) mappedfieldcount++; } fdata = (abook_fielddata *) malloc(sizeof (abook_fielddata) * mappedfieldcount); if (fdata == NULL) { syslog(LOG_ERR, "abook_ldap_fetch: Out of memory"); (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return NULL; } *count = 0; fptr = fdata; for (i = 0; config.map[i].field != NULL; i++) { if ((config.map[i].attr != NULL) && (strcmp(config.map[i].attr, config.fullnameattr) != 0)) { values = ldap_get_values(ld, entry, config.map[i].attr); if (values != NULL && values[0] != NULL) { fptr->field = strdup(config.map[i].field); if (config.map[i].append != NULL) { printf("appending %s to field: %s value: %s\n", config.map[i].append, config.map[i].field,values[0]); fptr->data=malloc(strlen(values[0])+strlen(config.map[i].append)+1); fptr->data=strcat(fptr->data, values[0]); fptr->data=strcat(fptr->data, config.map[i].append); } else { fptr->data = strdup(values[0]); } (*count)++; fptr++; } if (values != NULL) ldap_value_free(values); } } (void) ldap_msgfree(results); /* ignore message type return value */ ldap_unbind(ld); return (fdata); } cyrus-imspd-v1.8/imsp/abook_ldap.h0100644004310100000120000000446507714510260016413 0ustar shadowstaff/* abook_ldap.c -- address books implemented via LDAP lookups * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include "abook.h" typedef struct abook_ldap_state { LDAP *ld; int msgid; LDAPMessage *prevresult; struct ldap_config *ldapconfig; } abook_ldap_state; extern abook_fielddata * abook_ldap_fetch(char *alias, int *count); extern int abook_ldap_searchstart(abook_ldap_state **ldap_state, abook_fielddata *flist, int fcount); extern char * abook_ldap_search(abook_ldap_state *ldap_state); extern void abook_ldap_searchdone(abook_ldap_state *ldap_state); cyrus-imspd-v1.8/imsp/adate.c0100644004310100000120000000611107765430215015366 0ustar shadowstaff/* adate.c -- generate an Internet standard date string for a mail header * * (C) Copyright 1991-1996 Christopher J. Newman * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Christopher J. Newman not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Christopher J. Newman makes no * representations about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. * * CHRISTOPHER J. NEWMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT * SHALL CHRISTOPHER J. NEWMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. * * Author: Christopher J. Newman * Message: This is a nifty program. */ #include #include #include #include static char *dayofweek[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static char *month[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; #define TIMESIZE 64 #define ZONESIZE 7 /* generate an Internet (historically Arpanet) standard date */ char *n_arpadate() { time_t now; struct tm local, *gmt; static char buf[TIMESIZE]; char tzbuf[ZONESIZE]; long zminutes; char zsign, zdst; /* get time */ now = time(NULL); local = *localtime(&now); gmt = gmtime(&now); /* get GMT offset */ zminutes = local.tm_yday - gmt->tm_yday; if (zminutes > 1) { zminutes = -24; } else if (zminutes < -1) { zminutes = 24; } else { zminutes *= 24; } zminutes = (zminutes + local.tm_hour - gmt->tm_hour) * 60 + local.tm_min - gmt->tm_min; /* create timezone */ *tzbuf = '\0'; zsign = '+'; zdst = 'S'; if (local.tm_isdst) { zdst = 'D'; } if (zminutes < 0) { zsign = '-'; zminutes = -zminutes; if (zminutes >= 240 && zminutes <= 660 && zminutes % 60 == 0) { snprintf(tzbuf, sizeof(tzbuf), " (%c%cT)", "AECMPYHB" [(zminutes / 60) - (zdst == 'D' ? 3 : 4)], zdst); } } /* create Internet date */ snprintf(buf, sizeof(buf), "%s, %d %s %d %02d:%02d:%02d %c%02ld%02ld%s", dayofweek[local.tm_wday], local.tm_mday, month[local.tm_mon], local.tm_year + 1900, local.tm_hour, local.tm_min, local.tm_sec, zsign, (unsigned long) (zminutes / 60), (unsigned long) (zminutes % 60), tzbuf); return (buf); } #ifdef TESTADATE main() { printf("%s\n", n_arpadate()); } #endif cyrus-imspd-v1.8/imsp/alock.c0100644004310100000120000001203307765430215015401 0ustar shadowstaff/* alock.c -- advisory locking routines * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 8/18/93 */ #include #include #include #include "util.h" #include "syncdb.h" #include "alock.h" /* database name */ static char alockdb[] = "user/%.*s/alock"; /* list of locks held by server */ typedef struct locklist_t { struct locklist_t *next; char dbname[256]; char key[1]; } locklist_t; /* global list of locked items */ static locklist_t *locklist = NULL; /* lock/unlock an option or address book entry * for option, item1 is option name and item2 is NULL * for address book, item1 is address book and item2 is name * lockflag is 0 for unlock, 1 for lock * host is set to hostname on input and returns user@host if already locked * returns -1 on failure, 0 on success, 1 on already locked/unlocked */ int alock_dolock(user, item1, item2, lockflag, host) char *user, *item1, *item2, **host; int lockflag; { locklist_t *key, *lkey; char *s, *value; int result, result1, keylenplus; /* create the key */ keylenplus = strlen(item1) + (item2 ? strlen(item2) + 1 : 0) + strlen(user) + strlen(*host) + 2; key = (locklist_t *) malloc(sizeof (locklist_t) + keylenplus); if (!key) return (-1); if (item2) { snprintf(key->dbname, sizeof(key->dbname), alockdb, (s = strchr(item1, '.')) ? s - item1 : strlen(item1), item1); snprintf(key->key, keylenplus, "%s\"%s", item1, item2); } else { snprintf(key->dbname, sizeof(key->dbname), alockdb, strlen(user), user); strcpy(key->key, item1); } /* look for lock to release */ if (!lockflag) { for (lkey = locklist; lkey && strcasecmp(lkey->key, key->key); lkey = locklist->next); if (!lkey) { free((char *) key); return (1); } } /* write-lock database, creating if necessary */ if ((result = sdb_writelock(key->dbname, key->key, 1)) < 0) { /* create db & retry */ sdb_create(key->dbname); result = sdb_writelock(key->dbname, key->key, 1); } /* change database */ if (!result) { if (lockflag) { if (sdb_get(key->dbname, key->key, 1, &value) == 0 && value) { result = 1; *host = value; } else { value = key->key + strlen(key->key) + 1; snprintf(value, keylenplus - strlen(key->key) - 1, "%s@%s", user, *host); result = sdb_set(key->dbname, key->key, 1, value); } } else { result = sdb_remove(key->dbname, key->key, 1); } } /* unlock it */ result1 = sdb_unlock(key->dbname, key->key, 1); if (!result) result = result1; /* remove entries from linked list */ if (!lockflag || result) free((char *) key); if (!result && !lockflag) { if (lkey == locklist) { locklist = locklist->next; } else { for (key = locklist; key->next != lkey; key = key->next); key->next = lkey->next; } free((char *)lkey); } /* add entry to linked list */ if (lockflag && !result) { key->next = locklist; locklist = key; } return (result); } /* unlock all active locks */ void alock_unlock() { locklist_t *key; while (locklist) { key = locklist; locklist = locklist->next; if (sdb_writelock(key->dbname, key->key, 1) == 0) { sdb_remove(key->dbname, key->key, 1); sdb_unlock(key->dbname, key->key, 1); } free((char *) key); } } cyrus-imspd-v1.8/imsp/alock.h0100644004310100000120000000467007217270230015405 0ustar shadowstaff/* alock.h -- advisory locking routine definitions * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 8/18/93 */ /* lock/unlock an option or address book entry * for option, item1 is option name and item2 is NULL * for address book, item1 is address book and item2 is name * lockflag is 0 for unlock, 1 for lock * lockstr is set to user who has option locked * host is set to hostname on input and returns user@host if already locked * returns -1 on failure, 0 on success, 1 on already locked/unlocked */ int alock_dolock( /* char *user, char *item1, char *item2, int lockflag, char **host */ ); /* unlock all active locks */ void alock_unlock( /* void */ ); cyrus-imspd-v1.8/imsp/authize.c0100644004310100000120000001417007714231525015762 0ustar shadowstaff/* authize.c -- authorization module for IMSP * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 6/28/93 */ #include #include #include #include "util.h" #include "acl.h" #include "syncdb.h" #include "option.h" #include "auth.h" #include "authize.h" /* from OS: */ extern char *malloc(), *realloc(); extern char *crypt(); /* name of anonymous user */ static char anonymous[] = "anonymous"; /* standard options for setting authentication levels */ char opt_alladmin[] = "imsp.admin.all"; /* needed by sasl_support.c */ /* standard error messages */ static char err_nomem[] = "Not enough memory to log in"; /* Generate an auth_id from a user name * This routine no longer does password validation, so the caller must * only use this routine after a successful authentication. * "idptr" is set to the new IMSP authentication structure * "user" is the IMSP login name, and points to a dynamically allocated * string which may be freed by the caller. * "reply" is set to a success or failure message to be sent to the user * (may not contain CR or LF characters) * Returns -1 for malloc failures, otherwise 0 for success */ int auth_login(auth_id **idptr, const char *user, char *olduser, const char **reply) { auth_id *id = *idptr; char *rptr; static char replybuf[256]; /* Make space for auth_id if this is the first authentication * of the session */ if (!id) { *idptr = id = (auth_id *) malloc(sizeof (auth_id)); if (!id) { *reply = err_nomem; return -1; } id->level = AUTH_NONE; strncpy(id->user, anonymous, sizeof(id->user)); id->state = NULL; } /* copy in the user-id */ strcpy(id->user, user); /* construct the reply to be sent back to the user */ if (olduser) { /* Write a reply that mentions the switch-user operation */ strcpy(replybuf, "Administrator switch from user `"); rptr = beautify_copy(replybuf + strlen(replybuf), olduser); strcpy(rptr, "' to user `"); rptr = beautify_copy(replybuf + strlen(replybuf), user); strcpy(rptr, "' successful."); } else { strcpy(replybuf, "User `"); rptr = beautify_copy(replybuf + strlen(replybuf), user); strcpy(rptr, "' Logged in"); } *reply = replybuf; /* determine the authorization level */ id->level = AUTH_USER; if (option_lookup("", opt_alladmin, 1, id->user)) { id->level = AUTH_ADMIN; } /* Get an authentication state from the libcyrus "auth" module * (not to be confused the the IMSP authize module in this file). * This is needed for acl_myrights(). * Free id->state in case this isn't the first authentication this session. */ if (id->state) auth_freestate(id->state); id->state = auth_newstate(user, NULL); return 0; } /* * Decide whether the current user (as set in "id") is allowed to * "switch-user" to become an alternate user (specified in "user"). * * If the current id is an administrator, * "id" is untouched, * "reply" is set to a success message * 1 is returned. * Otherwise, * "id" and "reply" is left alone * 0 is returned. */ int auth_switchuser(auth_id *id, char *user, char **olduser) { int retval = 0; *olduser = NULL; /* Have we authenticated yet and are we an administrator? */ if(id && (id->level == AUTH_ADMIN)) { *olduser = strdup(auth_username(id)); retval = 1; } return retval; } /* this frees any resources used by an auth_id, it must zero out passwords * and will be called before the program exits. If the argument is NULL, * no action should be taken. */ void auth_free(auth_id *id) { if (id) { if (id->state) auth_freestate(id->state); free((char *)id); } } /* * Return the libcyrus authentication state from the given authorization state */ struct auth_state * auth_get_state(id) auth_id *id; { return (id ? id->state : NULL); } /* Return the user name of an identity. The user name is used to identify * the appropriate mailboxes/bb-subscriptions/options/address-book/etc to * use. It is also used for error messages. The string may not be longer * than AUTH_USERMAX. * If "id" is NULL, this should return a string representing an anonymous user. */ char * auth_username(auth_id *id) { return (id ? id->user : anonymous); } /* return the access level for a given id */ int auth_level(auth_id *id) { return (id ? id->level : AUTH_NONE); } cyrus-imspd-v1.8/imsp/authize.h0100644004310100000120000001143107732657011015766 0ustar shadowstaff#ifndef __authize_h #define __authize_h /* authize.h -- definitions for authorization API * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 6/28/93 */ #include "auth.h" /* for struct auth_state */ /* maximum length for a user name */ #define AUTH_USERMAX 63 /* the option we keep administrators in */ extern char opt_alladmin[]; /* levels of authentication * AUTH_NONE * This is for an anonymous user, who is permitted to locate bboards, and * view the values of global options. * AUTH_SUBS * This is for a user who may switch to any user to view their * subscriptions, but may not change anything. * AUTH_USER * This is standard authentication, giving user access to their own * options, subscriptions, address book, etc. * AUTH_BB * This allows the user to freely manipulate bboards. * AUTH_ADMIN * This allows the user full access to everything. */ #define AUTH_NONE 0 #define AUTH_SUBS 1 #define AUTH_USER 2 #define AUTH_BB 3 #define AUTH_ADMIN 4 /* The contents of this structure must not be accessed outside of the * auth_ module. It may be variable sized. */ typedef struct auth_id { int level; char user[AUTH_USERMAX]; struct auth_state *state; } auth_id; /* Generate an auth_id from a user name * This routine no longer does password validation, so the caller must * only use this routine after a successful authentication. * "idptr" is set to the new IMSP authentication structure * "user" is the IMSP login name, and points to a dynamically allocated * string which may be freed by the caller. * "reply" is set to a success or failure message to be sent to the user * (may not contain CR or LF characters) * Returns -1 for malloc failures, otherwise 0 for success */ int auth_login(auth_id **idptr, const char *user, char *olduser, const char **reply); /* * Decide whether the current user (as set in "id") is allowed to * "switch-user" to become an alternate user (specified in "user"). * * If the current id is an administrator, * "id" is untouched, * "reply" is set to a success message * 1 is returned. * Otherwise, * "id" and "reply" is left alone * 0 is returned. */ int auth_switchuser (auth_id *id, char *user, char **olduser); /* this frees any resources used by an auth_id, it must zero out passwords * and will be called before the program exits. If the argument is NULL, * no action should be taken. */ void auth_free(auth_id *id); /* * Return the libcyrus authentication state from the given authorization state */ struct auth_state *auth_get_state(auth_id *id); /* Return the user name of an identity. The user name is used to identify * the appropriate mailboxes/bb-subscriptions/options/address-book/etc to * use. It is also used for error messages. The string may not be longer * than AUTH_USERMAX. * If "id" is NULL, this should return a string representing an anonymous user. */ char *auth_username(auth_id *id); /* return the access level for a given id */ int auth_level(auth_id *id); #endif cyrus-imspd-v1.8/imsp/bb.c0100644004310100000120000011371107765430215014700 0ustar shadowstaff/* bb.c -- bboard subscriptions/update/location databases * * (C) Copyright 1993-1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Chris Newman * Start Date: 5/4/93 */ #include #include #include #include "glob.h" #include "util.h" #include "syncdb.h" #include "option.h" #include "dispatch.h" #include "im_util.h" #include "authize.h" #include "imap_client.h" #include "bb.h" #include "acl.h" /* import from OS: */ extern char *malloc(), *realloc(); /* name of mailboxes database */ static char mboxdb[] = "mailboxes"; static char newdb[] = "new"; static char changedb[] = "changed"; /* name of user's inbox */ static char inbox[] = "INBOX"; /* options used */ static char opt_hostlist[] = "imsp.imap.servers"; static char opt_newhost[] = "imsp.new.mailbox.servers"; /* proxy protocol */ static char proxy_list[] = "LIST"; static char proxy_acl[] = "ACL"; static char proxy_dolist[] = "%a LIST \"\" *\r\n"; static char proxy_getacl[] = "%a GETACL MAILBOX %s\r\n"; static char proxy_create[] = "%a CREATE %s%a%a\r\n"; static char proxy_delete[] = "%a DELETE %s\r\n"; static char proxy_rename[] = "%a RENAME %s %s\r\n"; static char proxy_setacl[] = "%a SETACL MAILBOX %s %s %s\r\n"; static char proxy_delacl[] = "%a DELETEACL MAILBOX %s %s\r\n"; /* value for an unspecified update string */ static char noinfosub[] = "1 0"; /* proxy replies */ static char rpl_noimap[] = "NO no available IMAP server to create"; static char rpl_dbfailure[] = "NO failed to modify mailbox list"; static char rpl_exists[] = "%a NO mailbox `%p' already exists\r\n"; static char rpl_inval[] = "NO invalid mailbox name"; static char rpl_notexists[] = "%a NO mailbox `%p' not found\r\n"; static char rpl_norename[] = "%a NO can't rename mailbox `%p' since mailbox `%p' already exists\r\n"; static char rpl_noreplace[] = "%a NO can't replace mailbox `%p' since mailbox `%p' doesn't exist\r\n"; static char rpl_wronghost[] = "%a NO mailbox `%p' is not located on that IMAP server\r\n"; static char rpl_badhost[] = "NO can't create mailbox on that host"; static char rpl_imapconn[] = "NO connection to IMAP server failed"; static char rpl_notsupported[] = "NO command not suppported at this site"; static char rpl_nomem[] = "NO IMSP server out of memory"; static char rpl_norep[] = "NO IMSP server does not support replicated mailboxes"; static char rpl_nocauth[] = "%a NO not authorized to create mailbox `%p'\r\n"; static char rpl_nodauth[] = "%a NO not authorized to delete mailbox `%p'\r\n"; static char rpl_norauth[] = "%a NO not authorized to rename mailbox `%p' to `%p'\r\n"; static char rpl_noaauth[] = "%a NO not authorized to change rights on mailbox `%p'\r\n"; static char rpl_okcreate[] = "OK Create of non-terminal names is unnecessary"; /* handler for getacl */ typedef struct getacl_handler { im_handler hand; char *entry, *mbox; int used, size, num, mlen; } getacl_handler; /* handler procedure to add an ACL entry to a mailbox entry */ static void add_acl(hand, val, con) getacl_handler *hand; int val; im_conn *con; { char *value, *bits; int len, result; /* make sure it's a "MAILBOX" acl for the right mailbox: */ if (strncasecmp(con->buf.upos, "MAILBOX ", 8) || !hand->entry) return; con->buf.upos += 8; value = copy_astring(&con->buf, 0); if (!value) return; result = strncasecmp(value, hand->mbox, hand->mlen); free(value); if (result) return; /* get the ACL */ value = copy_astring(&con->buf, 0); if (!value) return; bits = get_atom(&con->buf); if (!bits) { free(value); return; } len = strlen(value) + strlen(bits) + 2; while (hand->size - hand->used < len) { hand->entry = realloc(hand->entry, hand->size += 256); if (!hand->entry) { free(value); return; } } sprintf(hand->entry + hand->used, "%s\t%s\t", value, bits); ++hand->num; free(value); hand->used += len; } /* do a proxy GETACL command */ static char *bb_addacl(db, con, mbox, base, size) char *db; im_conn *con; char *mbox, **base; long *size; { getacl_handler h; char *reply; int result; imap_inithandler(&h.hand, proxy_acl, add_acl); h.entry = *base; h.mbox = mbox; h.mlen = strlen(mbox); h.num = 0; h.used = strlen(h.entry); h.size = *size; imap_addhandler(con, &h.hand); result = im_send(&con->buf, con->lit, proxy_getacl, con->tag, mbox); if (result == 0) reply = imap_wait(con); if (con->lit[0].ptr) free(con->lit[0].ptr); imap_removehandler(con, proxy_acl); if (result != 0 || !reply) { reply = rpl_imapconn; } else { if (reply[0] == 'B') { reply = rpl_notsupported; } else if (reply[0] == 'O' && reply[1] == 'K') { reply = h.entry ? NULL : rpl_nomem; if (sdb_set(db, mbox, SDB_ICASE, h.entry) < 0) { reply = rpl_dbfailure; } } } *base = h.entry; *size = h.size; return (reply); } /* storage for new mailbox list used by bb_init/add_mailbox */ typedef struct list_handler { im_handler hand; char *mlist; int mused, msize, hostnum; } list_handler; #define MLIST_START_SIZE 1024 /* handler procedure to add an entry to the mailbox list */ static void add_mailbox(hand, val, con) list_handler *hand; int val; im_conn *con; { char *mbox = con->buf.upos; int len, sep_char = '\r'; /* for now, we ignore attributes */ while (*mbox && *mbox != ')') ++mbox; if (!*mbox || mbox[1] != ' ') return; mbox += 2; /* grab the sep_char */ if (*mbox == '"') { ++mbox; if (*mbox == '\\') ++mbox; sep_char = *mbox++; } else if (*mbox != 'N' && *mbox != 'n') { return; } while (*mbox && *mbox != ' ') ++mbox; /* grab the mailbox name */ if (*mbox != ' ') return; con->buf.upos = mbox + 1; mbox = copy_astring(&con->buf, 0); if (!mbox) return; len = strlen(mbox); /* add it to list */ if (len && hand->mlist && strcasecmp(mbox, inbox)) { while (hand->mlist && hand->msize - hand->mused <= len + 3) { hand->mlist = realloc(hand->mlist, hand->msize *= 2); } if (hand->mlist) { sprintf(hand->mlist + hand->mused, "%c%c%s", '0' + hand->hostnum, sep_char, mbox); hand->mused += len + 3; } } free(mbox); } /* initialize the toplevel mailbox list */ int bb_init() { option_list *hostlist = NULL; char *client, *response, *mbox, *value, *newval, *host; long size; im_conn **con; int result, hnum, len; list_handler hand; /* find IMAP hosts */ hostlist = option_getlist("", opt_hostlist, 1); if (!hostlist || !hostlist->count) { if (hostlist) option_freelist(hostlist); return (-1); } con = (im_conn **) malloc(sizeof (im_conn *) * hostlist->count); if (!con) { option_freelist(hostlist); return (-1); } /* set up mailbox list handler */ imap_inithandler(&hand.hand, proxy_list, add_mailbox); hand.mlist = malloc(hand.msize = MLIST_START_SIZE); if (!hand.mlist) { free((char *) con); option_freelist(hostlist); return (-1); } hand.mused = 0; /* loop through hosts, doing LIST */ hand.hostnum = -1; while (++hand.hostnum < hostlist->count) { /* check for IMAP client descriptor on hostname */ client = strchr(hostlist->item[hand.hostnum], '/'); if (client) *client++ = '\0'; /* connect to imap host */ con[hand.hostnum] = imap_connect(hostlist->item[hand.hostnum], NULL, 1); if (con[hand.hostnum] == NULL) break; /* add "LIST" handler */ imap_addhandler(con[hand.hostnum], &hand.hand); /* do a "LIST "" *" */ result = im_send(&con[hand.hostnum]->buf, NULL, proxy_dolist, con[hand.hostnum]->tag); if (result == 0) response = imap_wait(con[hand.hostnum]); /* clean up & exit on error */ imap_removehandler(con[hand.hostnum], proxy_list); if (result < 0 || !response || response[0] != 'O' || response[1] != 'K') { break; } } sdb_delete(newdb); if (hand.hostnum < hostlist->count) { result = -1; } else if (sdb_create(newdb) != 0 || sdb_writelock(newdb, NULL, SDB_ICASE) != 0) { hand.hostnum = 0; result = -1; } else { /* loop through mailboxes doing GETACL */ mbox = hand.mlist; newval = NULL; size = 0; while (mbox - hand.mlist < hand.mused) { mbox += 2; if (sdb_get(newdb, mbox, SDB_ICASE, &value) >= 0 && value != NULL) { /*XXX: replication: modify entry to add new host */ } else { /* add new entry */ hnum = mbox[-2] - '0'; host = hostlist->item[hnum]; len = 8 + strlen(host); if (size < len) { if (newval) free(newval); newval = malloc(size = len + 256); if (!newval) break; } snprintf(newval, size, "* %c (%s) ", mbox[-1], host); response = bb_addacl(newdb, con[hnum], mbox, &newval, &size); if (response) break; } while (*mbox++); } result = 0; if (response || !newval) result = -1; if (newval) free(newval); } /* clean up everything */ for (hnum = 0; hnum < hostlist->count; ++hnum) { if (con[hnum]) imap_close(con[hnum]); } if (hand.mlist) free(hand.mlist); free((char *) con); if (!result) { /* copy over new mailboxes database */ sdb_create(mboxdb); sdb_unlock(newdb, NULL, SDB_ICASE); sdb_copy(newdb, mboxdb, SDB_ICASE); sdb_delete(newdb); } if (hand.hostnum >= hostlist->count) { sdb_unlock(newdb, NULL, SDB_ICASE); sdb_delete(newdb); } option_freelist(hostlist); return (result); } /* get/parse info about a bboard */ int bb_get(name, uid, loc, acl, sep_char) char *name; char **uid, **loc, **acl; char *sep_char; { char *value = NULL; if (name) { sdb_get(mboxdb, name, SDB_ICASE, &value); } else { value = *uid; } if (value) { if (uid) *uid = value; while (*value && *value++ != ' '); /* skip last-uid */ if (*value && sep_char) *sep_char = *value++; while (*value && *value++ != ' '); /* skip sep-char/flags */ if (loc) *loc = value; value = strchr(value, ')'); /* skip to end of location list */ if (value && acl) { *acl = value + 2; } } return (value ? 0 : -1); } /* get the rights to a bboard */ long bb_rights(id, name, acl) struct auth_state *id; char *name, *acl; { long rights = acl_myrights(id, acl); char *user = auth_username(id); int len = strlen(user); if (auth_level(id) >= AUTH_BB) { rights |= ACL_ALL; } else if (!strcasecmp(inbox, name) || (!strncasecmp("user.", name, 5) && !strncasecmp(user, name + 5, len) && (name[5+len] == '.' || name[5+len] == '\0'))) { rights |= ACL_LOOKUP | ACL_ADMIN; } return (rights); } /* check if we have create rights in parent * returns 0 if we do, -1 otherwise */ static int bb_parentcreate(id, name, ploc) struct auth_state *id; char *name; char **ploc; { int result = -1; char *dot; char *loc, *acl; if (auth_level(id) >= AUTH_BB) result = 0; if (ploc) *ploc = NULL; dot = strrchr(name, '.'); while (dot) { *dot = '\0'; if (bb_get(name, NULL, &loc, &acl, NULL) == 0) { *dot = '.'; if (bb_rights(id, name, acl) & ACL_CREATE) result = 0; if (ploc) *ploc = loc; break; } *dot = '.'; while (--dot >= name && *dot != '.'); if (dot < name) dot = NULL; } return (result); } /* check if any child of has lookup rights * returns -1 on failure, 0 on success */ static int bb_childlookup(id, name, end, len) struct auth_state *id; sdb_keyvalue *name, *end; int len; { char *key = name->key, *acl; while (name < end && !strncasecmp(key, name->key, len)) { if (name->key[len] == '.') { bb_get(NULL, &name->value, NULL, &acl, NULL); if (bb_rights(id, name->key, acl) & ACL_LOOKUP) { return (0); } } ++name; } return (-1); } /* returns 0 if we already did a given partial match */ static int bb_didpartial(base, name, len) sdb_keyvalue *base, *name; int len; { char *key = name->key; int result = -1; if (len >= 0) { while (--name >= base && strncasecmp(key, name->key, len) == 0) { if (name->key[len] == '.' || name->key[len] == '\0') { result = 0; break; } } } return (result); } /* convert uid string to number */ static unsigned long uidval(uid) char *uid; { unsigned long result = 0; while (isspace(*uid)) ++uid; while (isdigit(*uid)) result = result * 10 + (*uid++ - '0'); return (result); } /* initialize bboard subscriptions */ int bb_subsinit(user) char *user; { char dbname[256]; /* check if it already exists */ snprintf(dbname, sizeof(dbname), "user/%s/subs", user); return (sdb_check(dbname) == 0 || sdb_create(dbname) == 0 ? 0 : -1); } /* subscribe/unsubscribe to a bboard * returns -1 on failure, 0 on success, 1 if already subscribed/unsubscribed */ #ifdef __STDC__ int bb_subscribe(struct auth_state *id, char *name, int subscribe) #else int bb_subscribe(id, name, subscribe) struct auth_state *id; char *name; int subscribe; #endif { char *user, *value, *bbvalue, *newval, *acl; int result, result1; char dbname[256], iboxname[256]; /* get old value / verify bboard name / verify proper rights */ user = auth_username(id); if (!strcasecmp(inbox, name)) { snprintf(iboxname, sizeof(iboxname), "user.%s", user); name = iboxname; } snprintf(dbname, sizeof(dbname), "user/%s/subs", user); if (sdb_writelock(dbname, name, SDB_ICASE) < 0) return (-1); if (sdb_get(dbname, name, SDB_ICASE, &value) < 0 || bb_get(name, &bbvalue, NULL, &acl, NULL) < 0 || (!value && !(bb_rights(id, name, acl) & (ACL_LOOKUP|ACL_READ)))) { sdb_unlock(dbname, name, SDB_ICASE); return (-1); } /* check for silly requests */ if (((!value || *value == '0') && !subscribe) || (value && *value == '1' && subscribe)) { sdb_unlock(dbname, name, SDB_ICASE); return (1); } /* create new value & change it */ newval = malloc(value ? strlen(value) + 1 : sizeof (noinfosub)); if (newval == NULL) { sdb_unlock(dbname, name, SDB_ICASE); return (-1); } strcpy(newval, value ? value : noinfosub); *newval = subscribe ? '1' : '0'; result = sdb_set(dbname, name, SDB_ICASE, newval); result1 = sdb_unlock(dbname, name, SDB_ICASE); free(newval); if (!result) result = result1; return (result); } /* finish mailbox matching */ void bb_matchdone(state) bb_state *state; { if (state->pglob) glob_free(&state->pglob); if (state->bbsub) free((char *) state->bbsub); if (state->subs) { sdb_freematch(state->subs, state->subend - state->subs, 1); } if (state->bb) sdb_freematch(state->bb, state->bbend - state->bb, 0); memset((char *) state, 0, sizeof (bb_state)); } /* begin a match * returns -1 on failure */ int bb_matchstart(state, user, pat) bb_state *state; char *user, *pat; { char *end; int bbcount, subcount; char dbname[256]; /* initialize match state */ memset((char *) state, 0, sizeof (bb_state)); snprintf(state->inboxname, sizeof(state->inboxname), "user.%s", user); state->inboxlen = strlen(state->inboxname); state->lastmin = -1; end = pat + strlen(pat) - 1; /* check if inbox matches */ state->pglob = glob_init(pat, GLOB_ICASE | GLOB_HIERARCHY); if (glob_test(state->pglob, inbox, 5, NULL) < 0) { state->inboxdone = 1; } /* do the match */ if (*end == '%') { /* for partial matches, we save the glob pattern and pass a '*' * down to the db level, since the db level doesn't do partial * matches. */ *end = '*'; } else { glob_free(&state->pglob); } if (sdb_match(mboxdb, pat, GLOB_ICASE | GLOB_HIERARCHY, NULL, 0, &state->bb, &bbcount) >= 0) { state->bbend = state->bb + bbcount; state->bbpos = state->bb; snprintf(dbname, sizeof(dbname), "user/%s/subs", user); if (sdb_match(dbname, pat, GLOB_ICASE | GLOB_HIERARCHY, NULL, 1, &state->subs, &subcount) >= 0) { state->subend = state->subs + subcount; state->subpos = state->subs; state->bbsub = (sdb_keyvalue **) malloc(sizeof (sdb_keyvalue *) * (subcount + 1)); } } /* done -- check for success */ if (state->pglob) *end = '%'; if (state->bbsub != NULL) { state->bbsubpos = state->bbsub; return (0); } bb_matchdone(state); return (-1); } /* check if any matching subscriptions have been renamed or deleted * (will call bb_subscribe to change entries as necessary) * must be called after bb_matchstart and before bb_match * *newname will be set to NULL in case *oldname was deleted. * *autosub will be set to 1 if the user's subscription status to *newname * was changed. Otherwise *autosub will be set to 0. * returns -1 on fatal error (no need to call bb_matchdone) * returns 0 if matching subscriptions are fully verified. * returns 1 if a rename/delete is being returned. Call must call * bb_matchverify again. */ int bb_matchverify(state, id, pat, oldname, newname, autosub) bb_state *state; struct auth_state *id; char *pat, **oldname, **newname; int *autosub; { char dbname[256]; char *key, *end, *user, *value; int cmp, result, wassub, subcount; /* set database name so we have it if needed */ user = auth_username(id); snprintf(dbname, sizeof(dbname), "user/%s/subs", user); /* build bbsubpos array & check for deleted/renamed bboards */ while (state->subpos < state->subend) { key = state->subpos->key; cmp = -1; while (state->bbpos < state->bbend && (cmp = strcmp(key, state->bbpos->key)) > 0) { ++state->bbpos; } /* we have a deleted/renamed bboard */ if (cmp) { state->subchgflag = 1; wassub = *state->subpos->value == '1'; *oldname = key; *newname = NULL; *autosub = 0; if (sdb_writelock(dbname, key, SDB_ICASE) >= 0) { sdb_remove(dbname, key, SDB_ICASE); sdb_unlock(dbname, key, SDB_ICASE); } ++state->subpos; if (!wassub) continue; sdb_get(changedb, *oldname, SDB_ICASE, newname); if (*newname) { if (sdb_get(mboxdb, *newname, SDB_ICASE, &value) >= 0 && value == NULL) { /* bboard renamed and deleted */ *newname = NULL; if (sdb_writelock(changedb, *oldname, SDB_ICASE) >= 0) { sdb_remove(changedb, *oldname, SDB_ICASE); sdb_unlock(changedb, *oldname, SDB_ICASE); } } else if (bb_subscribe(id, *newname, 1) == 0) { *autosub = 1; } } return (1); } *state->bbsubpos++ = state->bbpos++; ++state->subpos; } *state->bbsubpos = state->bbend; /* if things changed, we need to rebuild subs & state->bbsub */ if (state->subchgflag) { state->bbpos = state->bb; end = pat + strlen(pat) - 1; if (state->pglob) *end = '*'; /* assume user hasn't changed pat */ sdb_freematch(state->subs, state->subend - state->subs, 1); if (sdb_match(dbname, pat, SDB_ICASE, NULL, 0, &state->subs, &subcount) < 0) { if (state->pglob) *end = '%'; bb_matchdone(state); return (-1); } if (state->pglob) *end = '%'; state->subend = state->subs + subcount; state->subpos = state->subs; free((char *) state->bbsub); state->bbsub = (sdb_keyvalue **) malloc(sizeof (sdb_keyvalue *) * (subcount + 1)); if (!state->bbsub) { bb_matchdone(state); return (-1); } state->bbsubpos = state->bbsub; state->subchgflag = 0; result = bb_matchverify(state, id, pat, oldname, newname, autosub); if (result < 0) return (result); /* we fixed it, but it's still broken. Give up. */ if (result || state->subchgflag) { bb_matchdone(state); return (-1); } } /* things are groovy! Reset and get ready to go */ state->bbpos = state->bb; state->subpos = state->subs; state->bbsubpos = state->bbsub; return (0); } /* get the next match * returns *name, or NULL * *name and *loc could vanish if any other db calls are made * if subonly is set, only subscribed bboards will be returned. */ #ifdef __STDC__ char *bb_match(bb_state *state, struct auth_state *id, char **name, char **loc, char *sep_char, int *flags, int subonly) #else char *bb_match(state, id, name, loc, sep_char, flags, subonly) bb_state *state; struct auth_state *id; char **name, **loc; char *sep_char; int *flags; int subonly; #endif { char *uid, *acl, *key, *value; int len, mlen = -1, cmp; char dbname[256]; /* turn '\0' back into '.' from partial matches */ if (state->part) { *state->part = '.'; state->part = NULL; } /* check for inbox */ *flags = 0; if (!state->inboxdone) { snprintf(dbname, sizeof(dbname), "user/%s/subs", auth_username(id)); if (sdb_get(mboxdb, state->inboxname, SDB_ICASE | SDB_QUICK, &uid) >= 0 && bb_get(NULL, &uid, loc, &acl, sep_char) == 0 && (!subonly || sdb_get(dbname, state->inboxname, SDB_ICASE | SDB_QUICK, &value) < 0 || value == NULL || *value == '1')) { key = inbox; } else { state->inboxdone = 1; } } /* keep looking until we find a bboard we have lookup rights to */ while (state->inboxdone) { if (subonly) state->bbpos = *state->bbsubpos; /* loop through uninteresting bboards */ while (state->bbpos < state->bbend) { if (!subonly || *state->subpos->value == '1') { key = state->bbpos->key; if (!state->pglob) break; if (state->lastmin < 0) state->lastmin = 0; len = strlen(key); if ((mlen = glob_test(state->pglob, key, len, &state->lastmin)) >= 0 && bb_didpartial(state->bb, state->bbpos, mlen) < 0) { if (mlen == len) mlen = state->lastmin = -1; break; } } if (state->lastmin < 0) { if (subonly) { ++state->subpos; state->bbpos = *++state->bbsubpos; } else if (++state->bbpos > *state->bbsubpos) { ++state->subpos, ++state->bbsubpos; } } } if (state->bbpos == state->bbend) return (NULL); /* make sure it's not inbox & check LOOKUP right */ cmp = strncasecmp(state->inboxname, key, state->inboxlen); if (mlen >= 0 || cmp != 0 || key[state->inboxlen] != '\0') { uid = state->bbpos->value; bb_get(NULL, &uid, loc, &acl, sep_char); if ((cmp == 0 && key[state->inboxlen] == '.') || (mlen < 0 && (bb_rights(id, key, acl) & ACL_LOOKUP)) || (mlen >= 0 && bb_childlookup(id, state->bbpos, state->bbend, mlen) == 0)) { break; } } if (state->lastmin < 0) { if (subonly) { ++state->subpos; state->bbpos = *++state->bbsubpos; } else if (++state->bbpos > *state->bbsubpos) { ++state->subpos, ++state->bbsubpos; } } } /* set flags */ *name = key; /* if no messages on bboard, we're not interested */ if (uid[0] == '0' && uid[1] == ' ') *flags |= BB_UNMARKED; /* check for NOINFERIOR: * if it's the INBOX or * the user doesn't have create rights, * and there are no inferiors to which the user has lookup rights, * then we set the NOINFERIOR flag */ if (!state->inboxdone || (!(bb_rights(id, key, acl) & ACL_CREATE) && bb_childlookup(id, state->bbpos, state->bbend, mlen ? mlen : strlen(key)) < 0)) { *flags |= BB_NOINFERIOR; } /* check against subscription list */ if (state->inboxdone && *state->bbsubpos == state->bbpos) { if (*state->subpos->value == '1') { *flags |= BB_SUBSCRIBED; } /* if we have info about a non-empty bboard, check uids */ if (!(*flags & BB_UNMARKED) && (uid[0] != '*' || uid[1] != ' ')) { if (uidval(state->subpos->value + 2) >= uidval(uid)) { *flags |= BB_UNMARKED; } else { *flags |= BB_MARKED; } } if (state->lastmin < 0) { ++state->subpos, ++state->bbsubpos; } } /* if a partial match, don't allow select, dump all other flags, * and truncate name appropriately */ if (mlen >= 0) { /* truncate name for partial match */ *flags = BB_NOSELECT; key[mlen] = '\0'; state->part = key + mlen; } /* flag as done, and advance to next */ if (!state->inboxdone) { state->inboxdone = 1; } else if (state->lastmin < 0) { ++state->bbpos; } return (key); } /* do a create command, return IMSP reply string */ #ifdef __STDC__ char *bb_create(struct auth_state *id, char *mbox, int count, char *hostlist) #else char *bb_create(id, mbox, count, hostlist) struct auth_state *id; char *mbox; int count; char *hostlist; #endif { char *reply = NULL, *host = NULL, *part = NULL; char *value, *loc; option_list *olist = NULL; int result, created = 0; long size; im_conn *con; /* don't allow create INBOX */ if (!strcasecmp(mbox, inbox)) return (rpl_inval); /*XXX: eventually need to add replication support */ if (count > 1) return (rpl_norep); if (mbox[strlen(mbox) - 1] == '.') return (rpl_okcreate); /* check if mailbox already exists */ if (sdb_writelock(mboxdb, mbox, SDB_ICASE) < 0) return (rpl_dbfailure); value = NULL; sdb_get(mboxdb, mbox, SDB_ICASE, &value); if (value != NULL) { reply = rpl_exists; } else if (bb_parentcreate(id, mbox, &loc) < 0) { reply = rpl_nocauth; } else if (!count) { hostlist = loc; } /* get the host to use */ if (!reply) { if (hostlist) { /* get first host from hostlist */ host = copy_get_partition(hostlist, &part); if (hostlist != loc && option_lookup("", opt_hostlist, 0, host) < 1) { reply = rpl_badhost; } } else if ((olist = option_getlist("", opt_newhost, 1)) && olist->count > 0) { host = olist->item[0]; } if (!host) reply = rpl_noimap; } /* connect to IMAP server */ if (!reply && !(con = imap_connect(host, id, 0))) { reply = rpl_imapconn; } /* send CREATE command */ if (!reply) { result = im_send(&con->buf, con->lit, proxy_create, con->tag, mbox, part ? " " : "", part ? part : ""); if (result < 0 || !(reply = imap_wait(con))) { reply = rpl_imapconn; } else if (reply[0] == 'B') { reply = rpl_notsupported; } else if (reply[0] == 'O' && reply[1] == 'K') { reply = NULL; created = 1; } if (con->lit[0].ptr) free(con->lit[0].ptr); } /* send GETACL command */ value = NULL; if (!reply) { size = strlen(host) + 256; value = malloc(size); if (!value) { reply = rpl_nomem; } else { snprintf(value, size, "* . (%s) ", host); reply = bb_addacl(mboxdb, con, mbox, &value, &size); } } /* cleanup */ if (sdb_unlock(mboxdb, mbox, SDB_ICASE) < 0 && !reply) { reply = rpl_dbfailure; } if (created && reply) { /* if we created the mailbox, but something later failed, try to * delete it */ if (im_send(&con->buf, con->lit, proxy_delete, con->tag, mbox) == 0) { imap_wait(con); } if (con->lit[0].ptr) free(con->lit[0].ptr); } if (value) free(value); if (olist) { option_freelist(olist); } else if (host) { free(host); } return (reply); } /* do a proxy delete command * host is usually NULL * returns a status reply string */ char *bb_delete(id, mbox, host) struct auth_state *id; char *mbox, *host; { char *reply = NULL, *value = NULL, *myhost = host; char *scan, *uid, *loc, *acl; int dbdeleted = 0, len; im_conn *con; /* don't allow delete of inbox */ if (!strcasecmp(inbox, mbox)) return (rpl_inval); /* check if mailbox exists */ if (sdb_writelock(mboxdb, mbox, SDB_ICASE) < 0) return (rpl_dbfailure); if (bb_get(mbox, &uid, &loc, &acl, NULL) < 0) { reply = rpl_notexists; } else { /* check delete rights */ /*XXX: need to add support for replication here */ if (!(bb_rights(id, mbox, acl) & ACL_DELETE)) { reply = rpl_nodauth; } } /* get hostname & connect to IMAP server */ if (!reply) { if (myhost) { len = strlen(myhost); scan = loc; do { while (*scan == '(' || *scan == ' ') ++scan; if (!strncasecmp(myhost, scan, len)) break; while (*scan && *scan != ')' && *scan != ' ') ++scan; } while (*scan && *scan != ')'); if (!*scan || *scan == ')') reply = rpl_wronghost; } else { myhost = copy_get_partition(loc, NULL); } if (!myhost) { reply = rpl_nomem; } else if (!(con = imap_connect(myhost, id, 0))) { reply = rpl_imapconn; } } /* remove mailbox from local db, keeping a record in case of error */ if (!reply) { if ((value = malloc(strlen(uid) + 1)) == NULL) { reply = rpl_nomem; } else { strcpy(value, uid); if (sdb_remove(mboxdb, mbox, SDB_ICASE) < 0) { reply = rpl_dbfailure; } else { if (sdb_unlock(mboxdb, mbox, SDB_ICASE) < 0) { reply = rpl_dbfailure; } else { dbdeleted = 1; } } } } /* send DELETE command */ if (!reply) { if (im_send(&con->buf, con->lit, proxy_delete, con->tag, mbox) < 0 || !(reply = imap_wait(con))) { reply = rpl_imapconn; } else if (reply[0] == 'B') { reply = rpl_notsupported; } } /* if we failed to delete the mailbox, but we removed it from our db, * try to put it back */ if ((reply[0] != 'O' || reply[1] != 'K') && dbdeleted && sdb_writelock(mboxdb, mbox, SDB_ICASE) == 0) { dbdeleted = 0; sdb_set(mboxdb, mbox, SDB_ICASE, value); } /* clean up */ if (!dbdeleted) sdb_unlock(mboxdb, mbox, SDB_ICASE); if (value) free(value); if (myhost != host) free(myhost); return (reply); } /* do a proxy rename or replace command * returns reply string */ char *bb_rename(id, oldname, newname, rflag) struct auth_state *id; char *oldname; char *newname; int rflag; { char *reply = NULL, *host = NULL, *iname = NULL; char *value, *uid, *loc, *acl; int didrename = 0, result, count, i; im_conn *con; sdb_keyvalue *kv = NULL; char dbname[256]; /* deal with inbox */ if (!strcasecmp(newname, inbox)) return (rpl_inval); if (!strcasecmp(oldname, inbox)) { int inamelen = strlen(auth_username(id)) + 6; iname = malloc(inamelen); if (!iname) return (rpl_nomem); snprintf(iname, inamelen, "user.%s", auth_username(id)); oldname = iname; } /* lock db entries */ if (sdb_writelock(mboxdb, oldname, SDB_ICASE) < 0) return (rpl_dbfailure); if (sdb_writelock(mboxdb, newname, SDB_ICASE) < 0) { sdb_unlock(mboxdb, oldname, SDB_ICASE); return (rpl_dbfailure); } /* make sure newname doesn't exist and check access rights */ value = NULL; sdb_get(mboxdb, newname, SDB_ICASE, &value); if (rflag) { if (value == NULL) { reply = rpl_noreplace; } } else if (value != NULL) { reply = rpl_norename; } else if (bb_parentcreate(id, newname, 0) < 0) { reply = rpl_norauth; } /* make sure oldname exists and check access rights */ if (!reply) { if (bb_get(oldname, &uid, &loc, &acl, NULL) < 0) { reply = rpl_notexists; } else if (!(bb_rights(id, oldname, acl) & ACL_DELETE)) { reply = rpl_norauth; } } /* get host and connect to server */ if (!reply) { host = copy_get_partition(loc, NULL); if (!(con = imap_connect(host, id, 0))) { reply = rpl_imapconn; } } /* send RENAME command (or DELETE command if replacing) */ if (!reply) { result = im_send(&con->buf, con->lit, rflag ? proxy_delete : proxy_rename, con->tag, oldname, newname); if (result < 0 || !(reply = imap_wait(con))) { reply = rpl_imapconn; } else if (reply[0] == 'B') { reply = rpl_notsupported; } else if (reply[0] == 'O' && reply[1] == 'K') { didrename = 1; } if (con->lit[0].ptr) free(con->lit[0].ptr); } /* attempt to update the database */ if (didrename) { if (rflag == 0 && sdb_set(mboxdb, newname, SDB_ICASE, uid) < 0) { reply = rpl_dbfailure; } else if (iname) { if (bb_last(oldname, 0, NULL) < 0) { reply = rpl_dbfailure; } } else if (sdb_remove(mboxdb, oldname, SDB_ICASE) < 0) { reply = rpl_dbfailure; sdb_remove(mboxdb, newname, SDB_ICASE); } } /* unlock mbox db */ if (sdb_unlock(mboxdb, newname, SDB_ICASE) < 0 && didrename) { reply = rpl_dbfailure; } if (sdb_unlock(mboxdb, oldname, SDB_ICASE) < 0 && didrename) { reply = rpl_dbfailure; } if (didrename && reply != rpl_dbfailure && !iname) { /* update changed file on success */ sdb_create(changedb); if (sdb_writelock(changedb, NULL, SDB_ICASE) >= 0) { if (sdb_match(changedb, "*", SDB_ICASE | GLOB_SUBSTRING, oldname, 1, &kv, &count)==0) { /* we have some old entries to update */ for (i = count; i--; ) { if (!strcasecmp(kv[count].key, newname)) { sdb_remove(changedb, kv[count].key, SDB_ICASE); } else { sdb_set(changedb, kv[count].key, SDB_ICASE, newname); } } } sdb_set(changedb, oldname, SDB_ICASE, newname); sdb_unlock(changedb, NULL, SDB_ICASE); if (kv) sdb_freematch(kv, count, 1); } /* update user's subscriptions file */ snprintf(dbname, sizeof(dbname), "user/%s/subs", auth_username(id)); if (sdb_get(dbname, oldname, SDB_ICASE, &value) >= 0 && value != NULL) { bb_subscribe(id, newname, 1); bb_subscribe(id, oldname, 0); } } /* cleanup */ if (didrename && reply == rpl_dbfailure && !rflag) { /* if we did the rename, but the db update failed, try to undo */ result = im_send(&con->buf, con->lit, proxy_rename, con->tag, newname, oldname); if (result == 0) imap_wait(con); if (con->lit[0].ptr) free(con->lit[0].ptr); } if (host) free(host); if (iname) free(iname); return (reply); } /* set access control list */ char *bb_setacl(id, mbox, ident, rights) struct auth_state *id; char *mbox, *ident, *rights; { char *uid, *loc, *acl; char *reply = NULL, *host = NULL, *value = NULL; long size; im_conn *con; /* lock entry */ if (sdb_writelock(mboxdb, mbox, SDB_ICASE) < 0) { return (rpl_dbfailure); } if (bb_get(mbox, &uid, &loc, &acl, NULL) < 0) { /* bboard lookup failed */ reply = rpl_notexists; } else if (!(bb_rights(id, mbox, acl) & ACL_ADMIN)) { /* verify administer rights failed */ reply = rpl_noaauth; } else if ((host = copy_get_partition(loc, NULL)) == NULL) { /* get hostname failed */ reply = rpl_nomem; } else if (!(con = imap_connect(host, id, 0))) { /* connect to imap server failed */ reply = rpl_imapconn; } else if (im_send(&con->buf, con->lit, rights ? proxy_setacl : proxy_delacl, con->tag, mbox, ident, rights) < 0) { /* send proxy command failed */ reply = rpl_imapconn; } else if (!(reply = imap_wait(con))) { /* server response failed */ reply = rpl_imapconn; } else if (reply[0] == 'B') { /* BAD -- IMAP server doesn't support SETACL */ reply = rpl_notsupported; } else if (reply[0] == 'O' && reply[1] == 'K') { /* setacl successful -- now we need to GETACL to update localdb */ size = acl - uid + 256; value = malloc(size); if (!value) { reply = rpl_nomem; } else { strncpy(value, uid, acl - uid); value[acl - uid] = '\0'; reply = bb_addacl(mboxdb, con, mbox, &value, &size); } } /* cleanup */ if (sdb_unlock(mboxdb, mbox, SDB_ICASE) < 0) { reply = rpl_dbfailure; } if (value) free(value); if (host) free(host); return (reply); } /* set the last read mark for a mailbox. May add mailbox to local db. * returns -1 on failure, 0 on success */ int bb_last(mbox, uid, host) char *mbox, *uid, *host; { char *old = NULL, *new = NULL, *scan; int ulen, result = -1, result1; long size; im_conn *con; /* lock entry */ if (sdb_writelock(mboxdb, mbox, SDB_ICASE) < 0) { return (-1); } /* check if entry exists */ if (sdb_get(mboxdb, mbox, SDB_ICASE, &old) >= 0) { if (old == NULL) { /* if entry doesn't exist, connect to server, get ACL, * and add to database */ size = strlen(uid) + strlen(host) + 256; if ((con = imap_connect(host, NULL, 1)) != NULL && (new = malloc(size)) != NULL) { snprintf(new, size, "%s . (%s) ", uid, host); if (bb_addacl(mboxdb, con, mbox, &new, &size) == NULL) { result = 0; } } } else { /* see if we can do it in place */ for (scan = old; *scan && *scan != ' '; ++scan); ulen = strlen(uid); if (scan - old == ulen) { new = old; strncpy(new, uid, ulen); } else { new = malloc(strlen(old) - (scan - old) + ulen + 1); if (new) { strcpy(new, uid); strcat(new, scan); } } /* update db if we have a new entry, and cleanup */ if (new) result = sdb_set(mboxdb, mbox, SDB_ICASE, new); } } /* cleanup */ result1 = sdb_unlock(mboxdb, mbox, SDB_ICASE); if (!result) result = result1; if (new && new != old) free(new); return (result); } /* set the seen mark for a mailbox. May add to subscription list, but * won't change subscription status. * returns -1 on failure, 0 on success */ int bb_seen(mbox, uid, user) char *mbox, *uid, *user; { char *value, *new = NULL; char dbname[256]; int result = -1, result1, newlen; /* set the db name */ snprintf(dbname, sizeof(dbname), "user/%s/subs", user); /* sanity check for existance of mbox & subscription list */ if (sdb_get(mboxdb, mbox, SDB_ICASE, &value) < 0 || !value || sdb_writelock(dbname, mbox, SDB_ICASE) < 0) { return (-1); } /* get old subscription status */ sdb_get(dbname, mbox, SDB_ICASE, &value); if (!value) value = "0"; /* set new value */ newlen = strlen(uid) + 3; new = malloc(newlen); if (new) { snprintf(new, newlen, "%c %s", *value, uid); result = sdb_set(dbname, mbox, SDB_ICASE, new); } /* clean up */ result1 = sdb_unlock(dbname, mbox, SDB_ICASE); if (!result) result = result1; if (new) free(new); return (result); } cyrus-imspd-v1.8/imsp/bb.h0100644004310100000120000001335607050633536014707 0ustar shadowstaff/* bb.h -- bboard subscriptions/update/location databases * * (C) Copyright 1993-1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Chris Newman * Start Date: 5/3/93 */ #include "auth.h" /* for struct auth_state */ /* structure to hold state for bb searches */ typedef struct bb_state { /* all fields are private to bb module */ sdb_keyvalue *bb, *bbpos, *bbend; /* start, position, end of bboard list */ sdb_keyvalue *subs, *subpos, *subend; /* ditto for subscription list */ /* The next two fields are a cool efficiency hack -- they keep a list * of pointers into the bb list for each subscription entry */ sdb_keyvalue **bbsub, **bbsubpos; int subchgflag; /* if a bboard was deleted/renamed */ int inboxdone; /* flag if inbox has been done */ /* this is only non-NULL when the LIST pattern ends in a %. It is used * to find partial matches */ glob *pglob; int lastmin; /* last minimum partial match */ char *part; /* pointer to partial match '.' set to '\0' */ int inboxlen; char inboxname[AUTH_USERMAX + 6]; } bb_state; /* status flags */ #define BB_SUBSCRIBED 0x01 /* user is subscribed to bboard */ #define BB_MARKED 0x02 /* bboard does contain unseen messages */ #define BB_UNMARKED 0x04 /* bboard doesn't contain unseen messages */ #define BB_NOSELECT 0x08 /* prefix to bboard */ #define BB_NOINFERIOR 0x10 /* can't have children appear */ /* shortcuts -- these pairs are mutually exclusive in this implementation: */ #define BB_STATE (BB_NOSELECT | BB_NOINFERIOR) #define BB_MARK (BB_MARKED | BB_UNMARKED) #ifdef __STDC__ /* bb_subsinit(user) * initialize bboard subscriptions for user */ int bb_subsinit(char *); /* bb_subscribe(id, name, subscribe) * subscribe/unsubscribe to a bboard * returns -1 on failure, 0 on success, 1 if already subscribed/unsubscribed */ int bb_subscribe(struct auth_state *, char *, int); /* bb_matchstart(state, user, pattern) * begin a match * returns -1 on failure */ int bb_matchstart(bb_state *, char *, char *); /* bb_matchverify(state, id, pattern, oldname, newname, autosub); * check if any matching subscriptions have been renamed or deleted * (will call bb_subscribe to change entries as necessary) * must be called after bb_matchstart and before bb_match * *newname will be set to NULL in case *oldname was deleted. * *autosub will be set to 1 if the user's subscription status to *newname * was changed. Otherwise *autosub will be set to 0. * returns -1 on fatal error (no need to call bb_matchdone) * returns 0 if matching subscriptions are fully verified. * returns 1 if a rename/delete is being returned. Call must call * bb_matchverify again. */ int bb_matchverify(bb_state *, struct auth_state *, char *, char **, char **, int *); /* bb_match(state, id, name, loc, flags, sep_char, subonly); * get the next match * returns *name, or NULL * *name and *loc could vanish if any other db calls are made * if subonly is set, only subscribed bboards will be returned. */ char *bb_match(bb_state *, struct auth_state *, char **, char **, char *, int *, int); /* finish mailbox matching */ void bb_matchdone(bb_state *); /* bb_create(id, mbox, hostcount, hostlist) * do proxy IMAP to create a new bboard * returns NULL on success, error message on failure */ char *bb_create(struct auth_state *, char *, int, char *); /* bb_delete(id, mbox, host) * do a proxy delete command * host is usually NULL * returns a status reply string */ char *bb_delete(struct auth_state *, char *, char *); /* bb_rename(id, oldname, newname, replace_flag) * do a proxy rename or a replace * returns a status reply string */ char *bb_rename(struct auth_state *, char *, char *, int); /* bb_setacl(id, mbox, ident, rights) * do a proxy SETACL/DELETEACL command * rights = NULL for DELETEACL */ char *bb_setacl(struct auth_state *, char *, char *, char *); /* bb_get(name, uid, hostlist, acl, sep_char) * get info about a bboard * returns -1 on failure, 0 on success */ int bb_get(char *, char **, char **, char **, char *); /* bb_last(mailbox, uid, host) * set the last read mark for a mailbox. May add mailbox to local db. * returns -1 on failure, 0 on success */ int bb_last(char *, char *, char *); /* bb_seen(mailbox, uid, user) * set the seen mark for a mailbox. May add to subscription list, but * won't change subscription status. * returns -1 on failure, 0 on success */ int bb_seen(char *, char *, char *); /* bb_rights(id, mailbox, acl) * returns the rights bitmask for the acl list */ long bb_rights(struct auth_state *, char *, char *); #else int bb_subscribe(), bb_matchstart(), bb_matchverify(), bb_get(); char *bb_match(), *bb_create(), *bb_delete(), *bb_rename(), *bb_setacl(); int bb_last(), bb_seen(), bb_subsinit(); long bb_rights(); #endif cyrus-imspd-v1.8/imsp/dispatch.c0100644004310100000120000003306607765430215016120 0ustar shadowstaff/* dispatch.c -- dispatch routines * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * SASL foo: Tim Martin * Start Date: 2/16/93 */ #include #include #include #include #include #include #include #include #include #ifdef AIX #include #endif #include "dispatch.h" #include #ifndef HAVE_GETDTABLESIZE #define getdtablesize() 32 #endif #ifndef MAX #define MAX(a, b) ((b) > (a) ? (b) : (a)) #endif #ifndef MIN #define MIN(a, b) ((b) < (a) ? (b) : (a)) #endif /* list of files to dispatch */ static dispatch_t *head; static fd_set read_set, write_set; static int nfds; static int max_idle_rd, max_idle_wr; static err_proc_t err_proc; /* do nothing error procedure */ static int errproc(type) int type; { return (1); } /* initialize dispatch module */ void dispatch_init() { FD_ZERO(&read_set); FD_ZERO(&write_set); head = (dispatch_t *) NULL; nfds = getdtablesize(); max_idle_rd = 0; max_idle_wr = 0; err_proc = errproc; } /* initialize a file buffer */ void dispatch_initbuf(fbuf, fd) fbuf_t *fbuf; int fd; { fbuf->fd = fd; fbuf->uend = fbuf->iptr = fbuf->ibuf; fbuf->ileft = MAX_BUF; fbuf->ocount = 0; fbuf->efunc = NULL; fbuf->dfunc = NULL; fbuf->free_state = NULL; fbuf->ecount = 0; fbuf->dptr = NULL; fbuf->nonblocking = 0; fbuf->eof = 0; fbuf->telem = -1; fbuf->saslconn = NULL; } /* set dispatch err function */ err_proc_t dispatch_err(read_secs, write_secs, iproc) int read_secs, write_secs; err_proc_t iproc; { err_proc_t oldiproc; oldiproc = err_proc; max_idle_rd = read_secs; max_idle_wr = write_secs; err_proc = iproc ? iproc : errproc; return (oldiproc); } /* add a file descriptor */ void dispatch_add(dptr) dispatch_t *dptr; { dptr->next = head; head = dptr; if (dptr->read_proc) { FD_SET(dptr->fbuf->fd, &read_set); } if (dptr->write_proc) { FD_SET(dptr->fbuf->fd, &write_set); } } /* remove a file descriptor */ void dispatch_remove(fbuf) fbuf_t *fbuf; { dispatch_t **dptr; for (dptr = &head; *dptr != NULL; dptr = &(*dptr)->next) { if (fbuf == (*dptr)->fbuf) { FD_CLR(fbuf->fd, &read_set); FD_CLR(fbuf->fd, &write_set); *dptr = (*dptr)->next; break; } } } /* check if a file descriptor is in dispatch list */ int dispatch_check(fd) int fd; { dispatch_t *dptr; for (dptr = head; dptr != NULL && dptr->fbuf->fd != fd; dptr = dptr->next); return (dptr != NULL); } /* set the dispatch procedures */ void dispatch_setproc(fd, read_proc, write_proc) int fd; int (*read_proc)(), (*write_proc)(); { dispatch_t *dptr; for (dptr = head; dptr != NULL && dptr->fbuf->fd != fd; dptr = dptr->next); if (dptr) { if (dptr->read_proc != read_proc) { FD_CLR(fd, &read_set); dptr->read_proc = read_proc; if (read_proc) { FD_SET(fd, &read_set); } } if (dptr->write_proc != write_proc) { FD_CLR(fd, &write_set); dptr->write_proc = write_proc; if (write_proc) { FD_SET(fd, &write_set); } } } } static void blocking(fbuf, block) fbuf_t *fbuf; int block; { int arg; fbuf->nonblocking = !block; if (fcntl(fbuf->fd, F_GETFL, &arg) >= 0) { if (block) arg |= O_NDELAY; else arg &= ~O_NDELAY; fcntl(fbuf->fd, F_SETFL, &arg); } } /* main dispatch loop * fd is file descriptor we're waiting for. Onwrite means we're waiting * for a write. * Returns -1 on unix error, -2 on idle error, 0 on no error */ int dispatch_loop(fd, onwrite) int fd, onwrite; { int nfound; dispatch_t *dptr; fbuf_t *fbuf; fd_set rset, wset; struct timeval timeout, *to; for (;;) { rset = read_set; wset = write_set; FD_SET(fd, (onwrite ? &wset : &rset)); timeout.tv_usec = 0; timeout.tv_sec = onwrite ? max_idle_wr : max_idle_rd; to = timeout.tv_sec ? &timeout : NULL; nfound = select(nfds, &rset, &wset, NULL, to); if (nfound < 0 && errno != EINTR) { return (-1); } else if (nfound == 0) { if ((*err_proc)(onwrite ? DISPATCH_WRITE_IDLE : DISPATCH_READ_IDLE)) { return (-2); } } else if (nfound > 0) { if ((onwrite && FD_ISSET(fd, &wset)) || (!onwrite && FD_ISSET(fd, &rset))) { break; } /* look for fd to dispatch */ for (dptr = head; dptr != NULL; dptr = dptr->next) { fbuf = dptr->fbuf; if (dptr->read_proc && FD_ISSET(fbuf->fd, &rset)) { blocking(fbuf, 0); if ((*dptr->read_proc)(fbuf, dptr->data)) { break; } blocking(fbuf, 1); } if (dptr->write_proc && FD_ISSET(fbuf->fd, &wset)) { (*dptr->write_proc)(fbuf, dptr->data); } } } } return (0); } /* try to parse a CRLF terminated line from the input buffer * start search at "*pscan" * returns -1 for failure, 0 for success */ static int parse_line(fbuf, pscan) fbuf_t *fbuf; char **pscan; { char *scan = *pscan; char *src, *dst; int count, bytes, result = -1; /* try to grab a line */ while (scan + 1 < fbuf->iptr && (scan[0] != '\r' || scan[1] != '\n')) { ++scan; } if (scan + 1 < fbuf->iptr) { /* if we found the end of line, we're done */ *scan = '\0'; fbuf->upos = fbuf->uend; fbuf->lend = scan; fbuf->uend = scan + 2; result = 0; } else { /* if not, shift the buffer to make room for more stuff */ dst = fbuf->ibuf; src = fbuf->uend; bytes = fbuf->iptr - src; count = src - dst; scan -= count; if (!bytes) { fbuf->uend = fbuf->iptr = dst; fbuf->ileft = MAX_BUF; } else if (count) { fbuf->uend = dst; fbuf->iptr -= count; fbuf->ileft += count; do { *dst++ = *src++; } while (--bytes); } } *pscan = scan; return (result); } /* fill iptr with up to ileft bytes. Return bytes added. */ static int fill_buf(fbuf, iptr, ileft) fbuf_t *fbuf; char *iptr; int ileft; { char *ptr; int len; int count; int result = 0; if (!(len = ileft)) return (-1); ptr = iptr; /* do we have any pending in 'pbuf'? */ if (fbuf->dcount > 0) { if (fbuf->dcount >= ileft) { result = ileft; } else { result = fbuf->dcount; } memcpy(ptr, fbuf->dptr, result); fbuf->dptr += result; fbuf->dcount -= result; } while (!result) { if (!fbuf->nonblocking && dispatch_loop(fbuf->fd, 0) < 0) { result = -1; } else { /* Limit what we pull in at a time to be * the same as what we claimed to SASL */ if(len > MAX_BUF) len = MAX_BUF; count = read(fbuf->fd, ptr, len); if (count == 0) { fbuf->eof = 1; break; } else if (count < 0) { if (errno != EWOULDBLOCK) result = -1; break; } else if (fbuf->saslconn!=NULL) { const char *tmpbuf; unsigned tmplen; int lup; result = sasl_decode(fbuf->saslconn, ptr, count, &tmpbuf, &tmplen); if (result != SASL_OK) { return -1; } if (tmplen > 0) { if (tmplen > ileft) { /* copy extra into 'pbuf', which must be empty */ fbuf->dcount = tmplen - ileft; if (fbuf->dcount > MAX_BUF) { /* more than we can handle */ return -1; } memcpy(fbuf->pbuf, tmpbuf + ileft, fbuf->dcount); fbuf->dptr = fbuf->pbuf; /* only return 'ileft' */ tmplen = ileft; } memcpy(ptr, tmpbuf, tmplen); result = tmplen; } } else { result = count; } } } if (fbuf->telem >= 0 && result > 0) { write(fbuf->telem, iptr, result); } return (result); } /* read up to the specified amount of data from a file */ int dispatch_read(fbuf, buf, size) fbuf_t *fbuf; char *buf; int size; { int count, remaining = size, total; total = count = fbuf->iptr - fbuf->uend; if (count) { if (remaining < count) count = remaining; memcpy(buf, fbuf->uend, count); remaining -= count; fbuf->uend += count; buf += count; } if (remaining > 0) { do { count = fill_buf(fbuf, buf, remaining); if (count == 0) break; if (count < 0) { (*err_proc)(DISPATCH_READ_ERR); return (count); } total += count; buf += count; remaining -= count; } while ((remaining > 0) && !fbuf->nonblocking); } return (total); } /* read line (CRLF terminated) */ char *dispatch_readline(fbuf) fbuf_t *fbuf; { char *scan; int count; scan = fbuf->uend; do { /* try to get a line from the buffer */ if (parse_line(fbuf, &scan) == 0) { return (fbuf->upos); } /* get some more stuff into the buffer */ count = fill_buf(fbuf, fbuf->iptr, fbuf->ileft); if (count <= 0) { if (count < 0) (*err_proc)(DISPATCH_READ_ERR); break; } fbuf->iptr += count; fbuf->ileft -= count; } while (!fbuf->nonblocking); return (NULL); } /* flush output from a buffer */ static int do_flush(fbuf, buf, len) fbuf_t *fbuf; char *buf; int len; { int count, chunk; unsigned elen; const char *ptr; char ebuf[MAX_BUF+4]; do { if (fbuf->saslconn != NULL) { int result; chunk = MIN(len, fbuf->maxplain); result=sasl_encode(fbuf->saslconn, buf, chunk, &ptr, &elen); if (result!=SASL_OK) { (*err_proc)(DISPATCH_WRITE_ERR); return (-1); } len -=chunk; buf +=chunk; } else { elen = len; len = 0; ptr = buf; } do { count = dispatch_loop(fbuf->fd, 1); if (count < 0) { (*err_proc)(DISPATCH_WRITE_ERR); return (-1); } count = write(fbuf->fd, ptr, elen); if (count < 0) { if (errno != EINTR && errno != EINPROGRESS) { (*err_proc)(DISPATCH_WRITE_ERR); return (-1); } count = 0; } ptr += count; elen -= count; } while (elen); } while (len); return (0); } /* flush any output in buffer */ int dispatch_flush(fbuf) fbuf_t *fbuf; { int status = 0; if (fbuf->ocount) { status = do_flush(fbuf, fbuf->obuf, fbuf->ocount); fbuf->ocount = 0; } return (status); } /* (blocking) buffered write a string to the server * calls idle procedure on any write error */ int dispatch_write(fbuf, buf, len) fbuf_t *fbuf; const char *buf; int len; { int status = 0; if (len < 1) len = strlen(buf); if (fbuf->telem >= 0) { write(fbuf->telem, buf, len); } if (len < MAX_BUF / 2) { if (len + fbuf->ocount > MAX_BUF) status = dispatch_flush(fbuf); memcpy(fbuf->obuf + fbuf->ocount, buf, len); fbuf->ocount += len; } else { dispatch_flush(fbuf); status = do_flush(fbuf, buf, len); } return (status); } /* close a file buffer and remove it from dispatch system */ void dispatch_close(fbuf) fbuf_t *fbuf; { if (fbuf->fd >= 0) { dispatch_remove(fbuf); dispatch_flush(fbuf); close(fbuf->fd); if (fbuf->free_state) { fbuf->free_state(fbuf->state); } fbuf->fd = -1; } if (fbuf->telem >= 0) { close(fbuf->telem); fbuf->telem = -1; } } /* activate telemetry logging, if desired */ void dispatch_telemetry(fbuf, user) fbuf_t *fbuf; char *user; { char fname[MAXPATHLEN]; /* If telemetry was already enabled on this fbuf, close it. * This happens when an administrator uses LOGIN to switch to * another userid. */ if (fbuf->telem >= 0) { close(fbuf->telem); fbuf->telem = -1; } snprintf(fname, sizeof(fname), "/var/imsp/log/%s/%ld", user, (long) getpid()); fbuf->telem = open(fname, O_WRONLY|O_CREAT, 0600); } int dispatch_addsasl(fbuf_t *fbuf, sasl_conn_t *conn) { int max; const int *maxp; int result; fbuf->saslconn=conn; /* ask SASL for layer max */ result = sasl_getprop(conn, SASL_MAXOUTBUF, (const void **) &maxp); max = *maxp; if (result != SASL_OK) return -1; if (max == 0 || max > MAX_BUF) { /* max = 0 means unlimited, and we can't go bigger */ max = MAX_BUF; } max-=50; /* account for extra foo incurred from layers */ fbuf->maxplain=max; return 0; } cyrus-imspd-v1.8/imsp/dispatch.h0100644004310100000120000001252607613045522016116 0ustar shadowstaff/* dispatch.h -- dispatch functions * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 2/22/93 */ #define MAX_BUF 4096 #include /* a file buffer structure */ typedef struct fbuf_t { char *upos; /* user position in line */ int fd; /* file descriptor */ char *lend; /* end of line in buffer */ char *uend; /* end of user area */ char *iptr; /* position for new data */ int ileft; /* unused bytes in ibuf */ int ocount; /* amount of data in obuf */ int nonblocking; /* flag for non-blocking input */ int eof; /* hit an EOF on read */ int telem; /* telemetry log */ char *(*efunc)(); /* protection encoding function */ char *(*dfunc)(); /* protection decoding function */ void (*free_state)(); /* free protection state function */ void *state; /* protection state */ int maxplain; /* protection max plaintext on write */ unsigned dcount; /* amount of decoded data in pbuf */ unsigned ecount; /* amount of encoded data in pbuf */ char *eptr; /* position of encoded data in pbuf */ char *dptr; /* position in decoded data in pbuf */ char ibuf[MAX_BUF]; /* line buffered data */ char obuf[MAX_BUF]; /* output buffered data */ char pbuf[MAX_BUF+4]; /* protection buffered data */ sasl_conn_t *saslconn; } fbuf_t; /* a dispatch structure * int read_proc(fbuf, data) * fbuf_t *fbuf file buffer * void *data user data * returns -1 if self-removed, 0 otherwise */ typedef struct dispatch_t { struct dispatch_t *next; /* next pointer */ fbuf_t *fbuf; /* file buffer */ int (*read_proc)(); /* call on read */ int (*write_proc)(); /* call on write */ void *data; /* generic data pointer */ } dispatch_t; /* types for an error proc */ #define DISPATCH_READ_IDLE 0 #define DISPATCH_WRITE_IDLE 1 #define DISPATCH_READ_ERR 2 #define DISPATCH_WRITE_ERR 3 #ifdef __STDC__ /* an err procedure -- return non-zero to flag an error */ typedef int (*err_proc_t)(int); /* initialize dispatch system */ void dispatch_init(void); /* initialize a file buffer */ void dispatch_initbuf(fbuf_t *, int); /* set err function, returns old err function */ err_proc_t dispatch_err(int, int, err_proc_t); /* add a file descriptor to the dispatch list (structure not copied) */ void dispatch_add(dispatch_t *); /* remove a file descriptor from the dispatch system */ void dispatch_remove(fbuf_t *); /* check if a file descriptor is in the dispatch list */ int dispatch_check(int); /* set the dispatch procedures */ void dispatch_setproc( int, int (*)(), int (*)()); /* (blocking) dispatch loop: returns 0 on success, -1 on unix select error */ int dispatch_loop(int, int); /* (blocking) read specified amount of data from a file */ int dispatch_read(fbuf_t *, char *, int); /* (blocking) read a line of text (CRLF terminated) from a file */ char *dispatch_readline(fbuf_t *); /* flush data from a file buffer */ int dispatch_flush(fbuf_t *); /* (blocking) write data */ int dispatch_write(fbuf_t *, const char *, int); /* close a file buffer and remove it from dispatch system */ void dispatch_close(fbuf_t *); /* Add SASL */ int dispatch_addsasl(fbuf_t *fbuf, sasl_conn_t *conn); /* activate telemetry for user */ void dispatch_telemetry(fbuf_t *, char *); #else typedef int (*err_proc_t)(); void dispatch_init(), dispatch_initbuf(), dispatch_add(), dispatch_remove(); void dispatch_setproc(), dispatch_close(), dispatch_telemetry(); err_proc_t dispatch_err(); int dispatch_check(), dispatch_loop(), dispatch_read(), dispatch_flush(); int dispatch_write(); char *dispatch_readline(); #endif cyrus-imspd-v1.8/imsp/im_util.c0100644004310100000120000003451707771650243015767 0ustar shadowstaff/* im_util.c -- IMAP and IMSP protocol utility functions * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 5/9/93 */ #include #include #include #include #include #include "dispatch.h" #include "exitcodes.h" #include "im_util.h" #include "util.h" #ifdef __STDC__ #include #else #include #endif /* import from OS: */ extern char *malloc(), *realloc(); #define MAX_DIGITS 32 /* max number of digits in long integer */ /* flag that a literal is ready to be sent */ static char literalrdy[] = "+ go\r\n"; /* base64 conversion string */ static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; enum { MAXLIST = 256, MAXQUOTED = 8192, MAXWORD = 8192, MAXLITERAL = INT_MAX / 20 }; /* bit 1: valid atom CHARACTER * bit 2: valid quoted string CHARACTER * bit 4: valid atom or list_wildcards CHARACTER */ char im_table[256] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 0, 7, 7, 6, 7, 7, 2, 2, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* copy host and get the partition info from a hostname or hostlist */ char *copy_get_partition(str, partition) char *str; char **partition; { char *scan, *new, *start; int hlen, len; if (partition) *partition = NULL; for (start = str; *start == '(' || *start == ' '; ++start); for (scan = start; *scan && *scan != '/' && *scan != ' ' && *scan != ')'; ++scan); hlen = scan - start; while (*scan && *scan != ' ' && *scan != ')') ++scan; len = scan - start; if (!*scan && start == str && len == hlen) return (str); new = malloc(len + 1); if (new) { strncpy(new, start, len); new[len] = '\0'; if (hlen < len) { new[hlen] = '\0'; if (partition) *partition = new + hlen + 1; } } return (new); } /* get an atom from a buffer. contents may be destroyed by copy_astring. */ char *get_atom(buf) fbuf_t *buf; { char *end = buf->lend; char *start, *pos; pos = start = buf->upos; if (*pos == '{') return ((char *) NULL); while (pos < end && isatom(*pos)) ++pos; if (pos == start || (*pos && *pos != ' ')) return ((char *) NULL); *pos = '\0'; if (pos < end) ++pos; buf->upos = pos; return (start); } /* get an atom w/ last_wildcard from a buffer. * contents may be destroyed by copy_astring. */ char *get_latom(buf) fbuf_t *buf; { char *end = buf->lend; char *start, *pos; pos = start = buf->upos; if (*pos == '{') return ((char *) NULL); while (pos < end && islatom(*pos)) ++pos; if (pos == start || (*pos && *pos != ' ')) return ((char *) NULL); *pos = '\0'; if (pos < end) ++pos; buf->upos = pos; return (start); } /* copy an atom from a buffer. Caller must free when done. */ char *copy_atom(buf) fbuf_t *buf; { char *end = buf->lend; char *start, *pos, *result; pos = start = buf->upos; if (*pos == '{') return ((char *) NULL); while (pos < end && isatom(*pos)) ++pos; if (pos == start) return ((char *) NULL); *pos = '\0'; if(pos - start > MAXWORD) { fatal("word too big", EC_IOERR); } result = malloc(pos - start + 1); if (pos < end) ++pos; buf->upos = pos; if (result) strcpy(result, start); return (result); } /* copy an atom with list_wildcards from a buffer. Caller must free when done. */ char *copy_latom(buf) fbuf_t *buf; { char *end = buf->lend; char *start, *pos, *result; pos = start = buf->upos; if (*pos == '{') return ((char *) NULL); while (pos < end && islatom(*pos)) ++pos; if (pos == start) return ((char *) NULL); *pos = '\0'; if(pos - start > MAXWORD) { fatal("word too big", EC_IOERR); } result = malloc(pos - start + 1); if (pos < end) ++pos; buf->upos = pos; if (result) strcpy(result, start); return (result); } /* copy a string from a buffer. Caller must free when done. * flags: * bit 1 - "+" prompt will be written to ask for literals * bit 2 - allow list_wildcards in atoms */ #ifdef __STDC__ char *copy_astring(fbuf_t *buf, int flags) #else char *copy_astring(buf, flags) fbuf_t *buf; int flags; #endif { char *start, *pos, *end, *result; int litlen; end = buf->lend; pos = start = buf->upos + 1; if (*buf->upos == '"') { /* parse a quoted string */ while (pos < end && isqstr(*pos)) ++pos; if (*pos != '"') return ((char *) NULL); *pos = '\0'; if(pos - start > MAXQUOTED) { fatal("word too big", EC_IOERR); } result = malloc(pos - start + 1); if (pos < end && ++pos < end) { if (*pos != ' ') return ((char *) NULL); ++pos; } buf->upos = pos; if (result) strcpy(result, start); return (result); } else if (*buf->upos == '{') { int nonsynch = 0; /* parse a literal */ litlen = 0; while (pos < end && isdigit(*pos)) { litlen = litlen * 10 + (*pos - '0'); ++pos; if(litlen > MAXLITERAL || litlen < 0) { /* we overflowed */ fatal("literal too big", EC_IOERR); } } if (pos[0] == '+') { nonsynch = 1; pos++; } if (pos[0] == '}' && pos[1] == '\0' && litlen) { /* make space for literal & get it */ start = malloc(litlen + 1); if (start == NULL) return (start); if (!nonsynch && (flags&1)) { dispatch_write(buf, literalrdy, sizeof (literalrdy) - 1); dispatch_flush(buf); } if (dispatch_read(buf, start, litlen) <= 0 || dispatch_readline(buf) == NULL) { free(start); return ((char *) NULL); } if (*buf->upos == ' ') ++buf->upos; start[litlen] = '\0'; return (start); } } return (flags&2 ? copy_latom(buf) : copy_atom(buf)); } /* copy a list of atoms from a buffer * returns -1 for error, 0 for empty list, 1+ for list with that many * elements which must be freed by caller. List string returned in * char ** argument. */ int copy_atom_list(buf, plist) fbuf_t *buf; char **plist; { char *start, *pos, *end, *dst; int count; /* get start & end */ end = buf->lend; pos = start = buf->upos; /* initialize to empty list */ count = 0; *plist = NULL; /* check for NIL or ( */ if (end - pos >= 3 && !strncasecmp(pos, "nil", 3)) { if (buf) buf->upos = pos + 3; return (0); } if (*pos != '(') return (-1); ++pos; if (*pos == ' ') ++pos; /* count list elements */ while (pos < end && *pos != ')') { ++count; while (pos < end && isatom(*pos)) ++pos; if (pos < end && *pos != ' ') return (-1); if (pos[-1] == ')') { --pos; break; } ++pos; } if (pos >= end) return (-1); buf->upos = pos + 1; if (*buf->upos == ' ') ++buf->upos; if (!count) return (0); end = pos; /* make space & copy */ if(pos - start > MAXLIST * MAXWORD) { fatal("list too long", EC_IOERR); } *plist = dst = malloc(pos - start + 2); if (!dst) return (-1); memcpy(dst, start, pos - start + 1); dst[pos - start + 1] = '\0'; return (count); } /* output an IMAP/IMSP string * fbuf -- dispatch file buffer * litbuf -- if NULL, all literals sent. If non-NULL, litbuf[0].ptr must be * freed by caller, and litbuf must point to an array of im_literals * of length 2 + max number of literals output. The output string * will be broken into pieces and the first piece will be sent. * Caller will have to wait for "+" from the server before sending * the next piece. * str -- an sprintf style string with the following meanings: * %a -- atom * %s -- string (will be quoted or literalized as needed) * %p -- pretty-print (used for error messages and such) * %d -- decimal * %b -- base64 string (length, string) * %% -- % */ #ifdef __STDC__ int im_send(fbuf_t *fbuf, im_literal *litbuf, char *str, ...) #else int im_send(va_alist) va_dcl #endif { va_list ap; char *wkspace, *wkptr, *astr, *scan; int wksize, wkused, len, maxlen, result, litpos, i, c1, c2; long val; /* initialize argument list */ #ifdef __STDC__ va_start(ap, str); #else fbuf_t *fbuf; char *str; im_literal *litbuf; va_start(ap); fbuf = va_arg(ap, fbuf_t *); litbuf = va_arg(ap, im_literal *); str = va_arg(ap, char *); #endif /* initialize workspace */ litpos = 0; if (litbuf) litbuf[0].ptr = NULL; wkused = 0; wksize = (strlen(str) + 1) * 4; wkptr = wkspace = malloc(wksize); if (wkspace == (char *) NULL) { va_end(ap); return (-1); } /* start copying string */ while (*str) { wkused = wkptr - wkspace; if (*str == '%' && *++str != '%') { maxlen = -1; if (str[0] == '.' && str[1] == '*') { maxlen = va_arg(ap, long); str += 2; } /* calculate max length needed for argument */ len = 0; switch (*str) { case 'a': astr = va_arg(ap, char *); len = strlen(astr); break; case 'b': val = va_arg(ap, long); astr = va_arg(ap, char *); len = val + (val >> 1) + 4; break; case 's': astr = va_arg(ap, char *); len = strlen(astr) + MAX_LITERAL_EXTRA; break; case 'p': astr = va_arg(ap, char *); len = strlen(astr) * 2; break; case 'd': val = va_arg(ap, long); len = MAX_DIGITS; break; } /* grow workspace if needed */ if (wkused + len >= wksize - 1) { wkspace = realloc(wkspace, wksize += len + strlen(str)); if (wkspace == NULL) { va_end(ap); return (-1); } wkptr = wkspace + wkused; } /* copy argument */ switch (*str) { case 'a': if (maxlen >= 0 && maxlen < len) len = maxlen; strncpy(wkptr, astr, len); wkptr += len; break; case 's': scan = astr; len -= MAX_LITERAL_EXTRA; /* send empty string as "" */ if (!*scan) { *wkptr++ = '"'; *wkptr++ = '"'; } /* try an atom */ if (*scan && *scan != '{') { while (*scan && isatom(*scan)) ++scan; if (*scan) { scan = astr; } else { strcpy(wkptr, astr); wkptr += len; } } /* try a quoted string */ if (*scan) { while (*scan && isqstr(*scan)) ++scan; if (*scan) { scan = astr; } else { *wkptr++ = '"'; strcpy(wkptr, astr); wkptr += len; *wkptr++ = '"'; } } /* send a literal */ if (*scan) { sprintf(wkptr, "{%d}\r\n%s", len, astr); wkptr += strlen(wkptr); if (litbuf) { litbuf[litpos++].len = (wkptr - wkspace) - len; } } break; case 'p': wkptr = beautify_copy(wkptr, astr); break; case 'b': len = val; while (len) { c1 = (unsigned char) *astr++; *wkptr++ = basis_64[c1 >> 2]; c2 = (--len == 0) ? 0 : (unsigned char) *astr++; *wkptr++ = basis_64[((c1 << 4) & 0x30) | (c2 >> 4)]; if (!len) { *wkptr++ = '='; *wkptr++ = '='; } else { c1 = (--len == 0) ? 0 : (unsigned char) *astr++; *wkptr++ = basis_64[((c2 << 2) & 0x3c)|(c1 >> 6)]; if (!len) { *wkptr++ = '='; } else { --len; *wkptr++ = basis_64[c1 & 0x3f]; } } } break; case 'd': sprintf(wkptr, "%ld", val); wkptr += strlen(wkptr); break; } ++str; } else { /* make extra space if needed */ if (wkused == wksize - 1) { wkspace = realloc(wkspace, wksize *= 2); if (wkspace == NULL) { va_end(ap); return (-1); } wkptr = wkspace + wkused; } /* copy character */ *wkptr++ = *str++; } } va_end(ap); *wkptr = '\0'; if (litbuf) { litbuf[0].ptr = wkspace; for (i = 1; i <= litpos; ++i) { litbuf[i].ptr = litbuf[i-1].ptr + litbuf[i-1].len; litbuf[i].len -= litbuf[i-1].len; } litbuf[litpos].len = wkptr - litbuf[litpos].ptr; litbuf[litpos+1].ptr = NULL; result = dispatch_write(fbuf, wkspace, litbuf[0].len); } else { result = dispatch_write(fbuf, wkspace, wkptr - wkspace); free(wkspace); } return (result); } cyrus-imspd-v1.8/imsp/im_util.h0100644004310100000120000001113107217272010015742 0ustar shadowstaff/* im_util.h -- IMAP and IMSP protocol utility functions * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 5/9/93 */ #define MAX_INTEGER_LEN 24 /* max length of an integer */ #define MAX_LITERAL_EXTRA 32 /* max extra space needed for a literal */ /* IMAP/IMSP character information table */ extern char im_table[256]; /* isatom -- is a valid atom character * isqstr -- is valid quoted string character (like isatom, but allows space) * islatom -- is a valid atom character or list wildcard */ #define isatom(c) (im_table[(unsigned char)(c)]&1) #define isqstr(c) (im_table[(unsigned char)(c)]&2) #define islatom(c) (im_table[(unsigned char)(c)]&4) /* literal storage used by im_send() */ typedef struct im_literal { char *ptr; int len; } im_literal; #ifdef __STDC__ /* copy_get_partition(host_partition, partition) * copy and get the partition info from a hostname or hostlist * return NULL on error, caller must free result if result differs * from argument passed * partition is set to NULL or a string which need not be freed by caller * caller may pass NULL for partition argument */ char *copy_get_partition(char *, char **); /* get an atom from a buffer. contents may be destroyed by copy_string. */ char *get_atom(fbuf_t *); char *get_latom(fbuf_t *buf); /* copy an atom from a buffer. Caller must free when done. */ char *copy_atom(fbuf_t *buf); char *copy_latom(fbuf_t *buf); /* copy a string from a buffer. Caller must free when done. * flags: * bit 1 - "+" prompt will be written to ask for literals * bit 2 - allow list_wildcards in atoms */ char *copy_astring(fbuf_t *, int); /* copy a list of atoms from a buffer * returns -1 for error, 0 for empty list, 1+ for list with that many * elements which must be freed by caller. List string returned in * char ** argument. */ int copy_atom_list(fbuf_t *, char **); /* output an IMAP/IMSP string * fbuf -- dispatch file buffer * litbuf -- if NULL, all literals sent. If non-NULL, litbuf[0].ptr must be * freed by caller, and litbuf must point to an array of im_literals * of length 2 + max number of literals output. The output string * will be broken into pieces and the first piece will be sent. * Caller will have to wait for "+" from the server before sending * the next piece. * str -- an sprintf style string with the following meanings: * %a -- atom * %s -- string (will be quoted or literalized as needed) * %p -- pretty-print (used for error messages and such) * %d -- decimal * %b -- base64 string (length, string) * %% -- % */ int im_send(fbuf_t *, im_literal *, char *, ...); #else char *copy_get_partition(), *get_atom(), *get_latom(), *copy_atom(); char *copy_latom(), *copy_astring(); int copy_atom_list(), im_send(); #endif cyrus-imspd-v1.8/imsp/imap_client.c0100644004310100000120000002572305662232275016606 0ustar shadowstaff/* imap_client.c -- IMAP client routines * * (C) Copyright 1993-1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Chris Newman * Start Date: 5/9/93 */ #include #include #include #include #include #include #include #include #include "dispatch.h" #include "authize.h" #include "im_util.h" #include "imap_client.h" #include "util.h" #include "syncdb.h" #include "option.h" extern int from64(); /* from OS: */ extern char *malloc(); /* proxy strings */ static char proxy_login[] = "%a LOGIN %s %s\r\n"; static char proxy_auth[] = "%a AUTHENTICATE %a\r\n"; static char proxy_logout[] = "%a LOGOUT\r\n"; static char proxy_cancel[] = "*\r\n"; /* other strings */ static char BYE[] = "BYE"; /* list of active connections */ static im_conn *conlist = NULL; /* wait for tagged response, dispatching unsolicited data appropriately */ char *imap_wait(con) im_conn *con; { int litpos = 1, val; char *dtype, *scan, *digit; im_handler *hand; for (;;) { dispatch_flush(&con->buf); if (dispatch_readline(&con->buf) == NULL) return (NULL); if (*con->buf.upos == '+') { if (!con->lit[litpos].ptr) return (con->buf.upos); if (dispatch_write(&con->buf, con->lit[litpos].ptr, con->lit[litpos].len) < 0) { return (NULL); } ++litpos; } else if (*con->buf.upos == '*') { /* parse the unsolicited data */ val = -1; for (dtype = con->buf.upos + 1; isspace(*dtype); ++dtype); for (scan = dtype; *scan && !isspace(*scan); ++scan); if (isdigit(*dtype) && *scan) { *scan = '\0'; val = atoi(dtype); dtype = scan + 1; for (scan = dtype; *scan && !isspace(*scan); ++scan); } con->buf.upos = *scan ? scan + 1 : scan; *scan = '\0'; /* look for a handler */ for (hand = con->hlist; hand && strcmp(dtype, hand->command); hand = hand->next); if (hand) { (*hand->proc)(hand, val, con); } else if (!strcmp(dtype, BYE)) { con->closing = 1; } else { printf("unhandled unsolicited data: [%d] `%s' %s\n", val, dtype, con->buf.upos); } } else if (strncmp(con->tag, con->buf.upos, strlen(con->tag))) { /*XXX: this annoying error case needs to be dealt with */ printf("unexpected tag from `%s': %s\n", con->host, con->buf.upos); } else { /* set the user position */ con->buf.upos += strlen(con->tag); if (*con->buf.upos == ' ') ++con->buf.upos; /* bump the tag number */ digit = con->tag + strlen(con->tag) - 1; while (*digit == '9' && digit > con->tag) *digit-- = '0'; ++*digit; return (con->buf.upos); } } } /* deal with an async read */ int imap_async_read(fbuf, data) fbuf_t *fbuf; void *data; { im_conn *con = data; char *line; line = dispatch_readline(fbuf); if (!line && fbuf->eof) { /* we got an EOF or error: blow away the connection */ #ifdef DEBUG printf("removing connection structure to host `%s'\n", con->host); #endif imap_close(con); return (-1); } /* look for a "* BYE" */ if (line && *line == '*' && !strncmp(line + 2, BYE, 3)) { con->closing = 1; #ifdef DEBUG printf("connection to host `%s' closing\n", con->host); #endif } return (0); } /* get a connection */ #ifdef __STDC__ im_conn *imap_connect(char *host, auth_id *id, int admin) #else im_conn *imap_connect(host, id, admin) char *host; auth_id *id; int admin; #endif { int result, litpos, fd, len, rwflag; char *user, *pass, *response, *outbuf, *val; im_conn *con; struct acte_client *mech; void *state; int protlevel; char *(*encodefunc)(); char *(*decodefunc)(); int maxplain, socksz; struct sockaddr_in addr, laddr; struct hostent *hp, *gethostbyname(); struct servent *svent; /* look for a pre-existing connection */ user = auth_username(id); for (con = conlist; con != NULL && (strcmp(host, con->host) || strcmp(user, con->user)); con = con->next); if (con) { if (!con->closing) return (con); /* if connection is closing (or closed), we need to re-connect */ if (con->buf.fd >= 0) { dispatch_close(&con->buf); } } else { /* make sure hostname is valid */ if ((hp = gethostbyname(host)) == NULL) return (NULL); /* create space & initialize new im_conn structure */ con = (im_conn *) malloc(sizeof (im_conn) + strlen(host)); if (!con) return (con); con->hlist = NULL; con->d.fbuf = &con->buf; con->d.read_proc = imap_async_read; con->d.write_proc = NULL; con->d.data = con; } /* initialize connection options */ strcpy(con->host, host); con->user = user; con->closing = 0; strcpy(con->tag, "A001"); /* create socket & connect */ if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { free((char *) con); return (NULL); } dispatch_initbuf(&con->buf, fd); addr.sin_family = AF_INET; memcpy(&addr.sin_addr, hp->h_addr, hp->h_length); svent = getservbyname(IMAP_PORTNAME, IMAP_PROTOCOL); addr.sin_port = svent ? svent->s_port : htons(IMAP_PORT); if (connect(con->buf.fd, (struct sockaddr *) &addr, sizeof (addr)) < 0) { dispatch_close(&con->buf); free((char *) con); return (NULL); } /* look for a valid first line */ if (dispatch_readline(&con->buf) == NULL || (strncmp("* OK", con->buf.upos, 4) && strncmp("* PREAUTH", con->buf.upos, 9))) { dispatch_close(&con->buf); free((char *) con); return (NULL); } /* if it's not PREAUTH, we need to login */ if (con->buf.upos[2] != 'P') { if (proxy_init(id, host, admin, &user, &pass, &mech) != 0) { dispatch_close(&con->buf); free((char *) con); return (NULL); } if (!mech) { /* standard LOGIN command */ result = im_send(&con->buf, con->lit, proxy_login, con->tag, user, pass); /* wait for response to the login command */ response = NULL; if (result >= 0) { response = imap_wait(con); } if (con->lit[0].ptr) { /* Nuke password */ for (litpos = 0; con->lit[litpos+1].ptr; ++litpos); memset(con->lit[litpos].ptr, 0, con->lit[litpos].len); free(con->lit[0].ptr); } /* check for errors */ if (!response || response[0] != 'O' || response[1] != 'K') { dispatch_close(&con->buf); free((char *) con); return (NULL); } } else { /* AUTHENTICATE command */ protlevel = ACTE_PROT_ANY; val = option_get("", "imsp.proxy.authlevel", 1, &rwflag); if (val) { protlevel = atoi(val); free(val); } socksz = sizeof (struct sockaddr_in); getsockname(con->buf.fd, &laddr, &socksz); result = mech->start("imap", host, user, protlevel, MAX_BUF, &laddr, &addr, &state); if (result == 0) { result = im_send(&con->buf, NULL, proxy_auth, con->tag, mech->auth_type); if (result < 0) mech->free_state(state); } if (result != 0) { dispatch_close(&con->buf); free((char *) con); return (NULL); } con->lit[1].ptr = NULL; response = imap_wait(con); while (response && *response == '+') { len = from64(response, response + 2); result = mech->auth(state, len, response, &len, &outbuf); if (result == ACTE_FAIL) { im_send(&con->buf, NULL, proxy_cancel); mech->free_state(state); dispatch_close(&con->buf); free((char *) con); return (NULL); } result = im_send(&con->buf, NULL, "%b\r\n", len, outbuf); response = result == 0 ? imap_wait(con) : NULL; } /* check for errors */ if (!response || response[0] != 'O' || response[1] != 'K') { mech->free_state(state); dispatch_close(&con->buf); free((char *) con); return (NULL); } /* set protection */ mech->query_state(state, &user, &protlevel, &encodefunc, &decodefunc, &maxplain); if (encodefunc || decodefunc) { con->buf.efunc = encodefunc; con->buf.dfunc = decodefunc; con->buf.maxplain = maxplain; con->buf.state = state; con->buf.free_state = mech->free_state; } else { mech->free_state(state); } } } /* add to connection list and async watch */ dispatch_add(&con->d); con->next = conlist; conlist = con; return (con); } /* close & free a connection */ void imap_close(con) im_conn *con; { im_handler *scan, *next; im_conn **pcon; for (pcon = &conlist; *pcon && *pcon != con; pcon = &(*pcon)->next); if (*pcon) *pcon = con->next; if (con->buf.fd >= 0) { dispatch_remove(&con->buf); if (!con->closing && im_send(&con->buf, NULL, proxy_logout, con->tag) >= 0) { imap_wait(con); } dispatch_close(&con->buf); } for (scan = con->hlist; scan; scan = next) { next = scan->next; if (scan->usage > 0 && !--scan->usage) free((char *) scan); } free((char *) con); } /* close and free all connections */ void imap_closeall() { while (conlist) imap_close(conlist); } /* create a new IMAP handler, if con is non-NULL, add the handler to con * size is the size of the allocated space. If size is less than * sizeof (im_handler), then it will be set to sizeof (im_handler) */ #ifdef __STDC__ im_handler *imap_newhandler(im_conn *con, char *com, im_hproc proc, int size) #else im_handler *imap_newhandler(con, com, proc, size) im_conn *con; char *com; im_hproc proc; int size; #endif { im_handler *newhand; if (!proc || !com) return (NULL); if (size < sizeof (im_handler)) size = sizeof (im_handler); newhand = (im_handler *) malloc(size); if (!newhand) return (newhand); newhand->command = com; newhand->proc = proc; newhand->usage = 0; if (con) { imap_addhandler(con, newhand); } return (newhand); } /* remove an IMAP handler from a connection * returns -1 if no handler found */ int imap_removehandler(con, command) im_conn *con; char *command; { im_handler **hptr, *hnext; hptr = &con->hlist; while (*hptr != NULL && strcmp(command, (*hptr)->command)) { hptr = &(*hptr)->next; } if (*hptr == NULL) return (-1); hnext = (*hptr)->next; if ((*hptr)->usage > 0 && !--(*hptr)->usage) free(*hptr); *hptr = hnext; return (0); } cyrus-imspd-v1.8/imsp/imap_client.h0100644004310100000120000000632005643724524016605 0ustar shadowstaff/* imap_client.h -- IMAP client routines * * (C) Copyright 1993-1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Chris Newman * Start Date: 5/9/93 */ /* IMAP unsolicited data handler procedure */ typedef void (*im_hproc)(/* struct im_handler *hand, int val, im_conn *con */); /* IMAP unsolicited data handler structure */ typedef struct im_handler { struct im_handler *next; char *command; im_hproc proc; int usage; /* -1 = static storage */ } im_handler; /* IMAP connection structure */ typedef struct im_conn { struct im_conn *next; char *user; int closing; im_handler *hlist; dispatch_t d; fbuf_t buf; im_literal lit[16]; char tag[5]; char host[1]; } im_conn; /* try IMAP_PORTNAME first */ #define IMAP_PORTNAME "imap" #define IMAP_PROTOCOL "tcp" #define IMAP_PORT 143 #ifdef __STDC__ /* wait for the completion of the last IMAP command sent, dispatching * unsolicited data to im_handlers as appropriate */ char *imap_wait(im_conn *); /* imap_connect(host, id, adminflag) * get a pointer to an existing IMAP connection, or create a new one */ im_conn *imap_connect(char *, auth_id *, int); /* send logout, close and free an IMAP connection */ void imap_close(im_conn *); /* close all connections */ void imap_closeall(void); /* imap_newhandler(con, command, proc, size) * create a new IMAP handler, if con is non-NULL, add the handler to con * size is the size of the allocated space. If size is less than * sizeof (im_handler), then it will be set to sizeof (im_handler) */ im_handler *imap_newhandler(im_conn *, char *, im_hproc, int); /* remove an IMAP handler from a connection * returns -1 if no handler found */ int imap_removehandler(im_conn *, char *); #else char *imap_wait(); im_conn *imap_connect(); void imap_close(), imap_closeall(); im_handler *imap_newhandler(); int imap_removehandler(); #endif /* add an IMAP handler to a connection */ #define imap_addhandler(con, hand) { \ if ((hand)->usage >= 0) ++(hand)->usage; \ (hand)->next = (con)->hlist; \ (con)->hlist = (hand); \ } /* initialize the fields in an IMAP handler */ #define imap_inithandler(hand, comval, procval) \ ((hand)->command = (comval), (hand)->proc = (procval), (hand)->usage = -1) cyrus-imspd-v1.8/imsp/imsp.h0100644004310100000120000000375307217272162015273 0ustar shadowstaff/* imsp.h -- Interactive Mail Support Protocol definitions * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 2/16/93 */ /* port info for imsp */ #define IMSP_PORTNAME "imsp" #define IMSP_PROTOCOL "tcp" #define IMSP_PORT 406 cyrus-imspd-v1.8/imsp/imsp_server.c0100644004310100000120000013142207765435034016656 0ustar shadowstaff/* imsp_server.c -- Interactive Mail Support Protocol Server * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 2/16/93 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "version.h" #include "dispatch.h" #include "util.h" #include "syncdb.h" #include "option.h" #include "glob.h" #include "authize.h" #include "abook.h" #include "imsp_server.h" #include "im_util.h" #include "acl.h" #include "alock.h" #include "sasl_support.h" /* import from OS */ extern char *malloc(), *realloc(); /* structure used for command dispatch list */ typedef struct command_t { char *word; int id; void (*proc)(); } command_t; /* The IMSP server also respects the IMAP shutdown file */ #define SHUTDOWNFILENAME "/var/imap/msg/shutdown" #define MAX_IDLE_TIME (30*60) /* 30 minutes */ #define MAX_WRITE_WAIT (30) /* 30 seconds */ /* IMSP commands */ #define IMSP_LOGIN 0 #define IMSP_LOGOUT 1 #define IMSP_NOOP 2 #define IMSP_GET 3 #define IMSP_SET 4 #define IMSP_UNSET 5 #define IMSP_SUBSCRIBE 6 #define IMSP_UNSUBSCRIBE 7 #define IMSP_CREATE 8 #define IMSP_DELETE 9 #define IMSP_RENAME 10 #define IMSP_REPLACE 11 #define IMSP_MOVE 12 #define IMSP_FETCHADDRESS 13 #define IMSP_SEARCHADDRESS 14 #define IMSP_STOREADDRESS 15 #define IMSP_DELETEADDRESS 16 #define IMSP_SETACL 17 #define IMSP_DELETEACL 18 #define IMSP_GETACL 19 #define IMSP_MYRIGHTS 20 #define IMSP_LOCK 21 #define IMSP_UNLOCK 22 #define IMSP_ADDRESSBOOK 23 #define IMSP_CREATEABOOK 24 #define IMSP_DELETEABOOK 25 #define IMSP_RENAMEABOOK 26 #define IMSP_CAPABILITY 27 #define IMSP_AUTHENTICATE 28 #define IMSP_LIST 29 #define IMSP_LSUB 30 #define IMSP_LMARKED 31 #define IMSP_LAST 32 #define IMSP_SEEN 33 /* IMSP find options */ #define FIND_MAILBOXES 0 #define FIND_ALL_MAILBOXES 1 #define FIND_UNSEEN_MAILBOXES 2 #define FIND_BBOARDS 3 #define FIND_ALL_BBOARDS 4 #define FIND_UNSEEN_BBOARDS 5 /* IMSP ACL options */ #define ACL_ADDRESSBOOK 0 #define ACL_MAILBOX 1 static char *aclopt[] = { "addressbook", "mailbox", NULL }; /* IMSP LOCK/UNLOCK options */ #define LOCK_OPTION 0 #define LOCK_ADDRESSBOOK 1 static char *lockopt[] = { "option", "addressbook", NULL }; /* predefined options */ static char opt_newuser[] = "imsp.create.new.users"; static char opt_required[] = "imsp.required.bbsubs"; /* user information */ static auth_id *imsp_id; /* the sasl connection context */ sasl_conn_t *imsp_saslconn; /* file buffer used by idle procedure */ static fbuf_t im_fbuf; /* login & logout messages */ static char msg_greeting[] = "* OK Cyrus IMSP version %s ready\r\n"; static char msg_autologout[] = "* BYE user was idle for too long, closing\r\n"; static char msg_logout[] = "* BYE Logging user out\r\n"; static char msg_alert[] = "* BYE [ALERT] %s\r\n"; static char msg_svrexit[] = "* BYE IMSP server exiting (probably out of memory)\r\n"; static char msg_capability[] = "* CAPABILITY"; static char txt_logoutuser[] = "Logging user out"; /* generic command parse errors */ static char msg_badtag[] = "* BAD 7-bit ASCII tag required\r\n"; static char rpl_badcommand[] = "BAD 7-bit ASCII command required\r\n"; static char rpl_invalcommand[] = "BAD command '%s' unknown\r\n"; static char rpl_wrongargs[] = "BAD command '%s' requires %d properly formed argument(s)\r\n"; static char rpl_wrongargopt[] = "BAD command '%s' requires a string and an optional %s\r\n"; static char rpl_noargs[] = "BAD command '%s' requires no arguments\r\n"; static char rpl_noauth[] = "NO User must LOGIN to execute command '%s'\r\n"; static char rpl_badauth[] = "NO User not authorized to execute that command\r\n"; /* generic errors */ static char err_nomem[] = "IMSP server out of memory"; static char err_quota[] = "operation failed: IMSP user quota exceeded"; /* generic replies */ static char rpl_ok[] = "OK %s\r\n"; static char rpl_complete[] = "OK %s completed\r\n"; static char rpl_generic[] = "%s\r\n"; static char rpl_no[] = "NO %s\r\n"; static char rpl_badopt[] = "BAD Invalid option '%s' to command '%s'\r\n"; static char rpl_internalerr[] = "NO Internal error in routine '%s'\r\n"; static char rpl_notsupported[] = "NO %s not suppported at this site\r\n"; /* authorization messages */ static char msg_bbaccess[] = "* NO Unable to create subscription list: LIST/LSUB commands will fail\r\n"; static char err_nologin[] = "Login incorrect"; static char err_invaluser[] = "User does not have an account on this server"; static char rpl_bad64[] = "BAD Invalid base64 string\r\n"; /* GET responses, errors, strings */ static char msg_option[] = "* OPTION %a %s [READ-%a]\r\n"; static char err_optiondb[] = "options database unavailable"; static char txt_readwrite[] = "WRITE"; static char txt_readonly[] = "ONLY"; /* SET/UNSET errors */ static char rpl_noset[] = "%a NO User '%p' not authorized to change option '%p'\r\n"; static char rpl_isunset[] = "%a NO option '%p' was already unset\r\n"; /* LIST options, errors */ static char rpl_nosubs[] = "%a NO user '%p' is not subscribed to any bboards\r\n"; static char txt_mailbox[] = "MAILBOX"; static char txt_marked[] = "\\Marked"; static char txt_unmarked[] = "\\Unmarked"; static char txt_noinfer[] = "\\Noinferiors"; static char txt_noselect[] = "\\Noselect"; static char msg_list[] = "* LIST (%a%a%a) %a %s %.*a\r\n"; static char msg_lsub[] = "* LSUB (%a%a%a) %a %s %.*a\r\n"; static char msg_deletebb[] = "* NO The bboard '%p' has been deleted.\r\n"; static char msg_renamebb[] = "* NO The bboard '%p' has been renamed to '%p'.\r\n"; static char msg_mergebb[] = "* NO The bboard '%p' has been merged into '%p'.\r\n"; /* subscribe/unsubscribe errors */ static char rpl_notexists[] = "%a NO %a '%p' does not exist\r\n"; static char rpl_alreadydid[] = "%a NO Already %ad to %a '%p'\r\n"; static char rpl_required[] = "%a NO bboard '%p' is required; you may not unsubscribe.\r\n"; /* create text */ static char txt_splist[] = "server/partition list"; /* delete text */ static char txt_hostname[] = "hostname"; /* address book messages */ static char err_noabooksearch[] = "Unable to search address book list"; static char rpl_badfetchaddr[] = "BAD fetchaddress requires properly formatted address book name and entry\r\n"; static char rpl_badastr[] = "BAD address book entry names must be properly formed strings\r\n"; static char rpl_abookexists[] = "%a NO address book '%p' already exists\r\n"; static char rpl_noentry[] = "%a NO entry '%p' not found\r\n"; static char rpl_abookauth[] = "%a NO User '%p' not permitted to %a address book '%p'\r\n"; static char txt_create[] = "create"; static char txt_access[] = "access"; static char txt_modify[] = "modify"; static char txt_delete[] = "delete"; static char txt_list[] = "list all entries of"; static char rpl_norename[] = "%a NO User '%p' not permitted to rename address book '%p' to '%p'\r\n"; static char rpl_badsearchaddr[] = "BAD searchaddress requires a properly formatted name string\r\n"; static char rpl_badpairs[] = "BAD %s %s must be valid atom/string pairs\r\n"; static char txt_lookupcrit[] = "lookup criteria"; static char txt_fielddata[] = "field data"; static char err_badsearch[] = "Address book search failed"; static char rpl_badstoreaddr[] = "BAD storeaddress requires a properly formatted name, alias and field data\r\n"; static char err_badstore[] = "Failed to modify address book"; static char err_badcreate[] = "Failed to create new address book"; static char err_baddelete[] = "Failed to delete address book"; static char err_badrename[] = "Failed to rename address book"; static char rpl_noabook[] = "%a NO ADDRESSBOOK '%p' does not exist\r\n"; static char msg_addressbook[] = "* ADDRESSBOOK () \".\" %s\r\n"; static char msg_searchaddr[] = "* SEARCHADDRESS %s\r\n"; static char msg_fetchaddr[] = "* FETCHADDRESS %s %s"; static char msg_fielddata[] = " %a %s"; static char txt_addressbook[] = "ADDRESSBOOK"; /* ACL messages */ static char txt_acls[] = "ACL command"; static char txt_setacl[] = "modify ACL for"; static char rpl_badacl[] = "%a NO Failed to %a access control list for %a '%p'\r\n"; static char rpl_noacl[] = "%a NO No ACL entry for identity '%p' in address book '%p'\r\n"; static char msg_acl[] = "* ACL %a %s %s %s\r\n"; static char msg_myrights[] = "* MYRIGHTS %a %s %s\r\n"; /* LOCK messages */ static char rpl_badlock[] = "BAD command '%s' requires an option and one or two valid arguments\r\n"; static char rpl_locked[] = "%a NO [LOCKED] %a%a '%p' already locked by %p\r\n"; static char txt_entry[] = " entry"; static char rpl_notlock[] = "%a NO %a%a '%p' not locked by current client\r\n"; static char rpl_lockfail[] = "%a NO failed to %a %a%a '%p'\r\n"; /* SEEN/LAST messages */ static char rpl_dbfail[] = "NO failed to update mailbox database\r\n"; /* macros to send messages */ #define SEND_STRING(fbuf, str) dispatch_write((fbuf), (str), sizeof (str) - 1) #define SEND_STRING_LEN(fbuf, str, len) dispatch_write((fbuf), (str), len) #define SEND_RESPONSE(fbuf, tag, str) \ sprintf((tag) + strlen(tag), " %s", (str)); \ dispatch_write((fbuf), (tag), 0); #define SEND_RESPONSE1(fbuf, tag, str, arg1) \ strcat((tag), " "); \ sprintf((tag) + strlen(tag), (str), (arg1)); \ dispatch_write((fbuf), (tag), 0); #define SEND_RESPONSE2(fbuf, tag, str, arg1, arg2) \ strcat((tag), " "); \ sprintf((tag) + strlen(tag), (str), (arg1), (arg2)); \ dispatch_write((fbuf), (tag), 0); /* clean abort procedure */ static void imsp_clean_abort() { /* release all advisory locks */ alock_unlock(); /* release all database locks and resources */ sdb_done(); /* notify user */ if (im_fbuf.fd >= 0) { SEND_STRING(&im_fbuf, msg_svrexit); dispatch_close(&im_fbuf); } /* clean up authorization */ auth_free(imsp_id); exit(0); } /* fatal abort (called from xmalloc.c) */ void fatal(s, type) char *s; int type; { static int recurse_code = 0; if (recurse_code) { exit(recurse_code); } recurse_code = type; syslog(LOG_ERR, "%s", s); imsp_clean_abort(); } /* signal manager which clears out passwords */ static void imsp_signal_handler(sig) int sig; { signal(sig, SIG_DFL); auth_free(imsp_id); kill(getpid(), sig); } /* set signals to nuke password before core dumping */ static void imsp_set_signals() { #ifdef SIGQUIT signal(SIGQUIT, imsp_signal_handler); #endif signal(SIGILL, imsp_signal_handler); signal(SIGTRAP, imsp_signal_handler); signal(SIGIOT, imsp_signal_handler); #ifdef SIGEMT signal(SIGEMT, imsp_signal_handler); #endif signal(SIGFPE, imsp_signal_handler); #ifdef SIGBUS signal(SIGBUS, imsp_signal_handler); #endif signal(SIGSEGV, imsp_signal_handler); #ifdef SIGSYS signal(SIGSYS, imsp_signal_handler); #endif signal(SIGURG, imsp_signal_handler); signal(SIGCHLD, imsp_signal_handler); signal(SIGIO, imsp_signal_handler); signal(SIGWINCH, imsp_signal_handler); } /* err procedure for server */ int im_err(type) int type; { static int recurse_code = 0; if (type != DISPATCH_READ_ERR) { if (recurse_code) { exit(recurse_code); } recurse_code = type; if (type == DISPATCH_READ_IDLE) { SEND_STRING(&im_fbuf, msg_autologout); } dispatch_close(&im_fbuf); imsp_clean_abort(); } return (1); } /* get the option number for an acl */ static int lookupopt(atom, optarray) char *atom; char *optarray[]; { int opt; for (opt = 0; optarray[opt] && strcasecmp(atom, optarray[opt]); ++opt); return (optarray[opt] ? opt : -1); } /* convert from base64 to a binary buffer */ static char index_64[128] = { -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 }; #define CHAR64(c) (((c) < 0 || (c) > 127) ? -1 : index_64[(c)]) int from64(out, in) char *out, *in; { int len = 0; int c1, c2, c3, c4; if (*in == '\0' || *in == '\r' || *in == '\n') return (0); do { c1 = in[0]; if (CHAR64(c1) == -1) return (-1); c2 = in[1]; if (CHAR64(c2) == -1) return (-1); c3 = in[2]; if (c3 != '=' && CHAR64(c3) == -1) return (-1); c4 = in[3]; if (c4 != '=' && CHAR64(c4) == -1) return (-1); in += 4; *out++ = (CHAR64(c1) << 2) | (CHAR64(c2) >> 4); ++len; if (c3 != '=') { *out++ = ((CHAR64(c2) << 4) & 0xf0) | (CHAR64(c3) >> 2); ++len; if (c4 != '=') { *out++ = ((CHAR64(c3) << 6) & 0xc0) | CHAR64(c4); ++len; } } } while (*in && c4 != '='); return (len); } /* authenticate the user */ static void imsp_authenticate(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *auth_type; char at[128]; const char *reply = NULL; int result; int (*authproc)(); char *output; int len, olen; const char *user; int protlevel; int sasl_result; const char *serverout; unsigned int serveroutlen; const char *errstr; /* parse command */ if ((auth_type = get_atom(fbuf)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 1); return; } lcase(auth_type); /* save this for future logging */ if (strlen(auth_type) > 127) { strncpy(at, auth_type, 127); } else { strcpy(at, auth_type); } /* start authentication process */ sasl_result = sasl_server_start(imsp_saslconn, auth_type, NULL, 0, &serverout, &serveroutlen); /* sasl_server_start will return SASL_OK or SASL_CONTINUE on success */ while (sasl_result == SASL_CONTINUE) { /* print the message to the user */ im_send(fbuf, NULL, "+ %b\r\n", serveroutlen, serverout); dispatch_flush(fbuf); /* get string from user */ if (dispatch_readline(fbuf) == NULL) { result = SASL_FAIL; } else if ((len = from64(fbuf->upos, fbuf->upos)) < 0) { SEND_RESPONSE(fbuf, tag, rpl_bad64); return; } else { sasl_result = sasl_server_step(imsp_saslconn, fbuf->upos, len, &serverout, &serveroutlen); } } if (sasl_result != SASL_OK) { /* failed authentication */ if (reply == NULL) reply = sasl_errstring(sasl_result, NULL, NULL); if (reply == NULL) reply = err_nologin; SEND_RESPONSE1(fbuf, tag, rpl_no, reply); syslog(LOG_NOTICE, "badlogin: %s %s %s %s", host, "-", at, reply); return; } /* successful login! */ /* get the userid from SASL --- already canonicalized from * mysasl_authproc() */ sasl_result = sasl_getprop(imsp_saslconn, SASL_USERNAME, (const void **) &user); if (sasl_result != SASL_OK) { syslog(LOG_ERR, "Unexpected SASL error %d getting SASL_USERNAME", sasl_result); SEND_RESPONSE1(fbuf, tag, rpl_internalerr, "imsp_authenticate"); dispatch_flush(fbuf); return; } /* get authorization structure for this user */ if (auth_login(&id, user, NULL, &reply) < 0) { syslog(LOG_ERR, "Unexpected error from auth_login(): %s", reply); SEND_RESPONSE1(fbuf, tag, rpl_internalerr, "imsp_authenticate(2)"); dispatch_flush(fbuf); return; } /* check for valid user */ if (option_check(auth_username(id)) < 0 && (!option_test("", opt_newuser, 1, 0) || option_create(auth_username(id)) < 0)) { SEND_RESPONSE1(fbuf, tag, rpl_no, err_invaluser); syslog(LOG_NOTICE, "badlogin: %s %s %s %s", host, user, at, "invalid user"); return; } dispatch_telemetry(fbuf, auth_username(id)); SEND_RESPONSE1(fbuf, tag, rpl_ok, reply); syslog(LOG_NOTICE, "login: %s %s %s %s", host, user, at, reply); dispatch_flush(fbuf); /* tell dispatch layer, ignoring any errors */ dispatch_addsasl(fbuf, imsp_saslconn); imsp_id = id; } /* login the user */ static void imsp_login(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *user, *pass, *olduser = NULL; int result; const char *reply; int loginok = 0; /* assume it will fail */ /* check the arguments on the LOGIN command */ if ((user = copy_astring(fbuf, 1)) == NULL || (pass = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 2); loginok = -1; /* indicates that a reply was already sent */ } /* Try the supplied username and password * If verification fails, maybe this is an administrator trying to * switch to another user-id (Admins must supply a blank password) */ else if (((result = sasl_checkpass(imsp_saslconn, user, 0, pass, 0)) != SASL_OK) && (pass[0] != '\0' || !auth_switchuser(id, user, &olduser)) ) { /* Checkpass failed and switchuser either wasn't tried or also failed*/ /* Make sure "reply" has a reasonable error message */ reply = err_nologin; } /* sasl_checkpass or auth_switchuser was successful * so we need to call auth_login to tell imspd the user-id */ else if (auth_login(&id, user, olduser, &reply) != 0) { syslog(LOG_ERR, "Internal error calling auth_login(%s): %s", user, reply); } /* Verify that an options file exists or can be created */ else if (option_check(auth_username(id)) < 0 && (!option_test("", opt_newuser, 1, 0) || option_create(auth_username(id)) < 0)) { reply = err_invaluser; } /* If it got this far, everything went okay */ else { loginok = 1; imsp_id = id; } /* Report the successful or unsuccessful login */ if (loginok == 0 || loginok == 1) { if (loginok) dispatch_telemetry(fbuf, auth_username(id)); SEND_RESPONSE1(fbuf, tag, loginok ? rpl_ok : rpl_no, reply); syslog(LOG_NOTICE, "%slogin: %s %s %s %s", loginok ? "" : "bad", host, user, "plaintext", reply); } /* Free any leftover strings */ if (pass) { memset(pass, 0, strlen(pass)); free(pass); } if (user) free(user); if (olduser) free(olduser); } /* logout the user */ static void imsp_logout(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { if (fbuf->upos != fbuf->lend) { SEND_RESPONSE1(fbuf, tag, rpl_noargs, cp->word); } else { SEND_STRING(fbuf, msg_logout); SEND_RESPONSE1(fbuf, tag, rpl_ok, txt_logoutuser); dispatch_close(fbuf); imsp_clean_abort(); } } /* do a noop */ static void imsp_noop(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { if (fbuf->upos != fbuf->lend) { SEND_RESPONSE1(fbuf, tag, rpl_noargs, cp->word); } else { SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); } } /* do the "GET" command */ static void imsp_get(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *opt, *name, *value, *user; int rwflag; option_state ostate; if ((opt = copy_astring(fbuf, 3)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 1); } else { user = auth_level(id) >= AUTH_USER ? auth_username(id) : ""; if (option_matchstart(&ostate, user, opt) < 0) { SEND_RESPONSE1(fbuf, tag, rpl_no, err_optiondb); } else { while (option_match(&ostate, user, &name, &value, &rwflag, auth_level(id) == AUTH_ADMIN) != NULL) { im_send(fbuf, NULL, msg_option, name, value, rwflag ? txt_readwrite : txt_readonly); } option_matchdone(&ostate); SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); } } if (opt != NULL) free(opt); } /* do the "SET" command */ static void imsp_set(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *opt, *value = NULL, *user; int auth, result; if ((opt = copy_astring(fbuf, 1)) == NULL || (value = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 2); } else if (auth_level(id) < AUTH_USER) { SEND_RESPONSE1(fbuf, tag, auth_level(id) ? rpl_badauth : rpl_noauth, cp->word); } else { auth = auth_level(id) == AUTH_ADMIN; user = auth_username(id); if ((result = option_set(user, opt, auth, value)) < 0) { if (result == -2) { SEND_RESPONSE1(fbuf, tag, rpl_no, err_quota); } else { im_send(fbuf, NULL, rpl_noset, tag, user, opt); } } else { SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); } } if (opt) free(opt); if (value) free(value); } /* do the "UNSET" command */ static void imsp_unset(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *opt, *newval, *user; int result, auth, rwflag; if ((opt = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 1); } else if (auth_level(id) < AUTH_USER) { SEND_RESPONSE1(fbuf, tag, auth_level(id) ? rpl_badauth : rpl_noauth, cp->word); } else { auth = auth_level(id) == AUTH_ADMIN; user = auth_username(id); result = option_unset(user, opt, auth); if (result < 0) { im_send(fbuf, NULL, rpl_noset, tag, user, opt); } else if (!result) { im_send(fbuf, NULL, rpl_isunset, tag, opt); } else { while (*opt == '*' || *opt == '%') ++opt; newval = option_get(user, opt, auth, &rwflag); if (newval) { im_send(fbuf, NULL, msg_option, opt, newval, rwflag ? txt_readwrite : txt_readonly); free(newval); } SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); } } if (opt != NULL) free(opt); } /* do the "ADDRESSBOOK" command */ static void imsp_addressbook(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *pat, *abook; int attrs; abook_state astate; if ((pat = copy_astring(fbuf, 3)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 1); } else if (abook_findstart(&astate, id, pat) < 0) { SEND_RESPONSE1(fbuf, tag, rpl_no, err_noabooksearch); } else { while (abook_find(&astate, id, &abook, &attrs)) { im_send(fbuf, NULL, msg_addressbook, abook); } abook_finddone(&astate); SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); } if (pat) free(pat); } /* do the "LIST", "LSUB" and "LMARKED" commands */ static void imsp_list(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* do the "SUBSCRIBE" and "UNSUBSCRIBE" commands */ static void imsp_subscribe(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* do the "CREATE" command */ static void imsp_create(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* do the "DELETE" command */ static void imsp_delete(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* do the "RENAME" and "REPLACE" commands */ static void imsp_rename(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* do the "MOVE" command */ static void imsp_move(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* do the "CREATEADDRESSBOOK" command */ static void imsp_createabook(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *name, *user; user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); if ((name = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 1); } else { lcase(name); switch (abook_create(id, name)) { case AB_EXIST: im_send(fbuf, NULL, rpl_abookexists, tag, name); break; case AB_PERM: im_send(fbuf, NULL, rpl_abookauth, tag, user, txt_create, name); break; case AB_FAIL: SEND_RESPONSE(fbuf, tag, err_badcreate); break; default: SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; } } if (name) free(name); } /* do the "DELETEADDRESSBOOK" command */ static void imsp_deleteabook(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *name, *user; user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); if ((name = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 1); } else { lcase(name); switch (abook_delete(id, name)) { case AB_NOEXIST: im_send(fbuf, NULL, rpl_noabook, tag, name); break; case AB_PERM: im_send(fbuf, NULL, rpl_abookauth, tag, user, txt_delete, name); break; case AB_FAIL: SEND_RESPONSE1(fbuf, tag, rpl_no, err_baddelete); break; default: SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; } } if (name) free(name); } /* do the "RENAMEADDRESSBOOK" command */ static void imsp_renameabook(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *name, *newname, *user; user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); if ((name = copy_astring(fbuf, 1)) == NULL || (newname = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 2); } else { lcase(name); lcase(newname); switch (abook_rename(id, name, newname)) { case AB_NOEXIST: im_send(fbuf, NULL, rpl_noabook, tag, name); break; case AB_EXIST: im_send(fbuf, NULL, rpl_abookexists, tag, newname); break; case AB_QUOTA: SEND_RESPONSE1(fbuf, tag, rpl_no, err_quota); break; case AB_PERM: im_send(fbuf, NULL, rpl_norename, tag, user, name, newname); break; case AB_FAIL: SEND_RESPONSE1(fbuf, tag, rpl_no, err_badrename); break; default: SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; } } if (name) free(name); if (newname) free(newname); } /* display an address book entry */ static int show_address(fbuf, id, name, alias) fbuf_t *fbuf; auth_id *id; char *name, *alias; { abook_state astate; abook_fielddata *fetch; int count, i, freedata; if ((fetch = abook_fetch(&astate, id, name, alias, &count, &freedata))) { im_send(fbuf, NULL, msg_fetchaddr, name, alias); for (i = 0; i < count; ++i) { im_send(fbuf, NULL, msg_fielddata, fetch[i].field, fetch[i].data); } SEND_STRING(fbuf, "\r\n"); abook_fetchdone(&astate, fetch, count, freedata); } return (fetch ? 0 : -1); } /* do the "FETCHADDRESS" command */ static void imsp_fetchaddress(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *name = NULL, *alias = NULL, *user; int result; user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); if ((name = copy_astring(fbuf, 1)) == NULL || (alias = copy_astring(fbuf, 1)) == NULL) { SEND_RESPONSE(fbuf, tag, rpl_badfetchaddr); } else if (!abook_canfetch(id, name)) { im_send(fbuf, NULL, rpl_abookauth, tag, user, txt_access, name); } else { lcase(name); do { if ((result = show_address(fbuf, id, name, alias)) < 0) break; free(alias); alias = copy_astring(fbuf, 1); } while (alias); if (result == -1) { im_send(fbuf, NULL, rpl_noentry, tag, alias); } else if (alias == NULL && fbuf->upos != fbuf->lend) { SEND_RESPONSE(fbuf, tag, rpl_badastr); } else { SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); } } if (alias) free(alias); if (name) free(name); } /* do the "SEARCHADDRESS" and "STOREADDRESS" commands */ static void imsp_searchaddress(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *name = NULL, *alias = NULL, *myalias, *user; int fused = 0, fsize = 0, abortflag = 0, result; abook_fielddata *flist = NULL; abook_state astate; void *ldap_state; if ((name = copy_astring(fbuf, 1)) == NULL || (cp->id == IMSP_STOREADDRESS && ((alias = copy_astring(fbuf, 1)) == NULL || fbuf->upos == fbuf->lend))) { SEND_RESPONSE(fbuf, tag, cp->id == IMSP_STOREADDRESS ? rpl_badstoreaddr : rpl_badsearchaddr); } else { lcase(name); while (fbuf->upos < fbuf->lend) { if (fused == fsize) { if (!fsize) { flist = (abook_fielddata *) malloc((fsize = 32) * sizeof (abook_fielddata)); } else { flist = (abook_fielddata *) realloc((char *) flist, (fsize *= 2) * sizeof (abook_fielddata)); } } if (flist == NULL) { SEND_RESPONSE1(fbuf, tag, rpl_no, err_nomem); abortflag = 1; break; } if ((flist[fused].field = copy_atom(fbuf)) == NULL || (flist[fused].data = copy_astring(fbuf, 1)) == NULL) { SEND_RESPONSE2(fbuf, tag, rpl_badpairs, cp->word, alias ? txt_fielddata : txt_lookupcrit); if (flist[fused].field) free(flist[fused].field); abortflag = 1; break; } ++fused; } if (!abortflag) { user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); if (cp->id == IMSP_STOREADDRESS) { result = abook_store(id, name, alias, flist, fused); if (result == AB_SUCCESS && abook_canfetch(id, name)) { show_address(fbuf, id, name, alias); } } else { result = abook_searchstart(&astate, &ldap_state, id, name, flist, fused); if (result == AB_SUCCESS) { while ((myalias = abook_search(&astate, ldap_state))) { im_send(fbuf, NULL, msg_searchaddr, myalias); } abook_searchdone(&astate, ldap_state); } } switch (result) { case AB_NOEXIST: im_send(fbuf, NULL, rpl_noabook, tag, name); break; case AB_QUOTA: SEND_RESPONSE1(fbuf, tag, rpl_no, err_quota); break; case AB_PERM: im_send(fbuf, NULL, rpl_abookauth, tag, user, alias ? txt_modify : txt_access, name); break; case AB_PERM_LIST: im_send(fbuf, NULL, rpl_abookauth, tag, user, txt_list, name); break; case AB_FAIL: SEND_RESPONSE1(fbuf, tag, rpl_no, alias ? err_badstore : err_badsearch); break; default: SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; } } } if (flist) { while (fused--) { free(flist[fused].data); free(flist[fused].field); } free((char *) flist); } if (alias) free(alias); if (name) free(name); } /* do the "DELETEADDRESS" command */ static void imsp_deleteaddress(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *name = NULL, *alias = NULL, *user; int result; if ((name = copy_astring(fbuf, 1)) == NULL || (alias = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 2); } else { lcase(name); user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); result = abook_deleteent(id, name, alias); switch (result) { case AB_PERM: im_send(fbuf, NULL, rpl_abookauth, tag, user, txt_modify, name); break; case AB_FAIL: SEND_RESPONSE1(fbuf, tag, rpl_no, err_badstore); break; case AB_NOEXIST: im_send(fbuf, NULL, rpl_noentry, tag, alias); break; default: SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; } } if (alias) free(alias); if (name) free(name); } /* do the "SETACL" and "DELETEACL" commands */ static void imsp_setacl(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *opt = NULL, *item = NULL, *ident = NULL, *rights = NULL; char *user, *ahost = NULL, *resp; int result = 3, optnum; if ((opt = copy_atom(fbuf)) == NULL || (item = copy_astring(fbuf, 1)) == NULL || (ident = copy_astring(fbuf, 1)) == NULL || (cp->id == IMSP_SETACL && (rights = copy_astring(fbuf, 1)) == NULL) || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, cp->id == IMSP_SETACL ? 4 : 3); } else { user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); switch (optnum = lookupopt(opt, aclopt)) { case ACL_ADDRESSBOOK: lcase(item); result = abook_setacl(id, item, ident, rights); switch (result) { case AB_NOEXIST: im_send(fbuf, NULL, rpl_noabook, tag, item, txt_setacl, item); break; case AB_PERM: im_send(fbuf, NULL, rpl_abookauth, tag, user, txt_setacl, item); break; case AB_FAIL: im_send(fbuf, NULL, rpl_badacl, tag, txt_modify, opt, item); break; case AB_SUCCESS: SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; case 1: im_send(fbuf, NULL, rpl_noacl, tag, ident, item); break; } break; case ACL_MAILBOX: SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); break; } } if (ahost) free(ahost); if (rights) free(rights); if (ident) free(ident); if (item) free(item); if (opt) free(opt); } /* do the "GETACL" and "MYRIGHTS" commands */ static void imsp_getacl(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *opt = NULL, *item = NULL, *ident, *rights, *user; char *acl, tmp, *defacl = NULL; char rbuf[ACL_MAXSTR]; int result = 2, optnum; if ((opt = copy_atom(fbuf)) == NULL || (item = copy_astring(fbuf, 1)) == NULL || fbuf->upos != fbuf->lend) { SEND_RESPONSE2(fbuf, tag, rpl_wrongargs, cp->word, 2); } else { user = auth_username(auth_level(id) >= AUTH_USER ? id : NULL); lcase(item); optnum = lookupopt(opt, aclopt); if (optnum == ACL_MAILBOX) { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); return; } else if (cp->id == IMSP_GETACL) { if (optnum == ACL_ADDRESSBOOK) { acl = abook_getacl(id, item); if ((acl != NULL) && (*acl == '\0')) { int defacllen = strlen(user) + 32; defacl = malloc(defacllen); if (defacl) { snprintf(acl = defacl, defacllen, "%s\t%s\t", user, acl_masktostr(ACL_ALL, rbuf)); } } } if (acl != NULL) { result = 0; do { ident = acl; for (rights = ident; *rights && *rights != '\t'; ++rights); if (*rights) ++rights; for (acl = rights; *acl && *acl != '\t'; ++acl); if (*rights) { rights[-1] = '\0'; tmp = *acl; *acl = '\0'; im_send(fbuf, NULL, msg_acl, optnum == ACL_MAILBOX ? txt_mailbox : txt_addressbook, item, ident, rights); *acl = tmp; rights[-1] = '\t'; } if (*acl == '\t') ++acl; } while (*acl != '\0'); } else { result = 3; } } else { if (optnum == ACL_ADDRESSBOOK) { result = abook_myrights(id, item, rbuf); } else if (optnum == ACL_MAILBOX) { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); return; } if (!result) { im_send(fbuf, NULL, msg_myrights, opt, item, rbuf); } } switch (result) { default: /* XXX why not a SEND_ macro? */ im_send(fbuf, NULL, rpl_badacl, tag, txt_access, opt, item); break; case 0: SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; case 1: SEND_RESPONSE1(fbuf, tag, rpl_notsupported, txt_acls); break; case 2: SEND_RESPONSE2(fbuf, tag, rpl_badopt, opt, cp->word); break; case 3: /* XXX why not a SEND_ macro? */ im_send(fbuf, NULL, rpl_notexists, tag, opt, item); break; } } if (defacl) free(defacl); if (item) free(item); if (opt) free(opt); } /* do the "LOCK" and "UNLOCK" commands */ static void imsp_lock(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { char *opt, *item1 = NULL, *item2 = NULL, *value = NULL, *lstr, *user; int optnum, perm, rwflag; if ((opt = get_atom(fbuf)) == NULL) { SEND_RESPONSE1(fbuf, tag, rpl_badlock, cp->word); } else if ((optnum = lookupopt(opt, lockopt)) < 0) { SEND_RESPONSE2(fbuf, tag, rpl_badopt, opt, cp->word); } else if ((item1 = copy_astring(fbuf, 1)) == NULL || (optnum == 1 && (item2 = copy_astring(fbuf, 1)) == NULL) || fbuf->upos != fbuf->lend) { SEND_RESPONSE1(fbuf, tag, rpl_badlock, cp->word); } else { perm = 1; user = auth_username(id); if (optnum) { lcase(item1); if (!abook_canlock(id, item1)) { im_send(fbuf, NULL, rpl_abookauth, tag, user, txt_modify, item1); perm = 0; } } else { value = option_get(user, item1, 1, &rwflag); if (auth_level(id) == AUTH_NONE || !rwflag) { im_send(fbuf, NULL, rpl_noset, tag, user, item1); perm = 0; } } if (perm) { lstr = host; switch (alock_dolock(user, item1, item2, cp->id == IMSP_LOCK, &lstr)) { case -1: /* failure */ im_send(fbuf, NULL, rpl_lockfail, tag, cp->word, lockopt[optnum], optnum ? txt_entry : "", item2 ? item2 : item1); break; case 0: /* no error */ if (cp->id == IMSP_LOCK) { if (optnum) { if (abook_canfetch(id, item1)) { show_address(fbuf, id, item1, item2); } } else if (value) { im_send(fbuf, NULL, msg_option, item1, value, txt_readwrite); } } SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); break; case 1: /* already locked/unlocked */ im_send(fbuf, NULL, cp->id == IMSP_LOCK ? rpl_locked : rpl_notlock, tag, lockopt[optnum], optnum ? txt_entry : "", item2 ? item2 : item1, lstr); break; } } } if (value) free(value); if (item2) free(item2); if (item1) free(item1); } /* do the "CAPABILITY" command */ static void imsp_capability(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { const char *sasllist; /* the list of SASL mechanisms */ unsigned mechcount; unsigned strlength; /* send the first part */ SEND_STRING(fbuf, msg_capability); /* maybe send the sasl stuff */ if (sasl_listmech(imsp_saslconn, NULL, " AUTH=", " AUTH=", "", &sasllist, &strlength, &mechcount) == SASL_OK && mechcount > 0) { SEND_STRING_LEN(fbuf, sasllist, strlength); } else { /* else don't show anything */ } /* send the newline */ SEND_STRING(fbuf," LITERAL+\r\n"); SEND_RESPONSE1(fbuf, tag, rpl_complete, cp->word); } /* do the "LAST" command */ static void imsp_last(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* do the "SEEN" command */ static void imsp_seen(fbuf, cp, tag, id, host) fbuf_t *fbuf; command_t *cp; char *tag, *host; auth_id *id; { SEND_RESPONSE1(fbuf, tag, rpl_notsupported, "IMSP bboard commands"); } /* list of commands & procedures to manage them */ static command_t com_list[] = { {"login", IMSP_LOGIN, imsp_login}, {"logout", IMSP_LOGOUT, imsp_logout}, {"noop", IMSP_NOOP, imsp_noop}, {"get", IMSP_GET, imsp_get}, {"set", IMSP_SET, imsp_set}, {"unset", IMSP_UNSET, imsp_unset}, {"subscribe", IMSP_SUBSCRIBE, imsp_subscribe}, {"unsubscribe", IMSP_UNSUBSCRIBE, imsp_subscribe}, {"create", IMSP_CREATE, imsp_create}, {"delete", IMSP_DELETE, imsp_delete}, {"rename", IMSP_RENAME, imsp_rename}, {"replace", IMSP_REPLACE, imsp_rename}, {"move", IMSP_MOVE, imsp_move}, {"fetchaddress", IMSP_FETCHADDRESS, imsp_fetchaddress}, {"searchaddress", IMSP_SEARCHADDRESS, imsp_searchaddress}, {"storeaddress", IMSP_STOREADDRESS, imsp_searchaddress}, {"deleteaddress", IMSP_DELETEADDRESS, imsp_deleteaddress}, {"setacl", IMSP_SETACL, imsp_setacl}, {"deleteacl", IMSP_DELETEACL, imsp_setacl}, {"getacl", IMSP_GETACL, imsp_getacl}, {"myrights", IMSP_MYRIGHTS, imsp_getacl}, {"lock", IMSP_LOCK, imsp_lock}, {"unlock", IMSP_UNLOCK, imsp_lock}, {"addressbook", IMSP_ADDRESSBOOK, imsp_addressbook}, {"createaddressbook", IMSP_CREATEABOOK, imsp_createabook}, {"deleteaddressbook", IMSP_DELETEABOOK, imsp_deleteabook}, {"renameaddressbook", IMSP_RENAMEABOOK, imsp_renameabook}, {"capability", IMSP_CAPABILITY, imsp_capability}, {"authenticate", IMSP_AUTHENTICATE, imsp_authenticate}, {"list", IMSP_LIST, imsp_list}, {"lsub", IMSP_LSUB, imsp_list}, {"lmarked", IMSP_LMARKED, imsp_list}, {"last", IMSP_LAST, imsp_last}, {"seen", IMSP_SEEN, imsp_seen}, {NULL, 0, NULL} }; /* start the protocol exchange */ void im_start(int fd, char *host) { FILE *shutdown; char *tag, *command; command_t *cp; fbuf_t *fbuf = &im_fbuf; char tagbuf[MAX_BUF * 3]; char *p; const char *errstr; /* if the IMAP shutdown file exists, send its contents as an alert and exit */ if ((shutdown = fopen(SHUTDOWNFILENAME, "r")) != NULL) { char buf[sizeof(tagbuf)-sizeof(msg_alert)]; fgets(buf, sizeof(buf), shutdown); fclose(shutdown); if (p = strchr(buf, '\r')) *p = '\0'; if (p = strchr(buf, '\n')) *p = '\0'; /* can't have [ be first char, sigh */ for(p = buf; *p == '['; p++); snprintf(tagbuf, sizeof(tagbuf), msg_alert, p); if (write(fd, tagbuf, strlen(tagbuf)) < 0) { perror("write shutdown alert"); } close(fd); return; } /* send greeting, setup idle autologout */ snprintf(tagbuf, sizeof(tagbuf), msg_greeting, VERSION); if (write(fd, tagbuf, strlen(tagbuf)) < 0) { perror("write greeting"); close(fd); return; } (void) dispatch_err(MAX_IDLE_TIME, MAX_WRITE_WAIT, im_err); dispatch_initbuf(fbuf, fd); /* start SASL and set properties for this server thread */ if (mysasl_server_init("imap", &imsp_saslconn, &errstr) < 0) { syslog(LOG_ERR, "SASL server init failed: %s", errstr); close(fd); return; } /* initialize user authentication information */ imsp_id = NULL; /* initialize signal handlers to nuke password */ imsp_set_signals(); /* main protocol loop */ while (dispatch_readline(fbuf) != NULL) { /* get the tag - must not be NULL or greater than 64 characters long */ tag = get_atom(fbuf); if ((tag == (char *) NULL) || (strlen(tag) > 64)) { SEND_STRING(fbuf, msg_badtag); } else { /* copy tag into tag-response buffer */ strcpy(tagbuf, tag); /* get the command */ command = get_atom(fbuf); if (command == (char *) NULL) { SEND_RESPONSE(fbuf, tagbuf, rpl_badcommand); } else { /* look up the command */ lcase(command); cp = com_list; while (cp->word != NULL && strcmp(cp->word, command)) { ++cp; } if (cp->proc) { (*cp->proc)(fbuf, cp, tagbuf, imsp_id, host); } else { SEND_RESPONSE1(fbuf, tagbuf, rpl_invalcommand, command); } } } dispatch_flush(fbuf); } dispatch_close(fbuf); imsp_clean_abort(); } cyrus-imspd-v1.8/imsp/imsp_server.h0100644004310100000120000000375207217272512016657 0ustar shadowstaff/* imsp_server.h -- Interactive Mail Support Protocol routines * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 2/16/93 */ /* start talking the protocol over a file descriptor */ void im_start( /* int fd, char *host */ ); cyrus-imspd-v1.8/imsp/login_krb.c0100644004310100000120000000733107765430215016263 0ustar shadowstaff/* login_krb.c -- Kerberos login authentication * * (C) Copyright 1994-1996 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include #include #ifdef HAVE_SYSEXITS_H #include #endif #include #include #include "util.h" #include "syncdb.h" #include "option.h" #ifndef EX_OK #define EX_OK 0 #endif #ifndef EX_OSFILE #define EX_OSFILE 72 #endif static login_authproc(); extern struct acte_server krb_acte_server; static char lrealm[REALM_SZ]; /* * Kerberos-authenticated login */ int login_plaintext(user, pass, reply) char *user; char *pass; char **reply; { char *val; int rwflag; if (!lrealm[0]) { if (krb_get_lrealm(lrealm,1)) { fatal("can't find local Kerberos realm", EX_OSFILE); } if ((val = option_get("", "imsp.login.srvtab", 1, &rwflag))) { kerberos_set_srvtab(val); } } if (kerberos_verify_password(user, pass, "imap", reply) == 0) { return 1; } return 0; } int login_authenticate(authtype, mech, authproc) char *authtype; struct acte_server **mech; int (**authproc)(); { char *val; int rwflag; if (strcmp(authtype, "kerberos_v4") != 0) return 1; if (!lrealm[0]) { if (krb_get_lrealm(lrealm,1)) { fatal("can't find local Kerberos realm", EX_OSFILE); } if ((val = option_get("", "imsp.login.srvtab", 1, &rwflag))) { kerberos_set_srvtab(val); } } *mech = &krb_acte_server; *authproc = login_authproc; return 0; } static int login_authproc(user, auth_identity, reply) char *user; char *auth_identity; char **reply; { char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; char auth_aname[ANAME_SZ]; char auth_inst[INST_SZ]; char auth_realm[REALM_SZ]; static char replybuf[100]; aname[0] = inst[0] = realm[0] = '\0'; auth_aname[0] = auth_inst[0] = auth_realm[0] = '\0'; if (kname_parse(aname, inst, realm, user) != 0) { *reply = "unparsable user name"; return 1; } if (kname_parse(auth_aname, auth_inst, auth_realm, auth_identity) != 0) { *reply = "unparsable Kerberos identity"; return 1; } /* If remote realm, check configuration to ensure they're allowed in */ if (realm[0] && !option_lookup("", "imsp.login.realms", 1, realm)) { snprintf(replybuf, sizeof(replybuf), "cross-realm login from %s%s%s@%s denied", auth_aname, auth_inst[0] ? "." : "", auth_inst, auth_realm); *reply = replybuf; return 1; } /* Logging in as the user in the authenticator? */ if (strcmp(auth_aname, aname) == 0 && strcmp(auth_inst, inst) == 0 && strcmp(auth_realm, realm[0] ? realm : lrealm) == 0) { return 0; } snprintf(replybuf, sizeof(replybuf), "login as %s%s%s@%s denied", auth_aname, auth_inst[0] ? "." : "", auth_inst, auth_realm); *reply = replybuf; return 1; } cyrus-imspd-v1.8/imsp/login_unix.c0100644004310100000120000000320005667734341016465 0ustar shadowstaff/* login_unix.c -- Unix password file login authentication * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include #include #include #include /* * Unix passwd-authenticated login */ int login_plaintext(user, pass, reply) char *user; char *pass; char **reply; { struct passwd *pwd; extern char *crypt(); pwd = getpwnam(user); if (!pwd) return 1; if (strcmp(pwd->pw_passwd, crypt(pass, pwd->pw_passwd)) != 0) { *reply = "wrong password"; return 1; } return 0; } int login_authenticate(authtype, mech, authproc) char *authtype; struct acte_server **mech; int (**authproc)(); { return 1; } cyrus-imspd-v1.8/imsp/login_unix_shadow.c0100644004310100000120000000321606425166147020035 0ustar shadowstaff/* login_unix.c -- Unix password file login authentication * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include #include #include #include #include /* * Unix passwd-authenticated login */ int login_plaintext(user, pass, reply) char *user; char *pass; char **reply; { struct spwd *pwd; extern char *crypt(); pwd = getspnam(user); if (!pwd) return 1; if (strcmp(pwd->sp_pwdp, crypt(pass, pwd->sp_pwdp)) != 0) { *reply = "wrong password"; return 1; } return 0; } int login_authenticate(authtype, mech, authproc) char *authtype; struct acte_server **mech; int (**authproc)(); { return 1; } cyrus-imspd-v1.8/imsp/main.c0100644004310100000120000001636210000542307015223 0ustar shadowstaff/* main.c -- main entry point for imsp server * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 2/16/93 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "version.h" #include "dispatch.h" #include "imsp.h" #include "imsp_server.h" #include "authize.h" #include "util.h" #include "syncdb.h" #include "option.h" #include "sasl_support.h" int imspd_debug = 0; struct sockaddr_in imspd_localaddr, imspd_remoteaddr; static char msg_forkfailed[] = "* BYE IMSP server is currently overloaded\r\n"; /* cleanup a child */ static void cleanup_child(int sig) { while (waitpid(-1, NULL, WNOHANG) > 0); /* NOTE: some stupid Unix varients (Solaris) reset the signal handler * every time it is called. This sets it back to avoid endless zombies. */ signal(SIGCHLD, cleanup_child); } /* get host info for a connection */ static char *gethinfo(int fd) { int socksz; struct hostent *hent; char *iaddr; static char host[MAXHOSTNAMELEN]; /* find out hostname of client */ strcpy(host, "unknown-host"); socksz = sizeof (struct sockaddr_in); if (getpeername(fd, (struct sockaddr *) &imspd_remoteaddr, &socksz) < 0) { return (NULL); } socksz = sizeof (struct sockaddr_in); getsockname(fd, (struct sockaddr *) &imspd_localaddr, &socksz); if ((iaddr = inet_ntoa(imspd_remoteaddr.sin_addr))) { strcpy(host, iaddr); } if ((hent = gethostbyaddr((char *) &imspd_remoteaddr.sin_addr, sizeof (struct in_addr), AF_INET)) != NULL) { strcpy(host, hent->h_name); } return (host); } /* start server socket */ static void start_server(int port_number) { int sock, len, pid, newfd, tries = 0; struct sockaddr_in server; struct servent *svent; char *host; if (imspd_debug && (setsid((pid_t)0) < 0)) { syslog(LOG_INFO, "imspd: warning: unable to disassocate from parent: %m"); } syslog(LOG_NOTICE, "imspd: start"); /* set up signal handler for child processes */ signal(SIGCHLD, cleanup_child); /* open IMSP service port */ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { syslog(LOG_ERR, "imspd exiting: socket: %m"); exit(1); } { int foo = 1; if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&foo, sizeof(foo)) < 0) { syslog(LOG_INFO, "imspd: warning: unable to set socket option SO_REUSEADDR: %m"); } } server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); if (port_number) { server.sin_port = htons(port_number); } else { svent = getservbyname(IMSP_PORTNAME, IMSP_PROTOCOL); server.sin_port = svent ? svent->s_port : htons(IMSP_PORT); } while (bind(sock, (struct sockaddr *) &server, sizeof (server)) < 0) { if (errno != EADDRINUSE || ++tries > 30) { syslog(LOG_ERR, "imspd exiting: bind: %m"); exit(1); } syslog(LOG_INFO, "imspd: temporary bind error: %m"); sleep(1); } (void) listen(sock, 10); for (;;) { /* wait for connection */ if (dispatch_loop(sock, 0) < 0) { syslog(LOG_ERR, "imspd exiting: dispatch loop: %m"); exit(1); } /* accept connection */ len = sizeof (struct sockaddr_in); newfd = accept(sock, (struct sockaddr *) &server, &len); if (newfd < 0) { syslog(LOG_ERR, "imspd abandoning connection: accept (0x%x): %m", server.sin_addr.s_addr); /* maybe it'll set this... */ continue; } /* fork server process */ if (!imspd_debug) { pid = fork(); if (pid == 0) { (void) close(sock); /* get host info */ host = gethinfo(newfd); im_start(newfd, host); exit(0); } else if (pid < 0) { (void) write(newfd, msg_forkfailed, sizeof (msg_forkfailed)); syslog(LOG_ERR, "imspd: unable to start worker: %m"); } (void) close(newfd); } else { (void) close(sock); /* get host info */ host = gethinfo(newfd); im_start(newfd, host); } } } int main(int argc, char **argv) { char *host; extern optind; extern char *optarg; int c, errflag = 0, port_number = 0; const char *errstr; while ((c = getopt(argc, argv, "dp:")) != EOF) { switch (c) { case 'd': imspd_debug = 1; break; case 'p': port_number = atoi(optarg); break; default: errflag = 1; break; } } if (optind != argc) errflag = 1; if (errflag) { fprintf(stderr, "Usage: %s [-d] [-p port]\n" "use -d to prevent forking and to print extra debugging info\n" "use -p to specify a port number\n", argv[0]); exit(-1); } (void)openlog("imsp", LOG_PID, LOG_LOCAL6); host = gethinfo(0); if (!host) printf("Cyrus IMSP server version %s\n", VERSION); if (sdb_init() < 0) { fprintf(stderr, "imspd: Failed to initialize database module.\n" "You may need to create the IMSP runtime database directory\n" "and you must run as root.\n"); syslog(LOG_ERR,"imspd: Failed to initialize database module.\n" "You may need to create the IMSP runtime database directory\n" "and you must run as root.\n"); exit(1); } sdb_create("abooks"); dispatch_init(); if (mysasl_init("imspd", &errstr) < 0) { syslog(LOG_ERR,"imspd: failed to initialize SASL from main(): %s", errstr ? errstr : ""); exit(1); } if (!host) { start_server(port_number); } else { im_start(0, host); } } cyrus-imspd-v1.8/imsp/option.c0100644004310100000120000003744707765430215015640 0ustar shadowstaff/* option.c -- IMSP option routines * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 4/6/93 * * Might want to make magicopt return malloc()'d string for variable width * magic options. */ #include #include #include #include "util.h" #include "syncdb.h" #include "option.h" #include "glob.h" /* from adate.c: */ extern char *n_arpadate(); /* from OS: */ extern char *malloc(), *realloc(); /* various strings */ static char options[] = "options"; static char optiondb[] = "user/%s/options"; /* predefined options used */ static char opt_quota[] = "imsp.user.quota"; static char opt_usage[] = "imsp.user.quota.usage"; static char opt_date[] = "common.date"; static char opt_domain[] = "common.domain"; static char opt_from[] = "common.from"; /* magic options */ static char *magicopt(name, val, user) char *name, *val, *user; { char *tmp; static char magicbuf[256]; if (*val == '\0') { if (!strcasecmp(name, opt_date)) { return (n_arpadate()); } if (!strcasecmp(name, opt_from) && *user) { tmp = option_get("", opt_domain, 1, NULL); *magicbuf = '\0'; if (tmp != NULL) { snprintf(magicbuf, sizeof(magicbuf), "%s@%s", user, tmp); free(tmp); } return (magicbuf); } } else if (!strcasecmp(name, opt_usage)) { snprintf(magicbuf, sizeof(magicbuf), "%ld", (long) ((atol(val) + 1023) / 1024)); return (magicbuf); } return (val); } /* make sure user has options database * returns 0 if database exists, -1 on failure */ int option_check(user) char *user; { char dbname[256]; snprintf(dbname, sizeof(dbname), optiondb, user); return (sdb_check(dbname)); } /* create new user options database * returns -1 on failure */ int option_create(user) char *user; { char dbname[256]; snprintf(dbname, sizeof(dbname), optiondb, user); return (sdb_create(dbname)); } /* begin a match */ int option_matchstart(state, user, pat) option_state *state; char *user, *pat; { int result; char dbname[256]; /* read user options database if user isn't the empty string */ state->ukv = (sdb_keyvalue *) NULL; state->ucount = 0; if (*user) { snprintf(dbname, sizeof(dbname), optiondb, user); result = sdb_match(dbname, pat, SDB_ICASE, NULL, 0, &state->ukv, &state->ucount); } if (*user && result < 0) { state->ucount = state->gcount = 0; state->gkv = state->ukv = (sdb_keyvalue *) NULL; return (-1); } else { /* read global options database * set copy flag due to magic options */ result = sdb_match(options, pat, SDB_ICASE, NULL, 1, &state->gkv, &state->gcount); if (result < 0) { sdb_freematch(state->ukv, state->ucount, 0); state->ucount = state->gcount = 0; state->gkv = state->ukv = (sdb_keyvalue *) NULL; return (-1); } } state->ukvpos = state->ukv; state->gkvpos = state->gkv; state->utotal = state->ucount; state->gtotal = state->gcount; state->buflen = 0; state->buf = (char *) NULL; return (0); } /* get the next match * returns *name, or NULL * *name could vanish if any other db calls are made * if admin is non-zero, then administrator options should be shown */ char *option_match(state, user, name, value, rwflag, admin) option_state *state; char *user; char **name, **value; int *rwflag; int admin; { int cmp; char *val; /* NOTE: assume gkv & ukv arrays are sorted from lowest to highest */ do { /* find the smallest key */ if (state->gcount) { cmp = -1; if (state->ucount) { cmp = strcasecmp(state->gkvpos->key, state->ukvpos->key); } } else if (state->ucount) { cmp = 1; } else { return (NULL); } /* grab the argument */ if (cmp == 0) { *name = state->ukvpos->key; val = state->ukvpos->value; ++state->ukvpos, ++state->gkvpos; --state->gcount, --state->ucount; } else if (cmp > 0) { *name = state->ukvpos->key; val = state->ukvpos->value; ++state->ukvpos, --state->ucount; } else { *name = state->gkvpos->key; val = state->gkvpos->value; ++state->gkvpos, --state->gcount; } } while (*val == 'N' && !admin); /* set read/write flag */ *rwflag = (*val == 'W'); val += 2; /* handle "magic" options */ val = magicopt(*name, val, user); /* make space for option value */ if (state->buflen < strlen(val) + 1) { if (!state->buflen) { state->buflen = strlen(val) + 1; state->buf = malloc(state->buflen); } else { state->buflen = strlen(val) + 1; state->buf = realloc(state->buf, state->buflen); } if (state->buf == NULL) { return (NULL); } } /* copy option value */ strcpy(state->buf, val); *value = state->buf; return (*name); } /* finish option matching */ void option_matchdone(state) option_state *state; { if (state->buf) free(state->buf); if (state->gkv) sdb_freematch(state->gkv, state->gtotal, 1); if (state->ukv) sdb_freematch(state->ukv, state->utotal, 0); state->buf = NULL; state->gkv = state->ukv = NULL; } /* get an option * if admin is set then non-visible options will work * returns NULL for no entry * caller must free the result */ char *option_get(user, opt, admin, rwflag) char *user, *opt; int admin; int *rwflag; { char *result, *value; char dbname[256]; /* initialize results */ value = result = NULL; /* check user options database if user isn't the empty string */ if (*user) { snprintf(dbname, sizeof(dbname), optiondb, user); if (sdb_get(dbname, opt, SDB_ICASE, &value) < 0) return (NULL); } /* check global options */ if (value == NULL && sdb_get(options, opt, SDB_ICASE, &value) < 0) { return (NULL); } /* check for "non-visible" options */ if (value && *value == 'N' && !admin) value = NULL; /* set rwflag */ if (rwflag && value) *rwflag = *value == 'W'; /* check for "magic" options */ if (value) { value += 2; value = magicopt(opt, value, user); } /* allocate space for result if necessary */ if (value) { result = malloc(strlen(value) + 1); if (result != NULL) { /* copy option value */ strcpy(result, value); } } return (result); } /* test if an option is "on" * like option_get, but parses boolean & returns dflt if option is not set. */ int option_test(user, opt, admin, dflt) char *user, *opt; int admin, dflt; { char *value; char dbname[256]; /* initialize result */ value = NULL; /* check user options database if user isn't the empty string */ if (*user) { snprintf(dbname, sizeof(dbname), optiondb, user); if (sdb_get(dbname, opt, SDB_ICASE, &value) < 0) return (NULL); } /* check global options */ if (value == NULL && sdb_get(options, opt, SDB_ICASE, &value) < 0) { return (NULL); } /* check for "non-visible" options */ if (value && *value == 'N' && !admin) value = NULL; /* check for "magic" options */ if (value) value = magicopt(opt, value, user); return (value ? value[2] == '+' : dflt); } /* get a list option */ option_list *option_getlist(user, opt, admin) char *user, *opt; int admin; { option_list *result; char *data, *scan, **ptr; int count = 0, c; /* get option */ scan = data = option_get(user, opt, admin, NULL); if (!data) return (NULL); /* count entries in list */ if (*scan != '(') { free(data); return (NULL); } ++scan; while (isspace(*scan)) ++scan; while (*scan && *scan != ')') { ++count; while (*scan && *scan != ')' && !isspace(*scan)) ++scan; while (isspace(*scan)) ++scan; } /* make space for list */ result = (option_list *) malloc(sizeof (option_list) + sizeof (char *) * count); if (result == NULL) { free(data); return (NULL); } /* parse the list */ ptr = result->item; result->count = count; result->data = data; scan = data + 1; while (isspace(*scan)) ++scan; c = *scan; while (c && c != ')') { ++count; *ptr++ = scan; while (*scan && *scan != ')' && !isspace(*scan)) ++scan; c = *scan; *scan++ = '\0'; if (c && c != ')') { while (isspace(*scan)) ++scan; c = *scan; } } *ptr = NULL; return (result); } /* free results of option_getlist */ void option_freelist(olist) option_list *olist; { free(olist->data); free((char *) olist); } /* check if a string is in a list * returns 0 if not in list or error, 1 if in list */ int option_lookup(user, opt, admin, str) char *user, *opt; int admin; char *str; { option_list *olist; char **pptr; int result = 0; olist = option_getlist(user, opt, admin); if (olist != NULL) { if (olist->count) { pptr = olist->item; while (*pptr != NULL && strcasecmp(str, *pptr)) ++pptr; if (*pptr) result = 1; } free(olist->data); free((char *) olist); } return (result); } /* check/update user quota usage * delta -- change in usage (in bytes) * returns -1 on db error, -3 on quota overflow, 0 on success * NOTE: will never return -3 if delta is negative. */ int option_doquota(user, delta) char *user; long delta; { char *value; long usage, quota; int result; char dbname[256]; char usagestr[64]; /* if there's no change, don't worry about it */ if (!delta) return (0); /* set database & get usage */ snprintf(dbname, sizeof(dbname), optiondb, user); if (sdb_get(dbname, opt_usage, SDB_ICASE, &value) < 0) { if (sdb_create(dbname) < 0 || sdb_get(dbname, opt_usage, SDB_ICASE, &value) < 0) { return (-1); } } /* calculate the usage */ usage = delta; if (value && *value) usage += atol(value + 1); if (usage < 0) usage = 0; snprintf(usagestr, sizeof(usagestr), "R %ld", usage); /* check quota if delta > 0 */ if (delta > 0) { /* get the quota */ quota = 0; if (sdb_get(dbname, opt_quota, SDB_ICASE, &value) < 0 || (!value && sdb_get(options, opt_quota, SDB_ICASE, &value) < 0)) { return (-1); } if (value && *value) quota = atol(value + 1) * 1024L; if (quota && quota < usage) return (-3); } /* change usage in database */ result = 0; if (sdb_writelock(dbname, opt_usage, SDB_ICASE) < 0) return (-1); result = sdb_set(dbname, opt_usage, SDB_ICASE, usagestr); if (sdb_unlock(dbname, opt_usage, SDB_ICASE) < 0) result = -1; return (result); } /* set an option * returns -1 on failure, -3 on over quota */ int option_set(user, opt, admin, value) char *user, *opt; int admin; char *value; { int globflag = 0, type = 0, result; long delta; char *scan, *newval, *oldval; char dbname[256]; /* set database */ snprintf(dbname, sizeof(dbname), optiondb, user); /* check for administrator features */ if (admin) { /* check for global-option prefix */ if (*opt == '*') { globflag = 1; strcpy(dbname, options); ++opt; } /* check for read-only/non-visible prefix */ if (*opt == '%') { ++type; if (*++opt == '%') { ++type, ++opt; } } } /* make sure there are no other special characters */ for (scan = opt; *scan; ++scan) { if (*scan == '*' || *scan == '%') return (-1); } if (!strcasecmp(opt, opt_usage)) return (-1); /* lock the entry */ if (sdb_writelock(dbname, opt, SDB_ICASE) < 0) return (-1); /* check if user is permitted to make change */ if (sdb_get(dbname, opt, SDB_ICASE, &oldval) == 0) { if (oldval == NULL) sdb_get(options, opt, SDB_ICASE, &oldval); /* option exists so check to make sure it is writable */ if ((admin == 0) && (oldval != NULL) && (*oldval != 'W')) { sdb_unlock(dbname, opt, SDB_ICASE); return (-1); } } /* make space for new option */ newval = malloc(strlen(value) + 3); if (newval == NULL) { sdb_unlock(dbname, opt, SDB_ICASE); return (-1); } /* adjust quota: only read-write user options count against quota */ if (!globflag) { delta = 0; if (oldval && *oldval == 'W') delta = 2 - strlen(oldval) - strlen(opt); if (!type) delta += strlen(opt) + strlen(value); if ((result = option_doquota(user, delta)) < 0) { free(newval); sdb_unlock(dbname, opt, SDB_ICASE); return (result); } } /* set type & copy new option */ *newval = "WRN"[type]; newval[1] = ' '; strcpy(newval + 2, value); /* add new option to database */ result = sdb_set(dbname, opt, SDB_ICASE, newval); if (sdb_unlock(dbname, opt, SDB_ICASE) < 0) result = -1; free(newval); /* if we had an error, undo quota adjustment */ if (result < 0) option_doquota(user, -delta); return (result); } /* unset an option * returns -1 on error, 0 if option was not set, 1 if option was unset */ int option_unset(user, opt, admin) char *user, *opt; int admin; { int globflag = 0, type = 0, result; char *scan, *oldval; char dbname[256]; /* set database */ snprintf(dbname, sizeof(dbname), optiondb, user); /* check for administrator features */ if (admin) { /* check for global-option prefix */ if (*opt == '*') { globflag = 1; strcpy(dbname, options); ++opt; } /* check for read-only/non-visible prefix */ if (*opt == '%') { ++type; if (*++opt == '%') { ++type, ++opt; } } } /* make sure there are no other special characters */ for (scan = opt; *scan; ++scan) { if (*scan == '*' || *scan == '%') return (-1); } /* lock the entry */ if (sdb_writelock(dbname, opt, SDB_ICASE) < 0) return (-1); /* check if user is allowed to unset the option */ if ((sdb_get(dbname, opt, SDB_ICASE, &oldval) < 0) || ((admin == 0) && (oldval != NULL) && (*oldval != 'W'))) { sdb_unlock(dbname, opt, SDB_ICASE); return (-1); } /* adjust the quota usage */ if (oldval != NULL) { if (option_doquota(user, 2 - strlen(oldval) - strlen(opt)) < 0) { sdb_unlock(dbname, opt, SDB_ICASE); return (-1); } } /* remove it */ result = sdb_remove(dbname, opt, SDB_ICASE) < 0 ? 0 : 1; /* unlock the entry */ if (sdb_unlock(dbname, opt, SDB_ICASE) < 0) result = -1; return (result); } cyrus-imspd-v1.8/imsp/option.h0100644004310100000120000001073207740330061015620 0ustar shadowstaff/* option.h -- IMSP option routines * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 4/6/93 */ #ifndef OPTION_H #define OPTION_H #include "syncdb.h" /* state used for option_match */ typedef struct option_state { /* all variables are private to option module */ sdb_keyvalue *gkv, *ukv, *gkvpos, *ukvpos; int gcount, ucount, gtotal, utotal, buflen; char *buf; } option_state; /* storage for list options */ typedef struct option_list { int count; char *data; char *item[1]; } option_list; /* make sure user has options database * returns 0 if database exists, -1 on failure */ int option_check( /* char *user */ ); /* create new user options database * returns -1 on failure */ int option_create( /* char *user */ ); /* begin a match * returns -1 on failure */ int option_matchstart( /* option_state *state, char *user, char *pat */ ); /* get the next match * returns *name, or NULL * *name could vanish if any other db calls are made * if admin is non-zero, then administrator options should be shown */ char *option_match( /* option_state *state, char *user, char **name, char **value, int *rwflag, int admin */ ); /* finish option matching */ void option_matchdone( /* option_state *state */ ); /* get an option * if admin is set then non-visible options will be returned * opt must be all lower case * rwflag may be NULL if caller doesn't care * returns NULL for no entry * caller must free the result */ char *option_get( /* char *user, char *opt, int admin, int *rwflag */ ); /* test if an option is "on" * opt must be all lower case * like option_get, but parses returning dflt if option is not set. */ int option_test( /* char *user, char *opt, int admin, int dflt */ ); /* get a list option * opt must be all lower case */ option_list *option_getlist( /* char *user, char *opt, int admin */ ); /* free results of option_getlist * opt must be all lower case */ void option_freelist( /* option_list *olist */ ); /* check if a string is in a list * opt must be all lower case * returns -1 on failure, 0 if not in list, 1 if in list */ int option_lookup( /* char *user, char *opt, int admin, char *str */ ); /* check/update user quota usage * delta -- change in usage (in bytes) * returns -1 on db error, -2 on quota overflow, 0 on success * NOTE: will never return -2 if delta is negative. */ int option_doquota( /* char *user, long delta */ ); /* set an option * returns -1 on failure, -3 on over quota */ int option_set( /* char *user, char *opt, int admin, char *value */ ); /* unset an option * returns -1 on error, 0 if option was not set, 1 if option was unset */ int option_unset( /* char *user, char *opt, int admin */ ); #endif /* OPTION_H */ cyrus-imspd-v1.8/imsp/options.sample0100644004310100000120000000066607060640462017046 0ustar shadowstaffcommon.date R common.delivery.hosts R (mailhost.myorg.com) common.domain R cyrus.andrew.cmu.edu common.from R common.sent.mailbox R sentmail desc.common.from R The address that should be used in the From: header when sending email. imsp.admin.all N (root) imsp.create.new.users N + imsp.create.policy N parent imsp.log.level N 2 imsp.login.realms N () imsp.login.srvtab N /etc/srvtab imsp.sasl.allowplaintext N - imsp.user.quota R 1000 cyrus-imspd-v1.8/imsp/proxy_krb.c0100644004310100000120000000526005613027566016334 0ustar shadowstaff/* proxy_krb.c -- Kerberos proxy login authentication * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include #include #include #include #include #include #include "authize.h" #include "util.h" #include "syncdb.h" #include "option.h" #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 64 #endif extern struct acte_client krb_acte_client; extern char *krb_get_phost(); static char lrealm[REALM_SZ]; /* * Kerberos-authenticated proxy */ int proxy_init(id, hostname, admin, user, pass, mech) auth_id *id; char *hostname; int admin; char **user; char **pass; struct acte_client **mech; { char *val; int rwflag, result; char lhost[MAXHOSTNAMELEN]; char phost[MAXHOSTNAMELEN]; /* make sure this is the right mechanism */ val = option_get("", "imsp.proxy.authtype", 1, &rwflag); if (val) { result = strcasecmp(val, krb_acte_client.auth_type); free(val); if (result) return (-1); } /* check current auth_id */ if (!admin && auth_level(id) <= AUTH_USER) { *mech = 0; return (auth_proxy(id, hostname, user, pass)); } *user = admin ? NULL : auth_username(id); *pass = ""; *mech = &krb_acte_client; /* get the realm */ if (!lrealm[0]) { if (krb_get_lrealm(lrealm,1)) { fatal("can't find local Kerberos realm", EX_OSFILE); } } val = option_get("", "imsp.login.srvtab", 1, &rwflag); /* authenticate server */ gethostname(lhost, sizeof (lhost)); strcpy(phost, krb_get_phost(lhost)); result = krb_get_svc_in_tkt("imap", phost, lrealm, "krbtgt", lrealm, DEFAULT_TKT_LIFE, val ? val : "/etc/srvtab"); if (val) free(val); return (result); } cyrus-imspd-v1.8/imsp/proxy_unix.c0100644004310100000120000000257705613027674016551 0ustar shadowstaff/* proxy_unix.c -- Proxy login with cleartext password * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include "authize.h" /* * proxy login with standard login command */ int proxy_init(id, hostname, admin, user, pass, mech) auth_id *id; char *hostname; int admin; char **user; char **pass; struct acte_client **mech; { *mech = 0; return (auth_proxy(id, hostname, user, pass)); } cyrus-imspd-v1.8/imsp/proxy_unix_shadow.c0100644004310100000120000000257706425166121020107 0ustar shadowstaff/* proxy_unix.c -- Proxy login with cleartext password * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include "authize.h" /* * proxy login with standard login command */ int proxy_init(id, hostname, admin, user, pass, mech) auth_id *id; char *hostname; int admin; char **user; char **pass; struct acte_client **mech; { *mech = 0; return (auth_proxy(id, hostname, user, pass)); } cyrus-imspd-v1.8/imsp/sasl_support.c0100644004310100000120000002026207732422423017045 0ustar shadowstaff/* sasl_support.c -- support routines needed by the SASL API * * Copyright (c) 2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Joseph Jackson * Start Date: 2/15/00 */ #include #include #include #include #include #include #include "dispatch.h" #include "option.h" #include "syncdb.h" #include "util.h" #include "xmalloc.h" extern struct sockaddr_in imspd_localaddr, imspd_remoteaddr; static char opt_login_srvtab[] = "imsp.login.srvtab"; static char opt_login_realms[] = "imsp.login.realms"; static char opt_sasl_prefix[] = "imsp.sasl."; static char opt_plaintext[] = "imsp.sasl.allowplaintext"; extern char opt_alladmin[]; /* defined in authize.c */ /* Minimum and maximum security strength factors (how many bits) */ static char opt_min_ssf[] = "imsp.sasl.minimum_ssf"; static char opt_max_ssf[] = "imsp.sasl.maximum_ssf"; /* defaults in case the above two options aren't set */ #define MIN_SSF 0 #define MAX_SSF 256 static char err_nocrossrealm[] = "cross-realm login from %s denied"; static char err_noproxy[] = "user is not authorized to proxy for another user"; /* * This creates a structure that defines the allowable security properties */ static sasl_security_properties_t * mysasl_make_secprops(void) { char *value; int min, max; sasl_security_properties_t *prop; prop = (sasl_security_properties_t *) xmalloc(sizeof(sasl_security_properties_t)); /* Set minimum and maximum security strength factors (how many bits) */ value = option_get("", opt_min_ssf, 1, NULL); if (value) { min = atoi(value); free(value); } else { min = MIN_SSF; } value = option_get("", opt_max_ssf, 1, NULL); if (value) { max = atoi(value); free(value); } else { max = MAX_SSF; } if (min < 0 || max <= 0) { syslog(LOG_ERR, "Security strength factor limits look bogus: min=%d, max=%d", min, max); /* let it continue with just that warning */ } prop->min_ssf = min; prop->max_ssf = max; prop->maxbufsize = MAX_BUF; prop->security_flags = 0; #ifndef ANONYMOUS_LOGIN prop->security_flags |= SASL_SEC_NOANONYMOUS; #endif /* Check the global options file to see if plaintext is allowed. * Defaults to no plaintext logins if the option is not present. */ if (! option_test("", opt_plaintext, 1, NULL)) prop->security_flags |= SASL_SEC_NOPLAINTEXT; prop->property_names = NULL; prop->property_values = NULL; return prop; } /* Initialize the state of SASL for a given server thread. */ int mysasl_server_init(char *name, sasl_conn_t **imsp_saslconn_p, const char **errstr) { int result; char remoteip[60], localip[60]; result = sasl_server_new(name, /* service name */ NULL, /* hostname */ NULL, /* user realm */ NULL, /* local ip */ NULL, /* remote ip */ NULL, /* callbacks */ 0, imsp_saslconn_p); if (result != SASL_OK) { *errstr = sasl_errstring(result, NULL, NULL); return -1; } sasl_setprop(*imsp_saslconn_p, SASL_SEC_PROPS, mysasl_make_secprops()); if(iptostring((struct sockaddr *)&imspd_remoteaddr, sizeof(struct sockaddr_in), remoteip, 60) == 0) { sasl_setprop(*imsp_saslconn_p, SASL_IPREMOTEPORT, remoteip); } if(iptostring((struct sockaddr *)&imspd_localaddr, sizeof(struct sockaddr_in), localip, 60) == 0) { sasl_setprop(*imsp_saslconn_p, SASL_IPLOCALPORT, localip); } return 0; } /* This is a callback to fetch SASL configuration details from the * IMSP global options file. */ static int mysasl_config(void *context /*__attribute__((unused))*/, const char *plugin_name, const char *option, const char **result, unsigned *len) { char opt[1024]; /* XXX need to downcase plugin_name or is it already taken care of? */ /* prepend "imsp.sasl." to the option we're looking for */ strncpy(opt, opt_sasl_prefix, sizeof(opt)); /* add a null to make sure that the following strlen(opt) calls are okay */ opt[sizeof(opt)-1] = '\0'; if (plugin_name) { strncat(opt, plugin_name, sizeof(opt) - strlen(opt) - 1); strncat(opt, ".", sizeof(opt) - strlen(opt) - 1); } strncat(opt, option, sizeof(opt) - strlen(opt) - 1); *result = option_get("", opt, 1, NULL); /* For backwards compatibility, we'll also look at this option * for the name of the srvtab file */ if ((*result == NULL) && strcmp(option, "srvtab") == 0) { strncpy(opt, opt_login_srvtab, sizeof(opt)); *result = option_get("", opt, 1, NULL); } if (*result != NULL) { if (len != NULL) { *len = strlen(*result); } return SASL_OK; } return SASL_FAIL; } /* This is a callback to let SASL decide if we should we allow * users to proxy as another user. (Is this an administrator who * can perform a "switch-user" operation?) * Returns SASL_OK if yes, SASL_BADAUTH otherwise. */ static mysasl_authproc(sasl_conn_t *conn, void *context, const char *requested_user, unsigned rlen, const char *auth_identity, unsigned alen, const char *def_realm, unsigned urlen, struct propctx *propctx) { char replybuf[150]; char *realm; /* check if remote realm */ if (realm = strchr(auth_identity, '@')) { realm++; if (!option_lookup("", opt_login_realms, 1, realm)) { snprintf(replybuf, sizeof(replybuf), err_nocrossrealm, auth_identity); sasl_seterror(conn, 0, replybuf); return SASL_BADAUTH; } } if (strcmp(auth_identity, requested_user)) { /* user wants to proxy; should we let them? */ if (option_lookup("", opt_alladmin, 1, auth_identity)) { return SASL_OK; } else { /* no proxy! */ sasl_seterror(conn, 0, err_noproxy); return SASL_BADAUTH; } } return SASL_OK; } /* Our callbacks */ static struct sasl_callback mysasl_cb[] = { { SASL_CB_GETOPT, &mysasl_config, NULL }, { SASL_CB_PROXY_POLICY, &mysasl_authproc, NULL }, { SASL_CB_LIST_END, NULL, NULL } }; int mysasl_init(char *name, const char **errstr) { int result; *errstr = NULL; /* set the SASL allocation functions */ sasl_set_alloc((sasl_malloc_t *) &xmalloc, (sasl_calloc_t *) &calloc, (sasl_realloc_t *) &xrealloc, (sasl_free_t *) &free); /* Make a SASL connection and setup some properties for it */ if ((result = sasl_server_init(mysasl_cb, name)) != SASL_OK) { *errstr = sasl_errstring(result, NULL, NULL); return -1; } return 0; } cyrus-imspd-v1.8/imsp/sasl_support.h0100644004310100000120000000403607217273316017056 0ustar shadowstaff/* sasl_support.h -- definition for the SASL support routines * * Copyright (c) 2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Joseph Jackson * Start Date: 2/15/00 */ int mysasl_server_init(char *name, sasl_conn_t **imsp_saslconn_p, const char **errstr); int mysasl_init(char *name, const char **errstr); cyrus-imspd-v1.8/imsp/syncdb.c0100644004310100000120000010454110167607554015602 0ustar shadowstaff/* syncdb.c -- synchronized data base access for IMSP via disk files & locking * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 3/25/93 * * Topical Notes: * * Memory usage * ------------ * On a low memory machine, it might be useful to try to free cache entries * before giving up with a memory error. * * TODO * ---- * Clean up write locks on error exit. */ #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include "util.h" #include "syncdb.h" #include "glob.h" /* prefixes for database files */ #define PREFIX "/var/imsp" #define PREFIXLEN (sizeof (PREFIX) - 1) #define PRIVPREFIX "user" #define PRIVPREFIXLEN (sizeof (PRIVPREFIX) - 1) /* maximum accepted length for a database specifier or path */ #define MAXDBLEN 256 #define MAXDBPATHLEN (PREFIXLEN + MAXDBLEN) /* cache sizing constants */ #define CACHE_INCREMENT 100 /* number of elements to grow cache by */ /* a file cache */ typedef struct cache { char db[MAXDBPATHLEN+1]; /* database name */ unsigned long mtime; /* last modified time */ unsigned short modified : 1; /* 0 = unmodified, 1 = modified */ unsigned short loaded : 1; /* 0 = unloaded, 1 = loaded */ unsigned short icase : 1; /* case insensitive flag for cache */ int fd; /* file descriptor, if locked */ int locks; /* number of locks on db */ unsigned long cachesize; /* number of element slots in cache */ unsigned long cachecount; /* number of instantiated elements */ sdb_keyvalue *kv; /* cache element array */ } cache; /* valid databases and caches */ static char *globdbstr[] = { "options", "mailboxes", "new", "changed", "abooks", NULL }; static char *privdbstr[] = { "options", "mailboxes", "subs", "alock", "abooks", "abook", NULL }; #define NUMGDBSTR (sizeof (globdbstr) / sizeof (char *) - 1) #define NUMPDBSTR (sizeof (privdbstr) / sizeof (char *) - 1) #define PDBPREFIXPOS (NUMPDBSTR - 2) static cache globdb[NUMGDBSTR]; static cache privdb[NUMPDBSTR]; /* lock file extension */ static char newext[] = "%s.."; /* private macro definitions */ #define CLEANUP_RETURN(x) do { rtval = x; goto CLEANUP; } while(0) /* private function prototypes */ static void freecache(cache *c); static int writecache(cache *c); extern int strcasecmp(); extern int imspd_debug; /* */ /* free a cache (assume it's unlocked) */ /* HISTORY * IncrDev Feb 18, 1996 by sh: dropped psuedo memory mapping * END HISTORY */ static void freecache(c) cache *c; { register int i; /* loop counter */ /* sanity checks */ if (c == NULL) return; if (c->kv != NULL) { /* walk the cache element array freeing elements */ for (i = 0; i < c->cachecount; i++) { if (c->kv[i].key != NULL) free(c->kv[i].key); if (c->kv[i].value != NULL) free(c->kv[i].value); } /* free the cache array */ free((char *)c->kv); c->kv = NULL; } /* reset cache counts to 0 */ c->cachecount = 0; c->cachesize = 0; /* reset cache state to unloaded */ c->modified = 0; c->loaded = 0; if (c->fd != -1) { if (c->fd < 3) { if (c->fd != 0) { /* this stuff may be uninitialzed soo... */ syslog(LOG_ERR, "imspd: not closing invalid fd of %d\n", c->fd); } } else { close(c->fd); } } c->fd = -1; if (c->locks > 0) { fprintf(stderr,"Shouldn't free cache %s - %d locks still active\n", c->db, c->locks); } } /* */ /* find a cache by its name */ /* NOTES * There are two cache tables that contain cache datastructures for supported * databases: global cache and private cache. Global cache contains cached global * databases like the generic options, mailbox lists etc. Private cache contains * databases like user defined address books. * * -- DEVELOPER ATTENTION -- * The current algorithm supports only one cached addressbook database at a time. * If a request comes for an addressbook database that is not loaded, then the * currently loaded addressbook entry is flushed, and the requested one is loaded. * The cache table should be changed to maintain a list of "loaded" databases. * This will dramatically improve the performance of copying entries between * addressbooks on the same server. * END NOTES */ /* HISTORY * IncrDev Feb 27, 1996 by sh: to flush modified private cache databases * END HISTORY */ static cache *findcache(db) char *db; { char *scan; int i; /* : try to load a private cache database */ if (!strncmp(db, PRIVPREFIX, PRIVPREFIXLEN) && db[PRIVPREFIXLEN] == '/') { /* : - pick off the private name */ scan = strchr(db + PRIVPREFIXLEN + 1, '/'); if (scan == NULL) return (NULL); ++scan; /* : - walk the private database table matching the name */ for (i = 0; privdbstr[i]; ++i) { if (!strcmp(scan, privdbstr[i]) || (i >= PDBPREFIXPOS && !strncmp(scan, privdbstr[i], strlen(privdbstr[i])))) { /* : -- if this is not the correct instance of the private database then flush it and get the right one */ if (strcmp(privdb[i].db + PREFIXLEN + 1, db)) { if (privdb[i].locks > 0) return (NULL); if (privdb[i].modified) { writecache(&privdb[i]); } freecache(&privdb[i]); snprintf(privdb[i].db, sizeof(privdb[i].db), "%s/%s", PREFIX, db); } return (&privdb[i]); } } return (NULL); } for (i = 0; globdbstr[i]; ++i) { if (!strcmp(db, globdbstr[i])) { snprintf(globdb[i].db, sizeof(globdb[i].db), "%s/%s", PREFIX, db); return (&globdb[i]); } } return (NULL); } /* */ /* key compare functions for the sdb_keyvalue structure */ static int keycmp(kv1, kv2) sdb_keyvalue *kv1, *kv2; { return (strcmp(kv1->key, kv2->key)); } static int ikeycmp(kv1, kv2) sdb_keyvalue *kv1, *kv2; { return (strcasecmp(kv1->key, kv2->key)); } /* */ /* parse the data in the cache database file into the cache * returns -1 on failure, 0 on success */ /* HISTORY * IncrDev Feb 21, 1996 by sh: rewrote it to allocate parsed key/value pairs * IncrDev Feb 21, 1996 by sh: changed contract to accept data buffer * END HISTORY */ static int parsecache(c, data, flags) cache *c; /* U: cache to parse into */ char* data; /* I: database data buffer */ int flags; /* I: case insensitive if non-zero */ { int sorted; /* source file was sorted if 1 */ long lines; /* number of lines in data */ long size; /* allocation size in bytes */ char* scan; /* source data scan pointer */ char* dst; /* destination data write pointer */ char* token; /* current token */ char savech; /* temporary save character */ sdb_keyvalue *kv; /* current keyvalue in cache */ int (*cmpf)(); /* sort comparison function */ /* : initialization */ lines = 0; sorted = 1; cmpf = (flags & SDB_ICASE) ? strcasecmp : strcmp; /* : count the number of lines in the database data */ lines = 0; for (scan = data; *scan != '\0'; scan++) { if (*scan == '\n') lines++; } /* : make sure that we count a line without a linefeed at the end */ if (*(scan-1) != '\n') ++lines; /* : CLAIM - the number of lines in the data is equivalent to the number of key value pairs in the database. We can base the size of the cache on that value. In fact, when we allocate the array, we allocate the required number of slots plus a CACHE_INCREMENT that allows for growth of the cache from new keyvalue pairs. */ /* : allocate space for the cache array */ size = ((lines + CACHE_INCREMENT) * sizeof(sdb_keyvalue)); kv = (sdb_keyvalue *) malloc(size); if (kv == NULL) { return (-1); } c->kv = kv; c->cachecount = lines; c->cachesize = lines + CACHE_INCREMENT; /* : walk each line in the data parsing key value pairs */ scan = data; for (kv = c->kv; lines; --lines, ++kv) { /* : - parse the key, handling quoted characters */ token = scan; for (dst = scan; (*scan != ' ') && (*scan != '\n') && (*scan != '\0'); scan++) { if (*scan == '\\') { if (*++scan == 'n') { *dst++ = '\n'; continue; } else if (*scan == 's') { *dst++ = ' '; continue; } } *dst++ = *scan; } /* : - save the current scan character and write a NUL terminator to the parsed string */ savech = *scan; *dst = '\0'; /* this may overwrite *scan */ /* : - copy the parsed key to the keyvalue pair */ kv->key = strdup(token); if (kv->key == NULL) { return(-1); } /* : - restore the saved scan character */ *scan = savech; /* : - if at end of line or string then set the value to NULL */ if ((*scan == '\n') || (*scan == '\0')) { kv->value = NULL; } /* : - else parse the value, handling quoted characters */ else { ++scan; token = scan; for (dst = scan; (*scan != '\n') && (*scan != '\0'); ++scan) { if (*scan == '\\') { if (*++scan == 'n') { *dst++ = '\n'; continue; } else if (*scan == 's') { *dst++ = ' '; continue; } } *dst++ = *scan; } *dst = '\0'; /* : - copy the parsed value to the keyvalue pair */ kv->value = strdup(token); if (kv->value == NULL) { return(-1); } } /* : - move scan to the start of the next line */ scan++; /* : - check to make sure that the data is sorted */ if (sorted && (kv != c->kv) && ((*cmpf)(kv[-1].key, kv->key) > 0)) { sorted = 0; } } /* : sort it, only if necessary */ if (!sorted) { qsort(c->kv, c->cachecount, sizeof (sdb_keyvalue), (flags & SDB_ICASE) ? ikeycmp : keycmp); } /* : return success */ return(0); } /* */ /* load a cache from database file * returns -1 on error, 0 on success */ /* HISTORY * IncrDev Feb 21, 1996 by sh: completely rewrote it to use new cache structure * END HISTORY */ static int loadcache(c, flags) cache *c; int flags; { struct stat stbuf; /* file statistics buffer */ int fd; /* database file descriptor */ int fdl; /* lock file descriptor */ int rtval; /* return value */ int count; /* number of characters read from file */ char* data; /* raw (unparsed) database data */ char lname[MAXDBPATHLEN + 5]; /* lock file name buffer */ /* : initialization */ data = NULL; rtval = 0; /* : quit if the cache is loaded and we don't care if it's stale */ if (c->loaded && (flags & SDB_QUICK)) { return (0); } /* : quit if we can't stat the database file */ if (stat(c->db, &stbuf) < 0) { if (imspd_debug) { fprintf(stderr,"%s: ", c->db); perror("failed to stat cache buffer"); } return(-1); } /* : quit if the cache is up to date */ if ((c->loaded == 1) && ((flags & SDB_ICASE) == c->icase) && (stbuf.st_mtime == c->mtime)) { return(0); } /* : free any existing cache structure */ freecache(c); /* : if the database file is 0 length then the refresh is complete */ if (stbuf.st_size == 0) { c->loaded = 1; c->modified = 0; c->icase = flags & SDB_ICASE; c->cachecount = 0; return(0); } /* : open the database file if it hasn't already been opened */ fd = c->fd; if (c->locks != 0 && (c->fd == -1)) { if (imspd_debug) { fprintf(stderr,"internal consistency error. We got locks but not a valid fd for %s\n", c->db); return(-1); } else { syslog(LOG_ERR,"internal consistency error. We got locks but not a valid fd for %s\n", c->db); } } if ((c->locks == 0) || (c->fd == -1)) { fd = open(c->db, O_RDONLY); if (fd < 0) { if (imspd_debug) { fprintf(stderr,"%s: ", c->db); perror("failed to open DB"); } return (-1); } c->fd = fd; } /* ESYS DOC - this is a very expensive proposition if the file is large. For a short while, we will have allocated in virtual memory TWICE the size of the file. This should be changed to some sort of chained buffer structure like the c-client file string driver. Reasonably fast and not too expensive in memory. */ /* : allocate a buffer to hold the database file text */ data = (char *) malloc(stbuf.st_size + 1); if (data == NULL) { if (imspd_debug) { perror("malloc of data failed"); } else { syslog(LOG_ERR, "imspd: Unable to allocate %d bytes for %s: %m", stbuf.st_size+1, c->db); } CLEANUP_RETURN(-1); } /* : read data from file into the data buffer */ count = read(fd, data, stbuf.st_size); if (count != stbuf.st_size) { if (imspd_debug) { fprintf(stderr, "internal consistency error count(%d) != stbuf.st_size (%d)\n", count, stbuf.st_size); } CLEANUP_RETURN(-1); } data[count] = '\0'; /* set a sentinel -- THIS IS IMPORTANT!*/ /* : parse the database data into the cache */ if (parsecache(c, data, flags) < 0) { freecache(c); if (imspd_debug) { fprintf(stderr,"parsecache failed\n"); } CLEANUP_RETURN(-1); } /* : mark the cache as loaded and not modified */ c->loaded = 1; c->modified = 0; c->icase = flags & SDB_ICASE; CLEANUP: /* : free the database data buffer */ if (data != NULL) { free(data); } /* : close the database file if unlocked */ if (c->locks == 0) { close(fd); c->fd = -1; } /* : return the return value */ return(rtval); } /* */ /* write the cache content to database file */ /* HISTORY * IncrDev Feb 21, 1996 by sh: changed contract to just write cache to file * END HISTORY */ static int writecache(c) cache *c; { int oldfd; cache oldc; FILE *out; int i, old = 0; char *scan, *value; char newname[MAXDBPATHLEN + 5]; memset(&oldc, 0, sizeof(cache)); /* : open new database file for output */ snprintf(newname, sizeof(newname), newext, c->db); if ((out = fopen(newname, "w")) == NULL) { return (-1); } oldfd = open(c->db, O_RDWR, 0600); if (oldfd >= 0) { close(oldfd); strcpy(oldc.db, c->db); oldc.locks = 0; if ((old = loadcache(&oldc, c->icase?SDB_ICASE:0)) < 0) old = 0; else old = 1; } /* : walk the cache writing keyvalue elements to the database file */ for (i = 0; i < c->cachecount; ++i) { if (c->kv[i].key == NULL) continue; if ((c->kv[i].modified == 0) && old) { sdb_keyvalue *kv; kv = kv_bsearch(c->kv[i].key, oldc.kv, oldc.cachecount, c->icase ? strcasecmp : strcmp); value = kv ? kv->value : NULL; } else { value = c->kv[i].value; } for (scan = c->kv[i].key; *scan; ++scan) { if (*scan == '\n') { putc('\\', out); putc('n', out); } else if (*scan == ' ') { putc('\\', out); putc('s', out); } else if (*scan == '\\') { putc('\\', out); putc('\\', out); } else { putc(*scan, out); } } if (value != NULL) { putc(' ', out); for (scan = value; *scan; ++scan) { if (*scan == '\n') { putc('\\', out); putc('n', out); } else if (*scan == '\\') { putc('\\', out); putc('\\', out); } else { putc(*scan, out); } } } putc('\n', out); } if (old) { lock_unlock(oldc.fd); close(oldc.fd); oldc.fd = -1; oldc.locks = 0; freecache(&oldc); } /* : make sure write & rename succeed */ if (fclose(out) == EOF || rename(newname, c->db) < 0) { unlink(newname); return (-1); } /* : remove any stray locks */ if (c->locks) { lock_unlock(c->fd); close(c->fd); c->locks = -1; } /* : return success */ return (0); } /* initialize sdb module (add to synchronization) * returns -1 on failure, 0 on success */ int sdb_init() { int i; struct stat stbuf; char path[MAXPATHLEN]; /* initialize cache */ for (i = 0; i < NUMGDBSTR; ++i) { memset(globdb[i].db, '\0', sizeof (globdb[i].db)); globdb[i].modified = 0; globdb[i].loaded = 0; globdb[i].locks = 0; globdb[i].cachesize = 0; globdb[i].cachecount = 0; } for (i = 0; i < NUMPDBSTR; ++i) { memset(privdb[i].db, '\0', sizeof (privdb[i].db)); privdb[i].modified = 0; privdb[i].loaded = 0; privdb[i].locks = 0; privdb[i].fd = -1; privdb[i].cachesize = 0; privdb[i].cachecount = 0; } /* initialize directories */ snprintf(path, sizeof(path), "%s/%s", PREFIX, PRIVPREFIX); if (stat(path, &stbuf) < 0) { mkdir(PREFIX, 0700); if (mkdir(path, 0700) < 0) { return (-1); } } return (0); } /* flush (write) and free cached database files */ /* HISTORY * IncrDev Feb 21, 1996 by sh: to write modified caches before freeing them * END HISTORY */ void sdb_done() { int i; cache *c; /* write and free caches */ for (i = 0; i < NUMGDBSTR; ++i) { c = globdb + i; if (c->modified) { writecache(c); } if (c->locks) { lock_unlock(c->fd); close(c->fd); c->fd = -1; c->locks = 0; } freecache(c); } for (i = 0; i < NUMPDBSTR; ++i) { c = privdb + i; if (c->modified) { writecache(c); } if (c->locks) { lock_unlock(c->fd); close(c->fd); c->fd = -1; c->locks = 0; } freecache(c); } } /* flush global and/or private databases to disk */ void sdb_flush(flags) int flags; { int i; cache *c; /* write and free global caches (to /var/imsp/) */ if (flags & SDB_FLUSH_GLOBAL) for (i = 0; i < NUMGDBSTR; ++i) { c = globdb + i; if (c->modified) { writecache(c); } } /* write and free private caches (to /var/imsp/user/.../) */ if (flags & SDB_FLUSH_PRIVATE) { for (i = 0; i < NUMPDBSTR; ++i) { c = privdb + i; if (c->modified) { writecache(c); } } } } /* check if a database exists * returns 0 if exists, -1 otherwise */ int sdb_check(db) char *db; { cache *c; struct stat stbuf; if ((c = findcache(db)) == NULL) return (-1); return ((c->loaded || stat(c->db, &stbuf) >= 0) ? 0 : -1); } /* create a new database. fails if database exists or isn't createable. * returns -1 on failure, 0 on success */ int sdb_create(db) char *db; { int fd; char *scan; cache *c; struct stat stbuf; /* verify that db is valid & doesn't exist */ if ((c = findcache(db)) == NULL || c->loaded || stat(c->db, &stbuf) >= 0) { return (-1); } /* make user's subdirectory if needed */ if (!strncmp(db, PRIVPREFIX, PRIVPREFIXLEN)) { scan = strchr(c->db + PREFIXLEN + PRIVPREFIXLEN + 2, '/'); if (scan == NULL) return (-1); *scan = '\0'; mkdir(c->db, 0700); *scan = '/'; } /* create datafile */ if ((fd = open(c->db, O_WRONLY | O_CREAT, 0600)) < 0 || close(fd) < 0) { return (-1); } return (0); } /* delete a database. fails if database isn't deletable. * returns -1 on failure, 0 on success */ int sdb_delete(db) char *db; { char lname[MAXDBPATHLEN]; cache *c; if ((c = findcache(db)) == NULL || c->locks) return (-1); /* remove file and empty cache */ if (unlink(c->db) < 0) return (-1); freecache(c); /* try removing user directory for cleanliness sake */ if (!strncmp(db, PRIVPREFIX, PRIVPREFIXLEN)) { strcpy(lname, c->db); *strrchr(lname, '/') = '\0'; rmdir(lname); } return (0); } /* copy the contents of one database to another * returns -1 on failure, 0 on success */ int sdb_copy(dbsrc, dbdst, flags) char *dbsrc, *dbdst; int flags; { cache *citem; char dbname[MAXDBPATHLEN+1]; int fd=0, result; /* create the destination. this locks and prevents another * rename from happening. */ if (sdb_create(dbdst) < 0) { return (-1); } if ((citem = findcache(dbdst)) == NULL) { sdb_delete(dbdst); return (-1); } strcpy(dbname, citem->db); /* grab lock on destination */ if ((fd = open(dbname, O_RDWR|O_CREAT, 0600)) < 0) { sdb_delete(dbdst); return (-1); } if (lock_reopen(fd, citem->db, NULL, NULL) < 0) { sdb_delete(dbdst); close(fd); return (-1); } /* make sure files are valid */ if (((citem = findcache(dbsrc)) == NULL) || citem->locks) { sdb_delete(dbdst); return (-1); } /* read in source */ if (loadcache(citem, flags) < 0) { lock_unlock(fd); close(fd); return (-1); } /* change cache to be the destination */ citem->fd = fd; strcpy(citem->db, dbname); /* write the cache & unlock file */ result = writecache(citem); return (result); } /* get value of a key * on return, value points to a string which shouldn't be modified and may * change on future sdb_* calls. * returns -1 on failure, 0 on success */ int sdb_get(db, key, flags, value) char *db, *key; int flags; char **value; { cache *c; sdb_keyvalue *kv; /* get db in cache */ c = findcache(db); if (c == NULL) { return(-1); } if (c->loaded == 0) { if (loadcache(c, flags) < 0) { return (-1); } } /* if db empty, return no value */ if (!c->cachecount) { *value = NULL; return (0); } /* do binary search */ kv = kv_bsearch(key, c->kv, c->cachecount, (flags & SDB_ICASE) ? strcasecmp : strcmp); *value = kv ? kv->value : NULL; return (0); } /* count the number of keys in a database * returns -1 on failure, number of keys on success */ int sdb_count(db, flags) char *db; int flags; { cache *c; /* get db in cache */ c = findcache(db); if (c == NULL) { return(-1); } if (c->loaded == 0) { if (loadcache(c, flags) < 0) { return (-1); } } return (c->cachecount); } /* check if a value matches a value pattern * return 0 for match, 1 for no match, -1 for error */ static int valuematch(vpat, value) char *vpat, *value; { glob *vg; int result; if (vpat == NULL) return (0); /*XXX: ?need to do international string check here */ if ((vg = glob_init(vpat, 0)) == NULL) return (-1); result = GLOB_TEST(vg, value); glob_free(&vg); return (result >= 0 ? 0 : 1); } /* get keys & values that match a key wildcard (using '*' and '%') * kv is set to a key/value array, count is set to the number of items in kv * Caller must call sdb_freematch with kv when done. * If the copy flag is 1, all data returned will be copied and may be used * indefinitely. If the copy flag is 0, then only the kv array will be * copied as necessary. If copy flag is 0, the data may become invalid on any * future sdb_* call. * returns -1 on failure, 0 on success */ /* HISTORY * IncrDev Feb 22, 1996 by sh: to not depend on pseudo memory mapping * END HISTORY */ int sdb_match(db, key, flags, vpat, copy, pkv, count) char* db; /* I: database name to match against */ char* key; /* I: key to match against */ int flags; /* I: case selection flag */ char *vpat; /* I: match pattern */ int copy; /* I: return full copy of matched kv pairs */ sdb_keyvalue **pkv; /* O: matching kv pairs */ int *count; /* O: number of matching kb pairs */ { int i; /* loop counter */ char *scan, *value; cache *c; sdb_keyvalue *ksrc, *kdst; glob *g, *vg; int gcount, copysize; /* initialization */ *pkv = NULL; *count = 0; /* if vpat is "*", set it to NULL */ if (vpat != NULL && vpat[0] == '*' && vpat[1] == '\0') vpat = NULL; /* get db in cache */ c = findcache(db); if (c == NULL) { return(-1); } if (c->loaded == 0) { if (loadcache(c, flags) < 0) { return (-1); } } /* if db empty, return no match */ if (!c->cachecount) { return (0); } /* special case for no wildcards */ for (scan = key; *scan != '*' && *scan != '%' && *scan != '?' && *scan; ++scan); if (!*scan) { /* do binary search */ ksrc = kv_bsearch(key, c->kv, c->cachecount, (flags & SDB_ICASE) ? strcasecmp : strcmp); if (ksrc && valuematch(vpat, value = ksrc->value) == 0) { key = ksrc->key; kdst = *pkv = (sdb_keyvalue *)xmalloc(sizeof (sdb_keyvalue)); kdst->key = copy ? (char *)xstrdup(key) : key; kdst->value = copy ? (char *)xstrdup(value) : value; *count = 1; } return (0); } /* set key to NULL if it's a "*" */ if (key[0] == '*' && key[1] == '\0') key = NULL; /* make space for a complete match -- we can reduce usage later */ kdst = *pkv = (sdb_keyvalue *) malloc(sizeof (sdb_keyvalue) * c->cachecount); if (kdst == NULL) { return (-1); } memset(kdst, '\0', (sizeof(sdb_keyvalue) * c->cachecount)); ksrc = c->kv; /* special case for full match */ if (!key && !vpat) { memcpy((void *) kdst, (void *) ksrc, c->cachecount * sizeof (sdb_keyvalue)); kdst += c->cachecount; } else { /* do globbing */ if (key && (g = glob_init(key, (flags & SDB_ICASE) ? GLOB_ICASE : 0L)) == NULL) { free((char *) kdst); return (-1); } if (vpat && (vg = glob_init(vpat, (flags & SDB_ICASE) ? GLOB_ICASE:0L)) == NULL) { if (key) glob_free(&g); free((char *) kdst); return (-1); } if (key && !vpat) { for (gcount = c->cachecount; gcount; --gcount, ++ksrc) { if (GLOB_TEST(g, ksrc->key) >= 0) { *kdst++ = *ksrc; } } } else if (vpat && !key) { for (gcount = c->cachecount; gcount; --gcount, ++ksrc) { if (GLOB_TEST(vg, ksrc->value) >= 0) { *kdst++ = *ksrc; } } } else { for (gcount = c->cachecount; gcount; --gcount, ++ksrc) { if (GLOB_TEST(g, ksrc->key) >= 0 && GLOB_TEST(vg, ksrc->value) >= 0) { *kdst++ = *ksrc; } } } if (vpat) glob_free(&vg); if (key) glob_free(&g); /* check for no match */ if (kdst == *pkv) { free((char *) kdst); *pkv = NULL; *count = 0; return (0); } } /* calculate the number of keyvalue pairs that matched */ *count = kdst - *pkv; /* adjust down amount of space used by the match array */ if (*count < c->cachecount) { *pkv = (sdb_keyvalue *) realloc((char *) *pkv, (*count * sizeof(sdb_keyvalue))); } /* if copy requested then walk the match array duplicating contents */ if (copy) { kdst = *pkv + *count; for (ksrc = *pkv, i = 0; ksrc < kdst; ++ksrc, i++) { value = ksrc->key; ksrc->key = strdup(value); if (ksrc->key == NULL) { sdb_freematch(*pkv, i, copy); *pkv = NULL; return(-1); } if(ksrc->value) { value = ksrc->value; ksrc->value = strdup(value); } if (ksrc->value == NULL) { sdb_freematch(*pkv, i, copy); *pkv = NULL; return(-1); } } } /* cleanup and return success if there was a match */ return (*pkv == NULL ? -1 : 0); } /* */ /* free keyvalue list returned by sdb_match */ /* HISTORY * IncrDev Feb 22, 1996 by sh: change interface contract * IncrDev Feb 22, 1996 by sh: modified to walk list to free elements * END HISTORY */ void sdb_freematch(kv, count, copy) sdb_keyvalue *kv; int count; int copy; { int i; /* loop counter */ /* sanity checks */ if (kv == NULL) { return; } /* if the list is a copy then walk the kv list freeing keys and values */ if (copy) { for (i = 0; i < count; i++) { if (kv[i].key != NULL) free(kv[i].key); if (kv[i].value != NULL) free(kv[i].value); } } /* free the keyvalue list */ free((char *) kv); } /* */ /* unlock a key * returns -1 on failure, 0 on success */ /* HISTORY * IncrDev Feb 23, 1996 by sh: to check for under locking * END HISTORY */ int sdb_unlock(db, key, flags) char *db, *key; int flags; { cache *c; /* CLAIM - to unlock a cache, it *must* have been locked and therefore loaded. If we look for the cache and it is not instantiated, then there is a big problem. */ /* find the appropriate cache entry */ c = findcache(db); if (c == NULL) return (-1); /* if there are no locks then just return success */ if (c->locks == 0) return (0); /*XXX: should write the cache if it's been modified */ /* 11/6/97 - well, the problem is that if you do, performance * really blows as say for option_set, you basically do a * lock, set, unlock for each option thereby causing the options db * to be written to disk each time -- probably the right behavior but * it makes writes really bad. So we don't do it. */ /* decrement the lock count on the cache and if 0, remove lock file */ c->locks--; if (c->locks == 0) { lock_unlock(c->fd); close(c->fd); c->fd = -1; } /* return success */ return (0); } /* */ /* lock a key to allow local modification -- this may lock a whole set of keys * or database as a side effect. specific key need not exist. * returns -1 on error, 0 on success */ /* HISTORY * IncrDev Feb 23, 1996 by sh: to load cache only if not already loaded * END HISTORY */ int sdb_writelock(db, key, flags) char *db, *key; int flags; { cache *c; /* find the appropriate cache entry */ c = findcache(db); if (c == NULL) { if (imspd_debug) { fprintf(stderr,"failed to find cache\n"); } return(-1); } /* if the cache is already locked then increment it and return success */ if (c->locks) { ++c->locks; return (0); } /* get exclusive lock on database file */ if (c->fd == -1) { c->fd = open(c->db, O_RDWR); if (c->fd < 0) return (-1); } if (lock_reopen(c->fd, c->db, NULL, NULL) < 0) { if (imspd_debug) { fprintf(stderr,"failed to reopen\n"); } close(c->fd); c->fd = -1; return (-1); } /* load the cache if necessary */ if (c->loaded == 0) { if (loadcache(c, flags) < 0) { if (imspd_debug) { fprintf(stderr,"failed to load cache\n"); } return (-1); } } ++c->locks; /* return success */ return (0); } /* */ /* set the value for a key -- key must be locked * returns -1 on failure, 0 on success */ /* HISTORY * Integ__ Feb 27, 1996 by sh: to handle 0 size cache case * IncrDev Feb 21, 1996 by sh: to grow cache by CACHE_INCREMENT * IncrDev Feb 18, 1996 by sh: removed cache rewriting - now done in sdb_done * END HISTORY */ int sdb_set(db, key, flags, value) char *db, *key, *value; int flags; { cache *c; long size; /* allocation size in bytes */ int top, bot, mid, cmp; sdb_keyvalue *kvtop, *kvmid; int (*cmpf)() = (flags & SDB_ICASE) ? strcasecmp : strcmp; /* find the appropriate cache entry & make sure it's locked */ if ((c = findcache(db)) == NULL || !c->locks) return (-1); /* if db not empty, look for the key */ mid = 0; if (c->cachecount) { /* do binary search */ top = c->cachecount - 1; bot = 0; while (bot <= top && (cmp = (*cmpf)(key, c->kv[mid=(bot+top)>>1].key))) { if (cmp < 0) { top = mid - 1; } else { bot = mid + 1; } } /* if we matched then set the value in the cache */ if (!cmp) { if (c->kv[mid].value != NULL) free(c->kv[mid].value); c->kv[mid].value = strdup(value); c->modified = 1; c->kv[mid].modified = 1; return(0); } if (cmp > 0) ++mid; } /* grow the cache if necessary */ if ((c->cachecount + 1) > c->cachesize) { size = ((c->cachesize + CACHE_INCREMENT) * sizeof(sdb_keyvalue)); if (c->kv == NULL) { c->kv = (sdb_keyvalue *) malloc(size); } else { c->kv = (sdb_keyvalue *) realloc((void *)c->kv, size); } if (c->kv == NULL) { freecache(c); return(-1); } c->cachesize += CACHE_INCREMENT; } /* instantiate the new keyvalue pair */ c->cachecount++; kvtop = c->kv + (c->cachecount - 1); kvmid = c->kv + mid; while (kvtop > kvmid) { *kvtop = *(kvtop - 1); --kvtop; } kvmid->key = strdup(key); kvmid->value = strdup(value); kvmid->modified = 1; /* mark the cache as modified */ c->modified = 1; /* return success */ return (0); } /* remove the entry for a key * returns -1 on failure, 0 on success */ /* HISTORY * Integ__ Feb 23, 1996 by sh: forgot to free removed element key and value * IncrDev Feb 18, 1996 by sh: removed cache rewriting - now done in sdb_done * END HISTORY */ int sdb_remove(db, key, flags) char *db, *key; int flags; { cache *c; sdb_keyvalue *kvtop, *kvmid; /* find the appropriate cache entry & make sure it's locked */ if ((c = findcache(db)) == NULL || !c->locks) return (-1); /* if db not empty, look for the key */ if (!c->cachecount) return (-1); /* do binary search */ kvmid = kv_bsearch(key, c->kv, c->cachecount, (flags & SDB_ICASE) ? strcasecmp : strcmp); if (!kvmid) return (-1); if (kvmid->key != NULL) free(kvmid->key); if (kvmid->value != NULL) free(kvmid->value); /* remove the key pair from the cache */ kvtop = c->kv + --c->cachecount; while (kvmid < kvtop) { kvmid[0] = kvmid[1]; ++kvmid; } /* mark the cache as modified */ c->modified = 1; /* return success */ return (0); } cyrus-imspd-v1.8/imsp/syncdb.h0100644004310100000120000001304607613045522015577 0ustar shadowstaff/* syncdb.h -- synchronized data base access for IMSP * * Copyright (c) 1993-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 3/25/93 */ #ifndef SYNCDB_H #define SYNCDB_H #include "util.h" /* a key-value pair returned by a wildcard match */ typedef keyvalue sdb_keyvalue; /* defines for flags (GLOB_* defines are also valid): */ #define SDB_ICASE 0x01 /* case insensitive */ #define SDB_QUICK 0x10 /* don't reread cache if cache available */ #define SDB_FLUSH_GLOBAL 0x100 /* flush out global dbs */ #define SDB_FLUSH_PRIVATE 0x200 /* flush out private (user) dbs */ #ifdef __STDC__ int sdb_init(void); void sdb_done(void); void sdb_flush(int); int sdb_check(char *); int sdb_create(char *); int sdb_delete(char *); int sdb_copy(char *, char *, int); int sdb_get(char *, char *, int, char **); int sdb_count(char *, int); int sdb_match(char *, char *, int, char *, int, sdb_keyvalue **, int *); void sdb_freematch(sdb_keyvalue *, int, int); int sdb_writelock(char *, char *, int); int sdb_unlock(char *, char *, int); int sdb_set(char *, char *, int, char *); int sdb_remove(char *, char *, int); #else /* initialize sdb module (add to synchronization) * returns -1 on failure, 0 on success */ int sdb_init( /* void */ ); /* release any resources used by sdb module (remove from synchronization) */ void sdb_done( /* void */ ); /* flush global and/or private databases to disk */ void sdb_flush( /* int */ ); /* check if a database exists * returns 0 if exists, -1 otherwise */ int sdb_check( /* char *db */ ); /* create a new database. fails if database exists or isn't createable. * returns -1 on failure, 0 on success */ int sdb_create( /* char *db */ ); /* delete a database. fails if database isn't deletable. * returns -1 on failure, 0 on success */ int sdb_delete( /* char *db */ ); /* copy the contents of one database to another * returns -1 on failure, 0 on success */ int sdb_copy( /* char *dbsrc, char *dbdst, int flags */ ); /* get value of a key * on return, value points to a string which shouldn't be modified and may * change on future sdb_* calls. * returns -1 on failure, 0 on success */ int sdb_get( /* char *db, char *key, int flags, char **value */ ); /* count the number of keys in a database * returns -1 on failure, number of keys on success */ int sdb_count( /* char *db, int flags */ ); /* get keys & values that match a key wildcard (using '*' and '%') * kv is set to a key/value array, count is set to the number of items in kv * Caller must call sdb_freematch with kv when done. * flags are the GLOB_* flags * If the copy flag is 1, all data returned will be copied and may be used * indefinitely. If the copy flag is 0, then only the kv array will be * copied as necessary. If copy flag is 0, the data may become invalid on any * future sdb_* call. * returns -1 on failure, 0 on success */ int sdb_match( /* char *db, char *key, int flags, char *vpat, int copy, sdb_keyvalue **kv, int *count */ ); /* free keyvalue list returned by sdb_match * if kv is NULL, no action is taken. */ void sdb_freematch( /* sdb_keyvalue *kv, int count, int copy */ ); /* lock a key to allow local modification -- this may lock a whole set of keys * or database as a side effect. specific key need not exist. * if key is NULL, this locks the entire database * returns -1 on error, 0 on success */ int sdb_writelock( /* char *db, char *key, int flags */ ); /* unlock a key * returns -1 on failure, 0 on success */ int sdb_unlock( /* char *db, char *key, int flags */ ); /* set the value for a key -- key must be locked * returns -1 on failure, 0 on success */ int sdb_set( /* char *db, char *key, int flags, char *value */ ); /* remove the entry for a key * returns -1 on failure, 0 on success */ int sdb_remove( /* char *db, char *key, int flags */ ); #endif /* __STDC__ */ #endif /* SYNCDB_H */ cyrus-imspd-v1.8/imsp/version.h0100644004310100000120000000002710002050660015756 0ustar shadowstaff#define VERSION "1.7b" cyrus-imspd-v1.8/lib/0040755004310100000120000000000010170575121013734 5ustar shadowstaffcyrus-imspd-v1.8/lib/charset/0040755004310100000120000000000010170575121015365 5ustar shadowstaffcyrus-imspd-v1.8/lib/charset/big5.t0100644004310100000120000100560107372056421016407 0ustar shadowstaff# # Name: BIG5 to Unicode table (complete) # Unicode version: 1.1 # Table version: 0.0d3 # Table format: Format A # Date: 11 February 1994 # Authors: Glenn Adams # John H. Jenkins # # Copyright (c) 1991-1994 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No # warranties of any kind are expressed or implied. The recipient # agrees to determine applicability of information provided. If this # file has been provided on magnetic media by Unicode, Inc., the sole # remedy for any claim will be exchange of defective media within 90 # days of receipt. # # Recipient is granted the right to make copies in any form for # internal distribution and to freely use the information supplied # in the creation of products supporting Unicode. Unicode, Inc. # specifically excludes the right to re-distribute this file directly # to third parties or other organizations whether for profit or not. # # General notes: # # This table contains the data Metis and Taligent currently have on how # BIG5 characters map into Unicode. # # WARNING! It is currently impossible to provide round-trip compatibility # between BIG5 and Unicode. # # A number of characters are not currently mapped because # of conflicts with other mappings. They are as follows: # # BIG5 Description Comments # # 0xA1C3 SPACING HEAVY OVERSCORE not in Unicode # 0xA1C5 SPACING HEAVY UNDERSCORE not in Unicode # # We currently map all of these characters to U+FFFD REPLACEMENT CHARACTER. # It is also possible to map these characters to their duplicates, or to # the user zone. # # Notes: # # 1. In addition to the above, there is some uncertainty about the # mappings in the range C6A1 - C8FE, and F9DD - F9FE. The ETEN # version of BIG5 organizes the former range differently, and adds # additional characters in the latter range. The correct mappings # these ranges need to be determined. # # 2. There is an uncertainty in the mapping of the Big Five character # 0xA3BC. This character occurs within the Big Five block of tone marks # for bopomofo and is intended to be the tone mark for the first tone in # Mandarin Chinese. We have selected the mapping U+02C9 MODIFIER LETTER # MACRON (Mandarin Chinese first tone) to reflect this semantic. # However, because bopomofo uses the absense of a tone mark to indicate # the first Mandarin tone, most implementations of Big Five represent # this character with a blank space, and so a mapping such as U+2003 EM SPACE # might be preferred. # # # # Format: Three tab-separated columns # Column #1 is the BIG5 code (in hex as 0xXXXX) # Column #2 is the Unicode (in hex as 0xXXXX) # Column #3 is the Unicode name (follows a comment sign, '#') # The official names for Unicode characters U+4E00 # to U+9FA5, inclusive, is "CJK UNIFIED IDEOGRAPH-XXXX", # where XXXX is the code point. Including all these # names in this file increases its size substantially # and needlessly. The token "" is used for the # name of these characters. If necessary, it can be # expanded algorithmically by a parser or editor. # # The entries are in BIG5 order # # Any comments or problems, contact # # 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) A140 3000 # IDEOGRAPHIC SPACE A141 FF0C # FULLWIDTH COMMA A142 3001 # IDEOGRAPHIC COMMA A143 3002 # IDEOGRAPHIC FULL STOP A144 FF0E # FULLWIDTH FULL STOP A145 2022 # BULLET A146 FF1B # FULLWIDTH SEMICOLON A147 FF1A # FULLWIDTH COLON A148 FF1F # FULLWIDTH QUESTION MARK A149 FF01 # FULLWIDTH EXCLAMATION MARK A14A FE30 # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER A14B 2026 # HORIZONTAL ELLIPSIS A14C 2025 # TWO DOT LEADER A14D FE50 # SMALL COMMA A14E FF64 # HALFWIDTH IDEOGRAPHIC COMMA A14F FE52 # SMALL FULL STOP A150 00B7 # MIDDLE DOT A151 FE54 # SMALL SEMICOLON A152 FE55 # SMALL COLON A153 FE56 # SMALL QUESTION MARK A154 FE57 # SMALL EXCLAMATION MARK A155 FF5C # FULLWIDTH VERTICAL BAR A156 2013 # EN DASH A157 FE31 # PRESENTATION FORM FOR VERTICAL EM DASH A158 2014 # EM DASH A159 FE33 # PRESENTATION FORM FOR VERTICAL LOW LINE A15A FF3F # SPACING UNDERSCORE duplicates A1C4 A15B FE34 # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE A15C FE4F # WAVY LOW LINE A15D FF08 # FULLWIDTH LEFT PARENTHESIS A15E FF09 # FULLWIDTH RIGHT PARENTHESIS A15F FE35 # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS A160 FE36 # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS A161 FF5B # FULLWIDTH LEFT CURLY BRACKET A162 FF5D # FULLWIDTH RIGHT CURLY BRACKET A163 FE37 # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET A164 FE38 # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET A165 3014 # LEFT TORTOISE SHELL BRACKET A166 3015 # RIGHT TORTOISE SHELL BRACKET A167 FE39 # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET A168 FE3A # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET A169 3010 # LEFT BLACK LENTICULAR BRACKET A16A 3011 # RIGHT BLACK LENTICULAR BRACKET A16B FE3B # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET A16C FE3C # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET A16D 300A # LEFT DOUBLE ANGLE BRACKET A16E 300B # RIGHT DOUBLE ANGLE BRACKET A16F FE3D # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET A170 FE3E # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET A171 3008 # LEFT ANGLE BRACKET A172 3009 # RIGHT ANGLE BRACKET A173 FE3F # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET A174 FE40 # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET A175 300C # LEFT CORNER BRACKET A176 300D # RIGHT CORNER BRACKET A177 FE41 # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET A178 FE42 # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET A179 300E # LEFT WHITE CORNER BRACKET A17A 300F # RIGHT WHITE CORNER BRACKET A17B FE43 # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET A17C FE44 # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET A17D FE59 # SMALL LEFT PARENTHESIS A17E FE5A # SMALL RIGHT PARENTHESIS A1A1 FE5B # SMALL LEFT CURLY BRACKET A1A2 FE5C # SMALL RIGHT CURLY BRACKET A1A3 FE5D # SMALL LEFT TORTOISE SHELL BRACKET A1A4 FE5E # SMALL RIGHT TORTOISE SHELL BRACKET A1A5 2018 # LEFT SINGLE QUOTATION MARK A1A6 2019 # RIGHT SINGLE QUOTATION MARK A1A7 201C # LEFT DOUBLE QUOTATION MARK A1A8 201D # RIGHT DOUBLE QUOTATION MARK A1A9 301D # REVERSED DOUBLE PRIME QUOTATION MARK A1AA 301E # DOUBLE PRIME QUOTATION MARK A1AB 2035 # REVERSED PRIME A1AC 2032 # PRIME A1AD FF03 # FULLWIDTH NUMBER SIGN A1AE FF06 # FULLWIDTH AMPERSAND A1AF FF0A # FULLWIDTH ASTERISK A1B0 203B # REFERENCE MARK A1B1 00A7 # SECTION SIGN A1B2 3003 # DITTO MARK A1B3 25CB # WHITE CIRCLE A1B4 25CF # BLACK CIRCLE A1B5 25B3 # WHITE UP-POINTING TRIANGLE A1B6 25B2 # BLACK UP-POINTING TRIANGLE A1B7 25CE # BULLSEYE A1B8 2606 # WHITE STAR A1B9 2605 # BLACK STAR A1BA 25C7 # WHITE DIAMOND A1BB 25C6 # BLACK DIAMOND A1BC 25A1 # WHITE SQUARE A1BD 25A0 # BLACK SQUARE A1BE 25BD # WHITE DOWN-POINTING TRIANGLE A1BF 25BC # BLACK DOWN-POINTING TRIANGLE A1C0 32A3 # CIRCLED IDEOGRAPH CORRECT A1C1 2105 # CARE OF A1C2 203E # OVERLINE A1C3 FFFD # *** NO MAPPING *** A1C4 FF3F # FULLWIDTH LOW LINE A1C5 FFFD # *** NO MAPPING *** A1C6 FE49 # DASHED OVERLINE A1C7 FE4A # CENTRELINE OVERLINE A1C8 FE4D # DASHED LOW LINE A1C9 FE4E # CENTRELINE LOW LINE A1CA FE4B # WAVY OVERLINE A1CB FE4C # DOUBLE WAVY OVERLINE A1CC FE5F # SMALL NUMBER SIGN A1CD FE60 # SMALL AMPERSAND A1CE FE61 # SMALL ASTERISK A1CF FF0B # FULLWIDTH PLUS SIGN A1D0 FF0D # FULLWIDTH HYPHEN-MINUS A1D1 00D7 # MULTIPLICATION SIGN A1D2 00F7 # DIVISION SIGN A1D3 00B1 # PLUS-MINUS SIGN A1D4 221A # SQUARE ROOT A1D5 FF1C # FULLWIDTH LESS-THAN SIGN A1D6 FF1E # FULLWIDTH GREATER-THAN SIGN A1D7 FF1D # FULLWIDTH EQUALS SIGN A1D8 2266 # LESS THAN OVER EQUAL TO A1D9 2267 # GREATER THAN OVER EQUAL TO A1DA 2260 # NOT EQUAL TO A1DB 221E # INFINITY A1DC 2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF A1DD 2261 # IDENTICAL TO A1DE FE62 # SMALL PLUS SIGN A1DF FE63 # SMALL HYPHEN-MINUS A1E0 FE64 # SMALL LESS-THAN SIGN A1E1 FE65 # SMALL GREATER-THAN SIGN A1E2 FE66 # SMALL EQUALS SIGN A1E3 223C # TILDE OPERATOR A1E4 2229 # INTERSECTION A1E5 222A # UNION A1E6 22A5 # UP TACK A1E7 2220 # ANGLE A1E8 221F # RIGHT ANGLE A1E9 22BF # RIGHT TRIANGLE A1EA 33D2 # SQUARE LOG A1EB 33D1 # SQUARE LN A1EC 222B # INTEGRAL A1ED 222E # CONTOUR INTEGRAL A1EE 2235 # BECAUSE A1EF 2234 # THEREFORE A1F0 2640 # FEMALE SIGN A1F1 2642 # MALE SIGN A1F2 2641 # EARTH A1F3 2609 # SUN A1F4 2191 # UPWARDS ARROW A1F5 2193 # DOWNWARDS ARROW A1F6 2190 # LEFTWARDS ARROW A1F7 2192 # RIGHTWARDS ARROW A1F8 2196 # NORTH WEST ARROW A1F9 2197 # NORTH EAST ARROW A1FA 2199 # SOUTH WEST ARROW A1FB 2198 # SOUTH EAST ARROW A1FC 2225 # PARALLEL TO A1FD 2223 # DIVIDES A1FE 2571 # LT DIAG UP RIGHT TO LOW LEFT duplicates A2AC A240 2572 # LT DIAG UP LEFT TO LOW RIGHT duplicates A2ADp A241 FF0F # FULLWIDTH SOLIDUS A242 FF3C # FULLWIDTH REVERSE SOLIDUS A243 FF04 # FULLWIDTH DOLLAR SIGN A244 00A5 # YEN SIGN A245 3012 # POSTAL MARK A246 00A2 # CENT SIGN A247 00A3 # POUND SIGN A248 FF05 # FULLWIDTH PERCENT SIGN A249 FF20 # FULLWIDTH COMMERCIAL AT A24A 2103 # DEGREE CELSIUS A24B 2109 # DEGREE FAHRENHEIT A24C FE69 # SMALL DOLLAR SIGN A24D FE6A # SMALL PERCENT SIGN A24E FE6B # SMALL COMMERCIAL AT A24F 33D5 # SQUARE MIL A250 339C # SQUARE MM A251 339D # SQUARE CM A252 339E # SQUARE KM A253 33CE # SQUARE KM CAPITAL A254 33A1 # SQUARE M SQUARED A255 338E # SQUARE MG A256 338F # SQUARE KG A257 33C4 # SQUARE CC A258 00B0 # DEGREE SIGN A259 5159 # A25A 515B # A25B 515E # A25C 515D # A25D 5161 # A25E 5163 # A25F 55E7 # A260 74E9 # A261 7CCE # A262 2581 # LOWER ONE EIGHTH BLOCK A263 2582 # LOWER ONE QUARTER BLOCK A264 2583 # LOWER THREE EIGHTHS BLOCK A265 2584 # LOWER HALF BLOCK A266 2585 # LOWER FIVE EIGHTHS BLOCK A267 2586 # LOWER THREE QUARTERS BLOCK A268 2587 # LOWER SEVEN EIGHTHS BLOCK A269 2588 # FULL BLOCK A26A 258F # LEFT ONE EIGHTH BLOCK A26B 258E # LEFT ONE QUARTER BLOCK A26C 258D # LEFT THREE EIGHTHS BLOCK A26D 258C # LEFT HALF BLOCK A26E 258B # LEFT FIVE EIGHTHS BLOCK A26F 258A # LEFT THREE QUARTERS BLOCK A270 2589 # LEFT SEVEN EIGHTHS BLOCK A271 253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL A272 2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL A273 252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL A274 2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT A275 251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT A276 2594 # UPPER ONE EIGHTH BLOCK A277 2500 # BOX DRAWINGS LIGHT HORIZONTAL A278 2502 # BOX DRAWINGS LIGHT VERTICAL A279 2595 # RIGHT ONE EIGHTH BLOCK A27A 250C # BOX DRAWINGS LIGHT DOWN AND RIGHT A27B 2510 # BOX DRAWINGS LIGHT DOWN AND LEFT A27C 2514 # BOX DRAWINGS LIGHT UP AND RIGHT A27D 2518 # BOX DRAWINGS LIGHT UP AND LEFT A27E 256D # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT A2A1 256E # BOX DRAWINGS LIGHT ARC DOWN AND LEFT A2A2 2570 # BOX DRAWINGS LIGHT ARC UP AND RIGHT A2A3 256F # BOX DRAWINGS LIGHT ARC UP AND LEFT A2A4 2550 # BOX DRAWINGS DOUBLE HORIZONTAL A2A5 255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE A2A6 256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE A2A7 2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE A2A8 25E2 # BLACK LOWER RIGHT TRIANGLE A2A9 25E3 # BLACK LOWER LEFT TRIANGLE A2AA 25E5 # BLACK UPPER RIGHT TRIANGLE A2AB 25E4 # BLACK UPPER LEFT TRIANGLE A2AC 2571 # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT A2AD 2572 # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT A2AE 2573 # BOX DRAWINGS LIGHT DIAGONAL CROSS A2AF FF10 # FULLWIDTH DIGIT ZERO A2B0 FF11 # FULLWIDTH DIGIT ONE A2B1 FF12 # FULLWIDTH DIGIT TWO A2B2 FF13 # FULLWIDTH DIGIT THREE A2B3 FF14 # FULLWIDTH DIGIT FOUR A2B4 FF15 # FULLWIDTH DIGIT FIVE A2B5 FF16 # FULLWIDTH DIGIT SIX A2B6 FF17 # FULLWIDTH DIGIT SEVEN A2B7 FF18 # FULLWIDTH DIGIT EIGHT A2B8 FF19 # FULLWIDTH DIGIT NINE A2B9 2160 # ROMAN NUMERAL ONE A2BA 2161 # ROMAN NUMERAL TWO A2BB 2162 # ROMAN NUMERAL THREE A2BC 2163 # ROMAN NUMERAL FOUR A2BD 2164 # ROMAN NUMERAL FIVE A2BE 2165 # ROMAN NUMERAL SIX A2BF 2166 # ROMAN NUMERAL SEVEN A2C0 2167 # ROMAN NUMERAL EIGHT A2C1 2168 # ROMAN NUMERAL NINE A2C2 2169 # ROMAN NUMERAL TEN A2C3 3021 # HANGZHOU NUMERAL ONE A2C4 3022 # HANGZHOU NUMERAL TWO A2C5 3023 # HANGZHOU NUMERAL THREE A2C6 3024 # HANGZHOU NUMERAL FOUR A2C7 3025 # HANGZHOU NUMERAL FIVE A2C8 3026 # HANGZHOU NUMERAL SIX A2C9 3027 # HANGZHOU NUMERAL SEVEN A2CA 3028 # HANGZHOU NUMERAL EIGHT A2CB 3029 # HANGZHOU NUMERAL NINE A2CC 5341 # HANGZHOU NUMERAL TEN conflicts with A451 mapping A2CD 5344 # A2CE 5345 # HANGZHOU NUMERAL THIRTY conflicts with A4CA mapping A2CF FF21 # FULLWIDTH LATIN CAPITAL LETTER A A2D0 FF22 # FULLWIDTH LATIN CAPITAL LETTER B A2D1 FF23 # FULLWIDTH LATIN CAPITAL LETTER C A2D2 FF24 # FULLWIDTH LATIN CAPITAL LETTER D A2D3 FF25 # FULLWIDTH LATIN CAPITAL LETTER E A2D4 FF26 # FULLWIDTH LATIN CAPITAL LETTER F A2D5 FF27 # FULLWIDTH LATIN CAPITAL LETTER G A2D6 FF28 # FULLWIDTH LATIN CAPITAL LETTER H A2D7 FF29 # FULLWIDTH LATIN CAPITAL LETTER I A2D8 FF2A # FULLWIDTH LATIN CAPITAL LETTER J A2D9 FF2B # FULLWIDTH LATIN CAPITAL LETTER K A2DA FF2C # FULLWIDTH LATIN CAPITAL LETTER L A2DB FF2D # FULLWIDTH LATIN CAPITAL LETTER M A2DC FF2E # FULLWIDTH LATIN CAPITAL LETTER N A2DD FF2F # FULLWIDTH LATIN CAPITAL LETTER O A2DE FF30 # FULLWIDTH LATIN CAPITAL LETTER P A2DF FF31 # FULLWIDTH LATIN CAPITAL LETTER Q A2E0 FF32 # FULLWIDTH LATIN CAPITAL LETTER R A2E1 FF33 # FULLWIDTH LATIN CAPITAL LETTER S A2E2 FF34 # FULLWIDTH LATIN CAPITAL LETTER T A2E3 FF35 # FULLWIDTH LATIN CAPITAL LETTER U A2E4 FF36 # FULLWIDTH LATIN CAPITAL LETTER V A2E5 FF37 # FULLWIDTH LATIN CAPITAL LETTER W A2E6 FF38 # FULLWIDTH LATIN CAPITAL LETTER X A2E7 FF39 # FULLWIDTH LATIN CAPITAL LETTER Y A2E8 FF3A # FULLWIDTH LATIN CAPITAL LETTER Z A2E9 FF41 # FULLWIDTH LATIN SMALL LETTER A A2EA FF42 # FULLWIDTH LATIN SMALL LETTER B A2EB FF43 # FULLWIDTH LATIN SMALL LETTER C A2EC FF44 # FULLWIDTH LATIN SMALL LETTER D A2ED FF45 # FULLWIDTH LATIN SMALL LETTER E A2EE FF46 # FULLWIDTH LATIN SMALL LETTER F A2EF FF47 # FULLWIDTH LATIN SMALL LETTER G A2F0 FF48 # FULLWIDTH LATIN SMALL LETTER H A2F1 FF49 # FULLWIDTH LATIN SMALL LETTER I A2F2 FF4A # FULLWIDTH LATIN SMALL LETTER J A2F3 FF4B # FULLWIDTH LATIN SMALL LETTER K A2F4 FF4C # FULLWIDTH LATIN SMALL LETTER L A2F5 FF4D # FULLWIDTH LATIN SMALL LETTER M A2F6 FF4E # FULLWIDTH LATIN SMALL LETTER N A2F7 FF4F # FULLWIDTH LATIN SMALL LETTER O A2F8 FF50 # FULLWIDTH LATIN SMALL LETTER P A2F9 FF51 # FULLWIDTH LATIN SMALL LETTER Q A2FA FF52 # FULLWIDTH LATIN SMALL LETTER R A2FB FF53 # FULLWIDTH LATIN SMALL LETTER S A2FC FF54 # FULLWIDTH LATIN SMALL LETTER T A2FD FF55 # FULLWIDTH LATIN SMALL LETTER U A2FE FF56 # FULLWIDTH LATIN SMALL LETTER V A340 FF57 # FULLWIDTH LATIN SMALL LETTER W A341 FF58 # FULLWIDTH LATIN SMALL LETTER X A342 FF59 # FULLWIDTH LATIN SMALL LETTER Y A343 FF5A # FULLWIDTH LATIN SMALL LETTER Z A344 0391 # GREEK CAPITAL LETTER ALPHA A345 0392 # GREEK CAPITAL LETTER BETA A346 0393 # GREEK CAPITAL LETTER GAMMA A347 0394 # GREEK CAPITAL LETTER DELTA A348 0395 # GREEK CAPITAL LETTER EPSILON A349 0396 # GREEK CAPITAL LETTER ZETA A34A 0397 # GREEK CAPITAL LETTER ETA A34B 0398 # GREEK CAPITAL LETTER THETA A34C 0399 # GREEK CAPITAL LETTER IOTA A34D 039A # GREEK CAPITAL LETTER KAPPA A34E 039B # GREEK CAPITAL LETTER LAMDA A34F 039C # GREEK CAPITAL LETTER MU A350 039D # GREEK CAPITAL LETTER NU A351 039E # GREEK CAPITAL LETTER XI A352 039F # GREEK CAPITAL LETTER OMICRON A353 03A0 # GREEK CAPITAL LETTER PI A354 03A1 # GREEK CAPITAL LETTER RHO A355 03A3 # GREEK CAPITAL LETTER SIGMA A356 03A4 # GREEK CAPITAL LETTER TAU A357 03A5 # GREEK CAPITAL LETTER UPSILON A358 03A6 # GREEK CAPITAL LETTER PHI A359 03A7 # GREEK CAPITAL LETTER CHI A35A 03A8 # GREEK CAPITAL LETTER PSI A35B 03A9 # GREEK CAPITAL LETTER OMEGA A35C 03B1 # GREEK SMALL LETTER ALPHA A35D 03B2 # GREEK SMALL LETTER BETA A35E 03B3 # GREEK SMALL LETTER GAMMA A35F 03B4 # GREEK SMALL LETTER DELTA A360 03B5 # GREEK SMALL LETTER EPSILON A361 03B6 # GREEK SMALL LETTER ZETA A362 03B7 # GREEK SMALL LETTER ETA A363 03B8 # GREEK SMALL LETTER THETA A364 03B9 # GREEK SMALL LETTER IOTA A365 03BA # GREEK SMALL LETTER KAPPA A366 03BB # GREEK SMALL LETTER LAMDA A367 03BC # GREEK SMALL LETTER MU A368 03BD # GREEK SMALL LETTER NU A369 03BE # GREEK SMALL LETTER XI A36A 03BF # GREEK SMALL LETTER OMICRON A36B 03C0 # GREEK SMALL LETTER PI A36C 03C1 # GREEK SMALL LETTER RHO A36D 03C3 # GREEK SMALL LETTER SIGMA A36E 03C4 # GREEK SMALL LETTER TAU A36F 03C5 # GREEK SMALL LETTER UPSILON A370 03C6 # GREEK SMALL LETTER PHI A371 03C7 # GREEK SMALL LETTER CHI A372 03C8 # GREEK SMALL LETTER PSI A373 03C9 # GREEK SMALL LETTER OMEGA A374 3105 # BOPOMOFO LETTER B A375 3106 # BOPOMOFO LETTER P A376 3107 # BOPOMOFO LETTER M A377 3108 # BOPOMOFO LETTER F A378 3109 # BOPOMOFO LETTER D A379 310A # BOPOMOFO LETTER T A37A 310B # BOPOMOFO LETTER N A37B 310C # BOPOMOFO LETTER L A37C 310D # BOPOMOFO LETTER G A37D 310E # BOPOMOFO LETTER K A37E 310F # BOPOMOFO LETTER H A3A1 3110 # BOPOMOFO LETTER J A3A2 3111 # BOPOMOFO LETTER Q A3A3 3112 # BOPOMOFO LETTER X A3A4 3113 # BOPOMOFO LETTER ZH A3A5 3114 # BOPOMOFO LETTER CH A3A6 3115 # BOPOMOFO LETTER SH A3A7 3116 # BOPOMOFO LETTER R A3A8 3117 # BOPOMOFO LETTER Z A3A9 3118 # BOPOMOFO LETTER C A3AA 3119 # BOPOMOFO LETTER S A3AB 311A # BOPOMOFO LETTER A A3AC 311B # BOPOMOFO LETTER O A3AD 311C # BOPOMOFO LETTER E A3AE 311D # BOPOMOFO LETTER EH A3AF 311E # BOPOMOFO LETTER AI A3B0 311F # BOPOMOFO LETTER EI A3B1 3120 # BOPOMOFO LETTER AU A3B2 3121 # BOPOMOFO LETTER OU A3B3 3122 # BOPOMOFO LETTER AN A3B4 3123 # BOPOMOFO LETTER EN A3B5 3124 # BOPOMOFO LETTER ANG A3B6 3125 # BOPOMOFO LETTER ENG A3B7 3126 # BOPOMOFO LETTER ER A3B8 3127 # BOPOMOFO LETTER I A3B9 3128 # BOPOMOFO LETTER U A3BA 3129 # BOPOMOFO LETTER IU A3BB 02D9 # DOT ABOVE (Mandarin Chinese light tone) A3BC 02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone) A3BD 02CA # MODIFIER LETTER ACUTE ACCENT (Mandarin Chinese second tone) A3BE 02C7 # CARON (Mandarin Chinese third tone) A3BF 02CB # MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone) A440 4E00 # A441 4E59 # A442 4E01 # A443 4E03 # A444 4E43 # A445 4E5D # A446 4E86 # A447 4E8C # A448 4EBA # A449 513F # A44A 5165 # A44B 516B # A44C 51E0 # A44D 5200 # A44E 5201 # A44F 529B # A450 5315 # A451 5341 # A452 535C # A453 53C8 # A454 4E09 # A455 4E0B # A456 4E08 # A457 4E0A # A458 4E2B # A459 4E38 # A45A 51E1 # A45B 4E45 # A45C 4E48 # A45D 4E5F # A45E 4E5E # A45F 4E8E # A460 4EA1 # A461 5140 # A462 5203 # A463 52FA # A464 5343 # A465 53C9 # A466 53E3 # A467 571F # A468 58EB # A469 5915 # A46A 5927 # A46B 5973 # A46C 5B50 # A46D 5B51 # A46E 5B53 # A46F 5BF8 # A470 5C0F # A471 5C22 # A472 5C38 # A473 5C71 # A474 5DDD # A475 5DE5 # A476 5DF1 # A477 5DF2 # A478 5DF3 # A479 5DFE # A47A 5E72 # A47B 5EFE # A47C 5F0B # A47D 5F13 # A47E 624D # A4A1 4E11 # A4A2 4E10 # A4A3 4E0D # A4A4 4E2D # A4A5 4E30 # A4A6 4E39 # A4A7 4E4B # A4A8 5C39 # A4A9 4E88 # A4AA 4E91 # A4AB 4E95 # A4AC 4E92 # A4AD 4E94 # A4AE 4EA2 # A4AF 4EC1 # A4B0 4EC0 # A4B1 4EC3 # A4B2 4EC6 # A4B3 4EC7 # A4B4 4ECD # A4B5 4ECA # A4B6 4ECB # A4B7 4EC4 # A4B8 5143 # A4B9 5141 # A4BA 5167 # A4BB 516D # A4BC 516E # A4BD 516C # A4BE 5197 # A4BF 51F6 # A4C0 5206 # A4C1 5207 # A4C2 5208 # A4C3 52FB # A4C4 52FE # A4C5 52FF # A4C6 5316 # A4C7 5339 # A4C8 5348 # A4C9 5347 # A4CA 5345 # A4CB 535E # A4CC 5384 # A4CD 53CB # A4CE 53CA # A4CF 53CD # A4D0 58EC # A4D1 5929 # A4D2 592B # A4D3 592A # A4D4 592D # A4D5 5B54 # A4D6 5C11 # A4D7 5C24 # A4D8 5C3A # A4D9 5C6F # A4DA 5DF4 # A4DB 5E7B # A4DC 5EFF # A4DD 5F14 # A4DE 5F15 # A4DF 5FC3 # A4E0 6208 # A4E1 6236 # A4E2 624B # A4E3 624E # A4E4 652F # A4E5 6587 # A4E6 6597 # A4E7 65A4 # A4E8 65B9 # A4E9 65E5 # A4EA 66F0 # A4EB 6708 # A4EC 6728 # A4ED 6B20 # A4EE 6B62 # A4EF 6B79 # A4F0 6BCB # A4F1 6BD4 # A4F2 6BDB # A4F3 6C0F # A4F4 6C34 # A4F5 706B # A4F6 722A # A4F7 7236 # A4F8 723B # A4F9 7247 # A4FA 7259 # A4FB 725B # A4FC 72AC # A4FD 738B # A4FE 4E19 # A540 4E16 # A541 4E15 # A542 4E14 # A543 4E18 # A544 4E3B # A545 4E4D # A546 4E4F # A547 4E4E # A548 4EE5 # A549 4ED8 # A54A 4ED4 # A54B 4ED5 # A54C 4ED6 # A54D 4ED7 # A54E 4EE3 # A54F 4EE4 # A550 4ED9 # A551 4EDE # A552 5145 # A553 5144 # A554 5189 # A555 518A # A556 51AC # A557 51F9 # A558 51FA # A559 51F8 # A55A 520A # A55B 52A0 # A55C 529F # A55D 5305 # A55E 5306 # A55F 5317 # A560 531D # A561 4EDF # A562 534A # A563 5349 # A564 5361 # A565 5360 # A566 536F # A567 536E # A568 53BB # A569 53EF # A56A 53E4 # A56B 53F3 # A56C 53EC # A56D 53EE # A56E 53E9 # A56F 53E8 # A570 53FC # A571 53F8 # A572 53F5 # A573 53EB # A574 53E6 # A575 53EA # A576 53F2 # A577 53F1 # A578 53F0 # A579 53E5 # A57A 53ED # A57B 53FB # A57C 56DB # A57D 56DA # A57E 5916 # A5A1 592E # A5A2 5931 # A5A3 5974 # A5A4 5976 # A5A5 5B55 # A5A6 5B83 # A5A7 5C3C # A5A8 5DE8 # A5A9 5DE7 # A5AA 5DE6 # A5AB 5E02 # A5AC 5E03 # A5AD 5E73 # A5AE 5E7C # A5AF 5F01 # A5B0 5F18 # A5B1 5F17 # A5B2 5FC5 # A5B3 620A # A5B4 6253 # A5B5 6254 # A5B6 6252 # A5B7 6251 # A5B8 65A5 # A5B9 65E6 # A5BA 672E # A5BB 672C # A5BC 672A # A5BD 672B # A5BE 672D # A5BF 6B63 # A5C0 6BCD # A5C1 6C11 # A5C2 6C10 # A5C3 6C38 # A5C4 6C41 # A5C5 6C40 # A5C6 6C3E # A5C7 72AF # A5C8 7384 # A5C9 7389 # A5CA 74DC # A5CB 74E6 # A5CC 7518 # A5CD 751F # A5CE 7528 # A5CF 7529 # A5D0 7530 # A5D1 7531 # A5D2 7532 # A5D3 7533 # A5D4 758B # A5D5 767D # A5D6 76AE # A5D7 76BF # A5D8 76EE # A5D9 77DB # A5DA 77E2 # A5DB 77F3 # A5DC 793A # A5DD 79BE # A5DE 7A74 # A5DF 7ACB # A5E0 4E1E # A5E1 4E1F # A5E2 4E52 # A5E3 4E53 # A5E4 4E69 # A5E5 4E99 # A5E6 4EA4 # A5E7 4EA6 # A5E8 4EA5 # A5E9 4EFF # A5EA 4F09 # A5EB 4F19 # A5EC 4F0A # A5ED 4F15 # A5EE 4F0D # A5EF 4F10 # A5F0 4F11 # A5F1 4F0F # A5F2 4EF2 # A5F3 4EF6 # A5F4 4EFB # A5F5 4EF0 # A5F6 4EF3 # A5F7 4EFD # A5F8 4F01 # A5F9 4F0B # A5FA 5149 # A5FB 5147 # A5FC 5146 # A5FD 5148 # A5FE 5168 # A640 5171 # A641 518D # A642 51B0 # A643 5217 # A644 5211 # A645 5212 # A646 520E # A647 5216 # A648 52A3 # A649 5308 # A64A 5321 # A64B 5320 # A64C 5370 # A64D 5371 # A64E 5409 # A64F 540F # A650 540C # A651 540A # A652 5410 # A653 5401 # A654 540B # A655 5404 # A656 5411 # A657 540D # A658 5408 # A659 5403 # A65A 540E # A65B 5406 # A65C 5412 # A65D 56E0 # A65E 56DE # A65F 56DD # A660 5733 # A661 5730 # A662 5728 # A663 572D # A664 572C # A665 572F # A666 5729 # A667 5919 # A668 591A # A669 5937 # A66A 5938 # A66B 5984 # A66C 5978 # A66D 5983 # A66E 597D # A66F 5979 # A670 5982 # A671 5981 # A672 5B57 # A673 5B58 # A674 5B87 # A675 5B88 # A676 5B85 # A677 5B89 # A678 5BFA # A679 5C16 # A67A 5C79 # A67B 5DDE # A67C 5E06 # A67D 5E76 # A67E 5E74 # A6A1 5F0F # A6A2 5F1B # A6A3 5FD9 # A6A4 5FD6 # A6A5 620E # A6A6 620C # A6A7 620D # A6A8 6210 # A6A9 6263 # A6AA 625B # A6AB 6258 # A6AC 6536 # A6AD 65E9 # A6AE 65E8 # A6AF 65EC # A6B0 65ED # A6B1 66F2 # A6B2 66F3 # A6B3 6709 # A6B4 673D # A6B5 6734 # A6B6 6731 # A6B7 6735 # A6B8 6B21 # A6B9 6B64 # A6BA 6B7B # A6BB 6C16 # A6BC 6C5D # A6BD 6C57 # A6BE 6C59 # A6BF 6C5F # A6C0 6C60 # A6C1 6C50 # A6C2 6C55 # A6C3 6C61 # A6C4 6C5B # A6C5 6C4D # A6C6 6C4E # A6C7 7070 # A6C8 725F # A6C9 725D # A6CA 767E # A6CB 7AF9 # A6CC 7C73 # A6CD 7CF8 # A6CE 7F36 # A6CF 7F8A # A6D0 7FBD # A6D1 8001 # A6D2 8003 # A6D3 800C # A6D4 8012 # A6D5 8033 # A6D6 807F # A6D7 8089 # A6D8 808B # A6D9 808C # A6DA 81E3 # A6DB 81EA # A6DC 81F3 # A6DD 81FC # A6DE 820C # A6DF 821B # A6E0 821F # A6E1 826E # A6E2 8272 # A6E3 827E # A6E4 866B # A6E5 8840 # A6E6 884C # A6E7 8863 # A6E8 897F # A6E9 9621 # A6EA 4E32 # A6EB 4EA8 # A6EC 4F4D # A6ED 4F4F # A6EE 4F47 # A6EF 4F57 # A6F0 4F5E # A6F1 4F34 # A6F2 4F5B # A6F3 4F55 # A6F4 4F30 # A6F5 4F50 # A6F6 4F51 # A6F7 4F3D # A6F8 4F3A # A6F9 4F38 # A6FA 4F43 # A6FB 4F54 # A6FC 4F3C # A6FD 4F46 # A6FE 4F63 # A740 4F5C # A741 4F60 # A742 4F2F # A743 4F4E # A744 4F36 # A745 4F59 # A746 4F5D # A747 4F48 # A748 4F5A # A749 514C # A74A 514B # A74B 514D # A74C 5175 # A74D 51B6 # A74E 51B7 # A74F 5225 # A750 5224 # A751 5229 # A752 522A # A753 5228 # A754 52AB # A755 52A9 # A756 52AA # A757 52AC # A758 5323 # A759 5373 # A75A 5375 # A75B 541D # A75C 542D # A75D 541E # A75E 543E # A75F 5426 # A760 544E # A761 5427 # A762 5446 # A763 5443 # A764 5433 # A765 5448 # A766 5442 # A767 541B # A768 5429 # A769 544A # A76A 5439 # A76B 543B # A76C 5438 # A76D 542E # A76E 5435 # A76F 5436 # A770 5420 # A771 543C # A772 5440 # A773 5431 # A774 542B # A775 541F # A776 542C # A777 56EA # A778 56F0 # A779 56E4 # A77A 56EB # A77B 574A # A77C 5751 # A77D 5740 # A77E 574D # A7A1 5747 # A7A2 574E # A7A3 573E # A7A4 5750 # A7A5 574F # A7A6 573B # A7A7 58EF # A7A8 593E # A7A9 599D # A7AA 5992 # A7AB 59A8 # A7AC 599E # A7AD 59A3 # A7AE 5999 # A7AF 5996 # A7B0 598D # A7B1 59A4 # A7B2 5993 # A7B3 598A # A7B4 59A5 # A7B5 5B5D # A7B6 5B5C # A7B7 5B5A # A7B8 5B5B # A7B9 5B8C # A7BA 5B8B # A7BB 5B8F # A7BC 5C2C # A7BD 5C40 # A7BE 5C41 # A7BF 5C3F # A7C0 5C3E # A7C1 5C90 # A7C2 5C91 # A7C3 5C94 # A7C4 5C8C # A7C5 5DEB # A7C6 5E0C # A7C7 5E8F # A7C8 5E87 # A7C9 5E8A # A7CA 5EF7 # A7CB 5F04 # A7CC 5F1F # A7CD 5F64 # A7CE 5F62 # A7CF 5F77 # A7D0 5F79 # A7D1 5FD8 # A7D2 5FCC # A7D3 5FD7 # A7D4 5FCD # A7D5 5FF1 # A7D6 5FEB # A7D7 5FF8 # A7D8 5FEA # A7D9 6212 # A7DA 6211 # A7DB 6284 # A7DC 6297 # A7DD 6296 # A7DE 6280 # A7DF 6276 # A7E0 6289 # A7E1 626D # A7E2 628A # A7E3 627C # A7E4 627E # A7E5 6279 # A7E6 6273 # A7E7 6292 # A7E8 626F # A7E9 6298 # A7EA 626E # A7EB 6295 # A7EC 6293 # A7ED 6291 # A7EE 6286 # A7EF 6539 # A7F0 653B # A7F1 6538 # A7F2 65F1 # A7F3 66F4 # A7F4 675F # A7F5 674E # A7F6 674F # A7F7 6750 # A7F8 6751 # A7F9 675C # A7FA 6756 # A7FB 675E # A7FC 6749 # A7FD 6746 # A7FE 6760 # A840 6753 # A841 6757 # A842 6B65 # A843 6BCF # A844 6C42 # A845 6C5E # A846 6C99 # A847 6C81 # A848 6C88 # A849 6C89 # A84A 6C85 # A84B 6C9B # A84C 6C6A # A84D 6C7A # A84E 6C90 # A84F 6C70 # A850 6C8C # A851 6C68 # A852 6C96 # A853 6C92 # A854 6C7D # A855 6C83 # A856 6C72 # A857 6C7E # A858 6C74 # A859 6C86 # A85A 6C76 # A85B 6C8D # A85C 6C94 # A85D 6C98 # A85E 6C82 # A85F 7076 # A860 707C # A861 707D # A862 7078 # A863 7262 # A864 7261 # A865 7260 # A866 72C4 # A867 72C2 # A868 7396 # A869 752C # A86A 752B # A86B 7537 # A86C 7538 # A86D 7682 # A86E 76EF # A86F 77E3 # A870 79C1 # A871 79C0 # A872 79BF # A873 7A76 # A874 7CFB # A875 7F55 # A876 8096 # A877 8093 # A878 809D # A879 8098 # A87A 809B # A87B 809A # A87C 80B2 # A87D 826F # A87E 8292 # A8A1 828B # A8A2 828D # A8A3 898B # A8A4 89D2 # A8A5 8A00 # A8A6 8C37 # A8A7 8C46 # A8A8 8C55 # A8A9 8C9D # A8AA 8D64 # A8AB 8D70 # A8AC 8DB3 # A8AD 8EAB # A8AE 8ECA # A8AF 8F9B # A8B0 8FB0 # A8B1 8FC2 # A8B2 8FC6 # A8B3 8FC5 # A8B4 8FC4 # A8B5 5DE1 # A8B6 9091 # A8B7 90A2 # A8B8 90AA # A8B9 90A6 # A8BA 90A3 # A8BB 9149 # A8BC 91C6 # A8BD 91CC # A8BE 9632 # A8BF 962E # A8C0 9631 # A8C1 962A # A8C2 962C # A8C3 4E26 # A8C4 4E56 # A8C5 4E73 # A8C6 4E8B # A8C7 4E9B # A8C8 4E9E # A8C9 4EAB # A8CA 4EAC # A8CB 4F6F # A8CC 4F9D # A8CD 4F8D # A8CE 4F73 # A8CF 4F7F # A8D0 4F6C # A8D1 4F9B # A8D2 4F8B # A8D3 4F86 # A8D4 4F83 # A8D5 4F70 # A8D6 4F75 # A8D7 4F88 # A8D8 4F69 # A8D9 4F7B # A8DA 4F96 # A8DB 4F7E # A8DC 4F8F # A8DD 4F91 # A8DE 4F7A # A8DF 5154 # A8E0 5152 # A8E1 5155 # A8E2 5169 # A8E3 5177 # A8E4 5176 # A8E5 5178 # A8E6 51BD # A8E7 51FD # A8E8 523B # A8E9 5238 # A8EA 5237 # A8EB 523A # A8EC 5230 # A8ED 522E # A8EE 5236 # A8EF 5241 # A8F0 52BE # A8F1 52BB # A8F2 5352 # A8F3 5354 # A8F4 5353 # A8F5 5351 # A8F6 5366 # A8F7 5377 # A8F8 5378 # A8F9 5379 # A8FA 53D6 # A8FB 53D4 # A8FC 53D7 # A8FD 5473 # A8FE 5475 # A940 5496 # A941 5478 # A942 5495 # A943 5480 # A944 547B # A945 5477 # A946 5484 # A947 5492 # A948 5486 # A949 547C # A94A 5490 # A94B 5471 # A94C 5476 # A94D 548C # A94E 549A # A94F 5462 # A950 5468 # A951 548B # A952 547D # A953 548E # A954 56FA # A955 5783 # A956 5777 # A957 576A # A958 5769 # A959 5761 # A95A 5766 # A95B 5764 # A95C 577C # A95D 591C # A95E 5949 # A95F 5947 # A960 5948 # A961 5944 # A962 5954 # A963 59BE # A964 59BB # A965 59D4 # A966 59B9 # A967 59AE # A968 59D1 # A969 59C6 # A96A 59D0 # A96B 59CD # A96C 59CB # A96D 59D3 # A96E 59CA # A96F 59AF # A970 59B3 # A971 59D2 # A972 59C5 # A973 5B5F # A974 5B64 # A975 5B63 # A976 5B97 # A977 5B9A # A978 5B98 # A979 5B9C # A97A 5B99 # A97B 5B9B # A97C 5C1A # A97D 5C48 # A97E 5C45 # A9A1 5C46 # A9A2 5CB7 # A9A3 5CA1 # A9A4 5CB8 # A9A5 5CA9 # A9A6 5CAB # A9A7 5CB1 # A9A8 5CB3 # A9A9 5E18 # A9AA 5E1A # A9AB 5E16 # A9AC 5E15 # A9AD 5E1B # A9AE 5E11 # A9AF 5E78 # A9B0 5E9A # A9B1 5E97 # A9B2 5E9C # A9B3 5E95 # A9B4 5E96 # A9B5 5EF6 # A9B6 5F26 # A9B7 5F27 # A9B8 5F29 # A9B9 5F80 # A9BA 5F81 # A9BB 5F7F # A9BC 5F7C # A9BD 5FDD # A9BE 5FE0 # A9BF 5FFD # A9C0 5FF5 # A9C1 5FFF # A9C2 600F # A9C3 6014 # A9C4 602F # A9C5 6035 # A9C6 6016 # A9C7 602A # A9C8 6015 # A9C9 6021 # A9CA 6027 # A9CB 6029 # A9CC 602B # A9CD 601B # A9CE 6216 # A9CF 6215 # A9D0 623F # A9D1 623E # A9D2 6240 # A9D3 627F # A9D4 62C9 # A9D5 62CC # A9D6 62C4 # A9D7 62BF # A9D8 62C2 # A9D9 62B9 # A9DA 62D2 # A9DB 62DB # A9DC 62AB # A9DD 62D3 # A9DE 62D4 # A9DF 62CB # A9E0 62C8 # A9E1 62A8 # A9E2 62BD # A9E3 62BC # A9E4 62D0 # A9E5 62D9 # A9E6 62C7 # A9E7 62CD # A9E8 62B5 # A9E9 62DA # A9EA 62B1 # A9EB 62D8 # A9EC 62D6 # A9ED 62D7 # A9EE 62C6 # A9EF 62AC # A9F0 62CE # A9F1 653E # A9F2 65A7 # A9F3 65BC # A9F4 65FA # A9F5 6614 # A9F6 6613 # A9F7 660C # A9F8 6606 # A9F9 6602 # A9FA 660E # A9FB 6600 # A9FC 660F # A9FD 6615 # A9FE 660A # AA40 6607 # AA41 670D # AA42 670B # AA43 676D # AA44 678B # AA45 6795 # AA46 6771 # AA47 679C # AA48 6773 # AA49 6777 # AA4A 6787 # AA4B 679D # AA4C 6797 # AA4D 676F # AA4E 6770 # AA4F 677F # AA50 6789 # AA51 677E # AA52 6790 # AA53 6775 # AA54 679A # AA55 6793 # AA56 677C # AA57 676A # AA58 6772 # AA59 6B23 # AA5A 6B66 # AA5B 6B67 # AA5C 6B7F # AA5D 6C13 # AA5E 6C1B # AA5F 6CE3 # AA60 6CE8 # AA61 6CF3 # AA62 6CB1 # AA63 6CCC # AA64 6CE5 # AA65 6CB3 # AA66 6CBD # AA67 6CBE # AA68 6CBC # AA69 6CE2 # AA6A 6CAB # AA6B 6CD5 # AA6C 6CD3 # AA6D 6CB8 # AA6E 6CC4 # AA6F 6CB9 # AA70 6CC1 # AA71 6CAE # AA72 6CD7 # AA73 6CC5 # AA74 6CF1 # AA75 6CBF # AA76 6CBB # AA77 6CE1 # AA78 6CDB # AA79 6CCA # AA7A 6CAC # AA7B 6CEF # AA7C 6CDC # AA7D 6CD6 # AA7E 6CE0 # AAA1 7095 # AAA2 708E # AAA3 7092 # AAA4 708A # AAA5 7099 # AAA6 722C # AAA7 722D # AAA8 7238 # AAA9 7248 # AAAA 7267 # AAAB 7269 # AAAC 72C0 # AAAD 72CE # AAAE 72D9 # AAAF 72D7 # AAB0 72D0 # AAB1 73A9 # AAB2 73A8 # AAB3 739F # AAB4 73AB # AAB5 73A5 # AAB6 753D # AAB7 759D # AAB8 7599 # AAB9 759A # AABA 7684 # AABB 76C2 # AABC 76F2 # AABD 76F4 # AABE 77E5 # AABF 77FD # AAC0 793E # AAC1 7940 # AAC2 7941 # AAC3 79C9 # AAC4 79C8 # AAC5 7A7A # AAC6 7A79 # AAC7 7AFA # AAC8 7CFE # AAC9 7F54 # AACA 7F8C # AACB 7F8B # AACC 8005 # AACD 80BA # AACE 80A5 # AACF 80A2 # AAD0 80B1 # AAD1 80A1 # AAD2 80AB # AAD3 80A9 # AAD4 80B4 # AAD5 80AA # AAD6 80AF # AAD7 81E5 # AAD8 81FE # AAD9 820D # AADA 82B3 # AADB 829D # AADC 8299 # AADD 82AD # AADE 82BD # AADF 829F # AAE0 82B9 # AAE1 82B1 # AAE2 82AC # AAE3 82A5 # AAE4 82AF # AAE5 82B8 # AAE6 82A3 # AAE7 82B0 # AAE8 82BE # AAE9 82B7 # AAEA 864E # AAEB 8671 # AAEC 521D # AAED 8868 # AAEE 8ECB # AAEF 8FCE # AAF0 8FD4 # AAF1 8FD1 # AAF2 90B5 # AAF3 90B8 # AAF4 90B1 # AAF5 90B6 # AAF6 91C7 # AAF7 91D1 # AAF8 9577 # AAF9 9580 # AAFA 961C # AAFB 9640 # AAFC 963F # AAFD 963B # AAFE 9644 # AB40 9642 # AB41 96B9 # AB42 96E8 # AB43 9752 # AB44 975E # AB45 4E9F # AB46 4EAD # AB47 4EAE # AB48 4FE1 # AB49 4FB5 # AB4A 4FAF # AB4B 4FBF # AB4C 4FE0 # AB4D 4FD1 # AB4E 4FCF # AB4F 4FDD # AB50 4FC3 # AB51 4FB6 # AB52 4FD8 # AB53 4FDF # AB54 4FCA # AB55 4FD7 # AB56 4FAE # AB57 4FD0 # AB58 4FC4 # AB59 4FC2 # AB5A 4FDA # AB5B 4FCE # AB5C 4FDE # AB5D 4FB7 # AB5E 5157 # AB5F 5192 # AB60 5191 # AB61 51A0 # AB62 524E # AB63 5243 # AB64 524A # AB65 524D # AB66 524C # AB67 524B # AB68 5247 # AB69 52C7 # AB6A 52C9 # AB6B 52C3 # AB6C 52C1 # AB6D 530D # AB6E 5357 # AB6F 537B # AB70 539A # AB71 53DB # AB72 54AC # AB73 54C0 # AB74 54A8 # AB75 54CE # AB76 54C9 # AB77 54B8 # AB78 54A6 # AB79 54B3 # AB7A 54C7 # AB7B 54C2 # AB7C 54BD # AB7D 54AA # AB7E 54C1 # ABA1 54C4 # ABA2 54C8 # ABA3 54AF # ABA4 54AB # ABA5 54B1 # ABA6 54BB # ABA7 54A9 # ABA8 54A7 # ABA9 54BF # ABAA 56FF # ABAB 5782 # ABAC 578B # ABAD 57A0 # ABAE 57A3 # ABAF 57A2 # ABB0 57CE # ABB1 57AE # ABB2 5793 # ABB3 5955 # ABB4 5951 # ABB5 594F # ABB6 594E # ABB7 5950 # ABB8 59DC # ABB9 59D8 # ABBA 59FF # ABBB 59E3 # ABBC 59E8 # ABBD 5A03 # ABBE 59E5 # ABBF 59EA # ABC0 59DA # ABC1 59E6 # ABC2 5A01 # ABC3 59FB # ABC4 5B69 # ABC5 5BA3 # ABC6 5BA6 # ABC7 5BA4 # ABC8 5BA2 # ABC9 5BA5 # ABCA 5C01 # ABCB 5C4E # ABCC 5C4F # ABCD 5C4D # ABCE 5C4B # ABCF 5CD9 # ABD0 5CD2 # ABD1 5DF7 # ABD2 5E1D # ABD3 5E25 # ABD4 5E1F # ABD5 5E7D # ABD6 5EA0 # ABD7 5EA6 # ABD8 5EFA # ABD9 5F08 # ABDA 5F2D # ABDB 5F65 # ABDC 5F88 # ABDD 5F85 # ABDE 5F8A # ABDF 5F8B # ABE0 5F87 # ABE1 5F8C # ABE2 5F89 # ABE3 6012 # ABE4 601D # ABE5 6020 # ABE6 6025 # ABE7 600E # ABE8 6028 # ABE9 604D # ABEA 6070 # ABEB 6068 # ABEC 6062 # ABED 6046 # ABEE 6043 # ABEF 606C # ABF0 606B # ABF1 606A # ABF2 6064 # ABF3 6241 # ABF4 62DC # ABF5 6316 # ABF6 6309 # ABF7 62FC # ABF8 62ED # ABF9 6301 # ABFA 62EE # ABFB 62FD # ABFC 6307 # ABFD 62F1 # ABFE 62F7 # AC40 62EF # AC41 62EC # AC42 62FE # AC43 62F4 # AC44 6311 # AC45 6302 # AC46 653F # AC47 6545 # AC48 65AB # AC49 65BD # AC4A 65E2 # AC4B 6625 # AC4C 662D # AC4D 6620 # AC4E 6627 # AC4F 662F # AC50 661F # AC51 6628 # AC52 6631 # AC53 6624 # AC54 66F7 # AC55 67FF # AC56 67D3 # AC57 67F1 # AC58 67D4 # AC59 67D0 # AC5A 67EC # AC5B 67B6 # AC5C 67AF # AC5D 67F5 # AC5E 67E9 # AC5F 67EF # AC60 67C4 # AC61 67D1 # AC62 67B4 # AC63 67DA # AC64 67E5 # AC65 67B8 # AC66 67CF # AC67 67DE # AC68 67F3 # AC69 67B0 # AC6A 67D9 # AC6B 67E2 # AC6C 67DD # AC6D 67D2 # AC6E 6B6A # AC6F 6B83 # AC70 6B86 # AC71 6BB5 # AC72 6BD2 # AC73 6BD7 # AC74 6C1F # AC75 6CC9 # AC76 6D0B # AC77 6D32 # AC78 6D2A # AC79 6D41 # AC7A 6D25 # AC7B 6D0C # AC7C 6D31 # AC7D 6D1E # AC7E 6D17 # ACA1 6D3B # ACA2 6D3D # ACA3 6D3E # ACA4 6D36 # ACA5 6D1B # ACA6 6CF5 # ACA7 6D39 # ACA8 6D27 # ACA9 6D38 # ACAA 6D29 # ACAB 6D2E # ACAC 6D35 # ACAD 6D0E # ACAE 6D2B # ACAF 70AB # ACB0 70BA # ACB1 70B3 # ACB2 70AC # ACB3 70AF # ACB4 70AD # ACB5 70B8 # ACB6 70AE # ACB7 70A4 # ACB8 7230 # ACB9 7272 # ACBA 726F # ACBB 7274 # ACBC 72E9 # ACBD 72E0 # ACBE 72E1 # ACBF 73B7 # ACC0 73CA # ACC1 73BB # ACC2 73B2 # ACC3 73CD # ACC4 73C0 # ACC5 73B3 # ACC6 751A # ACC7 752D # ACC8 754F # ACC9 754C # ACCA 754E # ACCB 754B # ACCC 75AB # ACCD 75A4 # ACCE 75A5 # ACCF 75A2 # ACD0 75A3 # ACD1 7678 # ACD2 7686 # ACD3 7687 # ACD4 7688 # ACD5 76C8 # ACD6 76C6 # ACD7 76C3 # ACD8 76C5 # ACD9 7701 # ACDA 76F9 # ACDB 76F8 # ACDC 7709 # ACDD 770B # ACDE 76FE # ACDF 76FC # ACE0 7707 # ACE1 77DC # ACE2 7802 # ACE3 7814 # ACE4 780C # ACE5 780D # ACE6 7946 # ACE7 7949 # ACE8 7948 # ACE9 7947 # ACEA 79B9 # ACEB 79BA # ACEC 79D1 # ACED 79D2 # ACEE 79CB # ACEF 7A7F # ACF0 7A81 # ACF1 7AFF # ACF2 7AFD # ACF3 7C7D # ACF4 7D02 # ACF5 7D05 # ACF6 7D00 # ACF7 7D09 # ACF8 7D07 # ACF9 7D04 # ACFA 7D06 # ACFB 7F38 # ACFC 7F8E # ACFD 7FBF # ACFE 8004 # AD40 8010 # AD41 800D # AD42 8011 # AD43 8036 # AD44 80D6 # AD45 80E5 # AD46 80DA # AD47 80C3 # AD48 80C4 # AD49 80CC # AD4A 80E1 # AD4B 80DB # AD4C 80CE # AD4D 80DE # AD4E 80E4 # AD4F 80DD # AD50 81F4 # AD51 8222 # AD52 82E7 # AD53 8303 # AD54 8305 # AD55 82E3 # AD56 82DB # AD57 82E6 # AD58 8304 # AD59 82E5 # AD5A 8302 # AD5B 8309 # AD5C 82D2 # AD5D 82D7 # AD5E 82F1 # AD5F 8301 # AD60 82DC # AD61 82D4 # AD62 82D1 # AD63 82DE # AD64 82D3 # AD65 82DF # AD66 82EF # AD67 8306 # AD68 8650 # AD69 8679 # AD6A 867B # AD6B 867A # AD6C 884D # AD6D 886B # AD6E 8981 # AD6F 89D4 # AD70 8A08 # AD71 8A02 # AD72 8A03 # AD73 8C9E # AD74 8CA0 # AD75 8D74 # AD76 8D73 # AD77 8DB4 # AD78 8ECD # AD79 8ECC # AD7A 8FF0 # AD7B 8FE6 # AD7C 8FE2 # AD7D 8FEA # AD7E 8FE5 # ADA1 8FED # ADA2 8FEB # ADA3 8FE4 # ADA4 8FE8 # ADA5 90CA # ADA6 90CE # ADA7 90C1 # ADA8 90C3 # ADA9 914B # ADAA 914A # ADAB 91CD # ADAC 9582 # ADAD 9650 # ADAE 964B # ADAF 964C # ADB0 964D # ADB1 9762 # ADB2 9769 # ADB3 97CB # ADB4 97ED # ADB5 97F3 # ADB6 9801 # ADB7 98A8 # ADB8 98DB # ADB9 98DF # ADBA 9996 # ADBB 9999 # ADBC 4E58 # ADBD 4EB3 # ADBE 500C # ADBF 500D # ADC0 5023 # ADC1 4FEF # ADC2 5026 # ADC3 5025 # ADC4 4FF8 # ADC5 5029 # ADC6 5016 # ADC7 5006 # ADC8 503C # ADC9 501F # ADCA 501A # ADCB 5012 # ADCC 5011 # ADCD 4FFA # ADCE 5000 # ADCF 5014 # ADD0 5028 # ADD1 4FF1 # ADD2 5021 # ADD3 500B # ADD4 5019 # ADD5 5018 # ADD6 4FF3 # ADD7 4FEE # ADD8 502D # ADD9 502A # ADDA 4FFE # ADDB 502B # ADDC 5009 # ADDD 517C # ADDE 51A4 # ADDF 51A5 # ADE0 51A2 # ADE1 51CD # ADE2 51CC # ADE3 51C6 # ADE4 51CB # ADE5 5256 # ADE6 525C # ADE7 5254 # ADE8 525B # ADE9 525D # ADEA 532A # ADEB 537F # ADEC 539F # ADED 539D # ADEE 53DF # ADEF 54E8 # ADF0 5510 # ADF1 5501 # ADF2 5537 # ADF3 54FC # ADF4 54E5 # ADF5 54F2 # ADF6 5506 # ADF7 54FA # ADF8 5514 # ADF9 54E9 # ADFA 54ED # ADFB 54E1 # ADFC 5509 # ADFD 54EE # ADFE 54EA # AE40 54E6 # AE41 5527 # AE42 5507 # AE43 54FD # AE44 550F # AE45 5703 # AE46 5704 # AE47 57C2 # AE48 57D4 # AE49 57CB # AE4A 57C3 # AE4B 5809 # AE4C 590F # AE4D 5957 # AE4E 5958 # AE4F 595A # AE50 5A11 # AE51 5A18 # AE52 5A1C # AE53 5A1F # AE54 5A1B # AE55 5A13 # AE56 59EC # AE57 5A20 # AE58 5A23 # AE59 5A29 # AE5A 5A25 # AE5B 5A0C # AE5C 5A09 # AE5D 5B6B # AE5E 5C58 # AE5F 5BB0 # AE60 5BB3 # AE61 5BB6 # AE62 5BB4 # AE63 5BAE # AE64 5BB5 # AE65 5BB9 # AE66 5BB8 # AE67 5C04 # AE68 5C51 # AE69 5C55 # AE6A 5C50 # AE6B 5CED # AE6C 5CFD # AE6D 5CFB # AE6E 5CEA # AE6F 5CE8 # AE70 5CF0 # AE71 5CF6 # AE72 5D01 # AE73 5CF4 # AE74 5DEE # AE75 5E2D # AE76 5E2B # AE77 5EAB # AE78 5EAD # AE79 5EA7 # AE7A 5F31 # AE7B 5F92 # AE7C 5F91 # AE7D 5F90 # AE7E 6059 # AEA1 6063 # AEA2 6065 # AEA3 6050 # AEA4 6055 # AEA5 606D # AEA6 6069 # AEA7 606F # AEA8 6084 # AEA9 609F # AEAA 609A # AEAB 608D # AEAC 6094 # AEAD 608C # AEAE 6085 # AEAF 6096 # AEB0 6247 # AEB1 62F3 # AEB2 6308 # AEB3 62FF # AEB4 634E # AEB5 633E # AEB6 632F # AEB7 6355 # AEB8 6342 # AEB9 6346 # AEBA 634F # AEBB 6349 # AEBC 633A # AEBD 6350 # AEBE 633D # AEBF 632A # AEC0 632B # AEC1 6328 # AEC2 634D # AEC3 634C # AEC4 6548 # AEC5 6549 # AEC6 6599 # AEC7 65C1 # AEC8 65C5 # AEC9 6642 # AECA 6649 # AECB 664F # AECC 6643 # AECD 6652 # AECE 664C # AECF 6645 # AED0 6641 # AED1 66F8 # AED2 6714 # AED3 6715 # AED4 6717 # AED5 6821 # AED6 6838 # AED7 6848 # AED8 6846 # AED9 6853 # AEDA 6839 # AEDB 6842 # AEDC 6854 # AEDD 6829 # AEDE 68B3 # AEDF 6817 # AEE0 684C # AEE1 6851 # AEE2 683D # AEE3 67F4 # AEE4 6850 # AEE5 6840 # AEE6 683C # AEE7 6843 # AEE8 682A # AEE9 6845 # AEEA 6813 # AEEB 6818 # AEEC 6841 # AEED 6B8A # AEEE 6B89 # AEEF 6BB7 # AEF0 6C23 # AEF1 6C27 # AEF2 6C28 # AEF3 6C26 # AEF4 6C24 # AEF5 6CF0 # AEF6 6D6A # AEF7 6D95 # AEF8 6D88 # AEF9 6D87 # AEFA 6D66 # AEFB 6D78 # AEFC 6D77 # AEFD 6D59 # AEFE 6D93 # AF40 6D6C # AF41 6D89 # AF42 6D6E # AF43 6D5A # AF44 6D74 # AF45 6D69 # AF46 6D8C # AF47 6D8A # AF48 6D79 # AF49 6D85 # AF4A 6D65 # AF4B 6D94 # AF4C 70CA # AF4D 70D8 # AF4E 70E4 # AF4F 70D9 # AF50 70C8 # AF51 70CF # AF52 7239 # AF53 7279 # AF54 72FC # AF55 72F9 # AF56 72FD # AF57 72F8 # AF58 72F7 # AF59 7386 # AF5A 73ED # AF5B 7409 # AF5C 73EE # AF5D 73E0 # AF5E 73EA # AF5F 73DE # AF60 7554 # AF61 755D # AF62 755C # AF63 755A # AF64 7559 # AF65 75BE # AF66 75C5 # AF67 75C7 # AF68 75B2 # AF69 75B3 # AF6A 75BD # AF6B 75BC # AF6C 75B9 # AF6D 75C2 # AF6E 75B8 # AF6F 768B # AF70 76B0 # AF71 76CA # AF72 76CD # AF73 76CE # AF74 7729 # AF75 771F # AF76 7720 # AF77 7728 # AF78 77E9 # AF79 7830 # AF7A 7827 # AF7B 7838 # AF7C 781D # AF7D 7834 # AF7E 7837 # AFA1 7825 # AFA2 782D # AFA3 7820 # AFA4 781F # AFA5 7832 # AFA6 7955 # AFA7 7950 # AFA8 7960 # AFA9 795F # AFAA 7956 # AFAB 795E # AFAC 795D # AFAD 7957 # AFAE 795A # AFAF 79E4 # AFB0 79E3 # AFB1 79E7 # AFB2 79DF # AFB3 79E6 # AFB4 79E9 # AFB5 79D8 # AFB6 7A84 # AFB7 7A88 # AFB8 7AD9 # AFB9 7B06 # AFBA 7B11 # AFBB 7C89 # AFBC 7D21 # AFBD 7D17 # AFBE 7D0B # AFBF 7D0A # AFC0 7D20 # AFC1 7D22 # AFC2 7D14 # AFC3 7D10 # AFC4 7D15 # AFC5 7D1A # AFC6 7D1C # AFC7 7D0D # AFC8 7D19 # AFC9 7D1B # AFCA 7F3A # AFCB 7F5F # AFCC 7F94 # AFCD 7FC5 # AFCE 7FC1 # AFCF 8006 # AFD0 8018 # AFD1 8015 # AFD2 8019 # AFD3 8017 # AFD4 803D # AFD5 803F # AFD6 80F1 # AFD7 8102 # AFD8 80F0 # AFD9 8105 # AFDA 80ED # AFDB 80F4 # AFDC 8106 # AFDD 80F8 # AFDE 80F3 # AFDF 8108 # AFE0 80FD # AFE1 810A # AFE2 80FC # AFE3 80EF # AFE4 81ED # AFE5 81EC # AFE6 8200 # AFE7 8210 # AFE8 822A # AFE9 822B # AFEA 8228 # AFEB 822C # AFEC 82BB # AFED 832B # AFEE 8352 # AFEF 8354 # AFF0 834A # AFF1 8338 # AFF2 8350 # AFF3 8349 # AFF4 8335 # AFF5 8334 # AFF6 834F # AFF7 8332 # AFF8 8339 # AFF9 8336 # AFFA 8317 # AFFB 8340 # AFFC 8331 # AFFD 8328 # AFFE 8343 # B040 8654 # B041 868A # B042 86AA # B043 8693 # B044 86A4 # B045 86A9 # B046 868C # B047 86A3 # B048 869C # B049 8870 # B04A 8877 # B04B 8881 # B04C 8882 # B04D 887D # B04E 8879 # B04F 8A18 # B050 8A10 # B051 8A0E # B052 8A0C # B053 8A15 # B054 8A0A # B055 8A17 # B056 8A13 # B057 8A16 # B058 8A0F # B059 8A11 # B05A 8C48 # B05B 8C7A # B05C 8C79 # B05D 8CA1 # B05E 8CA2 # B05F 8D77 # B060 8EAC # B061 8ED2 # B062 8ED4 # B063 8ECF # B064 8FB1 # B065 9001 # B066 9006 # B067 8FF7 # B068 9000 # B069 8FFA # B06A 8FF4 # B06B 9003 # B06C 8FFD # B06D 9005 # B06E 8FF8 # B06F 9095 # B070 90E1 # B071 90DD # B072 90E2 # B073 9152 # B074 914D # B075 914C # B076 91D8 # B077 91DD # B078 91D7 # B079 91DC # B07A 91D9 # B07B 9583 # B07C 9662 # B07D 9663 # B07E 9661 # B0A1 965B # B0A2 965D # B0A3 9664 # B0A4 9658 # B0A5 965E # B0A6 96BB # B0A7 98E2 # B0A8 99AC # B0A9 9AA8 # B0AA 9AD8 # B0AB 9B25 # B0AC 9B32 # B0AD 9B3C # B0AE 4E7E # B0AF 507A # B0B0 507D # B0B1 505C # B0B2 5047 # B0B3 5043 # B0B4 504C # B0B5 505A # B0B6 5049 # B0B7 5065 # B0B8 5076 # B0B9 504E # B0BA 5055 # B0BB 5075 # B0BC 5074 # B0BD 5077 # B0BE 504F # B0BF 500F # B0C0 506F # B0C1 506D # B0C2 515C # B0C3 5195 # B0C4 51F0 # B0C5 526A # B0C6 526F # B0C7 52D2 # B0C8 52D9 # B0C9 52D8 # B0CA 52D5 # B0CB 5310 # B0CC 530F # B0CD 5319 # B0CE 533F # B0CF 5340 # B0D0 533E # B0D1 53C3 # B0D2 66FC # B0D3 5546 # B0D4 556A # B0D5 5566 # B0D6 5544 # B0D7 555E # B0D8 5561 # B0D9 5543 # B0DA 554A # B0DB 5531 # B0DC 5556 # B0DD 554F # B0DE 5555 # B0DF 552F # B0E0 5564 # B0E1 5538 # B0E2 552E # B0E3 555C # B0E4 552C # B0E5 5563 # B0E6 5533 # B0E7 5541 # B0E8 5557 # B0E9 5708 # B0EA 570B # B0EB 5709 # B0EC 57DF # B0ED 5805 # B0EE 580A # B0EF 5806 # B0F0 57E0 # B0F1 57E4 # B0F2 57FA # B0F3 5802 # B0F4 5835 # B0F5 57F7 # B0F6 57F9 # B0F7 5920 # B0F8 5962 # B0F9 5A36 # B0FA 5A41 # B0FB 5A49 # B0FC 5A66 # B0FD 5A6A # B0FE 5A40 # B140 5A3C # B141 5A62 # B142 5A5A # B143 5A46 # B144 5A4A # B145 5B70 # B146 5BC7 # B147 5BC5 # B148 5BC4 # B149 5BC2 # B14A 5BBF # B14B 5BC6 # B14C 5C09 # B14D 5C08 # B14E 5C07 # B14F 5C60 # B150 5C5C # B151 5C5D # B152 5D07 # B153 5D06 # B154 5D0E # B155 5D1B # B156 5D16 # B157 5D22 # B158 5D11 # B159 5D29 # B15A 5D14 # B15B 5D19 # B15C 5D24 # B15D 5D27 # B15E 5D17 # B15F 5DE2 # B160 5E38 # B161 5E36 # B162 5E33 # B163 5E37 # B164 5EB7 # B165 5EB8 # B166 5EB6 # B167 5EB5 # B168 5EBE # B169 5F35 # B16A 5F37 # B16B 5F57 # B16C 5F6C # B16D 5F69 # B16E 5F6B # B16F 5F97 # B170 5F99 # B171 5F9E # B172 5F98 # B173 5FA1 # B174 5FA0 # B175 5F9C # B176 607F # B177 60A3 # B178 6089 # B179 60A0 # B17A 60A8 # B17B 60CB # B17C 60B4 # B17D 60E6 # B17E 60BD # B1A1 60C5 # B1A2 60BB # B1A3 60B5 # B1A4 60DC # B1A5 60BC # B1A6 60D8 # B1A7 60D5 # B1A8 60C6 # B1A9 60DF # B1AA 60B8 # B1AB 60DA # B1AC 60C7 # B1AD 621A # B1AE 621B # B1AF 6248 # B1B0 63A0 # B1B1 63A7 # B1B2 6372 # B1B3 6396 # B1B4 63A2 # B1B5 63A5 # B1B6 6377 # B1B7 6367 # B1B8 6398 # B1B9 63AA # B1BA 6371 # B1BB 63A9 # B1BC 6389 # B1BD 6383 # B1BE 639B # B1BF 636B # B1C0 63A8 # B1C1 6384 # B1C2 6388 # B1C3 6399 # B1C4 63A1 # B1C5 63AC # B1C6 6392 # B1C7 638F # B1C8 6380 # B1C9 637B # B1CA 6369 # B1CB 6368 # B1CC 637A # B1CD 655D # B1CE 6556 # B1CF 6551 # B1D0 6559 # B1D1 6557 # B1D2 555F # B1D3 654F # B1D4 6558 # B1D5 6555 # B1D6 6554 # B1D7 659C # B1D8 659B # B1D9 65AC # B1DA 65CF # B1DB 65CB # B1DC 65CC # B1DD 65CE # B1DE 665D # B1DF 665A # B1E0 6664 # B1E1 6668 # B1E2 6666 # B1E3 665E # B1E4 66F9 # B1E5 52D7 # B1E6 671B # B1E7 6881 # B1E8 68AF # B1E9 68A2 # B1EA 6893 # B1EB 68B5 # B1EC 687F # B1ED 6876 # B1EE 68B1 # B1EF 68A7 # B1F0 6897 # B1F1 68B0 # B1F2 6883 # B1F3 68C4 # B1F4 68AD # B1F5 6886 # B1F6 6885 # B1F7 6894 # B1F8 689D # B1F9 68A8 # B1FA 689F # B1FB 68A1 # B1FC 6882 # B1FD 6B32 # B1FE 6BBA # B240 6BEB # B241 6BEC # B242 6C2B # B243 6D8E # B244 6DBC # B245 6DF3 # B246 6DD9 # B247 6DB2 # B248 6DE1 # B249 6DCC # B24A 6DE4 # B24B 6DFB # B24C 6DFA # B24D 6E05 # B24E 6DC7 # B24F 6DCB # B250 6DAF # B251 6DD1 # B252 6DAE # B253 6DDE # B254 6DF9 # B255 6DB8 # B256 6DF7 # B257 6DF5 # B258 6DC5 # B259 6DD2 # B25A 6E1A # B25B 6DB5 # B25C 6DDA # B25D 6DEB # B25E 6DD8 # B25F 6DEA # B260 6DF1 # B261 6DEE # B262 6DE8 # B263 6DC6 # B264 6DC4 # B265 6DAA # B266 6DEC # B267 6DBF # B268 6DE6 # B269 70F9 # B26A 7109 # B26B 710A # B26C 70FD # B26D 70EF # B26E 723D # B26F 727D # B270 7281 # B271 731C # B272 731B # B273 7316 # B274 7313 # B275 7319 # B276 7387 # B277 7405 # B278 740A # B279 7403 # B27A 7406 # B27B 73FE # B27C 740D # B27D 74E0 # B27E 74F6 # B2A1 74F7 # B2A2 751C # B2A3 7522 # B2A4 7565 # B2A5 7566 # B2A6 7562 # B2A7 7570 # B2A8 758F # B2A9 75D4 # B2AA 75D5 # B2AB 75B5 # B2AC 75CA # B2AD 75CD # B2AE 768E # B2AF 76D4 # B2B0 76D2 # B2B1 76DB # B2B2 7737 # B2B3 773E # B2B4 773C # B2B5 7736 # B2B6 7738 # B2B7 773A # B2B8 786B # B2B9 7843 # B2BA 784E # B2BB 7965 # B2BC 7968 # B2BD 796D # B2BE 79FB # B2BF 7A92 # B2C0 7A95 # B2C1 7B20 # B2C2 7B28 # B2C3 7B1B # B2C4 7B2C # B2C5 7B26 # B2C6 7B19 # B2C7 7B1E # B2C8 7B2E # B2C9 7C92 # B2CA 7C97 # B2CB 7C95 # B2CC 7D46 # B2CD 7D43 # B2CE 7D71 # B2CF 7D2E # B2D0 7D39 # B2D1 7D3C # B2D2 7D40 # B2D3 7D30 # B2D4 7D33 # B2D5 7D44 # B2D6 7D2F # B2D7 7D42 # B2D8 7D32 # B2D9 7D31 # B2DA 7F3D # B2DB 7F9E # B2DC 7F9A # B2DD 7FCC # B2DE 7FCE # B2DF 7FD2 # B2E0 801C # B2E1 804A # B2E2 8046 # B2E3 812F # B2E4 8116 # B2E5 8123 # B2E6 812B # B2E7 8129 # B2E8 8130 # B2E9 8124 # B2EA 8202 # B2EB 8235 # B2EC 8237 # B2ED 8236 # B2EE 8239 # B2EF 838E # B2F0 839E # B2F1 8398 # B2F2 8378 # B2F3 83A2 # B2F4 8396 # B2F5 83BD # B2F6 83AB # B2F7 8392 # B2F8 838A # B2F9 8393 # B2FA 8389 # B2FB 83A0 # B2FC 8377 # B2FD 837B # B2FE 837C # B340 8386 # B341 83A7 # B342 8655 # B343 5F6A # B344 86C7 # B345 86C0 # B346 86B6 # B347 86C4 # B348 86B5 # B349 86C6 # B34A 86CB # B34B 86B1 # B34C 86AF # B34D 86C9 # B34E 8853 # B34F 889E # B350 8888 # B351 88AB # B352 8892 # B353 8896 # B354 888D # B355 888B # B356 8993 # B357 898F # B358 8A2A # B359 8A1D # B35A 8A23 # B35B 8A25 # B35C 8A31 # B35D 8A2D # B35E 8A1F # B35F 8A1B # B360 8A22 # B361 8C49 # B362 8C5A # B363 8CA9 # B364 8CAC # B365 8CAB # B366 8CA8 # B367 8CAA # B368 8CA7 # B369 8D67 # B36A 8D66 # B36B 8DBE # B36C 8DBA # B36D 8EDB # B36E 8EDF # B36F 9019 # B370 900D # B371 901A # B372 9017 # B373 9023 # B374 901F # B375 901D # B376 9010 # B377 9015 # B378 901E # B379 9020 # B37A 900F # B37B 9022 # B37C 9016 # B37D 901B # B37E 9014 # B3A1 90E8 # B3A2 90ED # B3A3 90FD # B3A4 9157 # B3A5 91CE # B3A6 91F5 # B3A7 91E6 # B3A8 91E3 # B3A9 91E7 # B3AA 91ED # B3AB 91E9 # B3AC 9589 # B3AD 966A # B3AE 9675 # B3AF 9673 # B3B0 9678 # B3B1 9670 # B3B2 9674 # B3B3 9676 # B3B4 9677 # B3B5 966C # B3B6 96C0 # B3B7 96EA # B3B8 96E9 # B3B9 7AE0 # B3BA 7ADF # B3BB 9802 # B3BC 9803 # B3BD 9B5A # B3BE 9CE5 # B3BF 9E75 # B3C0 9E7F # B3C1 9EA5 # B3C2 9EBB # B3C3 50A2 # B3C4 508D # B3C5 5085 # B3C6 5099 # B3C7 5091 # B3C8 5080 # B3C9 5096 # B3CA 5098 # B3CB 509A # B3CC 6700 # B3CD 51F1 # B3CE 5272 # B3CF 5274 # B3D0 5275 # B3D1 5269 # B3D2 52DE # B3D3 52DD # B3D4 52DB # B3D5 535A # B3D6 53A5 # B3D7 557B # B3D8 5580 # B3D9 55A7 # B3DA 557C # B3DB 558A # B3DC 559D # B3DD 5598 # B3DE 5582 # B3DF 559C # B3E0 55AA # B3E1 5594 # B3E2 5587 # B3E3 558B # B3E4 5583 # B3E5 55B3 # B3E6 55AE # B3E7 559F # B3E8 553E # B3E9 55B2 # B3EA 559A # B3EB 55BB # B3EC 55AC # B3ED 55B1 # B3EE 557E # B3EF 5589 # B3F0 55AB # B3F1 5599 # B3F2 570D # B3F3 582F # B3F4 582A # B3F5 5834 # B3F6 5824 # B3F7 5830 # B3F8 5831 # B3F9 5821 # B3FA 581D # B3FB 5820 # B3FC 58F9 # B3FD 58FA # B3FE 5960 # B440 5A77 # B441 5A9A # B442 5A7F # B443 5A92 # B444 5A9B # B445 5AA7 # B446 5B73 # B447 5B71 # B448 5BD2 # B449 5BCC # B44A 5BD3 # B44B 5BD0 # B44C 5C0A # B44D 5C0B # B44E 5C31 # B44F 5D4C # B450 5D50 # B451 5D34 # B452 5D47 # B453 5DFD # B454 5E45 # B455 5E3D # B456 5E40 # B457 5E43 # B458 5E7E # B459 5ECA # B45A 5EC1 # B45B 5EC2 # B45C 5EC4 # B45D 5F3C # B45E 5F6D # B45F 5FA9 # B460 5FAA # B461 5FA8 # B462 60D1 # B463 60E1 # B464 60B2 # B465 60B6 # B466 60E0 # B467 611C # B468 6123 # B469 60FA # B46A 6115 # B46B 60F0 # B46C 60FB # B46D 60F4 # B46E 6168 # B46F 60F1 # B470 610E # B471 60F6 # B472 6109 # B473 6100 # B474 6112 # B475 621F # B476 6249 # B477 63A3 # B478 638C # B479 63CF # B47A 63C0 # B47B 63E9 # B47C 63C9 # B47D 63C6 # B47E 63CD # B4A1 63D2 # B4A2 63E3 # B4A3 63D0 # B4A4 63E1 # B4A5 63D6 # B4A6 63ED # B4A7 63EE # B4A8 6376 # B4A9 63F4 # B4AA 63EA # B4AB 63DB # B4AC 6452 # B4AD 63DA # B4AE 63F9 # B4AF 655E # B4B0 6566 # B4B1 6562 # B4B2 6563 # B4B3 6591 # B4B4 6590 # B4B5 65AF # B4B6 666E # B4B7 6670 # B4B8 6674 # B4B9 6676 # B4BA 666F # B4BB 6691 # B4BC 667A # B4BD 667E # B4BE 6677 # B4BF 66FE # B4C0 66FF # B4C1 671F # B4C2 671D # B4C3 68FA # B4C4 68D5 # B4C5 68E0 # B4C6 68D8 # B4C7 68D7 # B4C8 6905 # B4C9 68DF # B4CA 68F5 # B4CB 68EE # B4CC 68E7 # B4CD 68F9 # B4CE 68D2 # B4CF 68F2 # B4D0 68E3 # B4D1 68CB # B4D2 68CD # B4D3 690D # B4D4 6912 # B4D5 690E # B4D6 68C9 # B4D7 68DA # B4D8 696E # B4D9 68FB # B4DA 6B3E # B4DB 6B3A # B4DC 6B3D # B4DD 6B98 # B4DE 6B96 # B4DF 6BBC # B4E0 6BEF # B4E1 6C2E # B4E2 6C2F # B4E3 6C2C # B4E4 6E2F # B4E5 6E38 # B4E6 6E54 # B4E7 6E21 # B4E8 6E32 # B4E9 6E67 # B4EA 6E4A # B4EB 6E20 # B4EC 6E25 # B4ED 6E23 # B4EE 6E1B # B4EF 6E5B # B4F0 6E58 # B4F1 6E24 # B4F2 6E56 # B4F3 6E6E # B4F4 6E2D # B4F5 6E26 # B4F6 6E6F # B4F7 6E34 # B4F8 6E4D # B4F9 6E3A # B4FA 6E2C # B4FB 6E43 # B4FC 6E1D # B4FD 6E3E # B4FE 6ECB # B540 6E89 # B541 6E19 # B542 6E4E # B543 6E63 # B544 6E44 # B545 6E72 # B546 6E69 # B547 6E5F # B548 7119 # B549 711A # B54A 7126 # B54B 7130 # B54C 7121 # B54D 7136 # B54E 716E # B54F 711C # B550 724C # B551 7284 # B552 7280 # B553 7336 # B554 7325 # B555 7334 # B556 7329 # B557 743A # B558 742A # B559 7433 # B55A 7422 # B55B 7425 # B55C 7435 # B55D 7436 # B55E 7434 # B55F 742F # B560 741B # B561 7426 # B562 7428 # B563 7525 # B564 7526 # B565 756B # B566 756A # B567 75E2 # B568 75DB # B569 75E3 # B56A 75D9 # B56B 75D8 # B56C 75DE # B56D 75E0 # B56E 767B # B56F 767C # B570 7696 # B571 7693 # B572 76B4 # B573 76DC # B574 774F # B575 77ED # B576 785D # B577 786C # B578 786F # B579 7A0D # B57A 7A08 # B57B 7A0B # B57C 7A05 # B57D 7A00 # B57E 7A98 # B5A1 7A97 # B5A2 7A96 # B5A3 7AE5 # B5A4 7AE3 # B5A5 7B49 # B5A6 7B56 # B5A7 7B46 # B5A8 7B50 # B5A9 7B52 # B5AA 7B54 # B5AB 7B4D # B5AC 7B4B # B5AD 7B4F # B5AE 7B51 # B5AF 7C9F # B5B0 7CA5 # B5B1 7D5E # B5B2 7D50 # B5B3 7D68 # B5B4 7D55 # B5B5 7D2B # B5B6 7D6E # B5B7 7D72 # B5B8 7D61 # B5B9 7D66 # B5BA 7D62 # B5BB 7D70 # B5BC 7D73 # B5BD 5584 # B5BE 7FD4 # B5BF 7FD5 # B5C0 800B # B5C1 8052 # B5C2 8085 # B5C3 8155 # B5C4 8154 # B5C5 814B # B5C6 8151 # B5C7 814E # B5C8 8139 # B5C9 8146 # B5CA 813E # B5CB 814C # B5CC 8153 # B5CD 8174 # B5CE 8212 # B5CF 821C # B5D0 83E9 # B5D1 8403 # B5D2 83F8 # B5D3 840D # B5D4 83E0 # B5D5 83C5 # B5D6 840B # B5D7 83C1 # B5D8 83EF # B5D9 83F1 # B5DA 83F4 # B5DB 8457 # B5DC 840A # B5DD 83F0 # B5DE 840C # B5DF 83CC # B5E0 83FD # B5E1 83F2 # B5E2 83CA # B5E3 8438 # B5E4 840E # B5E5 8404 # B5E6 83DC # B5E7 8407 # B5E8 83D4 # B5E9 83DF # B5EA 865B # B5EB 86DF # B5EC 86D9 # B5ED 86ED # B5EE 86D4 # B5EF 86DB # B5F0 86E4 # B5F1 86D0 # B5F2 86DE # B5F3 8857 # B5F4 88C1 # B5F5 88C2 # B5F6 88B1 # B5F7 8983 # B5F8 8996 # B5F9 8A3B # B5FA 8A60 # B5FB 8A55 # B5FC 8A5E # B5FD 8A3C # B5FE 8A41 # B640 8A54 # B641 8A5B # B642 8A50 # B643 8A46 # B644 8A34 # B645 8A3A # B646 8A36 # B647 8A56 # B648 8C61 # B649 8C82 # B64A 8CAF # B64B 8CBC # B64C 8CB3 # B64D 8CBD # B64E 8CC1 # B64F 8CBB # B650 8CC0 # B651 8CB4 # B652 8CB7 # B653 8CB6 # B654 8CBF # B655 8CB8 # B656 8D8A # B657 8D85 # B658 8D81 # B659 8DCE # B65A 8DDD # B65B 8DCB # B65C 8DDA # B65D 8DD1 # B65E 8DCC # B65F 8DDB # B660 8DC6 # B661 8EFB # B662 8EF8 # B663 8EFC # B664 8F9C # B665 902E # B666 9035 # B667 9031 # B668 9038 # B669 9032 # B66A 9036 # B66B 9102 # B66C 90F5 # B66D 9109 # B66E 90FE # B66F 9163 # B670 9165 # B671 91CF # B672 9214 # B673 9215 # B674 9223 # B675 9209 # B676 921E # B677 920D # B678 9210 # B679 9207 # B67A 9211 # B67B 9594 # B67C 958F # B67D 958B # B67E 9591 # B6A1 9593 # B6A2 9592 # B6A3 958E # B6A4 968A # B6A5 968E # B6A6 968B # B6A7 967D # B6A8 9685 # B6A9 9686 # B6AA 968D # B6AB 9672 # B6AC 9684 # B6AD 96C1 # B6AE 96C5 # B6AF 96C4 # B6B0 96C6 # B6B1 96C7 # B6B2 96EF # B6B3 96F2 # B6B4 97CC # B6B5 9805 # B6B6 9806 # B6B7 9808 # B6B8 98E7 # B6B9 98EA # B6BA 98EF # B6BB 98E9 # B6BC 98F2 # B6BD 98ED # B6BE 99AE # B6BF 99AD # B6C0 9EC3 # B6C1 9ECD # B6C2 9ED1 # B6C3 4E82 # B6C4 50AD # B6C5 50B5 # B6C6 50B2 # B6C7 50B3 # B6C8 50C5 # B6C9 50BE # B6CA 50AC # B6CB 50B7 # B6CC 50BB # B6CD 50AF # B6CE 50C7 # B6CF 527F # B6D0 5277 # B6D1 527D # B6D2 52DF # B6D3 52E6 # B6D4 52E4 # B6D5 52E2 # B6D6 52E3 # B6D7 532F # B6D8 55DF # B6D9 55E8 # B6DA 55D3 # B6DB 55E6 # B6DC 55CE # B6DD 55DC # B6DE 55C7 # B6DF 55D1 # B6E0 55E3 # B6E1 55E4 # B6E2 55EF # B6E3 55DA # B6E4 55E1 # B6E5 55C5 # B6E6 55C6 # B6E7 55E5 # B6E8 55C9 # B6E9 5712 # B6EA 5713 # B6EB 585E # B6EC 5851 # B6ED 5858 # B6EE 5857 # B6EF 585A # B6F0 5854 # B6F1 586B # B6F2 584C # B6F3 586D # B6F4 584A # B6F5 5862 # B6F6 5852 # B6F7 584B # B6F8 5967 # B6F9 5AC1 # B6FA 5AC9 # B6FB 5ACC # B6FC 5ABE # B6FD 5ABD # B6FE 5ABC # B740 5AB3 # B741 5AC2 # B742 5AB2 # B743 5D69 # B744 5D6F # B745 5E4C # B746 5E79 # B747 5EC9 # B748 5EC8 # B749 5F12 # B74A 5F59 # B74B 5FAC # B74C 5FAE # B74D 611A # B74E 610F # B74F 6148 # B750 611F # B751 60F3 # B752 611B # B753 60F9 # B754 6101 # B755 6108 # B756 614E # B757 614C # B758 6144 # B759 614D # B75A 613E # B75B 6134 # B75C 6127 # B75D 610D # B75E 6106 # B75F 6137 # B760 6221 # B761 6222 # B762 6413 # B763 643E # B764 641E # B765 642A # B766 642D # B767 643D # B768 642C # B769 640F # B76A 641C # B76B 6414 # B76C 640D # B76D 6436 # B76E 6416 # B76F 6417 # B770 6406 # B771 656C # B772 659F # B773 65B0 # B774 6697 # B775 6689 # B776 6687 # B777 6688 # B778 6696 # B779 6684 # B77A 6698 # B77B 668D # B77C 6703 # B77D 6994 # B77E 696D # B7A1 695A # B7A2 6977 # B7A3 6960 # B7A4 6954 # B7A5 6975 # B7A6 6930 # B7A7 6982 # B7A8 694A # B7A9 6968 # B7AA 696B # B7AB 695E # B7AC 6953 # B7AD 6979 # B7AE 6986 # B7AF 695D # B7B0 6963 # B7B1 695B # B7B2 6B47 # B7B3 6B72 # B7B4 6BC0 # B7B5 6BBF # B7B6 6BD3 # B7B7 6BFD # B7B8 6EA2 # B7B9 6EAF # B7BA 6ED3 # B7BB 6EB6 # B7BC 6EC2 # B7BD 6E90 # B7BE 6E9D # B7BF 6EC7 # B7C0 6EC5 # B7C1 6EA5 # B7C2 6E98 # B7C3 6EBC # B7C4 6EBA # B7C5 6EAB # B7C6 6ED1 # B7C7 6E96 # B7C8 6E9C # B7C9 6EC4 # B7CA 6ED4 # B7CB 6EAA # B7CC 6EA7 # B7CD 6EB4 # B7CE 714E # B7CF 7159 # B7D0 7169 # B7D1 7164 # B7D2 7149 # B7D3 7167 # B7D4 715C # B7D5 716C # B7D6 7166 # B7D7 714C # B7D8 7165 # B7D9 715E # B7DA 7146 # B7DB 7168 # B7DC 7156 # B7DD 723A # B7DE 7252 # B7DF 7337 # B7E0 7345 # B7E1 733F # B7E2 733E # B7E3 746F # B7E4 745A # B7E5 7455 # B7E6 745F # B7E7 745E # B7E8 7441 # B7E9 743F # B7EA 7459 # B7EB 745B # B7EC 745C # B7ED 7576 # B7EE 7578 # B7EF 7600 # B7F0 75F0 # B7F1 7601 # B7F2 75F2 # B7F3 75F1 # B7F4 75FA # B7F5 75FF # B7F6 75F4 # B7F7 75F3 # B7F8 76DE # B7F9 76DF # B7FA 775B # B7FB 776B # B7FC 7766 # B7FD 775E # B7FE 7763 # B840 7779 # B841 776A # B842 776C # B843 775C # B844 7765 # B845 7768 # B846 7762 # B847 77EE # B848 788E # B849 78B0 # B84A 7897 # B84B 7898 # B84C 788C # B84D 7889 # B84E 787C # B84F 7891 # B850 7893 # B851 787F # B852 797A # B853 797F # B854 7981 # B855 842C # B856 79BD # B857 7A1C # B858 7A1A # B859 7A20 # B85A 7A14 # B85B 7A1F # B85C 7A1E # B85D 7A9F # B85E 7AA0 # B85F 7B77 # B860 7BC0 # B861 7B60 # B862 7B6E # B863 7B67 # B864 7CB1 # B865 7CB3 # B866 7CB5 # B867 7D93 # B868 7D79 # B869 7D91 # B86A 7D81 # B86B 7D8F # B86C 7D5B # B86D 7F6E # B86E 7F69 # B86F 7F6A # B870 7F72 # B871 7FA9 # B872 7FA8 # B873 7FA4 # B874 8056 # B875 8058 # B876 8086 # B877 8084 # B878 8171 # B879 8170 # B87A 8178 # B87B 8165 # B87C 816E # B87D 8173 # B87E 816B # B8A1 8179 # B8A2 817A # B8A3 8166 # B8A4 8205 # B8A5 8247 # B8A6 8482 # B8A7 8477 # B8A8 843D # B8A9 8431 # B8AA 8475 # B8AB 8466 # B8AC 846B # B8AD 8449 # B8AE 846C # B8AF 845B # B8B0 843C # B8B1 8435 # B8B2 8461 # B8B3 8463 # B8B4 8469 # B8B5 846D # B8B6 8446 # B8B7 865E # B8B8 865C # B8B9 865F # B8BA 86F9 # B8BB 8713 # B8BC 8708 # B8BD 8707 # B8BE 8700 # B8BF 86FE # B8C0 86FB # B8C1 8702 # B8C2 8703 # B8C3 8706 # B8C4 870A # B8C5 8859 # B8C6 88DF # B8C7 88D4 # B8C8 88D9 # B8C9 88DC # B8CA 88D8 # B8CB 88DD # B8CC 88E1 # B8CD 88CA # B8CE 88D5 # B8CF 88D2 # B8D0 899C # B8D1 89E3 # B8D2 8A6B # B8D3 8A72 # B8D4 8A73 # B8D5 8A66 # B8D6 8A69 # B8D7 8A70 # B8D8 8A87 # B8D9 8A7C # B8DA 8A63 # B8DB 8AA0 # B8DC 8A71 # B8DD 8A85 # B8DE 8A6D # B8DF 8A62 # B8E0 8A6E # B8E1 8A6C # B8E2 8A79 # B8E3 8A7B # B8E4 8A3E # B8E5 8A68 # B8E6 8C62 # B8E7 8C8A # B8E8 8C89 # B8E9 8CCA # B8EA 8CC7 # B8EB 8CC8 # B8EC 8CC4 # B8ED 8CB2 # B8EE 8CC3 # B8EF 8CC2 # B8F0 8CC5 # B8F1 8DE1 # B8F2 8DDF # B8F3 8DE8 # B8F4 8DEF # B8F5 8DF3 # B8F6 8DFA # B8F7 8DEA # B8F8 8DE4 # B8F9 8DE6 # B8FA 8EB2 # B8FB 8F03 # B8FC 8F09 # B8FD 8EFE # B8FE 8F0A # B940 8F9F # B941 8FB2 # B942 904B # B943 904A # B944 9053 # B945 9042 # B946 9054 # B947 903C # B948 9055 # B949 9050 # B94A 9047 # B94B 904F # B94C 904E # B94D 904D # B94E 9051 # B94F 903E # B950 9041 # B951 9112 # B952 9117 # B953 916C # B954 916A # B955 9169 # B956 91C9 # B957 9237 # B958 9257 # B959 9238 # B95A 923D # B95B 9240 # B95C 923E # B95D 925B # B95E 924B # B95F 9264 # B960 9251 # B961 9234 # B962 9249 # B963 924D # B964 9245 # B965 9239 # B966 923F # B967 925A # B968 9598 # B969 9698 # B96A 9694 # B96B 9695 # B96C 96CD # B96D 96CB # B96E 96C9 # B96F 96CA # B970 96F7 # B971 96FB # B972 96F9 # B973 96F6 # B974 9756 # B975 9774 # B976 9776 # B977 9810 # B978 9811 # B979 9813 # B97A 980A # B97B 9812 # B97C 980C # B97D 98FC # B97E 98F4 # B9A1 98FD # B9A2 98FE # B9A3 99B3 # B9A4 99B1 # B9A5 99B4 # B9A6 9AE1 # B9A7 9CE9 # B9A8 9E82 # B9A9 9F0E # B9AA 9F13 # B9AB 9F20 # B9AC 50E7 # B9AD 50EE # B9AE 50E5 # B9AF 50D6 # B9B0 50ED # B9B1 50DA # B9B2 50D5 # B9B3 50CF # B9B4 50D1 # B9B5 50F1 # B9B6 50CE # B9B7 50E9 # B9B8 5162 # B9B9 51F3 # B9BA 5283 # B9BB 5282 # B9BC 5331 # B9BD 53AD # B9BE 55FE # B9BF 5600 # B9C0 561B # B9C1 5617 # B9C2 55FD # B9C3 5614 # B9C4 5606 # B9C5 5609 # B9C6 560D # B9C7 560E # B9C8 55F7 # B9C9 5616 # B9CA 561F # B9CB 5608 # B9CC 5610 # B9CD 55F6 # B9CE 5718 # B9CF 5716 # B9D0 5875 # B9D1 587E # B9D2 5883 # B9D3 5893 # B9D4 588A # B9D5 5879 # B9D6 5885 # B9D7 587D # B9D8 58FD # B9D9 5925 # B9DA 5922 # B9DB 5924 # B9DC 596A # B9DD 5969 # B9DE 5AE1 # B9DF 5AE6 # B9E0 5AE9 # B9E1 5AD7 # B9E2 5AD6 # B9E3 5AD8 # B9E4 5AE3 # B9E5 5B75 # B9E6 5BDE # B9E7 5BE7 # B9E8 5BE1 # B9E9 5BE5 # B9EA 5BE6 # B9EB 5BE8 # B9EC 5BE2 # B9ED 5BE4 # B9EE 5BDF # B9EF 5C0D # B9F0 5C62 # B9F1 5D84 # B9F2 5D87 # B9F3 5E5B # B9F4 5E63 # B9F5 5E55 # B9F6 5E57 # B9F7 5E54 # B9F8 5ED3 # B9F9 5ED6 # B9FA 5F0A # B9FB 5F46 # B9FC 5F70 # B9FD 5FB9 # B9FE 6147 # BA40 613F # BA41 614B # BA42 6177 # BA43 6162 # BA44 6163 # BA45 615F # BA46 615A # BA47 6158 # BA48 6175 # BA49 622A # BA4A 6487 # BA4B 6458 # BA4C 6454 # BA4D 64A4 # BA4E 6478 # BA4F 645F # BA50 647A # BA51 6451 # BA52 6467 # BA53 6434 # BA54 646D # BA55 647B # BA56 6572 # BA57 65A1 # BA58 65D7 # BA59 65D6 # BA5A 66A2 # BA5B 66A8 # BA5C 669D # BA5D 699C # BA5E 69A8 # BA5F 6995 # BA60 69C1 # BA61 69AE # BA62 69D3 # BA63 69CB # BA64 699B # BA65 69B7 # BA66 69BB # BA67 69AB # BA68 69B4 # BA69 69D0 # BA6A 69CD # BA6B 69AD # BA6C 69CC # BA6D 69A6 # BA6E 69C3 # BA6F 69A3 # BA70 6B49 # BA71 6B4C # BA72 6C33 # BA73 6F33 # BA74 6F14 # BA75 6EFE # BA76 6F13 # BA77 6EF4 # BA78 6F29 # BA79 6F3E # BA7A 6F20 # BA7B 6F2C # BA7C 6F0F # BA7D 6F02 # BA7E 6F22 # BAA1 6EFF # BAA2 6EEF # BAA3 6F06 # BAA4 6F31 # BAA5 6F38 # BAA6 6F32 # BAA7 6F23 # BAA8 6F15 # BAA9 6F2B # BAAA 6F2F # BAAB 6F88 # BAAC 6F2A # BAAD 6EEC # BAAE 6F01 # BAAF 6EF2 # BAB0 6ECC # BAB1 6EF7 # BAB2 7194 # BAB3 7199 # BAB4 717D # BAB5 718A # BAB6 7184 # BAB7 7192 # BAB8 723E # BAB9 7292 # BABA 7296 # BABB 7344 # BABC 7350 # BABD 7464 # BABE 7463 # BABF 746A # BAC0 7470 # BAC1 746D # BAC2 7504 # BAC3 7591 # BAC4 7627 # BAC5 760D # BAC6 760B # BAC7 7609 # BAC8 7613 # BAC9 76E1 # BACA 76E3 # BACB 7784 # BACC 777D # BACD 777F # BACE 7761 # BACF 78C1 # BAD0 789F # BAD1 78A7 # BAD2 78B3 # BAD3 78A9 # BAD4 78A3 # BAD5 798E # BAD6 798F # BAD7 798D # BAD8 7A2E # BAD9 7A31 # BADA 7AAA # BADB 7AA9 # BADC 7AED # BADD 7AEF # BADE 7BA1 # BADF 7B95 # BAE0 7B8B # BAE1 7B75 # BAE2 7B97 # BAE3 7B9D # BAE4 7B94 # BAE5 7B8F # BAE6 7BB8 # BAE7 7B87 # BAE8 7B84 # BAE9 7CB9 # BAEA 7CBD # BAEB 7CBE # BAEC 7DBB # BAED 7DB0 # BAEE 7D9C # BAEF 7DBD # BAF0 7DBE # BAF1 7DA0 # BAF2 7DCA # BAF3 7DB4 # BAF4 7DB2 # BAF5 7DB1 # BAF6 7DBA # BAF7 7DA2 # BAF8 7DBF # BAF9 7DB5 # BAFA 7DB8 # BAFB 7DAD # BAFC 7DD2 # BAFD 7DC7 # BAFE 7DAC # BB40 7F70 # BB41 7FE0 # BB42 7FE1 # BB43 7FDF # BB44 805E # BB45 805A # BB46 8087 # BB47 8150 # BB48 8180 # BB49 818F # BB4A 8188 # BB4B 818A # BB4C 817F # BB4D 8182 # BB4E 81E7 # BB4F 81FA # BB50 8207 # BB51 8214 # BB52 821E # BB53 824B # BB54 84C9 # BB55 84BF # BB56 84C6 # BB57 84C4 # BB58 8499 # BB59 849E # BB5A 84B2 # BB5B 849C # BB5C 84CB # BB5D 84B8 # BB5E 84C0 # BB5F 84D3 # BB60 8490 # BB61 84BC # BB62 84D1 # BB63 84CA # BB64 873F # BB65 871C # BB66 873B # BB67 8722 # BB68 8725 # BB69 8734 # BB6A 8718 # BB6B 8755 # BB6C 8737 # BB6D 8729 # BB6E 88F3 # BB6F 8902 # BB70 88F4 # BB71 88F9 # BB72 88F8 # BB73 88FD # BB74 88E8 # BB75 891A # BB76 88EF # BB77 8AA6 # BB78 8A8C # BB79 8A9E # BB7A 8AA3 # BB7B 8A8D # BB7C 8AA1 # BB7D 8A93 # BB7E 8AA4 # BBA1 8AAA # BBA2 8AA5 # BBA3 8AA8 # BBA4 8A98 # BBA5 8A91 # BBA6 8A9A # BBA7 8AA7 # BBA8 8C6A # BBA9 8C8D # BBAA 8C8C # BBAB 8CD3 # BBAC 8CD1 # BBAD 8CD2 # BBAE 8D6B # BBAF 8D99 # BBB0 8D95 # BBB1 8DFC # BBB2 8F14 # BBB3 8F12 # BBB4 8F15 # BBB5 8F13 # BBB6 8FA3 # BBB7 9060 # BBB8 9058 # BBB9 905C # BBBA 9063 # BBBB 9059 # BBBC 905E # BBBD 9062 # BBBE 905D # BBBF 905B # BBC0 9119 # BBC1 9118 # BBC2 911E # BBC3 9175 # BBC4 9178 # BBC5 9177 # BBC6 9174 # BBC7 9278 # BBC8 9280 # BBC9 9285 # BBCA 9298 # BBCB 9296 # BBCC 927B # BBCD 9293 # BBCE 929C # BBCF 92A8 # BBD0 927C # BBD1 9291 # BBD2 95A1 # BBD3 95A8 # BBD4 95A9 # BBD5 95A3 # BBD6 95A5 # BBD7 95A4 # BBD8 9699 # BBD9 969C # BBDA 969B # BBDB 96CC # BBDC 96D2 # BBDD 9700 # BBDE 977C # BBDF 9785 # BBE0 97F6 # BBE1 9817 # BBE2 9818 # BBE3 98AF # BBE4 98B1 # BBE5 9903 # BBE6 9905 # BBE7 990C # BBE8 9909 # BBE9 99C1 # BBEA 9AAF # BBEB 9AB0 # BBEC 9AE6 # BBED 9B41 # BBEE 9B42 # BBEF 9CF4 # BBF0 9CF6 # BBF1 9CF3 # BBF2 9EBC # BBF3 9F3B # BBF4 9F4A # BBF5 5104 # BBF6 5100 # BBF7 50FB # BBF8 50F5 # BBF9 50F9 # BBFA 5102 # BBFB 5108 # BBFC 5109 # BBFD 5105 # BBFE 51DC # BC40 5287 # BC41 5288 # BC42 5289 # BC43 528D # BC44 528A # BC45 52F0 # BC46 53B2 # BC47 562E # BC48 563B # BC49 5639 # BC4A 5632 # BC4B 563F # BC4C 5634 # BC4D 5629 # BC4E 5653 # BC4F 564E # BC50 5657 # BC51 5674 # BC52 5636 # BC53 562F # BC54 5630 # BC55 5880 # BC56 589F # BC57 589E # BC58 58B3 # BC59 589C # BC5A 58AE # BC5B 58A9 # BC5C 58A6 # BC5D 596D # BC5E 5B09 # BC5F 5AFB # BC60 5B0B # BC61 5AF5 # BC62 5B0C # BC63 5B08 # BC64 5BEE # BC65 5BEC # BC66 5BE9 # BC67 5BEB # BC68 5C64 # BC69 5C65 # BC6A 5D9D # BC6B 5D94 # BC6C 5E62 # BC6D 5E5F # BC6E 5E61 # BC6F 5EE2 # BC70 5EDA # BC71 5EDF # BC72 5EDD # BC73 5EE3 # BC74 5EE0 # BC75 5F48 # BC76 5F71 # BC77 5FB7 # BC78 5FB5 # BC79 6176 # BC7A 6167 # BC7B 616E # BC7C 615D # BC7D 6155 # BC7E 6182 # BCA1 617C # BCA2 6170 # BCA3 616B # BCA4 617E # BCA5 61A7 # BCA6 6190 # BCA7 61AB # BCA8 618E # BCA9 61AC # BCAA 619A # BCAB 61A4 # BCAC 6194 # BCAD 61AE # BCAE 622E # BCAF 6469 # BCB0 646F # BCB1 6479 # BCB2 649E # BCB3 64B2 # BCB4 6488 # BCB5 6490 # BCB6 64B0 # BCB7 64A5 # BCB8 6493 # BCB9 6495 # BCBA 64A9 # BCBB 6492 # BCBC 64AE # BCBD 64AD # BCBE 64AB # BCBF 649A # BCC0 64AC # BCC1 6499 # BCC2 64A2 # BCC3 64B3 # BCC4 6575 # BCC5 6577 # BCC6 6578 # BCC7 66AE # BCC8 66AB # BCC9 66B4 # BCCA 66B1 # BCCB 6A23 # BCCC 6A1F # BCCD 69E8 # BCCE 6A01 # BCCF 6A1E # BCD0 6A19 # BCD1 69FD # BCD2 6A21 # BCD3 6A13 # BCD4 6A0A # BCD5 69F3 # BCD6 6A02 # BCD7 6A05 # BCD8 69ED # BCD9 6A11 # BCDA 6B50 # BCDB 6B4E # BCDC 6BA4 # BCDD 6BC5 # BCDE 6BC6 # BCDF 6F3F # BCE0 6F7C # BCE1 6F84 # BCE2 6F51 # BCE3 6F66 # BCE4 6F54 # BCE5 6F86 # BCE6 6F6D # BCE7 6F5B # BCE8 6F78 # BCE9 6F6E # BCEA 6F8E # BCEB 6F7A # BCEC 6F70 # BCED 6F64 # BCEE 6F97 # BCEF 6F58 # BCF0 6ED5 # BCF1 6F6F # BCF2 6F60 # BCF3 6F5F # BCF4 719F # BCF5 71AC # BCF6 71B1 # BCF7 71A8 # BCF8 7256 # BCF9 729B # BCFA 734E # BCFB 7357 # BCFC 7469 # BCFD 748B # BCFE 7483 # BD40 747E # BD41 7480 # BD42 757F # BD43 7620 # BD44 7629 # BD45 761F # BD46 7624 # BD47 7626 # BD48 7621 # BD49 7622 # BD4A 769A # BD4B 76BA # BD4C 76E4 # BD4D 778E # BD4E 7787 # BD4F 778C # BD50 7791 # BD51 778B # BD52 78CB # BD53 78C5 # BD54 78BA # BD55 78CA # BD56 78BE # BD57 78D5 # BD58 78BC # BD59 78D0 # BD5A 7A3F # BD5B 7A3C # BD5C 7A40 # BD5D 7A3D # BD5E 7A37 # BD5F 7A3B # BD60 7AAF # BD61 7AAE # BD62 7BAD # BD63 7BB1 # BD64 7BC4 # BD65 7BB4 # BD66 7BC6 # BD67 7BC7 # BD68 7BC1 # BD69 7BA0 # BD6A 7BCC # BD6B 7CCA # BD6C 7DE0 # BD6D 7DF4 # BD6E 7DEF # BD6F 7DFB # BD70 7DD8 # BD71 7DEC # BD72 7DDD # BD73 7DE8 # BD74 7DE3 # BD75 7DDA # BD76 7DDE # BD77 7DE9 # BD78 7D9E # BD79 7DD9 # BD7A 7DF2 # BD7B 7DF9 # BD7C 7F75 # BD7D 7F77 # BD7E 7FAF # BDA1 7FE9 # BDA2 8026 # BDA3 819B # BDA4 819C # BDA5 819D # BDA6 81A0 # BDA7 819A # BDA8 8198 # BDA9 8517 # BDAA 853D # BDAB 851A # BDAC 84EE # BDAD 852C # BDAE 852D # BDAF 8513 # BDB0 8511 # BDB1 8523 # BDB2 8521 # BDB3 8514 # BDB4 84EC # BDB5 8525 # BDB6 84FF # BDB7 8506 # BDB8 8782 # BDB9 8774 # BDBA 8776 # BDBB 8760 # BDBC 8766 # BDBD 8778 # BDBE 8768 # BDBF 8759 # BDC0 8757 # BDC1 874C # BDC2 8753 # BDC3 885B # BDC4 885D # BDC5 8910 # BDC6 8907 # BDC7 8912 # BDC8 8913 # BDC9 8915 # BDCA 890A # BDCB 8ABC # BDCC 8AD2 # BDCD 8AC7 # BDCE 8AC4 # BDCF 8A95 # BDD0 8ACB # BDD1 8AF8 # BDD2 8AB2 # BDD3 8AC9 # BDD4 8AC2 # BDD5 8ABF # BDD6 8AB0 # BDD7 8AD6 # BDD8 8ACD # BDD9 8AB6 # BDDA 8AB9 # BDDB 8ADB # BDDC 8C4C # BDDD 8C4E # BDDE 8C6C # BDDF 8CE0 # BDE0 8CDE # BDE1 8CE6 # BDE2 8CE4 # BDE3 8CEC # BDE4 8CED # BDE5 8CE2 # BDE6 8CE3 # BDE7 8CDC # BDE8 8CEA # BDE9 8CE1 # BDEA 8D6D # BDEB 8D9F # BDEC 8DA3 # BDED 8E2B # BDEE 8E10 # BDEF 8E1D # BDF0 8E22 # BDF1 8E0F # BDF2 8E29 # BDF3 8E1F # BDF4 8E21 # BDF5 8E1E # BDF6 8EBA # BDF7 8F1D # BDF8 8F1B # BDF9 8F1F # BDFA 8F29 # BDFB 8F26 # BDFC 8F2A # BDFD 8F1C # BDFE 8F1E # BE40 8F25 # BE41 9069 # BE42 906E # BE43 9068 # BE44 906D # BE45 9077 # BE46 9130 # BE47 912D # BE48 9127 # BE49 9131 # BE4A 9187 # BE4B 9189 # BE4C 918B # BE4D 9183 # BE4E 92C5 # BE4F 92BB # BE50 92B7 # BE51 92EA # BE52 92AC # BE53 92E4 # BE54 92C1 # BE55 92B3 # BE56 92BC # BE57 92D2 # BE58 92C7 # BE59 92F0 # BE5A 92B2 # BE5B 95AD # BE5C 95B1 # BE5D 9704 # BE5E 9706 # BE5F 9707 # BE60 9709 # BE61 9760 # BE62 978D # BE63 978B # BE64 978F # BE65 9821 # BE66 982B # BE67 981C # BE68 98B3 # BE69 990A # BE6A 9913 # BE6B 9912 # BE6C 9918 # BE6D 99DD # BE6E 99D0 # BE6F 99DF # BE70 99DB # BE71 99D1 # BE72 99D5 # BE73 99D2 # BE74 99D9 # BE75 9AB7 # BE76 9AEE # BE77 9AEF # BE78 9B27 # BE79 9B45 # BE7A 9B44 # BE7B 9B77 # BE7C 9B6F # BE7D 9D06 # BE7E 9D09 # BEA1 9D03 # BEA2 9EA9 # BEA3 9EBE # BEA4 9ECE # BEA5 58A8 # BEA6 9F52 # BEA7 5112 # BEA8 5118 # BEA9 5114 # BEAA 5110 # BEAB 5115 # BEAC 5180 # BEAD 51AA # BEAE 51DD # BEAF 5291 # BEB0 5293 # BEB1 52F3 # BEB2 5659 # BEB3 566B # BEB4 5679 # BEB5 5669 # BEB6 5664 # BEB7 5678 # BEB8 566A # BEB9 5668 # BEBA 5665 # BEBB 5671 # BEBC 566F # BEBD 566C # BEBE 5662 # BEBF 5676 # BEC0 58C1 # BEC1 58BE # BEC2 58C7 # BEC3 58C5 # BEC4 596E # BEC5 5B1D # BEC6 5B34 # BEC7 5B78 # BEC8 5BF0 # BEC9 5C0E # BECA 5F4A # BECB 61B2 # BECC 6191 # BECD 61A9 # BECE 618A # BECF 61CD # BED0 61B6 # BED1 61BE # BED2 61CA # BED3 61C8 # BED4 6230 # BED5 64C5 # BED6 64C1 # BED7 64CB # BED8 64BB # BED9 64BC # BEDA 64DA # BEDB 64C4 # BEDC 64C7 # BEDD 64C2 # BEDE 64CD # BEDF 64BF # BEE0 64D2 # BEE1 64D4 # BEE2 64BE # BEE3 6574 # BEE4 66C6 # BEE5 66C9 # BEE6 66B9 # BEE7 66C4 # BEE8 66C7 # BEE9 66B8 # BEEA 6A3D # BEEB 6A38 # BEEC 6A3A # BEED 6A59 # BEEE 6A6B # BEEF 6A58 # BEF0 6A39 # BEF1 6A44 # BEF2 6A62 # BEF3 6A61 # BEF4 6A4B # BEF5 6A47 # BEF6 6A35 # BEF7 6A5F # BEF8 6A48 # BEF9 6B59 # BEFA 6B77 # BEFB 6C05 # BEFC 6FC2 # BEFD 6FB1 # BEFE 6FA1 # BF40 6FC3 # BF41 6FA4 # BF42 6FC1 # BF43 6FA7 # BF44 6FB3 # BF45 6FC0 # BF46 6FB9 # BF47 6FB6 # BF48 6FA6 # BF49 6FA0 # BF4A 6FB4 # BF4B 71BE # BF4C 71C9 # BF4D 71D0 # BF4E 71D2 # BF4F 71C8 # BF50 71D5 # BF51 71B9 # BF52 71CE # BF53 71D9 # BF54 71DC # BF55 71C3 # BF56 71C4 # BF57 7368 # BF58 749C # BF59 74A3 # BF5A 7498 # BF5B 749F # BF5C 749E # BF5D 74E2 # BF5E 750C # BF5F 750D # BF60 7634 # BF61 7638 # BF62 763A # BF63 76E7 # BF64 76E5 # BF65 77A0 # BF66 779E # BF67 779F # BF68 77A5 # BF69 78E8 # BF6A 78DA # BF6B 78EC # BF6C 78E7 # BF6D 79A6 # BF6E 7A4D # BF6F 7A4E # BF70 7A46 # BF71 7A4C # BF72 7A4B # BF73 7ABA # BF74 7BD9 # BF75 7C11 # BF76 7BC9 # BF77 7BE4 # BF78 7BDB # BF79 7BE1 # BF7A 7BE9 # BF7B 7BE6 # BF7C 7CD5 # BF7D 7CD6 # BF7E 7E0A # BFA1 7E11 # BFA2 7E08 # BFA3 7E1B # BFA4 7E23 # BFA5 7E1E # BFA6 7E1D # BFA7 7E09 # BFA8 7E10 # BFA9 7F79 # BFAA 7FB2 # BFAB 7FF0 # BFAC 7FF1 # BFAD 7FEE # BFAE 8028 # BFAF 81B3 # BFB0 81A9 # BFB1 81A8 # BFB2 81FB # BFB3 8208 # BFB4 8258 # BFB5 8259 # BFB6 854A # BFB7 8559 # BFB8 8548 # BFB9 8568 # BFBA 8569 # BFBB 8543 # BFBC 8549 # BFBD 856D # BFBE 856A # BFBF 855E # BFC0 8783 # BFC1 879F # BFC2 879E # BFC3 87A2 # BFC4 878D # BFC5 8861 # BFC6 892A # BFC7 8932 # BFC8 8925 # BFC9 892B # BFCA 8921 # BFCB 89AA # BFCC 89A6 # BFCD 8AE6 # BFCE 8AFA # BFCF 8AEB # BFD0 8AF1 # BFD1 8B00 # BFD2 8ADC # BFD3 8AE7 # BFD4 8AEE # BFD5 8AFE # BFD6 8B01 # BFD7 8B02 # BFD8 8AF7 # BFD9 8AED # BFDA 8AF3 # BFDB 8AF6 # BFDC 8AFC # BFDD 8C6B # BFDE 8C6D # BFDF 8C93 # BFE0 8CF4 # BFE1 8E44 # BFE2 8E31 # BFE3 8E34 # BFE4 8E42 # BFE5 8E39 # BFE6 8E35 # BFE7 8F3B # BFE8 8F2F # BFE9 8F38 # BFEA 8F33 # BFEB 8FA8 # BFEC 8FA6 # BFED 9075 # BFEE 9074 # BFEF 9078 # BFF0 9072 # BFF1 907C # BFF2 907A # BFF3 9134 # BFF4 9192 # BFF5 9320 # BFF6 9336 # BFF7 92F8 # BFF8 9333 # BFF9 932F # BFFA 9322 # BFFB 92FC # BFFC 932B # BFFD 9304 # BFFE 931A # C040 9310 # C041 9326 # C042 9321 # C043 9315 # C044 932E # C045 9319 # C046 95BB # C047 96A7 # C048 96A8 # C049 96AA # C04A 96D5 # C04B 970E # C04C 9711 # C04D 9716 # C04E 970D # C04F 9713 # C050 970F # C051 975B # C052 975C # C053 9766 # C054 9798 # C055 9830 # C056 9838 # C057 983B # C058 9837 # C059 982D # C05A 9839 # C05B 9824 # C05C 9910 # C05D 9928 # C05E 991E # C05F 991B # C060 9921 # C061 991A # C062 99ED # C063 99E2 # C064 99F1 # C065 9AB8 # C066 9ABC # C067 9AFB # C068 9AED # C069 9B28 # C06A 9B91 # C06B 9D15 # C06C 9D23 # C06D 9D26 # C06E 9D28 # C06F 9D12 # C070 9D1B # C071 9ED8 # C072 9ED4 # C073 9F8D # C074 9F9C # C075 512A # C076 511F # C077 5121 # C078 5132 # C079 52F5 # C07A 568E # C07B 5680 # C07C 5690 # C07D 5685 # C07E 5687 # C0A1 568F # C0A2 58D5 # C0A3 58D3 # C0A4 58D1 # C0A5 58CE # C0A6 5B30 # C0A7 5B2A # C0A8 5B24 # C0A9 5B7A # C0AA 5C37 # C0AB 5C68 # C0AC 5DBC # C0AD 5DBA # C0AE 5DBD # C0AF 5DB8 # C0B0 5E6B # C0B1 5F4C # C0B2 5FBD # C0B3 61C9 # C0B4 61C2 # C0B5 61C7 # C0B6 61E6 # C0B7 61CB # C0B8 6232 # C0B9 6234 # C0BA 64CE # C0BB 64CA # C0BC 64D8 # C0BD 64E0 # C0BE 64F0 # C0BF 64E6 # C0C0 64EC # C0C1 64F1 # C0C2 64E2 # C0C3 64ED # C0C4 6582 # C0C5 6583 # C0C6 66D9 # C0C7 66D6 # C0C8 6A80 # C0C9 6A94 # C0CA 6A84 # C0CB 6AA2 # C0CC 6A9C # C0CD 6ADB # C0CE 6AA3 # C0CF 6A7E # C0D0 6A97 # C0D1 6A90 # C0D2 6AA0 # C0D3 6B5C # C0D4 6BAE # C0D5 6BDA # C0D6 6C08 # C0D7 6FD8 # C0D8 6FF1 # C0D9 6FDF # C0DA 6FE0 # C0DB 6FDB # C0DC 6FE4 # C0DD 6FEB # C0DE 6FEF # C0DF 6F80 # C0E0 6FEC # C0E1 6FE1 # C0E2 6FE9 # C0E3 6FD5 # C0E4 6FEE # C0E5 6FF0 # C0E6 71E7 # C0E7 71DF # C0E8 71EE # C0E9 71E6 # C0EA 71E5 # C0EB 71ED # C0EC 71EC # C0ED 71F4 # C0EE 71E0 # C0EF 7235 # C0F0 7246 # C0F1 7370 # C0F2 7372 # C0F3 74A9 # C0F4 74B0 # C0F5 74A6 # C0F6 74A8 # C0F7 7646 # C0F8 7642 # C0F9 764C # C0FA 76EA # C0FB 77B3 # C0FC 77AA # C0FD 77B0 # C0FE 77AC # C140 77A7 # C141 77AD # C142 77EF # C143 78F7 # C144 78FA # C145 78F4 # C146 78EF # C147 7901 # C148 79A7 # C149 79AA # C14A 7A57 # C14B 7ABF # C14C 7C07 # C14D 7C0D # C14E 7BFE # C14F 7BF7 # C150 7C0C # C151 7BE0 # C152 7CE0 # C153 7CDC # C154 7CDE # C155 7CE2 # C156 7CDF # C157 7CD9 # C158 7CDD # C159 7E2E # C15A 7E3E # C15B 7E46 # C15C 7E37 # C15D 7E32 # C15E 7E43 # C15F 7E2B # C160 7E3D # C161 7E31 # C162 7E45 # C163 7E41 # C164 7E34 # C165 7E39 # C166 7E48 # C167 7E35 # C168 7E3F # C169 7E2F # C16A 7F44 # C16B 7FF3 # C16C 7FFC # C16D 8071 # C16E 8072 # C16F 8070 # C170 806F # C171 8073 # C172 81C6 # C173 81C3 # C174 81BA # C175 81C2 # C176 81C0 # C177 81BF # C178 81BD # C179 81C9 # C17A 81BE # C17B 81E8 # C17C 8209 # C17D 8271 # C17E 85AA # C1A1 8584 # C1A2 857E # C1A3 859C # C1A4 8591 # C1A5 8594 # C1A6 85AF # C1A7 859B # C1A8 8587 # C1A9 85A8 # C1AA 858A # C1AB 8667 # C1AC 87C0 # C1AD 87D1 # C1AE 87B3 # C1AF 87D2 # C1B0 87C6 # C1B1 87AB # C1B2 87BB # C1B3 87BA # C1B4 87C8 # C1B5 87CB # C1B6 893B # C1B7 8936 # C1B8 8944 # C1B9 8938 # C1BA 893D # C1BB 89AC # C1BC 8B0E # C1BD 8B17 # C1BE 8B19 # C1BF 8B1B # C1C0 8B0A # C1C1 8B20 # C1C2 8B1D # C1C3 8B04 # C1C4 8B10 # C1C5 8C41 # C1C6 8C3F # C1C7 8C73 # C1C8 8CFA # C1C9 8CFD # C1CA 8CFC # C1CB 8CF8 # C1CC 8CFB # C1CD 8DA8 # C1CE 8E49 # C1CF 8E4B # C1D0 8E48 # C1D1 8E4A # C1D2 8F44 # C1D3 8F3E # C1D4 8F42 # C1D5 8F45 # C1D6 8F3F # C1D7 907F # C1D8 907D # C1D9 9084 # C1DA 9081 # C1DB 9082 # C1DC 9080 # C1DD 9139 # C1DE 91A3 # C1DF 919E # C1E0 919C # C1E1 934D # C1E2 9382 # C1E3 9328 # C1E4 9375 # C1E5 934A # C1E6 9365 # C1E7 934B # C1E8 9318 # C1E9 937E # C1EA 936C # C1EB 935B # C1EC 9370 # C1ED 935A # C1EE 9354 # C1EF 95CA # C1F0 95CB # C1F1 95CC # C1F2 95C8 # C1F3 95C6 # C1F4 96B1 # C1F5 96B8 # C1F6 96D6 # C1F7 971C # C1F8 971E # C1F9 97A0 # C1FA 97D3 # C1FB 9846 # C1FC 98B6 # C1FD 9935 # C1FE 9A01 # C240 99FF # C241 9BAE # C242 9BAB # C243 9BAA # C244 9BAD # C245 9D3B # C246 9D3F # C247 9E8B # C248 9ECF # C249 9EDE # C24A 9EDC # C24B 9EDD # C24C 9EDB # C24D 9F3E # C24E 9F4B # C24F 53E2 # C250 5695 # C251 56AE # C252 58D9 # C253 58D8 # C254 5B38 # C255 5F5D # C256 61E3 # C257 6233 # C258 64F4 # C259 64F2 # C25A 64FE # C25B 6506 # C25C 64FA # C25D 64FB # C25E 64F7 # C25F 65B7 # C260 66DC # C261 6726 # C262 6AB3 # C263 6AAC # C264 6AC3 # C265 6ABB # C266 6AB8 # C267 6AC2 # C268 6AAE # C269 6AAF # C26A 6B5F # C26B 6B78 # C26C 6BAF # C26D 7009 # C26E 700B # C26F 6FFE # C270 7006 # C271 6FFA # C272 7011 # C273 700F # C274 71FB # C275 71FC # C276 71FE # C277 71F8 # C278 7377 # C279 7375 # C27A 74A7 # C27B 74BF # C27C 7515 # C27D 7656 # C27E 7658 # C2A1 7652 # C2A2 77BD # C2A3 77BF # C2A4 77BB # C2A5 77BC # C2A6 790E # C2A7 79AE # C2A8 7A61 # C2A9 7A62 # C2AA 7A60 # C2AB 7AC4 # C2AC 7AC5 # C2AD 7C2B # C2AE 7C27 # C2AF 7C2A # C2B0 7C1E # C2B1 7C23 # C2B2 7C21 # C2B3 7CE7 # C2B4 7E54 # C2B5 7E55 # C2B6 7E5E # C2B7 7E5A # C2B8 7E61 # C2B9 7E52 # C2BA 7E59 # C2BB 7F48 # C2BC 7FF9 # C2BD 7FFB # C2BE 8077 # C2BF 8076 # C2C0 81CD # C2C1 81CF # C2C2 820A # C2C3 85CF # C2C4 85A9 # C2C5 85CD # C2C6 85D0 # C2C7 85C9 # C2C8 85B0 # C2C9 85BA # C2CA 85B9 # C2CB 85A6 # C2CC 87EF # C2CD 87EC # C2CE 87F2 # C2CF 87E0 # C2D0 8986 # C2D1 89B2 # C2D2 89F4 # C2D3 8B28 # C2D4 8B39 # C2D5 8B2C # C2D6 8B2B # C2D7 8C50 # C2D8 8D05 # C2D9 8E59 # C2DA 8E63 # C2DB 8E66 # C2DC 8E64 # C2DD 8E5F # C2DE 8E55 # C2DF 8EC0 # C2E0 8F49 # C2E1 8F4D # C2E2 9087 # C2E3 9083 # C2E4 9088 # C2E5 91AB # C2E6 91AC # C2E7 91D0 # C2E8 9394 # C2E9 938A # C2EA 9396 # C2EB 93A2 # C2EC 93B3 # C2ED 93AE # C2EE 93AC # C2EF 93B0 # C2F0 9398 # C2F1 939A # C2F2 9397 # C2F3 95D4 # C2F4 95D6 # C2F5 95D0 # C2F6 95D5 # C2F7 96E2 # C2F8 96DC # C2F9 96D9 # C2FA 96DB # C2FB 96DE # C2FC 9724 # C2FD 97A3 # C2FE 97A6 # C340 97AD # C341 97F9 # C342 984D # C343 984F # C344 984C # C345 984E # C346 9853 # C347 98BA # C348 993E # C349 993F # C34A 993D # C34B 992E # C34C 99A5 # C34D 9A0E # C34E 9AC1 # C34F 9B03 # C350 9B06 # C351 9B4F # C352 9B4E # C353 9B4D # C354 9BCA # C355 9BC9 # C356 9BFD # C357 9BC8 # C358 9BC0 # C359 9D51 # C35A 9D5D # C35B 9D60 # C35C 9EE0 # C35D 9F15 # C35E 9F2C # C35F 5133 # C360 56A5 # C361 58DE # C362 58DF # C363 58E2 # C364 5BF5 # C365 9F90 # C366 5EEC # C367 61F2 # C368 61F7 # C369 61F6 # C36A 61F5 # C36B 6500 # C36C 650F # C36D 66E0 # C36E 66DD # C36F 6AE5 # C370 6ADD # C371 6ADA # C372 6AD3 # C373 701B # C374 701F # C375 7028 # C376 701A # C377 701D # C378 7015 # C379 7018 # C37A 7206 # C37B 720D # C37C 7258 # C37D 72A2 # C37E 7378 # C3A1 737A # C3A2 74BD # C3A3 74CA # C3A4 74E3 # C3A5 7587 # C3A6 7586 # C3A7 765F # C3A8 7661 # C3A9 77C7 # C3AA 7919 # C3AB 79B1 # C3AC 7A6B # C3AD 7A69 # C3AE 7C3E # C3AF 7C3F # C3B0 7C38 # C3B1 7C3D # C3B2 7C37 # C3B3 7C40 # C3B4 7E6B # C3B5 7E6D # C3B6 7E79 # C3B7 7E69 # C3B8 7E6A # C3B9 7F85 # C3BA 7E73 # C3BB 7FB6 # C3BC 7FB9 # C3BD 7FB8 # C3BE 81D8 # C3BF 85E9 # C3C0 85DD # C3C1 85EA # C3C2 85D5 # C3C3 85E4 # C3C4 85E5 # C3C5 85F7 # C3C6 87FB # C3C7 8805 # C3C8 880D # C3C9 87F9 # C3CA 87FE # C3CB 8960 # C3CC 895F # C3CD 8956 # C3CE 895E # C3CF 8B41 # C3D0 8B5C # C3D1 8B58 # C3D2 8B49 # C3D3 8B5A # C3D4 8B4E # C3D5 8B4F # C3D6 8B46 # C3D7 8B59 # C3D8 8D08 # C3D9 8D0A # C3DA 8E7C # C3DB 8E72 # C3DC 8E87 # C3DD 8E76 # C3DE 8E6C # C3DF 8E7A # C3E0 8E74 # C3E1 8F54 # C3E2 8F4E # C3E3 8FAD # C3E4 908A # C3E5 908B # C3E6 91B1 # C3E7 91AE # C3E8 93E1 # C3E9 93D1 # C3EA 93DF # C3EB 93C3 # C3EC 93C8 # C3ED 93DC # C3EE 93DD # C3EF 93D6 # C3F0 93E2 # C3F1 93CD # C3F2 93D8 # C3F3 93E4 # C3F4 93D7 # C3F5 93E8 # C3F6 95DC # C3F7 96B4 # C3F8 96E3 # C3F9 972A # C3FA 9727 # C3FB 9761 # C3FC 97DC # C3FD 97FB # C3FE 985E # C440 9858 # C441 985B # C442 98BC # C443 9945 # C444 9949 # C445 9A16 # C446 9A19 # C447 9B0D # C448 9BE8 # C449 9BE7 # C44A 9BD6 # C44B 9BDB # C44C 9D89 # C44D 9D61 # C44E 9D72 # C44F 9D6A # C450 9D6C # C451 9E92 # C452 9E97 # C453 9E93 # C454 9EB4 # C455 52F8 # C456 56A8 # C457 56B7 # C458 56B6 # C459 56B4 # C45A 56BC # C45B 58E4 # C45C 5B40 # C45D 5B43 # C45E 5B7D # C45F 5BF6 # C460 5DC9 # C461 61F8 # C462 61FA # C463 6518 # C464 6514 # C465 6519 # C466 66E6 # C467 6727 # C468 6AEC # C469 703E # C46A 7030 # C46B 7032 # C46C 7210 # C46D 737B # C46E 74CF # C46F 7662 # C470 7665 # C471 7926 # C472 792A # C473 792C # C474 792B # C475 7AC7 # C476 7AF6 # C477 7C4C # C478 7C43 # C479 7C4D # C47A 7CEF # C47B 7CF0 # C47C 8FAE # C47D 7E7D # C47E 7E7C # C4A1 7E82 # C4A2 7F4C # C4A3 8000 # C4A4 81DA # C4A5 8266 # C4A6 85FB # C4A7 85F9 # C4A8 8611 # C4A9 85FA # C4AA 8606 # C4AB 860B # C4AC 8607 # C4AD 860A # C4AE 8814 # C4AF 8815 # C4B0 8964 # C4B1 89BA # C4B2 89F8 # C4B3 8B70 # C4B4 8B6C # C4B5 8B66 # C4B6 8B6F # C4B7 8B5F # C4B8 8B6B # C4B9 8D0F # C4BA 8D0D # C4BB 8E89 # C4BC 8E81 # C4BD 8E85 # C4BE 8E82 # C4BF 91B4 # C4C0 91CB # C4C1 9418 # C4C2 9403 # C4C3 93FD # C4C4 95E1 # C4C5 9730 # C4C6 98C4 # C4C7 9952 # C4C8 9951 # C4C9 99A8 # C4CA 9A2B # C4CB 9A30 # C4CC 9A37 # C4CD 9A35 # C4CE 9C13 # C4CF 9C0D # C4D0 9E79 # C4D1 9EB5 # C4D2 9EE8 # C4D3 9F2F # C4D4 9F5F # C4D5 9F63 # C4D6 9F61 # C4D7 5137 # C4D8 5138 # C4D9 56C1 # C4DA 56C0 # C4DB 56C2 # C4DC 5914 # C4DD 5C6C # C4DE 5DCD # C4DF 61FC # C4E0 61FE # C4E1 651D # C4E2 651C # C4E3 6595 # C4E4 66E9 # C4E5 6AFB # C4E6 6B04 # C4E7 6AFA # C4E8 6BB2 # C4E9 704C # C4EA 721B # C4EB 72A7 # C4EC 74D6 # C4ED 74D4 # C4EE 7669 # C4EF 77D3 # C4F0 7C50 # C4F1 7E8F # C4F2 7E8C # C4F3 7FBC # C4F4 8617 # C4F5 862D # C4F6 861A # C4F7 8823 # C4F8 8822 # C4F9 8821 # C4FA 881F # C4FB 896A # C4FC 896C # C4FD 89BD # C4FE 8B74 # C540 8B77 # C541 8B7D # C542 8D13 # C543 8E8A # C544 8E8D # C545 8E8B # C546 8F5F # C547 8FAF # C548 91BA # C549 942E # C54A 9433 # C54B 9435 # C54C 943A # C54D 9438 # C54E 9432 # C54F 942B # C550 95E2 # C551 9738 # C552 9739 # C553 9732 # C554 97FF # C555 9867 # C556 9865 # C557 9957 # C558 9A45 # C559 9A43 # C55A 9A40 # C55B 9A3E # C55C 9ACF # C55D 9B54 # C55E 9B51 # C55F 9C2D # C560 9C25 # C561 9DAF # C562 9DB4 # C563 9DC2 # C564 9DB8 # C565 9E9D # C566 9EEF # C567 9F19 # C568 9F5C # C569 9F66 # C56A 9F67 # C56B 513C # C56C 513B # C56D 56C8 # C56E 56CA # C56F 56C9 # C570 5B7F # C571 5DD4 # C572 5DD2 # C573 5F4E # C574 61FF # C575 6524 # C576 6B0A # C577 6B61 # C578 7051 # C579 7058 # C57A 7380 # C57B 74E4 # C57C 758A # C57D 766E # C57E 766C # C5A1 79B3 # C5A2 7C60 # C5A3 7C5F # C5A4 807E # C5A5 807D # C5A6 81DF # C5A7 8972 # C5A8 896F # C5A9 89FC # C5AA 8B80 # C5AB 8D16 # C5AC 8D17 # C5AD 8E91 # C5AE 8E93 # C5AF 8F61 # C5B0 9148 # C5B1 9444 # C5B2 9451 # C5B3 9452 # C5B4 973D # C5B5 973E # C5B6 97C3 # C5B7 97C1 # C5B8 986B # C5B9 9955 # C5BA 9A55 # C5BB 9A4D # C5BC 9AD2 # C5BD 9B1A # C5BE 9C49 # C5BF 9C31 # C5C0 9C3E # C5C1 9C3B # C5C2 9DD3 # C5C3 9DD7 # C5C4 9F34 # C5C5 9F6C # C5C6 9F6A # C5C7 9F94 # C5C8 56CC # C5C9 5DD6 # C5CA 6200 # C5CB 6523 # C5CC 652B # C5CD 652A # C5CE 66EC # C5CF 6B10 # C5D0 74DA # C5D1 7ACA # C5D2 7C64 # C5D3 7C63 # C5D4 7C65 # C5D5 7E93 # C5D6 7E96 # C5D7 7E94 # C5D8 81E2 # C5D9 8638 # C5DA 863F # C5DB 8831 # C5DC 8B8A # C5DD 9090 # C5DE 908F # C5DF 9463 # C5E0 9460 # C5E1 9464 # C5E2 9768 # C5E3 986F # C5E4 995C # C5E5 9A5A # C5E6 9A5B # C5E7 9A57 # C5E8 9AD3 # C5E9 9AD4 # C5EA 9AD1 # C5EB 9C54 # C5EC 9C57 # C5ED 9C56 # C5EE 9DE5 # C5EF 9E9F # C5F0 9EF4 # C5F1 56D1 # C5F2 58E9 # C5F3 652C # C5F4 705E # C5F5 7671 # C5F6 7672 # C5F7 77D7 # C5F8 7F50 # C5F9 7F88 # C5FA 8836 # C5FB 8839 # C5FC 8862 # C5FD 8B93 # C5FE 8B92 # C640 8B96 # C641 8277 # C642 8D1B # C643 91C0 # C644 946A # C645 9742 # C646 9748 # C647 9744 # C648 97C6 # C649 9870 # C64A 9A5F # C64B 9B22 # C64C 9B58 # C64D 9C5F # C64E 9DF9 # C64F 9DFA # C650 9E7C # C651 9E7D # C652 9F07 # C653 9F77 # C654 9F72 # C655 5EF3 # C656 6B16 # C657 7063 # C658 7C6C # C659 7C6E # C65A 883B # C65B 89C0 # C65C 8EA1 # C65D 91C1 # C65E 9472 # C65F 9470 # C660 9871 # C661 995E # C662 9AD6 # C663 9B23 # C664 9ECC # C665 7064 # C666 77DA # C667 8B9A # C668 9477 # C669 97C9 # C66A 9A62 # C66B 9A65 # C66C 7E9C # C66D 8B9C # C66E 8EAA # C66F 91C5 # C670 947D # C671 947E # C672 947C # C673 9C77 # C674 9C78 # C675 9EF7 # C676 8C54 # C677 947F # C678 9E1A # C679 7228 # C67A 9A6A # C67B 9B31 # C67C 9E1B # C67D 9E1E # C67E 7C72 # C6A1 30FE # KATAKANA VOICED ITERATION MARK C6A2 309D # HIRAGANA ITERATION MARK C6A3 309E # HIRAGANA VOICED ITERATION MARK C6A4 3005 # IDEOGRAPHIC ITERATION MARK C6A5 3041 # HIRAGANA LETTER SMALL A C6A6 3042 # HIRAGANA LETTER A C6A7 3043 # HIRAGANA LETTER SMALL I C6A8 3044 # HIRAGANA LETTER I C6A9 3045 # HIRAGANA LETTER SMALL U C6AA 3046 # HIRAGANA LETTER U C6AB 3047 # HIRAGANA LETTER SMALL E C6AC 3048 # HIRAGANA LETTER E C6AD 3049 # HIRAGANA LETTER SMALL O C6AE 304A # HIRAGANA LETTER O C6AF 304B # HIRAGANA LETTER KA C6B0 304C # HIRAGANA LETTER GA C6B1 304D # HIRAGANA LETTER KI C6B2 304E # HIRAGANA LETTER GI C6B3 304F # HIRAGANA LETTER KU C6B4 3050 # HIRAGANA LETTER GU C6B5 3051 # HIRAGANA LETTER KE C6B6 3052 # HIRAGANA LETTER GE C6B7 3053 # HIRAGANA LETTER KO C6B8 3054 # HIRAGANA LETTER GO C6B9 3055 # HIRAGANA LETTER SA C6BA 3056 # HIRAGANA LETTER ZA C6BB 3057 # HIRAGANA LETTER SI C6BC 3058 # HIRAGANA LETTER ZI C6BD 3059 # HIRAGANA LETTER SU C6BE 305A # HIRAGANA LETTER ZU C6BF 305B # HIRAGANA LETTER SE C6C0 305C # HIRAGANA LETTER ZE C6C1 305D # HIRAGANA LETTER SO C6C2 305E # HIRAGANA LETTER ZO C6C3 305F # HIRAGANA LETTER TA C6C4 3060 # HIRAGANA LETTER DA C6C5 3061 # HIRAGANA LETTER TI C6C6 3062 # HIRAGANA LETTER DI C6C7 3063 # HIRAGANA LETTER SMALL TU C6C8 3064 # HIRAGANA LETTER TU C6C9 3065 # HIRAGANA LETTER DU C6CA 3066 # HIRAGANA LETTER TE C6CB 3067 # HIRAGANA LETTER DE C6CC 3068 # HIRAGANA LETTER TO C6CD 3069 # HIRAGANA LETTER DO C6CE 306A # HIRAGANA LETTER NA C6CF 306B # HIRAGANA LETTER NI C6D0 306C # HIRAGANA LETTER NU C6D1 306D # HIRAGANA LETTER NE C6D2 306E # HIRAGANA LETTER NO C6D3 306F # HIRAGANA LETTER HA C6D4 3070 # HIRAGANA LETTER BA C6D5 3071 # HIRAGANA LETTER PA C6D6 3072 # HIRAGANA LETTER HI C6D7 3073 # HIRAGANA LETTER BI C6D8 3074 # HIRAGANA LETTER PI C6D9 3075 # HIRAGANA LETTER HU C6DA 3076 # HIRAGANA LETTER BU C6DB 3077 # HIRAGANA LETTER PU C6DC 3078 # HIRAGANA LETTER HE C6DD 3079 # HIRAGANA LETTER BE C6DE 307A # HIRAGANA LETTER PE C6DF 307B # HIRAGANA LETTER HO C6E0 307C # HIRAGANA LETTER BO C6E1 307D # HIRAGANA LETTER PO C6E2 307E # HIRAGANA LETTER MA C6E3 307F # HIRAGANA LETTER MI C6E4 3080 # HIRAGANA LETTER MU C6E5 3081 # HIRAGANA LETTER ME C6E6 3082 # HIRAGANA LETTER MO C6E7 3083 # HIRAGANA LETTER SMALL YA C6E8 3084 # HIRAGANA LETTER YA C6E9 3085 # HIRAGANA LETTER SMALL YU C6EA 3086 # HIRAGANA LETTER YU C6EB 3087 # HIRAGANA LETTER SMALL YO C6EC 3088 # HIRAGANA LETTER YO C6ED 3089 # HIRAGANA LETTER RA C6EE 308A # HIRAGANA LETTER RI C6EF 308B # HIRAGANA LETTER RU C6F0 308C # HIRAGANA LETTER RE C6F1 308D # HIRAGANA LETTER RO C6F2 308E # HIRAGANA LETTER SMALL WA C6F3 308F # HIRAGANA LETTER WA C6F4 3090 # HIRAGANA LETTER WI C6F5 3091 # HIRAGANA LETTER WE C6F6 3092 # HIRAGANA LETTER WO C6F7 3093 # HIRAGANA LETTER N C6F8 30A1 # KATAKANA LETTER SMALL A C6F9 30A2 # KATAKANA LETTER A C6FA 30A3 # KATAKANA LETTER SMALL I C6FB 30A4 # KATAKANA LETTER I C6FC 30A5 # KATAKANA LETTER SMALL U C6FD 30A6 # KATAKANA LETTER U C6FE 30A7 # KATAKANA LETTER SMALL E C740 30A8 # KATAKANA LETTER E C741 30A9 # KATAKANA LETTER SMALL O C742 30AA # KATAKANA LETTER O C743 30AB # KATAKANA LETTER KA C744 30AC # KATAKANA LETTER GA C745 30AD # KATAKANA LETTER KI C746 30AE # KATAKANA LETTER GI C747 30AF # KATAKANA LETTER KU C748 30B0 # KATAKANA LETTER GU C749 30B1 # KATAKANA LETTER KE C74A 30B2 # KATAKANA LETTER GE C74B 30B3 # KATAKANA LETTER KO C74C 30B4 # KATAKANA LETTER GO C74D 30B5 # KATAKANA LETTER SA C74E 30B6 # KATAKANA LETTER ZA C74F 30B7 # KATAKANA LETTER SI C750 30B8 # KATAKANA LETTER ZI C751 30B9 # KATAKANA LETTER SU C752 30BA # KATAKANA LETTER ZU C753 30BB # KATAKANA LETTER SE C754 30BC # KATAKANA LETTER ZE C755 30BD # KATAKANA LETTER SO C756 30BE # KATAKANA LETTER ZO C757 30BF # KATAKANA LETTER TA C758 30C0 # KATAKANA LETTER DA C759 30C1 # KATAKANA LETTER TI C75A 30C2 # KATAKANA LETTER DI C75B 30C3 # KATAKANA LETTER SMALL TU C75C 30C4 # KATAKANA LETTER TU C75D 30C5 # KATAKANA LETTER DU C75E 30C6 # KATAKANA LETTER TE C75F 30C7 # KATAKANA LETTER DE C760 30C8 # KATAKANA LETTER TO C761 30C9 # KATAKANA LETTER DO C762 30CA # KATAKANA LETTER NA C763 30CB # KATAKANA LETTER NI C764 30CC # KATAKANA LETTER NU C765 30CD # KATAKANA LETTER NE C766 30CE # KATAKANA LETTER NO C767 30CF # KATAKANA LETTER HA C768 30D0 # KATAKANA LETTER BA C769 30D1 # KATAKANA LETTER PA C76A 30D2 # KATAKANA LETTER HI C76B 30D3 # KATAKANA LETTER BI C76C 30D4 # KATAKANA LETTER PI C76D 30D5 # KATAKANA LETTER HU C76E 30D6 # KATAKANA LETTER BU C76F 30D7 # KATAKANA LETTER PU C770 30D8 # KATAKANA LETTER HE C771 30D9 # KATAKANA LETTER BE C772 30DA # KATAKANA LETTER PE C773 30DB # KATAKANA LETTER HO C774 30DC # KATAKANA LETTER BO C775 30DD # KATAKANA LETTER PO C776 30DE # KATAKANA LETTER MA C777 30DF # KATAKANA LETTER MI C778 30E0 # KATAKANA LETTER MU C779 30E1 # KATAKANA LETTER ME C77A 30E2 # KATAKANA LETTER MO C77B 30E3 # KATAKANA LETTER SMALL YA C77C 30E4 # KATAKANA LETTER YA C77D 30E5 # KATAKANA LETTER SMALL YU C77E 30E6 # KATAKANA LETTER YU C7A1 30E7 # KATAKANA LETTER SMALL YO C7A2 30E8 # KATAKANA LETTER YO C7A3 30E9 # KATAKANA LETTER RA C7A4 30EA # KATAKANA LETTER RI C7A5 30EB # KATAKANA LETTER RU C7A6 30EC # KATAKANA LETTER RE C7A7 30ED # KATAKANA LETTER RO C7A8 30EE # KATAKANA LETTER SMALL WA C7A9 30EF # KATAKANA LETTER WA C7AA 30F0 # KATAKANA LETTER WI C7AB 30F1 # KATAKANA LETTER WE C7AC 30F2 # KATAKANA LETTER WO C7AD 30F3 # KATAKANA LETTER N C7AE 30F4 # KATAKANA LETTER VU C7AF 30F5 # KATAKANA LETTER SMALL KA C7B0 30F6 # KATAKANA LETTER SMALL KE C7B1 0414 # CYRILLIC CAPITAL LETTER DE C7B2 0415 # CYRILLIC CAPITAL LETTER IE C7B3 0401 # CYRILLIC CAPITAL LETTER IO C7B4 0416 # CYRILLIC CAPITAL LETTER ZHE C7B5 0417 # CYRILLIC CAPITAL LETTER ZE C7B6 0418 # CYRILLIC CAPITAL LETTER I C7B7 0419 # CYRILLIC CAPITAL LETTER SHORT I C7B8 041A # CYRILLIC CAPITAL LETTER KA C7B9 041B # CYRILLIC CAPITAL LETTER EL C7BA 041C # CYRILLIC CAPITAL LETTER EM C7BB 0423 # CYRILLIC CAPITAL LETTER U C7BC 0424 # CYRILLIC CAPITAL LETTER EF C7BD 0425 # CYRILLIC CAPITAL LETTER HA C7BE 0426 # CYRILLIC CAPITAL LETTER TSE C7BF 0427 # CYRILLIC CAPITAL LETTER CHE C7C0 0428 # CYRILLIC CAPITAL LETTER SHA C7C1 0429 # CYRILLIC CAPITAL LETTER SHCHA C7C2 042A # CYRILLIC CAPITAL LETTER HARD SIGN C7C3 042B # CYRILLIC CAPITAL LETTER YERU C7C4 042C # CYRILLIC CAPITAL LETTER SOFT SIGN C7C5 042D # CYRILLIC CAPITAL LETTER E C7C6 042E # CYRILLIC CAPITAL LETTER YU C7C7 042F # CYRILLIC CAPITAL LETTER YA C7C8 0430 # CYRILLIC SMALL LETTER A C7C9 0431 # CYRILLIC SMALL LETTER BE C7CA 0432 # CYRILLIC SMALL LETTER VE C7CB 0433 # CYRILLIC SMALL LETTER GHE C7CC 0434 # CYRILLIC SMALL LETTER DE C7CD 0435 # CYRILLIC SMALL LETTER IE C7CE 0451 # CYRILLIC SMALL LETTER IO C7CF 0436 # CYRILLIC SMALL LETTER ZHE C7D0 0437 # CYRILLIC SMALL LETTER ZE C7D1 0438 # CYRILLIC SMALL LETTER I C7D2 0439 # CYRILLIC SMALL LETTER SHORT I C7D3 043A # CYRILLIC SMALL LETTER KA C7D4 043B # CYRILLIC SMALL LETTER EL C7D5 043C # CYRILLIC SMALL LETTER EM C7D6 043D # CYRILLIC SMALL LETTER EN C7D7 043E # CYRILLIC SMALL LETTER O C7D8 043F # CYRILLIC SMALL LETTER PE C7D9 0440 # CYRILLIC SMALL LETTER ER C7DA 0441 # CYRILLIC SMALL LETTER ES C7DB 0442 # CYRILLIC SMALL LETTER TE C7DC 0443 # CYRILLIC SMALL LETTER U C7DD 0444 # CYRILLIC SMALL LETTER EF C7DE 0445 # CYRILLIC SMALL LETTER HA C7DF 0446 # CYRILLIC SMALL LETTER TSE C7E0 0447 # CYRILLIC SMALL LETTER CHE C7E1 0448 # CYRILLIC SMALL LETTER SHA C7E2 0449 # CYRILLIC SMALL LETTER SHCHA C7E3 044A # CYRILLIC SMALL LETTER HARD SIGN C7E4 044B # CYRILLIC SMALL LETTER YERU C7E5 044C # CYRILLIC SMALL LETTER SOFT SIGN C7E6 044D # CYRILLIC SMALL LETTER E C7E7 044E # CYRILLIC SMALL LETTER YU C7E8 044F # CYRILLIC SMALL LETTER YA C7E9 2460 # CIRCLED DIGIT ONE C7EA 2461 # CIRCLED DIGIT TWO C7EB 2462 # CIRCLED DIGIT THREE C7EC 2463 # CIRCLED DIGIT FOUR C7ED 2464 # CIRCLED DIGIT FIVE C7EE 2465 # CIRCLED DIGIT SIX C7EF 2466 # CIRCLED DIGIT SEVEN C7F0 2467 # CIRCLED DIGIT EIGHT C7F1 2468 # CIRCLED DIGIT NINE C7F2 2469 # CIRCLED NUMBER TEN C7F3 2474 # PARENTHESIZED DIGIT ONE C7F4 2475 # PARENTHESIZED DIGIT TWO C7F5 2476 # PARENTHESIZED DIGIT THREE C7F6 2477 # PARENTHESIZED DIGIT FOUR C7F7 2478 # PARENTHESIZED DIGIT FIVE C7F8 2479 # PARENTHESIZED DIGIT SIX C7F9 247A # PARENTHESIZED DIGIT SEVEN C7FA 247B # PARENTHESIZED DIGIT EIGHT C7FB 247C # PARENTHESIZED DIGIT NINE C7FC 247D # PARENTHESIZED NUMBER TEN C940 4E42 # C941 4E5C # C942 51F5 # C943 531A # C944 5382 # C945 4E07 # C946 4E0C # C947 4E47 # C948 4E8D # C949 56D7 # C94A FA0C # CJK COMPATIBILITY IDEOGRAPH-FA0C C94B 5C6E # C94C 5F73 # C94D 4E0F # C94E 5187 # C94F 4E0E # C950 4E2E # C951 4E93 # C952 4EC2 # C953 4EC9 # C954 4EC8 # C955 5198 # C956 52FC # C957 536C # C958 53B9 # C959 5720 # C95A 5903 # C95B 592C # C95C 5C10 # C95D 5DFF # C95E 65E1 # C95F 6BB3 # C960 6BCC # C961 6C14 # C962 723F # C963 4E31 # C964 4E3C # C965 4EE8 # C966 4EDC # C967 4EE9 # C968 4EE1 # C969 4EDD # C96A 4EDA # C96B 520C # C96C 531C # C96D 534C # C96E 5722 # C96F 5723 # C970 5917 # C971 592F # C972 5B81 # C973 5B84 # C974 5C12 # C975 5C3B # C976 5C74 # C977 5C73 # C978 5E04 # C979 5E80 # C97A 5E82 # C97B 5FC9 # C97C 6209 # C97D 6250 # C97E 6C15 # C9A1 6C36 # C9A2 6C43 # C9A3 6C3F # C9A4 6C3B # C9A5 72AE # C9A6 72B0 # C9A7 738A # C9A8 79B8 # C9A9 808A # C9AA 961E # C9AB 4F0E # C9AC 4F18 # C9AD 4F2C # C9AE 4EF5 # C9AF 4F14 # C9B0 4EF1 # C9B1 4F00 # C9B2 4EF7 # C9B3 4F08 # C9B4 4F1D # C9B5 4F02 # C9B6 4F05 # C9B7 4F22 # C9B8 4F13 # C9B9 4F04 # C9BA 4EF4 # C9BB 4F12 # C9BC 51B1 # C9BD 5213 # C9BE 5209 # C9BF 5210 # C9C0 52A6 # C9C1 5322 # C9C2 531F # C9C3 534D # C9C4 538A # C9C5 5407 # C9C6 56E1 # C9C7 56DF # C9C8 572E # C9C9 572A # C9CA 5734 # C9CB 593C # C9CC 5980 # C9CD 597C # C9CE 5985 # C9CF 597B # C9D0 597E # C9D1 5977 # C9D2 597F # C9D3 5B56 # C9D4 5C15 # C9D5 5C25 # C9D6 5C7C # C9D7 5C7A # C9D8 5C7B # C9D9 5C7E # C9DA 5DDF # C9DB 5E75 # C9DC 5E84 # C9DD 5F02 # C9DE 5F1A # C9DF 5F74 # C9E0 5FD5 # C9E1 5FD4 # C9E2 5FCF # C9E3 625C # C9E4 625E # C9E5 6264 # C9E6 6261 # C9E7 6266 # C9E8 6262 # C9E9 6259 # C9EA 6260 # C9EB 625A # C9EC 6265 # C9ED 65EF # C9EE 65EE # C9EF 673E # C9F0 6739 # C9F1 6738 # C9F2 673B # C9F3 673A # C9F4 673F # C9F5 673C # C9F6 6733 # C9F7 6C18 # C9F8 6C46 # C9F9 6C52 # C9FA 6C5C # C9FB 6C4F # C9FC 6C4A # C9FD 6C54 # C9FE 6C4B # CA40 6C4C # CA41 7071 # CA42 725E # CA43 72B4 # CA44 72B5 # CA45 738E # CA46 752A # CA47 767F # CA48 7A75 # CA49 7F51 # CA4A 8278 # CA4B 827C # CA4C 8280 # CA4D 827D # CA4E 827F # CA4F 864D # CA50 897E # CA51 9099 # CA52 9097 # CA53 9098 # CA54 909B # CA55 9094 # CA56 9622 # CA57 9624 # CA58 9620 # CA59 9623 # CA5A 4F56 # CA5B 4F3B # CA5C 4F62 # CA5D 4F49 # CA5E 4F53 # CA5F 4F64 # CA60 4F3E # CA61 4F67 # CA62 4F52 # CA63 4F5F # CA64 4F41 # CA65 4F58 # CA66 4F2D # CA67 4F33 # CA68 4F3F # CA69 4F61 # CA6A 518F # CA6B 51B9 # CA6C 521C # CA6D 521E # CA6E 5221 # CA6F 52AD # CA70 52AE # CA71 5309 # CA72 5363 # CA73 5372 # CA74 538E # CA75 538F # CA76 5430 # CA77 5437 # CA78 542A # CA79 5454 # CA7A 5445 # CA7B 5419 # CA7C 541C # CA7D 5425 # CA7E 5418 # CAA1 543D # CAA2 544F # CAA3 5441 # CAA4 5428 # CAA5 5424 # CAA6 5447 # CAA7 56EE # CAA8 56E7 # CAA9 56E5 # CAAA 5741 # CAAB 5745 # CAAC 574C # CAAD 5749 # CAAE 574B # CAAF 5752 # CAB0 5906 # CAB1 5940 # CAB2 59A6 # CAB3 5998 # CAB4 59A0 # CAB5 5997 # CAB6 598E # CAB7 59A2 # CAB8 5990 # CAB9 598F # CABA 59A7 # CABB 59A1 # CABC 5B8E # CABD 5B92 # CABE 5C28 # CABF 5C2A # CAC0 5C8D # CAC1 5C8F # CAC2 5C88 # CAC3 5C8B # CAC4 5C89 # CAC5 5C92 # CAC6 5C8A # CAC7 5C86 # CAC8 5C93 # CAC9 5C95 # CACA 5DE0 # CACB 5E0A # CACC 5E0E # CACD 5E8B # CACE 5E89 # CACF 5E8C # CAD0 5E88 # CAD1 5E8D # CAD2 5F05 # CAD3 5F1D # CAD4 5F78 # CAD5 5F76 # CAD6 5FD2 # CAD7 5FD1 # CAD8 5FD0 # CAD9 5FED # CADA 5FE8 # CADB 5FEE # CADC 5FF3 # CADD 5FE1 # CADE 5FE4 # CADF 5FE3 # CAE0 5FFA # CAE1 5FEF # CAE2 5FF7 # CAE3 5FFB # CAE4 6000 # CAE5 5FF4 # CAE6 623A # CAE7 6283 # CAE8 628C # CAE9 628E # CAEA 628F # CAEB 6294 # CAEC 6287 # CAED 6271 # CAEE 627B # CAEF 627A # CAF0 6270 # CAF1 6281 # CAF2 6288 # CAF3 6277 # CAF4 627D # CAF5 6272 # CAF6 6274 # CAF7 6537 # CAF8 65F0 # CAF9 65F4 # CAFA 65F3 # CAFB 65F2 # CAFC 65F5 # CAFD 6745 # CAFE 6747 # CB40 6759 # CB41 6755 # CB42 674C # CB43 6748 # CB44 675D # CB45 674D # CB46 675A # CB47 674B # CB48 6BD0 # CB49 6C19 # CB4A 6C1A # CB4B 6C78 # CB4C 6C67 # CB4D 6C6B # CB4E 6C84 # CB4F 6C8B # CB50 6C8F # CB51 6C71 # CB52 6C6F # CB53 6C69 # CB54 6C9A # CB55 6C6D # CB56 6C87 # CB57 6C95 # CB58 6C9C # CB59 6C66 # CB5A 6C73 # CB5B 6C65 # CB5C 6C7B # CB5D 6C8E # CB5E 7074 # CB5F 707A # CB60 7263 # CB61 72BF # CB62 72BD # CB63 72C3 # CB64 72C6 # CB65 72C1 # CB66 72BA # CB67 72C5 # CB68 7395 # CB69 7397 # CB6A 7393 # CB6B 7394 # CB6C 7392 # CB6D 753A # CB6E 7539 # CB6F 7594 # CB70 7595 # CB71 7681 # CB72 793D # CB73 8034 # CB74 8095 # CB75 8099 # CB76 8090 # CB77 8092 # CB78 809C # CB79 8290 # CB7A 828F # CB7B 8285 # CB7C 828E # CB7D 8291 # CB7E 8293 # CBA1 828A # CBA2 8283 # CBA3 8284 # CBA4 8C78 # CBA5 8FC9 # CBA6 8FBF # CBA7 909F # CBA8 90A1 # CBA9 90A5 # CBAA 909E # CBAB 90A7 # CBAC 90A0 # CBAD 9630 # CBAE 9628 # CBAF 962F # CBB0 962D # CBB1 4E33 # CBB2 4F98 # CBB3 4F7C # CBB4 4F85 # CBB5 4F7D # CBB6 4F80 # CBB7 4F87 # CBB8 4F76 # CBB9 4F74 # CBBA 4F89 # CBBB 4F84 # CBBC 4F77 # CBBD 4F4C # CBBE 4F97 # CBBF 4F6A # CBC0 4F9A # CBC1 4F79 # CBC2 4F81 # CBC3 4F78 # CBC4 4F90 # CBC5 4F9C # CBC6 4F94 # CBC7 4F9E # CBC8 4F92 # CBC9 4F82 # CBCA 4F95 # CBCB 4F6B # CBCC 4F6E # CBCD 519E # CBCE 51BC # CBCF 51BE # CBD0 5235 # CBD1 5232 # CBD2 5233 # CBD3 5246 # CBD4 5231 # CBD5 52BC # CBD6 530A # CBD7 530B # CBD8 533C # CBD9 5392 # CBDA 5394 # CBDB 5487 # CBDC 547F # CBDD 5481 # CBDE 5491 # CBDF 5482 # CBE0 5488 # CBE1 546B # CBE2 547A # CBE3 547E # CBE4 5465 # CBE5 546C # CBE6 5474 # CBE7 5466 # CBE8 548D # CBE9 546F # CBEA 5461 # CBEB 5460 # CBEC 5498 # CBED 5463 # CBEE 5467 # CBEF 5464 # CBF0 56F7 # CBF1 56F9 # CBF2 576F # CBF3 5772 # CBF4 576D # CBF5 576B # CBF6 5771 # CBF7 5770 # CBF8 5776 # CBF9 5780 # CBFA 5775 # CBFB 577B # CBFC 5773 # CBFD 5774 # CBFE 5762 # CC40 5768 # CC41 577D # CC42 590C # CC43 5945 # CC44 59B5 # CC45 59BA # CC46 59CF # CC47 59CE # CC48 59B2 # CC49 59CC # CC4A 59C1 # CC4B 59B6 # CC4C 59BC # CC4D 59C3 # CC4E 59D6 # CC4F 59B1 # CC50 59BD # CC51 59C0 # CC52 59C8 # CC53 59B4 # CC54 59C7 # CC55 5B62 # CC56 5B65 # CC57 5B93 # CC58 5B95 # CC59 5C44 # CC5A 5C47 # CC5B 5CAE # CC5C 5CA4 # CC5D 5CA0 # CC5E 5CB5 # CC5F 5CAF # CC60 5CA8 # CC61 5CAC # CC62 5C9F # CC63 5CA3 # CC64 5CAD # CC65 5CA2 # CC66 5CAA # CC67 5CA7 # CC68 5C9D # CC69 5CA5 # CC6A 5CB6 # CC6B 5CB0 # CC6C 5CA6 # CC6D 5E17 # CC6E 5E14 # CC6F 5E19 # CC70 5F28 # CC71 5F22 # CC72 5F23 # CC73 5F24 # CC74 5F54 # CC75 5F82 # CC76 5F7E # CC77 5F7D # CC78 5FDE # CC79 5FE5 # CC7A 602D # CC7B 6026 # CC7C 6019 # CC7D 6032 # CC7E 600B # CCA1 6034 # CCA2 600A # CCA3 6017 # CCA4 6033 # CCA5 601A # CCA6 601E # CCA7 602C # CCA8 6022 # CCA9 600D # CCAA 6010 # CCAB 602E # CCAC 6013 # CCAD 6011 # CCAE 600C # CCAF 6009 # CCB0 601C # CCB1 6214 # CCB2 623D # CCB3 62AD # CCB4 62B4 # CCB5 62D1 # CCB6 62BE # CCB7 62AA # CCB8 62B6 # CCB9 62CA # CCBA 62AE # CCBB 62B3 # CCBC 62AF # CCBD 62BB # CCBE 62A9 # CCBF 62B0 # CCC0 62B8 # CCC1 653D # CCC2 65A8 # CCC3 65BB # CCC4 6609 # CCC5 65FC # CCC6 6604 # CCC7 6612 # CCC8 6608 # CCC9 65FB # CCCA 6603 # CCCB 660B # CCCC 660D # CCCD 6605 # CCCE 65FD # CCCF 6611 # CCD0 6610 # CCD1 66F6 # CCD2 670A # CCD3 6785 # CCD4 676C # CCD5 678E # CCD6 6792 # CCD7 6776 # CCD8 677B # CCD9 6798 # CCDA 6786 # CCDB 6784 # CCDC 6774 # CCDD 678D # CCDE 678C # CCDF 677A # CCE0 679F # CCE1 6791 # CCE2 6799 # CCE3 6783 # CCE4 677D # CCE5 6781 # CCE6 6778 # CCE7 6779 # CCE8 6794 # CCE9 6B25 # CCEA 6B80 # CCEB 6B7E # CCEC 6BDE # CCED 6C1D # CCEE 6C93 # CCEF 6CEC # CCF0 6CEB # CCF1 6CEE # CCF2 6CD9 # CCF3 6CB6 # CCF4 6CD4 # CCF5 6CAD # CCF6 6CE7 # CCF7 6CB7 # CCF8 6CD0 # CCF9 6CC2 # CCFA 6CBA # CCFB 6CC3 # CCFC 6CC6 # CCFD 6CED # CCFE 6CF2 # CD40 6CD2 # CD41 6CDD # CD42 6CB4 # CD43 6C8A # CD44 6C9D # CD45 6C80 # CD46 6CDE # CD47 6CC0 # CD48 6D30 # CD49 6CCD # CD4A 6CC7 # CD4B 6CB0 # CD4C 6CF9 # CD4D 6CCF # CD4E 6CE9 # CD4F 6CD1 # CD50 7094 # CD51 7098 # CD52 7085 # CD53 7093 # CD54 7086 # CD55 7084 # CD56 7091 # CD57 7096 # CD58 7082 # CD59 709A # CD5A 7083 # CD5B 726A # CD5C 72D6 # CD5D 72CB # CD5E 72D8 # CD5F 72C9 # CD60 72DC # CD61 72D2 # CD62 72D4 # CD63 72DA # CD64 72CC # CD65 72D1 # CD66 73A4 # CD67 73A1 # CD68 73AD # CD69 73A6 # CD6A 73A2 # CD6B 73A0 # CD6C 73AC # CD6D 739D # CD6E 74DD # CD6F 74E8 # CD70 753F # CD71 7540 # CD72 753E # CD73 758C # CD74 7598 # CD75 76AF # CD76 76F3 # CD77 76F1 # CD78 76F0 # CD79 76F5 # CD7A 77F8 # CD7B 77FC # CD7C 77F9 # CD7D 77FB # CD7E 77FA # CDA1 77F7 # CDA2 7942 # CDA3 793F # CDA4 79C5 # CDA5 7A78 # CDA6 7A7B # CDA7 7AFB # CDA8 7C75 # CDA9 7CFD # CDAA 8035 # CDAB 808F # CDAC 80AE # CDAD 80A3 # CDAE 80B8 # CDAF 80B5 # CDB0 80AD # CDB1 8220 # CDB2 82A0 # CDB3 82C0 # CDB4 82AB # CDB5 829A # CDB6 8298 # CDB7 829B # CDB8 82B5 # CDB9 82A7 # CDBA 82AE # CDBB 82BC # CDBC 829E # CDBD 82BA # CDBE 82B4 # CDBF 82A8 # CDC0 82A1 # CDC1 82A9 # CDC2 82C2 # CDC3 82A4 # CDC4 82C3 # CDC5 82B6 # CDC6 82A2 # CDC7 8670 # CDC8 866F # CDC9 866D # CDCA 866E # CDCB 8C56 # CDCC 8FD2 # CDCD 8FCB # CDCE 8FD3 # CDCF 8FCD # CDD0 8FD6 # CDD1 8FD5 # CDD2 8FD7 # CDD3 90B2 # CDD4 90B4 # CDD5 90AF # CDD6 90B3 # CDD7 90B0 # CDD8 9639 # CDD9 963D # CDDA 963C # CDDB 963A # CDDC 9643 # CDDD 4FCD # CDDE 4FC5 # CDDF 4FD3 # CDE0 4FB2 # CDE1 4FC9 # CDE2 4FCB # CDE3 4FC1 # CDE4 4FD4 # CDE5 4FDC # CDE6 4FD9 # CDE7 4FBB # CDE8 4FB3 # CDE9 4FDB # CDEA 4FC7 # CDEB 4FD6 # CDEC 4FBA # CDED 4FC0 # CDEE 4FB9 # CDEF 4FEC # CDF0 5244 # CDF1 5249 # CDF2 52C0 # CDF3 52C2 # CDF4 533D # CDF5 537C # CDF6 5397 # CDF7 5396 # CDF8 5399 # CDF9 5398 # CDFA 54BA # CDFB 54A1 # CDFC 54AD # CDFD 54A5 # CDFE 54CF # CE40 54C3 # CE41 830D # CE42 54B7 # CE43 54AE # CE44 54D6 # CE45 54B6 # CE46 54C5 # CE47 54C6 # CE48 54A0 # CE49 5470 # CE4A 54BC # CE4B 54A2 # CE4C 54BE # CE4D 5472 # CE4E 54DE # CE4F 54B0 # CE50 57B5 # CE51 579E # CE52 579F # CE53 57A4 # CE54 578C # CE55 5797 # CE56 579D # CE57 579B # CE58 5794 # CE59 5798 # CE5A 578F # CE5B 5799 # CE5C 57A5 # CE5D 579A # CE5E 5795 # CE5F 58F4 # CE60 590D # CE61 5953 # CE62 59E1 # CE63 59DE # CE64 59EE # CE65 5A00 # CE66 59F1 # CE67 59DD # CE68 59FA # CE69 59FD # CE6A 59FC # CE6B 59F6 # CE6C 59E4 # CE6D 59F2 # CE6E 59F7 # CE6F 59DB # CE70 59E9 # CE71 59F3 # CE72 59F5 # CE73 59E0 # CE74 59FE # CE75 59F4 # CE76 59ED # CE77 5BA8 # CE78 5C4C # CE79 5CD0 # CE7A 5CD8 # CE7B 5CCC # CE7C 5CD7 # CE7D 5CCB # CE7E 5CDB # CEA1 5CDE # CEA2 5CDA # CEA3 5CC9 # CEA4 5CC7 # CEA5 5CCA # CEA6 5CD6 # CEA7 5CD3 # CEA8 5CD4 # CEA9 5CCF # CEAA 5CC8 # CEAB 5CC6 # CEAC 5CCE # CEAD 5CDF # CEAE 5CF8 # CEAF 5DF9 # CEB0 5E21 # CEB1 5E22 # CEB2 5E23 # CEB3 5E20 # CEB4 5E24 # CEB5 5EB0 # CEB6 5EA4 # CEB7 5EA2 # CEB8 5E9B # CEB9 5EA3 # CEBA 5EA5 # CEBB 5F07 # CEBC 5F2E # CEBD 5F56 # CEBE 5F86 # CEBF 6037 # CEC0 6039 # CEC1 6054 # CEC2 6072 # CEC3 605E # CEC4 6045 # CEC5 6053 # CEC6 6047 # CEC7 6049 # CEC8 605B # CEC9 604C # CECA 6040 # CECB 6042 # CECC 605F # CECD 6024 # CECE 6044 # CECF 6058 # CED0 6066 # CED1 606E # CED2 6242 # CED3 6243 # CED4 62CF # CED5 630D # CED6 630B # CED7 62F5 # CED8 630E # CED9 6303 # CEDA 62EB # CEDB 62F9 # CEDC 630F # CEDD 630C # CEDE 62F8 # CEDF 62F6 # CEE0 6300 # CEE1 6313 # CEE2 6314 # CEE3 62FA # CEE4 6315 # CEE5 62FB # CEE6 62F0 # CEE7 6541 # CEE8 6543 # CEE9 65AA # CEEA 65BF # CEEB 6636 # CEEC 6621 # CEED 6632 # CEEE 6635 # CEEF 661C # CEF0 6626 # CEF1 6622 # CEF2 6633 # CEF3 662B # CEF4 663A # CEF5 661D # CEF6 6634 # CEF7 6639 # CEF8 662E # CEF9 670F # CEFA 6710 # CEFB 67C1 # CEFC 67F2 # CEFD 67C8 # CEFE 67BA # CF40 67DC # CF41 67BB # CF42 67F8 # CF43 67D8 # CF44 67C0 # CF45 67B7 # CF46 67C5 # CF47 67EB # CF48 67E4 # CF49 67DF # CF4A 67B5 # CF4B 67CD # CF4C 67B3 # CF4D 67F7 # CF4E 67F6 # CF4F 67EE # CF50 67E3 # CF51 67C2 # CF52 67B9 # CF53 67CE # CF54 67E7 # CF55 67F0 # CF56 67B2 # CF57 67FC # CF58 67C6 # CF59 67ED # CF5A 67CC # CF5B 67AE # CF5C 67E6 # CF5D 67DB # CF5E 67FA # CF5F 67C9 # CF60 67CA # CF61 67C3 # CF62 67EA # CF63 67CB # CF64 6B28 # CF65 6B82 # CF66 6B84 # CF67 6BB6 # CF68 6BD6 # CF69 6BD8 # CF6A 6BE0 # CF6B 6C20 # CF6C 6C21 # CF6D 6D28 # CF6E 6D34 # CF6F 6D2D # CF70 6D1F # CF71 6D3C # CF72 6D3F # CF73 6D12 # CF74 6D0A # CF75 6CDA # CF76 6D33 # CF77 6D04 # CF78 6D19 # CF79 6D3A # CF7A 6D1A # CF7B 6D11 # CF7C 6D00 # CF7D 6D1D # CF7E 6D42 # CFA1 6D01 # CFA2 6D18 # CFA3 6D37 # CFA4 6D03 # CFA5 6D0F # CFA6 6D40 # CFA7 6D07 # CFA8 6D20 # CFA9 6D2C # CFAA 6D08 # CFAB 6D22 # CFAC 6D09 # CFAD 6D10 # CFAE 70B7 # CFAF 709F # CFB0 70BE # CFB1 70B1 # CFB2 70B0 # CFB3 70A1 # CFB4 70B4 # CFB5 70B5 # CFB6 70A9 # CFB7 7241 # CFB8 7249 # CFB9 724A # CFBA 726C # CFBB 7270 # CFBC 7273 # CFBD 726E # CFBE 72CA # CFBF 72E4 # CFC0 72E8 # CFC1 72EB # CFC2 72DF # CFC3 72EA # CFC4 72E6 # CFC5 72E3 # CFC6 7385 # CFC7 73CC # CFC8 73C2 # CFC9 73C8 # CFCA 73C5 # CFCB 73B9 # CFCC 73B6 # CFCD 73B5 # CFCE 73B4 # CFCF 73EB # CFD0 73BF # CFD1 73C7 # CFD2 73BE # CFD3 73C3 # CFD4 73C6 # CFD5 73B8 # CFD6 73CB # CFD7 74EC # CFD8 74EE # CFD9 752E # CFDA 7547 # CFDB 7548 # CFDC 75A7 # CFDD 75AA # CFDE 7679 # CFDF 76C4 # CFE0 7708 # CFE1 7703 # CFE2 7704 # CFE3 7705 # CFE4 770A # CFE5 76F7 # CFE6 76FB # CFE7 76FA # CFE8 77E7 # CFE9 77E8 # CFEA 7806 # CFEB 7811 # CFEC 7812 # CFED 7805 # CFEE 7810 # CFEF 780F # CFF0 780E # CFF1 7809 # CFF2 7803 # CFF3 7813 # CFF4 794A # CFF5 794C # CFF6 794B # CFF7 7945 # CFF8 7944 # CFF9 79D5 # CFFA 79CD # CFFB 79CF # CFFC 79D6 # CFFD 79CE # CFFE 7A80 # D040 7A7E # D041 7AD1 # D042 7B00 # D043 7B01 # D044 7C7A # D045 7C78 # D046 7C79 # D047 7C7F # D048 7C80 # D049 7C81 # D04A 7D03 # D04B 7D08 # D04C 7D01 # D04D 7F58 # D04E 7F91 # D04F 7F8D # D050 7FBE # D051 8007 # D052 800E # D053 800F # D054 8014 # D055 8037 # D056 80D8 # D057 80C7 # D058 80E0 # D059 80D1 # D05A 80C8 # D05B 80C2 # D05C 80D0 # D05D 80C5 # D05E 80E3 # D05F 80D9 # D060 80DC # D061 80CA # D062 80D5 # D063 80C9 # D064 80CF # D065 80D7 # D066 80E6 # D067 80CD # D068 81FF # D069 8221 # D06A 8294 # D06B 82D9 # D06C 82FE # D06D 82F9 # D06E 8307 # D06F 82E8 # D070 8300 # D071 82D5 # D072 833A # D073 82EB # D074 82D6 # D075 82F4 # D076 82EC # D077 82E1 # D078 82F2 # D079 82F5 # D07A 830C # D07B 82FB # D07C 82F6 # D07D 82F0 # D07E 82EA # D0A1 82E4 # D0A2 82E0 # D0A3 82FA # D0A4 82F3 # D0A5 82ED # D0A6 8677 # D0A7 8674 # D0A8 867C # D0A9 8673 # D0AA 8841 # D0AB 884E # D0AC 8867 # D0AD 886A # D0AE 8869 # D0AF 89D3 # D0B0 8A04 # D0B1 8A07 # D0B2 8D72 # D0B3 8FE3 # D0B4 8FE1 # D0B5 8FEE # D0B6 8FE0 # D0B7 90F1 # D0B8 90BD # D0B9 90BF # D0BA 90D5 # D0BB 90C5 # D0BC 90BE # D0BD 90C7 # D0BE 90CB # D0BF 90C8 # D0C0 91D4 # D0C1 91D3 # D0C2 9654 # D0C3 964F # D0C4 9651 # D0C5 9653 # D0C6 964A # D0C7 964E # D0C8 501E # D0C9 5005 # D0CA 5007 # D0CB 5013 # D0CC 5022 # D0CD 5030 # D0CE 501B # D0CF 4FF5 # D0D0 4FF4 # D0D1 5033 # D0D2 5037 # D0D3 502C # D0D4 4FF6 # D0D5 4FF7 # D0D6 5017 # D0D7 501C # D0D8 5020 # D0D9 5027 # D0DA 5035 # D0DB 502F # D0DC 5031 # D0DD 500E # D0DE 515A # D0DF 5194 # D0E0 5193 # D0E1 51CA # D0E2 51C4 # D0E3 51C5 # D0E4 51C8 # D0E5 51CE # D0E6 5261 # D0E7 525A # D0E8 5252 # D0E9 525E # D0EA 525F # D0EB 5255 # D0EC 5262 # D0ED 52CD # D0EE 530E # D0EF 539E # D0F0 5526 # D0F1 54E2 # D0F2 5517 # D0F3 5512 # D0F4 54E7 # D0F5 54F3 # D0F6 54E4 # D0F7 551A # D0F8 54FF # D0F9 5504 # D0FA 5508 # D0FB 54EB # D0FC 5511 # D0FD 5505 # D0FE 54F1 # D140 550A # D141 54FB # D142 54F7 # D143 54F8 # D144 54E0 # D145 550E # D146 5503 # D147 550B # D148 5701 # D149 5702 # D14A 57CC # D14B 5832 # D14C 57D5 # D14D 57D2 # D14E 57BA # D14F 57C6 # D150 57BD # D151 57BC # D152 57B8 # D153 57B6 # D154 57BF # D155 57C7 # D156 57D0 # D157 57B9 # D158 57C1 # D159 590E # D15A 594A # D15B 5A19 # D15C 5A16 # D15D 5A2D # D15E 5A2E # D15F 5A15 # D160 5A0F # D161 5A17 # D162 5A0A # D163 5A1E # D164 5A33 # D165 5B6C # D166 5BA7 # D167 5BAD # D168 5BAC # D169 5C03 # D16A 5C56 # D16B 5C54 # D16C 5CEC # D16D 5CFF # D16E 5CEE # D16F 5CF1 # D170 5CF7 # D171 5D00 # D172 5CF9 # D173 5E29 # D174 5E28 # D175 5EA8 # D176 5EAE # D177 5EAA # D178 5EAC # D179 5F33 # D17A 5F30 # D17B 5F67 # D17C 605D # D17D 605A # D17E 6067 # D1A1 6041 # D1A2 60A2 # D1A3 6088 # D1A4 6080 # D1A5 6092 # D1A6 6081 # D1A7 609D # D1A8 6083 # D1A9 6095 # D1AA 609B # D1AB 6097 # D1AC 6087 # D1AD 609C # D1AE 608E # D1AF 6219 # D1B0 6246 # D1B1 62F2 # D1B2 6310 # D1B3 6356 # D1B4 632C # D1B5 6344 # D1B6 6345 # D1B7 6336 # D1B8 6343 # D1B9 63E4 # D1BA 6339 # D1BB 634B # D1BC 634A # D1BD 633C # D1BE 6329 # D1BF 6341 # D1C0 6334 # D1C1 6358 # D1C2 6354 # D1C3 6359 # D1C4 632D # D1C5 6347 # D1C6 6333 # D1C7 635A # D1C8 6351 # D1C9 6338 # D1CA 6357 # D1CB 6340 # D1CC 6348 # D1CD 654A # D1CE 6546 # D1CF 65C6 # D1D0 65C3 # D1D1 65C4 # D1D2 65C2 # D1D3 664A # D1D4 665F # D1D5 6647 # D1D6 6651 # D1D7 6712 # D1D8 6713 # D1D9 681F # D1DA 681A # D1DB 6849 # D1DC 6832 # D1DD 6833 # D1DE 683B # D1DF 684B # D1E0 684F # D1E1 6816 # D1E2 6831 # D1E3 681C # D1E4 6835 # D1E5 682B # D1E6 682D # D1E7 682F # D1E8 684E # D1E9 6844 # D1EA 6834 # D1EB 681D # D1EC 6812 # D1ED 6814 # D1EE 6826 # D1EF 6828 # D1F0 682E # D1F1 684D # D1F2 683A # D1F3 6825 # D1F4 6820 # D1F5 6B2C # D1F6 6B2F # D1F7 6B2D # D1F8 6B31 # D1F9 6B34 # D1FA 6B6D # D1FB 8082 # D1FC 6B88 # D1FD 6BE6 # D1FE 6BE4 # D240 6BE8 # D241 6BE3 # D242 6BE2 # D243 6BE7 # D244 6C25 # D245 6D7A # D246 6D63 # D247 6D64 # D248 6D76 # D249 6D0D # D24A 6D61 # D24B 6D92 # D24C 6D58 # D24D 6D62 # D24E 6D6D # D24F 6D6F # D250 6D91 # D251 6D8D # D252 6DEF # D253 6D7F # D254 6D86 # D255 6D5E # D256 6D67 # D257 6D60 # D258 6D97 # D259 6D70 # D25A 6D7C # D25B 6D5F # D25C 6D82 # D25D 6D98 # D25E 6D2F # D25F 6D68 # D260 6D8B # D261 6D7E # D262 6D80 # D263 6D84 # D264 6D16 # D265 6D83 # D266 6D7B # D267 6D7D # D268 6D75 # D269 6D90 # D26A 70DC # D26B 70D3 # D26C 70D1 # D26D 70DD # D26E 70CB # D26F 7F39 # D270 70E2 # D271 70D7 # D272 70D2 # D273 70DE # D274 70E0 # D275 70D4 # D276 70CD # D277 70C5 # D278 70C6 # D279 70C7 # D27A 70DA # D27B 70CE # D27C 70E1 # D27D 7242 # D27E 7278 # D2A1 7277 # D2A2 7276 # D2A3 7300 # D2A4 72FA # D2A5 72F4 # D2A6 72FE # D2A7 72F6 # D2A8 72F3 # D2A9 72FB # D2AA 7301 # D2AB 73D3 # D2AC 73D9 # D2AD 73E5 # D2AE 73D6 # D2AF 73BC # D2B0 73E7 # D2B1 73E3 # D2B2 73E9 # D2B3 73DC # D2B4 73D2 # D2B5 73DB # D2B6 73D4 # D2B7 73DD # D2B8 73DA # D2B9 73D7 # D2BA 73D8 # D2BB 73E8 # D2BC 74DE # D2BD 74DF # D2BE 74F4 # D2BF 74F5 # D2C0 7521 # D2C1 755B # D2C2 755F # D2C3 75B0 # D2C4 75C1 # D2C5 75BB # D2C6 75C4 # D2C7 75C0 # D2C8 75BF # D2C9 75B6 # D2CA 75BA # D2CB 768A # D2CC 76C9 # D2CD 771D # D2CE 771B # D2CF 7710 # D2D0 7713 # D2D1 7712 # D2D2 7723 # D2D3 7711 # D2D4 7715 # D2D5 7719 # D2D6 771A # D2D7 7722 # D2D8 7727 # D2D9 7823 # D2DA 782C # D2DB 7822 # D2DC 7835 # D2DD 782F # D2DE 7828 # D2DF 782E # D2E0 782B # D2E1 7821 # D2E2 7829 # D2E3 7833 # D2E4 782A # D2E5 7831 # D2E6 7954 # D2E7 795B # D2E8 794F # D2E9 795C # D2EA 7953 # D2EB 7952 # D2EC 7951 # D2ED 79EB # D2EE 79EC # D2EF 79E0 # D2F0 79EE # D2F1 79ED # D2F2 79EA # D2F3 79DC # D2F4 79DE # D2F5 79DD # D2F6 7A86 # D2F7 7A89 # D2F8 7A85 # D2F9 7A8B # D2FA 7A8C # D2FB 7A8A # D2FC 7A87 # D2FD 7AD8 # D2FE 7B10 # D340 7B04 # D341 7B13 # D342 7B05 # D343 7B0F # D344 7B08 # D345 7B0A # D346 7B0E # D347 7B09 # D348 7B12 # D349 7C84 # D34A 7C91 # D34B 7C8A # D34C 7C8C # D34D 7C88 # D34E 7C8D # D34F 7C85 # D350 7D1E # D351 7D1D # D352 7D11 # D353 7D0E # D354 7D18 # D355 7D16 # D356 7D13 # D357 7D1F # D358 7D12 # D359 7D0F # D35A 7D0C # D35B 7F5C # D35C 7F61 # D35D 7F5E # D35E 7F60 # D35F 7F5D # D360 7F5B # D361 7F96 # D362 7F92 # D363 7FC3 # D364 7FC2 # D365 7FC0 # D366 8016 # D367 803E # D368 8039 # D369 80FA # D36A 80F2 # D36B 80F9 # D36C 80F5 # D36D 8101 # D36E 80FB # D36F 8100 # D370 8201 # D371 822F # D372 8225 # D373 8333 # D374 832D # D375 8344 # D376 8319 # D377 8351 # D378 8325 # D379 8356 # D37A 833F # D37B 8341 # D37C 8326 # D37D 831C # D37E 8322 # D3A1 8342 # D3A2 834E # D3A3 831B # D3A4 832A # D3A5 8308 # D3A6 833C # D3A7 834D # D3A8 8316 # D3A9 8324 # D3AA 8320 # D3AB 8337 # D3AC 832F # D3AD 8329 # D3AE 8347 # D3AF 8345 # D3B0 834C # D3B1 8353 # D3B2 831E # D3B3 832C # D3B4 834B # D3B5 8327 # D3B6 8348 # D3B7 8653 # D3B8 8652 # D3B9 86A2 # D3BA 86A8 # D3BB 8696 # D3BC 868D # D3BD 8691 # D3BE 869E # D3BF 8687 # D3C0 8697 # D3C1 8686 # D3C2 868B # D3C3 869A # D3C4 8685 # D3C5 86A5 # D3C6 8699 # D3C7 86A1 # D3C8 86A7 # D3C9 8695 # D3CA 8698 # D3CB 868E # D3CC 869D # D3CD 8690 # D3CE 8694 # D3CF 8843 # D3D0 8844 # D3D1 886D # D3D2 8875 # D3D3 8876 # D3D4 8872 # D3D5 8880 # D3D6 8871 # D3D7 887F # D3D8 886F # D3D9 8883 # D3DA 887E # D3DB 8874 # D3DC 887C # D3DD 8A12 # D3DE 8C47 # D3DF 8C57 # D3E0 8C7B # D3E1 8CA4 # D3E2 8CA3 # D3E3 8D76 # D3E4 8D78 # D3E5 8DB5 # D3E6 8DB7 # D3E7 8DB6 # D3E8 8ED1 # D3E9 8ED3 # D3EA 8FFE # D3EB 8FF5 # D3EC 9002 # D3ED 8FFF # D3EE 8FFB # D3EF 9004 # D3F0 8FFC # D3F1 8FF6 # D3F2 90D6 # D3F3 90E0 # D3F4 90D9 # D3F5 90DA # D3F6 90E3 # D3F7 90DF # D3F8 90E5 # D3F9 90D8 # D3FA 90DB # D3FB 90D7 # D3FC 90DC # D3FD 90E4 # D3FE 9150 # D440 914E # D441 914F # D442 91D5 # D443 91E2 # D444 91DA # D445 965C # D446 965F # D447 96BC # D448 98E3 # D449 9ADF # D44A 9B2F # D44B 4E7F # D44C 5070 # D44D 506A # D44E 5061 # D44F 505E # D450 5060 # D451 5053 # D452 504B # D453 505D # D454 5072 # D455 5048 # D456 504D # D457 5041 # D458 505B # D459 504A # D45A 5062 # D45B 5015 # D45C 5045 # D45D 505F # D45E 5069 # D45F 506B # D460 5063 # D461 5064 # D462 5046 # D463 5040 # D464 506E # D465 5073 # D466 5057 # D467 5051 # D468 51D0 # D469 526B # D46A 526D # D46B 526C # D46C 526E # D46D 52D6 # D46E 52D3 # D46F 532D # D470 539C # D471 5575 # D472 5576 # D473 553C # D474 554D # D475 5550 # D476 5534 # D477 552A # D478 5551 # D479 5562 # D47A 5536 # D47B 5535 # D47C 5530 # D47D 5552 # D47E 5545 # D4A1 550C # D4A2 5532 # D4A3 5565 # D4A4 554E # D4A5 5539 # D4A6 5548 # D4A7 552D # D4A8 553B # D4A9 5540 # D4AA 554B # D4AB 570A # D4AC 5707 # D4AD 57FB # D4AE 5814 # D4AF 57E2 # D4B0 57F6 # D4B1 57DC # D4B2 57F4 # D4B3 5800 # D4B4 57ED # D4B5 57FD # D4B6 5808 # D4B7 57F8 # D4B8 580B # D4B9 57F3 # D4BA 57CF # D4BB 5807 # D4BC 57EE # D4BD 57E3 # D4BE 57F2 # D4BF 57E5 # D4C0 57EC # D4C1 57E1 # D4C2 580E # D4C3 57FC # D4C4 5810 # D4C5 57E7 # D4C6 5801 # D4C7 580C # D4C8 57F1 # D4C9 57E9 # D4CA 57F0 # D4CB 580D # D4CC 5804 # D4CD 595C # D4CE 5A60 # D4CF 5A58 # D4D0 5A55 # D4D1 5A67 # D4D2 5A5E # D4D3 5A38 # D4D4 5A35 # D4D5 5A6D # D4D6 5A50 # D4D7 5A5F # D4D8 5A65 # D4D9 5A6C # D4DA 5A53 # D4DB 5A64 # D4DC 5A57 # D4DD 5A43 # D4DE 5A5D # D4DF 5A52 # D4E0 5A44 # D4E1 5A5B # D4E2 5A48 # D4E3 5A8E # D4E4 5A3E # D4E5 5A4D # D4E6 5A39 # D4E7 5A4C # D4E8 5A70 # D4E9 5A69 # D4EA 5A47 # D4EB 5A51 # D4EC 5A56 # D4ED 5A42 # D4EE 5A5C # D4EF 5B72 # D4F0 5B6E # D4F1 5BC1 # D4F2 5BC0 # D4F3 5C59 # D4F4 5D1E # D4F5 5D0B # D4F6 5D1D # D4F7 5D1A # D4F8 5D20 # D4F9 5D0C # D4FA 5D28 # D4FB 5D0D # D4FC 5D26 # D4FD 5D25 # D4FE 5D0F # D540 5D30 # D541 5D12 # D542 5D23 # D543 5D1F # D544 5D2E # D545 5E3E # D546 5E34 # D547 5EB1 # D548 5EB4 # D549 5EB9 # D54A 5EB2 # D54B 5EB3 # D54C 5F36 # D54D 5F38 # D54E 5F9B # D54F 5F96 # D550 5F9F # D551 608A # D552 6090 # D553 6086 # D554 60BE # D555 60B0 # D556 60BA # D557 60D3 # D558 60D4 # D559 60CF # D55A 60E4 # D55B 60D9 # D55C 60DD # D55D 60C8 # D55E 60B1 # D55F 60DB # D560 60B7 # D561 60CA # D562 60BF # D563 60C3 # D564 60CD # D565 60C0 # D566 6332 # D567 6365 # D568 638A # D569 6382 # D56A 637D # D56B 63BD # D56C 639E # D56D 63AD # D56E 639D # D56F 6397 # D570 63AB # D571 638E # D572 636F # D573 6387 # D574 6390 # D575 636E # D576 63AF # D577 6375 # D578 639C # D579 636D # D57A 63AE # D57B 637C # D57C 63A4 # D57D 633B # D57E 639F # D5A1 6378 # D5A2 6385 # D5A3 6381 # D5A4 6391 # D5A5 638D # D5A6 6370 # D5A7 6553 # D5A8 65CD # D5A9 6665 # D5AA 6661 # D5AB 665B # D5AC 6659 # D5AD 665C # D5AE 6662 # D5AF 6718 # D5B0 6879 # D5B1 6887 # D5B2 6890 # D5B3 689C # D5B4 686D # D5B5 686E # D5B6 68AE # D5B7 68AB # D5B8 6956 # D5B9 686F # D5BA 68A3 # D5BB 68AC # D5BC 68A9 # D5BD 6875 # D5BE 6874 # D5BF 68B2 # D5C0 688F # D5C1 6877 # D5C2 6892 # D5C3 687C # D5C4 686B # D5C5 6872 # D5C6 68AA # D5C7 6880 # D5C8 6871 # D5C9 687E # D5CA 689B # D5CB 6896 # D5CC 688B # D5CD 68A0 # D5CE 6889 # D5CF 68A4 # D5D0 6878 # D5D1 687B # D5D2 6891 # D5D3 688C # D5D4 688A # D5D5 687D # D5D6 6B36 # D5D7 6B33 # D5D8 6B37 # D5D9 6B38 # D5DA 6B91 # D5DB 6B8F # D5DC 6B8D # D5DD 6B8E # D5DE 6B8C # D5DF 6C2A # D5E0 6DC0 # D5E1 6DAB # D5E2 6DB4 # D5E3 6DB3 # D5E4 6E74 # D5E5 6DAC # D5E6 6DE9 # D5E7 6DE2 # D5E8 6DB7 # D5E9 6DF6 # D5EA 6DD4 # D5EB 6E00 # D5EC 6DC8 # D5ED 6DE0 # D5EE 6DDF # D5EF 6DD6 # D5F0 6DBE # D5F1 6DE5 # D5F2 6DDC # D5F3 6DDD # D5F4 6DDB # D5F5 6DF4 # D5F6 6DCA # D5F7 6DBD # D5F8 6DED # D5F9 6DF0 # D5FA 6DBA # D5FB 6DD5 # D5FC 6DC2 # D5FD 6DCF # D5FE 6DC9 # D640 6DD0 # D641 6DF2 # D642 6DD3 # D643 6DFD # D644 6DD7 # D645 6DCD # D646 6DE3 # D647 6DBB # D648 70FA # D649 710D # D64A 70F7 # D64B 7117 # D64C 70F4 # D64D 710C # D64E 70F0 # D64F 7104 # D650 70F3 # D651 7110 # D652 70FC # D653 70FF # D654 7106 # D655 7113 # D656 7100 # D657 70F8 # D658 70F6 # D659 710B # D65A 7102 # D65B 710E # D65C 727E # D65D 727B # D65E 727C # D65F 727F # D660 731D # D661 7317 # D662 7307 # D663 7311 # D664 7318 # D665 730A # D666 7308 # D667 72FF # D668 730F # D669 731E # D66A 7388 # D66B 73F6 # D66C 73F8 # D66D 73F5 # D66E 7404 # D66F 7401 # D670 73FD # D671 7407 # D672 7400 # D673 73FA # D674 73FC # D675 73FF # D676 740C # D677 740B # D678 73F4 # D679 7408 # D67A 7564 # D67B 7563 # D67C 75CE # D67D 75D2 # D67E 75CF # D6A1 75CB # D6A2 75CC # D6A3 75D1 # D6A4 75D0 # D6A5 768F # D6A6 7689 # D6A7 76D3 # D6A8 7739 # D6A9 772F # D6AA 772D # D6AB 7731 # D6AC 7732 # D6AD 7734 # D6AE 7733 # D6AF 773D # D6B0 7725 # D6B1 773B # D6B2 7735 # D6B3 7848 # D6B4 7852 # D6B5 7849 # D6B6 784D # D6B7 784A # D6B8 784C # D6B9 7826 # D6BA 7845 # D6BB 7850 # D6BC 7964 # D6BD 7967 # D6BE 7969 # D6BF 796A # D6C0 7963 # D6C1 796B # D6C2 7961 # D6C3 79BB # D6C4 79FA # D6C5 79F8 # D6C6 79F6 # D6C7 79F7 # D6C8 7A8F # D6C9 7A94 # D6CA 7A90 # D6CB 7B35 # D6CC 7B47 # D6CD 7B34 # D6CE 7B25 # D6CF 7B30 # D6D0 7B22 # D6D1 7B24 # D6D2 7B33 # D6D3 7B18 # D6D4 7B2A # D6D5 7B1D # D6D6 7B31 # D6D7 7B2B # D6D8 7B2D # D6D9 7B2F # D6DA 7B32 # D6DB 7B38 # D6DC 7B1A # D6DD 7B23 # D6DE 7C94 # D6DF 7C98 # D6E0 7C96 # D6E1 7CA3 # D6E2 7D35 # D6E3 7D3D # D6E4 7D38 # D6E5 7D36 # D6E6 7D3A # D6E7 7D45 # D6E8 7D2C # D6E9 7D29 # D6EA 7D41 # D6EB 7D47 # D6EC 7D3E # D6ED 7D3F # D6EE 7D4A # D6EF 7D3B # D6F0 7D28 # D6F1 7F63 # D6F2 7F95 # D6F3 7F9C # D6F4 7F9D # D6F5 7F9B # D6F6 7FCA # D6F7 7FCB # D6F8 7FCD # D6F9 7FD0 # D6FA 7FD1 # D6FB 7FC7 # D6FC 7FCF # D6FD 7FC9 # D6FE 801F # D740 801E # D741 801B # D742 8047 # D743 8043 # D744 8048 # D745 8118 # D746 8125 # D747 8119 # D748 811B # D749 812D # D74A 811F # D74B 812C # D74C 811E # D74D 8121 # D74E 8115 # D74F 8127 # D750 811D # D751 8122 # D752 8211 # D753 8238 # D754 8233 # D755 823A # D756 8234 # D757 8232 # D758 8274 # D759 8390 # D75A 83A3 # D75B 83A8 # D75C 838D # D75D 837A # D75E 8373 # D75F 83A4 # D760 8374 # D761 838F # D762 8381 # D763 8395 # D764 8399 # D765 8375 # D766 8394 # D767 83A9 # D768 837D # D769 8383 # D76A 838C # D76B 839D # D76C 839B # D76D 83AA # D76E 838B # D76F 837E # D770 83A5 # D771 83AF # D772 8388 # D773 8397 # D774 83B0 # D775 837F # D776 83A6 # D777 8387 # D778 83AE # D779 8376 # D77A 839A # D77B 8659 # D77C 8656 # D77D 86BF # D77E 86B7 # D7A1 86C2 # D7A2 86C1 # D7A3 86C5 # D7A4 86BA # D7A5 86B0 # D7A6 86C8 # D7A7 86B9 # D7A8 86B3 # D7A9 86B8 # D7AA 86CC # D7AB 86B4 # D7AC 86BB # D7AD 86BC # D7AE 86C3 # D7AF 86BD # D7B0 86BE # D7B1 8852 # D7B2 8889 # D7B3 8895 # D7B4 88A8 # D7B5 88A2 # D7B6 88AA # D7B7 889A # D7B8 8891 # D7B9 88A1 # D7BA 889F # D7BB 8898 # D7BC 88A7 # D7BD 8899 # D7BE 889B # D7BF 8897 # D7C0 88A4 # D7C1 88AC # D7C2 888C # D7C3 8893 # D7C4 888E # D7C5 8982 # D7C6 89D6 # D7C7 89D9 # D7C8 89D5 # D7C9 8A30 # D7CA 8A27 # D7CB 8A2C # D7CC 8A1E # D7CD 8C39 # D7CE 8C3B # D7CF 8C5C # D7D0 8C5D # D7D1 8C7D # D7D2 8CA5 # D7D3 8D7D # D7D4 8D7B # D7D5 8D79 # D7D6 8DBC # D7D7 8DC2 # D7D8 8DB9 # D7D9 8DBF # D7DA 8DC1 # D7DB 8ED8 # D7DC 8EDE # D7DD 8EDD # D7DE 8EDC # D7DF 8ED7 # D7E0 8EE0 # D7E1 8EE1 # D7E2 9024 # D7E3 900B # D7E4 9011 # D7E5 901C # D7E6 900C # D7E7 9021 # D7E8 90EF # D7E9 90EA # D7EA 90F0 # D7EB 90F4 # D7EC 90F2 # D7ED 90F3 # D7EE 90D4 # D7EF 90EB # D7F0 90EC # D7F1 90E9 # D7F2 9156 # D7F3 9158 # D7F4 915A # D7F5 9153 # D7F6 9155 # D7F7 91EC # D7F8 91F4 # D7F9 91F1 # D7FA 91F3 # D7FB 91F8 # D7FC 91E4 # D7FD 91F9 # D7FE 91EA # D840 91EB # D841 91F7 # D842 91E8 # D843 91EE # D844 957A # D845 9586 # D846 9588 # D847 967C # D848 966D # D849 966B # D84A 9671 # D84B 966F # D84C 96BF # D84D 976A # D84E 9804 # D84F 98E5 # D850 9997 # D851 509B # D852 5095 # D853 5094 # D854 509E # D855 508B # D856 50A3 # D857 5083 # D858 508C # D859 508E # D85A 509D # D85B 5068 # D85C 509C # D85D 5092 # D85E 5082 # D85F 5087 # D860 515F # D861 51D4 # D862 5312 # D863 5311 # D864 53A4 # D865 53A7 # D866 5591 # D867 55A8 # D868 55A5 # D869 55AD # D86A 5577 # D86B 5645 # D86C 55A2 # D86D 5593 # D86E 5588 # D86F 558F # D870 55B5 # D871 5581 # D872 55A3 # D873 5592 # D874 55A4 # D875 557D # D876 558C # D877 55A6 # D878 557F # D879 5595 # D87A 55A1 # D87B 558E # D87C 570C # D87D 5829 # D87E 5837 # D8A1 5819 # D8A2 581E # D8A3 5827 # D8A4 5823 # D8A5 5828 # D8A6 57F5 # D8A7 5848 # D8A8 5825 # D8A9 581C # D8AA 581B # D8AB 5833 # D8AC 583F # D8AD 5836 # D8AE 582E # D8AF 5839 # D8B0 5838 # D8B1 582D # D8B2 582C # D8B3 583B # D8B4 5961 # D8B5 5AAF # D8B6 5A94 # D8B7 5A9F # D8B8 5A7A # D8B9 5AA2 # D8BA 5A9E # D8BB 5A78 # D8BC 5AA6 # D8BD 5A7C # D8BE 5AA5 # D8BF 5AAC # D8C0 5A95 # D8C1 5AAE # D8C2 5A37 # D8C3 5A84 # D8C4 5A8A # D8C5 5A97 # D8C6 5A83 # D8C7 5A8B # D8C8 5AA9 # D8C9 5A7B # D8CA 5A7D # D8CB 5A8C # D8CC 5A9C # D8CD 5A8F # D8CE 5A93 # D8CF 5A9D # D8D0 5BEA # D8D1 5BCD # D8D2 5BCB # D8D3 5BD4 # D8D4 5BD1 # D8D5 5BCA # D8D6 5BCE # D8D7 5C0C # D8D8 5C30 # D8D9 5D37 # D8DA 5D43 # D8DB 5D6B # D8DC 5D41 # D8DD 5D4B # D8DE 5D3F # D8DF 5D35 # D8E0 5D51 # D8E1 5D4E # D8E2 5D55 # D8E3 5D33 # D8E4 5D3A # D8E5 5D52 # D8E6 5D3D # D8E7 5D31 # D8E8 5D59 # D8E9 5D42 # D8EA 5D39 # D8EB 5D49 # D8EC 5D38 # D8ED 5D3C # D8EE 5D32 # D8EF 5D36 # D8F0 5D40 # D8F1 5D45 # D8F2 5E44 # D8F3 5E41 # D8F4 5F58 # D8F5 5FA6 # D8F6 5FA5 # D8F7 5FAB # D8F8 60C9 # D8F9 60B9 # D8FA 60CC # D8FB 60E2 # D8FC 60CE # D8FD 60C4 # D8FE 6114 # D940 60F2 # D941 610A # D942 6116 # D943 6105 # D944 60F5 # D945 6113 # D946 60F8 # D947 60FC # D948 60FE # D949 60C1 # D94A 6103 # D94B 6118 # D94C 611D # D94D 6110 # D94E 60FF # D94F 6104 # D950 610B # D951 624A # D952 6394 # D953 63B1 # D954 63B0 # D955 63CE # D956 63E5 # D957 63E8 # D958 63EF # D959 63C3 # D95A 649D # D95B 63F3 # D95C 63CA # D95D 63E0 # D95E 63F6 # D95F 63D5 # D960 63F2 # D961 63F5 # D962 6461 # D963 63DF # D964 63BE # D965 63DD # D966 63DC # D967 63C4 # D968 63D8 # D969 63D3 # D96A 63C2 # D96B 63C7 # D96C 63CC # D96D 63CB # D96E 63C8 # D96F 63F0 # D970 63D7 # D971 63D9 # D972 6532 # D973 6567 # D974 656A # D975 6564 # D976 655C # D977 6568 # D978 6565 # D979 658C # D97A 659D # D97B 659E # D97C 65AE # D97D 65D0 # D97E 65D2 # D9A1 667C # D9A2 666C # D9A3 667B # D9A4 6680 # D9A5 6671 # D9A6 6679 # D9A7 666A # D9A8 6672 # D9A9 6701 # D9AA 690C # D9AB 68D3 # D9AC 6904 # D9AD 68DC # D9AE 692A # D9AF 68EC # D9B0 68EA # D9B1 68F1 # D9B2 690F # D9B3 68D6 # D9B4 68F7 # D9B5 68EB # D9B6 68E4 # D9B7 68F6 # D9B8 6913 # D9B9 6910 # D9BA 68F3 # D9BB 68E1 # D9BC 6907 # D9BD 68CC # D9BE 6908 # D9BF 6970 # D9C0 68B4 # D9C1 6911 # D9C2 68EF # D9C3 68C6 # D9C4 6914 # D9C5 68F8 # D9C6 68D0 # D9C7 68FD # D9C8 68FC # D9C9 68E8 # D9CA 690B # D9CB 690A # D9CC 6917 # D9CD 68CE # D9CE 68C8 # D9CF 68DD # D9D0 68DE # D9D1 68E6 # D9D2 68F4 # D9D3 68D1 # D9D4 6906 # D9D5 68D4 # D9D6 68E9 # D9D7 6915 # D9D8 6925 # D9D9 68C7 # D9DA 6B39 # D9DB 6B3B # D9DC 6B3F # D9DD 6B3C # D9DE 6B94 # D9DF 6B97 # D9E0 6B99 # D9E1 6B95 # D9E2 6BBD # D9E3 6BF0 # D9E4 6BF2 # D9E5 6BF3 # D9E6 6C30 # D9E7 6DFC # D9E8 6E46 # D9E9 6E47 # D9EA 6E1F # D9EB 6E49 # D9EC 6E88 # D9ED 6E3C # D9EE 6E3D # D9EF 6E45 # D9F0 6E62 # D9F1 6E2B # D9F2 6E3F # D9F3 6E41 # D9F4 6E5D # D9F5 6E73 # D9F6 6E1C # D9F7 6E33 # D9F8 6E4B # D9F9 6E40 # D9FA 6E51 # D9FB 6E3B # D9FC 6E03 # D9FD 6E2E # D9FE 6E5E # DA40 6E68 # DA41 6E5C # DA42 6E61 # DA43 6E31 # DA44 6E28 # DA45 6E60 # DA46 6E71 # DA47 6E6B # DA48 6E39 # DA49 6E22 # DA4A 6E30 # DA4B 6E53 # DA4C 6E65 # DA4D 6E27 # DA4E 6E78 # DA4F 6E64 # DA50 6E77 # DA51 6E55 # DA52 6E79 # DA53 6E52 # DA54 6E66 # DA55 6E35 # DA56 6E36 # DA57 6E5A # DA58 7120 # DA59 711E # DA5A 712F # DA5B 70FB # DA5C 712E # DA5D 7131 # DA5E 7123 # DA5F 7125 # DA60 7122 # DA61 7132 # DA62 711F # DA63 7128 # DA64 713A # DA65 711B # DA66 724B # DA67 725A # DA68 7288 # DA69 7289 # DA6A 7286 # DA6B 7285 # DA6C 728B # DA6D 7312 # DA6E 730B # DA6F 7330 # DA70 7322 # DA71 7331 # DA72 7333 # DA73 7327 # DA74 7332 # DA75 732D # DA76 7326 # DA77 7323 # DA78 7335 # DA79 730C # DA7A 742E # DA7B 742C # DA7C 7430 # DA7D 742B # DA7E 7416 # DAA1 741A # DAA2 7421 # DAA3 742D # DAA4 7431 # DAA5 7424 # DAA6 7423 # DAA7 741D # DAA8 7429 # DAA9 7420 # DAAA 7432 # DAAB 74FB # DAAC 752F # DAAD 756F # DAAE 756C # DAAF 75E7 # DAB0 75DA # DAB1 75E1 # DAB2 75E6 # DAB3 75DD # DAB4 75DF # DAB5 75E4 # DAB6 75D7 # DAB7 7695 # DAB8 7692 # DAB9 76DA # DABA 7746 # DABB 7747 # DABC 7744 # DABD 774D # DABE 7745 # DABF 774A # DAC0 774E # DAC1 774B # DAC2 774C # DAC3 77DE # DAC4 77EC # DAC5 7860 # DAC6 7864 # DAC7 7865 # DAC8 785C # DAC9 786D # DACA 7871 # DACB 786A # DACC 786E # DACD 7870 # DACE 7869 # DACF 7868 # DAD0 785E # DAD1 7862 # DAD2 7974 # DAD3 7973 # DAD4 7972 # DAD5 7970 # DAD6 7A02 # DAD7 7A0A # DAD8 7A03 # DAD9 7A0C # DADA 7A04 # DADB 7A99 # DADC 7AE6 # DADD 7AE4 # DADE 7B4A # DADF 7B3B # DAE0 7B44 # DAE1 7B48 # DAE2 7B4C # DAE3 7B4E # DAE4 7B40 # DAE5 7B58 # DAE6 7B45 # DAE7 7CA2 # DAE8 7C9E # DAE9 7CA8 # DAEA 7CA1 # DAEB 7D58 # DAEC 7D6F # DAED 7D63 # DAEE 7D53 # DAEF 7D56 # DAF0 7D67 # DAF1 7D6A # DAF2 7D4F # DAF3 7D6D # DAF4 7D5C # DAF5 7D6B # DAF6 7D52 # DAF7 7D54 # DAF8 7D69 # DAF9 7D51 # DAFA 7D5F # DAFB 7D4E # DAFC 7F3E # DAFD 7F3F # DAFE 7F65 # DB40 7F66 # DB41 7FA2 # DB42 7FA0 # DB43 7FA1 # DB44 7FD7 # DB45 8051 # DB46 804F # DB47 8050 # DB48 80FE # DB49 80D4 # DB4A 8143 # DB4B 814A # DB4C 8152 # DB4D 814F # DB4E 8147 # DB4F 813D # DB50 814D # DB51 813A # DB52 81E6 # DB53 81EE # DB54 81F7 # DB55 81F8 # DB56 81F9 # DB57 8204 # DB58 823C # DB59 823D # DB5A 823F # DB5B 8275 # DB5C 833B # DB5D 83CF # DB5E 83F9 # DB5F 8423 # DB60 83C0 # DB61 83E8 # DB62 8412 # DB63 83E7 # DB64 83E4 # DB65 83FC # DB66 83F6 # DB67 8410 # DB68 83C6 # DB69 83C8 # DB6A 83EB # DB6B 83E3 # DB6C 83BF # DB6D 8401 # DB6E 83DD # DB6F 83E5 # DB70 83D8 # DB71 83FF # DB72 83E1 # DB73 83CB # DB74 83CE # DB75 83D6 # DB76 83F5 # DB77 83C9 # DB78 8409 # DB79 840F # DB7A 83DE # DB7B 8411 # DB7C 8406 # DB7D 83C2 # DB7E 83F3 # DBA1 83D5 # DBA2 83FA # DBA3 83C7 # DBA4 83D1 # DBA5 83EA # DBA6 8413 # DBA7 83C3 # DBA8 83EC # DBA9 83EE # DBAA 83C4 # DBAB 83FB # DBAC 83D7 # DBAD 83E2 # DBAE 841B # DBAF 83DB # DBB0 83FE # DBB1 86D8 # DBB2 86E2 # DBB3 86E6 # DBB4 86D3 # DBB5 86E3 # DBB6 86DA # DBB7 86EA # DBB8 86DD # DBB9 86EB # DBBA 86DC # DBBB 86EC # DBBC 86E9 # DBBD 86D7 # DBBE 86E8 # DBBF 86D1 # DBC0 8848 # DBC1 8856 # DBC2 8855 # DBC3 88BA # DBC4 88D7 # DBC5 88B9 # DBC6 88B8 # DBC7 88C0 # DBC8 88BE # DBC9 88B6 # DBCA 88BC # DBCB 88B7 # DBCC 88BD # DBCD 88B2 # DBCE 8901 # DBCF 88C9 # DBD0 8995 # DBD1 8998 # DBD2 8997 # DBD3 89DD # DBD4 89DA # DBD5 89DB # DBD6 8A4E # DBD7 8A4D # DBD8 8A39 # DBD9 8A59 # DBDA 8A40 # DBDB 8A57 # DBDC 8A58 # DBDD 8A44 # DBDE 8A45 # DBDF 8A52 # DBE0 8A48 # DBE1 8A51 # DBE2 8A4A # DBE3 8A4C # DBE4 8A4F # DBE5 8C5F # DBE6 8C81 # DBE7 8C80 # DBE8 8CBA # DBE9 8CBE # DBEA 8CB0 # DBEB 8CB9 # DBEC 8CB5 # DBED 8D84 # DBEE 8D80 # DBEF 8D89 # DBF0 8DD8 # DBF1 8DD3 # DBF2 8DCD # DBF3 8DC7 # DBF4 8DD6 # DBF5 8DDC # DBF6 8DCF # DBF7 8DD5 # DBF8 8DD9 # DBF9 8DC8 # DBFA 8DD7 # DBFB 8DC5 # DBFC 8EEF # DBFD 8EF7 # DBFE 8EFA # DC40 8EF9 # DC41 8EE6 # DC42 8EEE # DC43 8EE5 # DC44 8EF5 # DC45 8EE7 # DC46 8EE8 # DC47 8EF6 # DC48 8EEB # DC49 8EF1 # DC4A 8EEC # DC4B 8EF4 # DC4C 8EE9 # DC4D 902D # DC4E 9034 # DC4F 902F # DC50 9106 # DC51 912C # DC52 9104 # DC53 90FF # DC54 90FC # DC55 9108 # DC56 90F9 # DC57 90FB # DC58 9101 # DC59 9100 # DC5A 9107 # DC5B 9105 # DC5C 9103 # DC5D 9161 # DC5E 9164 # DC5F 915F # DC60 9162 # DC61 9160 # DC62 9201 # DC63 920A # DC64 9225 # DC65 9203 # DC66 921A # DC67 9226 # DC68 920F # DC69 920C # DC6A 9200 # DC6B 9212 # DC6C 91FF # DC6D 91FD # DC6E 9206 # DC6F 9204 # DC70 9227 # DC71 9202 # DC72 921C # DC73 9224 # DC74 9219 # DC75 9217 # DC76 9205 # DC77 9216 # DC78 957B # DC79 958D # DC7A 958C # DC7B 9590 # DC7C 9687 # DC7D 967E # DC7E 9688 # DCA1 9689 # DCA2 9683 # DCA3 9680 # DCA4 96C2 # DCA5 96C8 # DCA6 96C3 # DCA7 96F1 # DCA8 96F0 # DCA9 976C # DCAA 9770 # DCAB 976E # DCAC 9807 # DCAD 98A9 # DCAE 98EB # DCAF 9CE6 # DCB0 9EF9 # DCB1 4E83 # DCB2 4E84 # DCB3 4EB6 # DCB4 50BD # DCB5 50BF # DCB6 50C6 # DCB7 50AE # DCB8 50C4 # DCB9 50CA # DCBA 50B4 # DCBB 50C8 # DCBC 50C2 # DCBD 50B0 # DCBE 50C1 # DCBF 50BA # DCC0 50B1 # DCC1 50CB # DCC2 50C9 # DCC3 50B6 # DCC4 50B8 # DCC5 51D7 # DCC6 527A # DCC7 5278 # DCC8 527B # DCC9 527C # DCCA 55C3 # DCCB 55DB # DCCC 55CC # DCCD 55D0 # DCCE 55CB # DCCF 55CA # DCD0 55DD # DCD1 55C0 # DCD2 55D4 # DCD3 55C4 # DCD4 55E9 # DCD5 55BF # DCD6 55D2 # DCD7 558D # DCD8 55CF # DCD9 55D5 # DCDA 55E2 # DCDB 55D6 # DCDC 55C8 # DCDD 55F2 # DCDE 55CD # DCDF 55D9 # DCE0 55C2 # DCE1 5714 # DCE2 5853 # DCE3 5868 # DCE4 5864 # DCE5 584F # DCE6 584D # DCE7 5849 # DCE8 586F # DCE9 5855 # DCEA 584E # DCEB 585D # DCEC 5859 # DCED 5865 # DCEE 585B # DCEF 583D # DCF0 5863 # DCF1 5871 # DCF2 58FC # DCF3 5AC7 # DCF4 5AC4 # DCF5 5ACB # DCF6 5ABA # DCF7 5AB8 # DCF8 5AB1 # DCF9 5AB5 # DCFA 5AB0 # DCFB 5ABF # DCFC 5AC8 # DCFD 5ABB # DCFE 5AC6 # DD40 5AB7 # DD41 5AC0 # DD42 5ACA # DD43 5AB4 # DD44 5AB6 # DD45 5ACD # DD46 5AB9 # DD47 5A90 # DD48 5BD6 # DD49 5BD8 # DD4A 5BD9 # DD4B 5C1F # DD4C 5C33 # DD4D 5D71 # DD4E 5D63 # DD4F 5D4A # DD50 5D65 # DD51 5D72 # DD52 5D6C # DD53 5D5E # DD54 5D68 # DD55 5D67 # DD56 5D62 # DD57 5DF0 # DD58 5E4F # DD59 5E4E # DD5A 5E4A # DD5B 5E4D # DD5C 5E4B # DD5D 5EC5 # DD5E 5ECC # DD5F 5EC6 # DD60 5ECB # DD61 5EC7 # DD62 5F40 # DD63 5FAF # DD64 5FAD # DD65 60F7 # DD66 6149 # DD67 614A # DD68 612B # DD69 6145 # DD6A 6136 # DD6B 6132 # DD6C 612E # DD6D 6146 # DD6E 612F # DD6F 614F # DD70 6129 # DD71 6140 # DD72 6220 # DD73 9168 # DD74 6223 # DD75 6225 # DD76 6224 # DD77 63C5 # DD78 63F1 # DD79 63EB # DD7A 6410 # DD7B 6412 # DD7C 6409 # DD7D 6420 # DD7E 6424 # DDA1 6433 # DDA2 6443 # DDA3 641F # DDA4 6415 # DDA5 6418 # DDA6 6439 # DDA7 6437 # DDA8 6422 # DDA9 6423 # DDAA 640C # DDAB 6426 # DDAC 6430 # DDAD 6428 # DDAE 6441 # DDAF 6435 # DDB0 642F # DDB1 640A # DDB2 641A # DDB3 6440 # DDB4 6425 # DDB5 6427 # DDB6 640B # DDB7 63E7 # DDB8 641B # DDB9 642E # DDBA 6421 # DDBB 640E # DDBC 656F # DDBD 6592 # DDBE 65D3 # DDBF 6686 # DDC0 668C # DDC1 6695 # DDC2 6690 # DDC3 668B # DDC4 668A # DDC5 6699 # DDC6 6694 # DDC7 6678 # DDC8 6720 # DDC9 6966 # DDCA 695F # DDCB 6938 # DDCC 694E # DDCD 6962 # DDCE 6971 # DDCF 693F # DDD0 6945 # DDD1 696A # DDD2 6939 # DDD3 6942 # DDD4 6957 # DDD5 6959 # DDD6 697A # DDD7 6948 # DDD8 6949 # DDD9 6935 # DDDA 696C # DDDB 6933 # DDDC 693D # DDDD 6965 # DDDE 68F0 # DDDF 6978 # DDE0 6934 # DDE1 6969 # DDE2 6940 # DDE3 696F # DDE4 6944 # DDE5 6976 # DDE6 6958 # DDE7 6941 # DDE8 6974 # DDE9 694C # DDEA 693B # DDEB 694B # DDEC 6937 # DDED 695C # DDEE 694F # DDEF 6951 # DDF0 6932 # DDF1 6952 # DDF2 692F # DDF3 697B # DDF4 693C # DDF5 6B46 # DDF6 6B45 # DDF7 6B43 # DDF8 6B42 # DDF9 6B48 # DDFA 6B41 # DDFB 6B9B # DDFC FA0D # CJK COMPATIBILITY IDEOGRAPH-FA0D DDFD 6BFB # DDFE 6BFC # DE40 6BF9 # DE41 6BF7 # DE42 6BF8 # DE43 6E9B # DE44 6ED6 # DE45 6EC8 # DE46 6E8F # DE47 6EC0 # DE48 6E9F # DE49 6E93 # DE4A 6E94 # DE4B 6EA0 # DE4C 6EB1 # DE4D 6EB9 # DE4E 6EC6 # DE4F 6ED2 # DE50 6EBD # DE51 6EC1 # DE52 6E9E # DE53 6EC9 # DE54 6EB7 # DE55 6EB0 # DE56 6ECD # DE57 6EA6 # DE58 6ECF # DE59 6EB2 # DE5A 6EBE # DE5B 6EC3 # DE5C 6EDC # DE5D 6ED8 # DE5E 6E99 # DE5F 6E92 # DE60 6E8E # DE61 6E8D # DE62 6EA4 # DE63 6EA1 # DE64 6EBF # DE65 6EB3 # DE66 6ED0 # DE67 6ECA # DE68 6E97 # DE69 6EAE # DE6A 6EA3 # DE6B 7147 # DE6C 7154 # DE6D 7152 # DE6E 7163 # DE6F 7160 # DE70 7141 # DE71 715D # DE72 7162 # DE73 7172 # DE74 7178 # DE75 716A # DE76 7161 # DE77 7142 # DE78 7158 # DE79 7143 # DE7A 714B # DE7B 7170 # DE7C 715F # DE7D 7150 # DE7E 7153 # DEA1 7144 # DEA2 714D # DEA3 715A # DEA4 724F # DEA5 728D # DEA6 728C # DEA7 7291 # DEA8 7290 # DEA9 728E # DEAA 733C # DEAB 7342 # DEAC 733B # DEAD 733A # DEAE 7340 # DEAF 734A # DEB0 7349 # DEB1 7444 # DEB2 744A # DEB3 744B # DEB4 7452 # DEB5 7451 # DEB6 7457 # DEB7 7440 # DEB8 744F # DEB9 7450 # DEBA 744E # DEBB 7442 # DEBC 7446 # DEBD 744D # DEBE 7454 # DEBF 74E1 # DEC0 74FF # DEC1 74FE # DEC2 74FD # DEC3 751D # DEC4 7579 # DEC5 7577 # DEC6 6983 # DEC7 75EF # DEC8 760F # DEC9 7603 # DECA 75F7 # DECB 75FE # DECC 75FC # DECD 75F9 # DECE 75F8 # DECF 7610 # DED0 75FB # DED1 75F6 # DED2 75ED # DED3 75F5 # DED4 75FD # DED5 7699 # DED6 76B5 # DED7 76DD # DED8 7755 # DED9 775F # DEDA 7760 # DEDB 7752 # DEDC 7756 # DEDD 775A # DEDE 7769 # DEDF 7767 # DEE0 7754 # DEE1 7759 # DEE2 776D # DEE3 77E0 # DEE4 7887 # DEE5 789A # DEE6 7894 # DEE7 788F # DEE8 7884 # DEE9 7895 # DEEA 7885 # DEEB 7886 # DEEC 78A1 # DEED 7883 # DEEE 7879 # DEEF 7899 # DEF0 7880 # DEF1 7896 # DEF2 787B # DEF3 797C # DEF4 7982 # DEF5 797D # DEF6 7979 # DEF7 7A11 # DEF8 7A18 # DEF9 7A19 # DEFA 7A12 # DEFB 7A17 # DEFC 7A15 # DEFD 7A22 # DEFE 7A13 # DF40 7A1B # DF41 7A10 # DF42 7AA3 # DF43 7AA2 # DF44 7A9E # DF45 7AEB # DF46 7B66 # DF47 7B64 # DF48 7B6D # DF49 7B74 # DF4A 7B69 # DF4B 7B72 # DF4C 7B65 # DF4D 7B73 # DF4E 7B71 # DF4F 7B70 # DF50 7B61 # DF51 7B78 # DF52 7B76 # DF53 7B63 # DF54 7CB2 # DF55 7CB4 # DF56 7CAF # DF57 7D88 # DF58 7D86 # DF59 7D80 # DF5A 7D8D # DF5B 7D7F # DF5C 7D85 # DF5D 7D7A # DF5E 7D8E # DF5F 7D7B # DF60 7D83 # DF61 7D7C # DF62 7D8C # DF63 7D94 # DF64 7D84 # DF65 7D7D # DF66 7D92 # DF67 7F6D # DF68 7F6B # DF69 7F67 # DF6A 7F68 # DF6B 7F6C # DF6C 7FA6 # DF6D 7FA5 # DF6E 7FA7 # DF6F 7FDB # DF70 7FDC # DF71 8021 # DF72 8164 # DF73 8160 # DF74 8177 # DF75 815C # DF76 8169 # DF77 815B # DF78 8162 # DF79 8172 # DF7A 6721 # DF7B 815E # DF7C 8176 # DF7D 8167 # DF7E 816F # DFA1 8144 # DFA2 8161 # DFA3 821D # DFA4 8249 # DFA5 8244 # DFA6 8240 # DFA7 8242 # DFA8 8245 # DFA9 84F1 # DFAA 843F # DFAB 8456 # DFAC 8476 # DFAD 8479 # DFAE 848F # DFAF 848D # DFB0 8465 # DFB1 8451 # DFB2 8440 # DFB3 8486 # DFB4 8467 # DFB5 8430 # DFB6 844D # DFB7 847D # DFB8 845A # DFB9 8459 # DFBA 8474 # DFBB 8473 # DFBC 845D # DFBD 8507 # DFBE 845E # DFBF 8437 # DFC0 843A # DFC1 8434 # DFC2 847A # DFC3 8443 # DFC4 8478 # DFC5 8432 # DFC6 8445 # DFC7 8429 # DFC8 83D9 # DFC9 844B # DFCA 842F # DFCB 8442 # DFCC 842D # DFCD 845F # DFCE 8470 # DFCF 8439 # DFD0 844E # DFD1 844C # DFD2 8452 # DFD3 846F # DFD4 84C5 # DFD5 848E # DFD6 843B # DFD7 8447 # DFD8 8436 # DFD9 8433 # DFDA 8468 # DFDB 847E # DFDC 8444 # DFDD 842B # DFDE 8460 # DFDF 8454 # DFE0 846E # DFE1 8450 # DFE2 870B # DFE3 8704 # DFE4 86F7 # DFE5 870C # DFE6 86FA # DFE7 86D6 # DFE8 86F5 # DFE9 874D # DFEA 86F8 # DFEB 870E # DFEC 8709 # DFED 8701 # DFEE 86F6 # DFEF 870D # DFF0 8705 # DFF1 88D6 # DFF2 88CB # DFF3 88CD # DFF4 88CE # DFF5 88DE # DFF6 88DB # DFF7 88DA # DFF8 88CC # DFF9 88D0 # DFFA 8985 # DFFB 899B # DFFC 89DF # DFFD 89E5 # DFFE 89E4 # E040 89E1 # E041 89E0 # E042 89E2 # E043 89DC # E044 89E6 # E045 8A76 # E046 8A86 # E047 8A7F # E048 8A61 # E049 8A3F # E04A 8A77 # E04B 8A82 # E04C 8A84 # E04D 8A75 # E04E 8A83 # E04F 8A81 # E050 8A74 # E051 8A7A # E052 8C3C # E053 8C4B # E054 8C4A # E055 8C65 # E056 8C64 # E057 8C66 # E058 8C86 # E059 8C84 # E05A 8C85 # E05B 8CCC # E05C 8D68 # E05D 8D69 # E05E 8D91 # E05F 8D8C # E060 8D8E # E061 8D8F # E062 8D8D # E063 8D93 # E064 8D94 # E065 8D90 # E066 8D92 # E067 8DF0 # E068 8DE0 # E069 8DEC # E06A 8DF1 # E06B 8DEE # E06C 8DD0 # E06D 8DE9 # E06E 8DE3 # E06F 8DE2 # E070 8DE7 # E071 8DF2 # E072 8DEB # E073 8DF4 # E074 8F06 # E075 8EFF # E076 8F01 # E077 8F00 # E078 8F05 # E079 8F07 # E07A 8F08 # E07B 8F02 # E07C 8F0B # E07D 9052 # E07E 903F # E0A1 9044 # E0A2 9049 # E0A3 903D # E0A4 9110 # E0A5 910D # E0A6 910F # E0A7 9111 # E0A8 9116 # E0A9 9114 # E0AA 910B # E0AB 910E # E0AC 916E # E0AD 916F # E0AE 9248 # E0AF 9252 # E0B0 9230 # E0B1 923A # E0B2 9266 # E0B3 9233 # E0B4 9265 # E0B5 925E # E0B6 9283 # E0B7 922E # E0B8 924A # E0B9 9246 # E0BA 926D # E0BB 926C # E0BC 924F # E0BD 9260 # E0BE 9267 # E0BF 926F # E0C0 9236 # E0C1 9261 # E0C2 9270 # E0C3 9231 # E0C4 9254 # E0C5 9263 # E0C6 9250 # E0C7 9272 # E0C8 924E # E0C9 9253 # E0CA 924C # E0CB 9256 # E0CC 9232 # E0CD 959F # E0CE 959C # E0CF 959E # E0D0 959B # E0D1 9692 # E0D2 9693 # E0D3 9691 # E0D4 9697 # E0D5 96CE # E0D6 96FA # E0D7 96FD # E0D8 96F8 # E0D9 96F5 # E0DA 9773 # E0DB 9777 # E0DC 9778 # E0DD 9772 # E0DE 980F # E0DF 980D # E0E0 980E # E0E1 98AC # E0E2 98F6 # E0E3 98F9 # E0E4 99AF # E0E5 99B2 # E0E6 99B0 # E0E7 99B5 # E0E8 9AAD # E0E9 9AAB # E0EA 9B5B # E0EB 9CEA # E0EC 9CED # E0ED 9CE7 # E0EE 9E80 # E0EF 9EFD # E0F0 50E6 # E0F1 50D4 # E0F2 50D7 # E0F3 50E8 # E0F4 50F3 # E0F5 50DB # E0F6 50EA # E0F7 50DD # E0F8 50E4 # E0F9 50D3 # E0FA 50EC # E0FB 50F0 # E0FC 50EF # E0FD 50E3 # E0FE 50E0 # E140 51D8 # E141 5280 # E142 5281 # E143 52E9 # E144 52EB # E145 5330 # E146 53AC # E147 5627 # E148 5615 # E149 560C # E14A 5612 # E14B 55FC # E14C 560F # E14D 561C # E14E 5601 # E14F 5613 # E150 5602 # E151 55FA # E152 561D # E153 5604 # E154 55FF # E155 55F9 # E156 5889 # E157 587C # E158 5890 # E159 5898 # E15A 5886 # E15B 5881 # E15C 587F # E15D 5874 # E15E 588B # E15F 587A # E160 5887 # E161 5891 # E162 588E # E163 5876 # E164 5882 # E165 5888 # E166 587B # E167 5894 # E168 588F # E169 58FE # E16A 596B # E16B 5ADC # E16C 5AEE # E16D 5AE5 # E16E 5AD5 # E16F 5AEA # E170 5ADA # E171 5AED # E172 5AEB # E173 5AF3 # E174 5AE2 # E175 5AE0 # E176 5ADB # E177 5AEC # E178 5ADE # E179 5ADD # E17A 5AD9 # E17B 5AE8 # E17C 5ADF # E17D 5B77 # E17E 5BE0 # E1A1 5BE3 # E1A2 5C63 # E1A3 5D82 # E1A4 5D80 # E1A5 5D7D # E1A6 5D86 # E1A7 5D7A # E1A8 5D81 # E1A9 5D77 # E1AA 5D8A # E1AB 5D89 # E1AC 5D88 # E1AD 5D7E # E1AE 5D7C # E1AF 5D8D # E1B0 5D79 # E1B1 5D7F # E1B2 5E58 # E1B3 5E59 # E1B4 5E53 # E1B5 5ED8 # E1B6 5ED1 # E1B7 5ED7 # E1B8 5ECE # E1B9 5EDC # E1BA 5ED5 # E1BB 5ED9 # E1BC 5ED2 # E1BD 5ED4 # E1BE 5F44 # E1BF 5F43 # E1C0 5F6F # E1C1 5FB6 # E1C2 612C # E1C3 6128 # E1C4 6141 # E1C5 615E # E1C6 6171 # E1C7 6173 # E1C8 6152 # E1C9 6153 # E1CA 6172 # E1CB 616C # E1CC 6180 # E1CD 6174 # E1CE 6154 # E1CF 617A # E1D0 615B # E1D1 6165 # E1D2 613B # E1D3 616A # E1D4 6161 # E1D5 6156 # E1D6 6229 # E1D7 6227 # E1D8 622B # E1D9 642B # E1DA 644D # E1DB 645B # E1DC 645D # E1DD 6474 # E1DE 6476 # E1DF 6472 # E1E0 6473 # E1E1 647D # E1E2 6475 # E1E3 6466 # E1E4 64A6 # E1E5 644E # E1E6 6482 # E1E7 645E # E1E8 645C # E1E9 644B # E1EA 6453 # E1EB 6460 # E1EC 6450 # E1ED 647F # E1EE 643F # E1EF 646C # E1F0 646B # E1F1 6459 # E1F2 6465 # E1F3 6477 # E1F4 6573 # E1F5 65A0 # E1F6 66A1 # E1F7 66A0 # E1F8 669F # E1F9 6705 # E1FA 6704 # E1FB 6722 # E1FC 69B1 # E1FD 69B6 # E1FE 69C9 # E240 69A0 # E241 69CE # E242 6996 # E243 69B0 # E244 69AC # E245 69BC # E246 6991 # E247 6999 # E248 698E # E249 69A7 # E24A 698D # E24B 69A9 # E24C 69BE # E24D 69AF # E24E 69BF # E24F 69C4 # E250 69BD # E251 69A4 # E252 69D4 # E253 69B9 # E254 69CA # E255 699A # E256 69CF # E257 69B3 # E258 6993 # E259 69AA # E25A 69A1 # E25B 699E # E25C 69D9 # E25D 6997 # E25E 6990 # E25F 69C2 # E260 69B5 # E261 69A5 # E262 69C6 # E263 6B4A # E264 6B4D # E265 6B4B # E266 6B9E # E267 6B9F # E268 6BA0 # E269 6BC3 # E26A 6BC4 # E26B 6BFE # E26C 6ECE # E26D 6EF5 # E26E 6EF1 # E26F 6F03 # E270 6F25 # E271 6EF8 # E272 6F37 # E273 6EFB # E274 6F2E # E275 6F09 # E276 6F4E # E277 6F19 # E278 6F1A # E279 6F27 # E27A 6F18 # E27B 6F3B # E27C 6F12 # E27D 6EED # E27E 6F0A # E2A1 6F36 # E2A2 6F73 # E2A3 6EF9 # E2A4 6EEE # E2A5 6F2D # E2A6 6F40 # E2A7 6F30 # E2A8 6F3C # E2A9 6F35 # E2AA 6EEB # E2AB 6F07 # E2AC 6F0E # E2AD 6F43 # E2AE 6F05 # E2AF 6EFD # E2B0 6EF6 # E2B1 6F39 # E2B2 6F1C # E2B3 6EFC # E2B4 6F3A # E2B5 6F1F # E2B6 6F0D # E2B7 6F1E # E2B8 6F08 # E2B9 6F21 # E2BA 7187 # E2BB 7190 # E2BC 7189 # E2BD 7180 # E2BE 7185 # E2BF 7182 # E2C0 718F # E2C1 717B # E2C2 7186 # E2C3 7181 # E2C4 7197 # E2C5 7244 # E2C6 7253 # E2C7 7297 # E2C8 7295 # E2C9 7293 # E2CA 7343 # E2CB 734D # E2CC 7351 # E2CD 734C # E2CE 7462 # E2CF 7473 # E2D0 7471 # E2D1 7475 # E2D2 7472 # E2D3 7467 # E2D4 746E # E2D5 7500 # E2D6 7502 # E2D7 7503 # E2D8 757D # E2D9 7590 # E2DA 7616 # E2DB 7608 # E2DC 760C # E2DD 7615 # E2DE 7611 # E2DF 760A # E2E0 7614 # E2E1 76B8 # E2E2 7781 # E2E3 777C # E2E4 7785 # E2E5 7782 # E2E6 776E # E2E7 7780 # E2E8 776F # E2E9 777E # E2EA 7783 # E2EB 78B2 # E2EC 78AA # E2ED 78B4 # E2EE 78AD # E2EF 78A8 # E2F0 787E # E2F1 78AB # E2F2 789E # E2F3 78A5 # E2F4 78A0 # E2F5 78AC # E2F6 78A2 # E2F7 78A4 # E2F8 7998 # E2F9 798A # E2FA 798B # E2FB 7996 # E2FC 7995 # E2FD 7994 # E2FE 7993 # E340 7997 # E341 7988 # E342 7992 # E343 7990 # E344 7A2B # E345 7A4A # E346 7A30 # E347 7A2F # E348 7A28 # E349 7A26 # E34A 7AA8 # E34B 7AAB # E34C 7AAC # E34D 7AEE # E34E 7B88 # E34F 7B9C # E350 7B8A # E351 7B91 # E352 7B90 # E353 7B96 # E354 7B8D # E355 7B8C # E356 7B9B # E357 7B8E # E358 7B85 # E359 7B98 # E35A 5284 # E35B 7B99 # E35C 7BA4 # E35D 7B82 # E35E 7CBB # E35F 7CBF # E360 7CBC # E361 7CBA # E362 7DA7 # E363 7DB7 # E364 7DC2 # E365 7DA3 # E366 7DAA # E367 7DC1 # E368 7DC0 # E369 7DC5 # E36A 7D9D # E36B 7DCE # E36C 7DC4 # E36D 7DC6 # E36E 7DCB # E36F 7DCC # E370 7DAF # E371 7DB9 # E372 7D96 # E373 7DBC # E374 7D9F # E375 7DA6 # E376 7DAE # E377 7DA9 # E378 7DA1 # E379 7DC9 # E37A 7F73 # E37B 7FE2 # E37C 7FE3 # E37D 7FE5 # E37E 7FDE # E3A1 8024 # E3A2 805D # E3A3 805C # E3A4 8189 # E3A5 8186 # E3A6 8183 # E3A7 8187 # E3A8 818D # E3A9 818C # E3AA 818B # E3AB 8215 # E3AC 8497 # E3AD 84A4 # E3AE 84A1 # E3AF 849F # E3B0 84BA # E3B1 84CE # E3B2 84C2 # E3B3 84AC # E3B4 84AE # E3B5 84AB # E3B6 84B9 # E3B7 84B4 # E3B8 84C1 # E3B9 84CD # E3BA 84AA # E3BB 849A # E3BC 84B1 # E3BD 84D0 # E3BE 849D # E3BF 84A7 # E3C0 84BB # E3C1 84A2 # E3C2 8494 # E3C3 84C7 # E3C4 84CC # E3C5 849B # E3C6 84A9 # E3C7 84AF # E3C8 84A8 # E3C9 84D6 # E3CA 8498 # E3CB 84B6 # E3CC 84CF # E3CD 84A0 # E3CE 84D7 # E3CF 84D4 # E3D0 84D2 # E3D1 84DB # E3D2 84B0 # E3D3 8491 # E3D4 8661 # E3D5 8733 # E3D6 8723 # E3D7 8728 # E3D8 876B # E3D9 8740 # E3DA 872E # E3DB 871E # E3DC 8721 # E3DD 8719 # E3DE 871B # E3DF 8743 # E3E0 872C # E3E1 8741 # E3E2 873E # E3E3 8746 # E3E4 8720 # E3E5 8732 # E3E6 872A # E3E7 872D # E3E8 873C # E3E9 8712 # E3EA 873A # E3EB 8731 # E3EC 8735 # E3ED 8742 # E3EE 8726 # E3EF 8727 # E3F0 8738 # E3F1 8724 # E3F2 871A # E3F3 8730 # E3F4 8711 # E3F5 88F7 # E3F6 88E7 # E3F7 88F1 # E3F8 88F2 # E3F9 88FA # E3FA 88FE # E3FB 88EE # E3FC 88FC # E3FD 88F6 # E3FE 88FB # E440 88F0 # E441 88EC # E442 88EB # E443 899D # E444 89A1 # E445 899F # E446 899E # E447 89E9 # E448 89EB # E449 89E8 # E44A 8AAB # E44B 8A99 # E44C 8A8B # E44D 8A92 # E44E 8A8F # E44F 8A96 # E450 8C3D # E451 8C68 # E452 8C69 # E453 8CD5 # E454 8CCF # E455 8CD7 # E456 8D96 # E457 8E09 # E458 8E02 # E459 8DFF # E45A 8E0D # E45B 8DFD # E45C 8E0A # E45D 8E03 # E45E 8E07 # E45F 8E06 # E460 8E05 # E461 8DFE # E462 8E00 # E463 8E04 # E464 8F10 # E465 8F11 # E466 8F0E # E467 8F0D # E468 9123 # E469 911C # E46A 9120 # E46B 9122 # E46C 911F # E46D 911D # E46E 911A # E46F 9124 # E470 9121 # E471 911B # E472 917A # E473 9172 # E474 9179 # E475 9173 # E476 92A5 # E477 92A4 # E478 9276 # E479 929B # E47A 927A # E47B 92A0 # E47C 9294 # E47D 92AA # E47E 928D # E4A1 92A6 # E4A2 929A # E4A3 92AB # E4A4 9279 # E4A5 9297 # E4A6 927F # E4A7 92A3 # E4A8 92EE # E4A9 928E # E4AA 9282 # E4AB 9295 # E4AC 92A2 # E4AD 927D # E4AE 9288 # E4AF 92A1 # E4B0 928A # E4B1 9286 # E4B2 928C # E4B3 9299 # E4B4 92A7 # E4B5 927E # E4B6 9287 # E4B7 92A9 # E4B8 929D # E4B9 928B # E4BA 922D # E4BB 969E # E4BC 96A1 # E4BD 96FF # E4BE 9758 # E4BF 977D # E4C0 977A # E4C1 977E # E4C2 9783 # E4C3 9780 # E4C4 9782 # E4C5 977B # E4C6 9784 # E4C7 9781 # E4C8 977F # E4C9 97CE # E4CA 97CD # E4CB 9816 # E4CC 98AD # E4CD 98AE # E4CE 9902 # E4CF 9900 # E4D0 9907 # E4D1 999D # E4D2 999C # E4D3 99C3 # E4D4 99B9 # E4D5 99BB # E4D6 99BA # E4D7 99C2 # E4D8 99BD # E4D9 99C7 # E4DA 9AB1 # E4DB 9AE3 # E4DC 9AE7 # E4DD 9B3E # E4DE 9B3F # E4DF 9B60 # E4E0 9B61 # E4E1 9B5F # E4E2 9CF1 # E4E3 9CF2 # E4E4 9CF5 # E4E5 9EA7 # E4E6 50FF # E4E7 5103 # E4E8 5130 # E4E9 50F8 # E4EA 5106 # E4EB 5107 # E4EC 50F6 # E4ED 50FE # E4EE 510B # E4EF 510C # E4F0 50FD # E4F1 510A # E4F2 528B # E4F3 528C # E4F4 52F1 # E4F5 52EF # E4F6 5648 # E4F7 5642 # E4F8 564C # E4F9 5635 # E4FA 5641 # E4FB 564A # E4FC 5649 # E4FD 5646 # E4FE 5658 # E540 565A # E541 5640 # E542 5633 # E543 563D # E544 562C # E545 563E # E546 5638 # E547 562A # E548 563A # E549 571A # E54A 58AB # E54B 589D # E54C 58B1 # E54D 58A0 # E54E 58A3 # E54F 58AF # E550 58AC # E551 58A5 # E552 58A1 # E553 58FF # E554 5AFF # E555 5AF4 # E556 5AFD # E557 5AF7 # E558 5AF6 # E559 5B03 # E55A 5AF8 # E55B 5B02 # E55C 5AF9 # E55D 5B01 # E55E 5B07 # E55F 5B05 # E560 5B0F # E561 5C67 # E562 5D99 # E563 5D97 # E564 5D9F # E565 5D92 # E566 5DA2 # E567 5D93 # E568 5D95 # E569 5DA0 # E56A 5D9C # E56B 5DA1 # E56C 5D9A # E56D 5D9E # E56E 5E69 # E56F 5E5D # E570 5E60 # E571 5E5C # E572 7DF3 # E573 5EDB # E574 5EDE # E575 5EE1 # E576 5F49 # E577 5FB2 # E578 618B # E579 6183 # E57A 6179 # E57B 61B1 # E57C 61B0 # E57D 61A2 # E57E 6189 # E5A1 619B # E5A2 6193 # E5A3 61AF # E5A4 61AD # E5A5 619F # E5A6 6192 # E5A7 61AA # E5A8 61A1 # E5A9 618D # E5AA 6166 # E5AB 61B3 # E5AC 622D # E5AD 646E # E5AE 6470 # E5AF 6496 # E5B0 64A0 # E5B1 6485 # E5B2 6497 # E5B3 649C # E5B4 648F # E5B5 648B # E5B6 648A # E5B7 648C # E5B8 64A3 # E5B9 649F # E5BA 6468 # E5BB 64B1 # E5BC 6498 # E5BD 6576 # E5BE 657A # E5BF 6579 # E5C0 657B # E5C1 65B2 # E5C2 65B3 # E5C3 66B5 # E5C4 66B0 # E5C5 66A9 # E5C6 66B2 # E5C7 66B7 # E5C8 66AA # E5C9 66AF # E5CA 6A00 # E5CB 6A06 # E5CC 6A17 # E5CD 69E5 # E5CE 69F8 # E5CF 6A15 # E5D0 69F1 # E5D1 69E4 # E5D2 6A20 # E5D3 69FF # E5D4 69EC # E5D5 69E2 # E5D6 6A1B # E5D7 6A1D # E5D8 69FE # E5D9 6A27 # E5DA 69F2 # E5DB 69EE # E5DC 6A14 # E5DD 69F7 # E5DE 69E7 # E5DF 6A40 # E5E0 6A08 # E5E1 69E6 # E5E2 69FB # E5E3 6A0D # E5E4 69FC # E5E5 69EB # E5E6 6A09 # E5E7 6A04 # E5E8 6A18 # E5E9 6A25 # E5EA 6A0F # E5EB 69F6 # E5EC 6A26 # E5ED 6A07 # E5EE 69F4 # E5EF 6A16 # E5F0 6B51 # E5F1 6BA5 # E5F2 6BA3 # E5F3 6BA2 # E5F4 6BA6 # E5F5 6C01 # E5F6 6C00 # E5F7 6BFF # E5F8 6C02 # E5F9 6F41 # E5FA 6F26 # E5FB 6F7E # E5FC 6F87 # E5FD 6FC6 # E5FE 6F92 # E640 6F8D # E641 6F89 # E642 6F8C # E643 6F62 # E644 6F4F # E645 6F85 # E646 6F5A # E647 6F96 # E648 6F76 # E649 6F6C # E64A 6F82 # E64B 6F55 # E64C 6F72 # E64D 6F52 # E64E 6F50 # E64F 6F57 # E650 6F94 # E651 6F93 # E652 6F5D # E653 6F00 # E654 6F61 # E655 6F6B # E656 6F7D # E657 6F67 # E658 6F90 # E659 6F53 # E65A 6F8B # E65B 6F69 # E65C 6F7F # E65D 6F95 # E65E 6F63 # E65F 6F77 # E660 6F6A # E661 6F7B # E662 71B2 # E663 71AF # E664 719B # E665 71B0 # E666 71A0 # E667 719A # E668 71A9 # E669 71B5 # E66A 719D # E66B 71A5 # E66C 719E # E66D 71A4 # E66E 71A1 # E66F 71AA # E670 719C # E671 71A7 # E672 71B3 # E673 7298 # E674 729A # E675 7358 # E676 7352 # E677 735E # E678 735F # E679 7360 # E67A 735D # E67B 735B # E67C 7361 # E67D 735A # E67E 7359 # E6A1 7362 # E6A2 7487 # E6A3 7489 # E6A4 748A # E6A5 7486 # E6A6 7481 # E6A7 747D # E6A8 7485 # E6A9 7488 # E6AA 747C # E6AB 7479 # E6AC 7508 # E6AD 7507 # E6AE 757E # E6AF 7625 # E6B0 761E # E6B1 7619 # E6B2 761D # E6B3 761C # E6B4 7623 # E6B5 761A # E6B6 7628 # E6B7 761B # E6B8 769C # E6B9 769D # E6BA 769E # E6BB 769B # E6BC 778D # E6BD 778F # E6BE 7789 # E6BF 7788 # E6C0 78CD # E6C1 78BB # E6C2 78CF # E6C3 78CC # E6C4 78D1 # E6C5 78CE # E6C6 78D4 # E6C7 78C8 # E6C8 78C3 # E6C9 78C4 # E6CA 78C9 # E6CB 799A # E6CC 79A1 # E6CD 79A0 # E6CE 799C # E6CF 79A2 # E6D0 799B # E6D1 6B76 # E6D2 7A39 # E6D3 7AB2 # E6D4 7AB4 # E6D5 7AB3 # E6D6 7BB7 # E6D7 7BCB # E6D8 7BBE # E6D9 7BAC # E6DA 7BCE # E6DB 7BAF # E6DC 7BB9 # E6DD 7BCA # E6DE 7BB5 # E6DF 7CC5 # E6E0 7CC8 # E6E1 7CCC # E6E2 7CCB # E6E3 7DF7 # E6E4 7DDB # E6E5 7DEA # E6E6 7DE7 # E6E7 7DD7 # E6E8 7DE1 # E6E9 7E03 # E6EA 7DFA # E6EB 7DE6 # E6EC 7DF6 # E6ED 7DF1 # E6EE 7DF0 # E6EF 7DEE # E6F0 7DDF # E6F1 7F76 # E6F2 7FAC # E6F3 7FB0 # E6F4 7FAD # E6F5 7FED # E6F6 7FEB # E6F7 7FEA # E6F8 7FEC # E6F9 7FE6 # E6FA 7FE8 # E6FB 8064 # E6FC 8067 # E6FD 81A3 # E6FE 819F # E740 819E # E741 8195 # E742 81A2 # E743 8199 # E744 8197 # E745 8216 # E746 824F # E747 8253 # E748 8252 # E749 8250 # E74A 824E # E74B 8251 # E74C 8524 # E74D 853B # E74E 850F # E74F 8500 # E750 8529 # E751 850E # E752 8509 # E753 850D # E754 851F # E755 850A # E756 8527 # E757 851C # E758 84FB # E759 852B # E75A 84FA # E75B 8508 # E75C 850C # E75D 84F4 # E75E 852A # E75F 84F2 # E760 8515 # E761 84F7 # E762 84EB # E763 84F3 # E764 84FC # E765 8512 # E766 84EA # E767 84E9 # E768 8516 # E769 84FE # E76A 8528 # E76B 851D # E76C 852E # E76D 8502 # E76E 84FD # E76F 851E # E770 84F6 # E771 8531 # E772 8526 # E773 84E7 # E774 84E8 # E775 84F0 # E776 84EF # E777 84F9 # E778 8518 # E779 8520 # E77A 8530 # E77B 850B # E77C 8519 # E77D 852F # E77E 8662 # E7A1 8756 # E7A2 8763 # E7A3 8764 # E7A4 8777 # E7A5 87E1 # E7A6 8773 # E7A7 8758 # E7A8 8754 # E7A9 875B # E7AA 8752 # E7AB 8761 # E7AC 875A # E7AD 8751 # E7AE 875E # E7AF 876D # E7B0 876A # E7B1 8750 # E7B2 874E # E7B3 875F # E7B4 875D # E7B5 876F # E7B6 876C # E7B7 877A # E7B8 876E # E7B9 875C # E7BA 8765 # E7BB 874F # E7BC 877B # E7BD 8775 # E7BE 8762 # E7BF 8767 # E7C0 8769 # E7C1 885A # E7C2 8905 # E7C3 890C # E7C4 8914 # E7C5 890B # E7C6 8917 # E7C7 8918 # E7C8 8919 # E7C9 8906 # E7CA 8916 # E7CB 8911 # E7CC 890E # E7CD 8909 # E7CE 89A2 # E7CF 89A4 # E7D0 89A3 # E7D1 89ED # E7D2 89F0 # E7D3 89EC # E7D4 8ACF # E7D5 8AC6 # E7D6 8AB8 # E7D7 8AD3 # E7D8 8AD1 # E7D9 8AD4 # E7DA 8AD5 # E7DB 8ABB # E7DC 8AD7 # E7DD 8ABE # E7DE 8AC0 # E7DF 8AC5 # E7E0 8AD8 # E7E1 8AC3 # E7E2 8ABA # E7E3 8ABD # E7E4 8AD9 # E7E5 8C3E # E7E6 8C4D # E7E7 8C8F # E7E8 8CE5 # E7E9 8CDF # E7EA 8CD9 # E7EB 8CE8 # E7EC 8CDA # E7ED 8CDD # E7EE 8CE7 # E7EF 8DA0 # E7F0 8D9C # E7F1 8DA1 # E7F2 8D9B # E7F3 8E20 # E7F4 8E23 # E7F5 8E25 # E7F6 8E24 # E7F7 8E2E # E7F8 8E15 # E7F9 8E1B # E7FA 8E16 # E7FB 8E11 # E7FC 8E19 # E7FD 8E26 # E7FE 8E27 # E840 8E14 # E841 8E12 # E842 8E18 # E843 8E13 # E844 8E1C # E845 8E17 # E846 8E1A # E847 8F2C # E848 8F24 # E849 8F18 # E84A 8F1A # E84B 8F20 # E84C 8F23 # E84D 8F16 # E84E 8F17 # E84F 9073 # E850 9070 # E851 906F # E852 9067 # E853 906B # E854 912F # E855 912B # E856 9129 # E857 912A # E858 9132 # E859 9126 # E85A 912E # E85B 9185 # E85C 9186 # E85D 918A # E85E 9181 # E85F 9182 # E860 9184 # E861 9180 # E862 92D0 # E863 92C3 # E864 92C4 # E865 92C0 # E866 92D9 # E867 92B6 # E868 92CF # E869 92F1 # E86A 92DF # E86B 92D8 # E86C 92E9 # E86D 92D7 # E86E 92DD # E86F 92CC # E870 92EF # E871 92C2 # E872 92E8 # E873 92CA # E874 92C8 # E875 92CE # E876 92E6 # E877 92CD # E878 92D5 # E879 92C9 # E87A 92E0 # E87B 92DE # E87C 92E7 # E87D 92D1 # E87E 92D3 # E8A1 92B5 # E8A2 92E1 # E8A3 92C6 # E8A4 92B4 # E8A5 957C # E8A6 95AC # E8A7 95AB # E8A8 95AE # E8A9 95B0 # E8AA 96A4 # E8AB 96A2 # E8AC 96D3 # E8AD 9705 # E8AE 9708 # E8AF 9702 # E8B0 975A # E8B1 978A # E8B2 978E # E8B3 9788 # E8B4 97D0 # E8B5 97CF # E8B6 981E # E8B7 981D # E8B8 9826 # E8B9 9829 # E8BA 9828 # E8BB 9820 # E8BC 981B # E8BD 9827 # E8BE 98B2 # E8BF 9908 # E8C0 98FA # E8C1 9911 # E8C2 9914 # E8C3 9916 # E8C4 9917 # E8C5 9915 # E8C6 99DC # E8C7 99CD # E8C8 99CF # E8C9 99D3 # E8CA 99D4 # E8CB 99CE # E8CC 99C9 # E8CD 99D6 # E8CE 99D8 # E8CF 99CB # E8D0 99D7 # E8D1 99CC # E8D2 9AB3 # E8D3 9AEC # E8D4 9AEB # E8D5 9AF3 # E8D6 9AF2 # E8D7 9AF1 # E8D8 9B46 # E8D9 9B43 # E8DA 9B67 # E8DB 9B74 # E8DC 9B71 # E8DD 9B66 # E8DE 9B76 # E8DF 9B75 # E8E0 9B70 # E8E1 9B68 # E8E2 9B64 # E8E3 9B6C # E8E4 9CFC # E8E5 9CFA # E8E6 9CFD # E8E7 9CFF # E8E8 9CF7 # E8E9 9D07 # E8EA 9D00 # E8EB 9CF9 # E8EC 9CFB # E8ED 9D08 # E8EE 9D05 # E8EF 9D04 # E8F0 9E83 # E8F1 9ED3 # E8F2 9F0F # E8F3 9F10 # E8F4 511C # E8F5 5113 # E8F6 5117 # E8F7 511A # E8F8 5111 # E8F9 51DE # E8FA 5334 # E8FB 53E1 # E8FC 5670 # E8FD 5660 # E8FE 566E # E940 5673 # E941 5666 # E942 5663 # E943 566D # E944 5672 # E945 565E # E946 5677 # E947 571C # E948 571B # E949 58C8 # E94A 58BD # E94B 58C9 # E94C 58BF # E94D 58BA # E94E 58C2 # E94F 58BC # E950 58C6 # E951 5B17 # E952 5B19 # E953 5B1B # E954 5B21 # E955 5B14 # E956 5B13 # E957 5B10 # E958 5B16 # E959 5B28 # E95A 5B1A # E95B 5B20 # E95C 5B1E # E95D 5BEF # E95E 5DAC # E95F 5DB1 # E960 5DA9 # E961 5DA7 # E962 5DB5 # E963 5DB0 # E964 5DAE # E965 5DAA # E966 5DA8 # E967 5DB2 # E968 5DAD # E969 5DAF # E96A 5DB4 # E96B 5E67 # E96C 5E68 # E96D 5E66 # E96E 5E6F # E96F 5EE9 # E970 5EE7 # E971 5EE6 # E972 5EE8 # E973 5EE5 # E974 5F4B # E975 5FBC # E976 619D # E977 61A8 # E978 6196 # E979 61C5 # E97A 61B4 # E97B 61C6 # E97C 61C1 # E97D 61CC # E97E 61BA # E9A1 61BF # E9A2 61B8 # E9A3 618C # E9A4 64D7 # E9A5 64D6 # E9A6 64D0 # E9A7 64CF # E9A8 64C9 # E9A9 64BD # E9AA 6489 # E9AB 64C3 # E9AC 64DB # E9AD 64F3 # E9AE 64D9 # E9AF 6533 # E9B0 657F # E9B1 657C # E9B2 65A2 # E9B3 66C8 # E9B4 66BE # E9B5 66C0 # E9B6 66CA # E9B7 66CB # E9B8 66CF # E9B9 66BD # E9BA 66BB # E9BB 66BA # E9BC 66CC # E9BD 6723 # E9BE 6A34 # E9BF 6A66 # E9C0 6A49 # E9C1 6A67 # E9C2 6A32 # E9C3 6A68 # E9C4 6A3E # E9C5 6A5D # E9C6 6A6D # E9C7 6A76 # E9C8 6A5B # E9C9 6A51 # E9CA 6A28 # E9CB 6A5A # E9CC 6A3B # E9CD 6A3F # E9CE 6A41 # E9CF 6A6A # E9D0 6A64 # E9D1 6A50 # E9D2 6A4F # E9D3 6A54 # E9D4 6A6F # E9D5 6A69 # E9D6 6A60 # E9D7 6A3C # E9D8 6A5E # E9D9 6A56 # E9DA 6A55 # E9DB 6A4D # E9DC 6A4E # E9DD 6A46 # E9DE 6B55 # E9DF 6B54 # E9E0 6B56 # E9E1 6BA7 # E9E2 6BAA # E9E3 6BAB # E9E4 6BC8 # E9E5 6BC7 # E9E6 6C04 # E9E7 6C03 # E9E8 6C06 # E9E9 6FAD # E9EA 6FCB # E9EB 6FA3 # E9EC 6FC7 # E9ED 6FBC # E9EE 6FCE # E9EF 6FC8 # E9F0 6F5E # E9F1 6FC4 # E9F2 6FBD # E9F3 6F9E # E9F4 6FCA # E9F5 6FA8 # E9F6 7004 # E9F7 6FA5 # E9F8 6FAE # E9F9 6FBA # E9FA 6FAC # E9FB 6FAA # E9FC 6FCF # E9FD 6FBF # E9FE 6FB8 # EA40 6FA2 # EA41 6FC9 # EA42 6FAB # EA43 6FCD # EA44 6FAF # EA45 6FB2 # EA46 6FB0 # EA47 71C5 # EA48 71C2 # EA49 71BF # EA4A 71B8 # EA4B 71D6 # EA4C 71C0 # EA4D 71C1 # EA4E 71CB # EA4F 71D4 # EA50 71CA # EA51 71C7 # EA52 71CF # EA53 71BD # EA54 71D8 # EA55 71BC # EA56 71C6 # EA57 71DA # EA58 71DB # EA59 729D # EA5A 729E # EA5B 7369 # EA5C 7366 # EA5D 7367 # EA5E 736C # EA5F 7365 # EA60 736B # EA61 736A # EA62 747F # EA63 749A # EA64 74A0 # EA65 7494 # EA66 7492 # EA67 7495 # EA68 74A1 # EA69 750B # EA6A 7580 # EA6B 762F # EA6C 762D # EA6D 7631 # EA6E 763D # EA6F 7633 # EA70 763C # EA71 7635 # EA72 7632 # EA73 7630 # EA74 76BB # EA75 76E6 # EA76 779A # EA77 779D # EA78 77A1 # EA79 779C # EA7A 779B # EA7B 77A2 # EA7C 77A3 # EA7D 7795 # EA7E 7799 # EAA1 7797 # EAA2 78DD # EAA3 78E9 # EAA4 78E5 # EAA5 78EA # EAA6 78DE # EAA7 78E3 # EAA8 78DB # EAA9 78E1 # EAAA 78E2 # EAAB 78ED # EAAC 78DF # EAAD 78E0 # EAAE 79A4 # EAAF 7A44 # EAB0 7A48 # EAB1 7A47 # EAB2 7AB6 # EAB3 7AB8 # EAB4 7AB5 # EAB5 7AB1 # EAB6 7AB7 # EAB7 7BDE # EAB8 7BE3 # EAB9 7BE7 # EABA 7BDD # EABB 7BD5 # EABC 7BE5 # EABD 7BDA # EABE 7BE8 # EABF 7BF9 # EAC0 7BD4 # EAC1 7BEA # EAC2 7BE2 # EAC3 7BDC # EAC4 7BEB # EAC5 7BD8 # EAC6 7BDF # EAC7 7CD2 # EAC8 7CD4 # EAC9 7CD7 # EACA 7CD0 # EACB 7CD1 # EACC 7E12 # EACD 7E21 # EACE 7E17 # EACF 7E0C # EAD0 7E1F # EAD1 7E20 # EAD2 7E13 # EAD3 7E0E # EAD4 7E1C # EAD5 7E15 # EAD6 7E1A # EAD7 7E22 # EAD8 7E0B # EAD9 7E0F # EADA 7E16 # EADB 7E0D # EADC 7E14 # EADD 7E25 # EADE 7E24 # EADF 7F43 # EAE0 7F7B # EAE1 7F7C # EAE2 7F7A # EAE3 7FB1 # EAE4 7FEF # EAE5 802A # EAE6 8029 # EAE7 806C # EAE8 81B1 # EAE9 81A6 # EAEA 81AE # EAEB 81B9 # EAEC 81B5 # EAED 81AB # EAEE 81B0 # EAEF 81AC # EAF0 81B4 # EAF1 81B2 # EAF2 81B7 # EAF3 81A7 # EAF4 81F2 # EAF5 8255 # EAF6 8256 # EAF7 8257 # EAF8 8556 # EAF9 8545 # EAFA 856B # EAFB 854D # EAFC 8553 # EAFD 8561 # EAFE 8558 # EB40 8540 # EB41 8546 # EB42 8564 # EB43 8541 # EB44 8562 # EB45 8544 # EB46 8551 # EB47 8547 # EB48 8563 # EB49 853E # EB4A 855B # EB4B 8571 # EB4C 854E # EB4D 856E # EB4E 8575 # EB4F 8555 # EB50 8567 # EB51 8560 # EB52 858C # EB53 8566 # EB54 855D # EB55 8554 # EB56 8565 # EB57 856C # EB58 8663 # EB59 8665 # EB5A 8664 # EB5B 879B # EB5C 878F # EB5D 8797 # EB5E 8793 # EB5F 8792 # EB60 8788 # EB61 8781 # EB62 8796 # EB63 8798 # EB64 8779 # EB65 8787 # EB66 87A3 # EB67 8785 # EB68 8790 # EB69 8791 # EB6A 879D # EB6B 8784 # EB6C 8794 # EB6D 879C # EB6E 879A # EB6F 8789 # EB70 891E # EB71 8926 # EB72 8930 # EB73 892D # EB74 892E # EB75 8927 # EB76 8931 # EB77 8922 # EB78 8929 # EB79 8923 # EB7A 892F # EB7B 892C # EB7C 891F # EB7D 89F1 # EB7E 8AE0 # EBA1 8AE2 # EBA2 8AF2 # EBA3 8AF4 # EBA4 8AF5 # EBA5 8ADD # EBA6 8B14 # EBA7 8AE4 # EBA8 8ADF # EBA9 8AF0 # EBAA 8AC8 # EBAB 8ADE # EBAC 8AE1 # EBAD 8AE8 # EBAE 8AFF # EBAF 8AEF # EBB0 8AFB # EBB1 8C91 # EBB2 8C92 # EBB3 8C90 # EBB4 8CF5 # EBB5 8CEE # EBB6 8CF1 # EBB7 8CF0 # EBB8 8CF3 # EBB9 8D6C # EBBA 8D6E # EBBB 8DA5 # EBBC 8DA7 # EBBD 8E33 # EBBE 8E3E # EBBF 8E38 # EBC0 8E40 # EBC1 8E45 # EBC2 8E36 # EBC3 8E3C # EBC4 8E3D # EBC5 8E41 # EBC6 8E30 # EBC7 8E3F # EBC8 8EBD # EBC9 8F36 # EBCA 8F2E # EBCB 8F35 # EBCC 8F32 # EBCD 8F39 # EBCE 8F37 # EBCF 8F34 # EBD0 9076 # EBD1 9079 # EBD2 907B # EBD3 9086 # EBD4 90FA # EBD5 9133 # EBD6 9135 # EBD7 9136 # EBD8 9193 # EBD9 9190 # EBDA 9191 # EBDB 918D # EBDC 918F # EBDD 9327 # EBDE 931E # EBDF 9308 # EBE0 931F # EBE1 9306 # EBE2 930F # EBE3 937A # EBE4 9338 # EBE5 933C # EBE6 931B # EBE7 9323 # EBE8 9312 # EBE9 9301 # EBEA 9346 # EBEB 932D # EBEC 930E # EBED 930D # EBEE 92CB # EBEF 931D # EBF0 92FA # EBF1 9325 # EBF2 9313 # EBF3 92F9 # EBF4 92F7 # EBF5 9334 # EBF6 9302 # EBF7 9324 # EBF8 92FF # EBF9 9329 # EBFA 9339 # EBFB 9335 # EBFC 932A # EBFD 9314 # EBFE 930C # EC40 930B # EC41 92FE # EC42 9309 # EC43 9300 # EC44 92FB # EC45 9316 # EC46 95BC # EC47 95CD # EC48 95BE # EC49 95B9 # EC4A 95BA # EC4B 95B6 # EC4C 95BF # EC4D 95B5 # EC4E 95BD # EC4F 96A9 # EC50 96D4 # EC51 970B # EC52 9712 # EC53 9710 # EC54 9799 # EC55 9797 # EC56 9794 # EC57 97F0 # EC58 97F8 # EC59 9835 # EC5A 982F # EC5B 9832 # EC5C 9924 # EC5D 991F # EC5E 9927 # EC5F 9929 # EC60 999E # EC61 99EE # EC62 99EC # EC63 99E5 # EC64 99E4 # EC65 99F0 # EC66 99E3 # EC67 99EA # EC68 99E9 # EC69 99E7 # EC6A 9AB9 # EC6B 9ABF # EC6C 9AB4 # EC6D 9ABB # EC6E 9AF6 # EC6F 9AFA # EC70 9AF9 # EC71 9AF7 # EC72 9B33 # EC73 9B80 # EC74 9B85 # EC75 9B87 # EC76 9B7C # EC77 9B7E # EC78 9B7B # EC79 9B82 # EC7A 9B93 # EC7B 9B92 # EC7C 9B90 # EC7D 9B7A # EC7E 9B95 # ECA1 9B7D # ECA2 9B88 # ECA3 9D25 # ECA4 9D17 # ECA5 9D20 # ECA6 9D1E # ECA7 9D14 # ECA8 9D29 # ECA9 9D1D # ECAA 9D18 # ECAB 9D22 # ECAC 9D10 # ECAD 9D19 # ECAE 9D1F # ECAF 9E88 # ECB0 9E86 # ECB1 9E87 # ECB2 9EAE # ECB3 9EAD # ECB4 9ED5 # ECB5 9ED6 # ECB6 9EFA # ECB7 9F12 # ECB8 9F3D # ECB9 5126 # ECBA 5125 # ECBB 5122 # ECBC 5124 # ECBD 5120 # ECBE 5129 # ECBF 52F4 # ECC0 5693 # ECC1 568C # ECC2 568D # ECC3 5686 # ECC4 5684 # ECC5 5683 # ECC6 567E # ECC7 5682 # ECC8 567F # ECC9 5681 # ECCA 58D6 # ECCB 58D4 # ECCC 58CF # ECCD 58D2 # ECCE 5B2D # ECCF 5B25 # ECD0 5B32 # ECD1 5B23 # ECD2 5B2C # ECD3 5B27 # ECD4 5B26 # ECD5 5B2F # ECD6 5B2E # ECD7 5B7B # ECD8 5BF1 # ECD9 5BF2 # ECDA 5DB7 # ECDB 5E6C # ECDC 5E6A # ECDD 5FBE # ECDE 5FBB # ECDF 61C3 # ECE0 61B5 # ECE1 61BC # ECE2 61E7 # ECE3 61E0 # ECE4 61E5 # ECE5 61E4 # ECE6 61E8 # ECE7 61DE # ECE8 64EF # ECE9 64E9 # ECEA 64E3 # ECEB 64EB # ECEC 64E4 # ECED 64E8 # ECEE 6581 # ECEF 6580 # ECF0 65B6 # ECF1 65DA # ECF2 66D2 # ECF3 6A8D # ECF4 6A96 # ECF5 6A81 # ECF6 6AA5 # ECF7 6A89 # ECF8 6A9F # ECF9 6A9B # ECFA 6AA1 # ECFB 6A9E # ECFC 6A87 # ECFD 6A93 # ECFE 6A8E # ED40 6A95 # ED41 6A83 # ED42 6AA8 # ED43 6AA4 # ED44 6A91 # ED45 6A7F # ED46 6AA6 # ED47 6A9A # ED48 6A85 # ED49 6A8C # ED4A 6A92 # ED4B 6B5B # ED4C 6BAD # ED4D 6C09 # ED4E 6FCC # ED4F 6FA9 # ED50 6FF4 # ED51 6FD4 # ED52 6FE3 # ED53 6FDC # ED54 6FED # ED55 6FE7 # ED56 6FE6 # ED57 6FDE # ED58 6FF2 # ED59 6FDD # ED5A 6FE2 # ED5B 6FE8 # ED5C 71E1 # ED5D 71F1 # ED5E 71E8 # ED5F 71F2 # ED60 71E4 # ED61 71F0 # ED62 71E2 # ED63 7373 # ED64 736E # ED65 736F # ED66 7497 # ED67 74B2 # ED68 74AB # ED69 7490 # ED6A 74AA # ED6B 74AD # ED6C 74B1 # ED6D 74A5 # ED6E 74AF # ED6F 7510 # ED70 7511 # ED71 7512 # ED72 750F # ED73 7584 # ED74 7643 # ED75 7648 # ED76 7649 # ED77 7647 # ED78 76A4 # ED79 76E9 # ED7A 77B5 # ED7B 77AB # ED7C 77B2 # ED7D 77B7 # ED7E 77B6 # EDA1 77B4 # EDA2 77B1 # EDA3 77A8 # EDA4 77F0 # EDA5 78F3 # EDA6 78FD # EDA7 7902 # EDA8 78FB # EDA9 78FC # EDAA 78F2 # EDAB 7905 # EDAC 78F9 # EDAD 78FE # EDAE 7904 # EDAF 79AB # EDB0 79A8 # EDB1 7A5C # EDB2 7A5B # EDB3 7A56 # EDB4 7A58 # EDB5 7A54 # EDB6 7A5A # EDB7 7ABE # EDB8 7AC0 # EDB9 7AC1 # EDBA 7C05 # EDBB 7C0F # EDBC 7BF2 # EDBD 7C00 # EDBE 7BFF # EDBF 7BFB # EDC0 7C0E # EDC1 7BF4 # EDC2 7C0B # EDC3 7BF3 # EDC4 7C02 # EDC5 7C09 # EDC6 7C03 # EDC7 7C01 # EDC8 7BF8 # EDC9 7BFD # EDCA 7C06 # EDCB 7BF0 # EDCC 7BF1 # EDCD 7C10 # EDCE 7C0A # EDCF 7CE8 # EDD0 7E2D # EDD1 7E3C # EDD2 7E42 # EDD3 7E33 # EDD4 9848 # EDD5 7E38 # EDD6 7E2A # EDD7 7E49 # EDD8 7E40 # EDD9 7E47 # EDDA 7E29 # EDDB 7E4C # EDDC 7E30 # EDDD 7E3B # EDDE 7E36 # EDDF 7E44 # EDE0 7E3A # EDE1 7F45 # EDE2 7F7F # EDE3 7F7E # EDE4 7F7D # EDE5 7FF4 # EDE6 7FF2 # EDE7 802C # EDE8 81BB # EDE9 81C4 # EDEA 81CC # EDEB 81CA # EDEC 81C5 # EDED 81C7 # EDEE 81BC # EDEF 81E9 # EDF0 825B # EDF1 825A # EDF2 825C # EDF3 8583 # EDF4 8580 # EDF5 858F # EDF6 85A7 # EDF7 8595 # EDF8 85A0 # EDF9 858B # EDFA 85A3 # EDFB 857B # EDFC 85A4 # EDFD 859A # EDFE 859E # EE40 8577 # EE41 857C # EE42 8589 # EE43 85A1 # EE44 857A # EE45 8578 # EE46 8557 # EE47 858E # EE48 8596 # EE49 8586 # EE4A 858D # EE4B 8599 # EE4C 859D # EE4D 8581 # EE4E 85A2 # EE4F 8582 # EE50 8588 # EE51 8585 # EE52 8579 # EE53 8576 # EE54 8598 # EE55 8590 # EE56 859F # EE57 8668 # EE58 87BE # EE59 87AA # EE5A 87AD # EE5B 87C5 # EE5C 87B0 # EE5D 87AC # EE5E 87B9 # EE5F 87B5 # EE60 87BC # EE61 87AE # EE62 87C9 # EE63 87C3 # EE64 87C2 # EE65 87CC # EE66 87B7 # EE67 87AF # EE68 87C4 # EE69 87CA # EE6A 87B4 # EE6B 87B6 # EE6C 87BF # EE6D 87B8 # EE6E 87BD # EE6F 87DE # EE70 87B2 # EE71 8935 # EE72 8933 # EE73 893C # EE74 893E # EE75 8941 # EE76 8952 # EE77 8937 # EE78 8942 # EE79 89AD # EE7A 89AF # EE7B 89AE # EE7C 89F2 # EE7D 89F3 # EE7E 8B1E # EEA1 8B18 # EEA2 8B16 # EEA3 8B11 # EEA4 8B05 # EEA5 8B0B # EEA6 8B22 # EEA7 8B0F # EEA8 8B12 # EEA9 8B15 # EEAA 8B07 # EEAB 8B0D # EEAC 8B08 # EEAD 8B06 # EEAE 8B1C # EEAF 8B13 # EEB0 8B1A # EEB1 8C4F # EEB2 8C70 # EEB3 8C72 # EEB4 8C71 # EEB5 8C6F # EEB6 8C95 # EEB7 8C94 # EEB8 8CF9 # EEB9 8D6F # EEBA 8E4E # EEBB 8E4D # EEBC 8E53 # EEBD 8E50 # EEBE 8E4C # EEBF 8E47 # EEC0 8F43 # EEC1 8F40 # EEC2 9085 # EEC3 907E # EEC4 9138 # EEC5 919A # EEC6 91A2 # EEC7 919B # EEC8 9199 # EEC9 919F # EECA 91A1 # EECB 919D # EECC 91A0 # EECD 93A1 # EECE 9383 # EECF 93AF # EED0 9364 # EED1 9356 # EED2 9347 # EED3 937C # EED4 9358 # EED5 935C # EED6 9376 # EED7 9349 # EED8 9350 # EED9 9351 # EEDA 9360 # EEDB 936D # EEDC 938F # EEDD 934C # EEDE 936A # EEDF 9379 # EEE0 9357 # EEE1 9355 # EEE2 9352 # EEE3 934F # EEE4 9371 # EEE5 9377 # EEE6 937B # EEE7 9361 # EEE8 935E # EEE9 9363 # EEEA 9367 # EEEB 9380 # EEEC 934E # EEED 9359 # EEEE 95C7 # EEEF 95C0 # EEF0 95C9 # EEF1 95C3 # EEF2 95C5 # EEF3 95B7 # EEF4 96AE # EEF5 96B0 # EEF6 96AC # EEF7 9720 # EEF8 971F # EEF9 9718 # EEFA 971D # EEFB 9719 # EEFC 979A # EEFD 97A1 # EEFE 979C # EF40 979E # EF41 979D # EF42 97D5 # EF43 97D4 # EF44 97F1 # EF45 9841 # EF46 9844 # EF47 984A # EF48 9849 # EF49 9845 # EF4A 9843 # EF4B 9925 # EF4C 992B # EF4D 992C # EF4E 992A # EF4F 9933 # EF50 9932 # EF51 992F # EF52 992D # EF53 9931 # EF54 9930 # EF55 9998 # EF56 99A3 # EF57 99A1 # EF58 9A02 # EF59 99FA # EF5A 99F4 # EF5B 99F7 # EF5C 99F9 # EF5D 99F8 # EF5E 99F6 # EF5F 99FB # EF60 99FD # EF61 99FE # EF62 99FC # EF63 9A03 # EF64 9ABE # EF65 9AFE # EF66 9AFD # EF67 9B01 # EF68 9AFC # EF69 9B48 # EF6A 9B9A # EF6B 9BA8 # EF6C 9B9E # EF6D 9B9B # EF6E 9BA6 # EF6F 9BA1 # EF70 9BA5 # EF71 9BA4 # EF72 9B86 # EF73 9BA2 # EF74 9BA0 # EF75 9BAF # EF76 9D33 # EF77 9D41 # EF78 9D67 # EF79 9D36 # EF7A 9D2E # EF7B 9D2F # EF7C 9D31 # EF7D 9D38 # EF7E 9D30 # EFA1 9D45 # EFA2 9D42 # EFA3 9D43 # EFA4 9D3E # EFA5 9D37 # EFA6 9D40 # EFA7 9D3D # EFA8 7FF5 # EFA9 9D2D # EFAA 9E8A # EFAB 9E89 # EFAC 9E8D # EFAD 9EB0 # EFAE 9EC8 # EFAF 9EDA # EFB0 9EFB # EFB1 9EFF # EFB2 9F24 # EFB3 9F23 # EFB4 9F22 # EFB5 9F54 # EFB6 9FA0 # EFB7 5131 # EFB8 512D # EFB9 512E # EFBA 5698 # EFBB 569C # EFBC 5697 # EFBD 569A # EFBE 569D # EFBF 5699 # EFC0 5970 # EFC1 5B3C # EFC2 5C69 # EFC3 5C6A # EFC4 5DC0 # EFC5 5E6D # EFC6 5E6E # EFC7 61D8 # EFC8 61DF # EFC9 61ED # EFCA 61EE # EFCB 61F1 # EFCC 61EA # EFCD 61F0 # EFCE 61EB # EFCF 61D6 # EFD0 61E9 # EFD1 64FF # EFD2 6504 # EFD3 64FD # EFD4 64F8 # EFD5 6501 # EFD6 6503 # EFD7 64FC # EFD8 6594 # EFD9 65DB # EFDA 66DA # EFDB 66DB # EFDC 66D8 # EFDD 6AC5 # EFDE 6AB9 # EFDF 6ABD # EFE0 6AE1 # EFE1 6AC6 # EFE2 6ABA # EFE3 6AB6 # EFE4 6AB7 # EFE5 6AC7 # EFE6 6AB4 # EFE7 6AAD # EFE8 6B5E # EFE9 6BC9 # EFEA 6C0B # EFEB 7007 # EFEC 700C # EFED 700D # EFEE 7001 # EFEF 7005 # EFF0 7014 # EFF1 700E # EFF2 6FFF # EFF3 7000 # EFF4 6FFB # EFF5 7026 # EFF6 6FFC # EFF7 6FF7 # EFF8 700A # EFF9 7201 # EFFA 71FF # EFFB 71F9 # EFFC 7203 # EFFD 71FD # EFFE 7376 # F040 74B8 # F041 74C0 # F042 74B5 # F043 74C1 # F044 74BE # F045 74B6 # F046 74BB # F047 74C2 # F048 7514 # F049 7513 # F04A 765C # F04B 7664 # F04C 7659 # F04D 7650 # F04E 7653 # F04F 7657 # F050 765A # F051 76A6 # F052 76BD # F053 76EC # F054 77C2 # F055 77BA # F056 78FF # F057 790C # F058 7913 # F059 7914 # F05A 7909 # F05B 7910 # F05C 7912 # F05D 7911 # F05E 79AD # F05F 79AC # F060 7A5F # F061 7C1C # F062 7C29 # F063 7C19 # F064 7C20 # F065 7C1F # F066 7C2D # F067 7C1D # F068 7C26 # F069 7C28 # F06A 7C22 # F06B 7C25 # F06C 7C30 # F06D 7E5C # F06E 7E50 # F06F 7E56 # F070 7E63 # F071 7E58 # F072 7E62 # F073 7E5F # F074 7E51 # F075 7E60 # F076 7E57 # F077 7E53 # F078 7FB5 # F079 7FB3 # F07A 7FF7 # F07B 7FF8 # F07C 8075 # F07D 81D1 # F07E 81D2 # F0A1 81D0 # F0A2 825F # F0A3 825E # F0A4 85B4 # F0A5 85C6 # F0A6 85C0 # F0A7 85C3 # F0A8 85C2 # F0A9 85B3 # F0AA 85B5 # F0AB 85BD # F0AC 85C7 # F0AD 85C4 # F0AE 85BF # F0AF 85CB # F0B0 85CE # F0B1 85C8 # F0B2 85C5 # F0B3 85B1 # F0B4 85B6 # F0B5 85D2 # F0B6 8624 # F0B7 85B8 # F0B8 85B7 # F0B9 85BE # F0BA 8669 # F0BB 87E7 # F0BC 87E6 # F0BD 87E2 # F0BE 87DB # F0BF 87EB # F0C0 87EA # F0C1 87E5 # F0C2 87DF # F0C3 87F3 # F0C4 87E4 # F0C5 87D4 # F0C6 87DC # F0C7 87D3 # F0C8 87ED # F0C9 87D8 # F0CA 87E3 # F0CB 87A4 # F0CC 87D7 # F0CD 87D9 # F0CE 8801 # F0CF 87F4 # F0D0 87E8 # F0D1 87DD # F0D2 8953 # F0D3 894B # F0D4 894F # F0D5 894C # F0D6 8946 # F0D7 8950 # F0D8 8951 # F0D9 8949 # F0DA 8B2A # F0DB 8B27 # F0DC 8B23 # F0DD 8B33 # F0DE 8B30 # F0DF 8B35 # F0E0 8B47 # F0E1 8B2F # F0E2 8B3C # F0E3 8B3E # F0E4 8B31 # F0E5 8B25 # F0E6 8B37 # F0E7 8B26 # F0E8 8B36 # F0E9 8B2E # F0EA 8B24 # F0EB 8B3B # F0EC 8B3D # F0ED 8B3A # F0EE 8C42 # F0EF 8C75 # F0F0 8C99 # F0F1 8C98 # F0F2 8C97 # F0F3 8CFE # F0F4 8D04 # F0F5 8D02 # F0F6 8D00 # F0F7 8E5C # F0F8 8E62 # F0F9 8E60 # F0FA 8E57 # F0FB 8E56 # F0FC 8E5E # F0FD 8E65 # F0FE 8E67 # F140 8E5B # F141 8E5A # F142 8E61 # F143 8E5D # F144 8E69 # F145 8E54 # F146 8F46 # F147 8F47 # F148 8F48 # F149 8F4B # F14A 9128 # F14B 913A # F14C 913B # F14D 913E # F14E 91A8 # F14F 91A5 # F150 91A7 # F151 91AF # F152 91AA # F153 93B5 # F154 938C # F155 9392 # F156 93B7 # F157 939B # F158 939D # F159 9389 # F15A 93A7 # F15B 938E # F15C 93AA # F15D 939E # F15E 93A6 # F15F 9395 # F160 9388 # F161 9399 # F162 939F # F163 938D # F164 93B1 # F165 9391 # F166 93B2 # F167 93A4 # F168 93A8 # F169 93B4 # F16A 93A3 # F16B 93A5 # F16C 95D2 # F16D 95D3 # F16E 95D1 # F16F 96B3 # F170 96D7 # F171 96DA # F172 5DC2 # F173 96DF # F174 96D8 # F175 96DD # F176 9723 # F177 9722 # F178 9725 # F179 97AC # F17A 97AE # F17B 97A8 # F17C 97AB # F17D 97A4 # F17E 97AA # F1A1 97A2 # F1A2 97A5 # F1A3 97D7 # F1A4 97D9 # F1A5 97D6 # F1A6 97D8 # F1A7 97FA # F1A8 9850 # F1A9 9851 # F1AA 9852 # F1AB 98B8 # F1AC 9941 # F1AD 993C # F1AE 993A # F1AF 9A0F # F1B0 9A0B # F1B1 9A09 # F1B2 9A0D # F1B3 9A04 # F1B4 9A11 # F1B5 9A0A # F1B6 9A05 # F1B7 9A07 # F1B8 9A06 # F1B9 9AC0 # F1BA 9ADC # F1BB 9B08 # F1BC 9B04 # F1BD 9B05 # F1BE 9B29 # F1BF 9B35 # F1C0 9B4A # F1C1 9B4C # F1C2 9B4B # F1C3 9BC7 # F1C4 9BC6 # F1C5 9BC3 # F1C6 9BBF # F1C7 9BC1 # F1C8 9BB5 # F1C9 9BB8 # F1CA 9BD3 # F1CB 9BB6 # F1CC 9BC4 # F1CD 9BB9 # F1CE 9BBD # F1CF 9D5C # F1D0 9D53 # F1D1 9D4F # F1D2 9D4A # F1D3 9D5B # F1D4 9D4B # F1D5 9D59 # F1D6 9D56 # F1D7 9D4C # F1D8 9D57 # F1D9 9D52 # F1DA 9D54 # F1DB 9D5F # F1DC 9D58 # F1DD 9D5A # F1DE 9E8E # F1DF 9E8C # F1E0 9EDF # F1E1 9F01 # F1E2 9F00 # F1E3 9F16 # F1E4 9F25 # F1E5 9F2B # F1E6 9F2A # F1E7 9F29 # F1E8 9F28 # F1E9 9F4C # F1EA 9F55 # F1EB 5134 # F1EC 5135 # F1ED 5296 # F1EE 52F7 # F1EF 53B4 # F1F0 56AB # F1F1 56AD # F1F2 56A6 # F1F3 56A7 # F1F4 56AA # F1F5 56AC # F1F6 58DA # F1F7 58DD # F1F8 58DB # F1F9 5912 # F1FA 5B3D # F1FB 5B3E # F1FC 5B3F # F1FD 5DC3 # F1FE 5E70 # F240 5FBF # F241 61FB # F242 6507 # F243 6510 # F244 650D # F245 6509 # F246 650C # F247 650E # F248 6584 # F249 65DE # F24A 65DD # F24B 66DE # F24C 6AE7 # F24D 6AE0 # F24E 6ACC # F24F 6AD1 # F250 6AD9 # F251 6ACB # F252 6ADF # F253 6ADC # F254 6AD0 # F255 6AEB # F256 6ACF # F257 6ACD # F258 6ADE # F259 6B60 # F25A 6BB0 # F25B 6C0C # F25C 7019 # F25D 7027 # F25E 7020 # F25F 7016 # F260 702B # F261 7021 # F262 7022 # F263 7023 # F264 7029 # F265 7017 # F266 7024 # F267 701C # F268 702A # F269 720C # F26A 720A # F26B 7207 # F26C 7202 # F26D 7205 # F26E 72A5 # F26F 72A6 # F270 72A4 # F271 72A3 # F272 72A1 # F273 74CB # F274 74C5 # F275 74B7 # F276 74C3 # F277 7516 # F278 7660 # F279 77C9 # F27A 77CA # F27B 77C4 # F27C 77F1 # F27D 791D # F27E 791B # F2A1 7921 # F2A2 791C # F2A3 7917 # F2A4 791E # F2A5 79B0 # F2A6 7A67 # F2A7 7A68 # F2A8 7C33 # F2A9 7C3C # F2AA 7C39 # F2AB 7C2C # F2AC 7C3B # F2AD 7CEC # F2AE 7CEA # F2AF 7E76 # F2B0 7E75 # F2B1 7E78 # F2B2 7E70 # F2B3 7E77 # F2B4 7E6F # F2B5 7E7A # F2B6 7E72 # F2B7 7E74 # F2B8 7E68 # F2B9 7F4B # F2BA 7F4A # F2BB 7F83 # F2BC 7F86 # F2BD 7FB7 # F2BE 7FFD # F2BF 7FFE # F2C0 8078 # F2C1 81D7 # F2C2 81D5 # F2C3 8264 # F2C4 8261 # F2C5 8263 # F2C6 85EB # F2C7 85F1 # F2C8 85ED # F2C9 85D9 # F2CA 85E1 # F2CB 85E8 # F2CC 85DA # F2CD 85D7 # F2CE 85EC # F2CF 85F2 # F2D0 85F8 # F2D1 85D8 # F2D2 85DF # F2D3 85E3 # F2D4 85DC # F2D5 85D1 # F2D6 85F0 # F2D7 85E6 # F2D8 85EF # F2D9 85DE # F2DA 85E2 # F2DB 8800 # F2DC 87FA # F2DD 8803 # F2DE 87F6 # F2DF 87F7 # F2E0 8809 # F2E1 880C # F2E2 880B # F2E3 8806 # F2E4 87FC # F2E5 8808 # F2E6 87FF # F2E7 880A # F2E8 8802 # F2E9 8962 # F2EA 895A # F2EB 895B # F2EC 8957 # F2ED 8961 # F2EE 895C # F2EF 8958 # F2F0 895D # F2F1 8959 # F2F2 8988 # F2F3 89B7 # F2F4 89B6 # F2F5 89F6 # F2F6 8B50 # F2F7 8B48 # F2F8 8B4A # F2F9 8B40 # F2FA 8B53 # F2FB 8B56 # F2FC 8B54 # F2FD 8B4B # F2FE 8B55 # F340 8B51 # F341 8B42 # F342 8B52 # F343 8B57 # F344 8C43 # F345 8C77 # F346 8C76 # F347 8C9A # F348 8D06 # F349 8D07 # F34A 8D09 # F34B 8DAC # F34C 8DAA # F34D 8DAD # F34E 8DAB # F34F 8E6D # F350 8E78 # F351 8E73 # F352 8E6A # F353 8E6F # F354 8E7B # F355 8EC2 # F356 8F52 # F357 8F51 # F358 8F4F # F359 8F50 # F35A 8F53 # F35B 8FB4 # F35C 9140 # F35D 913F # F35E 91B0 # F35F 91AD # F360 93DE # F361 93C7 # F362 93CF # F363 93C2 # F364 93DA # F365 93D0 # F366 93F9 # F367 93EC # F368 93CC # F369 93D9 # F36A 93A9 # F36B 93E6 # F36C 93CA # F36D 93D4 # F36E 93EE # F36F 93E3 # F370 93D5 # F371 93C4 # F372 93CE # F373 93C0 # F374 93D2 # F375 93E7 # F376 957D # F377 95DA # F378 95DB # F379 96E1 # F37A 9729 # F37B 972B # F37C 972C # F37D 9728 # F37E 9726 # F3A1 97B3 # F3A2 97B7 # F3A3 97B6 # F3A4 97DD # F3A5 97DE # F3A6 97DF # F3A7 985C # F3A8 9859 # F3A9 985D # F3AA 9857 # F3AB 98BF # F3AC 98BD # F3AD 98BB # F3AE 98BE # F3AF 9948 # F3B0 9947 # F3B1 9943 # F3B2 99A6 # F3B3 99A7 # F3B4 9A1A # F3B5 9A15 # F3B6 9A25 # F3B7 9A1D # F3B8 9A24 # F3B9 9A1B # F3BA 9A22 # F3BB 9A20 # F3BC 9A27 # F3BD 9A23 # F3BE 9A1E # F3BF 9A1C # F3C0 9A14 # F3C1 9AC2 # F3C2 9B0B # F3C3 9B0A # F3C4 9B0E # F3C5 9B0C # F3C6 9B37 # F3C7 9BEA # F3C8 9BEB # F3C9 9BE0 # F3CA 9BDE # F3CB 9BE4 # F3CC 9BE6 # F3CD 9BE2 # F3CE 9BF0 # F3CF 9BD4 # F3D0 9BD7 # F3D1 9BEC # F3D2 9BDC # F3D3 9BD9 # F3D4 9BE5 # F3D5 9BD5 # F3D6 9BE1 # F3D7 9BDA # F3D8 9D77 # F3D9 9D81 # F3DA 9D8A # F3DB 9D84 # F3DC 9D88 # F3DD 9D71 # F3DE 9D80 # F3DF 9D78 # F3E0 9D86 # F3E1 9D8B # F3E2 9D8C # F3E3 9D7D # F3E4 9D6B # F3E5 9D74 # F3E6 9D75 # F3E7 9D70 # F3E8 9D69 # F3E9 9D85 # F3EA 9D73 # F3EB 9D7B # F3EC 9D82 # F3ED 9D6F # F3EE 9D79 # F3EF 9D7F # F3F0 9D87 # F3F1 9D68 # F3F2 9E94 # F3F3 9E91 # F3F4 9EC0 # F3F5 9EFC # F3F6 9F2D # F3F7 9F40 # F3F8 9F41 # F3F9 9F4D # F3FA 9F56 # F3FB 9F57 # F3FC 9F58 # F3FD 5337 # F3FE 56B2 # F440 56B5 # F441 56B3 # F442 58E3 # F443 5B45 # F444 5DC6 # F445 5DC7 # F446 5EEE # F447 5EEF # F448 5FC0 # F449 5FC1 # F44A 61F9 # F44B 6517 # F44C 6516 # F44D 6515 # F44E 6513 # F44F 65DF # F450 66E8 # F451 66E3 # F452 66E4 # F453 6AF3 # F454 6AF0 # F455 6AEA # F456 6AE8 # F457 6AF9 # F458 6AF1 # F459 6AEE # F45A 6AEF # F45B 703C # F45C 7035 # F45D 702F # F45E 7037 # F45F 7034 # F460 7031 # F461 7042 # F462 7038 # F463 703F # F464 703A # F465 7039 # F466 7040 # F467 703B # F468 7033 # F469 7041 # F46A 7213 # F46B 7214 # F46C 72A8 # F46D 737D # F46E 737C # F46F 74BA # F470 76AB # F471 76AA # F472 76BE # F473 76ED # F474 77CC # F475 77CE # F476 77CF # F477 77CD # F478 77F2 # F479 7925 # F47A 7923 # F47B 7927 # F47C 7928 # F47D 7924 # F47E 7929 # F4A1 79B2 # F4A2 7A6E # F4A3 7A6C # F4A4 7A6D # F4A5 7AF7 # F4A6 7C49 # F4A7 7C48 # F4A8 7C4A # F4A9 7C47 # F4AA 7C45 # F4AB 7CEE # F4AC 7E7B # F4AD 7E7E # F4AE 7E81 # F4AF 7E80 # F4B0 7FBA # F4B1 7FFF # F4B2 8079 # F4B3 81DB # F4B4 81D9 # F4B5 820B # F4B6 8268 # F4B7 8269 # F4B8 8622 # F4B9 85FF # F4BA 8601 # F4BB 85FE # F4BC 861B # F4BD 8600 # F4BE 85F6 # F4BF 8604 # F4C0 8609 # F4C1 8605 # F4C2 860C # F4C3 85FD # F4C4 8819 # F4C5 8810 # F4C6 8811 # F4C7 8817 # F4C8 8813 # F4C9 8816 # F4CA 8963 # F4CB 8966 # F4CC 89B9 # F4CD 89F7 # F4CE 8B60 # F4CF 8B6A # F4D0 8B5D # F4D1 8B68 # F4D2 8B63 # F4D3 8B65 # F4D4 8B67 # F4D5 8B6D # F4D6 8DAE # F4D7 8E86 # F4D8 8E88 # F4D9 8E84 # F4DA 8F59 # F4DB 8F56 # F4DC 8F57 # F4DD 8F55 # F4DE 8F58 # F4DF 8F5A # F4E0 908D # F4E1 9143 # F4E2 9141 # F4E3 91B7 # F4E4 91B5 # F4E5 91B2 # F4E6 91B3 # F4E7 940B # F4E8 9413 # F4E9 93FB # F4EA 9420 # F4EB 940F # F4EC 9414 # F4ED 93FE # F4EE 9415 # F4EF 9410 # F4F0 9428 # F4F1 9419 # F4F2 940D # F4F3 93F5 # F4F4 9400 # F4F5 93F7 # F4F6 9407 # F4F7 940E # F4F8 9416 # F4F9 9412 # F4FA 93FA # F4FB 9409 # F4FC 93F8 # F4FD 940A # F4FE 93FF # F540 93FC # F541 940C # F542 93F6 # F543 9411 # F544 9406 # F545 95DE # F546 95E0 # F547 95DF # F548 972E # F549 972F # F54A 97B9 # F54B 97BB # F54C 97FD # F54D 97FE # F54E 9860 # F54F 9862 # F550 9863 # F551 985F # F552 98C1 # F553 98C2 # F554 9950 # F555 994E # F556 9959 # F557 994C # F558 994B # F559 9953 # F55A 9A32 # F55B 9A34 # F55C 9A31 # F55D 9A2C # F55E 9A2A # F55F 9A36 # F560 9A29 # F561 9A2E # F562 9A38 # F563 9A2D # F564 9AC7 # F565 9ACA # F566 9AC6 # F567 9B10 # F568 9B12 # F569 9B11 # F56A 9C0B # F56B 9C08 # F56C 9BF7 # F56D 9C05 # F56E 9C12 # F56F 9BF8 # F570 9C40 # F571 9C07 # F572 9C0E # F573 9C06 # F574 9C17 # F575 9C14 # F576 9C09 # F577 9D9F # F578 9D99 # F579 9DA4 # F57A 9D9D # F57B 9D92 # F57C 9D98 # F57D 9D90 # F57E 9D9B # F5A1 9DA0 # F5A2 9D94 # F5A3 9D9C # F5A4 9DAA # F5A5 9D97 # F5A6 9DA1 # F5A7 9D9A # F5A8 9DA2 # F5A9 9DA8 # F5AA 9D9E # F5AB 9DA3 # F5AC 9DBF # F5AD 9DA9 # F5AE 9D96 # F5AF 9DA6 # F5B0 9DA7 # F5B1 9E99 # F5B2 9E9B # F5B3 9E9A # F5B4 9EE5 # F5B5 9EE4 # F5B6 9EE7 # F5B7 9EE6 # F5B8 9F30 # F5B9 9F2E # F5BA 9F5B # F5BB 9F60 # F5BC 9F5E # F5BD 9F5D # F5BE 9F59 # F5BF 9F91 # F5C0 513A # F5C1 5139 # F5C2 5298 # F5C3 5297 # F5C4 56C3 # F5C5 56BD # F5C6 56BE # F5C7 5B48 # F5C8 5B47 # F5C9 5DCB # F5CA 5DCF # F5CB 5EF1 # F5CC 61FD # F5CD 651B # F5CE 6B02 # F5CF 6AFC # F5D0 6B03 # F5D1 6AF8 # F5D2 6B00 # F5D3 7043 # F5D4 7044 # F5D5 704A # F5D6 7048 # F5D7 7049 # F5D8 7045 # F5D9 7046 # F5DA 721D # F5DB 721A # F5DC 7219 # F5DD 737E # F5DE 7517 # F5DF 766A # F5E0 77D0 # F5E1 792D # F5E2 7931 # F5E3 792F # F5E4 7C54 # F5E5 7C53 # F5E6 7CF2 # F5E7 7E8A # F5E8 7E87 # F5E9 7E88 # F5EA 7E8B # F5EB 7E86 # F5EC 7E8D # F5ED 7F4D # F5EE 7FBB # F5EF 8030 # F5F0 81DD # F5F1 8618 # F5F2 862A # F5F3 8626 # F5F4 861F # F5F5 8623 # F5F6 861C # F5F7 8619 # F5F8 8627 # F5F9 862E # F5FA 8621 # F5FB 8620 # F5FC 8629 # F5FD 861E # F5FE 8625 # F640 8829 # F641 881D # F642 881B # F643 8820 # F644 8824 # F645 881C # F646 882B # F647 884A # F648 896D # F649 8969 # F64A 896E # F64B 896B # F64C 89FA # F64D 8B79 # F64E 8B78 # F64F 8B45 # F650 8B7A # F651 8B7B # F652 8D10 # F653 8D14 # F654 8DAF # F655 8E8E # F656 8E8C # F657 8F5E # F658 8F5B # F659 8F5D # F65A 9146 # F65B 9144 # F65C 9145 # F65D 91B9 # F65E 943F # F65F 943B # F660 9436 # F661 9429 # F662 943D # F663 943C # F664 9430 # F665 9439 # F666 942A # F667 9437 # F668 942C # F669 9440 # F66A 9431 # F66B 95E5 # F66C 95E4 # F66D 95E3 # F66E 9735 # F66F 973A # F670 97BF # F671 97E1 # F672 9864 # F673 98C9 # F674 98C6 # F675 98C0 # F676 9958 # F677 9956 # F678 9A39 # F679 9A3D # F67A 9A46 # F67B 9A44 # F67C 9A42 # F67D 9A41 # F67E 9A3A # F6A1 9A3F # F6A2 9ACD # F6A3 9B15 # F6A4 9B17 # F6A5 9B18 # F6A6 9B16 # F6A7 9B3A # F6A8 9B52 # F6A9 9C2B # F6AA 9C1D # F6AB 9C1C # F6AC 9C2C # F6AD 9C23 # F6AE 9C28 # F6AF 9C29 # F6B0 9C24 # F6B1 9C21 # F6B2 9DB7 # F6B3 9DB6 # F6B4 9DBC # F6B5 9DC1 # F6B6 9DC7 # F6B7 9DCA # F6B8 9DCF # F6B9 9DBE # F6BA 9DC5 # F6BB 9DC3 # F6BC 9DBB # F6BD 9DB5 # F6BE 9DCE # F6BF 9DB9 # F6C0 9DBA # F6C1 9DAC # F6C2 9DC8 # F6C3 9DB1 # F6C4 9DAD # F6C5 9DCC # F6C6 9DB3 # F6C7 9DCD # F6C8 9DB2 # F6C9 9E7A # F6CA 9E9C # F6CB 9EEB # F6CC 9EEE # F6CD 9EED # F6CE 9F1B # F6CF 9F18 # F6D0 9F1A # F6D1 9F31 # F6D2 9F4E # F6D3 9F65 # F6D4 9F64 # F6D5 9F92 # F6D6 4EB9 # F6D7 56C6 # F6D8 56C5 # F6D9 56CB # F6DA 5971 # F6DB 5B4B # F6DC 5B4C # F6DD 5DD5 # F6DE 5DD1 # F6DF 5EF2 # F6E0 6521 # F6E1 6520 # F6E2 6526 # F6E3 6522 # F6E4 6B0B # F6E5 6B08 # F6E6 6B09 # F6E7 6C0D # F6E8 7055 # F6E9 7056 # F6EA 7057 # F6EB 7052 # F6EC 721E # F6ED 721F # F6EE 72A9 # F6EF 737F # F6F0 74D8 # F6F1 74D5 # F6F2 74D9 # F6F3 74D7 # F6F4 766D # F6F5 76AD # F6F6 7935 # F6F7 79B4 # F6F8 7A70 # F6F9 7A71 # F6FA 7C57 # F6FB 7C5C # F6FC 7C59 # F6FD 7C5B # F6FE 7C5A # F740 7CF4 # F741 7CF1 # F742 7E91 # F743 7F4F # F744 7F87 # F745 81DE # F746 826B # F747 8634 # F748 8635 # F749 8633 # F74A 862C # F74B 8632 # F74C 8636 # F74D 882C # F74E 8828 # F74F 8826 # F750 882A # F751 8825 # F752 8971 # F753 89BF # F754 89BE # F755 89FB # F756 8B7E # F757 8B84 # F758 8B82 # F759 8B86 # F75A 8B85 # F75B 8B7F # F75C 8D15 # F75D 8E95 # F75E 8E94 # F75F 8E9A # F760 8E92 # F761 8E90 # F762 8E96 # F763 8E97 # F764 8F60 # F765 8F62 # F766 9147 # F767 944C # F768 9450 # F769 944A # F76A 944B # F76B 944F # F76C 9447 # F76D 9445 # F76E 9448 # F76F 9449 # F770 9446 # F771 973F # F772 97E3 # F773 986A # F774 9869 # F775 98CB # F776 9954 # F777 995B # F778 9A4E # F779 9A53 # F77A 9A54 # F77B 9A4C # F77C 9A4F # F77D 9A48 # F77E 9A4A # F7A1 9A49 # F7A2 9A52 # F7A3 9A50 # F7A4 9AD0 # F7A5 9B19 # F7A6 9B2B # F7A7 9B3B # F7A8 9B56 # F7A9 9B55 # F7AA 9C46 # F7AB 9C48 # F7AC 9C3F # F7AD 9C44 # F7AE 9C39 # F7AF 9C33 # F7B0 9C41 # F7B1 9C3C # F7B2 9C37 # F7B3 9C34 # F7B4 9C32 # F7B5 9C3D # F7B6 9C36 # F7B7 9DDB # F7B8 9DD2 # F7B9 9DDE # F7BA 9DDA # F7BB 9DCB # F7BC 9DD0 # F7BD 9DDC # F7BE 9DD1 # F7BF 9DDF # F7C0 9DE9 # F7C1 9DD9 # F7C2 9DD8 # F7C3 9DD6 # F7C4 9DF5 # F7C5 9DD5 # F7C6 9DDD # F7C7 9EB6 # F7C8 9EF0 # F7C9 9F35 # F7CA 9F33 # F7CB 9F32 # F7CC 9F42 # F7CD 9F6B # F7CE 9F95 # F7CF 9FA2 # F7D0 513D # F7D1 5299 # F7D2 58E8 # F7D3 58E7 # F7D4 5972 # F7D5 5B4D # F7D6 5DD8 # F7D7 882F # F7D8 5F4F # F7D9 6201 # F7DA 6203 # F7DB 6204 # F7DC 6529 # F7DD 6525 # F7DE 6596 # F7DF 66EB # F7E0 6B11 # F7E1 6B12 # F7E2 6B0F # F7E3 6BCA # F7E4 705B # F7E5 705A # F7E6 7222 # F7E7 7382 # F7E8 7381 # F7E9 7383 # F7EA 7670 # F7EB 77D4 # F7EC 7C67 # F7ED 7C66 # F7EE 7E95 # F7EF 826C # F7F0 863A # F7F1 8640 # F7F2 8639 # F7F3 863C # F7F4 8631 # F7F5 863B # F7F6 863E # F7F7 8830 # F7F8 8832 # F7F9 882E # F7FA 8833 # F7FB 8976 # F7FC 8974 # F7FD 8973 # F7FE 89FE # F840 8B8C # F841 8B8E # F842 8B8B # F843 8B88 # F844 8C45 # F845 8D19 # F846 8E98 # F847 8F64 # F848 8F63 # F849 91BC # F84A 9462 # F84B 9455 # F84C 945D # F84D 9457 # F84E 945E # F84F 97C4 # F850 97C5 # F851 9800 # F852 9A56 # F853 9A59 # F854 9B1E # F855 9B1F # F856 9B20 # F857 9C52 # F858 9C58 # F859 9C50 # F85A 9C4A # F85B 9C4D # F85C 9C4B # F85D 9C55 # F85E 9C59 # F85F 9C4C # F860 9C4E # F861 9DFB # F862 9DF7 # F863 9DEF # F864 9DE3 # F865 9DEB # F866 9DF8 # F867 9DE4 # F868 9DF6 # F869 9DE1 # F86A 9DEE # F86B 9DE6 # F86C 9DF2 # F86D 9DF0 # F86E 9DE2 # F86F 9DEC # F870 9DF4 # F871 9DF3 # F872 9DE8 # F873 9DED # F874 9EC2 # F875 9ED0 # F876 9EF2 # F877 9EF3 # F878 9F06 # F879 9F1C # F87A 9F38 # F87B 9F37 # F87C 9F36 # F87D 9F43 # F87E 9F4F # F8A1 9F71 # F8A2 9F70 # F8A3 9F6E # F8A4 9F6F # F8A5 56D3 # F8A6 56CD # F8A7 5B4E # F8A8 5C6D # F8A9 652D # F8AA 66ED # F8AB 66EE # F8AC 6B13 # F8AD 705F # F8AE 7061 # F8AF 705D # F8B0 7060 # F8B1 7223 # F8B2 74DB # F8B3 74E5 # F8B4 77D5 # F8B5 7938 # F8B6 79B7 # F8B7 79B6 # F8B8 7C6A # F8B9 7E97 # F8BA 7F89 # F8BB 826D # F8BC 8643 # F8BD 8838 # F8BE 8837 # F8BF 8835 # F8C0 884B # F8C1 8B94 # F8C2 8B95 # F8C3 8E9E # F8C4 8E9F # F8C5 8EA0 # F8C6 8E9D # F8C7 91BE # F8C8 91BD # F8C9 91C2 # F8CA 946B # F8CB 9468 # F8CC 9469 # F8CD 96E5 # F8CE 9746 # F8CF 9743 # F8D0 9747 # F8D1 97C7 # F8D2 97E5 # F8D3 9A5E # F8D4 9AD5 # F8D5 9B59 # F8D6 9C63 # F8D7 9C67 # F8D8 9C66 # F8D9 9C62 # F8DA 9C5E # F8DB 9C60 # F8DC 9E02 # F8DD 9DFE # F8DE 9E07 # F8DF 9E03 # F8E0 9E06 # F8E1 9E05 # F8E2 9E00 # F8E3 9E01 # F8E4 9E09 # F8E5 9DFF # F8E6 9DFD # F8E7 9E04 # F8E8 9EA0 # F8E9 9F1E # F8EA 9F46 # F8EB 9F74 # F8EC 9F75 # F8ED 9F76 # F8EE 56D4 # F8EF 652E # F8F0 65B8 # F8F1 6B18 # F8F2 6B19 # F8F3 6B17 # F8F4 6B1A # F8F5 7062 # F8F6 7226 # F8F7 72AA # F8F8 77D8 # F8F9 77D9 # F8FA 7939 # F8FB 7C69 # F8FC 7C6B # F8FD 7CF6 # F8FE 7E9A # F940 7E98 # F941 7E9B # F942 7E99 # F943 81E0 # F944 81E1 # F945 8646 # F946 8647 # F947 8648 # F948 8979 # F949 897A # F94A 897C # F94B 897B # F94C 89FF # F94D 8B98 # F94E 8B99 # F94F 8EA5 # F950 8EA4 # F951 8EA3 # F952 946E # F953 946D # F954 946F # F955 9471 # F956 9473 # F957 9749 # F958 9872 # F959 995F # F95A 9C68 # F95B 9C6E # F95C 9C6D # F95D 9E0B # F95E 9E0D # F95F 9E10 # F960 9E0F # F961 9E12 # F962 9E11 # F963 9EA1 # F964 9EF5 # F965 9F09 # F966 9F47 # F967 9F78 # F968 9F7B # F969 9F7A # F96A 9F79 # F96B 571E # F96C 7066 # F96D 7C6F # F96E 883C # F96F 8DB2 # F970 8EA6 # F971 91C3 # F972 9474 # F973 9478 # F974 9476 # F975 9475 # F976 9A60 # F977 9C74 # F978 9C73 # F979 9C71 # F97A 9C75 # F97B 9E14 # F97C 9E13 # F97D 9EF6 # F97E 9F0A # F9A1 9FA4 # F9A2 7068 # F9A3 7065 # F9A4 7CF7 # F9A5 866A # F9A6 883E # F9A7 883D # F9A8 883F # F9A9 8B9E # F9AA 8C9C # F9AB 8EA9 # F9AC 8EC9 # F9AD 974B # F9AE 9873 # F9AF 9874 # F9B0 98CC # F9B1 9961 # F9B2 99AB # F9B3 9A64 # F9B4 9A66 # F9B5 9A67 # F9B6 9B24 # F9B7 9E15 # F9B8 9E17 # F9B9 9F48 # F9BA 6207 # F9BB 6B1E # F9BC 7227 # F9BD 864C # F9BE 8EA8 # F9BF 9482 # F9C0 9480 # F9C1 9481 # F9C2 9A69 # F9C3 9A68 # F9C4 9B2E # F9C5 9E19 # F9C6 7229 # F9C7 864B # F9C8 8B9F # F9C9 9483 # F9CA 9C79 # F9CB 9EB7 # F9CC 7675 # F9CD 9A6B # F9CE 9C7A # F9CF 9E1D # F9D0 7069 # F9D1 706A # F9D2 9EA4 # F9D3 9F7E # F9D4 9F49 # F9D5 9F98 # cyrus-imspd-v1.8/lib/charset/gb2312.t0100644004310100000120000044534207372056421016472 0ustar shadowstaff 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) A1A1 3000 # IDEOGRAPHIC SPACE A1A2 3001 # IDEOGRAPHIC COMMA A1A3 3002 # IDEOGRAPHIC FULL STOP A1A4 30FB # KATAKANA MIDDLE DOT A1A5 02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone) A1A6 02C7 # CARON (Mandarin Chinese third tone) A1A7 00A8 # DIAERESIS A1A8 3003 # DITTO MARK A1A9 3005 # IDEOGRAPHIC ITERATION MARK A1AA 2015 # HORIZONTAL BAR A1AB FF5E # FULLWIDTH TILDE A1AC 2225 # PARALLEL TO A1AD 2026 # HORIZONTAL ELLIPSIS A1AE 2018 # LEFT SINGLE QUOTATION MARK A1AF 2019 # RIGHT SINGLE QUOTATION MARK A1B0 201C # LEFT DOUBLE QUOTATION MARK A1B1 201D # RIGHT DOUBLE QUOTATION MARK A1B2 3014 # LEFT TORTOISE SHELL BRACKET A1B3 3015 # RIGHT TORTOISE SHELL BRACKET A1B4 3008 # LEFT ANGLE BRACKET A1B5 3009 # RIGHT ANGLE BRACKET A1B6 300A # LEFT DOUBLE ANGLE BRACKET A1B7 300B # RIGHT DOUBLE ANGLE BRACKET A1B8 300C # LEFT CORNER BRACKET A1B9 300D # RIGHT CORNER BRACKET A1BA 300E # LEFT WHITE CORNER BRACKET A1BB 300F # RIGHT WHITE CORNER BRACKET A1BC 3016 # LEFT WHITE LENTICULAR BRACKET A1BD 3017 # RIGHT WHITE LENTICULAR BRACKET A1BE 3010 # LEFT BLACK LENTICULAR BRACKET A1BF 3011 # RIGHT BLACK LENTICULAR BRACKET A1C0 00B1 # PLUS-MINUS SIGN A1C1 00D7 # MULTIPLICATION SIGN A1C2 00F7 # DIVISION SIGN A1C3 2236 # RATIO A1C4 2227 # LOGICAL AND A1C5 2228 # LOGICAL OR A1C6 2211 # N-ARY SUMMATION A1C7 220F # N-ARY PRODUCT A1C8 222A # UNION A1C9 2229 # INTERSECTION A1CA 2208 # ELEMENT OF A1CB 2237 # PROPORTION A1CC 221A # SQUARE ROOT A1CD 22A5 # UP TACK A1CE 2225 # PARALLEL TO A1CF 2220 # ANGLE A1D0 2312 # ARC A1D1 2299 # CIRCLED DOT OPERATOR A1D2 222B # INTEGRAL A1D3 222E # CONTOUR INTEGRAL A1D4 2261 # IDENTICAL TO A1D5 224C # ALL EQUAL TO A1D6 2248 # ALMOST EQUAL TO A1D7 223D # REVERSED TILDE A1D8 221D # PROPORTIONAL TO A1D9 2260 # NOT EQUAL TO A1DA 226E # NOT LESS-THAN A1DB 226F # NOT GREATER-THAN A1DC 2264 # LESS-THAN OR EQUAL TO A1DD 2265 # GREATER-THAN OR EQUAL TO A1DE 221E # INFINITY A1DF 2235 # BECAUSE A160 2234 # THEREFORE A161 2642 # MALE SIGN A162 2640 # FEMALE SIGN A163 00B0 # DEGREE SIGN A164 2032 # PRIME A165 2033 # DOUBLE PRIME A166 2103 # DEGREE CELSIUS A167 FF04 # FULLWIDTH DOLLAR SIGN A168 00A4 # CURRENCY SIGN A169 FFE0 # FULLWIDTH CENT SIGN A16A FFE1 # FULLWIDTH POUND SIGN A16B 2030 # PER MILLE SIGN A16C 00A7 # SECTION SIGN A16D 2116 # NUMERO SIGN A16E 2606 # WHITE STAR A16F 2605 # BLACK STAR A1F0 25CB # WHITE CIRCLE A1F1 25CF # BLACK CIRCLE A1F2 25CE # BULLSEYE A1F3 25C7 # WHITE DIAMOND A1F4 25C6 # BLACK DIAMOND A1F5 25A1 # WHITE SQUARE A1F6 25A0 # BLACK SQUARE A1F7 25B3 # WHITE UP-POINTING TRIANGLE A1F8 25B2 # BLACK UP-POINTING TRIANGLE A1F9 203B # REFERENCE MARK A1FA 2192 # RIGHTWARDS ARROW A1FB 2190 # LEFTWARDS ARROW A1FC 2191 # UPWARDS ARROW A1FD 2193 # DOWNWARDS ARROW A1FE 3013 # GETA MARK A2B1 2488 # DIGIT ONE FULL STOP A2B2 2489 # DIGIT TWO FULL STOP A2B3 248A # DIGIT THREE FULL STOP A2B4 248B # DIGIT FOUR FULL STOP A2B5 248C # DIGIT FIVE FULL STOP A2B6 248D # DIGIT SIX FULL STOP A2B7 248E # DIGIT SEVEN FULL STOP A2B8 248F # DIGIT EIGHT FULL STOP A2B9 2490 # DIGIT NINE FULL STOP A2BA 2491 # NUMBER TEN FULL STOP A2BB 2492 # NUMBER ELEVEN FULL STOP A2BC 2493 # NUMBER TWELVE FULL STOP A2BD 2494 # NUMBER THIRTEEN FULL STOP A2BE 2495 # NUMBER FOURTEEN FULL STOP A2BF 2496 # NUMBER FIFTEEN FULL STOP A2C0 2497 # NUMBER SIXTEEN FULL STOP A2C1 2498 # NUMBER SEVENTEEN FULL STOP A2C2 2499 # NUMBER EIGHTEEN FULL STOP A2C3 249A # NUMBER NINETEEN FULL STOP A2C4 249B # NUMBER TWENTY FULL STOP A2C5 2474 # PARENTHESIZED DIGIT ONE A2C6 2475 # PARENTHESIZED DIGIT TWO A2C7 2476 # PARENTHESIZED DIGIT THREE A2C8 2477 # PARENTHESIZED DIGIT FOUR A2C9 2478 # PARENTHESIZED DIGIT FIVE A2CA 2479 # PARENTHESIZED DIGIT SIX A2CB 247A # PARENTHESIZED DIGIT SEVEN A2CC 247B # PARENTHESIZED DIGIT EIGHT A2CD 247C # PARENTHESIZED DIGIT NINE A2CE 247D # PARENTHESIZED NUMBER TEN A2CF 247E # PARENTHESIZED NUMBER ELEVEN A2D0 247F # PARENTHESIZED NUMBER TWELVE A2D1 2480 # PARENTHESIZED NUMBER THIRTEEN A2D2 2481 # PARENTHESIZED NUMBER FOURTEEN A2D3 2482 # PARENTHESIZED NUMBER FIFTEEN A2D4 2483 # PARENTHESIZED NUMBER SIXTEEN A2D5 2484 # PARENTHESIZED NUMBER SEVENTEEN A2D6 2485 # PARENTHESIZED NUMBER EIGHTEEN A2D7 2486 # PARENTHESIZED NUMBER NINETEEN A2D8 2487 # PARENTHESIZED NUMBER TWENTY A2D9 2460 # CIRCLED DIGIT ONE A2DA 2461 # CIRCLED DIGIT TWO A2DB 2462 # CIRCLED DIGIT THREE A2DC 2463 # CIRCLED DIGIT FOUR A2DD 2464 # CIRCLED DIGIT FIVE A2DE 2465 # CIRCLED DIGIT SIX A2DF 2466 # CIRCLED DIGIT SEVEN A2E0 2467 # CIRCLED DIGIT EIGHT A2E1 2468 # CIRCLED DIGIT NINE A2E2 2469 # CIRCLED NUMBER TEN A2E5 3220 # PARENTHESIZED IDEOGRAPH ONE A2E6 3221 # PARENTHESIZED IDEOGRAPH TWO A2E7 3222 # PARENTHESIZED IDEOGRAPH THREE A2E8 3223 # PARENTHESIZED IDEOGRAPH FOUR A2E9 3224 # PARENTHESIZED IDEOGRAPH FIVE A2EA 3225 # PARENTHESIZED IDEOGRAPH SIX A2EB 3226 # PARENTHESIZED IDEOGRAPH SEVEN A2EC 3227 # PARENTHESIZED IDEOGRAPH EIGHT A2ED 3228 # PARENTHESIZED IDEOGRAPH NINE A2EE 3229 # PARENTHESIZED IDEOGRAPH TEN A2F1 2160 # ROMAN NUMERAL ONE A2F2 2161 # ROMAN NUMERAL TWO A2F3 2162 # ROMAN NUMERAL THREE A2F4 2163 # ROMAN NUMERAL FOUR A2F5 2164 # ROMAN NUMERAL FIVE A2F6 2165 # ROMAN NUMERAL SIX A2F7 2166 # ROMAN NUMERAL SEVEN A2F8 2167 # ROMAN NUMERAL EIGHT A2F9 2168 # ROMAN NUMERAL NINE A2FA 2169 # ROMAN NUMERAL TEN A2FB 216A # ROMAN NUMERAL ELEVEN A2FC 216B # ROMAN NUMERAL TWELVE A3A1 FF01 # FULLWIDTH EXCLAMATION MARK A3A2 FF02 # FULLWIDTH QUOTATION MARK A3A3 FF03 # FULLWIDTH NUMBER SIGN A3A4 FFE5 # FULLWIDTH YEN SIGN A3A5 FF05 # FULLWIDTH PERCENT SIGN A3A6 FF06 # FULLWIDTH AMPERSAND A3A7 FF07 # FULLWIDTH APOSTROPHE A3A8 FF08 # FULLWIDTH LEFT PARENTHESIS A3A9 FF09 # FULLWIDTH RIGHT PARENTHESIS A3AA FF0A # FULLWIDTH ASTERISK A3AB FF0B # FULLWIDTH PLUS SIGN A3AC FF0C # FULLWIDTH COMMA A3AD FF0D # FULLWIDTH HYPHEN-MINUS A3AE FF0E # FULLWIDTH FULL STOP A3AF FF0F # FULLWIDTH SOLIDUS A3B0 FF10 # FULLWIDTH DIGIT ZERO A3B1 FF11 # FULLWIDTH DIGIT ONE A3B2 FF12 # FULLWIDTH DIGIT TWO A3B3 FF13 # FULLWIDTH DIGIT THREE A3B4 FF14 # FULLWIDTH DIGIT FOUR A3B5 FF15 # FULLWIDTH DIGIT FIVE A3B6 FF16 # FULLWIDTH DIGIT SIX A3B7 FF17 # FULLWIDTH DIGIT SEVEN A3B8 FF18 # FULLWIDTH DIGIT EIGHT A3B9 FF19 # FULLWIDTH DIGIT NINE A3BA FF1A # FULLWIDTH COLON A3BB FF1B # FULLWIDTH SEMICOLON A3BC FF1C # FULLWIDTH LESS-THAN SIGN A3BD FF1D # FULLWIDTH EQUALS SIGN A3BE FF1E # FULLWIDTH GREATER-THAN SIGN A3BF FF1F # FULLWIDTH QUESTION MARK A3C0 FF20 # FULLWIDTH COMMERCIAL AT A3C1 FF21 # FULLWIDTH LATIN CAPITAL LETTER A A3C2 FF22 # FULLWIDTH LATIN CAPITAL LETTER B A3C3 FF23 # FULLWIDTH LATIN CAPITAL LETTER C A3C4 FF24 # FULLWIDTH LATIN CAPITAL LETTER D A3C5 FF25 # FULLWIDTH LATIN CAPITAL LETTER E A3C6 FF26 # FULLWIDTH LATIN CAPITAL LETTER F A3C7 FF27 # FULLWIDTH LATIN CAPITAL LETTER G A3C8 FF28 # FULLWIDTH LATIN CAPITAL LETTER H A3C9 FF29 # FULLWIDTH LATIN CAPITAL LETTER I A3CA FF2A # FULLWIDTH LATIN CAPITAL LETTER J A3CB FF2B # FULLWIDTH LATIN CAPITAL LETTER K A3CC FF2C # FULLWIDTH LATIN CAPITAL LETTER L A3CD FF2D # FULLWIDTH LATIN CAPITAL LETTER M A3CE FF2E # FULLWIDTH LATIN CAPITAL LETTER N A3CF FF2F # FULLWIDTH LATIN CAPITAL LETTER O A3D0 FF30 # FULLWIDTH LATIN CAPITAL LETTER P A3D1 FF31 # FULLWIDTH LATIN CAPITAL LETTER Q A3D2 FF32 # FULLWIDTH LATIN CAPITAL LETTER R A3D3 FF33 # FULLWIDTH LATIN CAPITAL LETTER S A3D4 FF34 # FULLWIDTH LATIN CAPITAL LETTER T A3D5 FF35 # FULLWIDTH LATIN CAPITAL LETTER U A3D6 FF36 # FULLWIDTH LATIN CAPITAL LETTER V A3D7 FF37 # FULLWIDTH LATIN CAPITAL LETTER W A3D8 FF38 # FULLWIDTH LATIN CAPITAL LETTER X A3D9 FF39 # FULLWIDTH LATIN CAPITAL LETTER Y A3DA FF3A # FULLWIDTH LATIN CAPITAL LETTER Z A3DB FF3B # FULLWIDTH LEFT SQUARE BRACKET A3DC FF3C # FULLWIDTH REVERSE SOLIDUS A3DD FF3D # FULLWIDTH RIGHT SQUARE BRACKET A3DE FF3E # FULLWIDTH CIRCUMFLEX ACCENT A3DF FF3F # FULLWIDTH LOW LINE A3E0 FF40 # FULLWIDTH GRAVE ACCENT A3E1 FF41 # FULLWIDTH LATIN SMALL LETTER A A3E2 FF42 # FULLWIDTH LATIN SMALL LETTER B A3E3 FF43 # FULLWIDTH LATIN SMALL LETTER C A3E4 FF44 # FULLWIDTH LATIN SMALL LETTER D A3E5 FF45 # FULLWIDTH LATIN SMALL LETTER E A3E6 FF46 # FULLWIDTH LATIN SMALL LETTER F A3E7 FF47 # FULLWIDTH LATIN SMALL LETTER G A3E8 FF48 # FULLWIDTH LATIN SMALL LETTER H A3E9 FF49 # FULLWIDTH LATIN SMALL LETTER I A3EA FF4A # FULLWIDTH LATIN SMALL LETTER J A3EB FF4B # FULLWIDTH LATIN SMALL LETTER K A3EC FF4C # FULLWIDTH LATIN SMALL LETTER L A3ED FF4D # FULLWIDTH LATIN SMALL LETTER M A3EE FF4E # FULLWIDTH LATIN SMALL LETTER N A3EF FF4F # FULLWIDTH LATIN SMALL LETTER O A3F0 FF50 # FULLWIDTH LATIN SMALL LETTER P A3F1 FF51 # FULLWIDTH LATIN SMALL LETTER Q A3F2 FF52 # FULLWIDTH LATIN SMALL LETTER R A3F3 FF53 # FULLWIDTH LATIN SMALL LETTER S A3F4 FF54 # FULLWIDTH LATIN SMALL LETTER T A3F5 FF55 # FULLWIDTH LATIN SMALL LETTER U A3F6 FF56 # FULLWIDTH LATIN SMALL LETTER V A3F7 FF57 # FULLWIDTH LATIN SMALL LETTER W A3F8 FF58 # FULLWIDTH LATIN SMALL LETTER X A3F9 FF59 # FULLWIDTH LATIN SMALL LETTER Y A3FA FF5A # FULLWIDTH LATIN SMALL LETTER Z A3FB FF5B # FULLWIDTH LEFT CURLY BRACKET A3FC FF5C # FULLWIDTH VERTICAL LINE A3FD FF5D # FULLWIDTH RIGHT CURLY BRACKET A3FE FFE3 # FULLWIDTH MACRON A4A1 3041 # HIRAGANA LETTER SMALL A A4A2 3042 # HIRAGANA LETTER A A4A3 3043 # HIRAGANA LETTER SMALL I A4A4 3044 # HIRAGANA LETTER I A4A5 3045 # HIRAGANA LETTER SMALL U A4A6 3046 # HIRAGANA LETTER U A4A7 3047 # HIRAGANA LETTER SMALL E A4A8 3048 # HIRAGANA LETTER E A4A9 3049 # HIRAGANA LETTER SMALL O A4AA 304A # HIRAGANA LETTER O A4AB 304B # HIRAGANA LETTER KA A4AC 304C # HIRAGANA LETTER GA A4AD 304D # HIRAGANA LETTER KI A4AE 304E # HIRAGANA LETTER GI A4AF 304F # HIRAGANA LETTER KU A4B0 3050 # HIRAGANA LETTER GU A4B1 3051 # HIRAGANA LETTER KE A4B2 3052 # HIRAGANA LETTER GE A4B3 3053 # HIRAGANA LETTER KO A4B4 3054 # HIRAGANA LETTER GO A4B5 3055 # HIRAGANA LETTER SA A4B6 3056 # HIRAGANA LETTER ZA A4B7 3057 # HIRAGANA LETTER SI A4B8 3058 # HIRAGANA LETTER ZI A4B9 3059 # HIRAGANA LETTER SU A4BA 305A # HIRAGANA LETTER ZU A4BB 305B # HIRAGANA LETTER SE A4BC 305C # HIRAGANA LETTER ZE A4BD 305D # HIRAGANA LETTER SO A4BE 305E # HIRAGANA LETTER ZO A4BF 305F # HIRAGANA LETTER TA A4C0 3060 # HIRAGANA LETTER DA A4C1 3061 # HIRAGANA LETTER TI A4C2 3062 # HIRAGANA LETTER DI A4C3 3063 # HIRAGANA LETTER SMALL TU A4C4 3064 # HIRAGANA LETTER TU A4C5 3065 # HIRAGANA LETTER DU A4C6 3066 # HIRAGANA LETTER TE A4C7 3067 # HIRAGANA LETTER DE A4C8 3068 # HIRAGANA LETTER TO A4C9 3069 # HIRAGANA LETTER DO A4CA 306A # HIRAGANA LETTER NA A4CB 306B # HIRAGANA LETTER NI A4CC 306C # HIRAGANA LETTER NU A4CD 306D # HIRAGANA LETTER NE A4CE 306E # HIRAGANA LETTER NO A4CF 306F # HIRAGANA LETTER HA A4D0 3070 # HIRAGANA LETTER BA A4D1 3071 # HIRAGANA LETTER PA A4D2 3072 # HIRAGANA LETTER HI A4D3 3073 # HIRAGANA LETTER BI A4D4 3074 # HIRAGANA LETTER PI A4D5 3075 # HIRAGANA LETTER HU A4D6 3076 # HIRAGANA LETTER BU A4D7 3077 # HIRAGANA LETTER PU A4D8 3078 # HIRAGANA LETTER HE A4D9 3079 # HIRAGANA LETTER BE A4DA 307A # HIRAGANA LETTER PE A4DB 307B # HIRAGANA LETTER HO A4DC 307C # HIRAGANA LETTER BO A4DD 307D # HIRAGANA LETTER PO A4DE 307E # HIRAGANA LETTER MA A4DF 307F # HIRAGANA LETTER MI A4E0 3080 # HIRAGANA LETTER MU A4E1 3081 # HIRAGANA LETTER ME A4E2 3082 # HIRAGANA LETTER MO A4E3 3083 # HIRAGANA LETTER SMALL YA A4E4 3084 # HIRAGANA LETTER YA A4E5 3085 # HIRAGANA LETTER SMALL YU A4E6 3086 # HIRAGANA LETTER YU A4E7 3087 # HIRAGANA LETTER SMALL YO A4E8 3088 # HIRAGANA LETTER YO A4E9 3089 # HIRAGANA LETTER RA A4EA 308A # HIRAGANA LETTER RI A4EB 308B # HIRAGANA LETTER RU A4EC 308C # HIRAGANA LETTER RE A4ED 308D # HIRAGANA LETTER RO A4EE 308E # HIRAGANA LETTER SMALL WA A4EF 308F # HIRAGANA LETTER WA A4F0 3090 # HIRAGANA LETTER WI A4F1 3091 # HIRAGANA LETTER WE A4F2 3092 # HIRAGANA LETTER WO A4F3 3093 # HIRAGANA LETTER N A5A1 30A1 # KATAKANA LETTER SMALL A A5A2 30A2 # KATAKANA LETTER A A5A3 30A3 # KATAKANA LETTER SMALL I A5A4 30A4 # KATAKANA LETTER I A5A5 30A5 # KATAKANA LETTER SMALL U A5A6 30A6 # KATAKANA LETTER U A5A7 30A7 # KATAKANA LETTER SMALL E A5A8 30A8 # KATAKANA LETTER E A5A9 30A9 # KATAKANA LETTER SMALL O A5AA 30AA # KATAKANA LETTER O A5AB 30AB # KATAKANA LETTER KA A5AC 30AC # KATAKANA LETTER GA A5AD 30AD # KATAKANA LETTER KI A5AE 30AE # KATAKANA LETTER GI A5AF 30AF # KATAKANA LETTER KU A5B0 30B0 # KATAKANA LETTER GU A5B1 30B1 # KATAKANA LETTER KE A5B2 30B2 # KATAKANA LETTER GE A5B3 30B3 # KATAKANA LETTER KO A5B4 30B4 # KATAKANA LETTER GO A5B5 30B5 # KATAKANA LETTER SA A5B6 30B6 # KATAKANA LETTER ZA A5B7 30B7 # KATAKANA LETTER SI A5B8 30B8 # KATAKANA LETTER ZI A5B9 30B9 # KATAKANA LETTER SU A5BA 30BA # KATAKANA LETTER ZU A5BB 30BB # KATAKANA LETTER SE A5BC 30BC # KATAKANA LETTER ZE A5BD 30BD # KATAKANA LETTER SO A5BE 30BE # KATAKANA LETTER ZO A5BF 30BF # KATAKANA LETTER TA A5C0 30C0 # KATAKANA LETTER DA A5C1 30C1 # KATAKANA LETTER TI A5C2 30C2 # KATAKANA LETTER DI A5C3 30C3 # KATAKANA LETTER SMALL TU A5C4 30C4 # KATAKANA LETTER TU A5C5 30C5 # KATAKANA LETTER DU A5C6 30C6 # KATAKANA LETTER TE A5C7 30C7 # KATAKANA LETTER DE A5C8 30C8 # KATAKANA LETTER TO A5C9 30C9 # KATAKANA LETTER DO A5CA 30CA # KATAKANA LETTER NA A5CB 30CB # KATAKANA LETTER NI A5CC 30CC # KATAKANA LETTER NU A5CD 30CD # KATAKANA LETTER NE A5CE 30CE # KATAKANA LETTER NO A5CF 30CF # KATAKANA LETTER HA A5D0 30D0 # KATAKANA LETTER BA A5D1 30D1 # KATAKANA LETTER PA A5D2 30D2 # KATAKANA LETTER HI A5D3 30D3 # KATAKANA LETTER BI A5D4 30D4 # KATAKANA LETTER PI A5D5 30D5 # KATAKANA LETTER HU A5D6 30D6 # KATAKANA LETTER BU A5D7 30D7 # KATAKANA LETTER PU A5D8 30D8 # KATAKANA LETTER HE A5D9 30D9 # KATAKANA LETTER BE A5DA 30DA # KATAKANA LETTER PE A5DB 30DB # KATAKANA LETTER HO A5DC 30DC # KATAKANA LETTER BO A5DD 30DD # KATAKANA LETTER PO A5DE 30DE # KATAKANA LETTER MA A5DF 30DF # KATAKANA LETTER MI A5E0 30E0 # KATAKANA LETTER MU A5E1 30E1 # KATAKANA LETTER ME A5E2 30E2 # KATAKANA LETTER MO A5E3 30E3 # KATAKANA LETTER SMALL YA A5E4 30E4 # KATAKANA LETTER YA A5E5 30E5 # KATAKANA LETTER SMALL YU A5E6 30E6 # KATAKANA LETTER YU A5E7 30E7 # KATAKANA LETTER SMALL YO A5E8 30E8 # KATAKANA LETTER YO A5E9 30E9 # KATAKANA LETTER RA A5EA 30EA # KATAKANA LETTER RI A5EB 30EB # KATAKANA LETTER RU A5EC 30EC # KATAKANA LETTER RE A5ED 30ED # KATAKANA LETTER RO A5EE 30EE # KATAKANA LETTER SMALL WA A5EF 30EF # KATAKANA LETTER WA A5F0 30F0 # KATAKANA LETTER WI A5F1 30F1 # KATAKANA LETTER WE A5F2 30F2 # KATAKANA LETTER WO A5F3 30F3 # KATAKANA LETTER N A5F4 30F4 # KATAKANA LETTER VU A5F5 30F5 # KATAKANA LETTER SMALL KA A5F6 30F6 # KATAKANA LETTER SMALL KE A6A1 0391 # GREEK CAPITAL LETTER ALPHA A6A2 0392 # GREEK CAPITAL LETTER BETA A6A3 0393 # GREEK CAPITAL LETTER GAMMA A6A4 0394 # GREEK CAPITAL LETTER DELTA A6A5 0395 # GREEK CAPITAL LETTER EPSILON A6A6 0396 # GREEK CAPITAL LETTER ZETA A6A7 0397 # GREEK CAPITAL LETTER ETA A6A8 0398 # GREEK CAPITAL LETTER THETA A6A9 0399 # GREEK CAPITAL LETTER IOTA A6AA 039A # GREEK CAPITAL LETTER KAPPA A6AB 039B # GREEK CAPITAL LETTER LAMDA A6AC 039C # GREEK CAPITAL LETTER MU A6AD 039D # GREEK CAPITAL LETTER NU A6AE 039E # GREEK CAPITAL LETTER XI A6AF 039F # GREEK CAPITAL LETTER OMICRON A6B0 03A0 # GREEK CAPITAL LETTER PI A6B1 03A1 # GREEK CAPITAL LETTER RHO A6B2 03A3 # GREEK CAPITAL LETTER SIGMA A6B3 03A4 # GREEK CAPITAL LETTER TAU A6B4 03A5 # GREEK CAPITAL LETTER UPSILON A6B5 03A6 # GREEK CAPITAL LETTER PHI A6B6 03A7 # GREEK CAPITAL LETTER CHI A6B7 03A8 # GREEK CAPITAL LETTER PSI A6B8 03A9 # GREEK CAPITAL LETTER OMEGA A6C1 03B1 # GREEK SMALL LETTER ALPHA A6C2 03B2 # GREEK SMALL LETTER BETA A6C3 03B3 # GREEK SMALL LETTER GAMMA A6C4 03B4 # GREEK SMALL LETTER DELTA A6C5 03B5 # GREEK SMALL LETTER EPSILON A6C6 03B6 # GREEK SMALL LETTER ZETA A6C7 03B7 # GREEK SMALL LETTER ETA A6C8 03B8 # GREEK SMALL LETTER THETA A6C9 03B9 # GREEK SMALL LETTER IOTA A6CA 03BA # GREEK SMALL LETTER KAPPA A6CB 03BB # GREEK SMALL LETTER LAMDA A6CC 03BC # GREEK SMALL LETTER MU A6CD 03BD # GREEK SMALL LETTER NU A6CE 03BE # GREEK SMALL LETTER XI A6CF 03BF # GREEK SMALL LETTER OMICRON A6D0 03C0 # GREEK SMALL LETTER PI A6D1 03C1 # GREEK SMALL LETTER RHO A6D2 03C3 # GREEK SMALL LETTER SIGMA A6D3 03C4 # GREEK SMALL LETTER TAU A6D4 03C5 # GREEK SMALL LETTER UPSILON A6D5 03C6 # GREEK SMALL LETTER PHI A6D6 03C7 # GREEK SMALL LETTER CHI A6D7 03C8 # GREEK SMALL LETTER PSI A6D8 03C9 # GREEK SMALL LETTER OMEGA A7A1 0410 # CYRILLIC CAPITAL LETTER A A7A2 0411 # CYRILLIC CAPITAL LETTER BE A7A3 0412 # CYRILLIC CAPITAL LETTER VE A7A4 0413 # CYRILLIC CAPITAL LETTER GHE A7A5 0414 # CYRILLIC CAPITAL LETTER DE A7A6 0415 # CYRILLIC CAPITAL LETTER IE A7A7 0401 # CYRILLIC CAPITAL LETTER IO A7A8 0416 # CYRILLIC CAPITAL LETTER ZHE A7A9 0417 # CYRILLIC CAPITAL LETTER ZE A7AA 0418 # CYRILLIC CAPITAL LETTER I A7AB 0419 # CYRILLIC CAPITAL LETTER SHORT I A7AC 041A # CYRILLIC CAPITAL LETTER KA A7AD 041B # CYRILLIC CAPITAL LETTER EL A7AE 041C # CYRILLIC CAPITAL LETTER EM A7AF 041D # CYRILLIC CAPITAL LETTER EN A7B0 041E # CYRILLIC CAPITAL LETTER O A7B1 041F # CYRILLIC CAPITAL LETTER PE A7B2 0420 # CYRILLIC CAPITAL LETTER ER A7B3 0421 # CYRILLIC CAPITAL LETTER ES A7B4 0422 # CYRILLIC CAPITAL LETTER TE A7B5 0423 # CYRILLIC CAPITAL LETTER U A7B6 0424 # CYRILLIC CAPITAL LETTER EF A7B7 0425 # CYRILLIC CAPITAL LETTER HA A7B8 0426 # CYRILLIC CAPITAL LETTER TSE A7B9 0427 # CYRILLIC CAPITAL LETTER CHE A7BA 0428 # CYRILLIC CAPITAL LETTER SHA A7BB 0429 # CYRILLIC CAPITAL LETTER SHCHA A7BC 042A # CYRILLIC CAPITAL LETTER HARD SIGN A7BD 042B # CYRILLIC CAPITAL LETTER YERU A7BE 042C # CYRILLIC CAPITAL LETTER SOFT SIGN A7BF 042D # CYRILLIC CAPITAL LETTER E A7C0 042E # CYRILLIC CAPITAL LETTER YU A7C1 042F # CYRILLIC CAPITAL LETTER YA A7D1 0430 # CYRILLIC SMALL LETTER A A7D2 0431 # CYRILLIC SMALL LETTER BE A7D3 0432 # CYRILLIC SMALL LETTER VE A7D4 0433 # CYRILLIC SMALL LETTER GHE A7D5 0434 # CYRILLIC SMALL LETTER DE A7D6 0435 # CYRILLIC SMALL LETTER IE A7D7 0451 # CYRILLIC SMALL LETTER IO A7D8 0436 # CYRILLIC SMALL LETTER ZHE A7D9 0437 # CYRILLIC SMALL LETTER ZE A7DA 0438 # CYRILLIC SMALL LETTER I A7DB 0439 # CYRILLIC SMALL LETTER SHORT I A7DC 043A # CYRILLIC SMALL LETTER KA A7DD 043B # CYRILLIC SMALL LETTER EL A7DE 043C # CYRILLIC SMALL LETTER EM A7DF 043D # CYRILLIC SMALL LETTER EN A7E0 043E # CYRILLIC SMALL LETTER O A7E1 043F # CYRILLIC SMALL LETTER PE A7E2 0440 # CYRILLIC SMALL LETTER ER A7E3 0441 # CYRILLIC SMALL LETTER ES A7E4 0442 # CYRILLIC SMALL LETTER TE A7E5 0443 # CYRILLIC SMALL LETTER U A7E6 0444 # CYRILLIC SMALL LETTER EF A7E7 0445 # CYRILLIC SMALL LETTER HA A7E8 0446 # CYRILLIC SMALL LETTER TSE A7E9 0447 # CYRILLIC SMALL LETTER CHE A7EA 0448 # CYRILLIC SMALL LETTER SHA A7EB 0449 # CYRILLIC SMALL LETTER SHCHA A7EC 044A # CYRILLIC SMALL LETTER HARD SIGN A7ED 044B # CYRILLIC SMALL LETTER YERU A7EE 044C # CYRILLIC SMALL LETTER SOFT SIGN A7EF 044D # CYRILLIC SMALL LETTER E A7F0 044E # CYRILLIC SMALL LETTER YU A7F1 044F # CYRILLIC SMALL LETTER YA A8A1 0101 # LATIN SMALL LETTER A WITH MACRON A8A2 00E1 # LATIN SMALL LETTER A WITH ACUTE A8A3 01CE # LATIN SMALL LETTER A WITH CARON A8A4 00E0 # LATIN SMALL LETTER A WITH GRAVE A8A5 0113 # LATIN SMALL LETTER E WITH MACRON A8A6 00E9 # LATIN SMALL LETTER E WITH ACUTE A8A7 011B # LATIN SMALL LETTER E WITH CARON A8A8 00E8 # LATIN SMALL LETTER E WITH GRAVE A8A9 012B # LATIN SMALL LETTER I WITH MACRON A8AA 00ED # LATIN SMALL LETTER I WITH ACUTE A8AB 01D0 # LATIN SMALL LETTER I WITH CARON A8AC 00EC # LATIN SMALL LETTER I WITH GRAVE A8AD 014D # LATIN SMALL LETTER O WITH MACRON A8AE 00F3 # LATIN SMALL LETTER O WITH ACUTE A8AF 01D2 # LATIN SMALL LETTER O WITH CARON A8B0 00F2 # LATIN SMALL LETTER O WITH GRAVE A8B1 016B # LATIN SMALL LETTER U WITH MACRON A8B2 00FA # LATIN SMALL LETTER U WITH ACUTE A8B3 01D4 # LATIN SMALL LETTER U WITH CARON A8B4 00F9 # LATIN SMALL LETTER U WITH GRAVE A8B5 01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON A8B6 01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE A8B7 01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON A8B8 01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE A8B9 00FC # LATIN SMALL LETTER U WITH DIAERESIS A8BA 00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX A8C5 3105 # BOPOMOFO LETTER B A8C6 3106 # BOPOMOFO LETTER P A8C7 3107 # BOPOMOFO LETTER M A8C8 3108 # BOPOMOFO LETTER F A8C9 3109 # BOPOMOFO LETTER D A8CA 310A # BOPOMOFO LETTER T A8CB 310B # BOPOMOFO LETTER N A8CC 310C # BOPOMOFO LETTER L A8CD 310D # BOPOMOFO LETTER G A8CE 310E # BOPOMOFO LETTER K A8CF 310F # BOPOMOFO LETTER H A8D0 3110 # BOPOMOFO LETTER J A8D1 3111 # BOPOMOFO LETTER Q A8D2 3112 # BOPOMOFO LETTER X A8D3 3113 # BOPOMOFO LETTER ZH A8D4 3114 # BOPOMOFO LETTER CH A8D5 3115 # BOPOMOFO LETTER SH A8D6 3116 # BOPOMOFO LETTER R A8D7 3117 # BOPOMOFO LETTER Z A8D8 3118 # BOPOMOFO LETTER C A8D9 3119 # BOPOMOFO LETTER S A8DA 311A # BOPOMOFO LETTER A A8DB 311B # BOPOMOFO LETTER O A8DC 311C # BOPOMOFO LETTER E A8DD 311D # BOPOMOFO LETTER EH A8DE 311E # BOPOMOFO LETTER AI A8DF 311F # BOPOMOFO LETTER EI A8E0 3120 # BOPOMOFO LETTER AU A8E1 3121 # BOPOMOFO LETTER OU A8E2 3122 # BOPOMOFO LETTER AN A8E3 3123 # BOPOMOFO LETTER EN A8E4 3124 # BOPOMOFO LETTER ANG A8E5 3125 # BOPOMOFO LETTER ENG A8E6 3126 # BOPOMOFO LETTER ER A8E7 3127 # BOPOMOFO LETTER I A8E8 3128 # BOPOMOFO LETTER U A8E9 3129 # BOPOMOFO LETTER IU A9A4 2500 # BOX DRAWINGS LIGHT HORIZONTAL A9A5 2501 # BOX DRAWINGS HEAVY HORIZONTAL A9A6 2502 # BOX DRAWINGS LIGHT VERTICAL A9A7 2503 # BOX DRAWINGS HEAVY VERTICAL A9A8 2504 # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL A9A9 2505 # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL A9AA 2506 # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL A9AB 2507 # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL A9AC 2508 # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL A9AD 2509 # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL A9AE 250A # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL A9AF 250B # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL A9B0 250C # BOX DRAWINGS LIGHT DOWN AND RIGHT A9B1 250D # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY A9B2 250E # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT A9B3 250F # BOX DRAWINGS HEAVY DOWN AND RIGHT A9B4 2510 # BOX DRAWINGS LIGHT DOWN AND LEFT A9B5 2511 # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY A9B6 2512 # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT A9B7 2513 # BOX DRAWINGS HEAVY DOWN AND LEFT A9B8 2514 # BOX DRAWINGS LIGHT UP AND RIGHT A9B9 2515 # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY A9BA 2516 # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT A9BB 2517 # BOX DRAWINGS HEAVY UP AND RIGHT A9BC 2518 # BOX DRAWINGS LIGHT UP AND LEFT A9BD 2519 # BOX DRAWINGS UP LIGHT AND LEFT HEAVY A9BE 251A # BOX DRAWINGS UP HEAVY AND LEFT LIGHT A9BF 251B # BOX DRAWINGS HEAVY UP AND LEFT A9C0 251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT A9C1 251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY A9C2 251E # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT A9C3 251F # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT A9C4 2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT A9C5 2521 # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY A9C6 2522 # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY A9C7 2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT A9C8 2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT A9C9 2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY A9CA 2526 # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT A9CB 2527 # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT A9CC 2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT A9CD 2529 # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY A9CE 252A # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY A9CF 252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT A9D0 252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL A9D1 252D # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT A9D2 252E # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT A9D3 252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY A9D4 2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT A9D5 2531 # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY A9D6 2532 # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY A9D7 2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL A9D8 2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL A9D9 2535 # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT A9DA 2536 # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT A9DB 2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY A9DC 2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT A9DD 2539 # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY A9DE 253A # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY A9DF 253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL A9E0 253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL A9E1 253D # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT A9E2 253E # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT A9E3 253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY A9E4 2540 # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT A9E5 2541 # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT A9E6 2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT A9E7 2543 # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT A9E8 2544 # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT A9E9 2545 # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT A9EA 2546 # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT A9EB 2547 # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY A9EC 2548 # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY A9ED 2549 # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY A9EE 254A # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY A9EF 254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL B0A1 554A # B0A2 963F # B0A3 57C3 # B0A4 6328 # B0A5 54CE # B0A6 5509 # B0A7 54C0 # B0A8 7691 # B0A9 764C # B0AA 853C # B0AB 77EE # B0AC 827E # B0AD 788D # B0AE 7231 # B0AF 9698 # B0B0 978D # B0B1 6C28 # B0B2 5B89 # B0B3 4FFA # B0B4 6309 # B0B5 6697 # B0B6 5CB8 # B0B7 80FA # B0B8 6848 # B0B9 80AE # B0BA 6602 # B0BB 76CE # B0BC 51F9 # B0BD 6556 # B0BE 71AC # B0BF 7FF1 # B0C0 8884 # B0C1 50B2 # B0C2 5965 # B0C3 61CA # B0C4 6FB3 # B0C5 82AD # B0C6 634C # B0C7 6252 # B0C8 53ED # B0C9 5427 # B0CA 7B06 # B0CB 516B # B0CC 75A4 # B0CD 5DF4 # B0CE 62D4 # B0CF 8DCB # B0D0 9776 # B0D1 628A # B0D2 8019 # B0D3 575D # B0D4 9738 # B0D5 7F62 # B0D6 7238 # B0D7 767D # B0D8 67CF # B0D9 767E # B0DA 6446 # B0DB 4F70 # B0DC 8D25 # B0DD 62DC # B0DE 7A17 # B0DF 6591 # B0E0 73ED # B0E1 642C # B0E2 6273 # B0E3 822C # B0E4 9881 # B0E5 677F # B0E6 7248 # B0E7 626E # B0E8 62CC # B0E9 4F34 # B0EA 74E3 # B0EB 534A # B0EC 529E # B0ED 7ECA # B0EE 90A6 # B0EF 5E2E # B0F0 6886 # B0F1 699C # B0F2 8180 # B0F3 7ED1 # B0F4 68D2 # B0F5 78C5 # B0F6 868C # B0F7 9551 # B0F8 508D # B0F9 8C24 # B0FA 82DE # B0FB 80DE # B0FC 5305 # B0FD 8912 # B0FE 5265 # B1A1 8584 # B1A2 96F9 # B1A3 4FDD # B1A4 5821 # B1A5 9971 # B1A6 5B9D # B1A7 62B1 # B1A8 62A5 # B1A9 66B4 # B1AA 8C79 # B1AB 9C8D # B1AC 7206 # B1AD 676F # B1AE 7891 # B1AF 60B2 # B1B0 5351 # B1B1 5317 # B1B2 8F88 # B1B3 80CC # B1B4 8D1D # B1B5 94A1 # B1B6 500D # B1B7 72C8 # B1B8 5907 # B1B9 60EB # B1BA 7119 # B1BB 88AB # B1BC 5954 # B1BD 82EF # B1BE 672C # B1BF 7B28 # B1C0 5D29 # B1C1 7EF7 # B1C2 752D # B1C3 6CF5 # B1C4 8E66 # B1C5 8FF8 # B1C6 903C # B1C7 9F3B # B1C8 6BD4 # B1C9 9119 # B1CA 7B14 # B1CB 5F7C # B1CC 78A7 # B1CD 84D6 # B1CE 853D # B1CF 6BD5 # B1D0 6BD9 # B1D1 6BD6 # B1D2 5E01 # B1D3 5E87 # B1D4 75F9 # B1D5 95ED # B1D6 655D # B1D7 5F0A # B1D8 5FC5 # B1D9 8F9F # B1DA 58C1 # B1DB 81C2 # B1DC 907F # B1DD 965B # B1DE 97AD # B1DF 8FB9 # B1E0 7F16 # B1E1 8D2C # B1E2 6241 # B1E3 4FBF # B1E4 53D8 # B1E5 535E # B1E6 8FA8 # B1E7 8FA9 # B1E8 8FAB # B1E9 904D # B1EA 6807 # B1EB 5F6A # B1EC 8198 # B1ED 8868 # B1EE 9CD6 # B1EF 618B # B1F0 522B # B1F1 762A # B1F2 5F6C # B1F3 658C # B1F4 6FD2 # B1F5 6EE8 # B1F6 5BBE # B1F7 6448 # B1F8 5175 # B1F9 51B0 # B1FA 67C4 # B1FB 4E19 # B1FC 79C9 # B1FD 997C # B1FE 70B3 # B2A1 75C5 # B2A2 5E76 # B2A3 73BB # B2A4 83E0 # B2A5 64AD # B2A6 62E8 # B2A7 94B5 # B2A8 6CE2 # B2A9 535A # B2AA 52C3 # B2AB 640F # B2AC 94C2 # B2AD 7B94 # B2AE 4F2F # B2AF 5E1B # B2B0 8236 # B2B1 8116 # B2B2 818A # B2B3 6E24 # B2B4 6CCA # B2B5 9A73 # B2B6 6355 # B2B7 535C # B2B8 54FA # B2B9 8865 # B2BA 57E0 # B2BB 4E0D # B2BC 5E03 # B2BD 6B65 # B2BE 7C3F # B2BF 90E8 # B2C0 6016 # B2C1 64E6 # B2C2 731C # B2C3 88C1 # B2C4 6750 # B2C5 624D # B2C6 8D22 # B2C7 776C # B2C8 8E29 # B2C9 91C7 # B2CA 5F69 # B2CB 83DC # B2CC 8521 # B2CD 9910 # B2CE 53C2 # B2CF 8695 # B2D0 6B8B # B2D1 60ED # B2D2 60E8 # B2D3 707F # B2D4 82CD # B2D5 8231 # B2D6 4ED3 # B2D7 6CA7 # B2D8 85CF # B2D9 64CD # B2DA 7CD9 # B2DB 69FD # B2DC 66F9 # B2DD 8349 # B2DE 5395 # B2DF 7B56 # B2E0 4FA7 # B2E1 518C # B2E2 6D4B # B2E3 5C42 # B2E4 8E6D # B2E5 63D2 # B2E6 53C9 # B2E7 832C # B2E8 8336 # B2E9 67E5 # B2EA 78B4 # B2EB 643D # B2EC 5BDF # B2ED 5C94 # B2EE 5DEE # B2EF 8BE7 # B2F0 62C6 # B2F1 67F4 # B2F2 8C7A # B2F3 6400 # B2F4 63BA # B2F5 8749 # B2F6 998B # B2F7 8C17 # B2F8 7F20 # B2F9 94F2 # B2FA 4EA7 # B2FB 9610 # B2FC 98A4 # B2FD 660C # B2FE 7316 # B3A1 573A # B3A2 5C1D # B3A3 5E38 # B3A4 957F # B3A5 507F # B3A6 80A0 # B3A7 5382 # B3A8 655E # B3A9 7545 # B3AA 5531 # B3AB 5021 # B3AC 8D85 # B3AD 6284 # B3AE 949E # B3AF 671D # B3B0 5632 # B3B1 6F6E # B3B2 5DE2 # B3B3 5435 # B3B4 7092 # B3B5 8F66 # B3B6 626F # B3B7 64A4 # B3B8 63A3 # B3B9 5F7B # B3BA 6F88 # B3BB 90F4 # B3BC 81E3 # B3BD 8FB0 # B3BE 5C18 # B3BF 6668 # B3C0 5FF1 # B3C1 6C89 # B3C2 9648 # B3C3 8D81 # B3C4 886C # B3C5 6491 # B3C6 79F0 # B3C7 57CE # B3C8 6A59 # B3C9 6210 # B3CA 5448 # B3CB 4E58 # B3CC 7A0B # B3CD 60E9 # B3CE 6F84 # B3CF 8BDA # B3D0 627F # B3D1 901E # B3D2 9A8B # B3D3 79E4 # B3D4 5403 # B3D5 75F4 # B3D6 6301 # B3D7 5319 # B3D8 6C60 # B3D9 8FDF # B3DA 5F1B # B3DB 9A70 # B3DC 803B # B3DD 9F7F # B3DE 4F88 # B3DF 5C3A # B3E0 8D64 # B3E1 7FC5 # B3E2 65A5 # B3E3 70BD # B3E4 5145 # B3E5 51B2 # B3E6 866B # B3E7 5D07 # B3E8 5BA0 # B3E9 62BD # B3EA 916C # B3EB 7574 # B3EC 8E0C # B3ED 7A20 # B3EE 6101 # B3EF 7B79 # B3F0 4EC7 # B3F1 7EF8 # B3F2 7785 # B3F3 4E11 # B3F4 81ED # B3F5 521D # B3F6 51FA # B3F7 6A71 # B3F8 53A8 # B3F9 8E87 # B3FA 9504 # B3FB 96CF # B3FC 6EC1 # B3FD 9664 # B3FE 695A # B4A1 7840 # B4A2 50A8 # B4A3 77D7 # B4A4 6410 # B4A5 89E6 # B4A6 5904 # B4A7 63E3 # B4A8 5DDD # B4A9 7A7F # B4AA 693D # B4AB 4F20 # B4AC 8239 # B4AD 5598 # B4AE 4E32 # B4AF 75AE # B4B0 7A97 # B4B1 5E62 # B4B2 5E8A # B4B3 95EF # B4B4 521B # B4B5 5439 # B4B6 708A # B4B7 6376 # B4B8 9524 # B4B9 5782 # B4BA 6625 # B4BB 693F # B4BC 9187 # B4BD 5507 # B4BE 6DF3 # B4BF 7EAF # B4C0 8822 # B4C1 6233 # B4C2 7EF0 # B4C3 75B5 # B4C4 8328 # B4C5 78C1 # B4C6 96CC # B4C7 8F9E # B4C8 6148 # B4C9 74F7 # B4CA 8BCD # B4CB 6B64 # B4CC 523A # B4CD 8D50 # B4CE 6B21 # B4CF 806A # B4D0 8471 # B4D1 56F1 # B4D2 5306 # B4D3 4ECE # B4D4 4E1B # B4D5 51D1 # B4D6 7C97 # B4D7 918B # B4D8 7C07 # B4D9 4FC3 # B4DA 8E7F # B4DB 7BE1 # B4DC 7A9C # B4DD 6467 # B4DE 5D14 # B4DF 50AC # B4E0 8106 # B4E1 7601 # B4E2 7CB9 # B4E3 6DEC # B4E4 7FE0 # B4E5 6751 # B4E6 5B58 # B4E7 5BF8 # B4E8 78CB # B4E9 64AE # B4EA 6413 # B4EB 63AA # B4EC 632B # B4ED 9519 # B4EE 642D # B4EF 8FBE # B4F0 7B54 # B4F1 7629 # B4F2 6253 # B4F3 5927 # B4F4 5446 # B4F5 6B79 # B4F6 50A3 # B4F7 6234 # B4F8 5E26 # B4F9 6B86 # B4FA 4EE3 # B4FB 8D37 # B4FC 888B # B4FD 5F85 # B4FE 902E # B5A1 6020 # B5A2 803D # B5A3 62C5 # B5A4 4E39 # B5A5 5355 # B5A6 90F8 # B5A7 63B8 # B5A8 80C6 # B5A9 65E6 # B5AA 6C2E # B5AB 4F46 # B5AC 60EE # B5AD 6DE1 # B5AE 8BDE # B5AF 5F39 # B5B0 86CB # B5B1 5F53 # B5B2 6321 # B5B3 515A # B5B4 8361 # B5B5 6863 # B5B6 5200 # B5B7 6363 # B5B8 8E48 # B5B9 5012 # B5BA 5C9B # B5BB 7977 # B5BC 5BFC # B5BD 5230 # B5BE 7A3B # B5BF 60BC # B5C0 9053 # B5C1 76D7 # B5C2 5FB7 # B5C3 5F97 # B5C4 7684 # B5C5 8E6C # B5C6 706F # B5C7 767B # B5C8 7B49 # B5C9 77AA # B5CA 51F3 # B5CB 9093 # B5CC 5824 # B5CD 4F4E # B5CE 6EF4 # B5CF 8FEA # B5D0 654C # B5D1 7B1B # B5D2 72C4 # B5D3 6DA4 # B5D4 7FDF # B5D5 5AE1 # B5D6 62B5 # B5D7 5E95 # B5D8 5730 # B5D9 8482 # B5DA 7B2C # B5DB 5E1D # B5DC 5F1F # B5DD 9012 # B5DE 7F14 # B5DF 98A0 # B5E0 6382 # B5E1 6EC7 # B5E2 7898 # B5E3 70B9 # B5E4 5178 # B5E5 975B # B5E6 57AB # B5E7 7535 # B5E8 4F43 # B5E9 7538 # B5EA 5E97 # B5EB 60E6 # B5EC 5960 # B5ED 6DC0 # B5EE 6BBF # B5EF 7889 # B5F0 53FC # B5F1 96D5 # B5F2 51CB # B5F3 5201 # B5F4 6389 # B5F5 540A # B5F6 9493 # B5F7 8C03 # B5F8 8DCC # B5F9 7239 # B5FA 789F # B5FB 8776 # B5FC 8FED # B5FD 8C0D # B5FE 53E0 # B6A1 4E01 # B6A2 76EF # B6A3 53EE # B6A4 9489 # B6A5 9876 # B6A6 9F0E # B6A7 952D # B6A8 5B9A # B6A9 8BA2 # B6AA 4E22 # B6AB 4E1C # B6AC 51AC # B6AD 8463 # B6AE 61C2 # B6AF 52A8 # B6B0 680B # B6B1 4F97 # B6B2 606B # B6B3 51BB # B6B4 6D1E # B6B5 515C # B6B6 6296 # B6B7 6597 # B6B8 9661 # B6B9 8C46 # B6BA 9017 # B6BB 75D8 # B6BC 90FD # B6BD 7763 # B6BE 6BD2 # B6BF 728A # B6C0 72EC # B6C1 8BFB # B6C2 5835 # B6C3 7779 # B6C4 8D4C # B6C5 675C # B6C6 9540 # B6C7 809A # B6C8 5EA6 # B6C9 6E21 # B6CA 5992 # B6CB 7AEF # B6CC 77ED # B6CD 953B # B6CE 6BB5 # B6CF 65AD # B6D0 7F0E # B6D1 5806 # B6D2 5151 # B6D3 961F # B6D4 5BF9 # B6D5 58A9 # B6D6 5428 # B6D7 8E72 # B6D8 6566 # B6D9 987F # B6DA 56E4 # B6DB 949D # B6DC 76FE # B6DD 9041 # B6DE 6387 # B6DF 54C6 # B6E0 591A # B6E1 593A # B6E2 579B # B6E3 8EB2 # B6E4 6735 # B6E5 8DFA # B6E6 8235 # B6E7 5241 # B6E8 60F0 # B6E9 5815 # B6EA 86FE # B6EB 5CE8 # B6EC 9E45 # B6ED 4FC4 # B6EE 989D # B6EF 8BB9 # B6F0 5A25 # B6F1 6076 # B6F2 5384 # B6F3 627C # B6F4 904F # B6F5 9102 # B6F6 997F # B6F7 6069 # B6F8 800C # B6F9 513F # B6FA 8033 # B6FB 5C14 # B6FC 9975 # B6FD 6D31 # B6FE 4E8C # B7A1 8D30 # B7A2 53D1 # B7A3 7F5A # B7A4 7B4F # B7A5 4F10 # B7A6 4E4F # B7A7 9600 # B7A8 6CD5 # B7A9 73D0 # B7AA 85E9 # B7AB 5E06 # B7AC 756A # B7AD 7FFB # B7AE 6A0A # B7AF 77FE # B7B0 9492 # B7B1 7E41 # B7B2 51E1 # B7B3 70E6 # B7B4 53CD # B7B5 8FD4 # B7B6 8303 # B7B7 8D29 # B7B8 72AF # B7B9 996D # B7BA 6CDB # B7BB 574A # B7BC 82B3 # B7BD 65B9 # B7BE 80AA # B7BF 623F # B7C0 9632 # B7C1 59A8 # B7C2 4EFF # B7C3 8BBF # B7C4 7EBA # B7C5 653E # B7C6 83F2 # B7C7 975E # B7C8 5561 # B7C9 98DE # B7CA 80A5 # B7CB 532A # B7CC 8BFD # B7CD 5420 # B7CE 80BA # B7CF 5E9F # B7D0 6CB8 # B7D1 8D39 # B7D2 82AC # B7D3 915A # B7D4 5429 # B7D5 6C1B # B7D6 5206 # B7D7 7EB7 # B7D8 575F # B7D9 711A # B7DA 6C7E # B7DB 7C89 # B7DC 594B # B7DD 4EFD # B7DE 5FFF # B7DF 6124 # B7E0 7CAA # B7E1 4E30 # B7E2 5C01 # B7E3 67AB # B7E4 8702 # B7E5 5CF0 # B7E6 950B # B7E7 98CE # B7E8 75AF # B7E9 70FD # B7EA 9022 # B7EB 51AF # B7EC 7F1D # B7ED 8BBD # B7EE 5949 # B7EF 51E4 # B7F0 4F5B # B7F1 5426 # B7F2 592B # B7F3 6577 # B7F4 80A4 # B7F5 5B75 # B7F6 6276 # B7F7 62C2 # B7F8 8F90 # B7F9 5E45 # B7FA 6C1F # B7FB 7B26 # B7FC 4F0F # B7FD 4FD8 # B7FE 670D # B8A1 6D6E # B8A2 6DAA # B8A3 798F # B8A4 88B1 # B8A5 5F17 # B8A6 752B # B8A7 629A # B8A8 8F85 # B8A9 4FEF # B8AA 91DC # B8AB 65A7 # B8AC 812F # B8AD 8151 # B8AE 5E9C # B8AF 8150 # B8B0 8D74 # B8B1 526F # B8B2 8986 # B8B3 8D4B # B8B4 590D # B8B5 5085 # B8B6 4ED8 # B8B7 961C # B8B8 7236 # B8B9 8179 # B8BA 8D1F # B8BB 5BCC # B8BC 8BA3 # B8BD 9644 # B8BE 5987 # B8BF 7F1A # B8C0 5490 # B8C1 5676 # B8C2 560E # B8C3 8BE5 # B8C4 6539 # B8C5 6982 # B8C6 9499 # B8C7 76D6 # B8C8 6E89 # B8C9 5E72 # B8CA 7518 # B8CB 6746 # B8CC 67D1 # B8CD 7AFF # B8CE 809D # B8CF 8D76 # B8D0 611F # B8D1 79C6 # B8D2 6562 # B8D3 8D63 # B8D4 5188 # B8D5 521A # B8D6 94A2 # B8D7 7F38 # B8D8 809B # B8D9 7EB2 # B8DA 5C97 # B8DB 6E2F # B8DC 6760 # B8DD 7BD9 # B8DE 768B # B8DF 9AD8 # B8E0 818F # B8E1 7F94 # B8E2 7CD5 # B8E3 641E # B8E4 9550 # B8E5 7A3F # B8E6 544A # B8E7 54E5 # B8E8 6B4C # B8E9 6401 # B8EA 6208 # B8EB 9E3D # B8EC 80F3 # B8ED 7599 # B8EE 5272 # B8EF 9769 # B8F0 845B # B8F1 683C # B8F2 86E4 # B8F3 9601 # B8F4 9694 # B8F5 94EC # B8F6 4E2A # B8F7 5404 # B8F8 7ED9 # B8F9 6839 # B8FA 8DDF # B8FB 8015 # B8FC 66F4 # B8FD 5E9A # B8FE 7FB9 # B9A1 57C2 # B9A2 803F # B9A3 6897 # B9A4 5DE5 # B9A5 653B # B9A6 529F # B9A7 606D # B9A8 9F9A # B9A9 4F9B # B9AA 8EAC # B9AB 516C # B9AC 5BAB # B9AD 5F13 # B9AE 5DE9 # B9AF 6C5E # B9B0 62F1 # B9B1 8D21 # B9B2 5171 # B9B3 94A9 # B9B4 52FE # B9B5 6C9F # B9B6 82DF # B9B7 72D7 # B9B8 57A2 # B9B9 6784 # B9BA 8D2D # B9BB 591F # B9BC 8F9C # B9BD 83C7 # B9BE 5495 # B9BF 7B8D # B9C0 4F30 # B9C1 6CBD # B9C2 5B64 # B9C3 59D1 # B9C4 9F13 # B9C5 53E4 # B9C6 86CA # B9C7 9AA8 # B9C8 8C37 # B9C9 80A1 # B9CA 6545 # B9CB 987E # B9CC 56FA # B9CD 96C7 # B9CE 522E # B9CF 74DC # B9D0 5250 # B9D1 5BE1 # B9D2 6302 # B9D3 8902 # B9D4 4E56 # B9D5 62D0 # B9D6 602A # B9D7 68FA # B9D8 5173 # B9D9 5B98 # B9DA 51A0 # B9DB 89C2 # B9DC 7BA1 # B9DD 9986 # B9DE 7F50 # B9DF 60EF # B9E0 704C # B9E1 8D2F # B9E2 5149 # B9E3 5E7F # B9E4 901B # B9E5 7470 # B9E6 89C4 # B9E7 572D # B9E8 7845 # B9E9 5F52 # B9EA 9F9F # B9EB 95FA # B9EC 8F68 # B9ED 9B3C # B9EE 8BE1 # B9EF 7678 # B9F0 6842 # B9F1 67DC # B9F2 8DEA # B9F3 8D35 # B9F4 523D # B9F5 8F8A # B9F6 6EDA # B9F7 68CD # B9F8 9505 # B9F9 90ED # B9FA 56FD # B9FB 679C # B9FC 88F9 # B9FD 8FC7 # B9FE 54C8 # BAA1 9AB8 # BAA2 5B69 # BAA3 6D77 # BAA4 6C26 # BAA5 4EA5 # BAA6 5BB3 # BAA7 9A87 # BAA8 9163 # BAA9 61A8 # BAAA 90AF # BAAB 97E9 # BAAC 542B # BAAD 6DB5 # BAAE 5BD2 # BAAF 51FD # BAB0 558A # BAB1 7F55 # BAB2 7FF0 # BAB3 64BC # BAB4 634D # BAB5 65F1 # BAB6 61BE # BAB7 608D # BAB8 710A # BAB9 6C57 # BABA 6C49 # BABB 592F # BABC 676D # BABD 822A # BABE 58D5 # BABF 568E # BAC0 8C6A # BAC1 6BEB # BAC2 90DD # BAC3 597D # BAC4 8017 # BAC5 53F7 # BAC6 6D69 # BAC7 5475 # BAC8 559D # BAC9 8377 # BACA 83CF # BACB 6838 # BACC 79BE # BACD 548C # BACE 4F55 # BACF 5408 # BAD0 76D2 # BAD1 8C89 # BAD2 9602 # BAD3 6CB3 # BAD4 6DB8 # BAD5 8D6B # BAD6 8910 # BAD7 9E64 # BAD8 8D3A # BAD9 563F # BADA 9ED1 # BADB 75D5 # BADC 5F88 # BADD 72E0 # BADE 6068 # BADF 54FC # BAE0 4EA8 # BAE1 6A2A # BAE2 8861 # BAE3 6052 # BAE4 8F70 # BAE5 54C4 # BAE6 70D8 # BAE7 8679 # BAE8 9E3F # BAE9 6D2A # BAEA 5B8F # BAEB 5F18 # BAEC 7EA2 # BAED 5589 # BAEE 4FAF # BAEF 7334 # BAF0 543C # BAF1 539A # BAF2 5019 # BAF3 540E # BAF4 547C # BAF5 4E4E # BAF6 5FFD # BAF7 745A # BAF8 58F6 # BAF9 846B # BAFA 80E1 # BAFB 8774 # BAFC 72D0 # BAFD 7CCA # BAFE 6E56 # BBA1 5F27 # BBA2 864E # BBA3 552C # BBA4 62A4 # BBA5 4E92 # BBA6 6CAA # BBA7 6237 # BBA8 82B1 # BBA9 54D7 # BBAA 534E # BBAB 733E # BBAC 6ED1 # BBAD 753B # BBAE 5212 # BBAF 5316 # BBB0 8BDD # BBB1 69D0 # BBB2 5F8A # BBB3 6000 # BBB4 6DEE # BBB5 574F # BBB6 6B22 # BBB7 73AF # BBB8 6853 # BBB9 8FD8 # BBBA 7F13 # BBBB 6362 # BBBC 60A3 # BBBD 5524 # BBBE 75EA # BBBF 8C62 # BBC0 7115 # BBC1 6DA3 # BBC2 5BA6 # BBC3 5E7B # BBC4 8352 # BBC5 614C # BBC6 9EC4 # BBC7 78FA # BBC8 8757 # BBC9 7C27 # BBCA 7687 # BBCB 51F0 # BBCC 60F6 # BBCD 714C # BBCE 6643 # BBCF 5E4C # BBD0 604D # BBD1 8C0E # BBD2 7070 # BBD3 6325 # BBD4 8F89 # BBD5 5FBD # BBD6 6062 # BBD7 86D4 # BBD8 56DE # BBD9 6BC1 # BBDA 6094 # BBDB 6167 # BBDC 5349 # BBDD 60E0 # BBDE 6666 # BBDF 8D3F # BBE0 79FD # BBE1 4F1A # BBE2 70E9 # BBE3 6C47 # BBE4 8BB3 # BBE5 8BF2 # BBE6 7ED8 # BBE7 8364 # BBE8 660F # BBE9 5A5A # BBEA 9B42 # BBEB 6D51 # BBEC 6DF7 # BBED 8C41 # BBEE 6D3B # BBEF 4F19 # BBF0 706B # BBF1 83B7 # BBF2 6216 # BBF3 60D1 # BBF4 970D # BBF5 8D27 # BBF6 7978 # BBF7 51FB # BBF8 573E # BBF9 57FA # BBFA 673A # BBFB 7578 # BBFC 7A3D # BBFD 79EF # BBFE 7B95 # BCA1 808C # BCA2 9965 # BCA3 8FF9 # BCA4 6FC0 # BCA5 8BA5 # BCA6 9E21 # BCA7 59EC # BCA8 7EE9 # BCA9 7F09 # BCAA 5409 # BCAB 6781 # BCAC 68D8 # BCAD 8F91 # BCAE 7C4D # BCAF 96C6 # BCB0 53CA # BCB1 6025 # BCB2 75BE # BCB3 6C72 # BCB4 5373 # BCB5 5AC9 # BCB6 7EA7 # BCB7 6324 # BCB8 51E0 # BCB9 810A # BCBA 5DF1 # BCBB 84DF # BCBC 6280 # BCBD 5180 # BCBE 5B63 # BCBF 4F0E # BCC0 796D # BCC1 5242 # BCC2 60B8 # BCC3 6D4E # BCC4 5BC4 # BCC5 5BC2 # BCC6 8BA1 # BCC7 8BB0 # BCC8 65E2 # BCC9 5FCC # BCCA 9645 # BCCB 5993 # BCCC 7EE7 # BCCD 7EAA # BCCE 5609 # BCCF 67B7 # BCD0 5939 # BCD1 4F73 # BCD2 5BB6 # BCD3 52A0 # BCD4 835A # BCD5 988A # BCD6 8D3E # BCD7 7532 # BCD8 94BE # BCD9 5047 # BCDA 7A3C # BCDB 4EF7 # BCDC 67B6 # BCDD 9A7E # BCDE 5AC1 # BCDF 6B7C # BCE0 76D1 # BCE1 575A # BCE2 5C16 # BCE3 7B3A # BCE4 95F4 # BCE5 714E # BCE6 517C # BCE7 80A9 # BCE8 8270 # BCE9 5978 # BCEA 7F04 # BCEB 8327 # BCEC 68C0 # BCED 67EC # BCEE 78B1 # BCEF 7877 # BCF0 62E3 # BCF1 6361 # BCF2 7B80 # BCF3 4FED # BCF4 526A # BCF5 51CF # BCF6 8350 # BCF7 69DB # BCF8 9274 # BCF9 8DF5 # BCFA 8D31 # BCFB 89C1 # BCFC 952E # BCFD 7BAD # BCFE 4EF6 # BDA1 5065 # BDA2 8230 # BDA3 5251 # BDA4 996F # BDA5 6E10 # BDA6 6E85 # BDA7 6DA7 # BDA8 5EFA # BDA9 50F5 # BDAA 59DC # BDAB 5C06 # BDAC 6D46 # BDAD 6C5F # BDAE 7586 # BDAF 848B # BDB0 6868 # BDB1 5956 # BDB2 8BB2 # BDB3 5320 # BDB4 9171 # BDB5 964D # BDB6 8549 # BDB7 6912 # BDB8 7901 # BDB9 7126 # BDBA 80F6 # BDBB 4EA4 # BDBC 90CA # BDBD 6D47 # BDBE 9A84 # BDBF 5A07 # BDC0 56BC # BDC1 6405 # BDC2 94F0 # BDC3 77EB # BDC4 4FA5 # BDC5 811A # BDC6 72E1 # BDC7 89D2 # BDC8 997A # BDC9 7F34 # BDCA 7EDE # BDCB 527F # BDCC 6559 # BDCD 9175 # BDCE 8F7F # BDCF 8F83 # BDD0 53EB # BDD1 7A96 # BDD2 63ED # BDD3 63A5 # BDD4 7686 # BDD5 79F8 # BDD6 8857 # BDD7 9636 # BDD8 622A # BDD9 52AB # BDDA 8282 # BDDB 6854 # BDDC 6770 # BDDD 6377 # BDDE 776B # BDDF 7AED # BDE0 6D01 # BDE1 7ED3 # BDE2 89E3 # BDE3 59D0 # BDE4 6212 # BDE5 85C9 # BDE6 82A5 # BDE7 754C # BDE8 501F # BDE9 4ECB # BDEA 75A5 # BDEB 8BEB # BDEC 5C4A # BDED 5DFE # BDEE 7B4B # BDEF 65A4 # BDF0 91D1 # BDF1 4ECA # BDF2 6D25 # BDF3 895F # BDF4 7D27 # BDF5 9526 # BDF6 4EC5 # BDF7 8C28 # BDF8 8FDB # BDF9 9773 # BDFA 664B # BDFB 7981 # BDFC 8FD1 # BDFD 70EC # BDFE 6D78 # BEA1 5C3D # BEA2 52B2 # BEA3 8346 # BEA4 5162 # BEA5 830E # BEA6 775B # BEA7 6676 # BEA8 9CB8 # BEA9 4EAC # BEAA 60CA # BEAB 7CBE # BEAC 7CB3 # BEAD 7ECF # BEAE 4E95 # BEAF 8B66 # BEB0 666F # BEB1 9888 # BEB2 9759 # BEB3 5883 # BEB4 656C # BEB5 955C # BEB6 5F84 # BEB7 75C9 # BEB8 9756 # BEB9 7ADF # BEBA 7ADE # BEBB 51C0 # BEBC 70AF # BEBD 7A98 # BEBE 63EA # BEBF 7A76 # BEC0 7EA0 # BEC1 7396 # BEC2 97ED # BEC3 4E45 # BEC4 7078 # BEC5 4E5D # BEC6 9152 # BEC7 53A9 # BEC8 6551 # BEC9 65E7 # BECA 81FC # BECB 8205 # BECC 548E # BECD 5C31 # BECE 759A # BECF 97A0 # BED0 62D8 # BED1 72D9 # BED2 75BD # BED3 5C45 # BED4 9A79 # BED5 83CA # BED6 5C40 # BED7 5480 # BED8 77E9 # BED9 4E3E # BEDA 6CAE # BEDB 805A # BEDC 62D2 # BEDD 636E # BEDE 5DE8 # BEDF 5177 # BEE0 8DDD # BEE1 8E1E # BEE2 952F # BEE3 4FF1 # BEE4 53E5 # BEE5 60E7 # BEE6 70AC # BEE7 5267 # BEE8 6350 # BEE9 9E43 # BEEA 5A1F # BEEB 5026 # BEEC 7737 # BEED 5377 # BEEE 7EE2 # BEEF 6485 # BEF0 652B # BEF1 6289 # BEF2 6398 # BEF3 5014 # BEF4 7235 # BEF5 89C9 # BEF6 51B3 # BEF7 8BC0 # BEF8 7EDD # BEF9 5747 # BEFA 83CC # BEFB 94A7 # BEFC 519B # BEFD 541B # BEFE 5CFB # BFA1 4FCA # BFA2 7AE3 # BFA3 6D5A # BFA4 90E1 # BFA5 9A8F # BFA6 5580 # BFA7 5496 # BFA8 5361 # BFA9 54AF # BFAA 5F00 # BFAB 63E9 # BFAC 6977 # BFAD 51EF # BFAE 6168 # BFAF 520A # BFB0 582A # BFB1 52D8 # BFB2 574E # BFB3 780D # BFB4 770B # BFB5 5EB7 # BFB6 6177 # BFB7 7CE0 # BFB8 625B # BFB9 6297 # BFBA 4EA2 # BFBB 7095 # BFBC 8003 # BFBD 62F7 # BFBE 70E4 # BFBF 9760 # BFC0 5777 # BFC1 82DB # BFC2 67EF # BFC3 68F5 # BFC4 78D5 # BFC5 9897 # BFC6 79D1 # BFC7 58F3 # BFC8 54B3 # BFC9 53EF # BFCA 6E34 # BFCB 514B # BFCC 523B # BFCD 5BA2 # BFCE 8BFE # BFCF 80AF # BFD0 5543 # BFD1 57A6 # BFD2 6073 # BFD3 5751 # BFD4 542D # BFD5 7A7A # BFD6 6050 # BFD7 5B54 # BFD8 63A7 # BFD9 62A0 # BFDA 53E3 # BFDB 6263 # BFDC 5BC7 # BFDD 67AF # BFDE 54ED # BFDF 7A9F # BFE0 82E6 # BFE1 9177 # BFE2 5E93 # BFE3 88E4 # BFE4 5938 # BFE5 57AE # BFE6 630E # BFE7 8DE8 # BFE8 80EF # BFE9 5757 # BFEA 7B77 # BFEB 4FA9 # BFEC 5FEB # BFED 5BBD # BFEE 6B3E # BFEF 5321 # BFF0 7B50 # BFF1 72C2 # BFF2 6846 # BFF3 77FF # BFF4 7736 # BFF5 65F7 # BFF6 51B5 # BFF7 4E8F # BFF8 76D4 # BFF9 5CBF # BFFA 7AA5 # BFFB 8475 # BFFC 594E # BFFD 9B41 # BFFE 5080 # C0A1 9988 # C0A2 6127 # C0A3 6E83 # C0A4 5764 # C0A5 6606 # C0A6 6346 # C0A7 56F0 # C0A8 62EC # C0A9 6269 # C0AA 5ED3 # C0AB 9614 # C0AC 5783 # C0AD 62C9 # C0AE 5587 # C0AF 8721 # C0B0 814A # C0B1 8FA3 # C0B2 5566 # C0B3 83B1 # C0B4 6765 # C0B5 8D56 # C0B6 84DD # C0B7 5A6A # C0B8 680F # C0B9 62E6 # C0BA 7BEE # C0BB 9611 # C0BC 5170 # C0BD 6F9C # C0BE 8C30 # C0BF 63FD # C0C0 89C8 # C0C1 61D2 # C0C2 7F06 # C0C3 70C2 # C0C4 6EE5 # C0C5 7405 # C0C6 6994 # C0C7 72FC # C0C8 5ECA # C0C9 90CE # C0CA 6717 # C0CB 6D6A # C0CC 635E # C0CD 52B3 # C0CE 7262 # C0CF 8001 # C0D0 4F6C # C0D1 59E5 # C0D2 916A # C0D3 70D9 # C0D4 6D9D # C0D5 52D2 # C0D6 4E50 # C0D7 96F7 # C0D8 956D # C0D9 857E # C0DA 78CA # C0DB 7D2F # C0DC 5121 # C0DD 5792 # C0DE 64C2 # C0DF 808B # C0E0 7C7B # C0E1 6CEA # C0E2 68F1 # C0E3 695E # C0E4 51B7 # C0E5 5398 # C0E6 68A8 # C0E7 7281 # C0E8 9ECE # C0E9 7BF1 # C0EA 72F8 # C0EB 79BB # C0EC 6F13 # C0ED 7406 # C0EE 674E # C0EF 91CC # C0F0 9CA4 # C0F1 793C # C0F2 8389 # C0F3 8354 # C0F4 540F # C0F5 6817 # C0F6 4E3D # C0F7 5389 # C0F8 52B1 # C0F9 783E # C0FA 5386 # C0FB 5229 # C0FC 5088 # C0FD 4F8B # C0FE 4FD0 # C1A1 75E2 # C1A2 7ACB # C1A3 7C92 # C1A4 6CA5 # C1A5 96B6 # C1A6 529B # C1A7 7483 # C1A8 54E9 # C1A9 4FE9 # C1AA 8054 # C1AB 83B2 # C1AC 8FDE # C1AD 9570 # C1AE 5EC9 # C1AF 601C # C1B0 6D9F # C1B1 5E18 # C1B2 655B # C1B3 8138 # C1B4 94FE # C1B5 604B # C1B6 70BC # C1B7 7EC3 # C1B8 7CAE # C1B9 51C9 # C1BA 6881 # C1BB 7CB1 # C1BC 826F # C1BD 4E24 # C1BE 8F86 # C1BF 91CF # C1C0 667E # C1C1 4EAE # C1C2 8C05 # C1C3 64A9 # C1C4 804A # C1C5 50DA # C1C6 7597 # C1C7 71CE # C1C8 5BE5 # C1C9 8FBD # C1CA 6F66 # C1CB 4E86 # C1CC 6482 # C1CD 9563 # C1CE 5ED6 # C1CF 6599 # C1D0 5217 # C1D1 88C2 # C1D2 70C8 # C1D3 52A3 # C1D4 730E # C1D5 7433 # C1D6 6797 # C1D7 78F7 # C1D8 9716 # C1D9 4E34 # C1DA 90BB # C1DB 9CDE # C1DC 6DCB # C1DD 51DB # C1DE 8D41 # C1DF 541D # C1E0 62CE # C1E1 73B2 # C1E2 83F1 # C1E3 96F6 # C1E4 9F84 # C1E5 94C3 # C1E6 4F36 # C1E7 7F9A # C1E8 51CC # C1E9 7075 # C1EA 9675 # C1EB 5CAD # C1EC 9886 # C1ED 53E6 # C1EE 4EE4 # C1EF 6E9C # C1F0 7409 # C1F1 69B4 # C1F2 786B # C1F3 998F # C1F4 7559 # C1F5 5218 # C1F6 7624 # C1F7 6D41 # C1F8 67F3 # C1F9 516D # C1FA 9F99 # C1FB 804B # C1FC 5499 # C1FD 7B3C # C1FE 7ABF # C2A1 9686 # C2A2 5784 # C2A3 62E2 # C2A4 9647 # C2A5 697C # C2A6 5A04 # C2A7 6402 # C2A8 7BD3 # C2A9 6F0F # C2AA 964B # C2AB 82A6 # C2AC 5362 # C2AD 9885 # C2AE 5E90 # C2AF 7089 # C2B0 63B3 # C2B1 5364 # C2B2 864F # C2B3 9C81 # C2B4 9E93 # C2B5 788C # C2B6 9732 # C2B7 8DEF # C2B8 8D42 # C2B9 9E7F # C2BA 6F5E # C2BB 7984 # C2BC 5F55 # C2BD 9646 # C2BE 622E # C2BF 9A74 # C2C0 5415 # C2C1 94DD # C2C2 4FA3 # C2C3 65C5 # C2C4 5C65 # C2C5 5C61 # C2C6 7F15 # C2C7 8651 # C2C8 6C2F # C2C9 5F8B # C2CA 7387 # C2CB 6EE4 # C2CC 7EFF # C2CD 5CE6 # C2CE 631B # C2CF 5B6A # C2D0 6EE6 # C2D1 5375 # C2D2 4E71 # C2D3 63A0 # C2D4 7565 # C2D5 62A1 # C2D6 8F6E # C2D7 4F26 # C2D8 4ED1 # C2D9 6CA6 # C2DA 7EB6 # C2DB 8BBA # C2DC 841D # C2DD 87BA # C2DE 7F57 # C2DF 903B # C2E0 9523 # C2E1 7BA9 # C2E2 9AA1 # C2E3 88F8 # C2E4 843D # C2E5 6D1B # C2E6 9A86 # C2E7 7EDC # C2E8 5988 # C2E9 9EBB # C2EA 739B # C2EB 7801 # C2EC 8682 # C2ED 9A6C # C2EE 9A82 # C2EF 561B # C2F0 5417 # C2F1 57CB # C2F2 4E70 # C2F3 9EA6 # C2F4 5356 # C2F5 8FC8 # C2F6 8109 # C2F7 7792 # C2F8 9992 # C2F9 86EE # C2FA 6EE1 # C2FB 8513 # C2FC 66FC # C2FD 6162 # C2FE 6F2B # C3A1 8C29 # C3A2 8292 # C3A3 832B # C3A4 76F2 # C3A5 6C13 # C3A6 5FD9 # C3A7 83BD # C3A8 732B # C3A9 8305 # C3AA 951A # C3AB 6BDB # C3AC 77DB # C3AD 94C6 # C3AE 536F # C3AF 8302 # C3B0 5192 # C3B1 5E3D # C3B2 8C8C # C3B3 8D38 # C3B4 4E48 # C3B5 73AB # C3B6 679A # C3B7 6885 # C3B8 9176 # C3B9 9709 # C3BA 7164 # C3BB 6CA1 # C3BC 7709 # C3BD 5A92 # C3BE 9541 # C3BF 6BCF # C3C0 7F8E # C3C1 6627 # C3C2 5BD0 # C3C3 59B9 # C3C4 5A9A # C3C5 95E8 # C3C6 95F7 # C3C7 4EEC # C3C8 840C # C3C9 8499 # C3CA 6AAC # C3CB 76DF # C3CC 9530 # C3CD 731B # C3CE 68A6 # C3CF 5B5F # C3D0 772F # C3D1 919A # C3D2 9761 # C3D3 7CDC # C3D4 8FF7 # C3D5 8C1C # C3D6 5F25 # C3D7 7C73 # C3D8 79D8 # C3D9 89C5 # C3DA 6CCC # C3DB 871C # C3DC 5BC6 # C3DD 5E42 # C3DE 68C9 # C3DF 7720 # C3E0 7EF5 # C3E1 5195 # C3E2 514D # C3E3 52C9 # C3E4 5A29 # C3E5 7F05 # C3E6 9762 # C3E7 82D7 # C3E8 63CF # C3E9 7784 # C3EA 85D0 # C3EB 79D2 # C3EC 6E3A # C3ED 5E99 # C3EE 5999 # C3EF 8511 # C3F0 706D # C3F1 6C11 # C3F2 62BF # C3F3 76BF # C3F4 654F # C3F5 60AF # C3F6 95FD # C3F7 660E # C3F8 879F # C3F9 9E23 # C3FA 94ED # C3FB 540D # C3FC 547D # C3FD 8C2C # C3FE 6478 # C4A1 6479 # C4A2 8611 # C4A3 6A21 # C4A4 819C # C4A5 78E8 # C4A6 6469 # C4A7 9B54 # C4A8 62B9 # C4A9 672B # C4AA 83AB # C4AB 58A8 # C4AC 9ED8 # C4AD 6CAB # C4AE 6F20 # C4AF 5BDE # C4B0 964C # C4B1 8C0B # C4B2 725F # C4B3 67D0 # C4B4 62C7 # C4B5 7261 # C4B6 4EA9 # C4B7 59C6 # C4B8 6BCD # C4B9 5893 # C4BA 66AE # C4BB 5E55 # C4BC 52DF # C4BD 6155 # C4BE 6728 # C4BF 76EE # C4C0 7766 # C4C1 7267 # C4C2 7A46 # C4C3 62FF # C4C4 54EA # C4C5 5450 # C4C6 94A0 # C4C7 90A3 # C4C8 5A1C # C4C9 7EB3 # C4CA 6C16 # C4CB 4E43 # C4CC 5976 # C4CD 8010 # C4CE 5948 # C4CF 5357 # C4D0 7537 # C4D1 96BE # C4D2 56CA # C4D3 6320 # C4D4 8111 # C4D5 607C # C4D6 95F9 # C4D7 6DD6 # C4D8 5462 # C4D9 9981 # C4DA 5185 # C4DB 5AE9 # C4DC 80FD # C4DD 59AE # C4DE 9713 # C4DF 502A # C4E0 6CE5 # C4E1 5C3C # C4E2 62DF # C4E3 4F60 # C4E4 533F # C4E5 817B # C4E6 9006 # C4E7 6EBA # C4E8 852B # C4E9 62C8 # C4EA 5E74 # C4EB 78BE # C4EC 64B5 # C4ED 637B # C4EE 5FF5 # C4EF 5A18 # C4F0 917F # C4F1 9E1F # C4F2 5C3F # C4F3 634F # C4F4 8042 # C4F5 5B7D # C4F6 556E # C4F7 954A # C4F8 954D # C4F9 6D85 # C4FA 60A8 # C4FB 67E0 # C4FC 72DE # C4FD 51DD # C4FE 5B81 # C5A1 62E7 # C5A2 6CDE # C5A3 725B # C5A4 626D # C5A5 94AE # C5A6 7EBD # C5A7 8113 # C5A8 6D53 # C5A9 519C # C5AA 5F04 # C5AB 5974 # C5AC 52AA # C5AD 6012 # C5AE 5973 # C5AF 6696 # C5B0 8650 # C5B1 759F # C5B2 632A # C5B3 61E6 # C5B4 7CEF # C5B5 8BFA # C5B6 54E6 # C5B7 6B27 # C5B8 9E25 # C5B9 6BB4 # C5BA 85D5 # C5BB 5455 # C5BC 5076 # C5BD 6CA4 # C5BE 556A # C5BF 8DB4 # C5C0 722C # C5C1 5E15 # C5C2 6015 # C5C3 7436 # C5C4 62CD # C5C5 6392 # C5C6 724C # C5C7 5F98 # C5C8 6E43 # C5C9 6D3E # C5CA 6500 # C5CB 6F58 # C5CC 76D8 # C5CD 78D0 # C5CE 76FC # C5CF 7554 # C5D0 5224 # C5D1 53DB # C5D2 4E53 # C5D3 5E9E # C5D4 65C1 # C5D5 802A # C5D6 80D6 # C5D7 629B # C5D8 5486 # C5D9 5228 # C5DA 70AE # C5DB 888D # C5DC 8DD1 # C5DD 6CE1 # C5DE 5478 # C5DF 80DA # C5E0 57F9 # C5E1 88F4 # C5E2 8D54 # C5E3 966A # C5E4 914D # C5E5 4F69 # C5E6 6C9B # C5E7 55B7 # C5E8 76C6 # C5E9 7830 # C5EA 62A8 # C5EB 70F9 # C5EC 6F8E # C5ED 5F6D # C5EE 84EC # C5EF 68DA # C5F0 787C # C5F1 7BF7 # C5F2 81A8 # C5F3 670B # C5F4 9E4F # C5F5 6367 # C5F6 78B0 # C5F7 576F # C5F8 7812 # C5F9 9739 # C5FA 6279 # C5FB 62AB # C5FC 5288 # C5FD 7435 # C5FE 6BD7 # C6A1 5564 # C6A2 813E # C6A3 75B2 # C6A4 76AE # C6A5 5339 # C6A6 75DE # C6A7 50FB # C6A8 5C41 # C6A9 8B6C # C6AA 7BC7 # C6AB 504F # C6AC 7247 # C6AD 9A97 # C6AE 98D8 # C6AF 6F02 # C6B0 74E2 # C6B1 7968 # C6B2 6487 # C6B3 77A5 # C6B4 62FC # C6B5 9891 # C6B6 8D2B # C6B7 54C1 # C6B8 8058 # C6B9 4E52 # C6BA 576A # C6BB 82F9 # C6BC 840D # C6BD 5E73 # C6BE 51ED # C6BF 74F6 # C6C0 8BC4 # C6C1 5C4F # C6C2 5761 # C6C3 6CFC # C6C4 9887 # C6C5 5A46 # C6C6 7834 # C6C7 9B44 # C6C8 8FEB # C6C9 7C95 # C6CA 5256 # C6CB 6251 # C6CC 94FA # C6CD 4EC6 # C6CE 8386 # C6CF 8461 # C6D0 83E9 # C6D1 84B2 # C6D2 57D4 # C6D3 6734 # C6D4 5703 # C6D5 666E # C6D6 6D66 # C6D7 8C31 # C6D8 66DD # C6D9 7011 # C6DA 671F # C6DB 6B3A # C6DC 6816 # C6DD 621A # C6DE 59BB # C6DF 4E03 # C6E0 51C4 # C6E1 6F06 # C6E2 67D2 # C6E3 6C8F # C6E4 5176 # C6E5 68CB # C6E6 5947 # C6E7 6B67 # C6E8 7566 # C6E9 5D0E # C6EA 8110 # C6EB 9F50 # C6EC 65D7 # C6ED 7948 # C6EE 7941 # C6EF 9A91 # C6F0 8D77 # C6F1 5C82 # C6F2 4E5E # C6F3 4F01 # C6F4 542F # C6F5 5951 # C6F6 780C # C6F7 5668 # C6F8 6C14 # C6F9 8FC4 # C6FA 5F03 # C6FB 6C7D # C6FC 6CE3 # C6FD 8BAB # C6FE 6390 # C7A1 6070 # C7A2 6D3D # C7A3 7275 # C7A4 6266 # C7A5 948E # C7A6 94C5 # C7A7 5343 # C7A8 8FC1 # C7A9 7B7E # C7AA 4EDF # C7AB 8C26 # C7AC 4E7E # C7AD 9ED4 # C7AE 94B1 # C7AF 94B3 # C7B0 524D # C7B1 6F5C # C7B2 9063 # C7B3 6D45 # C7B4 8C34 # C7B5 5811 # C7B6 5D4C # C7B7 6B20 # C7B8 6B49 # C7B9 67AA # C7BA 545B # C7BB 8154 # C7BC 7F8C # C7BD 5899 # C7BE 8537 # C7BF 5F3A # C7C0 62A2 # C7C1 6A47 # C7C2 9539 # C7C3 6572 # C7C4 6084 # C7C5 6865 # C7C6 77A7 # C7C7 4E54 # C7C8 4FA8 # C7C9 5DE7 # C7CA 9798 # C7CB 64AC # C7CC 7FD8 # C7CD 5CED # C7CE 4FCF # C7CF 7A8D # C7D0 5207 # C7D1 8304 # C7D2 4E14 # C7D3 602F # C7D4 7A83 # C7D5 94A6 # C7D6 4FB5 # C7D7 4EB2 # C7D8 79E6 # C7D9 7434 # C7DA 52E4 # C7DB 82B9 # C7DC 64D2 # C7DD 79BD # C7DE 5BDD # C7DF 6C81 # C7E0 9752 # C7E1 8F7B # C7E2 6C22 # C7E3 503E # C7E4 537F # C7E5 6E05 # C7E6 64CE # C7E7 6674 # C7E8 6C30 # C7E9 60C5 # C7EA 9877 # C7EB 8BF7 # C7EC 5E86 # C7ED 743C # C7EE 7A77 # C7EF 79CB # C7F0 4E18 # C7F1 90B1 # C7F2 7403 # C7F3 6C42 # C7F4 56DA # C7F5 914B # C7F6 6CC5 # C7F7 8D8B # C7F8 533A # C7F9 86C6 # C7FA 66F2 # C7FB 8EAF # C7FC 5C48 # C7FD 9A71 # C7FE 6E20 # C8A1 53D6 # C8A2 5A36 # C8A3 9F8B # C8A4 8DA3 # C8A5 53BB # C8A6 5708 # C8A7 98A7 # C8A8 6743 # C8A9 919B # C8AA 6CC9 # C8AB 5168 # C8AC 75CA # C8AD 62F3 # C8AE 72AC # C8AF 5238 # C8B0 529D # C8B1 7F3A # C8B2 7094 # C8B3 7638 # C8B4 5374 # C8B5 9E4A # C8B6 69B7 # C8B7 786E # C8B8 96C0 # C8B9 88D9 # C8BA 7FA4 # C8BB 7136 # C8BC 71C3 # C8BD 5189 # C8BE 67D3 # C8BF 74E4 # C8C0 58E4 # C8C1 6518 # C8C2 56B7 # C8C3 8BA9 # C8C4 9976 # C8C5 6270 # C8C6 7ED5 # C8C7 60F9 # C8C8 70ED # C8C9 58EC # C8CA 4EC1 # C8CB 4EBA # C8CC 5FCD # C8CD 97E7 # C8CE 4EFB # C8CF 8BA4 # C8D0 5203 # C8D1 598A # C8D2 7EAB # C8D3 6254 # C8D4 4ECD # C8D5 65E5 # C8D6 620E # C8D7 8338 # C8D8 84C9 # C8D9 8363 # C8DA 878D # C8DB 7194 # C8DC 6EB6 # C8DD 5BB9 # C8DE 7ED2 # C8DF 5197 # C8E0 63C9 # C8E1 67D4 # C8E2 8089 # C8E3 8339 # C8E4 8815 # C8E5 5112 # C8E6 5B7A # C8E7 5982 # C8E8 8FB1 # C8E9 4E73 # C8EA 6C5D # C8EB 5165 # C8EC 8925 # C8ED 8F6F # C8EE 962E # C8EF 854A # C8F0 745E # C8F1 9510 # C8F2 95F0 # C8F3 6DA6 # C8F4 82E5 # C8F5 5F31 # C8F6 6492 # C8F7 6D12 # C8F8 8428 # C8F9 816E # C8FA 9CC3 # C8FB 585E # C8FC 8D5B # C8FD 4E09 # C8FE 53C1 # C9A1 4F1E # C9A2 6563 # C9A3 6851 # C9A4 55D3 # C9A5 4E27 # C9A6 6414 # C9A7 9A9A # C9A8 626B # C9A9 5AC2 # C9AA 745F # C9AB 8272 # C9AC 6DA9 # C9AD 68EE # C9AE 50E7 # C9AF 838E # C9B0 7802 # C9B1 6740 # C9B2 5239 # C9B3 6C99 # C9B4 7EB1 # C9B5 50BB # C9B6 5565 # C9B7 715E # C9B8 7B5B # C9B9 6652 # C9BA 73CA # C9BB 82EB # C9BC 6749 # C9BD 5C71 # C9BE 5220 # C9BF 717D # C9C0 886B # C9C1 95EA # C9C2 9655 # C9C3 64C5 # C9C4 8D61 # C9C5 81B3 # C9C6 5584 # C9C7 6C55 # C9C8 6247 # C9C9 7F2E # C9CA 5892 # C9CB 4F24 # C9CC 5546 # C9CD 8D4F # C9CE 664C # C9CF 4E0A # C9D0 5C1A # C9D1 88F3 # C9D2 68A2 # C9D3 634E # C9D4 7A0D # C9D5 70E7 # C9D6 828D # C9D7 52FA # C9D8 97F6 # C9D9 5C11 # C9DA 54E8 # C9DB 90B5 # C9DC 7ECD # C9DD 5962 # C9DE 8D4A # C9DF 86C7 # C9E0 820C # C9E1 820D # C9E2 8D66 # C9E3 6444 # C9E4 5C04 # C9E5 6151 # C9E6 6D89 # C9E7 793E # C9E8 8BBE # C9E9 7837 # C9EA 7533 # C9EB 547B # C9EC 4F38 # C9ED 8EAB # C9EE 6DF1 # C9EF 5A20 # C9F0 7EC5 # C9F1 795E # C9F2 6C88 # C9F3 5BA1 # C9F4 5A76 # C9F5 751A # C9F6 80BE # C9F7 614E # C9F8 6E17 # C9F9 58F0 # C9FA 751F # C9FB 7525 # C9FC 7272 # C9FD 5347 # C9FE 7EF3 # CAA1 7701 # CAA2 76DB # CAA3 5269 # CAA4 80DC # CAA5 5723 # CAA6 5E08 # CAA7 5931 # CAA8 72EE # CAA9 65BD # CAAA 6E7F # CAAB 8BD7 # CAAC 5C38 # CAAD 8671 # CAAE 5341 # CAAF 77F3 # CAB0 62FE # CAB1 65F6 # CAB2 4EC0 # CAB3 98DF # CAB4 8680 # CAB5 5B9E # CAB6 8BC6 # CAB7 53F2 # CAB8 77E2 # CAB9 4F7F # CABA 5C4E # CABB 9A76 # CABC 59CB # CABD 5F0F # CABE 793A # CABF 58EB # CAC0 4E16 # CAC1 67FF # CAC2 4E8B # CAC3 62ED # CAC4 8A93 # CAC5 901D # CAC6 52BF # CAC7 662F # CAC8 55DC # CAC9 566C # CACA 9002 # CACB 4ED5 # CACC 4F8D # CACD 91CA # CACE 9970 # CACF 6C0F # CAD0 5E02 # CAD1 6043 # CAD2 5BA4 # CAD3 89C6 # CAD4 8BD5 # CAD5 6536 # CAD6 624B # CAD7 9996 # CAD8 5B88 # CAD9 5BFF # CADA 6388 # CADB 552E # CADC 53D7 # CADD 7626 # CADE 517D # CADF 852C # CAE0 67A2 # CAE1 68B3 # CAE2 6B8A # CAE3 6292 # CAE4 8F93 # CAE5 53D4 # CAE6 8212 # CAE7 6DD1 # CAE8 758F # CAE9 4E66 # CAEA 8D4E # CAEB 5B70 # CAEC 719F # CAED 85AF # CAEE 6691 # CAEF 66D9 # CAF0 7F72 # CAF1 8700 # CAF2 9ECD # CAF3 9F20 # CAF4 5C5E # CAF5 672F # CAF6 8FF0 # CAF7 6811 # CAF8 675F # CAF9 620D # CAFA 7AD6 # CAFB 5885 # CAFC 5EB6 # CAFD 6570 # CAFE 6F31 # CBA1 6055 # CBA2 5237 # CBA3 800D # CBA4 6454 # CBA5 8870 # CBA6 7529 # CBA7 5E05 # CBA8 6813 # CBA9 62F4 # CBAA 971C # CBAB 53CC # CBAC 723D # CBAD 8C01 # CBAE 6C34 # CBAF 7761 # CBB0 7A0E # CBB1 542E # CBB2 77AC # CBB3 987A # CBB4 821C # CBB5 8BF4 # CBB6 7855 # CBB7 6714 # CBB8 70C1 # CBB9 65AF # CBBA 6495 # CBBB 5636 # CBBC 601D # CBBD 79C1 # CBBE 53F8 # CBBF 4E1D # CBC0 6B7B # CBC1 8086 # CBC2 5BFA # CBC3 55E3 # CBC4 56DB # CBC5 4F3A # CBC6 4F3C # CBC7 9972 # CBC8 5DF3 # CBC9 677E # CBCA 8038 # CBCB 6002 # CBCC 9882 # CBCD 9001 # CBCE 5B8B # CBCF 8BBC # CBD0 8BF5 # CBD1 641C # CBD2 8258 # CBD3 64DE # CBD4 55FD # CBD5 82CF # CBD6 9165 # CBD7 4FD7 # CBD8 7D20 # CBD9 901F # CBDA 7C9F # CBDB 50F3 # CBDC 5851 # CBDD 6EAF # CBDE 5BBF # CBDF 8BC9 # CBE0 8083 # CBE1 9178 # CBE2 849C # CBE3 7B97 # CBE4 867D # CBE5 968B # CBE6 968F # CBE7 7EE5 # CBE8 9AD3 # CBE9 788E # CBEA 5C81 # CBEB 7A57 # CBEC 9042 # CBED 96A7 # CBEE 795F # CBEF 5B59 # CBF0 635F # CBF1 7B0B # CBF2 84D1 # CBF3 68AD # CBF4 5506 # CBF5 7F29 # CBF6 7410 # CBF7 7D22 # CBF8 9501 # CBF9 6240 # CBFA 584C # CBFB 4ED6 # CBFC 5B83 # CBFD 5979 # CBFE 5854 # CCA1 736D # CCA2 631E # CCA3 8E4B # CCA4 8E0F # CCA5 80CE # CCA6 82D4 # CCA7 62AC # CCA8 53F0 # CCA9 6CF0 # CCAA 915E # CCAB 592A # CCAC 6001 # CCAD 6C70 # CCAE 574D # CCAF 644A # CCB0 8D2A # CCB1 762B # CCB2 6EE9 # CCB3 575B # CCB4 6A80 # CCB5 75F0 # CCB6 6F6D # CCB7 8C2D # CCB8 8C08 # CCB9 5766 # CCBA 6BEF # CCBB 8892 # CCBC 78B3 # CCBD 63A2 # CCBE 53F9 # CCBF 70AD # CCC0 6C64 # CCC1 5858 # CCC2 642A # CCC3 5802 # CCC4 68E0 # CCC5 819B # CCC6 5510 # CCC7 7CD6 # CCC8 5018 # CCC9 8EBA # CCCA 6DCC # CCCB 8D9F # CCCC 70EB # CCCD 638F # CCCE 6D9B # CCCF 6ED4 # CCD0 7EE6 # CCD1 8404 # CCD2 6843 # CCD3 9003 # CCD4 6DD8 # CCD5 9676 # CCD6 8BA8 # CCD7 5957 # CCD8 7279 # CCD9 85E4 # CCDA 817E # CCDB 75BC # CCDC 8A8A # CCDD 68AF # CCDE 5254 # CCDF 8E22 # CCE0 9511 # CCE1 63D0 # CCE2 9898 # CCE3 8E44 # CCE4 557C # CCE5 4F53 # CCE6 66FF # CCE7 568F # CCE8 60D5 # CCE9 6D95 # CCEA 5243 # CCEB 5C49 # CCEC 5929 # CCED 6DFB # CCEE 586B # CCEF 7530 # CCF0 751C # CCF1 606C # CCF2 8214 # CCF3 8146 # CCF4 6311 # CCF5 6761 # CCF6 8FE2 # CCF7 773A # CCF8 8DF3 # CCF9 8D34 # CCFA 94C1 # CCFB 5E16 # CCFC 5385 # CCFD 542C # CCFE 70C3 # CDA1 6C40 # CDA2 5EF7 # CDA3 505C # CDA4 4EAD # CDA5 5EAD # CDA6 633A # CDA7 8247 # CDA8 901A # CDA9 6850 # CDAA 916E # CDAB 77B3 # CDAC 540C # CDAD 94DC # CDAE 5F64 # CDAF 7AE5 # CDB0 6876 # CDB1 6345 # CDB2 7B52 # CDB3 7EDF # CDB4 75DB # CDB5 5077 # CDB6 6295 # CDB7 5934 # CDB8 900F # CDB9 51F8 # CDBA 79C3 # CDBB 7A81 # CDBC 56FE # CDBD 5F92 # CDBE 9014 # CDBF 6D82 # CDC0 5C60 # CDC1 571F # CDC2 5410 # CDC3 5154 # CDC4 6E4D # CDC5 56E2 # CDC6 63A8 # CDC7 9893 # CDC8 817F # CDC9 8715 # CDCA 892A # CDCB 9000 # CDCC 541E # CDCD 5C6F # CDCE 81C0 # CDCF 62D6 # CDD0 6258 # CDD1 8131 # CDD2 9E35 # CDD3 9640 # CDD4 9A6E # CDD5 9A7C # CDD6 692D # CDD7 59A5 # CDD8 62D3 # CDD9 553E # CDDA 6316 # CDDB 54C7 # CDDC 86D9 # CDDD 6D3C # CDDE 5A03 # CDDF 74E6 # CDE0 889C # CDE1 6B6A # CDE2 5916 # CDE3 8C4C # CDE4 5F2F # CDE5 6E7E # CDE6 73A9 # CDE7 987D # CDE8 4E38 # CDE9 70F7 # CDEA 5B8C # CDEB 7897 # CDEC 633D # CDED 665A # CDEE 7696 # CDEF 60CB # CDF0 5B9B # CDF1 5A49 # CDF2 4E07 # CDF3 8155 # CDF4 6C6A # CDF5 738B # CDF6 4EA1 # CDF7 6789 # CDF8 7F51 # CDF9 5F80 # CDFA 65FA # CDFB 671B # CDFC 5FD8 # CDFD 5984 # CDFE 5A01 # CEA1 5DCD # CEA2 5FAE # CEA3 5371 # CEA4 97E6 # CEA5 8FDD # CEA6 6845 # CEA7 56F4 # CEA8 552F # CEA9 60DF # CEAA 4E3A # CEAB 6F4D # CEAC 7EF4 # CEAD 82C7 # CEAE 840E # CEAF 59D4 # CEB0 4F1F # CEB1 4F2A # CEB2 5C3E # CEB3 7EAC # CEB4 672A # CEB5 851A # CEB6 5473 # CEB7 754F # CEB8 80C3 # CEB9 5582 # CEBA 9B4F # CEBB 4F4D # CEBC 6E2D # CEBD 8C13 # CEBE 5C09 # CEBF 6170 # CEC0 536B # CEC1 761F # CEC2 6E29 # CEC3 868A # CEC4 6587 # CEC5 95FB # CEC6 7EB9 # CEC7 543B # CEC8 7A33 # CEC9 7D0A # CECA 95EE # CECB 55E1 # CECC 7FC1 # CECD 74EE # CECE 631D # CECF 8717 # CED0 6DA1 # CED1 7A9D # CED2 6211 # CED3 65A1 # CED4 5367 # CED5 63E1 # CED6 6C83 # CED7 5DEB # CED8 545C # CED9 94A8 # CEDA 4E4C # CEDB 6C61 # CEDC 8BEC # CEDD 5C4B # CEDE 65E0 # CEDF 829C # CEE0 68A7 # CEE1 543E # CEE2 5434 # CEE3 6BCB # CEE4 6B66 # CEE5 4E94 # CEE6 6342 # CEE7 5348 # CEE8 821E # CEE9 4F0D # CEEA 4FAE # CEEB 575E # CEEC 620A # CEED 96FE # CEEE 6664 # CEEF 7269 # CEF0 52FF # CEF1 52A1 # CEF2 609F # CEF3 8BEF # CEF4 6614 # CEF5 7199 # CEF6 6790 # CEF7 897F # CEF8 7852 # CEF9 77FD # CEFA 6670 # CEFB 563B # CEFC 5438 # CEFD 9521 # CEFE 727A # CFA1 7A00 # CFA2 606F # CFA3 5E0C # CFA4 6089 # CFA5 819D # CFA6 5915 # CFA7 60DC # CFA8 7184 # CFA9 70EF # CFAA 6EAA # CFAB 6C50 # CFAC 7280 # CFAD 6A84 # CFAE 88AD # CFAF 5E2D # CFB0 4E60 # CFB1 5AB3 # CFB2 559C # CFB3 94E3 # CFB4 6D17 # CFB5 7CFB # CFB6 9699 # CFB7 620F # CFB8 7EC6 # CFB9 778E # CFBA 867E # CFBB 5323 # CFBC 971E # CFBD 8F96 # CFBE 6687 # CFBF 5CE1 # CFC0 4FA0 # CFC1 72ED # CFC2 4E0B # CFC3 53A6 # CFC4 590F # CFC5 5413 # CFC6 6380 # CFC7 9528 # CFC8 5148 # CFC9 4ED9 # CFCA 9C9C # CFCB 7EA4 # CFCC 54B8 # CFCD 8D24 # CFCE 8854 # CFCF 8237 # CFD0 95F2 # CFD1 6D8E # CFD2 5F26 # CFD3 5ACC # CFD4 663E # CFD5 9669 # CFD6 73B0 # CFD7 732E # CFD8 53BF # CFD9 817A # CFDA 9985 # CFDB 7FA1 # CFDC 5BAA # CFDD 9677 # CFDE 9650 # CFDF 7EBF # CFE0 76F8 # CFE1 53A2 # CFE2 9576 # CFE3 9999 # CFE4 7BB1 # CFE5 8944 # CFE6 6E58 # CFE7 4E61 # CFE8 7FD4 # CFE9 7965 # CFEA 8BE6 # CFEB 60F3 # CFEC 54CD # CFED 4EAB # CFEE 9879 # CFEF 5DF7 # CFF0 6A61 # CFF1 50CF # CFF2 5411 # CFF3 8C61 # CFF4 8427 # CFF5 785D # CFF6 9704 # CFF7 524A # CFF8 54EE # CFF9 56A3 # CFFA 9500 # CFFB 6D88 # CFFC 5BB5 # CFFD 6DC6 # CFFE 6653 # D0A1 5C0F # D0A2 5B5D # D0A3 6821 # D0A4 8096 # D0A5 5578 # D0A6 7B11 # D0A7 6548 # D0A8 6954 # D0A9 4E9B # D0AA 6B47 # D0AB 874E # D0AC 978B # D0AD 534F # D0AE 631F # D0AF 643A # D0B0 90AA # D0B1 659C # D0B2 80C1 # D0B3 8C10 # D0B4 5199 # D0B5 68B0 # D0B6 5378 # D0B7 87F9 # D0B8 61C8 # D0B9 6CC4 # D0BA 6CFB # D0BB 8C22 # D0BC 5C51 # D0BD 85AA # D0BE 82AF # D0BF 950C # D0C0 6B23 # D0C1 8F9B # D0C2 65B0 # D0C3 5FFB # D0C4 5FC3 # D0C5 4FE1 # D0C6 8845 # D0C7 661F # D0C8 8165 # D0C9 7329 # D0CA 60FA # D0CB 5174 # D0CC 5211 # D0CD 578B # D0CE 5F62 # D0CF 90A2 # D0D0 884C # D0D1 9192 # D0D2 5E78 # D0D3 674F # D0D4 6027 # D0D5 59D3 # D0D6 5144 # D0D7 51F6 # D0D8 80F8 # D0D9 5308 # D0DA 6C79 # D0DB 96C4 # D0DC 718A # D0DD 4F11 # D0DE 4FEE # D0DF 7F9E # D0E0 673D # D0E1 55C5 # D0E2 9508 # D0E3 79C0 # D0E4 8896 # D0E5 7EE3 # D0E6 589F # D0E7 620C # D0E8 9700 # D0E9 865A # D0EA 5618 # D0EB 987B # D0EC 5F90 # D0ED 8BB8 # D0EE 84C4 # D0EF 9157 # D0F0 53D9 # D0F1 65ED # D0F2 5E8F # D0F3 755C # D0F4 6064 # D0F5 7D6E # D0F6 5A7F # D0F7 7EEA # D0F8 7EED # D0F9 8F69 # D0FA 55A7 # D0FB 5BA3 # D0FC 60AC # D0FD 65CB # D0FE 7384 # D1A1 9009 # D1A2 7663 # D1A3 7729 # D1A4 7EDA # D1A5 9774 # D1A6 859B # D1A7 5B66 # D1A8 7A74 # D1A9 96EA # D1AA 8840 # D1AB 52CB # D1AC 718F # D1AD 5FAA # D1AE 65EC # D1AF 8BE2 # D1B0 5BFB # D1B1 9A6F # D1B2 5DE1 # D1B3 6B89 # D1B4 6C5B # D1B5 8BAD # D1B6 8BAF # D1B7 900A # D1B8 8FC5 # D1B9 538B # D1BA 62BC # D1BB 9E26 # D1BC 9E2D # D1BD 5440 # D1BE 4E2B # D1BF 82BD # D1C0 7259 # D1C1 869C # D1C2 5D16 # D1C3 8859 # D1C4 6DAF # D1C5 96C5 # D1C6 54D1 # D1C7 4E9A # D1C8 8BB6 # D1C9 7109 # D1CA 54BD # D1CB 9609 # D1CC 70DF # D1CD 6DF9 # D1CE 76D0 # D1CF 4E25 # D1D0 7814 # D1D1 8712 # D1D2 5CA9 # D1D3 5EF6 # D1D4 8A00 # D1D5 989C # D1D6 960E # D1D7 708E # D1D8 6CBF # D1D9 5944 # D1DA 63A9 # D1DB 773C # D1DC 884D # D1DD 6F14 # D1DE 8273 # D1DF 5830 # D1E0 71D5 # D1E1 538C # D1E2 781A # D1E3 96C1 # D1E4 5501 # D1E5 5F66 # D1E6 7130 # D1E7 5BB4 # D1E8 8C1A # D1E9 9A8C # D1EA 6B83 # D1EB 592E # D1EC 9E2F # D1ED 79E7 # D1EE 6768 # D1EF 626C # D1F0 4F6F # D1F1 75A1 # D1F2 7F8A # D1F3 6D0B # D1F4 9633 # D1F5 6C27 # D1F6 4EF0 # D1F7 75D2 # D1F8 517B # D1F9 6837 # D1FA 6F3E # D1FB 9080 # D1FC 8170 # D1FD 5996 # D1FE 7476 # D2A1 6447 # D2A2 5C27 # D2A3 9065 # D2A4 7A91 # D2A5 8C23 # D2A6 59DA # D2A7 54AC # D2A8 8200 # D2A9 836F # D2AA 8981 # D2AB 8000 # D2AC 6930 # D2AD 564E # D2AE 8036 # D2AF 7237 # D2B0 91CE # D2B1 51B6 # D2B2 4E5F # D2B3 9875 # D2B4 6396 # D2B5 4E1A # D2B6 53F6 # D2B7 66F3 # D2B8 814B # D2B9 591C # D2BA 6DB2 # D2BB 4E00 # D2BC 58F9 # D2BD 533B # D2BE 63D6 # D2BF 94F1 # D2C0 4F9D # D2C1 4F0A # D2C2 8863 # D2C3 9890 # D2C4 5937 # D2C5 9057 # D2C6 79FB # D2C7 4EEA # D2C8 80F0 # D2C9 7591 # D2CA 6C82 # D2CB 5B9C # D2CC 59E8 # D2CD 5F5D # D2CE 6905 # D2CF 8681 # D2D0 501A # D2D1 5DF2 # D2D2 4E59 # D2D3 77E3 # D2D4 4EE5 # D2D5 827A # D2D6 6291 # D2D7 6613 # D2D8 9091 # D2D9 5C79 # D2DA 4EBF # D2DB 5F79 # D2DC 81C6 # D2DD 9038 # D2DE 8084 # D2DF 75AB # D2E0 4EA6 # D2E1 88D4 # D2E2 610F # D2E3 6BC5 # D2E4 5FC6 # D2E5 4E49 # D2E6 76CA # D2E7 6EA2 # D2E8 8BE3 # D2E9 8BAE # D2EA 8C0A # D2EB 8BD1 # D2EC 5F02 # D2ED 7FFC # D2EE 7FCC # D2EF 7ECE # D2F0 8335 # D2F1 836B # D2F2 56E0 # D2F3 6BB7 # D2F4 97F3 # D2F5 9634 # D2F6 59FB # D2F7 541F # D2F8 94F6 # D2F9 6DEB # D2FA 5BC5 # D2FB 996E # D2FC 5C39 # D2FD 5F15 # D2FE 9690 # D3A1 5370 # D3A2 82F1 # D3A3 6A31 # D3A4 5A74 # D3A5 9E70 # D3A6 5E94 # D3A7 7F28 # D3A8 83B9 # D3A9 8424 # D3AA 8425 # D3AB 8367 # D3AC 8747 # D3AD 8FCE # D3AE 8D62 # D3AF 76C8 # D3B0 5F71 # D3B1 9896 # D3B2 786C # D3B3 6620 # D3B4 54DF # D3B5 62E5 # D3B6 4F63 # D3B7 81C3 # D3B8 75C8 # D3B9 5EB8 # D3BA 96CD # D3BB 8E0A # D3BC 86F9 # D3BD 548F # D3BE 6CF3 # D3BF 6D8C # D3C0 6C38 # D3C1 607F # D3C2 52C7 # D3C3 7528 # D3C4 5E7D # D3C5 4F18 # D3C6 60A0 # D3C7 5FE7 # D3C8 5C24 # D3C9 7531 # D3CA 90AE # D3CB 94C0 # D3CC 72B9 # D3CD 6CB9 # D3CE 6E38 # D3CF 9149 # D3D0 6709 # D3D1 53CB # D3D2 53F3 # D3D3 4F51 # D3D4 91C9 # D3D5 8BF1 # D3D6 53C8 # D3D7 5E7C # D3D8 8FC2 # D3D9 6DE4 # D3DA 4E8E # D3DB 76C2 # D3DC 6986 # D3DD 865E # D3DE 611A # D3DF 8206 # D3E0 4F59 # D3E1 4FDE # D3E2 903E # D3E3 9C7C # D3E4 6109 # D3E5 6E1D # D3E6 6E14 # D3E7 9685 # D3E8 4E88 # D3E9 5A31 # D3EA 96E8 # D3EB 4E0E # D3EC 5C7F # D3ED 79B9 # D3EE 5B87 # D3EF 8BED # D3F0 7FBD # D3F1 7389 # D3F2 57DF # D3F3 828B # D3F4 90C1 # D3F5 5401 # D3F6 9047 # D3F7 55BB # D3F8 5CEA # D3F9 5FA1 # D3FA 6108 # D3FB 6B32 # D3FC 72F1 # D3FD 80B2 # D3FE 8A89 # D4A1 6D74 # D4A2 5BD3 # D4A3 88D5 # D4A4 9884 # D4A5 8C6B # D4A6 9A6D # D4A7 9E33 # D4A8 6E0A # D4A9 51A4 # D4AA 5143 # D4AB 57A3 # D4AC 8881 # D4AD 539F # D4AE 63F4 # D4AF 8F95 # D4B0 56ED # D4B1 5458 # D4B2 5706 # D4B3 733F # D4B4 6E90 # D4B5 7F18 # D4B6 8FDC # D4B7 82D1 # D4B8 613F # D4B9 6028 # D4BA 9662 # D4BB 66F0 # D4BC 7EA6 # D4BD 8D8A # D4BE 8DC3 # D4BF 94A5 # D4C0 5CB3 # D4C1 7CA4 # D4C2 6708 # D4C3 60A6 # D4C4 9605 # D4C5 8018 # D4C6 4E91 # D4C7 90E7 # D4C8 5300 # D4C9 9668 # D4CA 5141 # D4CB 8FD0 # D4CC 8574 # D4CD 915D # D4CE 6655 # D4CF 97F5 # D4D0 5B55 # D4D1 531D # D4D2 7838 # D4D3 6742 # D4D4 683D # D4D5 54C9 # D4D6 707E # D4D7 5BB0 # D4D8 8F7D # D4D9 518D # D4DA 5728 # D4DB 54B1 # D4DC 6512 # D4DD 6682 # D4DE 8D5E # D4DF 8D43 # D4E0 810F # D4E1 846C # D4E2 906D # D4E3 7CDF # D4E4 51FF # D4E5 85FB # D4E6 67A3 # D4E7 65E9 # D4E8 6FA1 # D4E9 86A4 # D4EA 8E81 # D4EB 566A # D4EC 9020 # D4ED 7682 # D4EE 7076 # D4EF 71E5 # D4F0 8D23 # D4F1 62E9 # D4F2 5219 # D4F3 6CFD # D4F4 8D3C # D4F5 600E # D4F6 589E # D4F7 618E # D4F8 66FE # D4F9 8D60 # D4FA 624E # D4FB 55B3 # D4FC 6E23 # D4FD 672D # D4FE 8F67 # D5A1 94E1 # D5A2 95F8 # D5A3 7728 # D5A4 6805 # D5A5 69A8 # D5A6 548B # D5A7 4E4D # D5A8 70B8 # D5A9 8BC8 # D5AA 6458 # D5AB 658B # D5AC 5B85 # D5AD 7A84 # D5AE 503A # D5AF 5BE8 # D5B0 77BB # D5B1 6BE1 # D5B2 8A79 # D5B3 7C98 # D5B4 6CBE # D5B5 76CF # D5B6 65A9 # D5B7 8F97 # D5B8 5D2D # D5B9 5C55 # D5BA 8638 # D5BB 6808 # D5BC 5360 # D5BD 6218 # D5BE 7AD9 # D5BF 6E5B # D5C0 7EFD # D5C1 6A1F # D5C2 7AE0 # D5C3 5F70 # D5C4 6F33 # D5C5 5F20 # D5C6 638C # D5C7 6DA8 # D5C8 6756 # D5C9 4E08 # D5CA 5E10 # D5CB 8D26 # D5CC 4ED7 # D5CD 80C0 # D5CE 7634 # D5CF 969C # D5D0 62DB # D5D1 662D # D5D2 627E # D5D3 6CBC # D5D4 8D75 # D5D5 7167 # D5D6 7F69 # D5D7 5146 # D5D8 8087 # D5D9 53EC # D5DA 906E # D5DB 6298 # D5DC 54F2 # D5DD 86F0 # D5DE 8F99 # D5DF 8005 # D5E0 9517 # D5E1 8517 # D5E2 8FD9 # D5E3 6D59 # D5E4 73CD # D5E5 659F # D5E6 771F # D5E7 7504 # D5E8 7827 # D5E9 81FB # D5EA 8D1E # D5EB 9488 # D5EC 4FA6 # D5ED 6795 # D5EE 75B9 # D5EF 8BCA # D5F0 9707 # D5F1 632F # D5F2 9547 # D5F3 9635 # D5F4 84B8 # D5F5 6323 # D5F6 7741 # D5F7 5F81 # D5F8 72F0 # D5F9 4E89 # D5FA 6014 # D5FB 6574 # D5FC 62EF # D5FD 6B63 # D5FE 653F # D6A1 5E27 # D6A2 75C7 # D6A3 90D1 # D6A4 8BC1 # D6A5 829D # D6A6 679D # D6A7 652F # D6A8 5431 # D6A9 8718 # D6AA 77E5 # D6AB 80A2 # D6AC 8102 # D6AD 6C41 # D6AE 4E4B # D6AF 7EC7 # D6B0 804C # D6B1 76F4 # D6B2 690D # D6B3 6B96 # D6B4 6267 # D6B5 503C # D6B6 4F84 # D6B7 5740 # D6B8 6307 # D6B9 6B62 # D6BA 8DBE # D6BB 53EA # D6BC 65E8 # D6BD 7EB8 # D6BE 5FD7 # D6BF 631A # D6C0 63B7 # D6C1 81F3 # D6C2 81F4 # D6C3 7F6E # D6C4 5E1C # D6C5 5CD9 # D6C6 5236 # D6C7 667A # D6C8 79E9 # D6C9 7A1A # D6CA 8D28 # D6CB 7099 # D6CC 75D4 # D6CD 6EDE # D6CE 6CBB # D6CF 7A92 # D6D0 4E2D # D6D1 76C5 # D6D2 5FE0 # D6D3 949F # D6D4 8877 # D6D5 7EC8 # D6D6 79CD # D6D7 80BF # D6D8 91CD # D6D9 4EF2 # D6DA 4F17 # D6DB 821F # D6DC 5468 # D6DD 5DDE # D6DE 6D32 # D6DF 8BCC # D6E0 7CA5 # D6E1 8F74 # D6E2 8098 # D6E3 5E1A # D6E4 5492 # D6E5 76B1 # D6E6 5B99 # D6E7 663C # D6E8 9AA4 # D6E9 73E0 # D6EA 682A # D6EB 86DB # D6EC 6731 # D6ED 732A # D6EE 8BF8 # D6EF 8BDB # D6F0 9010 # D6F1 7AF9 # D6F2 70DB # D6F3 716E # D6F4 62C4 # D6F5 77A9 # D6F6 5631 # D6F7 4E3B # D6F8 8457 # D6F9 67F1 # D6FA 52A9 # D6FB 86C0 # D6FC 8D2E # D6FD 94F8 # D6FE 7B51 # D7A1 4F4F # D7A2 6CE8 # D7A3 795D # D7A4 9A7B # D7A5 6293 # D7A6 722A # D7A7 62FD # D7A8 4E13 # D7A9 7816 # D7AA 8F6C # D7AB 64B0 # D7AC 8D5A # D7AD 7BC6 # D7AE 6869 # D7AF 5E84 # D7B0 88C5 # D7B1 5986 # D7B2 649E # D7B3 58EE # D7B4 72B6 # D7B5 690E # D7B6 9525 # D7B7 8FFD # D7B8 8D58 # D7B9 5760 # D7BA 7F00 # D7BB 8C06 # D7BC 51C6 # D7BD 6349 # D7BE 62D9 # D7BF 5353 # D7C0 684C # D7C1 7422 # D7C2 8301 # D7C3 914C # D7C4 5544 # D7C5 7740 # D7C6 707C # D7C7 6D4A # D7C8 5179 # D7C9 54A8 # D7CA 8D44 # D7CB 59FF # D7CC 6ECB # D7CD 6DC4 # D7CE 5B5C # D7CF 7D2B # D7D0 4ED4 # D7D1 7C7D # D7D2 6ED3 # D7D3 5B50 # D7D4 81EA # D7D5 6E0D # D7D6 5B57 # D7D7 9B03 # D7D8 68D5 # D7D9 8E2A # D7DA 5B97 # D7DB 7EFC # D7DC 603B # D7DD 7EB5 # D7DE 90B9 # D7DF 8D70 # D7E0 594F # D7E1 63CD # D7E2 79DF # D7E3 8DB3 # D7E4 5352 # D7E5 65CF # D7E6 7956 # D7E7 8BC5 # D7E8 963B # D7E9 7EC4 # D7EA 94BB # D7EB 7E82 # D7EC 5634 # D7ED 9189 # D7EE 6700 # D7EF 7F6A # D7F0 5C0A # D7F1 9075 # D7F2 6628 # D7F3 5DE6 # D7F4 4F50 # D7F5 67DE # D7F6 505A # D7F7 4F5C # D7F8 5750 # D7F9 5EA7 # D8A1 4E8D # D8A2 4E0C # D8A3 5140 # D8A4 4E10 # D8A5 5EFF # D8A6 5345 # D8A7 4E15 # D8A8 4E98 # D8A9 4E1E # D8AA 9B32 # D8AB 5B6C # D8AC 5669 # D8AD 4E28 # D8AE 79BA # D8AF 4E3F # D8B0 5315 # D8B1 4E47 # D8B2 592D # D8B3 723B # D8B4 536E # D8B5 6C10 # D8B6 56DF # D8B7 80E4 # D8B8 9997 # D8B9 6BD3 # D8BA 777E # D8BB 9F17 # D8BC 4E36 # D8BD 4E9F # D8BE 9F10 # D8BF 4E5C # D8C0 4E69 # D8C1 4E93 # D8C2 8288 # D8C3 5B5B # D8C4 556C # D8C5 560F # D8C6 4EC4 # D8C7 538D # D8C8 539D # D8C9 53A3 # D8CA 53A5 # D8CB 53AE # D8CC 9765 # D8CD 8D5D # D8CE 531A # D8CF 53F5 # D8D0 5326 # D8D1 532E # D8D2 533E # D8D3 8D5C # D8D4 5366 # D8D5 5363 # D8D6 5202 # D8D7 5208 # D8D8 520E # D8D9 522D # D8DA 5233 # D8DB 523F # D8DC 5240 # D8DD 524C # D8DE 525E # D8DF 5261 # D8E0 525C # D8E1 84AF # D8E2 527D # D8E3 5282 # D8E4 5281 # D8E5 5290 # D8E6 5293 # D8E7 5182 # D8E8 7F54 # D8E9 4EBB # D8EA 4EC3 # D8EB 4EC9 # D8EC 4EC2 # D8ED 4EE8 # D8EE 4EE1 # D8EF 4EEB # D8F0 4EDE # D8F1 4F1B # D8F2 4EF3 # D8F3 4F22 # D8F4 4F64 # D8F5 4EF5 # D8F6 4F25 # D8F7 4F27 # D8F8 4F09 # D8F9 4F2B # D8FA 4F5E # D8FB 4F67 # D8FC 6538 # D8FD 4F5A # D8FE 4F5D # D9A1 4F5F # D9A2 4F57 # D9A3 4F32 # D9A4 4F3D # D9A5 4F76 # D9A6 4F74 # D9A7 4F91 # D9A8 4F89 # D9A9 4F83 # D9AA 4F8F # D9AB 4F7E # D9AC 4F7B # D9AD 4FAA # D9AE 4F7C # D9AF 4FAC # D9B0 4F94 # D9B1 4FE6 # D9B2 4FE8 # D9B3 4FEA # D9B4 4FC5 # D9B5 4FDA # D9B6 4FE3 # D9B7 4FDC # D9B8 4FD1 # D9B9 4FDF # D9BA 4FF8 # D9BB 5029 # D9BC 504C # D9BD 4FF3 # D9BE 502C # D9BF 500F # D9C0 502E # D9C1 502D # D9C2 4FFE # D9C3 501C # D9C4 500C # D9C5 5025 # D9C6 5028 # D9C7 507E # D9C8 5043 # D9C9 5055 # D9CA 5048 # D9CB 504E # D9CC 506C # D9CD 507B # D9CE 50A5 # D9CF 50A7 # D9D0 50A9 # D9D1 50BA # D9D2 50D6 # D9D3 5106 # D9D4 50ED # D9D5 50EC # D9D6 50E6 # D9D7 50EE # D9D8 5107 # D9D9 510B # D9DA 4EDD # D9DB 6C3D # D9DC 4F58 # D9DD 4F65 # D9DE 4FCE # D9DF 9FA0 # D9E0 6C46 # D9E1 7C74 # D9E2 516E # D9E3 5DFD # D9E4 9EC9 # D9E5 9998 # D9E6 5181 # D9E7 5914 # D9E8 52F9 # D9E9 530D # D9EA 8A07 # D9EB 5310 # D9EC 51EB # D9ED 5919 # D9EE 5155 # D9EF 4EA0 # D9F0 5156 # D9F1 4EB3 # D9F2 886E # D9F3 88A4 # D9F4 4EB5 # D9F5 8114 # D9F6 88D2 # D9F7 7980 # D9F8 5B34 # D9F9 8803 # D9FA 7FB8 # D9FB 51AB # D9FC 51B1 # D9FD 51BD # D9FE 51BC # DAA1 51C7 # DAA2 5196 # DAA3 51A2 # DAA4 51A5 # DAA5 8BA0 # DAA6 8BA6 # DAA7 8BA7 # DAA8 8BAA # DAA9 8BB4 # DAAA 8BB5 # DAAB 8BB7 # DAAC 8BC2 # DAAD 8BC3 # DAAE 8BCB # DAAF 8BCF # DAB0 8BCE # DAB1 8BD2 # DAB2 8BD3 # DAB3 8BD4 # DAB4 8BD6 # DAB5 8BD8 # DAB6 8BD9 # DAB7 8BDC # DAB8 8BDF # DAB9 8BE0 # DABA 8BE4 # DABB 8BE8 # DABC 8BE9 # DABD 8BEE # DABE 8BF0 # DABF 8BF3 # DAC0 8BF6 # DAC1 8BF9 # DAC2 8BFC # DAC3 8BFF # DAC4 8C00 # DAC5 8C02 # DAC6 8C04 # DAC7 8C07 # DAC8 8C0C # DAC9 8C0F # DACA 8C11 # DACB 8C12 # DACC 8C14 # DACD 8C15 # DACE 8C16 # DACF 8C19 # DAD0 8C1B # DAD1 8C18 # DAD2 8C1D # DAD3 8C1F # DAD4 8C20 # DAD5 8C21 # DAD6 8C25 # DAD7 8C27 # DAD8 8C2A # DAD9 8C2B # DADA 8C2E # DADB 8C2F # DADC 8C32 # DADD 8C33 # DADE 8C35 # DADF 8C36 # DAE0 5369 # DAE1 537A # DAE2 961D # DAE3 9622 # DAE4 9621 # DAE5 9631 # DAE6 962A # DAE7 963D # DAE8 963C # DAE9 9642 # DAEA 9649 # DAEB 9654 # DAEC 965F # DAED 9667 # DAEE 966C # DAEF 9672 # DAF0 9674 # DAF1 9688 # DAF2 968D # DAF3 9697 # DAF4 96B0 # DAF5 9097 # DAF6 909B # DAF7 909D # DAF8 9099 # DAF9 90AC # DAFA 90A1 # DAFB 90B4 # DAFC 90B3 # DAFD 90B6 # DAFE 90BA # DBA1 90B8 # DBA2 90B0 # DBA3 90CF # DBA4 90C5 # DBA5 90BE # DBA6 90D0 # DBA7 90C4 # DBA8 90C7 # DBA9 90D3 # DBAA 90E6 # DBAB 90E2 # DBAC 90DC # DBAD 90D7 # DBAE 90DB # DBAF 90EB # DBB0 90EF # DBB1 90FE # DBB2 9104 # DBB3 9122 # DBB4 911E # DBB5 9123 # DBB6 9131 # DBB7 912F # DBB8 9139 # DBB9 9143 # DBBA 9146 # DBBB 520D # DBBC 5942 # DBBD 52A2 # DBBE 52AC # DBBF 52AD # DBC0 52BE # DBC1 54FF # DBC2 52D0 # DBC3 52D6 # DBC4 52F0 # DBC5 53DF # DBC6 71EE # DBC7 77CD # DBC8 5EF4 # DBC9 51F5 # DBCA 51FC # DBCB 9B2F # DBCC 53B6 # DBCD 5F01 # DBCE 755A # DBCF 5DEF # DBD0 574C # DBD1 57A9 # DBD2 57A1 # DBD3 587E # DBD4 58BC # DBD5 58C5 # DBD6 58D1 # DBD7 5729 # DBD8 572C # DBD9 572A # DBDA 5733 # DBDB 5739 # DBDC 572E # DBDD 572F # DBDE 575C # DBDF 573B # DBE0 5742 # DBE1 5769 # DBE2 5785 # DBE3 576B # DBE4 5786 # DBE5 577C # DBE6 577B # DBE7 5768 # DBE8 576D # DBE9 5776 # DBEA 5773 # DBEB 57AD # DBEC 57A4 # DBED 578C # DBEE 57B2 # DBEF 57CF # DBF0 57A7 # DBF1 57B4 # DBF2 5793 # DBF3 57A0 # DBF4 57D5 # DBF5 57D8 # DBF6 57DA # DBF7 57D9 # DBF8 57D2 # DBF9 57B8 # DBFA 57F4 # DBFB 57EF # DBFC 57F8 # DBFD 57E4 # DBFE 57DD # DCA1 580B # DCA2 580D # DCA3 57FD # DCA4 57ED # DCA5 5800 # DCA6 581E # DCA7 5819 # DCA8 5844 # DCA9 5820 # DCAA 5865 # DCAB 586C # DCAC 5881 # DCAD 5889 # DCAE 589A # DCAF 5880 # DCB0 99A8 # DCB1 9F19 # DCB2 61FF # DCB3 8279 # DCB4 827D # DCB5 827F # DCB6 828F # DCB7 828A # DCB8 82A8 # DCB9 8284 # DCBA 828E # DCBB 8291 # DCBC 8297 # DCBD 8299 # DCBE 82AB # DCBF 82B8 # DCC0 82BE # DCC1 82B0 # DCC2 82C8 # DCC3 82CA # DCC4 82E3 # DCC5 8298 # DCC6 82B7 # DCC7 82AE # DCC8 82CB # DCC9 82CC # DCCA 82C1 # DCCB 82A9 # DCCC 82B4 # DCCD 82A1 # DCCE 82AA # DCCF 829F # DCD0 82C4 # DCD1 82CE # DCD2 82A4 # DCD3 82E1 # DCD4 8309 # DCD5 82F7 # DCD6 82E4 # DCD7 830F # DCD8 8307 # DCD9 82DC # DCDA 82F4 # DCDB 82D2 # DCDC 82D8 # DCDD 830C # DCDE 82FB # DCDF 82D3 # DCE0 8311 # DCE1 831A # DCE2 8306 # DCE3 8314 # DCE4 8315 # DCE5 82E0 # DCE6 82D5 # DCE7 831C # DCE8 8351 # DCE9 835B # DCEA 835C # DCEB 8308 # DCEC 8392 # DCED 833C # DCEE 8334 # DCEF 8331 # DCF0 839B # DCF1 835E # DCF2 832F # DCF3 834F # DCF4 8347 # DCF5 8343 # DCF6 835F # DCF7 8340 # DCF8 8317 # DCF9 8360 # DCFA 832D # DCFB 833A # DCFC 8333 # DCFD 8366 # DCFE 8365 # DDA1 8368 # DDA2 831B # DDA3 8369 # DDA4 836C # DDA5 836A # DDA6 836D # DDA7 836E # DDA8 83B0 # DDA9 8378 # DDAA 83B3 # DDAB 83B4 # DDAC 83A0 # DDAD 83AA # DDAE 8393 # DDAF 839C # DDB0 8385 # DDB1 837C # DDB2 83B6 # DDB3 83A9 # DDB4 837D # DDB5 83B8 # DDB6 837B # DDB7 8398 # DDB8 839E # DDB9 83A8 # DDBA 83BA # DDBB 83BC # DDBC 83C1 # DDBD 8401 # DDBE 83E5 # DDBF 83D8 # DDC0 5807 # DDC1 8418 # DDC2 840B # DDC3 83DD # DDC4 83FD # DDC5 83D6 # DDC6 841C # DDC7 8438 # DDC8 8411 # DDC9 8406 # DDCA 83D4 # DDCB 83DF # DDCC 840F # DDCD 8403 # DDCE 83F8 # DDCF 83F9 # DDD0 83EA # DDD1 83C5 # DDD2 83C0 # DDD3 8426 # DDD4 83F0 # DDD5 83E1 # DDD6 845C # DDD7 8451 # DDD8 845A # DDD9 8459 # DDDA 8473 # DDDB 8487 # DDDC 8488 # DDDD 847A # DDDE 8489 # DDDF 8478 # DDE0 843C # DDE1 8446 # DDE2 8469 # DDE3 8476 # DDE4 848C # DDE5 848E # DDE6 8431 # DDE7 846D # DDE8 84C1 # DDE9 84CD # DDEA 84D0 # DDEB 84E6 # DDEC 84BD # DDED 84D3 # DDEE 84CA # DDEF 84BF # DDF0 84BA # DDF1 84E0 # DDF2 84A1 # DDF3 84B9 # DDF4 84B4 # DDF5 8497 # DDF6 84E5 # DDF7 84E3 # DDF8 850C # DDF9 750D # DDFA 8538 # DDFB 84F0 # DDFC 8539 # DDFD 851F # DDFE 853A # DEA1 8556 # DEA2 853B # DEA3 84FF # DEA4 84FC # DEA5 8559 # DEA6 8548 # DEA7 8568 # DEA8 8564 # DEA9 855E # DEAA 857A # DEAB 77A2 # DEAC 8543 # DEAD 8572 # DEAE 857B # DEAF 85A4 # DEB0 85A8 # DEB1 8587 # DEB2 858F # DEB3 8579 # DEB4 85AE # DEB5 859C # DEB6 8585 # DEB7 85B9 # DEB8 85B7 # DEB9 85B0 # DEBA 85D3 # DEBB 85C1 # DEBC 85DC # DEBD 85FF # DEBE 8627 # DEBF 8605 # DEC0 8629 # DEC1 8616 # DEC2 863C # DEC3 5EFE # DEC4 5F08 # DEC5 593C # DEC6 5941 # DEC7 8037 # DEC8 5955 # DEC9 595A # DECA 5958 # DECB 530F # DECC 5C22 # DECD 5C25 # DECE 5C2C # DECF 5C34 # DED0 624C # DED1 626A # DED2 629F # DED3 62BB # DED4 62CA # DED5 62DA # DED6 62D7 # DED7 62EE # DED8 6322 # DED9 62F6 # DEDA 6339 # DEDB 634B # DEDC 6343 # DEDD 63AD # DEDE 63F6 # DEDF 6371 # DEE0 637A # DEE1 638E # DEE2 63B4 # DEE3 636D # DEE4 63AC # DEE5 638A # DEE6 6369 # DEE7 63AE # DEE8 63BC # DEE9 63F2 # DEEA 63F8 # DEEB 63E0 # DEEC 63FF # DEED 63C4 # DEEE 63DE # DEEF 63CE # DEF0 6452 # DEF1 63C6 # DEF2 63BE # DEF3 6445 # DEF4 6441 # DEF5 640B # DEF6 641B # DEF7 6420 # DEF8 640C # DEF9 6426 # DEFA 6421 # DEFB 645E # DEFC 6484 # DEFD 646D # DEFE 6496 # DFA1 647A # DFA2 64B7 # DFA3 64B8 # DFA4 6499 # DFA5 64BA # DFA6 64C0 # DFA7 64D0 # DFA8 64D7 # DFA9 64E4 # DFAA 64E2 # DFAB 6509 # DFAC 6525 # DFAD 652E # DFAE 5F0B # DFAF 5FD2 # DFB0 7519 # DFB1 5F11 # DFB2 535F # DFB3 53F1 # DFB4 53FD # DFB5 53E9 # DFB6 53E8 # DFB7 53FB # DFB8 5412 # DFB9 5416 # DFBA 5406 # DFBB 544B # DFBC 5452 # DFBD 5453 # DFBE 5454 # DFBF 5456 # DFC0 5443 # DFC1 5421 # DFC2 5457 # DFC3 5459 # DFC4 5423 # DFC5 5432 # DFC6 5482 # DFC7 5494 # DFC8 5477 # DFC9 5471 # DFCA 5464 # DFCB 549A # DFCC 549B # DFCD 5484 # DFCE 5476 # DFCF 5466 # DFD0 549D # DFD1 54D0 # DFD2 54AD # DFD3 54C2 # DFD4 54B4 # DFD5 54D2 # DFD6 54A7 # DFD7 54A6 # DFD8 54D3 # DFD9 54D4 # DFDA 5472 # DFDB 54A3 # DFDC 54D5 # DFDD 54BB # DFDE 54BF # DFDF 54CC # DFE0 54D9 # DFE1 54DA # DFE2 54DC # DFE3 54A9 # DFE4 54AA # DFE5 54A4 # DFE6 54DD # DFE7 54CF # DFE8 54DE # DFE9 551B # DFEA 54E7 # DFEB 5520 # DFEC 54FD # DFED 5514 # DFEE 54F3 # DFEF 5522 # DFF0 5523 # DFF1 550F # DFF2 5511 # DFF3 5527 # DFF4 552A # DFF5 5567 # DFF6 558F # DFF7 55B5 # DFF8 5549 # DFF9 556D # DFFA 5541 # DFFB 5555 # DFFC 553F # DFFD 5550 # DFFE 553C # E0A1 5537 # E0A2 5556 # E0A3 5575 # E0A4 5576 # E0A5 5577 # E0A6 5533 # E0A7 5530 # E0A8 555C # E0A9 558B # E0AA 55D2 # E0AB 5583 # E0AC 55B1 # E0AD 55B9 # E0AE 5588 # E0AF 5581 # E0B0 559F # E0B1 557E # E0B2 55D6 # E0B3 5591 # E0B4 557B # E0B5 55DF # E0B6 55BD # E0B7 55BE # E0B8 5594 # E0B9 5599 # E0BA 55EA # E0BB 55F7 # E0BC 55C9 # E0BD 561F # E0BE 55D1 # E0BF 55EB # E0C0 55EC # E0C1 55D4 # E0C2 55E6 # E0C3 55DD # E0C4 55C4 # E0C5 55EF # E0C6 55E5 # E0C7 55F2 # E0C8 55F3 # E0C9 55CC # E0CA 55CD # E0CB 55E8 # E0CC 55F5 # E0CD 55E4 # E0CE 8F94 # E0CF 561E # E0D0 5608 # E0D1 560C # E0D2 5601 # E0D3 5624 # E0D4 5623 # E0D5 55FE # E0D6 5600 # E0D7 5627 # E0D8 562D # E0D9 5658 # E0DA 5639 # E0DB 5657 # E0DC 562C # E0DD 564D # E0DE 5662 # E0DF 5659 # E0E0 565C # E0E1 564C # E0E2 5654 # E0E3 5686 # E0E4 5664 # E0E5 5671 # E0E6 566B # E0E7 567B # E0E8 567C # E0E9 5685 # E0EA 5693 # E0EB 56AF # E0EC 56D4 # E0ED 56D7 # E0EE 56DD # E0EF 56E1 # E0F0 56F5 # E0F1 56EB # E0F2 56F9 # E0F3 56FF # E0F4 5704 # E0F5 570A # E0F6 5709 # E0F7 571C # E0F8 5E0F # E0F9 5E19 # E0FA 5E14 # E0FB 5E11 # E0FC 5E31 # E0FD 5E3B # E0FE 5E3C # E1A1 5E37 # E1A2 5E44 # E1A3 5E54 # E1A4 5E5B # E1A5 5E5E # E1A6 5E61 # E1A7 5C8C # E1A8 5C7A # E1A9 5C8D # E1AA 5C90 # E1AB 5C96 # E1AC 5C88 # E1AD 5C98 # E1AE 5C99 # E1AF 5C91 # E1B0 5C9A # E1B1 5C9C # E1B2 5CB5 # E1B3 5CA2 # E1B4 5CBD # E1B5 5CAC # E1B6 5CAB # E1B7 5CB1 # E1B8 5CA3 # E1B9 5CC1 # E1BA 5CB7 # E1BB 5CC4 # E1BC 5CD2 # E1BD 5CE4 # E1BE 5CCB # E1BF 5CE5 # E1C0 5D02 # E1C1 5D03 # E1C2 5D27 # E1C3 5D26 # E1C4 5D2E # E1C5 5D24 # E1C6 5D1E # E1C7 5D06 # E1C8 5D1B # E1C9 5D58 # E1CA 5D3E # E1CB 5D34 # E1CC 5D3D # E1CD 5D6C # E1CE 5D5B # E1CF 5D6F # E1D0 5D5D # E1D1 5D6B # E1D2 5D4B # E1D3 5D4A # E1D4 5D69 # E1D5 5D74 # E1D6 5D82 # E1D7 5D99 # E1D8 5D9D # E1D9 8C73 # E1DA 5DB7 # E1DB 5DC5 # E1DC 5F73 # E1DD 5F77 # E1DE 5F82 # E1DF 5F87 # E1E0 5F89 # E1E1 5F8C # E1E2 5F95 # E1E3 5F99 # E1E4 5F9C # E1E5 5FA8 # E1E6 5FAD # E1E7 5FB5 # E1E8 5FBC # E1E9 8862 # E1EA 5F61 # E1EB 72AD # E1EC 72B0 # E1ED 72B4 # E1EE 72B7 # E1EF 72B8 # E1F0 72C3 # E1F1 72C1 # E1F2 72CE # E1F3 72CD # E1F4 72D2 # E1F5 72E8 # E1F6 72EF # E1F7 72E9 # E1F8 72F2 # E1F9 72F4 # E1FA 72F7 # E1FB 7301 # E1FC 72F3 # E1FD 7303 # E1FE 72FA # E2A1 72FB # E2A2 7317 # E2A3 7313 # E2A4 7321 # E2A5 730A # E2A6 731E # E2A7 731D # E2A8 7315 # E2A9 7322 # E2AA 7339 # E2AB 7325 # E2AC 732C # E2AD 7338 # E2AE 7331 # E2AF 7350 # E2B0 734D # E2B1 7357 # E2B2 7360 # E2B3 736C # E2B4 736F # E2B5 737E # E2B6 821B # E2B7 5925 # E2B8 98E7 # E2B9 5924 # E2BA 5902 # E2BB 9963 # E2BC 9967 # E2BD 9968 # E2BE 9969 # E2BF 996A # E2C0 996B # E2C1 996C # E2C2 9974 # E2C3 9977 # E2C4 997D # E2C5 9980 # E2C6 9984 # E2C7 9987 # E2C8 998A # E2C9 998D # E2CA 9990 # E2CB 9991 # E2CC 9993 # E2CD 9994 # E2CE 9995 # E2CF 5E80 # E2D0 5E91 # E2D1 5E8B # E2D2 5E96 # E2D3 5EA5 # E2D4 5EA0 # E2D5 5EB9 # E2D6 5EB5 # E2D7 5EBE # E2D8 5EB3 # E2D9 8D53 # E2DA 5ED2 # E2DB 5ED1 # E2DC 5EDB # E2DD 5EE8 # E2DE 5EEA # E2DF 81BA # E2E0 5FC4 # E2E1 5FC9 # E2E2 5FD6 # E2E3 5FCF # E2E4 6003 # E2E5 5FEE # E2E6 6004 # E2E7 5FE1 # E2E8 5FE4 # E2E9 5FFE # E2EA 6005 # E2EB 6006 # E2EC 5FEA # E2ED 5FED # E2EE 5FF8 # E2EF 6019 # E2F0 6035 # E2F1 6026 # E2F2 601B # E2F3 600F # E2F4 600D # E2F5 6029 # E2F6 602B # E2F7 600A # E2F8 603F # E2F9 6021 # E2FA 6078 # E2FB 6079 # E2FC 607B # E2FD 607A # E2FE 6042 # E3A1 606A # E3A2 607D # E3A3 6096 # E3A4 609A # E3A5 60AD # E3A6 609D # E3A7 6083 # E3A8 6092 # E3A9 608C # E3AA 609B # E3AB 60EC # E3AC 60BB # E3AD 60B1 # E3AE 60DD # E3AF 60D8 # E3B0 60C6 # E3B1 60DA # E3B2 60B4 # E3B3 6120 # E3B4 6126 # E3B5 6115 # E3B6 6123 # E3B7 60F4 # E3B8 6100 # E3B9 610E # E3BA 612B # E3BB 614A # E3BC 6175 # E3BD 61AC # E3BE 6194 # E3BF 61A7 # E3C0 61B7 # E3C1 61D4 # E3C2 61F5 # E3C3 5FDD # E3C4 96B3 # E3C5 95E9 # E3C6 95EB # E3C7 95F1 # E3C8 95F3 # E3C9 95F5 # E3CA 95F6 # E3CB 95FC # E3CC 95FE # E3CD 9603 # E3CE 9604 # E3CF 9606 # E3D0 9608 # E3D1 960A # E3D2 960B # E3D3 960C # E3D4 960D # E3D5 960F # E3D6 9612 # E3D7 9615 # E3D8 9616 # E3D9 9617 # E3DA 9619 # E3DB 961A # E3DC 4E2C # E3DD 723F # E3DE 6215 # E3DF 6C35 # E3E0 6C54 # E3E1 6C5C # E3E2 6C4A # E3E3 6CA3 # E3E4 6C85 # E3E5 6C90 # E3E6 6C94 # E3E7 6C8C # E3E8 6C68 # E3E9 6C69 # E3EA 6C74 # E3EB 6C76 # E3EC 6C86 # E3ED 6CA9 # E3EE 6CD0 # E3EF 6CD4 # E3F0 6CAD # E3F1 6CF7 # E3F2 6CF8 # E3F3 6CF1 # E3F4 6CD7 # E3F5 6CB2 # E3F6 6CE0 # E3F7 6CD6 # E3F8 6CFA # E3F9 6CEB # E3FA 6CEE # E3FB 6CB1 # E3FC 6CD3 # E3FD 6CEF # E3FE 6CFE # E4A1 6D39 # E4A2 6D27 # E4A3 6D0C # E4A4 6D43 # E4A5 6D48 # E4A6 6D07 # E4A7 6D04 # E4A8 6D19 # E4A9 6D0E # E4AA 6D2B # E4AB 6D4D # E4AC 6D2E # E4AD 6D35 # E4AE 6D1A # E4AF 6D4F # E4B0 6D52 # E4B1 6D54 # E4B2 6D33 # E4B3 6D91 # E4B4 6D6F # E4B5 6D9E # E4B6 6DA0 # E4B7 6D5E # E4B8 6D93 # E4B9 6D94 # E4BA 6D5C # E4BB 6D60 # E4BC 6D7C # E4BD 6D63 # E4BE 6E1A # E4BF 6DC7 # E4C0 6DC5 # E4C1 6DDE # E4C2 6E0E # E4C3 6DBF # E4C4 6DE0 # E4C5 6E11 # E4C6 6DE6 # E4C7 6DDD # E4C8 6DD9 # E4C9 6E16 # E4CA 6DAB # E4CB 6E0C # E4CC 6DAE # E4CD 6E2B # E4CE 6E6E # E4CF 6E4E # E4D0 6E6B # E4D1 6EB2 # E4D2 6E5F # E4D3 6E86 # E4D4 6E53 # E4D5 6E54 # E4D6 6E32 # E4D7 6E25 # E4D8 6E44 # E4D9 6EDF # E4DA 6EB1 # E4DB 6E98 # E4DC 6EE0 # E4DD 6F2D # E4DE 6EE2 # E4DF 6EA5 # E4E0 6EA7 # E4E1 6EBD # E4E2 6EBB # E4E3 6EB7 # E4E4 6ED7 # E4E5 6EB4 # E4E6 6ECF # E4E7 6E8F # E4E8 6EC2 # E4E9 6E9F # E4EA 6F62 # E4EB 6F46 # E4EC 6F47 # E4ED 6F24 # E4EE 6F15 # E4EF 6EF9 # E4F0 6F2F # E4F1 6F36 # E4F2 6F4B # E4F3 6F74 # E4F4 6F2A # E4F5 6F09 # E4F6 6F29 # E4F7 6F89 # E4F8 6F8D # E4F9 6F8C # E4FA 6F78 # E4FB 6F72 # E4FC 6F7C # E4FD 6F7A # E4FE 6FD1 # E5A1 6FC9 # E5A2 6FA7 # E5A3 6FB9 # E5A4 6FB6 # E5A5 6FC2 # E5A6 6FE1 # E5A7 6FEE # E5A8 6FDE # E5A9 6FE0 # E5AA 6FEF # E5AB 701A # E5AC 7023 # E5AD 701B # E5AE 7039 # E5AF 7035 # E5B0 704F # E5B1 705E # E5B2 5B80 # E5B3 5B84 # E5B4 5B95 # E5B5 5B93 # E5B6 5BA5 # E5B7 5BB8 # E5B8 752F # E5B9 9A9E # E5BA 6434 # E5BB 5BE4 # E5BC 5BEE # E5BD 8930 # E5BE 5BF0 # E5BF 8E47 # E5C0 8B07 # E5C1 8FB6 # E5C2 8FD3 # E5C3 8FD5 # E5C4 8FE5 # E5C5 8FEE # E5C6 8FE4 # E5C7 8FE9 # E5C8 8FE6 # E5C9 8FF3 # E5CA 8FE8 # E5CB 9005 # E5CC 9004 # E5CD 900B # E5CE 9026 # E5CF 9011 # E5D0 900D # E5D1 9016 # E5D2 9021 # E5D3 9035 # E5D4 9036 # E5D5 902D # E5D6 902F # E5D7 9044 # E5D8 9051 # E5D9 9052 # E5DA 9050 # E5DB 9068 # E5DC 9058 # E5DD 9062 # E5DE 905B # E5DF 66B9 # E5E0 9074 # E5E1 907D # E5E2 9082 # E5E3 9088 # E5E4 9083 # E5E5 908B # E5E6 5F50 # E5E7 5F57 # E5E8 5F56 # E5E9 5F58 # E5EA 5C3B # E5EB 54AB # E5EC 5C50 # E5ED 5C59 # E5EE 5B71 # E5EF 5C63 # E5F0 5C66 # E5F1 7FBC # E5F2 5F2A # E5F3 5F29 # E5F4 5F2D # E5F5 8274 # E5F6 5F3C # E5F7 9B3B # E5F8 5C6E # E5F9 5981 # E5FA 5983 # E5FB 598D # E5FC 59A9 # E5FD 59AA # E5FE 59A3 # E6A1 5997 # E6A2 59CA # E6A3 59AB # E6A4 599E # E6A5 59A4 # E6A6 59D2 # E6A7 59B2 # E6A8 59AF # E6A9 59D7 # E6AA 59BE # E6AB 5A05 # E6AC 5A06 # E6AD 59DD # E6AE 5A08 # E6AF 59E3 # E6B0 59D8 # E6B1 59F9 # E6B2 5A0C # E6B3 5A09 # E6B4 5A32 # E6B5 5A34 # E6B6 5A11 # E6B7 5A23 # E6B8 5A13 # E6B9 5A40 # E6BA 5A67 # E6BB 5A4A # E6BC 5A55 # E6BD 5A3C # E6BE 5A62 # E6BF 5A75 # E6C0 80EC # E6C1 5AAA # E6C2 5A9B # E6C3 5A77 # E6C4 5A7A # E6C5 5ABE # E6C6 5AEB # E6C7 5AB2 # E6C8 5AD2 # E6C9 5AD4 # E6CA 5AB8 # E6CB 5AE0 # E6CC 5AE3 # E6CD 5AF1 # E6CE 5AD6 # E6CF 5AE6 # E6D0 5AD8 # E6D1 5ADC # E6D2 5B09 # E6D3 5B17 # E6D4 5B16 # E6D5 5B32 # E6D6 5B37 # E6D7 5B40 # E6D8 5C15 # E6D9 5C1C # E6DA 5B5A # E6DB 5B65 # E6DC 5B73 # E6DD 5B51 # E6DE 5B53 # E6DF 5B62 # E6E0 9A75 # E6E1 9A77 # E6E2 9A78 # E6E3 9A7A # E6E4 9A7F # E6E5 9A7D # E6E6 9A80 # E6E7 9A81 # E6E8 9A85 # E6E9 9A88 # E6EA 9A8A # E6EB 9A90 # E6EC 9A92 # E6ED 9A93 # E6EE 9A96 # E6EF 9A98 # E6F0 9A9B # E6F1 9A9C # E6F2 9A9D # E6F3 9A9F # E6F4 9AA0 # E6F5 9AA2 # E6F6 9AA3 # E6F7 9AA5 # E6F8 9AA7 # E6F9 7E9F # E6FA 7EA1 # E6FB 7EA3 # E6FC 7EA5 # E6FD 7EA8 # E6FE 7EA9 # E7A1 7EAD # E7A2 7EB0 # E7A3 7EBE # E7A4 7EC0 # E7A5 7EC1 # E7A6 7EC2 # E7A7 7EC9 # E7A8 7ECB # E7A9 7ECC # E7AA 7ED0 # E7AB 7ED4 # E7AC 7ED7 # E7AD 7EDB # E7AE 7EE0 # E7AF 7EE1 # E7B0 7EE8 # E7B1 7EEB # E7B2 7EEE # E7B3 7EEF # E7B4 7EF1 # E7B5 7EF2 # E7B6 7F0D # E7B7 7EF6 # E7B8 7EFA # E7B9 7EFB # E7BA 7EFE # E7BB 7F01 # E7BC 7F02 # E7BD 7F03 # E7BE 7F07 # E7BF 7F08 # E7C0 7F0B # E7C1 7F0C # E7C2 7F0F # E7C3 7F11 # E7C4 7F12 # E7C5 7F17 # E7C6 7F19 # E7C7 7F1C # E7C8 7F1B # E7C9 7F1F # E7CA 7F21 # E7CB 7F22 # E7CC 7F23 # E7CD 7F24 # E7CE 7F25 # E7CF 7F26 # E7D0 7F27 # E7D1 7F2A # E7D2 7F2B # E7D3 7F2C # E7D4 7F2D # E7D5 7F2F # E7D6 7F30 # E7D7 7F31 # E7D8 7F32 # E7D9 7F33 # E7DA 7F35 # E7DB 5E7A # E7DC 757F # E7DD 5DDB # E7DE 753E # E7DF 9095 # E7E0 738E # E7E1 7391 # E7E2 73AE # E7E3 73A2 # E7E4 739F # E7E5 73CF # E7E6 73C2 # E7E7 73D1 # E7E8 73B7 # E7E9 73B3 # E7EA 73C0 # E7EB 73C9 # E7EC 73C8 # E7ED 73E5 # E7EE 73D9 # E7EF 987C # E7F0 740A # E7F1 73E9 # E7F2 73E7 # E7F3 73DE # E7F4 73BA # E7F5 73F2 # E7F6 740F # E7F7 742A # E7F8 745B # E7F9 7426 # E7FA 7425 # E7FB 7428 # E7FC 7430 # E7FD 742E # E7FE 742C # E8A1 741B # E8A2 741A # E8A3 7441 # E8A4 745C # E8A5 7457 # E8A6 7455 # E8A7 7459 # E8A8 7477 # E8A9 746D # E8AA 747E # E8AB 749C # E8AC 748E # E8AD 7480 # E8AE 7481 # E8AF 7487 # E8B0 748B # E8B1 749E # E8B2 74A8 # E8B3 74A9 # E8B4 7490 # E8B5 74A7 # E8B6 74D2 # E8B7 74BA # E8B8 97EA # E8B9 97EB # E8BA 97EC # E8BB 674C # E8BC 6753 # E8BD 675E # E8BE 6748 # E8BF 6769 # E8C0 67A5 # E8C1 6787 # E8C2 676A # E8C3 6773 # E8C4 6798 # E8C5 67A7 # E8C6 6775 # E8C7 67A8 # E8C8 679E # E8C9 67AD # E8CA 678B # E8CB 6777 # E8CC 677C # E8CD 67F0 # E8CE 6809 # E8CF 67D8 # E8D0 680A # E8D1 67E9 # E8D2 67B0 # E8D3 680C # E8D4 67D9 # E8D5 67B5 # E8D6 67DA # E8D7 67B3 # E8D8 67DD # E8D9 6800 # E8DA 67C3 # E8DB 67B8 # E8DC 67E2 # E8DD 680E # E8DE 67C1 # E8DF 67FD # E8E0 6832 # E8E1 6833 # E8E2 6860 # E8E3 6861 # E8E4 684E # E8E5 6862 # E8E6 6844 # E8E7 6864 # E8E8 6883 # E8E9 681D # E8EA 6855 # E8EB 6866 # E8EC 6841 # E8ED 6867 # E8EE 6840 # E8EF 683E # E8F0 684A # E8F1 6849 # E8F2 6829 # E8F3 68B5 # E8F4 688F # E8F5 6874 # E8F6 6877 # E8F7 6893 # E8F8 686B # E8F9 68C2 # E8FA 696E # E8FB 68FC # E8FC 691F # E8FD 6920 # E8FE 68F9 # E9A1 6924 # E9A2 68F0 # E9A3 690B # E9A4 6901 # E9A5 6957 # E9A6 68E3 # E9A7 6910 # E9A8 6971 # E9A9 6939 # E9AA 6960 # E9AB 6942 # E9AC 695D # E9AD 6984 # E9AE 696B # E9AF 6980 # E9B0 6998 # E9B1 6978 # E9B2 6934 # E9B3 69CC # E9B4 6987 # E9B5 6988 # E9B6 69CE # E9B7 6989 # E9B8 6966 # E9B9 6963 # E9BA 6979 # E9BB 699B # E9BC 69A7 # E9BD 69BB # E9BE 69AB # E9BF 69AD # E9C0 69D4 # E9C1 69B1 # E9C2 69C1 # E9C3 69CA # E9C4 69DF # E9C5 6995 # E9C6 69E0 # E9C7 698D # E9C8 69FF # E9C9 6A2F # E9CA 69ED # E9CB 6A17 # E9CC 6A18 # E9CD 6A65 # E9CE 69F2 # E9CF 6A44 # E9D0 6A3E # E9D1 6AA0 # E9D2 6A50 # E9D3 6A5B # E9D4 6A35 # E9D5 6A8E # E9D6 6A79 # E9D7 6A3D # E9D8 6A28 # E9D9 6A58 # E9DA 6A7C # E9DB 6A91 # E9DC 6A90 # E9DD 6AA9 # E9DE 6A97 # E9DF 6AAB # E9E0 7337 # E9E1 7352 # E9E2 6B81 # E9E3 6B82 # E9E4 6B87 # E9E5 6B84 # E9E6 6B92 # E9E7 6B93 # E9E8 6B8D # E9E9 6B9A # E9EA 6B9B # E9EB 6BA1 # E9EC 6BAA # E9ED 8F6B # E9EE 8F6D # E9EF 8F71 # E9F0 8F72 # E9F1 8F73 # E9F2 8F75 # E9F3 8F76 # E9F4 8F78 # E9F5 8F77 # E9F6 8F79 # E9F7 8F7A # E9F8 8F7C # E9F9 8F7E # E9FA 8F81 # E9FB 8F82 # E9FC 8F84 # E9FD 8F87 # E9FE 8F8B # EAA1 8F8D # EAA2 8F8E # EAA3 8F8F # EAA4 8F98 # EAA5 8F9A # EAA6 8ECE # EAA7 620B # EAA8 6217 # EAA9 621B # EAAA 621F # EAAB 6222 # EAAC 6221 # EAAD 6225 # EAAE 6224 # EAAF 622C # EAB0 81E7 # EAB1 74EF # EAB2 74F4 # EAB3 74FF # EAB4 750F # EAB5 7511 # EAB6 7513 # EAB7 6534 # EAB8 65EE # EAB9 65EF # EABA 65F0 # EABB 660A # EABC 6619 # EABD 6772 # EABE 6603 # EABF 6615 # EAC0 6600 # EAC1 7085 # EAC2 66F7 # EAC3 661D # EAC4 6634 # EAC5 6631 # EAC6 6636 # EAC7 6635 # EAC8 8006 # EAC9 665F # EACA 6654 # EACB 6641 # EACC 664F # EACD 6656 # EACE 6661 # EACF 6657 # EAD0 6677 # EAD1 6684 # EAD2 668C # EAD3 66A7 # EAD4 669D # EAD5 66BE # EAD6 66DB # EAD7 66DC # EAD8 66E6 # EAD9 66E9 # EADA 8D32 # EADB 8D33 # EADC 8D36 # EADD 8D3B # EADE 8D3D # EADF 8D40 # EAE0 8D45 # EAE1 8D46 # EAE2 8D48 # EAE3 8D49 # EAE4 8D47 # EAE5 8D4D # EAE6 8D55 # EAE7 8D59 # EAE8 89C7 # EAE9 89CA # EAEA 89CB # EAEB 89CC # EAEC 89CE # EAED 89CF # EAEE 89D0 # EAEF 89D1 # EAF0 726E # EAF1 729F # EAF2 725D # EAF3 7266 # EAF4 726F # EAF5 727E # EAF6 727F # EAF7 7284 # EAF8 728B # EAF9 728D # EAFA 728F # EAFB 7292 # EAFC 6308 # EAFD 6332 # EAFE 63B0 # EBA1 643F # EBA2 64D8 # EBA3 8004 # EBA4 6BEA # EBA5 6BF3 # EBA6 6BFD # EBA7 6BF5 # EBA8 6BF9 # EBA9 6C05 # EBAA 6C07 # EBAB 6C06 # EBAC 6C0D # EBAD 6C15 # EBAE 6C18 # EBAF 6C19 # EBB0 6C1A # EBB1 6C21 # EBB2 6C29 # EBB3 6C24 # EBB4 6C2A # EBB5 6C32 # EBB6 6535 # EBB7 6555 # EBB8 656B # EBB9 724D # EBBA 7252 # EBBB 7256 # EBBC 7230 # EBBD 8662 # EBBE 5216 # EBBF 809F # EBC0 809C # EBC1 8093 # EBC2 80BC # EBC3 670A # EBC4 80BD # EBC5 80B1 # EBC6 80AB # EBC7 80AD # EBC8 80B4 # EBC9 80B7 # EBCA 80E7 # EBCB 80E8 # EBCC 80E9 # EBCD 80EA # EBCE 80DB # EBCF 80C2 # EBD0 80C4 # EBD1 80D9 # EBD2 80CD # EBD3 80D7 # EBD4 6710 # EBD5 80DD # EBD6 80EB # EBD7 80F1 # EBD8 80F4 # EBD9 80ED # EBDA 810D # EBDB 810E # EBDC 80F2 # EBDD 80FC # EBDE 6715 # EBDF 8112 # EBE0 8C5A # EBE1 8136 # EBE2 811E # EBE3 812C # EBE4 8118 # EBE5 8132 # EBE6 8148 # EBE7 814C # EBE8 8153 # EBE9 8174 # EBEA 8159 # EBEB 815A # EBEC 8171 # EBED 8160 # EBEE 8169 # EBEF 817C # EBF0 817D # EBF1 816D # EBF2 8167 # EBF3 584D # EBF4 5AB5 # EBF5 8188 # EBF6 8182 # EBF7 8191 # EBF8 6ED5 # EBF9 81A3 # EBFA 81AA # EBFB 81CC # EBFC 6726 # EBFD 81CA # EBFE 81BB # ECA1 81C1 # ECA2 81A6 # ECA3 6B24 # ECA4 6B37 # ECA5 6B39 # ECA6 6B43 # ECA7 6B46 # ECA8 6B59 # ECA9 98D1 # ECAA 98D2 # ECAB 98D3 # ECAC 98D5 # ECAD 98D9 # ECAE 98DA # ECAF 6BB3 # ECB0 5F40 # ECB1 6BC2 # ECB2 89F3 # ECB3 6590 # ECB4 9F51 # ECB5 6593 # ECB6 65BC # ECB7 65C6 # ECB8 65C4 # ECB9 65C3 # ECBA 65CC # ECBB 65CE # ECBC 65D2 # ECBD 65D6 # ECBE 7080 # ECBF 709C # ECC0 7096 # ECC1 709D # ECC2 70BB # ECC3 70C0 # ECC4 70B7 # ECC5 70AB # ECC6 70B1 # ECC7 70E8 # ECC8 70CA # ECC9 7110 # ECCA 7113 # ECCB 7116 # ECCC 712F # ECCD 7131 # ECCE 7173 # ECCF 715C # ECD0 7168 # ECD1 7145 # ECD2 7172 # ECD3 714A # ECD4 7178 # ECD5 717A # ECD6 7198 # ECD7 71B3 # ECD8 71B5 # ECD9 71A8 # ECDA 71A0 # ECDB 71E0 # ECDC 71D4 # ECDD 71E7 # ECDE 71F9 # ECDF 721D # ECE0 7228 # ECE1 706C # ECE2 7118 # ECE3 7166 # ECE4 71B9 # ECE5 623E # ECE6 623D # ECE7 6243 # ECE8 6248 # ECE9 6249 # ECEA 793B # ECEB 7940 # ECEC 7946 # ECED 7949 # ECEE 795B # ECEF 795C # ECF0 7953 # ECF1 795A # ECF2 7962 # ECF3 7957 # ECF4 7960 # ECF5 796F # ECF6 7967 # ECF7 797A # ECF8 7985 # ECF9 798A # ECFA 799A # ECFB 79A7 # ECFC 79B3 # ECFD 5FD1 # ECFE 5FD0 # EDA1 603C # EDA2 605D # EDA3 605A # EDA4 6067 # EDA5 6041 # EDA6 6059 # EDA7 6063 # EDA8 60AB # EDA9 6106 # EDAA 610D # EDAB 615D # EDAC 61A9 # EDAD 619D # EDAE 61CB # EDAF 61D1 # EDB0 6206 # EDB1 8080 # EDB2 807F # EDB3 6C93 # EDB4 6CF6 # EDB5 6DFC # EDB6 77F6 # EDB7 77F8 # EDB8 7800 # EDB9 7809 # EDBA 7817 # EDBB 7818 # EDBC 7811 # EDBD 65AB # EDBE 782D # EDBF 781C # EDC0 781D # EDC1 7839 # EDC2 783A # EDC3 783B # EDC4 781F # EDC5 783C # EDC6 7825 # EDC7 782C # EDC8 7823 # EDC9 7829 # EDCA 784E # EDCB 786D # EDCC 7856 # EDCD 7857 # EDCE 7826 # EDCF 7850 # EDD0 7847 # EDD1 784C # EDD2 786A # EDD3 789B # EDD4 7893 # EDD5 789A # EDD6 7887 # EDD7 789C # EDD8 78A1 # EDD9 78A3 # EDDA 78B2 # EDDB 78B9 # EDDC 78A5 # EDDD 78D4 # EDDE 78D9 # EDDF 78C9 # EDE0 78EC # EDE1 78F2 # EDE2 7905 # EDE3 78F4 # EDE4 7913 # EDE5 7924 # EDE6 791E # EDE7 7934 # EDE8 9F9B # EDE9 9EF9 # EDEA 9EFB # EDEB 9EFC # EDEC 76F1 # EDED 7704 # EDEE 770D # EDEF 76F9 # EDF0 7707 # EDF1 7708 # EDF2 771A # EDF3 7722 # EDF4 7719 # EDF5 772D # EDF6 7726 # EDF7 7735 # EDF8 7738 # EDF9 7750 # EDFA 7751 # EDFB 7747 # EDFC 7743 # EDFD 775A # EDFE 7768 # EEA1 7762 # EEA2 7765 # EEA3 777F # EEA4 778D # EEA5 777D # EEA6 7780 # EEA7 778C # EEA8 7791 # EEA9 779F # EEAA 77A0 # EEAB 77B0 # EEAC 77B5 # EEAD 77BD # EEAE 753A # EEAF 7540 # EEB0 754E # EEB1 754B # EEB2 7548 # EEB3 755B # EEB4 7572 # EEB5 7579 # EEB6 7583 # EEB7 7F58 # EEB8 7F61 # EEB9 7F5F # EEBA 8A48 # EEBB 7F68 # EEBC 7F74 # EEBD 7F71 # EEBE 7F79 # EEBF 7F81 # EEC0 7F7E # EEC1 76CD # EEC2 76E5 # EEC3 8832 # EEC4 9485 # EEC5 9486 # EEC6 9487 # EEC7 948B # EEC8 948A # EEC9 948C # EECA 948D # EECB 948F # EECC 9490 # EECD 9494 # EECE 9497 # EECF 9495 # EED0 949A # EED1 949B # EED2 949C # EED3 94A3 # EED4 94A4 # EED5 94AB # EED6 94AA # EED7 94AD # EED8 94AC # EED9 94AF # EEDA 94B0 # EEDB 94B2 # EEDC 94B4 # EEDD 94B6 # EEDE 94B7 # EEDF 94B8 # EEE0 94B9 # EEE1 94BA # EEE2 94BC # EEE3 94BD # EEE4 94BF # EEE5 94C4 # EEE6 94C8 # EEE7 94C9 # EEE8 94CA # EEE9 94CB # EEEA 94CC # EEEB 94CD # EEEC 94CE # EEED 94D0 # EEEE 94D1 # EEEF 94D2 # EEF0 94D5 # EEF1 94D6 # EEF2 94D7 # EEF3 94D9 # EEF4 94D8 # EEF5 94DB # EEF6 94DE # EEF7 94DF # EEF8 94E0 # EEF9 94E2 # EEFA 94E4 # EEFB 94E5 # EEFC 94E7 # EEFD 94E8 # EEFE 94EA # EFA1 94E9 # EFA2 94EB # EFA3 94EE # EFA4 94EF # EFA5 94F3 # EFA6 94F4 # EFA7 94F5 # EFA8 94F7 # EFA9 94F9 # EFAA 94FC # EFAB 94FD # EFAC 94FF # EFAD 9503 # EFAE 9502 # EFAF 9506 # EFB0 9507 # EFB1 9509 # EFB2 950A # EFB3 950D # EFB4 950E # EFB5 950F # EFB6 9512 # EFB7 9513 # EFB8 9514 # EFB9 9515 # EFBA 9516 # EFBB 9518 # EFBC 951B # EFBD 951D # EFBE 951E # EFBF 951F # EFC0 9522 # EFC1 952A # EFC2 952B # EFC3 9529 # EFC4 952C # EFC5 9531 # EFC6 9532 # EFC7 9534 # EFC8 9536 # EFC9 9537 # EFCA 9538 # EFCB 953C # EFCC 953E # EFCD 953F # EFCE 9542 # EFCF 9535 # EFD0 9544 # EFD1 9545 # EFD2 9546 # EFD3 9549 # EFD4 954C # EFD5 954E # EFD6 954F # EFD7 9552 # EFD8 9553 # EFD9 9554 # EFDA 9556 # EFDB 9557 # EFDC 9558 # EFDD 9559 # EFDE 955B # EFDF 955E # EFE0 955F # EFE1 955D # EFE2 9561 # EFE3 9562 # EFE4 9564 # EFE5 9565 # EFE6 9566 # EFE7 9567 # EFE8 9568 # EFE9 9569 # EFEA 956A # EFEB 956B # EFEC 956C # EFED 956F # EFEE 9571 # EFEF 9572 # EFF0 9573 # EFF1 953A # EFF2 77E7 # EFF3 77EC # EFF4 96C9 # EFF5 79D5 # EFF6 79ED # EFF7 79E3 # EFF8 79EB # EFF9 7A06 # EFFA 5D47 # EFFB 7A03 # EFFC 7A02 # EFFD 7A1E # EFFE 7A14 # F0A1 7A39 # F0A2 7A37 # F0A3 7A51 # F0A4 9ECF # F0A5 99A5 # F0A6 7A70 # F0A7 7688 # F0A8 768E # F0A9 7693 # F0AA 7699 # F0AB 76A4 # F0AC 74DE # F0AD 74E0 # F0AE 752C # F0AF 9E20 # F0B0 9E22 # F0B1 9E28 # F0B2 9E29 # F0B3 9E2A # F0B4 9E2B # F0B5 9E2C # F0B6 9E32 # F0B7 9E31 # F0B8 9E36 # F0B9 9E38 # F0BA 9E37 # F0BB 9E39 # F0BC 9E3A # F0BD 9E3E # F0BE 9E41 # F0BF 9E42 # F0C0 9E44 # F0C1 9E46 # F0C2 9E47 # F0C3 9E48 # F0C4 9E49 # F0C5 9E4B # F0C6 9E4C # F0C7 9E4E # F0C8 9E51 # F0C9 9E55 # F0CA 9E57 # F0CB 9E5A # F0CC 9E5B # F0CD 9E5C # F0CE 9E5E # F0CF 9E63 # F0D0 9E66 # F0D1 9E67 # F0D2 9E68 # F0D3 9E69 # F0D4 9E6A # F0D5 9E6B # F0D6 9E6C # F0D7 9E71 # F0D8 9E6D # F0D9 9E73 # F0DA 7592 # F0DB 7594 # F0DC 7596 # F0DD 75A0 # F0DE 759D # F0DF 75AC # F0E0 75A3 # F0E1 75B3 # F0E2 75B4 # F0E3 75B8 # F0E4 75C4 # F0E5 75B1 # F0E6 75B0 # F0E7 75C3 # F0E8 75C2 # F0E9 75D6 # F0EA 75CD # F0EB 75E3 # F0EC 75E8 # F0ED 75E6 # F0EE 75E4 # F0EF 75EB # F0F0 75E7 # F0F1 7603 # F0F2 75F1 # F0F3 75FC # F0F4 75FF # F0F5 7610 # F0F6 7600 # F0F7 7605 # F0F8 760C # F0F9 7617 # F0FA 760A # F0FB 7625 # F0FC 7618 # F0FD 7615 # F0FE 7619 # F1A1 761B # F1A2 763C # F1A3 7622 # F1A4 7620 # F1A5 7640 # F1A6 762D # F1A7 7630 # F1A8 763F # F1A9 7635 # F1AA 7643 # F1AB 763E # F1AC 7633 # F1AD 764D # F1AE 765E # F1AF 7654 # F1B0 765C # F1B1 7656 # F1B2 766B # F1B3 766F # F1B4 7FCA # F1B5 7AE6 # F1B6 7A78 # F1B7 7A79 # F1B8 7A80 # F1B9 7A86 # F1BA 7A88 # F1BB 7A95 # F1BC 7AA6 # F1BD 7AA0 # F1BE 7AAC # F1BF 7AA8 # F1C0 7AAD # F1C1 7AB3 # F1C2 8864 # F1C3 8869 # F1C4 8872 # F1C5 887D # F1C6 887F # F1C7 8882 # F1C8 88A2 # F1C9 88C6 # F1CA 88B7 # F1CB 88BC # F1CC 88C9 # F1CD 88E2 # F1CE 88CE # F1CF 88E3 # F1D0 88E5 # F1D1 88F1 # F1D2 891A # F1D3 88FC # F1D4 88E8 # F1D5 88FE # F1D6 88F0 # F1D7 8921 # F1D8 8919 # F1D9 8913 # F1DA 891B # F1DB 890A # F1DC 8934 # F1DD 892B # F1DE 8936 # F1DF 8941 # F1E0 8966 # F1E1 897B # F1E2 758B # F1E3 80E5 # F1E4 76B2 # F1E5 76B4 # F1E6 77DC # F1E7 8012 # F1E8 8014 # F1E9 8016 # F1EA 801C # F1EB 8020 # F1EC 8022 # F1ED 8025 # F1EE 8026 # F1EF 8027 # F1F0 8029 # F1F1 8028 # F1F2 8031 # F1F3 800B # F1F4 8035 # F1F5 8043 # F1F6 8046 # F1F7 804D # F1F8 8052 # F1F9 8069 # F1FA 8071 # F1FB 8983 # F1FC 9878 # F1FD 9880 # F1FE 9883 # F2A1 9889 # F2A2 988C # F2A3 988D # F2A4 988F # F2A5 9894 # F2A6 989A # F2A7 989B # F2A8 989E # F2A9 989F # F2AA 98A1 # F2AB 98A2 # F2AC 98A5 # F2AD 98A6 # F2AE 864D # F2AF 8654 # F2B0 866C # F2B1 866E # F2B2 867F # F2B3 867A # F2B4 867C # F2B5 867B # F2B6 86A8 # F2B7 868D # F2B8 868B # F2B9 86AC # F2BA 869D # F2BB 86A7 # F2BC 86A3 # F2BD 86AA # F2BE 8693 # F2BF 86A9 # F2C0 86B6 # F2C1 86C4 # F2C2 86B5 # F2C3 86CE # F2C4 86B0 # F2C5 86BA # F2C6 86B1 # F2C7 86AF # F2C8 86C9 # F2C9 86CF # F2CA 86B4 # F2CB 86E9 # F2CC 86F1 # F2CD 86F2 # F2CE 86ED # F2CF 86F3 # F2D0 86D0 # F2D1 8713 # F2D2 86DE # F2D3 86F4 # F2D4 86DF # F2D5 86D8 # F2D6 86D1 # F2D7 8703 # F2D8 8707 # F2D9 86F8 # F2DA 8708 # F2DB 870A # F2DC 870D # F2DD 8709 # F2DE 8723 # F2DF 873B # F2E0 871E # F2E1 8725 # F2E2 872E # F2E3 871A # F2E4 873E # F2E5 8748 # F2E6 8734 # F2E7 8731 # F2E8 8729 # F2E9 8737 # F2EA 873F # F2EB 8782 # F2EC 8722 # F2ED 877D # F2EE 877E # F2EF 877B # F2F0 8760 # F2F1 8770 # F2F2 874C # F2F3 876E # F2F4 878B # F2F5 8753 # F2F6 8763 # F2F7 877C # F2F8 8764 # F2F9 8759 # F2FA 8765 # F2FB 8793 # F2FC 87AF # F2FD 87A8 # F2FE 87D2 # F3A1 87C6 # F3A2 8788 # F3A3 8785 # F3A4 87AD # F3A5 8797 # F3A6 8783 # F3A7 87AB # F3A8 87E5 # F3A9 87AC # F3AA 87B5 # F3AB 87B3 # F3AC 87CB # F3AD 87D3 # F3AE 87BD # F3AF 87D1 # F3B0 87C0 # F3B1 87CA # F3B2 87DB # F3B3 87EA # F3B4 87E0 # F3B5 87EE # F3B6 8816 # F3B7 8813 # F3B8 87FE # F3B9 880A # F3BA 881B # F3BB 8821 # F3BC 8839 # F3BD 883C # F3BE 7F36 # F3BF 7F42 # F3C0 7F44 # F3C1 7F45 # F3C2 8210 # F3C3 7AFA # F3C4 7AFD # F3C5 7B08 # F3C6 7B03 # F3C7 7B04 # F3C8 7B15 # F3C9 7B0A # F3CA 7B2B # F3CB 7B0F # F3CC 7B47 # F3CD 7B38 # F3CE 7B2A # F3CF 7B19 # F3D0 7B2E # F3D1 7B31 # F3D2 7B20 # F3D3 7B25 # F3D4 7B24 # F3D5 7B33 # F3D6 7B3E # F3D7 7B1E # F3D8 7B58 # F3D9 7B5A # F3DA 7B45 # F3DB 7B75 # F3DC 7B4C # F3DD 7B5D # F3DE 7B60 # F3DF 7B6E # F3E0 7B7B # F3E1 7B62 # F3E2 7B72 # F3E3 7B71 # F3E4 7B90 # F3E5 7BA6 # F3E6 7BA7 # F3E7 7BB8 # F3E8 7BAC # F3E9 7B9D # F3EA 7BA8 # F3EB 7B85 # F3EC 7BAA # F3ED 7B9C # F3EE 7BA2 # F3EF 7BAB # F3F0 7BB4 # F3F1 7BD1 # F3F2 7BC1 # F3F3 7BCC # F3F4 7BDD # F3F5 7BDA # F3F6 7BE5 # F3F7 7BE6 # F3F8 7BEA # F3F9 7C0C # F3FA 7BFE # F3FB 7BFC # F3FC 7C0F # F3FD 7C16 # F3FE 7C0B # F4A1 7C1F # F4A2 7C2A # F4A3 7C26 # F4A4 7C38 # F4A5 7C41 # F4A6 7C40 # F4A7 81FE # F4A8 8201 # F4A9 8202 # F4AA 8204 # F4AB 81EC # F4AC 8844 # F4AD 8221 # F4AE 8222 # F4AF 8223 # F4B0 822D # F4B1 822F # F4B2 8228 # F4B3 822B # F4B4 8238 # F4B5 823B # F4B6 8233 # F4B7 8234 # F4B8 823E # F4B9 8244 # F4BA 8249 # F4BB 824B # F4BC 824F # F4BD 825A # F4BE 825F # F4BF 8268 # F4C0 887E # F4C1 8885 # F4C2 8888 # F4C3 88D8 # F4C4 88DF # F4C5 895E # F4C6 7F9D # F4C7 7F9F # F4C8 7FA7 # F4C9 7FAF # F4CA 7FB0 # F4CB 7FB2 # F4CC 7C7C # F4CD 6549 # F4CE 7C91 # F4CF 7C9D # F4D0 7C9C # F4D1 7C9E # F4D2 7CA2 # F4D3 7CB2 # F4D4 7CBC # F4D5 7CBD # F4D6 7CC1 # F4D7 7CC7 # F4D8 7CCC # F4D9 7CCD # F4DA 7CC8 # F4DB 7CC5 # F4DC 7CD7 # F4DD 7CE8 # F4DE 826E # F4DF 66A8 # F4E0 7FBF # F4E1 7FCE # F4E2 7FD5 # F4E3 7FE5 # F4E4 7FE1 # F4E5 7FE6 # F4E6 7FE9 # F4E7 7FEE # F4E8 7FF3 # F4E9 7CF8 # F4EA 7D77 # F4EB 7DA6 # F4EC 7DAE # F4ED 7E47 # F4EE 7E9B # F4EF 9EB8 # F4F0 9EB4 # F4F1 8D73 # F4F2 8D84 # F4F3 8D94 # F4F4 8D91 # F4F5 8DB1 # F4F6 8D67 # F4F7 8D6D # F4F8 8C47 # F4F9 8C49 # F4FA 914A # F4FB 9150 # F4FC 914E # F4FD 914F # F4FE 9164 # F5A1 9162 # F5A2 9161 # F5A3 9170 # F5A4 9169 # F5A5 916F # F5A6 917D # F5A7 917E # F5A8 9172 # F5A9 9174 # F5AA 9179 # F5AB 918C # F5AC 9185 # F5AD 9190 # F5AE 918D # F5AF 9191 # F5B0 91A2 # F5B1 91A3 # F5B2 91AA # F5B3 91AD # F5B4 91AE # F5B5 91AF # F5B6 91B5 # F5B7 91B4 # F5B8 91BA # F5B9 8C55 # F5BA 9E7E # F5BB 8DB8 # F5BC 8DEB # F5BD 8E05 # F5BE 8E59 # F5BF 8E69 # F5C0 8DB5 # F5C1 8DBF # F5C2 8DBC # F5C3 8DBA # F5C4 8DC4 # F5C5 8DD6 # F5C6 8DD7 # F5C7 8DDA # F5C8 8DDE # F5C9 8DCE # F5CA 8DCF # F5CB 8DDB # F5CC 8DC6 # F5CD 8DEC # F5CE 8DF7 # F5CF 8DF8 # F5D0 8DE3 # F5D1 8DF9 # F5D2 8DFB # F5D3 8DE4 # F5D4 8E09 # F5D5 8DFD # F5D6 8E14 # F5D7 8E1D # F5D8 8E1F # F5D9 8E2C # F5DA 8E2E # F5DB 8E23 # F5DC 8E2F # F5DD 8E3A # F5DE 8E40 # F5DF 8E39 # F5E0 8E35 # F5E1 8E3D # F5E2 8E31 # F5E3 8E49 # F5E4 8E41 # F5E5 8E42 # F5E6 8E51 # F5E7 8E52 # F5E8 8E4A # F5E9 8E70 # F5EA 8E76 # F5EB 8E7C # F5EC 8E6F # F5ED 8E74 # F5EE 8E85 # F5EF 8E8F # F5F0 8E94 # F5F1 8E90 # F5F2 8E9C # F5F3 8E9E # F5F4 8C78 # F5F5 8C82 # F5F6 8C8A # F5F7 8C85 # F5F8 8C98 # F5F9 8C94 # F5FA 659B # F5FB 89D6 # F5FC 89DE # F5FD 89DA # F5FE 89DC # F6A1 89E5 # F6A2 89EB # F6A3 89EF # F6A4 8A3E # F6A5 8B26 # F6A6 9753 # F6A7 96E9 # F6A8 96F3 # F6A9 96EF # F6AA 9706 # F6AB 9701 # F6AC 9708 # F6AD 970F # F6AE 970E # F6AF 972A # F6B0 972D # F6B1 9730 # F6B2 973E # F6B3 9F80 # F6B4 9F83 # F6B5 9F85 # F6B6 9F86 # F6B7 9F87 # F6B8 9F88 # F6B9 9F89 # F6BA 9F8A # F6BB 9F8C # F6BC 9EFE # F6BD 9F0B # F6BE 9F0D # F6BF 96B9 # F6C0 96BC # F6C1 96BD # F6C2 96CE # F6C3 96D2 # F6C4 77BF # F6C5 96E0 # F6C6 928E # F6C7 92AE # F6C8 92C8 # F6C9 933E # F6CA 936A # F6CB 93CA # F6CC 938F # F6CD 943E # F6CE 946B # F6CF 9C7F # F6D0 9C82 # F6D1 9C85 # F6D2 9C86 # F6D3 9C87 # F6D4 9C88 # F6D5 7A23 # F6D6 9C8B # F6D7 9C8E # F6D8 9C90 # F6D9 9C91 # F6DA 9C92 # F6DB 9C94 # F6DC 9C95 # F6DD 9C9A # F6DE 9C9B # F6DF 9C9E # F6E0 9C9F # F6E1 9CA0 # F6E2 9CA1 # F6E3 9CA2 # F6E4 9CA3 # F6E5 9CA5 # F6E6 9CA6 # F6E7 9CA7 # F6E8 9CA8 # F6E9 9CA9 # F6EA 9CAB # F6EB 9CAD # F6EC 9CAE # F6ED 9CB0 # F6EE 9CB1 # F6EF 9CB2 # F6F0 9CB3 # F6F1 9CB4 # F6F2 9CB5 # F6F3 9CB6 # F6F4 9CB7 # F6F5 9CBA # F6F6 9CBB # F6F7 9CBC # F6F8 9CBD # F6F9 9CC4 # F6FA 9CC5 # F6FB 9CC6 # F6FC 9CC7 # F6FD 9CCA # F6FE 9CCB # F7A1 9CCC # F7A2 9CCD # F7A3 9CCE # F7A4 9CCF # F7A5 9CD0 # F7A6 9CD3 # F7A7 9CD4 # F7A8 9CD5 # F7A9 9CD7 # F7AA 9CD8 # F7AB 9CD9 # F7AC 9CDC # F7AD 9CDD # F7AE 9CDF # F7AF 9CE2 # F7B0 977C # F7B1 9785 # F7B2 9791 # F7B3 9792 # F7B4 9794 # F7B5 97AF # F7B6 97AB # F7B7 97A3 # F7B8 97B2 # F7B9 97B4 # F7BA 9AB1 # F7BB 9AB0 # F7BC 9AB7 # F7BD 9E58 # F7BE 9AB6 # F7BF 9ABA # F7C0 9ABC # F7C1 9AC1 # F7C2 9AC0 # F7C3 9AC5 # F7C4 9AC2 # F7C5 9ACB # F7C6 9ACC # F7C7 9AD1 # F7C8 9B45 # F7C9 9B43 # F7CA 9B47 # F7CB 9B49 # F7CC 9B48 # F7CD 9B4D # F7CE 9B51 # F7CF 98E8 # F7D0 990D # F7D1 992E # F7D2 9955 # F7D3 9954 # F7D4 9ADF # F7D5 9AE1 # F7D6 9AE6 # F7D7 9AEF # F7D8 9AEB # F7D9 9AFB # F7DA 9AED # F7DB 9AF9 # F7DC 9B08 # F7DD 9B0F # F7DE 9B13 # F7DF 9B1F # F7E0 9B23 # F7E1 9EBD # F7E2 9EBE # F7E3 7E3B # F7E4 9E82 # F7E5 9E87 # F7E6 9E88 # F7E7 9E8B # F7E8 9E92 # F7E9 93D6 # F7EA 9E9D # F7EB 9E9F # F7EC 9EDB # F7ED 9EDC # F7EE 9EDD # F7EF 9EE0 # F7F0 9EDF # F7F1 9EE2 # F7F2 9EE9 # F7F3 9EE7 # F7F4 9EE5 # F7F5 9EEA # F7F6 9EEF # F7F7 9F22 # F7F8 9F2C # F7F9 9F2F # F7FA 9F39 # F7FB 9F37 # F7FC 9F3D # F7FD 9F3E # F7FE 9F44 # cyrus-imspd-v1.8/lib/charset/iso-2022-jp.t0100644004310100000120000037443107372056422017357 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. :US-ASCII 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B >ESC 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) :ESC < 24 :ESC-$ 28 :ESC-( :ESC-( < 42 :US-ASCII 4A :JIS-0201 :ESC-$ < 40 :JIS-0208 42 :JIS-0208 :JIS-0201 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B >ESC 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002A ASTERISK 2B 002B PLUS SIGN 2C 002C COMMA 2D 002D HYPHEN-MINUS 2E 002E FULL STOP 2F 002F SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003A COLON 3B 003B SEMICOLON 3C 003C LESS-THAN SIGN 3D 003D EQUALS SIGN 3E 003E GREATER-THAN SIGN 3F 003F QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004A LATIN CAPITAL LETTER J 4B 004B LATIN CAPITAL LETTER K 4C 004C LATIN CAPITAL LETTER L 4D 004D LATIN CAPITAL LETTER M 4E 004E LATIN CAPITAL LETTER N 4F 004F LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005A LATIN CAPITAL LETTER Z 5B 005B LEFT SQUARE BRACKET 5C 00A5 YEN SIGN 5D 005D RIGHT SQUARE BRACKET 5E 005E CIRCUMFLEX ACCENT 5F 005F LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006A LATIN SMALL LETTER J 6B 006B LATIN SMALL LETTER K 6C 006C LATIN SMALL LETTER L 6D 006D LATIN SMALL LETTER M 6E 006E LATIN SMALL LETTER N 6F 006F LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007A LATIN SMALL LETTER Z 7B 007B LEFT CURLY BRACKET 7C 007C VERTICAL LINE 7D 007D RIGHT CURLY BRACKET 7E 203E OVERLINE 7F 007f DELETE (DEL) A0 3000 IDEOGRAPHIC SPACE A1 FF61 HALFWIDTH IDEOGRAPHIC FULL STOP A2 FF62 HALFWIDTH LEFT CORNER BRACKET A3 FF63 HALFWIDTH RIGHT CORNER BRACKET A4 FF64 HALFWIDTH IDEOGRAPHIC COMMA A5 FF65 HALFWIDTH KATAKANA MIDDLE DOT A6 FF66 HALFWIDTH KATAKANA LETTER WO A7 FF67 HALFWIDTH KATAKANA LETTER SMALL A A8 FF68 HALFWIDTH KATAKANA LETTER SMALL I A9 FF69 HALFWIDTH KATAKANA LETTER SMALL U AA FF6A HALFWIDTH KATAKANA LETTER SMALL E AB FF6B HALFWIDTH KATAKANA LETTER SMALL O AC FF6C HALFWIDTH KATAKANA LETTER SMALL YA AD FF6D HALFWIDTH KATAKANA LETTER SMALL YU AE FF6E HALFWIDTH KATAKANA LETTER SMALL YO AF FF6F HALFWIDTH KATAKANA LETTER SMALL TU B0 FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK B1 FF71 HALFWIDTH KATAKANA LETTER A B2 FF72 HALFWIDTH KATAKANA LETTER I B3 FF73 HALFWIDTH KATAKANA LETTER U B4 FF74 HALFWIDTH KATAKANA LETTER E B5 FF75 HALFWIDTH KATAKANA LETTER O B6 FF76 HALFWIDTH KATAKANA LETTER KA B7 FF77 HALFWIDTH KATAKANA LETTER KI B8 FF78 HALFWIDTH KATAKANA LETTER KU B9 FF79 HALFWIDTH KATAKANA LETTER KE BA FF7A HALFWIDTH KATAKANA LETTER KO BB FF7B HALFWIDTH KATAKANA LETTER SA BC FF7C HALFWIDTH KATAKANA LETTER SI BD FF7D HALFWIDTH KATAKANA LETTER SU BE FF7E HALFWIDTH KATAKANA LETTER SE BF FF7F HALFWIDTH KATAKANA LETTER SO C0 FF80 HALFWIDTH KATAKANA LETTER TA C1 FF81 HALFWIDTH KATAKANA LETTER TI C2 FF82 HALFWIDTH KATAKANA LETTER TU C3 FF83 HALFWIDTH KATAKANA LETTER TE C4 FF84 HALFWIDTH KATAKANA LETTER TO C5 FF85 HALFWIDTH KATAKANA LETTER NA C6 FF86 HALFWIDTH KATAKANA LETTER NI C7 FF87 HALFWIDTH KATAKANA LETTER NU C8 FF88 HALFWIDTH KATAKANA LETTER NE C9 FF89 HALFWIDTH KATAKANA LETTER NO CA FF8A HALFWIDTH KATAKANA LETTER HA CB FF8B HALFWIDTH KATAKANA LETTER HI CC FF8C HALFWIDTH KATAKANA LETTER HU CD FF8D HALFWIDTH KATAKANA LETTER HE CE FF8E HALFWIDTH KATAKANA LETTER HO CF FF8F HALFWIDTH KATAKANA LETTER MA D0 FF90 HALFWIDTH KATAKANA LETTER MI D1 FF91 HALFWIDTH KATAKANA LETTER MU D2 FF92 HALFWIDTH KATAKANA LETTER ME D3 FF93 HALFWIDTH KATAKANA LETTER MO D4 FF94 HALFWIDTH KATAKANA LETTER YA D5 FF95 HALFWIDTH KATAKANA LETTER YU D6 FF96 HALFWIDTH KATAKANA LETTER YO D7 FF97 HALFWIDTH KATAKANA LETTER RA D8 FF98 HALFWIDTH KATAKANA LETTER RI D9 FF99 HALFWIDTH KATAKANA LETTER RU DA FF9A HALFWIDTH KATAKANA LETTER RE DB FF9B HALFWIDTH KATAKANA LETTER RO DC FF9C HALFWIDTH KATAKANA LETTER WA DD FF9D HALFWIDTH KATAKANA LETTER N DE FF9E HALFWIDTH KATAKANA VOICED SOUND MARK DF FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK :JIS-0208 1B >ESC 2121 3000 IDEOGRAPHIC SPACE 2122 3001 IDEOGRAPHIC COMMA 2123 3002 IDEOGRAPHIC FULL STOP 2124 FF0C FULLWIDTH COMMA 2125 FF0E FULLWIDTH FULL STOP 2126 30FB KATAKANA MIDDLE DOT 2127 FF1A FULLWIDTH COLON 2128 FF1B FULLWIDTH SEMICOLON 2129 FF1F FULLWIDTH QUESTION MARK 212A FF01 FULLWIDTH EXCLAMATION MARK 212B 309B KATAKANA-HIRAGANA VOICED SOUND MARK 212C 309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 212D 00B4 ACUTE ACCENT 212E FF40 FULLWIDTH GRAVE ACCENT 212F 00A8 DIAERESIS 2130 FF3E FULLWIDTH CIRCUMFLEX ACCENT 2131 FFE3 FULLWIDTH MACRON 2132 FF3F FULLWIDTH LOW LINE 2133 30FD KATAKANA ITERATION MARK 2134 30FE KATAKANA VOICED ITERATION MARK 2135 309D HIRAGANA ITERATION MARK 2136 309E HIRAGANA VOICED ITERATION MARK 2137 3003 DITTO MARK 2138 4EDD 2139 3005 IDEOGRAPHIC ITERATION MARK 213A 3006 IDEOGRAPHIC CLOSING MARK 213B 3007 IDEOGRAPHIC NUMBER ZERO 213C 30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK 213D 2015 HORIZONTAL BAR 213E 2010 HYPHEN 213F FF0F FULLWIDTH SOLIDUS 2140 005C REVERSE SOLIDUS 2141 301C WAVE DASH 2142 2016 DOUBLE VERTICAL LINE 2143 FF5C FULLWIDTH VERTICAL LINE 2144 2026 HORIZONTAL ELLIPSIS 2145 2025 TWO DOT LEADER 2146 2018 LEFT SINGLE QUOTATION MARK 2147 2019 RIGHT SINGLE QUOTATION MARK 2148 201C LEFT DOUBLE QUOTATION MARK 2149 201D RIGHT DOUBLE QUOTATION MARK 214A FF08 FULLWIDTH LEFT PARENTHESIS 214B FF09 FULLWIDTH RIGHT PARENTHESIS 214C 3014 LEFT TORTOISE SHELL BRACKET 214D 3015 RIGHT TORTOISE SHELL BRACKET 214E FF3B FULLWIDTH LEFT SQUARE BRACKET 214F FF3D FULLWIDTH RIGHT SQUARE BRACKET 2150 FF5B FULLWIDTH LEFT CURLY BRACKET 2151 FF5D FULLWIDTH RIGHT CURLY BRACKET 2152 3008 LEFT ANGLE BRACKET 2153 3009 RIGHT ANGLE BRACKET 2154 300A LEFT DOUBLE ANGLE BRACKET 2155 300B RIGHT DOUBLE ANGLE BRACKET 2156 300C LEFT CORNER BRACKET 2157 300D RIGHT CORNER BRACKET 2158 300E LEFT WHITE CORNER BRACKET 2159 300F RIGHT WHITE CORNER BRACKET 215A 3010 LEFT BLACK LENTICULAR BRACKET 215B 3011 RIGHT BLACK LENTICULAR BRACKET 215C FF0B FULLWIDTH PLUS SIGN 215D 2212 MINUS SIGN 215E 00B1 PLUS-MINUS SIGN 215F 00D7 MULTIPLICATION SIGN 2160 00F7 DIVISION SIGN 2161 FF1D FULLWIDTH EQUALS SIGN 2162 2260 NOT EQUAL TO 2163 FF1C FULLWIDTH LESS-THAN SIGN 2164 FF1E FULLWIDTH GREATER-THAN SIGN 2165 2266 LESS-THAN OVER EQUAL TO 2166 2267 GREATER-THAN OVER EQUAL TO 2167 221E INFINITY 2168 2234 THEREFORE 2169 2642 MALE SIGN 216A 2640 FEMALE SIGN 216B 00B0 DEGREE SIGN 216C 2032 PRIME 216D 2033 DOUBLE PRIME 216E 2103 DEGREE CELSIUS 216F FFE5 FULLWIDTH YEN SIGN 2170 FF04 FULLWIDTH DOLLAR SIGN 2171 00A2 CENT SIGN 2172 00A3 POUND SIGN 2173 FF05 FULLWIDTH PERCENT SIGN 2174 FF03 FULLWIDTH NUMBER SIGN 2175 FF06 FULLWIDTH AMPERSAND 2176 FF0A FULLWIDTH ASTERISK 2177 FF20 FULLWIDTH COMMERCIAL AT 2178 00A7 SECTION SIGN 2179 2606 WHITE STAR 217A 2605 BLACK STAR 217B 25CB WHITE CIRCLE 217C 25CF BLACK CIRCLE 217D 25CE BULLSEYE 217E 25C7 WHITE DIAMOND 2221 25C6 BLACK DIAMOND 2222 25A1 WHITE SQUARE 2223 25A0 BLACK SQUARE 2224 25B3 WHITE UP-POINTING TRIANGLE 2225 25B2 BLACK UP-POINTING TRIANGLE 2226 25BD WHITE DOWN-POINTING TRIANGLE 2227 25BC BLACK DOWN-POINTING TRIANGLE 2228 203B REFERENCE MARK 2229 3012 POSTAL MARK 222A 2192 RIGHTWARDS ARROW 222B 2190 LEFTWARDS ARROW 222C 2191 UPWARDS ARROW 222D 2193 DOWNWARDS ARROW 222E 3013 GETA MARK 223A 2208 ELEMENT OF 223B 220B CONTAINS AS MEMBER 223C 2286 SUBSET OF OR EQUAL TO 223D 2287 SUPERSET OF OR EQUAL TO 223E 2282 SUBSET OF 223F 2283 SUPERSET OF 2240 222A UNION 2241 2229 INTERSECTION 224A 2227 LOGICAL AND 224B 2228 LOGICAL OR 224C 00AC NOT SIGN 224D 21D2 RIGHTWARDS DOUBLE ARROW 224E 21D4 LEFT RIGHT DOUBLE ARROW 224F 2200 FOR ALL 2250 2203 THERE EXISTS 225C 2220 ANGLE 225D 22A5 UP TACK 225E 2312 ARC 225F 2202 PARTIAL DIFFERENTIAL 2260 2207 NABLA 2261 2261 IDENTICAL TO 2262 2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF 2263 226A MUCH LESS-THAN 2264 226B MUCH GREATER-THAN 2265 221A SQUARE ROOT 2266 223D REVERSED TILDE 2267 221D PROPORTIONAL TO 2268 2235 BECAUSE 2269 222B INTEGRAL 226A 222C DOUBLE INTEGRAL 2272 212B ANGSTROM SIGN 2273 2030 PER MILLE SIGN 2274 266F MUSIC SHARP SIGN 2275 266D MUSIC FLAT SIGN 2276 266A EIGHTH NOTE 2277 2020 DAGGER 2278 2021 DOUBLE DAGGER 2279 00B6 PILCROW SIGN 227E 25EF LARGE CIRCLE 2330 FF10 FULLWIDTH DIGIT ZERO 2331 FF11 FULLWIDTH DIGIT ONE 2332 FF12 FULLWIDTH DIGIT TWO 2333 FF13 FULLWIDTH DIGIT THREE 2334 FF14 FULLWIDTH DIGIT FOUR 2335 FF15 FULLWIDTH DIGIT FIVE 2336 FF16 FULLWIDTH DIGIT SIX 2337 FF17 FULLWIDTH DIGIT SEVEN 2338 FF18 FULLWIDTH DIGIT EIGHT 2339 FF19 FULLWIDTH DIGIT NINE 2341 FF21 FULLWIDTH LATIN CAPITAL LETTER A 2342 FF22 FULLWIDTH LATIN CAPITAL LETTER B 2343 FF23 FULLWIDTH LATIN CAPITAL LETTER C 2344 FF24 FULLWIDTH LATIN CAPITAL LETTER D 2345 FF25 FULLWIDTH LATIN CAPITAL LETTER E 2346 FF26 FULLWIDTH LATIN CAPITAL LETTER F 2347 FF27 FULLWIDTH LATIN CAPITAL LETTER G 2348 FF28 FULLWIDTH LATIN CAPITAL LETTER H 2349 FF29 FULLWIDTH LATIN CAPITAL LETTER I 234A FF2A FULLWIDTH LATIN CAPITAL LETTER J 234B FF2B FULLWIDTH LATIN CAPITAL LETTER K 234C FF2C FULLWIDTH LATIN CAPITAL LETTER L 234D FF2D FULLWIDTH LATIN CAPITAL LETTER M 234E FF2E FULLWIDTH LATIN CAPITAL LETTER N 234F FF2F FULLWIDTH LATIN CAPITAL LETTER O 2350 FF30 FULLWIDTH LATIN CAPITAL LETTER P 2351 FF31 FULLWIDTH LATIN CAPITAL LETTER Q 2352 FF32 FULLWIDTH LATIN CAPITAL LETTER R 2353 FF33 FULLWIDTH LATIN CAPITAL LETTER S 2354 FF34 FULLWIDTH LATIN CAPITAL LETTER T 2355 FF35 FULLWIDTH LATIN CAPITAL LETTER U 2356 FF36 FULLWIDTH LATIN CAPITAL LETTER V 2357 FF37 FULLWIDTH LATIN CAPITAL LETTER W 2358 FF38 FULLWIDTH LATIN CAPITAL LETTER X 2359 FF39 FULLWIDTH LATIN CAPITAL LETTER Y 235A FF3A FULLWIDTH LATIN CAPITAL LETTER Z 2361 FF41 FULLWIDTH LATIN SMALL LETTER A 2362 FF42 FULLWIDTH LATIN SMALL LETTER B 2363 FF43 FULLWIDTH LATIN SMALL LETTER C 2364 FF44 FULLWIDTH LATIN SMALL LETTER D 2365 FF45 FULLWIDTH LATIN SMALL LETTER E 2366 FF46 FULLWIDTH LATIN SMALL LETTER F 2367 FF47 FULLWIDTH LATIN SMALL LETTER G 2368 FF48 FULLWIDTH LATIN SMALL LETTER H 2369 FF49 FULLWIDTH LATIN SMALL LETTER I 236A FF4A FULLWIDTH LATIN SMALL LETTER J 236B FF4B FULLWIDTH LATIN SMALL LETTER K 236C FF4C FULLWIDTH LATIN SMALL LETTER L 236D FF4D FULLWIDTH LATIN SMALL LETTER M 236E FF4E FULLWIDTH LATIN SMALL LETTER N 236F FF4F FULLWIDTH LATIN SMALL LETTER O 2370 FF50 FULLWIDTH LATIN SMALL LETTER P 2371 FF51 FULLWIDTH LATIN SMALL LETTER Q 2372 FF52 FULLWIDTH LATIN SMALL LETTER R 2373 FF53 FULLWIDTH LATIN SMALL LETTER S 2374 FF54 FULLWIDTH LATIN SMALL LETTER T 2375 FF55 FULLWIDTH LATIN SMALL LETTER U 2376 FF56 FULLWIDTH LATIN SMALL LETTER V 2377 FF57 FULLWIDTH LATIN SMALL LETTER W 2378 FF58 FULLWIDTH LATIN SMALL LETTER X 2379 FF59 FULLWIDTH LATIN SMALL LETTER Y 237A FF5A FULLWIDTH LATIN SMALL LETTER Z 2421 3041 HIRAGANA LETTER SMALL A 2422 3042 HIRAGANA LETTER A 2423 3043 HIRAGANA LETTER SMALL I 2424 3044 HIRAGANA LETTER I 2425 3045 HIRAGANA LETTER SMALL U 2426 3046 HIRAGANA LETTER U 2427 3047 HIRAGANA LETTER SMALL E 2428 3048 HIRAGANA LETTER E 2429 3049 HIRAGANA LETTER SMALL O 242A 304A HIRAGANA LETTER O 242B 304B HIRAGANA LETTER KA 242C 304C HIRAGANA LETTER GA 242D 304D HIRAGANA LETTER KI 242E 304E HIRAGANA LETTER GI 242F 304F HIRAGANA LETTER KU 2430 3050 HIRAGANA LETTER GU 2431 3051 HIRAGANA LETTER KE 2432 3052 HIRAGANA LETTER GE 2433 3053 HIRAGANA LETTER KO 2434 3054 HIRAGANA LETTER GO 2435 3055 HIRAGANA LETTER SA 2436 3056 HIRAGANA LETTER ZA 2437 3057 HIRAGANA LETTER SI 2438 3058 HIRAGANA LETTER ZI 2439 3059 HIRAGANA LETTER SU 243A 305A HIRAGANA LETTER ZU 243B 305B HIRAGANA LETTER SE 243C 305C HIRAGANA LETTER ZE 243D 305D HIRAGANA LETTER SO 243E 305E HIRAGANA LETTER ZO 243F 305F HIRAGANA LETTER TA 2440 3060 HIRAGANA LETTER DA 2441 3061 HIRAGANA LETTER TI 2442 3062 HIRAGANA LETTER DI 2443 3063 HIRAGANA LETTER SMALL TU 2444 3064 HIRAGANA LETTER TU 2445 3065 HIRAGANA LETTER DU 2446 3066 HIRAGANA LETTER TE 2447 3067 HIRAGANA LETTER DE 2448 3068 HIRAGANA LETTER TO 2449 3069 HIRAGANA LETTER DO 244A 306A HIRAGANA LETTER NA 244B 306B HIRAGANA LETTER NI 244C 306C HIRAGANA LETTER NU 244D 306D HIRAGANA LETTER NE 244E 306E HIRAGANA LETTER NO 244F 306F HIRAGANA LETTER HA 2450 3070 HIRAGANA LETTER BA 2451 3071 HIRAGANA LETTER PA 2452 3072 HIRAGANA LETTER HI 2453 3073 HIRAGANA LETTER BI 2454 3074 HIRAGANA LETTER PI 2455 3075 HIRAGANA LETTER HU 2456 3076 HIRAGANA LETTER BU 2457 3077 HIRAGANA LETTER PU 2458 3078 HIRAGANA LETTER HE 2459 3079 HIRAGANA LETTER BE 245A 307A HIRAGANA LETTER PE 245B 307B HIRAGANA LETTER HO 245C 307C HIRAGANA LETTER BO 245D 307D HIRAGANA LETTER PO 245E 307E HIRAGANA LETTER MA 245F 307F HIRAGANA LETTER MI 2460 3080 HIRAGANA LETTER MU 2461 3081 HIRAGANA LETTER ME 2462 3082 HIRAGANA LETTER MO 2463 3083 HIRAGANA LETTER SMALL YA 2464 3084 HIRAGANA LETTER YA 2465 3085 HIRAGANA LETTER SMALL YU 2466 3086 HIRAGANA LETTER YU 2467 3087 HIRAGANA LETTER SMALL YO 2468 3088 HIRAGANA LETTER YO 2469 3089 HIRAGANA LETTER RA 246A 308A HIRAGANA LETTER RI 246B 308B HIRAGANA LETTER RU 246C 308C HIRAGANA LETTER RE 246D 308D HIRAGANA LETTER RO 246E 308E HIRAGANA LETTER SMALL WA 246F 308F HIRAGANA LETTER WA 2470 3090 HIRAGANA LETTER WI 2471 3091 HIRAGANA LETTER WE 2472 3092 HIRAGANA LETTER WO 2473 3093 HIRAGANA LETTER N 2521 30A1 KATAKANA LETTER SMALL A 2522 30A2 KATAKANA LETTER A 2523 30A3 KATAKANA LETTER SMALL I 2524 30A4 KATAKANA LETTER I 2525 30A5 KATAKANA LETTER SMALL U 2526 30A6 KATAKANA LETTER U 2527 30A7 KATAKANA LETTER SMALL E 2528 30A8 KATAKANA LETTER E 2529 30A9 KATAKANA LETTER SMALL O 252A 30AA KATAKANA LETTER O 252B 30AB KATAKANA LETTER KA 252C 30AC KATAKANA LETTER GA 252D 30AD KATAKANA LETTER KI 252E 30AE KATAKANA LETTER GI 252F 30AF KATAKANA LETTER KU 2530 30B0 KATAKANA LETTER GU 2531 30B1 KATAKANA LETTER KE 2532 30B2 KATAKANA LETTER GE 2533 30B3 KATAKANA LETTER KO 2534 30B4 KATAKANA LETTER GO 2535 30B5 KATAKANA LETTER SA 2536 30B6 KATAKANA LETTER ZA 2537 30B7 KATAKANA LETTER SI 2538 30B8 KATAKANA LETTER ZI 2539 30B9 KATAKANA LETTER SU 253A 30BA KATAKANA LETTER ZU 253B 30BB KATAKANA LETTER SE 253C 30BC KATAKANA LETTER ZE 253D 30BD KATAKANA LETTER SO 253E 30BE KATAKANA LETTER ZO 253F 30BF KATAKANA LETTER TA 2540 30C0 KATAKANA LETTER DA 2541 30C1 KATAKANA LETTER TI 2542 30C2 KATAKANA LETTER DI 2543 30C3 KATAKANA LETTER SMALL TU 2544 30C4 KATAKANA LETTER TU 2545 30C5 KATAKANA LETTER DU 2546 30C6 KATAKANA LETTER TE 2547 30C7 KATAKANA LETTER DE 2548 30C8 KATAKANA LETTER TO 2549 30C9 KATAKANA LETTER DO 254A 30CA KATAKANA LETTER NA 254B 30CB KATAKANA LETTER NI 254C 30CC KATAKANA LETTER NU 254D 30CD KATAKANA LETTER NE 254E 30CE KATAKANA LETTER NO 254F 30CF KATAKANA LETTER HA 2550 30D0 KATAKANA LETTER BA 2551 30D1 KATAKANA LETTER PA 2552 30D2 KATAKANA LETTER HI 2553 30D3 KATAKANA LETTER BI 2554 30D4 KATAKANA LETTER PI 2555 30D5 KATAKANA LETTER HU 2556 30D6 KATAKANA LETTER BU 2557 30D7 KATAKANA LETTER PU 2558 30D8 KATAKANA LETTER HE 2559 30D9 KATAKANA LETTER BE 255A 30DA KATAKANA LETTER PE 255B 30DB KATAKANA LETTER HO 255C 30DC KATAKANA LETTER BO 255D 30DD KATAKANA LETTER PO 255E 30DE KATAKANA LETTER MA 255F 30DF KATAKANA LETTER MI 2560 30E0 KATAKANA LETTER MU 2561 30E1 KATAKANA LETTER ME 2562 30E2 KATAKANA LETTER MO 2563 30E3 KATAKANA LETTER SMALL YA 2564 30E4 KATAKANA LETTER YA 2565 30E5 KATAKANA LETTER SMALL YU 2566 30E6 KATAKANA LETTER YU 2567 30E7 KATAKANA LETTER SMALL YO 2568 30E8 KATAKANA LETTER YO 2569 30E9 KATAKANA LETTER RA 256A 30EA KATAKANA LETTER RI 256B 30EB KATAKANA LETTER RU 256C 30EC KATAKANA LETTER RE 256D 30ED KATAKANA LETTER RO 256E 30EE KATAKANA LETTER SMALL WA 256F 30EF KATAKANA LETTER WA 2570 30F0 KATAKANA LETTER WI 2571 30F1 KATAKANA LETTER WE 2572 30F2 KATAKANA LETTER WO 2573 30F3 KATAKANA LETTER N 2574 30F4 KATAKANA LETTER VU 2575 30F5 KATAKANA LETTER SMALL KA 2576 30F6 KATAKANA LETTER SMALL KE 2621 0391 GREEK CAPITAL LETTER ALPHA 2622 0392 GREEK CAPITAL LETTER BETA 2623 0393 GREEK CAPITAL LETTER GAMMA 2624 0394 GREEK CAPITAL LETTER DELTA 2625 0395 GREEK CAPITAL LETTER EPSILON 2626 0396 GREEK CAPITAL LETTER ZETA 2627 0397 GREEK CAPITAL LETTER ETA 2628 0398 GREEK CAPITAL LETTER THETA 2629 0399 GREEK CAPITAL LETTER IOTA 262A 039A GREEK CAPITAL LETTER KAPPA 262B 039B GREEK CAPITAL LETTER LAMDA 262C 039C GREEK CAPITAL LETTER MU 262D 039D GREEK CAPITAL LETTER NU 262E 039E GREEK CAPITAL LETTER XI 262F 039F GREEK CAPITAL LETTER OMICRON 2630 03A0 GREEK CAPITAL LETTER PI 2631 03A1 GREEK CAPITAL LETTER RHO 2632 03A3 GREEK CAPITAL LETTER SIGMA 2633 03A4 GREEK CAPITAL LETTER TAU 2634 03A5 GREEK CAPITAL LETTER UPSILON 2635 03A6 GREEK CAPITAL LETTER PHI 2636 03A7 GREEK CAPITAL LETTER CHI 2637 03A8 GREEK CAPITAL LETTER PSI 2638 03A9 GREEK CAPITAL LETTER OMEGA 2641 03B1 GREEK SMALL LETTER ALPHA 2642 03B2 GREEK SMALL LETTER BETA 2643 03B3 GREEK SMALL LETTER GAMMA 2644 03B4 GREEK SMALL LETTER DELTA 2645 03B5 GREEK SMALL LETTER EPSILON 2646 03B6 GREEK SMALL LETTER ZETA 2647 03B7 GREEK SMALL LETTER ETA 2648 03B8 GREEK SMALL LETTER THETA 2649 03B9 GREEK SMALL LETTER IOTA 264A 03BA GREEK SMALL LETTER KAPPA 264B 03BB GREEK SMALL LETTER LAMDA 264C 03BC GREEK SMALL LETTER MU 264D 03BD GREEK SMALL LETTER NU 264E 03BE GREEK SMALL LETTER XI 264F 03BF GREEK SMALL LETTER OMICRON 2650 03C0 GREEK SMALL LETTER PI 2651 03C1 GREEK SMALL LETTER RHO 2652 03C3 GREEK SMALL LETTER SIGMA 2653 03C4 GREEK SMALL LETTER TAU 2654 03C5 GREEK SMALL LETTER UPSILON 2655 03C6 GREEK SMALL LETTER PHI 2656 03C7 GREEK SMALL LETTER CHI 2657 03C8 GREEK SMALL LETTER PSI 2658 03C9 GREEK SMALL LETTER OMEGA 2721 0410 CYRILLIC CAPITAL LETTER A 2722 0411 CYRILLIC CAPITAL LETTER BE 2723 0412 CYRILLIC CAPITAL LETTER VE 2724 0413 CYRILLIC CAPITAL LETTER GHE 2725 0414 CYRILLIC CAPITAL LETTER DE 2726 0415 CYRILLIC CAPITAL LETTER IE 2727 0401 CYRILLIC CAPITAL LETTER IO 2728 0416 CYRILLIC CAPITAL LETTER ZHE 2729 0417 CYRILLIC CAPITAL LETTER ZE 272A 0418 CYRILLIC CAPITAL LETTER I 272B 0419 CYRILLIC CAPITAL LETTER SHORT I 272C 041A CYRILLIC CAPITAL LETTER KA 272D 041B CYRILLIC CAPITAL LETTER EL 272E 041C CYRILLIC CAPITAL LETTER EM 272F 041D CYRILLIC CAPITAL LETTER EN 2730 041E CYRILLIC CAPITAL LETTER O 2731 041F CYRILLIC CAPITAL LETTER PE 2732 0420 CYRILLIC CAPITAL LETTER ER 2733 0421 CYRILLIC CAPITAL LETTER ES 2734 0422 CYRILLIC CAPITAL LETTER TE 2735 0423 CYRILLIC CAPITAL LETTER U 2736 0424 CYRILLIC CAPITAL LETTER EF 2737 0425 CYRILLIC CAPITAL LETTER HA 2738 0426 CYRILLIC CAPITAL LETTER TSE 2739 0427 CYRILLIC CAPITAL LETTER CHE 273A 0428 CYRILLIC CAPITAL LETTER SHA 273B 0429 CYRILLIC CAPITAL LETTER SHCHA 273C 042A CYRILLIC CAPITAL LETTER HARD SIGN 273D 042B CYRILLIC CAPITAL LETTER YERU 273E 042C CYRILLIC CAPITAL LETTER SOFT SIGN 273F 042D CYRILLIC CAPITAL LETTER E 2740 042E CYRILLIC CAPITAL LETTER YU 2741 042F CYRILLIC CAPITAL LETTER YA 2751 0430 CYRILLIC SMALL LETTER A 2752 0431 CYRILLIC SMALL LETTER BE 2753 0432 CYRILLIC SMALL LETTER VE 2754 0433 CYRILLIC SMALL LETTER GHE 2755 0434 CYRILLIC SMALL LETTER DE 2756 0435 CYRILLIC SMALL LETTER IE 2757 0451 CYRILLIC SMALL LETTER IO 2758 0436 CYRILLIC SMALL LETTER ZHE 2759 0437 CYRILLIC SMALL LETTER ZE 275A 0438 CYRILLIC SMALL LETTER I 275B 0439 CYRILLIC SMALL LETTER SHORT I 275C 043A CYRILLIC SMALL LETTER KA 275D 043B CYRILLIC SMALL LETTER EL 275E 043C CYRILLIC SMALL LETTER EM 275F 043D CYRILLIC SMALL LETTER EN 2760 043E CYRILLIC SMALL LETTER O 2761 043F CYRILLIC SMALL LETTER PE 2762 0440 CYRILLIC SMALL LETTER ER 2763 0441 CYRILLIC SMALL LETTER ES 2764 0442 CYRILLIC SMALL LETTER TE 2765 0443 CYRILLIC SMALL LETTER U 2766 0444 CYRILLIC SMALL LETTER EF 2767 0445 CYRILLIC SMALL LETTER HA 2768 0446 CYRILLIC SMALL LETTER TSE 2769 0447 CYRILLIC SMALL LETTER CHE 276A 0448 CYRILLIC SMALL LETTER SHA 276B 0449 CYRILLIC SMALL LETTER SHCHA 276C 044A CYRILLIC SMALL LETTER HARD SIGN 276D 044B CYRILLIC SMALL LETTER YERU 276E 044C CYRILLIC SMALL LETTER SOFT SIGN 276F 044D CYRILLIC SMALL LETTER E 2770 044E CYRILLIC SMALL LETTER YU 2771 044F CYRILLIC SMALL LETTER YA 2821 2500 BOX DRAWINGS LIGHT HORIZONTAL 2822 2502 BOX DRAWINGS LIGHT VERTICAL 2823 250C BOX DRAWINGS LIGHT DOWN AND RIGHT 2824 2510 BOX DRAWINGS LIGHT DOWN AND LEFT 2825 2518 BOX DRAWINGS LIGHT UP AND LEFT 2826 2514 BOX DRAWINGS LIGHT UP AND RIGHT 2827 251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT 2828 252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 2829 2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT 282A 2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL 282B 253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 282C 2501 BOX DRAWINGS HEAVY HORIZONTAL 282D 2503 BOX DRAWINGS HEAVY VERTICAL 282E 250F BOX DRAWINGS HEAVY DOWN AND RIGHT 282F 2513 BOX DRAWINGS HEAVY DOWN AND LEFT 2830 251B BOX DRAWINGS HEAVY UP AND LEFT 2831 2517 BOX DRAWINGS HEAVY UP AND RIGHT 2832 2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT 2833 2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL 2834 252B BOX DRAWINGS HEAVY VERTICAL AND LEFT 2835 253B BOX DRAWINGS HEAVY UP AND HORIZONTAL 2836 254B BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL 2837 2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT 2838 252F BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY 2839 2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT 283A 2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY 283B 253F BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY 283C 251D BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY 283D 2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT 283E 2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY 283F 2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT 2840 2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT 3021 4E9C 3022 5516 3023 5A03 3024 963F 3025 54C0 3026 611B 3027 6328 3028 59F6 3029 9022 302A 8475 302B 831C 302C 7A50 302D 60AA 302E 63E1 302F 6E25 3030 65ED 3031 8466 3032 82A6 3033 9BF5 3034 6893 3035 5727 3036 65A1 3037 6271 3038 5B9B 3039 59D0 303A 867B 303B 98F4 303C 7D62 303D 7DBE 303E 9B8E 303F 6216 3040 7C9F 3041 88B7 3042 5B89 3043 5EB5 3044 6309 3045 6697 3046 6848 3047 95C7 3048 978D 3049 674F 304A 4EE5 304B 4F0A 304C 4F4D 304D 4F9D 304E 5049 304F 56F2 3050 5937 3051 59D4 3052 5A01 3053 5C09 3054 60DF 3055 610F 3056 6170 3057 6613 3058 6905 3059 70BA 305A 754F 305B 7570 305C 79FB 305D 7DAD 305E 7DEF 305F 80C3 3060 840E 3061 8863 3062 8B02 3063 9055 3064 907A 3065 533B 3066 4E95 3067 4EA5 3068 57DF 3069 80B2 306A 90C1 306B 78EF 306C 4E00 306D 58F1 306E 6EA2 306F 9038 3070 7A32 3071 8328 3072 828B 3073 9C2F 3074 5141 3075 5370 3076 54BD 3077 54E1 3078 56E0 3079 59FB 307A 5F15 307B 98F2 307C 6DEB 307D 80E4 307E 852D 3121 9662 3122 9670 3123 96A0 3124 97FB 3125 540B 3126 53F3 3127 5B87 3128 70CF 3129 7FBD 312A 8FC2 312B 96E8 312C 536F 312D 9D5C 312E 7ABA 312F 4E11 3130 7893 3131 81FC 3132 6E26 3133 5618 3134 5504 3135 6B1D 3136 851A 3137 9C3B 3138 59E5 3139 53A9 313A 6D66 313B 74DC 313C 958F 313D 5642 313E 4E91 313F 904B 3140 96F2 3141 834F 3142 990C 3143 53E1 3144 55B6 3145 5B30 3146 5F71 3147 6620 3148 66F3 3149 6804 314A 6C38 314B 6CF3 314C 6D29 314D 745B 314E 76C8 314F 7A4E 3150 9834 3151 82F1 3152 885B 3153 8A60 3154 92ED 3155 6DB2 3156 75AB 3157 76CA 3158 99C5 3159 60A6 315A 8B01 315B 8D8A 315C 95B2 315D 698E 315E 53AD 315F 5186 3160 5712 3161 5830 3162 5944 3163 5BB4 3164 5EF6 3165 6028 3166 63A9 3167 63F4 3168 6CBF 3169 6F14 316A 708E 316B 7114 316C 7159 316D 71D5 316E 733F 316F 7E01 3170 8276 3171 82D1 3172 8597 3173 9060 3174 925B 3175 9D1B 3176 5869 3177 65BC 3178 6C5A 3179 7525 317A 51F9 317B 592E 317C 5965 317D 5F80 317E 5FDC 3221 62BC 3222 65FA 3223 6A2A 3224 6B27 3225 6BB4 3226 738B 3227 7FC1 3228 8956 3229 9D2C 322A 9D0E 322B 9EC4 322C 5CA1 322D 6C96 322E 837B 322F 5104 3230 5C4B 3231 61B6 3232 81C6 3233 6876 3234 7261 3235 4E59 3236 4FFA 3237 5378 3238 6069 3239 6E29 323A 7A4F 323B 97F3 323C 4E0B 323D 5316 323E 4EEE 323F 4F55 3240 4F3D 3241 4FA1 3242 4F73 3243 52A0 3244 53EF 3245 5609 3246 590F 3247 5AC1 3248 5BB6 3249 5BE1 324A 79D1 324B 6687 324C 679C 324D 67B6 324E 6B4C 324F 6CB3 3250 706B 3251 73C2 3252 798D 3253 79BE 3254 7A3C 3255 7B87 3256 82B1 3257 82DB 3258 8304 3259 8377 325A 83EF 325B 83D3 325C 8766 325D 8AB2 325E 5629 325F 8CA8 3260 8FE6 3261 904E 3262 971E 3263 868A 3264 4FC4 3265 5CE8 3266 6211 3267 7259 3268 753B 3269 81E5 326A 82BD 326B 86FE 326C 8CC0 326D 96C5 326E 9913 326F 99D5 3270 4ECB 3271 4F1A 3272 89E3 3273 56DE 3274 584A 3275 58CA 3276 5EFB 3277 5FEB 3278 602A 3279 6094 327A 6062 327B 61D0 327C 6212 327D 62D0 327E 6539 3321 9B41 3322 6666 3323 68B0 3324 6D77 3325 7070 3326 754C 3327 7686 3328 7D75 3329 82A5 332A 87F9 332B 958B 332C 968E 332D 8C9D 332E 51F1 332F 52BE 3330 5916 3331 54B3 3332 5BB3 3333 5D16 3334 6168 3335 6982 3336 6DAF 3337 788D 3338 84CB 3339 8857 333A 8A72 333B 93A7 333C 9AB8 333D 6D6C 333E 99A8 333F 86D9 3340 57A3 3341 67FF 3342 86CE 3343 920E 3344 5283 3345 5687 3346 5404 3347 5ED3 3348 62E1 3349 64B9 334A 683C 334B 6838 334C 6BBB 334D 7372 334E 78BA 334F 7A6B 3350 899A 3351 89D2 3352 8D6B 3353 8F03 3354 90ED 3355 95A3 3356 9694 3357 9769 3358 5B66 3359 5CB3 335A 697D 335B 984D 335C 984E 335D 639B 335E 7B20 335F 6A2B 3360 6A7F 3361 68B6 3362 9C0D 3363 6F5F 3364 5272 3365 559D 3366 6070 3367 62EC 3368 6D3B 3369 6E07 336A 6ED1 336B 845B 336C 8910 336D 8F44 336E 4E14 336F 9C39 3370 53F6 3371 691B 3372 6A3A 3373 9784 3374 682A 3375 515C 3376 7AC3 3377 84B2 3378 91DC 3379 938C 337A 565B 337B 9D28 337C 6822 337D 8305 337E 8431 3421 7CA5 3422 5208 3423 82C5 3424 74E6 3425 4E7E 3426 4F83 3427 51A0 3428 5BD2 3429 520A 342A 52D8 342B 52E7 342C 5DFB 342D 559A 342E 582A 342F 59E6 3430 5B8C 3431 5B98 3432 5BDB 3433 5E72 3434 5E79 3435 60A3 3436 611F 3437 6163 3438 61BE 3439 63DB 343A 6562 343B 67D1 343C 6853 343D 68FA 343E 6B3E 343F 6B53 3440 6C57 3441 6F22 3442 6F97 3443 6F45 3444 74B0 3445 7518 3446 76E3 3447 770B 3448 7AFF 3449 7BA1 344A 7C21 344B 7DE9 344C 7F36 344D 7FF0 344E 809D 344F 8266 3450 839E 3451 89B3 3452 8ACC 3453 8CAB 3454 9084 3455 9451 3456 9593 3457 9591 3458 95A2 3459 9665 345A 97D3 345B 9928 345C 8218 345D 4E38 345E 542B 345F 5CB8 3460 5DCC 3461 73A9 3462 764C 3463 773C 3464 5CA9 3465 7FEB 3466 8D0B 3467 96C1 3468 9811 3469 9854 346A 9858 346B 4F01 346C 4F0E 346D 5371 346E 559C 346F 5668 3470 57FA 3471 5947 3472 5B09 3473 5BC4 3474 5C90 3475 5E0C 3476 5E7E 3477 5FCC 3478 63EE 3479 673A 347A 65D7 347B 65E2 347C 671F 347D 68CB 347E 68C4 3521 6A5F 3522 5E30 3523 6BC5 3524 6C17 3525 6C7D 3526 757F 3527 7948 3528 5B63 3529 7A00 352A 7D00 352B 5FBD 352C 898F 352D 8A18 352E 8CB4 352F 8D77 3530 8ECC 3531 8F1D 3532 98E2 3533 9A0E 3534 9B3C 3535 4E80 3536 507D 3537 5100 3538 5993 3539 5B9C 353A 622F 353B 6280 353C 64EC 353D 6B3A 353E 72A0 353F 7591 3540 7947 3541 7FA9 3542 87FB 3543 8ABC 3544 8B70 3545 63AC 3546 83CA 3547 97A0 3548 5409 3549 5403 354A 55AB 354B 6854 354C 6A58 354D 8A70 354E 7827 354F 6775 3550 9ECD 3551 5374 3552 5BA2 3553 811A 3554 8650 3555 9006 3556 4E18 3557 4E45 3558 4EC7 3559 4F11 355A 53CA 355B 5438 355C 5BAE 355D 5F13 355E 6025 355F 6551 3560 673D 3561 6C42 3562 6C72 3563 6CE3 3564 7078 3565 7403 3566 7A76 3567 7AAE 3568 7B08 3569 7D1A 356A 7CFE 356B 7D66 356C 65E7 356D 725B 356E 53BB 356F 5C45 3570 5DE8 3571 62D2 3572 62E0 3573 6319 3574 6E20 3575 865A 3576 8A31 3577 8DDD 3578 92F8 3579 6F01 357A 79A6 357B 9B5A 357C 4EA8 357D 4EAB 357E 4EAC 3621 4F9B 3622 4FA0 3623 50D1 3624 5147 3625 7AF6 3626 5171 3627 51F6 3628 5354 3629 5321 362A 537F 362B 53EB 362C 55AC 362D 5883 362E 5CE1 362F 5F37 3630 5F4A 3631 602F 3632 6050 3633 606D 3634 631F 3635 6559 3636 6A4B 3637 6CC1 3638 72C2 3639 72ED 363A 77EF 363B 80F8 363C 8105 363D 8208 363E 854E 363F 90F7 3640 93E1 3641 97FF 3642 9957 3643 9A5A 3644 4EF0 3645 51DD 3646 5C2D 3647 6681 3648 696D 3649 5C40 364A 66F2 364B 6975 364C 7389 364D 6850 364E 7C81 364F 50C5 3650 52E4 3651 5747 3652 5DFE 3653 9326 3654 65A4 3655 6B23 3656 6B3D 3657 7434 3658 7981 3659 79BD 365A 7B4B 365B 7DCA 365C 82B9 365D 83CC 365E 887F 365F 895F 3660 8B39 3661 8FD1 3662 91D1 3663 541F 3664 9280 3665 4E5D 3666 5036 3667 53E5 3668 533A 3669 72D7 366A 7396 366B 77E9 366C 82E6 366D 8EAF 366E 99C6 366F 99C8 3670 99D2 3671 5177 3672 611A 3673 865E 3674 55B0 3675 7A7A 3676 5076 3677 5BD3 3678 9047 3679 9685 367A 4E32 367B 6ADB 367C 91E7 367D 5C51 367E 5C48 3721 6398 3722 7A9F 3723 6C93 3724 9774 3725 8F61 3726 7AAA 3727 718A 3728 9688 3729 7C82 372A 6817 372B 7E70 372C 6851 372D 936C 372E 52F2 372F 541B 3730 85AB 3731 8A13 3732 7FA4 3733 8ECD 3734 90E1 3735 5366 3736 8888 3737 7941 3738 4FC2 3739 50BE 373A 5211 373B 5144 373C 5553 373D 572D 373E 73EA 373F 578B 3740 5951 3741 5F62 3742 5F84 3743 6075 3744 6176 3745 6167 3746 61A9 3747 63B2 3748 643A 3749 656C 374A 666F 374B 6842 374C 6E13 374D 7566 374E 7A3D 374F 7CFB 3750 7D4C 3751 7D99 3752 7E4B 3753 7F6B 3754 830E 3755 834A 3756 86CD 3757 8A08 3758 8A63 3759 8B66 375A 8EFD 375B 981A 375C 9D8F 375D 82B8 375E 8FCE 375F 9BE8 3760 5287 3761 621F 3762 6483 3763 6FC0 3764 9699 3765 6841 3766 5091 3767 6B20 3768 6C7A 3769 6F54 376A 7A74 376B 7D50 376C 8840 376D 8A23 376E 6708 376F 4EF6 3770 5039 3771 5026 3772 5065 3773 517C 3774 5238 3775 5263 3776 55A7 3777 570F 3778 5805 3779 5ACC 377A 5EFA 377B 61B2 377C 61F8 377D 62F3 377E 6372 3821 691C 3822 6A29 3823 727D 3824 72AC 3825 732E 3826 7814 3827 786F 3828 7D79 3829 770C 382A 80A9 382B 898B 382C 8B19 382D 8CE2 382E 8ED2 382F 9063 3830 9375 3831 967A 3832 9855 3833 9A13 3834 9E78 3835 5143 3836 539F 3837 53B3 3838 5E7B 3839 5F26 383A 6E1B 383B 6E90 383C 7384 383D 73FE 383E 7D43 383F 8237 3840 8A00 3841 8AFA 3842 9650 3843 4E4E 3844 500B 3845 53E4 3846 547C 3847 56FA 3848 59D1 3849 5B64 384A 5DF1 384B 5EAB 384C 5F27 384D 6238 384E 6545 384F 67AF 3850 6E56 3851 72D0 3852 7CCA 3853 88B4 3854 80A1 3855 80E1 3856 83F0 3857 864E 3858 8A87 3859 8DE8 385A 9237 385B 96C7 385C 9867 385D 9F13 385E 4E94 385F 4E92 3860 4F0D 3861 5348 3862 5449 3863 543E 3864 5A2F 3865 5F8C 3866 5FA1 3867 609F 3868 68A7 3869 6A8E 386A 745A 386B 7881 386C 8A9E 386D 8AA4 386E 8B77 386F 9190 3870 4E5E 3871 9BC9 3872 4EA4 3873 4F7C 3874 4FAF 3875 5019 3876 5016 3877 5149 3878 516C 3879 529F 387A 52B9 387B 52FE 387C 539A 387D 53E3 387E 5411 3921 540E 3922 5589 3923 5751 3924 57A2 3925 597D 3926 5B54 3927 5B5D 3928 5B8F 3929 5DE5 392A 5DE7 392B 5DF7 392C 5E78 392D 5E83 392E 5E9A 392F 5EB7 3930 5F18 3931 6052 3932 614C 3933 6297 3934 62D8 3935 63A7 3936 653B 3937 6602 3938 6643 3939 66F4 393A 676D 393B 6821 393C 6897 393D 69CB 393E 6C5F 393F 6D2A 3940 6D69 3941 6E2F 3942 6E9D 3943 7532 3944 7687 3945 786C 3946 7A3F 3947 7CE0 3948 7D05 3949 7D18 394A 7D5E 394B 7DB1 394C 8015 394D 8003 394E 80AF 394F 80B1 3950 8154 3951 818F 3952 822A 3953 8352 3954 884C 3955 8861 3956 8B1B 3957 8CA2 3958 8CFC 3959 90CA 395A 9175 395B 9271 395C 783F 395D 92FC 395E 95A4 395F 964D 3960 9805 3961 9999 3962 9AD8 3963 9D3B 3964 525B 3965 52AB 3966 53F7 3967 5408 3968 58D5 3969 62F7 396A 6FE0 396B 8C6A 396C 8F5F 396D 9EB9 396E 514B 396F 523B 3970 544A 3971 56FD 3972 7A40 3973 9177 3974 9D60 3975 9ED2 3976 7344 3977 6F09 3978 8170 3979 7511 397A 5FFD 397B 60DA 397C 9AA8 397D 72DB 397E 8FBC 3A21 6B64 3A22 9803 3A23 4ECA 3A24 56F0 3A25 5764 3A26 58BE 3A27 5A5A 3A28 6068 3A29 61C7 3A2A 660F 3A2B 6606 3A2C 6839 3A2D 68B1 3A2E 6DF7 3A2F 75D5 3A30 7D3A 3A31 826E 3A32 9B42 3A33 4E9B 3A34 4F50 3A35 53C9 3A36 5506 3A37 5D6F 3A38 5DE6 3A39 5DEE 3A3A 67FB 3A3B 6C99 3A3C 7473 3A3D 7802 3A3E 8A50 3A3F 9396 3A40 88DF 3A41 5750 3A42 5EA7 3A43 632B 3A44 50B5 3A45 50AC 3A46 518D 3A47 6700 3A48 54C9 3A49 585E 3A4A 59BB 3A4B 5BB0 3A4C 5F69 3A4D 624D 3A4E 63A1 3A4F 683D 3A50 6B73 3A51 6E08 3A52 707D 3A53 91C7 3A54 7280 3A55 7815 3A56 7826 3A57 796D 3A58 658E 3A59 7D30 3A5A 83DC 3A5B 88C1 3A5C 8F09 3A5D 969B 3A5E 5264 3A5F 5728 3A60 6750 3A61 7F6A 3A62 8CA1 3A63 51B4 3A64 5742 3A65 962A 3A66 583A 3A67 698A 3A68 80B4 3A69 54B2 3A6A 5D0E 3A6B 57FC 3A6C 7895 3A6D 9DFA 3A6E 4F5C 3A6F 524A 3A70 548B 3A71 643E 3A72 6628 3A73 6714 3A74 67F5 3A75 7A84 3A76 7B56 3A77 7D22 3A78 932F 3A79 685C 3A7A 9BAD 3A7B 7B39 3A7C 5319 3A7D 518A 3A7E 5237 3B21 5BDF 3B22 62F6 3B23 64AE 3B24 64E6 3B25 672D 3B26 6BBA 3B27 85A9 3B28 96D1 3B29 7690 3B2A 9BD6 3B2B 634C 3B2C 9306 3B2D 9BAB 3B2E 76BF 3B2F 6652 3B30 4E09 3B31 5098 3B32 53C2 3B33 5C71 3B34 60E8 3B35 6492 3B36 6563 3B37 685F 3B38 71E6 3B39 73CA 3B3A 7523 3B3B 7B97 3B3C 7E82 3B3D 8695 3B3E 8B83 3B3F 8CDB 3B40 9178 3B41 9910 3B42 65AC 3B43 66AB 3B44 6B8B 3B45 4ED5 3B46 4ED4 3B47 4F3A 3B48 4F7F 3B49 523A 3B4A 53F8 3B4B 53F2 3B4C 55E3 3B4D 56DB 3B4E 58EB 3B4F 59CB 3B50 59C9 3B51 59FF 3B52 5B50 3B53 5C4D 3B54 5E02 3B55 5E2B 3B56 5FD7 3B57 601D 3B58 6307 3B59 652F 3B5A 5B5C 3B5B 65AF 3B5C 65BD 3B5D 65E8 3B5E 679D 3B5F 6B62 3B60 6B7B 3B61 6C0F 3B62 7345 3B63 7949 3B64 79C1 3B65 7CF8 3B66 7D19 3B67 7D2B 3B68 80A2 3B69 8102 3B6A 81F3 3B6B 8996 3B6C 8A5E 3B6D 8A69 3B6E 8A66 3B6F 8A8C 3B70 8AEE 3B71 8CC7 3B72 8CDC 3B73 96CC 3B74 98FC 3B75 6B6F 3B76 4E8B 3B77 4F3C 3B78 4F8D 3B79 5150 3B7A 5B57 3B7B 5BFA 3B7C 6148 3B7D 6301 3B7E 6642 3C21 6B21 3C22 6ECB 3C23 6CBB 3C24 723E 3C25 74BD 3C26 75D4 3C27 78C1 3C28 793A 3C29 800C 3C2A 8033 3C2B 81EA 3C2C 8494 3C2D 8F9E 3C2E 6C50 3C2F 9E7F 3C30 5F0F 3C31 8B58 3C32 9D2B 3C33 7AFA 3C34 8EF8 3C35 5B8D 3C36 96EB 3C37 4E03 3C38 53F1 3C39 57F7 3C3A 5931 3C3B 5AC9 3C3C 5BA4 3C3D 6089 3C3E 6E7F 3C3F 6F06 3C40 75BE 3C41 8CEA 3C42 5B9F 3C43 8500 3C44 7BE0 3C45 5072 3C46 67F4 3C47 829D 3C48 5C61 3C49 854A 3C4A 7E1E 3C4B 820E 3C4C 5199 3C4D 5C04 3C4E 6368 3C4F 8D66 3C50 659C 3C51 716E 3C52 793E 3C53 7D17 3C54 8005 3C55 8B1D 3C56 8ECA 3C57 906E 3C58 86C7 3C59 90AA 3C5A 501F 3C5B 52FA 3C5C 5C3A 3C5D 6753 3C5E 707C 3C5F 7235 3C60 914C 3C61 91C8 3C62 932B 3C63 82E5 3C64 5BC2 3C65 5F31 3C66 60F9 3C67 4E3B 3C68 53D6 3C69 5B88 3C6A 624B 3C6B 6731 3C6C 6B8A 3C6D 72E9 3C6E 73E0 3C6F 7A2E 3C70 816B 3C71 8DA3 3C72 9152 3C73 9996 3C74 5112 3C75 53D7 3C76 546A 3C77 5BFF 3C78 6388 3C79 6A39 3C7A 7DAC 3C7B 9700 3C7C 56DA 3C7D 53CE 3C7E 5468 3D21 5B97 3D22 5C31 3D23 5DDE 3D24 4FEE 3D25 6101 3D26 62FE 3D27 6D32 3D28 79C0 3D29 79CB 3D2A 7D42 3D2B 7E4D 3D2C 7FD2 3D2D 81ED 3D2E 821F 3D2F 8490 3D30 8846 3D31 8972 3D32 8B90 3D33 8E74 3D34 8F2F 3D35 9031 3D36 914B 3D37 916C 3D38 96C6 3D39 919C 3D3A 4EC0 3D3B 4F4F 3D3C 5145 3D3D 5341 3D3E 5F93 3D3F 620E 3D40 67D4 3D41 6C41 3D42 6E0B 3D43 7363 3D44 7E26 3D45 91CD 3D46 9283 3D47 53D4 3D48 5919 3D49 5BBF 3D4A 6DD1 3D4B 795D 3D4C 7E2E 3D4D 7C9B 3D4E 587E 3D4F 719F 3D50 51FA 3D51 8853 3D52 8FF0 3D53 4FCA 3D54 5CFB 3D55 6625 3D56 77AC 3D57 7AE3 3D58 821C 3D59 99FF 3D5A 51C6 3D5B 5FAA 3D5C 65EC 3D5D 696F 3D5E 6B89 3D5F 6DF3 3D60 6E96 3D61 6F64 3D62 76FE 3D63 7D14 3D64 5DE1 3D65 9075 3D66 9187 3D67 9806 3D68 51E6 3D69 521D 3D6A 6240 3D6B 6691 3D6C 66D9 3D6D 6E1A 3D6E 5EB6 3D6F 7DD2 3D70 7F72 3D71 66F8 3D72 85AF 3D73 85F7 3D74 8AF8 3D75 52A9 3D76 53D9 3D77 5973 3D78 5E8F 3D79 5F90 3D7A 6055 3D7B 92E4 3D7C 9664 3D7D 50B7 3D7E 511F 3E21 52DD 3E22 5320 3E23 5347 3E24 53EC 3E25 54E8 3E26 5546 3E27 5531 3E28 5617 3E29 5968 3E2A 59BE 3E2B 5A3C 3E2C 5BB5 3E2D 5C06 3E2E 5C0F 3E2F 5C11 3E30 5C1A 3E31 5E84 3E32 5E8A 3E33 5EE0 3E34 5F70 3E35 627F 3E36 6284 3E37 62DB 3E38 638C 3E39 6377 3E3A 6607 3E3B 660C 3E3C 662D 3E3D 6676 3E3E 677E 3E3F 68A2 3E40 6A1F 3E41 6A35 3E42 6CBC 3E43 6D88 3E44 6E09 3E45 6E58 3E46 713C 3E47 7126 3E48 7167 3E49 75C7 3E4A 7701 3E4B 785D 3E4C 7901 3E4D 7965 3E4E 79F0 3E4F 7AE0 3E50 7B11 3E51 7CA7 3E52 7D39 3E53 8096 3E54 83D6 3E55 848B 3E56 8549 3E57 885D 3E58 88F3 3E59 8A1F 3E5A 8A3C 3E5B 8A54 3E5C 8A73 3E5D 8C61 3E5E 8CDE 3E5F 91A4 3E60 9266 3E61 937E 3E62 9418 3E63 969C 3E64 9798 3E65 4E0A 3E66 4E08 3E67 4E1E 3E68 4E57 3E69 5197 3E6A 5270 3E6B 57CE 3E6C 5834 3E6D 58CC 3E6E 5B22 3E6F 5E38 3E70 60C5 3E71 64FE 3E72 6761 3E73 6756 3E74 6D44 3E75 72B6 3E76 7573 3E77 7A63 3E78 84B8 3E79 8B72 3E7A 91B8 3E7B 9320 3E7C 5631 3E7D 57F4 3E7E 98FE 3F21 62ED 3F22 690D 3F23 6B96 3F24 71ED 3F25 7E54 3F26 8077 3F27 8272 3F28 89E6 3F29 98DF 3F2A 8755 3F2B 8FB1 3F2C 5C3B 3F2D 4F38 3F2E 4FE1 3F2F 4FB5 3F30 5507 3F31 5A20 3F32 5BDD 3F33 5BE9 3F34 5FC3 3F35 614E 3F36 632F 3F37 65B0 3F38 664B 3F39 68EE 3F3A 699B 3F3B 6D78 3F3C 6DF1 3F3D 7533 3F3E 75B9 3F3F 771F 3F40 795E 3F41 79E6 3F42 7D33 3F43 81E3 3F44 82AF 3F45 85AA 3F46 89AA 3F47 8A3A 3F48 8EAB 3F49 8F9B 3F4A 9032 3F4B 91DD 3F4C 9707 3F4D 4EBA 3F4E 4EC1 3F4F 5203 3F50 5875 3F51 58EC 3F52 5C0B 3F53 751A 3F54 5C3D 3F55 814E 3F56 8A0A 3F57 8FC5 3F58 9663 3F59 976D 3F5A 7B25 3F5B 8ACF 3F5C 9808 3F5D 9162 3F5E 56F3 3F5F 53A8 3F60 9017 3F61 5439 3F62 5782 3F63 5E25 3F64 63A8 3F65 6C34 3F66 708A 3F67 7761 3F68 7C8B 3F69 7FE0 3F6A 8870 3F6B 9042 3F6C 9154 3F6D 9310 3F6E 9318 3F6F 968F 3F70 745E 3F71 9AC4 3F72 5D07 3F73 5D69 3F74 6570 3F75 67A2 3F76 8DA8 3F77 96DB 3F78 636E 3F79 6749 3F7A 6919 3F7B 83C5 3F7C 9817 3F7D 96C0 3F7E 88FE 4021 6F84 4022 647A 4023 5BF8 4024 4E16 4025 702C 4026 755D 4027 662F 4028 51C4 4029 5236 402A 52E2 402B 59D3 402C 5F81 402D 6027 402E 6210 402F 653F 4030 6574 4031 661F 4032 6674 4033 68F2 4034 6816 4035 6B63 4036 6E05 4037 7272 4038 751F 4039 76DB 403A 7CBE 403B 8056 403C 58F0 403D 88FD 403E 897F 403F 8AA0 4040 8A93 4041 8ACB 4042 901D 4043 9192 4044 9752 4045 9759 4046 6589 4047 7A0E 4048 8106 4049 96BB 404A 5E2D 404B 60DC 404C 621A 404D 65A5 404E 6614 404F 6790 4050 77F3 4051 7A4D 4052 7C4D 4053 7E3E 4054 810A 4055 8CAC 4056 8D64 4057 8DE1 4058 8E5F 4059 78A9 405A 5207 405B 62D9 405C 63A5 405D 6442 405E 6298 405F 8A2D 4060 7A83 4061 7BC0 4062 8AAC 4063 96EA 4064 7D76 4065 820C 4066 8749 4067 4ED9 4068 5148 4069 5343 406A 5360 406B 5BA3 406C 5C02 406D 5C16 406E 5DDD 406F 6226 4070 6247 4071 64B0 4072 6813 4073 6834 4074 6CC9 4075 6D45 4076 6D17 4077 67D3 4078 6F5C 4079 714E 407A 717D 407B 65CB 407C 7A7F 407D 7BAD 407E 7DDA 4121 7E4A 4122 7FA8 4123 817A 4124 821B 4125 8239 4126 85A6 4127 8A6E 4128 8CCE 4129 8DF5 412A 9078 412B 9077 412C 92AD 412D 9291 412E 9583 412F 9BAE 4130 524D 4131 5584 4132 6F38 4133 7136 4134 5168 4135 7985 4136 7E55 4137 81B3 4138 7CCE 4139 564C 413A 5851 413B 5CA8 413C 63AA 413D 66FE 413E 66FD 413F 695A 4140 72D9 4141 758F 4142 758E 4143 790E 4144 7956 4145 79DF 4146 7C97 4147 7D20 4148 7D44 4149 8607 414A 8A34 414B 963B 414C 9061 414D 9F20 414E 50E7 414F 5275 4150 53CC 4151 53E2 4152 5009 4153 55AA 4154 58EE 4155 594F 4156 723D 4157 5B8B 4158 5C64 4159 531D 415A 60E3 415B 60F3 415C 635C 415D 6383 415E 633F 415F 63BB 4160 64CD 4161 65E9 4162 66F9 4163 5DE3 4164 69CD 4165 69FD 4166 6F15 4167 71E5 4168 4E89 4169 75E9 416A 76F8 416B 7A93 416C 7CDF 416D 7DCF 416E 7D9C 416F 8061 4170 8349 4171 8358 4172 846C 4173 84BC 4174 85FB 4175 88C5 4176 8D70 4177 9001 4178 906D 4179 9397 417A 971C 417B 9A12 417C 50CF 417D 5897 417E 618E 4221 81D3 4222 8535 4223 8D08 4224 9020 4225 4FC3 4226 5074 4227 5247 4228 5373 4229 606F 422A 6349 422B 675F 422C 6E2C 422D 8DB3 422E 901F 422F 4FD7 4230 5C5E 4231 8CCA 4232 65CF 4233 7D9A 4234 5352 4235 8896 4236 5176 4237 63C3 4238 5B58 4239 5B6B 423A 5C0A 423B 640D 423C 6751 423D 905C 423E 4ED6 423F 591A 4240 592A 4241 6C70 4242 8A51 4243 553E 4244 5815 4245 59A5 4246 60F0 4247 6253 4248 67C1 4249 8235 424A 6955 424B 9640 424C 99C4 424D 9A28 424E 4F53 424F 5806 4250 5BFE 4251 8010 4252 5CB1 4253 5E2F 4254 5F85 4255 6020 4256 614B 4257 6234 4258 66FF 4259 6CF0 425A 6EDE 425B 80CE 425C 817F 425D 82D4 425E 888B 425F 8CB8 4260 9000 4261 902E 4262 968A 4263 9EDB 4264 9BDB 4265 4EE3 4266 53F0 4267 5927 4268 7B2C 4269 918D 426A 984C 426B 9DF9 426C 6EDD 426D 7027 426E 5353 426F 5544 4270 5B85 4271 6258 4272 629E 4273 62D3 4274 6CA2 4275 6FEF 4276 7422 4277 8A17 4278 9438 4279 6FC1 427A 8AFE 427B 8338 427C 51E7 427D 86F8 427E 53EA 4321 53E9 4322 4F46 4323 9054 4324 8FB0 4325 596A 4326 8131 4327 5DFD 4328 7AEA 4329 8FBF 432A 68DA 432B 8C37 432C 72F8 432D 9C48 432E 6A3D 432F 8AB0 4330 4E39 4331 5358 4332 5606 4333 5766 4334 62C5 4335 63A2 4336 65E6 4337 6B4E 4338 6DE1 4339 6E5B 433A 70AD 433B 77ED 433C 7AEF 433D 7BAA 433E 7DBB 433F 803D 4340 80C6 4341 86CB 4342 8A95 4343 935B 4344 56E3 4345 58C7 4346 5F3E 4347 65AD 4348 6696 4349 6A80 434A 6BB5 434B 7537 434C 8AC7 434D 5024 434E 77E5 434F 5730 4350 5F1B 4351 6065 4352 667A 4353 6C60 4354 75F4 4355 7A1A 4356 7F6E 4357 81F4 4358 8718 4359 9045 435A 99B3 435B 7BC9 435C 755C 435D 7AF9 435E 7B51 435F 84C4 4360 9010 4361 79E9 4362 7A92 4363 8336 4364 5AE1 4365 7740 4366 4E2D 4367 4EF2 4368 5B99 4369 5FE0 436A 62BD 436B 663C 436C 67F1 436D 6CE8 436E 866B 436F 8877 4370 8A3B 4371 914E 4372 92F3 4373 99D0 4374 6A17 4375 7026 4376 732A 4377 82E7 4378 8457 4379 8CAF 437A 4E01 437B 5146 437C 51CB 437D 558B 437E 5BF5 4421 5E16 4422 5E33 4423 5E81 4424 5F14 4425 5F35 4426 5F6B 4427 5FB4 4428 61F2 4429 6311 442A 66A2 442B 671D 442C 6F6E 442D 7252 442E 753A 442F 773A 4430 8074 4431 8139 4432 8178 4433 8776 4434 8ABF 4435 8ADC 4436 8D85 4437 8DF3 4438 929A 4439 9577 443A 9802 443B 9CE5 443C 52C5 443D 6357 443E 76F4 443F 6715 4440 6C88 4441 73CD 4442 8CC3 4443 93AE 4444 9673 4445 6D25 4446 589C 4447 690E 4448 69CC 4449 8FFD 444A 939A 444B 75DB 444C 901A 444D 585A 444E 6802 444F 63B4 4450 69FB 4451 4F43 4452 6F2C 4453 67D8 4454 8FBB 4455 8526 4456 7DB4 4457 9354 4458 693F 4459 6F70 445A 576A 445B 58F7 445C 5B2C 445D 7D2C 445E 722A 445F 540A 4460 91E3 4461 9DB4 4462 4EAD 4463 4F4E 4464 505C 4465 5075 4466 5243 4467 8C9E 4468 5448 4469 5824 446A 5B9A 446B 5E1D 446C 5E95 446D 5EAD 446E 5EF7 446F 5F1F 4470 608C 4471 62B5 4472 633A 4473 63D0 4474 68AF 4475 6C40 4476 7887 4477 798E 4478 7A0B 4479 7DE0 447A 8247 447B 8A02 447C 8AE6 447D 8E44 447E 9013 4521 90B8 4522 912D 4523 91D8 4524 9F0E 4525 6CE5 4526 6458 4527 64E2 4528 6575 4529 6EF4 452A 7684 452B 7B1B 452C 9069 452D 93D1 452E 6EBA 452F 54F2 4530 5FB9 4531 64A4 4532 8F4D 4533 8FED 4534 9244 4535 5178 4536 586B 4537 5929 4538 5C55 4539 5E97 453A 6DFB 453B 7E8F 453C 751C 453D 8CBC 453E 8EE2 453F 985B 4540 70B9 4541 4F1D 4542 6BBF 4543 6FB1 4544 7530 4545 96FB 4546 514E 4547 5410 4548 5835 4549 5857 454A 59AC 454B 5C60 454C 5F92 454D 6597 454E 675C 454F 6E21 4550 767B 4551 83DF 4552 8CED 4553 9014 4554 90FD 4555 934D 4556 7825 4557 783A 4558 52AA 4559 5EA6 455A 571F 455B 5974 455C 6012 455D 5012 455E 515A 455F 51AC 4560 51CD 4561 5200 4562 5510 4563 5854 4564 5858 4565 5957 4566 5B95 4567 5CF6 4568 5D8B 4569 60BC 456A 6295 456B 642D 456C 6771 456D 6843 456E 68BC 456F 68DF 4570 76D7 4571 6DD8 4572 6E6F 4573 6D9B 4574 706F 4575 71C8 4576 5F53 4577 75D8 4578 7977 4579 7B49 457A 7B54 457B 7B52 457C 7CD6 457D 7D71 457E 5230 4621 8463 4622 8569 4623 85E4 4624 8A0E 4625 8B04 4626 8C46 4627 8E0F 4628 9003 4629 900F 462A 9419 462B 9676 462C 982D 462D 9A30 462E 95D8 462F 50CD 4630 52D5 4631 540C 4632 5802 4633 5C0E 4634 61A7 4635 649E 4636 6D1E 4637 77B3 4638 7AE5 4639 80F4 463A 8404 463B 9053 463C 9285 463D 5CE0 463E 9D07 463F 533F 4640 5F97 4641 5FB3 4642 6D9C 4643 7279 4644 7763 4645 79BF 4646 7BE4 4647 6BD2 4648 72EC 4649 8AAD 464A 6803 464B 6A61 464C 51F8 464D 7A81 464E 6934 464F 5C4A 4650 9CF6 4651 82EB 4652 5BC5 4653 9149 4654 701E 4655 5678 4656 5C6F 4657 60C7 4658 6566 4659 6C8C 465A 8C5A 465B 9041 465C 9813 465D 5451 465E 66C7 465F 920D 4660 5948 4661 90A3 4662 5185 4663 4E4D 4664 51EA 4665 8599 4666 8B0E 4667 7058 4668 637A 4669 934B 466A 6962 466B 99B4 466C 7E04 466D 7577 466E 5357 466F 6960 4670 8EDF 4671 96E3 4672 6C5D 4673 4E8C 4674 5C3C 4675 5F10 4676 8FE9 4677 5302 4678 8CD1 4679 8089 467A 8679 467B 5EFF 467C 65E5 467D 4E73 467E 5165 4721 5982 4722 5C3F 4723 97EE 4724 4EFB 4725 598A 4726 5FCD 4727 8A8D 4728 6FE1 4729 79B0 472A 7962 472B 5BE7 472C 8471 472D 732B 472E 71B1 472F 5E74 4730 5FF5 4731 637B 4732 649A 4733 71C3 4734 7C98 4735 4E43 4736 5EFC 4737 4E4B 4738 57DC 4739 56A2 473A 60A9 473B 6FC3 473C 7D0D 473D 80FD 473E 8133 473F 81BF 4740 8FB2 4741 8997 4742 86A4 4743 5DF4 4744 628A 4745 64AD 4746 8987 4747 6777 4748 6CE2 4749 6D3E 474A 7436 474B 7834 474C 5A46 474D 7F75 474E 82AD 474F 99AC 4750 4FF3 4751 5EC3 4752 62DD 4753 6392 4754 6557 4755 676F 4756 76C3 4757 724C 4758 80CC 4759 80BA 475A 8F29 475B 914D 475C 500D 475D 57F9 475E 5A92 475F 6885 4760 6973 4761 7164 4762 72FD 4763 8CB7 4764 58F2 4765 8CE0 4766 966A 4767 9019 4768 877F 4769 79E4 476A 77E7 476B 8429 476C 4F2F 476D 5265 476E 535A 476F 62CD 4770 67CF 4771 6CCA 4772 767D 4773 7B94 4774 7C95 4775 8236 4776 8584 4777 8FEB 4778 66DD 4779 6F20 477A 7206 477B 7E1B 477C 83AB 477D 99C1 477E 9EA6 4821 51FD 4822 7BB1 4823 7872 4824 7BB8 4825 8087 4826 7B48 4827 6AE8 4828 5E61 4829 808C 482A 7551 482B 7560 482C 516B 482D 9262 482E 6E8C 482F 767A 4830 9197 4831 9AEA 4832 4F10 4833 7F70 4834 629C 4835 7B4F 4836 95A5 4837 9CE9 4838 567A 4839 5859 483A 86E4 483B 96BC 483C 4F34 483D 5224 483E 534A 483F 53CD 4840 53DB 4841 5E06 4842 642C 4843 6591 4844 677F 4845 6C3E 4846 6C4E 4847 7248 4848 72AF 4849 73ED 484A 7554 484B 7E41 484C 822C 484D 85E9 484E 8CA9 484F 7BC4 4850 91C6 4851 7169 4852 9812 4853 98EF 4854 633D 4855 6669 4856 756A 4857 76E4 4858 78D0 4859 8543 485A 86EE 485B 532A 485C 5351 485D 5426 485E 5983 485F 5E87 4860 5F7C 4861 60B2 4862 6249 4863 6279 4864 62AB 4865 6590 4866 6BD4 4867 6CCC 4868 75B2 4869 76AE 486A 7891 486B 79D8 486C 7DCB 486D 7F77 486E 80A5 486F 88AB 4870 8AB9 4871 8CBB 4872 907F 4873 975E 4874 98DB 4875 6A0B 4876 7C38 4877 5099 4878 5C3E 4879 5FAE 487A 6787 487B 6BD8 487C 7435 487D 7709 487E 7F8E 4921 9F3B 4922 67CA 4923 7A17 4924 5339 4925 758B 4926 9AED 4927 5F66 4928 819D 4929 83F1 492A 8098 492B 5F3C 492C 5FC5 492D 7562 492E 7B46 492F 903C 4930 6867 4931 59EB 4932 5A9B 4933 7D10 4934 767E 4935 8B2C 4936 4FF5 4937 5F6A 4938 6A19 4939 6C37 493A 6F02 493B 74E2 493C 7968 493D 8868 493E 8A55 493F 8C79 4940 5EDF 4941 63CF 4942 75C5 4943 79D2 4944 82D7 4945 9328 4946 92F2 4947 849C 4948 86ED 4949 9C2D 494A 54C1 494B 5F6C 494C 658C 494D 6D5C 494E 7015 494F 8CA7 4950 8CD3 4951 983B 4952 654F 4953 74F6 4954 4E0D 4955 4ED8 4956 57E0 4957 592B 4958 5A66 4959 5BCC 495A 51A8 495B 5E03 495C 5E9C 495D 6016 495E 6276 495F 6577 4960 65A7 4961 666E 4962 6D6E 4963 7236 4964 7B26 4965 8150 4966 819A 4967 8299 4968 8B5C 4969 8CA0 496A 8CE6 496B 8D74 496C 961C 496D 9644 496E 4FAE 496F 64AB 4970 6B66 4971 821E 4972 8461 4973 856A 4974 90E8 4975 5C01 4976 6953 4977 98A8 4978 847A 4979 8557 497A 4F0F 497B 526F 497C 5FA9 497D 5E45 497E 670D 4A21 798F 4A22 8179 4A23 8907 4A24 8986 4A25 6DF5 4A26 5F17 4A27 6255 4A28 6CB8 4A29 4ECF 4A2A 7269 4A2B 9B92 4A2C 5206 4A2D 543B 4A2E 5674 4A2F 58B3 4A30 61A4 4A31 626E 4A32 711A 4A33 596E 4A34 7C89 4A35 7CDE 4A36 7D1B 4A37 96F0 4A38 6587 4A39 805E 4A3A 4E19 4A3B 4F75 4A3C 5175 4A3D 5840 4A3E 5E63 4A3F 5E73 4A40 5F0A 4A41 67C4 4A42 4E26 4A43 853D 4A44 9589 4A45 965B 4A46 7C73 4A47 9801 4A48 50FB 4A49 58C1 4A4A 7656 4A4B 78A7 4A4C 5225 4A4D 77A5 4A4E 8511 4A4F 7B86 4A50 504F 4A51 5909 4A52 7247 4A53 7BC7 4A54 7DE8 4A55 8FBA 4A56 8FD4 4A57 904D 4A58 4FBF 4A59 52C9 4A5A 5A29 4A5B 5F01 4A5C 97AD 4A5D 4FDD 4A5E 8217 4A5F 92EA 4A60 5703 4A61 6355 4A62 6B69 4A63 752B 4A64 88DC 4A65 8F14 4A66 7A42 4A67 52DF 4A68 5893 4A69 6155 4A6A 620A 4A6B 66AE 4A6C 6BCD 4A6D 7C3F 4A6E 83E9 4A6F 5023 4A70 4FF8 4A71 5305 4A72 5446 4A73 5831 4A74 5949 4A75 5B9D 4A76 5CF0 4A77 5CEF 4A78 5D29 4A79 5E96 4A7A 62B1 4A7B 6367 4A7C 653E 4A7D 65B9 4A7E 670B 4B21 6CD5 4B22 6CE1 4B23 70F9 4B24 7832 4B25 7E2B 4B26 80DE 4B27 82B3 4B28 840C 4B29 84EC 4B2A 8702 4B2B 8912 4B2C 8A2A 4B2D 8C4A 4B2E 90A6 4B2F 92D2 4B30 98FD 4B31 9CF3 4B32 9D6C 4B33 4E4F 4B34 4EA1 4B35 508D 4B36 5256 4B37 574A 4B38 59A8 4B39 5E3D 4B3A 5FD8 4B3B 5FD9 4B3C 623F 4B3D 66B4 4B3E 671B 4B3F 67D0 4B40 68D2 4B41 5192 4B42 7D21 4B43 80AA 4B44 81A8 4B45 8B00 4B46 8C8C 4B47 8CBF 4B48 927E 4B49 9632 4B4A 5420 4B4B 982C 4B4C 5317 4B4D 50D5 4B4E 535C 4B4F 58A8 4B50 64B2 4B51 6734 4B52 7267 4B53 7766 4B54 7A46 4B55 91E6 4B56 52C3 4B57 6CA1 4B58 6B86 4B59 5800 4B5A 5E4C 4B5B 5954 4B5C 672C 4B5D 7FFB 4B5E 51E1 4B5F 76C6 4B60 6469 4B61 78E8 4B62 9B54 4B63 9EBB 4B64 57CB 4B65 59B9 4B66 6627 4B67 679A 4B68 6BCE 4B69 54E9 4B6A 69D9 4B6B 5E55 4B6C 819C 4B6D 6795 4B6E 9BAA 4B6F 67FE 4B70 9C52 4B71 685D 4B72 4EA6 4B73 4FE3 4B74 53C8 4B75 62B9 4B76 672B 4B77 6CAB 4B78 8FC4 4B79 4FAD 4B7A 7E6D 4B7B 9EBF 4B7C 4E07 4B7D 6162 4B7E 6E80 4C21 6F2B 4C22 8513 4C23 5473 4C24 672A 4C25 9B45 4C26 5DF3 4C27 7B95 4C28 5CAC 4C29 5BC6 4C2A 871C 4C2B 6E4A 4C2C 84D1 4C2D 7A14 4C2E 8108 4C2F 5999 4C30 7C8D 4C31 6C11 4C32 7720 4C33 52D9 4C34 5922 4C35 7121 4C36 725F 4C37 77DB 4C38 9727 4C39 9D61 4C3A 690B 4C3B 5A7F 4C3C 5A18 4C3D 51A5 4C3E 540D 4C3F 547D 4C40 660E 4C41 76DF 4C42 8FF7 4C43 9298 4C44 9CF4 4C45 59EA 4C46 725D 4C47 6EC5 4C48 514D 4C49 68C9 4C4A 7DBF 4C4B 7DEC 4C4C 9762 4C4D 9EBA 4C4E 6478 4C4F 6A21 4C50 8302 4C51 5984 4C52 5B5F 4C53 6BDB 4C54 731B 4C55 76F2 4C56 7DB2 4C57 8017 4C58 8499 4C59 5132 4C5A 6728 4C5B 9ED9 4C5C 76EE 4C5D 6762 4C5E 52FF 4C5F 9905 4C60 5C24 4C61 623B 4C62 7C7E 4C63 8CB0 4C64 554F 4C65 60B6 4C66 7D0B 4C67 9580 4C68 5301 4C69 4E5F 4C6A 51B6 4C6B 591C 4C6C 723A 4C6D 8036 4C6E 91CE 4C6F 5F25 4C70 77E2 4C71 5384 4C72 5F79 4C73 7D04 4C74 85AC 4C75 8A33 4C76 8E8D 4C77 9756 4C78 67F3 4C79 85AE 4C7A 9453 4C7B 6109 4C7C 6108 4C7D 6CB9 4C7E 7652 4D21 8AED 4D22 8F38 4D23 552F 4D24 4F51 4D25 512A 4D26 52C7 4D27 53CB 4D28 5BA5 4D29 5E7D 4D2A 60A0 4D2B 6182 4D2C 63D6 4D2D 6709 4D2E 67DA 4D2F 6E67 4D30 6D8C 4D31 7336 4D32 7337 4D33 7531 4D34 7950 4D35 88D5 4D36 8A98 4D37 904A 4D38 9091 4D39 90F5 4D3A 96C4 4D3B 878D 4D3C 5915 4D3D 4E88 4D3E 4F59 4D3F 4E0E 4D40 8A89 4D41 8F3F 4D42 9810 4D43 50AD 4D44 5E7C 4D45 5996 4D46 5BB9 4D47 5EB8 4D48 63DA 4D49 63FA 4D4A 64C1 4D4B 66DC 4D4C 694A 4D4D 69D8 4D4E 6D0B 4D4F 6EB6 4D50 7194 4D51 7528 4D52 7AAF 4D53 7F8A 4D54 8000 4D55 8449 4D56 84C9 4D57 8981 4D58 8B21 4D59 8E0A 4D5A 9065 4D5B 967D 4D5C 990A 4D5D 617E 4D5E 6291 4D5F 6B32 4D60 6C83 4D61 6D74 4D62 7FCC 4D63 7FFC 4D64 6DC0 4D65 7F85 4D66 87BA 4D67 88F8 4D68 6765 4D69 83B1 4D6A 983C 4D6B 96F7 4D6C 6D1B 4D6D 7D61 4D6E 843D 4D6F 916A 4D70 4E71 4D71 5375 4D72 5D50 4D73 6B04 4D74 6FEB 4D75 85CD 4D76 862D 4D77 89A7 4D78 5229 4D79 540F 4D7A 5C65 4D7B 674E 4D7C 68A8 4D7D 7406 4D7E 7483 4E21 75E2 4E22 88CF 4E23 88E1 4E24 91CC 4E25 96E2 4E26 9678 4E27 5F8B 4E28 7387 4E29 7ACB 4E2A 844E 4E2B 63A0 4E2C 7565 4E2D 5289 4E2E 6D41 4E2F 6E9C 4E30 7409 4E31 7559 4E32 786B 4E33 7C92 4E34 9686 4E35 7ADC 4E36 9F8D 4E37 4FB6 4E38 616E 4E39 65C5 4E3A 865C 4E3B 4E86 4E3C 4EAE 4E3D 50DA 4E3E 4E21 4E3F 51CC 4E40 5BEE 4E41 6599 4E42 6881 4E43 6DBC 4E44 731F 4E45 7642 4E46 77AD 4E47 7A1C 4E48 7CE7 4E49 826F 4E4A 8AD2 4E4B 907C 4E4C 91CF 4E4D 9675 4E4E 9818 4E4F 529B 4E50 7DD1 4E51 502B 4E52 5398 4E53 6797 4E54 6DCB 4E55 71D0 4E56 7433 4E57 81E8 4E58 8F2A 4E59 96A3 4E5A 9C57 4E5B 9E9F 4E5C 7460 4E5D 5841 4E5E 6D99 4E5F 7D2F 4E60 985E 4E61 4EE4 4E62 4F36 4E63 4F8B 4E64 51B7 4E65 52B1 4E66 5DBA 4E67 601C 4E68 73B2 4E69 793C 4E6A 82D3 4E6B 9234 4E6C 96B7 4E6D 96F6 4E6E 970A 4E6F 9E97 4E70 9F62 4E71 66A6 4E72 6B74 4E73 5217 4E74 52A3 4E75 70C8 4E76 88C2 4E77 5EC9 4E78 604B 4E79 6190 4E7A 6F23 4E7B 7149 4E7C 7C3E 4E7D 7DF4 4E7E 806F 4F21 84EE 4F22 9023 4F23 932C 4F24 5442 4F25 9B6F 4F26 6AD3 4F27 7089 4F28 8CC2 4F29 8DEF 4F2A 9732 4F2B 52B4 4F2C 5A41 4F2D 5ECA 4F2E 5F04 4F2F 6717 4F30 697C 4F31 6994 4F32 6D6A 4F33 6F0F 4F34 7262 4F35 72FC 4F36 7BED 4F37 8001 4F38 807E 4F39 874B 4F3A 90CE 4F3B 516D 4F3C 9E93 4F3D 7984 4F3E 808B 4F3F 9332 4F40 8AD6 4F41 502D 4F42 548C 4F43 8A71 4F44 6B6A 4F45 8CC4 4F46 8107 4F47 60D1 4F48 67A0 4F49 9DF2 4F4A 4E99 4F4B 4E98 4F4C 9C10 4F4D 8A6B 4F4E 85C1 4F4F 8568 4F50 6900 4F51 6E7E 4F52 7897 4F53 8155 5021 5F0C 5022 4E10 5023 4E15 5024 4E2A 5025 4E31 5026 4E36 5027 4E3C 5028 4E3F 5029 4E42 502A 4E56 502B 4E58 502C 4E82 502D 4E85 502E 8C6B 502F 4E8A 5030 8212 5031 5F0D 5032 4E8E 5033 4E9E 5034 4E9F 5035 4EA0 5036 4EA2 5037 4EB0 5038 4EB3 5039 4EB6 503A 4ECE 503B 4ECD 503C 4EC4 503D 4EC6 503E 4EC2 503F 4ED7 5040 4EDE 5041 4EED 5042 4EDF 5043 4EF7 5044 4F09 5045 4F5A 5046 4F30 5047 4F5B 5048 4F5D 5049 4F57 504A 4F47 504B 4F76 504C 4F88 504D 4F8F 504E 4F98 504F 4F7B 5050 4F69 5051 4F70 5052 4F91 5053 4F6F 5054 4F86 5055 4F96 5056 5118 5057 4FD4 5058 4FDF 5059 4FCE 505A 4FD8 505B 4FDB 505C 4FD1 505D 4FDA 505E 4FD0 505F 4FE4 5060 4FE5 5061 501A 5062 5028 5063 5014 5064 502A 5065 5025 5066 5005 5067 4F1C 5068 4FF6 5069 5021 506A 5029 506B 502C 506C 4FFE 506D 4FEF 506E 5011 506F 5006 5070 5043 5071 5047 5072 6703 5073 5055 5074 5050 5075 5048 5076 505A 5077 5056 5078 506C 5079 5078 507A 5080 507B 509A 507C 5085 507D 50B4 507E 50B2 5121 50C9 5122 50CA 5123 50B3 5124 50C2 5125 50D6 5126 50DE 5127 50E5 5128 50ED 5129 50E3 512A 50EE 512B 50F9 512C 50F5 512D 5109 512E 5101 512F 5102 5130 5116 5131 5115 5132 5114 5133 511A 5134 5121 5135 513A 5136 5137 5137 513C 5138 513B 5139 513F 513A 5140 513B 5152 513C 514C 513D 5154 513E 5162 513F 7AF8 5140 5169 5141 516A 5142 516E 5143 5180 5144 5182 5145 56D8 5146 518C 5147 5189 5148 518F 5149 5191 514A 5193 514B 5195 514C 5196 514D 51A4 514E 51A6 514F 51A2 5150 51A9 5151 51AA 5152 51AB 5153 51B3 5154 51B1 5155 51B2 5156 51B0 5157 51B5 5158 51BD 5159 51C5 515A 51C9 515B 51DB 515C 51E0 515D 8655 515E 51E9 515F 51ED 5160 51F0 5161 51F5 5162 51FE 5163 5204 5164 520B 5165 5214 5166 520E 5167 5227 5168 522A 5169 522E 516A 5233 516B 5239 516C 524F 516D 5244 516E 524B 516F 524C 5170 525E 5171 5254 5172 526A 5173 5274 5174 5269 5175 5273 5176 527F 5177 527D 5178 528D 5179 5294 517A 5292 517B 5271 517C 5288 517D 5291 517E 8FA8 5221 8FA7 5222 52AC 5223 52AD 5224 52BC 5225 52B5 5226 52C1 5227 52CD 5228 52D7 5229 52DE 522A 52E3 522B 52E6 522C 98ED 522D 52E0 522E 52F3 522F 52F5 5230 52F8 5231 52F9 5232 5306 5233 5308 5234 7538 5235 530D 5236 5310 5237 530F 5238 5315 5239 531A 523A 5323 523B 532F 523C 5331 523D 5333 523E 5338 523F 5340 5240 5346 5241 5345 5242 4E17 5243 5349 5244 534D 5245 51D6 5246 535E 5247 5369 5248 536E 5249 5918 524A 537B 524B 5377 524C 5382 524D 5396 524E 53A0 524F 53A6 5250 53A5 5251 53AE 5252 53B0 5253 53B6 5254 53C3 5255 7C12 5256 96D9 5257 53DF 5258 66FC 5259 71EE 525A 53EE 525B 53E8 525C 53ED 525D 53FA 525E 5401 525F 543D 5260 5440 5261 542C 5262 542D 5263 543C 5264 542E 5265 5436 5266 5429 5267 541D 5268 544E 5269 548F 526A 5475 526B 548E 526C 545F 526D 5471 526E 5477 526F 5470 5270 5492 5271 547B 5272 5480 5273 5476 5274 5484 5275 5490 5276 5486 5277 54C7 5278 54A2 5279 54B8 527A 54A5 527B 54AC 527C 54C4 527D 54C8 527E 54A8 5321 54AB 5322 54C2 5323 54A4 5324 54BE 5325 54BC 5326 54D8 5327 54E5 5328 54E6 5329 550F 532A 5514 532B 54FD 532C 54EE 532D 54ED 532E 54FA 532F 54E2 5330 5539 5331 5540 5332 5563 5333 554C 5334 552E 5335 555C 5336 5545 5337 5556 5338 5557 5339 5538 533A 5533 533B 555D 533C 5599 533D 5580 533E 54AF 533F 558A 5340 559F 5341 557B 5342 557E 5343 5598 5344 559E 5345 55AE 5346 557C 5347 5583 5348 55A9 5349 5587 534A 55A8 534B 55DA 534C 55C5 534D 55DF 534E 55C4 534F 55DC 5350 55E4 5351 55D4 5352 5614 5353 55F7 5354 5616 5355 55FE 5356 55FD 5357 561B 5358 55F9 5359 564E 535A 5650 535B 71DF 535C 5634 535D 5636 535E 5632 535F 5638 5360 566B 5361 5664 5362 562F 5363 566C 5364 566A 5365 5686 5366 5680 5367 568A 5368 56A0 5369 5694 536A 568F 536B 56A5 536C 56AE 536D 56B6 536E 56B4 536F 56C2 5370 56BC 5371 56C1 5372 56C3 5373 56C0 5374 56C8 5375 56CE 5376 56D1 5377 56D3 5378 56D7 5379 56EE 537A 56F9 537B 5700 537C 56FF 537D 5704 537E 5709 5421 5708 5422 570B 5423 570D 5424 5713 5425 5718 5426 5716 5427 55C7 5428 571C 5429 5726 542A 5737 542B 5738 542C 574E 542D 573B 542E 5740 542F 574F 5430 5769 5431 57C0 5432 5788 5433 5761 5434 577F 5435 5789 5436 5793 5437 57A0 5438 57B3 5439 57A4 543A 57AA 543B 57B0 543C 57C3 543D 57C6 543E 57D4 543F 57D2 5440 57D3 5441 580A 5442 57D6 5443 57E3 5444 580B 5445 5819 5446 581D 5447 5872 5448 5821 5449 5862 544A 584B 544B 5870 544C 6BC0 544D 5852 544E 583D 544F 5879 5450 5885 5451 58B9 5452 589F 5453 58AB 5454 58BA 5455 58DE 5456 58BB 5457 58B8 5458 58AE 5459 58C5 545A 58D3 545B 58D1 545C 58D7 545D 58D9 545E 58D8 545F 58E5 5460 58DC 5461 58E4 5462 58DF 5463 58EF 5464 58FA 5465 58F9 5466 58FB 5467 58FC 5468 58FD 5469 5902 546A 590A 546B 5910 546C 591B 546D 68A6 546E 5925 546F 592C 5470 592D 5471 5932 5472 5938 5473 593E 5474 7AD2 5475 5955 5476 5950 5477 594E 5478 595A 5479 5958 547A 5962 547B 5960 547C 5967 547D 596C 547E 5969 5521 5978 5522 5981 5523 599D 5524 4F5E 5525 4FAB 5526 59A3 5527 59B2 5528 59C6 5529 59E8 552A 59DC 552B 598D 552C 59D9 552D 59DA 552E 5A25 552F 5A1F 5530 5A11 5531 5A1C 5532 5A09 5533 5A1A 5534 5A40 5535 5A6C 5536 5A49 5537 5A35 5538 5A36 5539 5A62 553A 5A6A 553B 5A9A 553C 5ABC 553D 5ABE 553E 5ACB 553F 5AC2 5540 5ABD 5541 5AE3 5542 5AD7 5543 5AE6 5544 5AE9 5545 5AD6 5546 5AFA 5547 5AFB 5548 5B0C 5549 5B0B 554A 5B16 554B 5B32 554C 5AD0 554D 5B2A 554E 5B36 554F 5B3E 5550 5B43 5551 5B45 5552 5B40 5553 5B51 5554 5B55 5555 5B5A 5556 5B5B 5557 5B65 5558 5B69 5559 5B70 555A 5B73 555B 5B75 555C 5B78 555D 6588 555E 5B7A 555F 5B80 5560 5B83 5561 5BA6 5562 5BB8 5563 5BC3 5564 5BC7 5565 5BC9 5566 5BD4 5567 5BD0 5568 5BE4 5569 5BE6 556A 5BE2 556B 5BDE 556C 5BE5 556D 5BEB 556E 5BF0 556F 5BF6 5570 5BF3 5571 5C05 5572 5C07 5573 5C08 5574 5C0D 5575 5C13 5576 5C20 5577 5C22 5578 5C28 5579 5C38 557A 5C39 557B 5C41 557C 5C46 557D 5C4E 557E 5C53 5621 5C50 5622 5C4F 5623 5B71 5624 5C6C 5625 5C6E 5626 4E62 5627 5C76 5628 5C79 5629 5C8C 562A 5C91 562B 5C94 562C 599B 562D 5CAB 562E 5CBB 562F 5CB6 5630 5CBC 5631 5CB7 5632 5CC5 5633 5CBE 5634 5CC7 5635 5CD9 5636 5CE9 5637 5CFD 5638 5CFA 5639 5CED 563A 5D8C 563B 5CEA 563C 5D0B 563D 5D15 563E 5D17 563F 5D5C 5640 5D1F 5641 5D1B 5642 5D11 5643 5D14 5644 5D22 5645 5D1A 5646 5D19 5647 5D18 5648 5D4C 5649 5D52 564A 5D4E 564B 5D4B 564C 5D6C 564D 5D73 564E 5D76 564F 5D87 5650 5D84 5651 5D82 5652 5DA2 5653 5D9D 5654 5DAC 5655 5DAE 5656 5DBD 5657 5D90 5658 5DB7 5659 5DBC 565A 5DC9 565B 5DCD 565C 5DD3 565D 5DD2 565E 5DD6 565F 5DDB 5660 5DEB 5661 5DF2 5662 5DF5 5663 5E0B 5664 5E1A 5665 5E19 5666 5E11 5667 5E1B 5668 5E36 5669 5E37 566A 5E44 566B 5E43 566C 5E40 566D 5E4E 566E 5E57 566F 5E54 5670 5E5F 5671 5E62 5672 5E64 5673 5E47 5674 5E75 5675 5E76 5676 5E7A 5677 9EBC 5678 5E7F 5679 5EA0 567A 5EC1 567B 5EC2 567C 5EC8 567D 5ED0 567E 5ECF 5721 5ED6 5722 5EE3 5723 5EDD 5724 5EDA 5725 5EDB 5726 5EE2 5727 5EE1 5728 5EE8 5729 5EE9 572A 5EEC 572B 5EF1 572C 5EF3 572D 5EF0 572E 5EF4 572F 5EF8 5730 5EFE 5731 5F03 5732 5F09 5733 5F5D 5734 5F5C 5735 5F0B 5736 5F11 5737 5F16 5738 5F29 5739 5F2D 573A 5F38 573B 5F41 573C 5F48 573D 5F4C 573E 5F4E 573F 5F2F 5740 5F51 5741 5F56 5742 5F57 5743 5F59 5744 5F61 5745 5F6D 5746 5F73 5747 5F77 5748 5F83 5749 5F82 574A 5F7F 574B 5F8A 574C 5F88 574D 5F91 574E 5F87 574F 5F9E 5750 5F99 5751 5F98 5752 5FA0 5753 5FA8 5754 5FAD 5755 5FBC 5756 5FD6 5757 5FFB 5758 5FE4 5759 5FF8 575A 5FF1 575B 5FDD 575C 60B3 575D 5FFF 575E 6021 575F 6060 5760 6019 5761 6010 5762 6029 5763 600E 5764 6031 5765 601B 5766 6015 5767 602B 5768 6026 5769 600F 576A 603A 576B 605A 576C 6041 576D 606A 576E 6077 576F 605F 5770 604A 5771 6046 5772 604D 5773 6063 5774 6043 5775 6064 5776 6042 5777 606C 5778 606B 5779 6059 577A 6081 577B 608D 577C 60E7 577D 6083 577E 609A 5821 6084 5822 609B 5823 6096 5824 6097 5825 6092 5826 60A7 5827 608B 5828 60E1 5829 60B8 582A 60E0 582B 60D3 582C 60B4 582D 5FF0 582E 60BD 582F 60C6 5830 60B5 5831 60D8 5832 614D 5833 6115 5834 6106 5835 60F6 5836 60F7 5837 6100 5838 60F4 5839 60FA 583A 6103 583B 6121 583C 60FB 583D 60F1 583E 610D 583F 610E 5840 6147 5841 613E 5842 6128 5843 6127 5844 614A 5845 613F 5846 613C 5847 612C 5848 6134 5849 613D 584A 6142 584B 6144 584C 6173 584D 6177 584E 6158 584F 6159 5850 615A 5851 616B 5852 6174 5853 616F 5854 6165 5855 6171 5856 615F 5857 615D 5858 6153 5859 6175 585A 6199 585B 6196 585C 6187 585D 61AC 585E 6194 585F 619A 5860 618A 5861 6191 5862 61AB 5863 61AE 5864 61CC 5865 61CA 5866 61C9 5867 61F7 5868 61C8 5869 61C3 586A 61C6 586B 61BA 586C 61CB 586D 7F79 586E 61CD 586F 61E6 5870 61E3 5871 61F6 5872 61FA 5873 61F4 5874 61FF 5875 61FD 5876 61FC 5877 61FE 5878 6200 5879 6208 587A 6209 587B 620D 587C 620C 587D 6214 587E 621B 5921 621E 5922 6221 5923 622A 5924 622E 5925 6230 5926 6232 5927 6233 5928 6241 5929 624E 592A 625E 592B 6263 592C 625B 592D 6260 592E 6268 592F 627C 5930 6282 5931 6289 5932 627E 5933 6292 5934 6293 5935 6296 5936 62D4 5937 6283 5938 6294 5939 62D7 593A 62D1 593B 62BB 593C 62CF 593D 62FF 593E 62C6 593F 64D4 5940 62C8 5941 62DC 5942 62CC 5943 62CA 5944 62C2 5945 62C7 5946 629B 5947 62C9 5948 630C 5949 62EE 594A 62F1 594B 6327 594C 6302 594D 6308 594E 62EF 594F 62F5 5950 6350 5951 633E 5952 634D 5953 641C 5954 634F 5955 6396 5956 638E 5957 6380 5958 63AB 5959 6376 595A 63A3 595B 638F 595C 6389 595D 639F 595E 63B5 595F 636B 5960 6369 5961 63BE 5962 63E9 5963 63C0 5964 63C6 5965 63E3 5966 63C9 5967 63D2 5968 63F6 5969 63C4 596A 6416 596B 6434 596C 6406 596D 6413 596E 6426 596F 6436 5970 651D 5971 6417 5972 6428 5973 640F 5974 6467 5975 646F 5976 6476 5977 644E 5978 652A 5979 6495 597A 6493 597B 64A5 597C 64A9 597D 6488 597E 64BC 5A21 64DA 5A22 64D2 5A23 64C5 5A24 64C7 5A25 64BB 5A26 64D8 5A27 64C2 5A28 64F1 5A29 64E7 5A2A 8209 5A2B 64E0 5A2C 64E1 5A2D 62AC 5A2E 64E3 5A2F 64EF 5A30 652C 5A31 64F6 5A32 64F4 5A33 64F2 5A34 64FA 5A35 6500 5A36 64FD 5A37 6518 5A38 651C 5A39 6505 5A3A 6524 5A3B 6523 5A3C 652B 5A3D 6534 5A3E 6535 5A3F 6537 5A40 6536 5A41 6538 5A42 754B 5A43 6548 5A44 6556 5A45 6555 5A46 654D 5A47 6558 5A48 655E 5A49 655D 5A4A 6572 5A4B 6578 5A4C 6582 5A4D 6583 5A4E 8B8A 5A4F 659B 5A50 659F 5A51 65AB 5A52 65B7 5A53 65C3 5A54 65C6 5A55 65C1 5A56 65C4 5A57 65CC 5A58 65D2 5A59 65DB 5A5A 65D9 5A5B 65E0 5A5C 65E1 5A5D 65F1 5A5E 6772 5A5F 660A 5A60 6603 5A61 65FB 5A62 6773 5A63 6635 5A64 6636 5A65 6634 5A66 661C 5A67 664F 5A68 6644 5A69 6649 5A6A 6641 5A6B 665E 5A6C 665D 5A6D 6664 5A6E 6667 5A6F 6668 5A70 665F 5A71 6662 5A72 6670 5A73 6683 5A74 6688 5A75 668E 5A76 6689 5A77 6684 5A78 6698 5A79 669D 5A7A 66C1 5A7B 66B9 5A7C 66C9 5A7D 66BE 5A7E 66BC 5B21 66C4 5B22 66B8 5B23 66D6 5B24 66DA 5B25 66E0 5B26 663F 5B27 66E6 5B28 66E9 5B29 66F0 5B2A 66F5 5B2B 66F7 5B2C 670F 5B2D 6716 5B2E 671E 5B2F 6726 5B30 6727 5B31 9738 5B32 672E 5B33 673F 5B34 6736 5B35 6741 5B36 6738 5B37 6737 5B38 6746 5B39 675E 5B3A 6760 5B3B 6759 5B3C 6763 5B3D 6764 5B3E 6789 5B3F 6770 5B40 67A9 5B41 677C 5B42 676A 5B43 678C 5B44 678B 5B45 67A6 5B46 67A1 5B47 6785 5B48 67B7 5B49 67EF 5B4A 67B4 5B4B 67EC 5B4C 67B3 5B4D 67E9 5B4E 67B8 5B4F 67E4 5B50 67DE 5B51 67DD 5B52 67E2 5B53 67EE 5B54 67B9 5B55 67CE 5B56 67C6 5B57 67E7 5B58 6A9C 5B59 681E 5B5A 6846 5B5B 6829 5B5C 6840 5B5D 684D 5B5E 6832 5B5F 684E 5B60 68B3 5B61 682B 5B62 6859 5B63 6863 5B64 6877 5B65 687F 5B66 689F 5B67 688F 5B68 68AD 5B69 6894 5B6A 689D 5B6B 689B 5B6C 6883 5B6D 6AAE 5B6E 68B9 5B6F 6874 5B70 68B5 5B71 68A0 5B72 68BA 5B73 690F 5B74 688D 5B75 687E 5B76 6901 5B77 68CA 5B78 6908 5B79 68D8 5B7A 6922 5B7B 6926 5B7C 68E1 5B7D 690C 5B7E 68CD 5C21 68D4 5C22 68E7 5C23 68D5 5C24 6936 5C25 6912 5C26 6904 5C27 68D7 5C28 68E3 5C29 6925 5C2A 68F9 5C2B 68E0 5C2C 68EF 5C2D 6928 5C2E 692A 5C2F 691A 5C30 6923 5C31 6921 5C32 68C6 5C33 6979 5C34 6977 5C35 695C 5C36 6978 5C37 696B 5C38 6954 5C39 697E 5C3A 696E 5C3B 6939 5C3C 6974 5C3D 693D 5C3E 6959 5C3F 6930 5C40 6961 5C41 695E 5C42 695D 5C43 6981 5C44 696A 5C45 69B2 5C46 69AE 5C47 69D0 5C48 69BF 5C49 69C1 5C4A 69D3 5C4B 69BE 5C4C 69CE 5C4D 5BE8 5C4E 69CA 5C4F 69DD 5C50 69BB 5C51 69C3 5C52 69A7 5C53 6A2E 5C54 6991 5C55 69A0 5C56 699C 5C57 6995 5C58 69B4 5C59 69DE 5C5A 69E8 5C5B 6A02 5C5C 6A1B 5C5D 69FF 5C5E 6B0A 5C5F 69F9 5C60 69F2 5C61 69E7 5C62 6A05 5C63 69B1 5C64 6A1E 5C65 69ED 5C66 6A14 5C67 69EB 5C68 6A0A 5C69 6A12 5C6A 6AC1 5C6B 6A23 5C6C 6A13 5C6D 6A44 5C6E 6A0C 5C6F 6A72 5C70 6A36 5C71 6A78 5C72 6A47 5C73 6A62 5C74 6A59 5C75 6A66 5C76 6A48 5C77 6A38 5C78 6A22 5C79 6A90 5C7A 6A8D 5C7B 6AA0 5C7C 6A84 5C7D 6AA2 5C7E 6AA3 5D21 6A97 5D22 8617 5D23 6ABB 5D24 6AC3 5D25 6AC2 5D26 6AB8 5D27 6AB3 5D28 6AAC 5D29 6ADE 5D2A 6AD1 5D2B 6ADF 5D2C 6AAA 5D2D 6ADA 5D2E 6AEA 5D2F 6AFB 5D30 6B05 5D31 8616 5D32 6AFA 5D33 6B12 5D34 6B16 5D35 9B31 5D36 6B1F 5D37 6B38 5D38 6B37 5D39 76DC 5D3A 6B39 5D3B 98EE 5D3C 6B47 5D3D 6B43 5D3E 6B49 5D3F 6B50 5D40 6B59 5D41 6B54 5D42 6B5B 5D43 6B5F 5D44 6B61 5D45 6B78 5D46 6B79 5D47 6B7F 5D48 6B80 5D49 6B84 5D4A 6B83 5D4B 6B8D 5D4C 6B98 5D4D 6B95 5D4E 6B9E 5D4F 6BA4 5D50 6BAA 5D51 6BAB 5D52 6BAF 5D53 6BB2 5D54 6BB1 5D55 6BB3 5D56 6BB7 5D57 6BBC 5D58 6BC6 5D59 6BCB 5D5A 6BD3 5D5B 6BDF 5D5C 6BEC 5D5D 6BEB 5D5E 6BF3 5D5F 6BEF 5D60 9EBE 5D61 6C08 5D62 6C13 5D63 6C14 5D64 6C1B 5D65 6C24 5D66 6C23 5D67 6C5E 5D68 6C55 5D69 6C62 5D6A 6C6A 5D6B 6C82 5D6C 6C8D 5D6D 6C9A 5D6E 6C81 5D6F 6C9B 5D70 6C7E 5D71 6C68 5D72 6C73 5D73 6C92 5D74 6C90 5D75 6CC4 5D76 6CF1 5D77 6CD3 5D78 6CBD 5D79 6CD7 5D7A 6CC5 5D7B 6CDD 5D7C 6CAE 5D7D 6CB1 5D7E 6CBE 5E21 6CBA 5E22 6CDB 5E23 6CEF 5E24 6CD9 5E25 6CEA 5E26 6D1F 5E27 884D 5E28 6D36 5E29 6D2B 5E2A 6D3D 5E2B 6D38 5E2C 6D19 5E2D 6D35 5E2E 6D33 5E2F 6D12 5E30 6D0C 5E31 6D63 5E32 6D93 5E33 6D64 5E34 6D5A 5E35 6D79 5E36 6D59 5E37 6D8E 5E38 6D95 5E39 6FE4 5E3A 6D85 5E3B 6DF9 5E3C 6E15 5E3D 6E0A 5E3E 6DB5 5E3F 6DC7 5E40 6DE6 5E41 6DB8 5E42 6DC6 5E43 6DEC 5E44 6DDE 5E45 6DCC 5E46 6DE8 5E47 6DD2 5E48 6DC5 5E49 6DFA 5E4A 6DD9 5E4B 6DE4 5E4C 6DD5 5E4D 6DEA 5E4E 6DEE 5E4F 6E2D 5E50 6E6E 5E51 6E2E 5E52 6E19 5E53 6E72 5E54 6E5F 5E55 6E3E 5E56 6E23 5E57 6E6B 5E58 6E2B 5E59 6E76 5E5A 6E4D 5E5B 6E1F 5E5C 6E43 5E5D 6E3A 5E5E 6E4E 5E5F 6E24 5E60 6EFF 5E61 6E1D 5E62 6E38 5E63 6E82 5E64 6EAA 5E65 6E98 5E66 6EC9 5E67 6EB7 5E68 6ED3 5E69 6EBD 5E6A 6EAF 5E6B 6EC4 5E6C 6EB2 5E6D 6ED4 5E6E 6ED5 5E6F 6E8F 5E70 6EA5 5E71 6EC2 5E72 6E9F 5E73 6F41 5E74 6F11 5E75 704C 5E76 6EEC 5E77 6EF8 5E78 6EFE 5E79 6F3F 5E7A 6EF2 5E7B 6F31 5E7C 6EEF 5E7D 6F32 5E7E 6ECC 5F21 6F3E 5F22 6F13 5F23 6EF7 5F24 6F86 5F25 6F7A 5F26 6F78 5F27 6F81 5F28 6F80 5F29 6F6F 5F2A 6F5B 5F2B 6FF3 5F2C 6F6D 5F2D 6F82 5F2E 6F7C 5F2F 6F58 5F30 6F8E 5F31 6F91 5F32 6FC2 5F33 6F66 5F34 6FB3 5F35 6FA3 5F36 6FA1 5F37 6FA4 5F38 6FB9 5F39 6FC6 5F3A 6FAA 5F3B 6FDF 5F3C 6FD5 5F3D 6FEC 5F3E 6FD4 5F3F 6FD8 5F40 6FF1 5F41 6FEE 5F42 6FDB 5F43 7009 5F44 700B 5F45 6FFA 5F46 7011 5F47 7001 5F48 700F 5F49 6FFE 5F4A 701B 5F4B 701A 5F4C 6F74 5F4D 701D 5F4E 7018 5F4F 701F 5F50 7030 5F51 703E 5F52 7032 5F53 7051 5F54 7063 5F55 7099 5F56 7092 5F57 70AF 5F58 70F1 5F59 70AC 5F5A 70B8 5F5B 70B3 5F5C 70AE 5F5D 70DF 5F5E 70CB 5F5F 70DD 5F60 70D9 5F61 7109 5F62 70FD 5F63 711C 5F64 7119 5F65 7165 5F66 7155 5F67 7188 5F68 7166 5F69 7162 5F6A 714C 5F6B 7156 5F6C 716C 5F6D 718F 5F6E 71FB 5F6F 7184 5F70 7195 5F71 71A8 5F72 71AC 5F73 71D7 5F74 71B9 5F75 71BE 5F76 71D2 5F77 71C9 5F78 71D4 5F79 71CE 5F7A 71E0 5F7B 71EC 5F7C 71E7 5F7D 71F5 5F7E 71FC 6021 71F9 6022 71FF 6023 720D 6024 7210 6025 721B 6026 7228 6027 722D 6028 722C 6029 7230 602A 7232 602B 723B 602C 723C 602D 723F 602E 7240 602F 7246 6030 724B 6031 7258 6032 7274 6033 727E 6034 7282 6035 7281 6036 7287 6037 7292 6038 7296 6039 72A2 603A 72A7 603B 72B9 603C 72B2 603D 72C3 603E 72C6 603F 72C4 6040 72CE 6041 72D2 6042 72E2 6043 72E0 6044 72E1 6045 72F9 6046 72F7 6047 500F 6048 7317 6049 730A 604A 731C 604B 7316 604C 731D 604D 7334 604E 732F 604F 7329 6050 7325 6051 733E 6052 734E 6053 734F 6054 9ED8 6055 7357 6056 736A 6057 7368 6058 7370 6059 7378 605A 7375 605B 737B 605C 737A 605D 73C8 605E 73B3 605F 73CE 6060 73BB 6061 73C0 6062 73E5 6063 73EE 6064 73DE 6065 74A2 6066 7405 6067 746F 6068 7425 6069 73F8 606A 7432 606B 743A 606C 7455 606D 743F 606E 745F 606F 7459 6070 7441 6071 745C 6072 7469 6073 7470 6074 7463 6075 746A 6076 7476 6077 747E 6078 748B 6079 749E 607A 74A7 607B 74CA 607C 74CF 607D 74D4 607E 73F1 6121 74E0 6122 74E3 6123 74E7 6124 74E9 6125 74EE 6126 74F2 6127 74F0 6128 74F1 6129 74F8 612A 74F7 612B 7504 612C 7503 612D 7505 612E 750C 612F 750E 6130 750D 6131 7515 6132 7513 6133 751E 6134 7526 6135 752C 6136 753C 6137 7544 6138 754D 6139 754A 613A 7549 613B 755B 613C 7546 613D 755A 613E 7569 613F 7564 6140 7567 6141 756B 6142 756D 6143 7578 6144 7576 6145 7586 6146 7587 6147 7574 6148 758A 6149 7589 614A 7582 614B 7594 614C 759A 614D 759D 614E 75A5 614F 75A3 6150 75C2 6151 75B3 6152 75C3 6153 75B5 6154 75BD 6155 75B8 6156 75BC 6157 75B1 6158 75CD 6159 75CA 615A 75D2 615B 75D9 615C 75E3 615D 75DE 615E 75FE 615F 75FF 6160 75FC 6161 7601 6162 75F0 6163 75FA 6164 75F2 6165 75F3 6166 760B 6167 760D 6168 7609 6169 761F 616A 7627 616B 7620 616C 7621 616D 7622 616E 7624 616F 7634 6170 7630 6171 763B 6172 7647 6173 7648 6174 7646 6175 765C 6176 7658 6177 7661 6178 7662 6179 7668 617A 7669 617B 766A 617C 7667 617D 766C 617E 7670 6221 7672 6222 7676 6223 7678 6224 767C 6225 7680 6226 7683 6227 7688 6228 768B 6229 768E 622A 7696 622B 7693 622C 7699 622D 769A 622E 76B0 622F 76B4 6230 76B8 6231 76B9 6232 76BA 6233 76C2 6234 76CD 6235 76D6 6236 76D2 6237 76DE 6238 76E1 6239 76E5 623A 76E7 623B 76EA 623C 862F 623D 76FB 623E 7708 623F 7707 6240 7704 6241 7729 6242 7724 6243 771E 6244 7725 6245 7726 6246 771B 6247 7737 6248 7738 6249 7747 624A 775A 624B 7768 624C 776B 624D 775B 624E 7765 624F 777F 6250 777E 6251 7779 6252 778E 6253 778B 6254 7791 6255 77A0 6256 779E 6257 77B0 6258 77B6 6259 77B9 625A 77BF 625B 77BC 625C 77BD 625D 77BB 625E 77C7 625F 77CD 6260 77D7 6261 77DA 6262 77DC 6263 77E3 6264 77EE 6265 77FC 6266 780C 6267 7812 6268 7926 6269 7820 626A 792A 626B 7845 626C 788E 626D 7874 626E 7886 626F 787C 6270 789A 6271 788C 6272 78A3 6273 78B5 6274 78AA 6275 78AF 6276 78D1 6277 78C6 6278 78CB 6279 78D4 627A 78BE 627B 78BC 627C 78C5 627D 78CA 627E 78EC 6321 78E7 6322 78DA 6323 78FD 6324 78F4 6325 7907 6326 7912 6327 7911 6328 7919 6329 792C 632A 792B 632B 7940 632C 7960 632D 7957 632E 795F 632F 795A 6330 7955 6331 7953 6332 797A 6333 797F 6334 798A 6335 799D 6336 79A7 6337 9F4B 6338 79AA 6339 79AE 633A 79B3 633B 79B9 633C 79BA 633D 79C9 633E 79D5 633F 79E7 6340 79EC 6341 79E1 6342 79E3 6343 7A08 6344 7A0D 6345 7A18 6346 7A19 6347 7A20 6348 7A1F 6349 7980 634A 7A31 634B 7A3B 634C 7A3E 634D 7A37 634E 7A43 634F 7A57 6350 7A49 6351 7A61 6352 7A62 6353 7A69 6354 9F9D 6355 7A70 6356 7A79 6357 7A7D 6358 7A88 6359 7A97 635A 7A95 635B 7A98 635C 7A96 635D 7AA9 635E 7AC8 635F 7AB0 6360 7AB6 6361 7AC5 6362 7AC4 6363 7ABF 6364 9083 6365 7AC7 6366 7ACA 6367 7ACD 6368 7ACF 6369 7AD5 636A 7AD3 636B 7AD9 636C 7ADA 636D 7ADD 636E 7AE1 636F 7AE2 6370 7AE6 6371 7AED 6372 7AF0 6373 7B02 6374 7B0F 6375 7B0A 6376 7B06 6377 7B33 6378 7B18 6379 7B19 637A 7B1E 637B 7B35 637C 7B28 637D 7B36 637E 7B50 6421 7B7A 6422 7B04 6423 7B4D 6424 7B0B 6425 7B4C 6426 7B45 6427 7B75 6428 7B65 6429 7B74 642A 7B67 642B 7B70 642C 7B71 642D 7B6C 642E 7B6E 642F 7B9D 6430 7B98 6431 7B9F 6432 7B8D 6433 7B9C 6434 7B9A 6435 7B8B 6436 7B92 6437 7B8F 6438 7B5D 6439 7B99 643A 7BCB 643B 7BC1 643C 7BCC 643D 7BCF 643E 7BB4 643F 7BC6 6440 7BDD 6441 7BE9 6442 7C11 6443 7C14 6444 7BE6 6445 7BE5 6446 7C60 6447 7C00 6448 7C07 6449 7C13 644A 7BF3 644B 7BF7 644C 7C17 644D 7C0D 644E 7BF6 644F 7C23 6450 7C27 6451 7C2A 6452 7C1F 6453 7C37 6454 7C2B 6455 7C3D 6456 7C4C 6457 7C43 6458 7C54 6459 7C4F 645A 7C40 645B 7C50 645C 7C58 645D 7C5F 645E 7C64 645F 7C56 6460 7C65 6461 7C6C 6462 7C75 6463 7C83 6464 7C90 6465 7CA4 6466 7CAD 6467 7CA2 6468 7CAB 6469 7CA1 646A 7CA8 646B 7CB3 646C 7CB2 646D 7CB1 646E 7CAE 646F 7CB9 6470 7CBD 6471 7CC0 6472 7CC5 6473 7CC2 6474 7CD8 6475 7CD2 6476 7CDC 6477 7CE2 6478 9B3B 6479 7CEF 647A 7CF2 647B 7CF4 647C 7CF6 647D 7CFA 647E 7D06 6521 7D02 6522 7D1C 6523 7D15 6524 7D0A 6525 7D45 6526 7D4B 6527 7D2E 6528 7D32 6529 7D3F 652A 7D35 652B 7D46 652C 7D73 652D 7D56 652E 7D4E 652F 7D72 6530 7D68 6531 7D6E 6532 7D4F 6533 7D63 6534 7D93 6535 7D89 6536 7D5B 6537 7D8F 6538 7D7D 6539 7D9B 653A 7DBA 653B 7DAE 653C 7DA3 653D 7DB5 653E 7DC7 653F 7DBD 6540 7DAB 6541 7E3D 6542 7DA2 6543 7DAF 6544 7DDC 6545 7DB8 6546 7D9F 6547 7DB0 6548 7DD8 6549 7DDD 654A 7DE4 654B 7DDE 654C 7DFB 654D 7DF2 654E 7DE1 654F 7E05 6550 7E0A 6551 7E23 6552 7E21 6553 7E12 6554 7E31 6555 7E1F 6556 7E09 6557 7E0B 6558 7E22 6559 7E46 655A 7E66 655B 7E3B 655C 7E35 655D 7E39 655E 7E43 655F 7E37 6560 7E32 6561 7E3A 6562 7E67 6563 7E5D 6564 7E56 6565 7E5E 6566 7E59 6567 7E5A 6568 7E79 6569 7E6A 656A 7E69 656B 7E7C 656C 7E7B 656D 7E83 656E 7DD5 656F 7E7D 6570 8FAE 6571 7E7F 6572 7E88 6573 7E89 6574 7E8C 6575 7E92 6576 7E90 6577 7E93 6578 7E94 6579 7E96 657A 7E8E 657B 7E9B 657C 7E9C 657D 7F38 657E 7F3A 6621 7F45 6622 7F4C 6623 7F4D 6624 7F4E 6625 7F50 6626 7F51 6627 7F55 6628 7F54 6629 7F58 662A 7F5F 662B 7F60 662C 7F68 662D 7F69 662E 7F67 662F 7F78 6630 7F82 6631 7F86 6632 7F83 6633 7F88 6634 7F87 6635 7F8C 6636 7F94 6637 7F9E 6638 7F9D 6639 7F9A 663A 7FA3 663B 7FAF 663C 7FB2 663D 7FB9 663E 7FAE 663F 7FB6 6640 7FB8 6641 8B71 6642 7FC5 6643 7FC6 6644 7FCA 6645 7FD5 6646 7FD4 6647 7FE1 6648 7FE6 6649 7FE9 664A 7FF3 664B 7FF9 664C 98DC 664D 8006 664E 8004 664F 800B 6650 8012 6651 8018 6652 8019 6653 801C 6654 8021 6655 8028 6656 803F 6657 803B 6658 804A 6659 8046 665A 8052 665B 8058 665C 805A 665D 805F 665E 8062 665F 8068 6660 8073 6661 8072 6662 8070 6663 8076 6664 8079 6665 807D 6666 807F 6667 8084 6668 8086 6669 8085 666A 809B 666B 8093 666C 809A 666D 80AD 666E 5190 666F 80AC 6670 80DB 6671 80E5 6672 80D9 6673 80DD 6674 80C4 6675 80DA 6676 80D6 6677 8109 6678 80EF 6679 80F1 667A 811B 667B 8129 667C 8123 667D 812F 667E 814B 6721 968B 6722 8146 6723 813E 6724 8153 6725 8151 6726 80FC 6727 8171 6728 816E 6729 8165 672A 8166 672B 8174 672C 8183 672D 8188 672E 818A 672F 8180 6730 8182 6731 81A0 6732 8195 6733 81A4 6734 81A3 6735 815F 6736 8193 6737 81A9 6738 81B0 6739 81B5 673A 81BE 673B 81B8 673C 81BD 673D 81C0 673E 81C2 673F 81BA 6740 81C9 6741 81CD 6742 81D1 6743 81D9 6744 81D8 6745 81C8 6746 81DA 6747 81DF 6748 81E0 6749 81E7 674A 81FA 674B 81FB 674C 81FE 674D 8201 674E 8202 674F 8205 6750 8207 6751 820A 6752 820D 6753 8210 6754 8216 6755 8229 6756 822B 6757 8238 6758 8233 6759 8240 675A 8259 675B 8258 675C 825D 675D 825A 675E 825F 675F 8264 6760 8262 6761 8268 6762 826A 6763 826B 6764 822E 6765 8271 6766 8277 6767 8278 6768 827E 6769 828D 676A 8292 676B 82AB 676C 829F 676D 82BB 676E 82AC 676F 82E1 6770 82E3 6771 82DF 6772 82D2 6773 82F4 6774 82F3 6775 82FA 6776 8393 6777 8303 6778 82FB 6779 82F9 677A 82DE 677B 8306 677C 82DC 677D 8309 677E 82D9 6821 8335 6822 8334 6823 8316 6824 8332 6825 8331 6826 8340 6827 8339 6828 8350 6829 8345 682A 832F 682B 832B 682C 8317 682D 8318 682E 8385 682F 839A 6830 83AA 6831 839F 6832 83A2 6833 8396 6834 8323 6835 838E 6836 8387 6837 838A 6838 837C 6839 83B5 683A 8373 683B 8375 683C 83A0 683D 8389 683E 83A8 683F 83F4 6840 8413 6841 83EB 6842 83CE 6843 83FD 6844 8403 6845 83D8 6846 840B 6847 83C1 6848 83F7 6849 8407 684A 83E0 684B 83F2 684C 840D 684D 8422 684E 8420 684F 83BD 6850 8438 6851 8506 6852 83FB 6853 846D 6854 842A 6855 843C 6856 855A 6857 8484 6858 8477 6859 846B 685A 84AD 685B 846E 685C 8482 685D 8469 685E 8446 685F 842C 6860 846F 6861 8479 6862 8435 6863 84CA 6864 8462 6865 84B9 6866 84BF 6867 849F 6868 84D9 6869 84CD 686A 84BB 686B 84DA 686C 84D0 686D 84C1 686E 84C6 686F 84D6 6870 84A1 6871 8521 6872 84FF 6873 84F4 6874 8517 6875 8518 6876 852C 6877 851F 6878 8515 6879 8514 687A 84FC 687B 8540 687C 8563 687D 8558 687E 8548 6921 8541 6922 8602 6923 854B 6924 8555 6925 8580 6926 85A4 6927 8588 6928 8591 6929 858A 692A 85A8 692B 856D 692C 8594 692D 859B 692E 85EA 692F 8587 6930 859C 6931 8577 6932 857E 6933 8590 6934 85C9 6935 85BA 6936 85CF 6937 85B9 6938 85D0 6939 85D5 693A 85DD 693B 85E5 693C 85DC 693D 85F9 693E 860A 693F 8613 6940 860B 6941 85FE 6942 85FA 6943 8606 6944 8622 6945 861A 6946 8630 6947 863F 6948 864D 6949 4E55 694A 8654 694B 865F 694C 8667 694D 8671 694E 8693 694F 86A3 6950 86A9 6951 86AA 6952 868B 6953 868C 6954 86B6 6955 86AF 6956 86C4 6957 86C6 6958 86B0 6959 86C9 695A 8823 695B 86AB 695C 86D4 695D 86DE 695E 86E9 695F 86EC 6960 86DF 6961 86DB 6962 86EF 6963 8712 6964 8706 6965 8708 6966 8700 6967 8703 6968 86FB 6969 8711 696A 8709 696B 870D 696C 86F9 696D 870A 696E 8734 696F 873F 6970 8737 6971 873B 6972 8725 6973 8729 6974 871A 6975 8760 6976 875F 6977 8778 6978 874C 6979 874E 697A 8774 697B 8757 697C 8768 697D 876E 697E 8759 6A21 8753 6A22 8763 6A23 876A 6A24 8805 6A25 87A2 6A26 879F 6A27 8782 6A28 87AF 6A29 87CB 6A2A 87BD 6A2B 87C0 6A2C 87D0 6A2D 96D6 6A2E 87AB 6A2F 87C4 6A30 87B3 6A31 87C7 6A32 87C6 6A33 87BB 6A34 87EF 6A35 87F2 6A36 87E0 6A37 880F 6A38 880D 6A39 87FE 6A3A 87F6 6A3B 87F7 6A3C 880E 6A3D 87D2 6A3E 8811 6A3F 8816 6A40 8815 6A41 8822 6A42 8821 6A43 8831 6A44 8836 6A45 8839 6A46 8827 6A47 883B 6A48 8844 6A49 8842 6A4A 8852 6A4B 8859 6A4C 885E 6A4D 8862 6A4E 886B 6A4F 8881 6A50 887E 6A51 889E 6A52 8875 6A53 887D 6A54 88B5 6A55 8872 6A56 8882 6A57 8897 6A58 8892 6A59 88AE 6A5A 8899 6A5B 88A2 6A5C 888D 6A5D 88A4 6A5E 88B0 6A5F 88BF 6A60 88B1 6A61 88C3 6A62 88C4 6A63 88D4 6A64 88D8 6A65 88D9 6A66 88DD 6A67 88F9 6A68 8902 6A69 88FC 6A6A 88F4 6A6B 88E8 6A6C 88F2 6A6D 8904 6A6E 890C 6A6F 890A 6A70 8913 6A71 8943 6A72 891E 6A73 8925 6A74 892A 6A75 892B 6A76 8941 6A77 8944 6A78 893B 6A79 8936 6A7A 8938 6A7B 894C 6A7C 891D 6A7D 8960 6A7E 895E 6B21 8966 6B22 8964 6B23 896D 6B24 896A 6B25 896F 6B26 8974 6B27 8977 6B28 897E 6B29 8983 6B2A 8988 6B2B 898A 6B2C 8993 6B2D 8998 6B2E 89A1 6B2F 89A9 6B30 89A6 6B31 89AC 6B32 89AF 6B33 89B2 6B34 89BA 6B35 89BD 6B36 89BF 6B37 89C0 6B38 89DA 6B39 89DC 6B3A 89DD 6B3B 89E7 6B3C 89F4 6B3D 89F8 6B3E 8A03 6B3F 8A16 6B40 8A10 6B41 8A0C 6B42 8A1B 6B43 8A1D 6B44 8A25 6B45 8A36 6B46 8A41 6B47 8A5B 6B48 8A52 6B49 8A46 6B4A 8A48 6B4B 8A7C 6B4C 8A6D 6B4D 8A6C 6B4E 8A62 6B4F 8A85 6B50 8A82 6B51 8A84 6B52 8AA8 6B53 8AA1 6B54 8A91 6B55 8AA5 6B56 8AA6 6B57 8A9A 6B58 8AA3 6B59 8AC4 6B5A 8ACD 6B5B 8AC2 6B5C 8ADA 6B5D 8AEB 6B5E 8AF3 6B5F 8AE7 6B60 8AE4 6B61 8AF1 6B62 8B14 6B63 8AE0 6B64 8AE2 6B65 8AF7 6B66 8ADE 6B67 8ADB 6B68 8B0C 6B69 8B07 6B6A 8B1A 6B6B 8AE1 6B6C 8B16 6B6D 8B10 6B6E 8B17 6B6F 8B20 6B70 8B33 6B71 97AB 6B72 8B26 6B73 8B2B 6B74 8B3E 6B75 8B28 6B76 8B41 6B77 8B4C 6B78 8B4F 6B79 8B4E 6B7A 8B49 6B7B 8B56 6B7C 8B5B 6B7D 8B5A 6B7E 8B6B 6C21 8B5F 6C22 8B6C 6C23 8B6F 6C24 8B74 6C25 8B7D 6C26 8B80 6C27 8B8C 6C28 8B8E 6C29 8B92 6C2A 8B93 6C2B 8B96 6C2C 8B99 6C2D 8B9A 6C2E 8C3A 6C2F 8C41 6C30 8C3F 6C31 8C48 6C32 8C4C 6C33 8C4E 6C34 8C50 6C35 8C55 6C36 8C62 6C37 8C6C 6C38 8C78 6C39 8C7A 6C3A 8C82 6C3B 8C89 6C3C 8C85 6C3D 8C8A 6C3E 8C8D 6C3F 8C8E 6C40 8C94 6C41 8C7C 6C42 8C98 6C43 621D 6C44 8CAD 6C45 8CAA 6C46 8CBD 6C47 8CB2 6C48 8CB3 6C49 8CAE 6C4A 8CB6 6C4B 8CC8 6C4C 8CC1 6C4D 8CE4 6C4E 8CE3 6C4F 8CDA 6C50 8CFD 6C51 8CFA 6C52 8CFB 6C53 8D04 6C54 8D05 6C55 8D0A 6C56 8D07 6C57 8D0F 6C58 8D0D 6C59 8D10 6C5A 9F4E 6C5B 8D13 6C5C 8CCD 6C5D 8D14 6C5E 8D16 6C5F 8D67 6C60 8D6D 6C61 8D71 6C62 8D73 6C63 8D81 6C64 8D99 6C65 8DC2 6C66 8DBE 6C67 8DBA 6C68 8DCF 6C69 8DDA 6C6A 8DD6 6C6B 8DCC 6C6C 8DDB 6C6D 8DCB 6C6E 8DEA 6C6F 8DEB 6C70 8DDF 6C71 8DE3 6C72 8DFC 6C73 8E08 6C74 8E09 6C75 8DFF 6C76 8E1D 6C77 8E1E 6C78 8E10 6C79 8E1F 6C7A 8E42 6C7B 8E35 6C7C 8E30 6C7D 8E34 6C7E 8E4A 6D21 8E47 6D22 8E49 6D23 8E4C 6D24 8E50 6D25 8E48 6D26 8E59 6D27 8E64 6D28 8E60 6D29 8E2A 6D2A 8E63 6D2B 8E55 6D2C 8E76 6D2D 8E72 6D2E 8E7C 6D2F 8E81 6D30 8E87 6D31 8E85 6D32 8E84 6D33 8E8B 6D34 8E8A 6D35 8E93 6D36 8E91 6D37 8E94 6D38 8E99 6D39 8EAA 6D3A 8EA1 6D3B 8EAC 6D3C 8EB0 6D3D 8EC6 6D3E 8EB1 6D3F 8EBE 6D40 8EC5 6D41 8EC8 6D42 8ECB 6D43 8EDB 6D44 8EE3 6D45 8EFC 6D46 8EFB 6D47 8EEB 6D48 8EFE 6D49 8F0A 6D4A 8F05 6D4B 8F15 6D4C 8F12 6D4D 8F19 6D4E 8F13 6D4F 8F1C 6D50 8F1F 6D51 8F1B 6D52 8F0C 6D53 8F26 6D54 8F33 6D55 8F3B 6D56 8F39 6D57 8F45 6D58 8F42 6D59 8F3E 6D5A 8F4C 6D5B 8F49 6D5C 8F46 6D5D 8F4E 6D5E 8F57 6D5F 8F5C 6D60 8F62 6D61 8F63 6D62 8F64 6D63 8F9C 6D64 8F9F 6D65 8FA3 6D66 8FAD 6D67 8FAF 6D68 8FB7 6D69 8FDA 6D6A 8FE5 6D6B 8FE2 6D6C 8FEA 6D6D 8FEF 6D6E 9087 6D6F 8FF4 6D70 9005 6D71 8FF9 6D72 8FFA 6D73 9011 6D74 9015 6D75 9021 6D76 900D 6D77 901E 6D78 9016 6D79 900B 6D7A 9027 6D7B 9036 6D7C 9035 6D7D 9039 6D7E 8FF8 6E21 904F 6E22 9050 6E23 9051 6E24 9052 6E25 900E 6E26 9049 6E27 903E 6E28 9056 6E29 9058 6E2A 905E 6E2B 9068 6E2C 906F 6E2D 9076 6E2E 96A8 6E2F 9072 6E30 9082 6E31 907D 6E32 9081 6E33 9080 6E34 908A 6E35 9089 6E36 908F 6E37 90A8 6E38 90AF 6E39 90B1 6E3A 90B5 6E3B 90E2 6E3C 90E4 6E3D 6248 6E3E 90DB 6E3F 9102 6E40 9112 6E41 9119 6E42 9132 6E43 9130 6E44 914A 6E45 9156 6E46 9158 6E47 9163 6E48 9165 6E49 9169 6E4A 9173 6E4B 9172 6E4C 918B 6E4D 9189 6E4E 9182 6E4F 91A2 6E50 91AB 6E51 91AF 6E52 91AA 6E53 91B5 6E54 91B4 6E55 91BA 6E56 91C0 6E57 91C1 6E58 91C9 6E59 91CB 6E5A 91D0 6E5B 91D6 6E5C 91DF 6E5D 91E1 6E5E 91DB 6E5F 91FC 6E60 91F5 6E61 91F6 6E62 921E 6E63 91FF 6E64 9214 6E65 922C 6E66 9215 6E67 9211 6E68 925E 6E69 9257 6E6A 9245 6E6B 9249 6E6C 9264 6E6D 9248 6E6E 9295 6E6F 923F 6E70 924B 6E71 9250 6E72 929C 6E73 9296 6E74 9293 6E75 929B 6E76 925A 6E77 92CF 6E78 92B9 6E79 92B7 6E7A 92E9 6E7B 930F 6E7C 92FA 6E7D 9344 6E7E 932E 6F21 9319 6F22 9322 6F23 931A 6F24 9323 6F25 933A 6F26 9335 6F27 933B 6F28 935C 6F29 9360 6F2A 937C 6F2B 936E 6F2C 9356 6F2D 93B0 6F2E 93AC 6F2F 93AD 6F30 9394 6F31 93B9 6F32 93D6 6F33 93D7 6F34 93E8 6F35 93E5 6F36 93D8 6F37 93C3 6F38 93DD 6F39 93D0 6F3A 93C8 6F3B 93E4 6F3C 941A 6F3D 9414 6F3E 9413 6F3F 9403 6F40 9407 6F41 9410 6F42 9436 6F43 942B 6F44 9435 6F45 9421 6F46 943A 6F47 9441 6F48 9452 6F49 9444 6F4A 945B 6F4B 9460 6F4C 9462 6F4D 945E 6F4E 946A 6F4F 9229 6F50 9470 6F51 9475 6F52 9477 6F53 947D 6F54 945A 6F55 947C 6F56 947E 6F57 9481 6F58 947F 6F59 9582 6F5A 9587 6F5B 958A 6F5C 9594 6F5D 9596 6F5E 9598 6F5F 9599 6F60 95A0 6F61 95A8 6F62 95A7 6F63 95AD 6F64 95BC 6F65 95BB 6F66 95B9 6F67 95BE 6F68 95CA 6F69 6FF6 6F6A 95C3 6F6B 95CD 6F6C 95CC 6F6D 95D5 6F6E 95D4 6F6F 95D6 6F70 95DC 6F71 95E1 6F72 95E5 6F73 95E2 6F74 9621 6F75 9628 6F76 962E 6F77 962F 6F78 9642 6F79 964C 6F7A 964F 6F7B 964B 6F7C 9677 6F7D 965C 6F7E 965E 7021 965D 7022 965F 7023 9666 7024 9672 7025 966C 7026 968D 7027 9698 7028 9695 7029 9697 702A 96AA 702B 96A7 702C 96B1 702D 96B2 702E 96B0 702F 96B4 7030 96B6 7031 96B8 7032 96B9 7033 96CE 7034 96CB 7035 96C9 7036 96CD 7037 894D 7038 96DC 7039 970D 703A 96D5 703B 96F9 703C 9704 703D 9706 703E 9708 703F 9713 7040 970E 7041 9711 7042 970F 7043 9716 7044 9719 7045 9724 7046 972A 7047 9730 7048 9739 7049 973D 704A 973E 704B 9744 704C 9746 704D 9748 704E 9742 704F 9749 7050 975C 7051 9760 7052 9764 7053 9766 7054 9768 7055 52D2 7056 976B 7057 9771 7058 9779 7059 9785 705A 977C 705B 9781 705C 977A 705D 9786 705E 978B 705F 978F 7060 9790 7061 979C 7062 97A8 7063 97A6 7064 97A3 7065 97B3 7066 97B4 7067 97C3 7068 97C6 7069 97C8 706A 97CB 706B 97DC 706C 97ED 706D 9F4F 706E 97F2 706F 7ADF 7070 97F6 7071 97F5 7072 980F 7073 980C 7074 9838 7075 9824 7076 9821 7077 9837 7078 983D 7079 9846 707A 984F 707B 984B 707C 986B 707D 986F 707E 9870 7121 9871 7122 9874 7123 9873 7124 98AA 7125 98AF 7126 98B1 7127 98B6 7128 98C4 7129 98C3 712A 98C6 712B 98E9 712C 98EB 712D 9903 712E 9909 712F 9912 7130 9914 7131 9918 7132 9921 7133 991D 7134 991E 7135 9924 7136 9920 7137 992C 7138 992E 7139 993D 713A 993E 713B 9942 713C 9949 713D 9945 713E 9950 713F 994B 7140 9951 7141 9952 7142 994C 7143 9955 7144 9997 7145 9998 7146 99A5 7147 99AD 7148 99AE 7149 99BC 714A 99DF 714B 99DB 714C 99DD 714D 99D8 714E 99D1 714F 99ED 7150 99EE 7151 99F1 7152 99F2 7153 99FB 7154 99F8 7155 9A01 7156 9A0F 7157 9A05 7158 99E2 7159 9A19 715A 9A2B 715B 9A37 715C 9A45 715D 9A42 715E 9A40 715F 9A43 7160 9A3E 7161 9A55 7162 9A4D 7163 9A5B 7164 9A57 7165 9A5F 7166 9A62 7167 9A65 7168 9A64 7169 9A69 716A 9A6B 716B 9A6A 716C 9AAD 716D 9AB0 716E 9ABC 716F 9AC0 7170 9ACF 7171 9AD1 7172 9AD3 7173 9AD4 7174 9ADE 7175 9ADF 7176 9AE2 7177 9AE3 7178 9AE6 7179 9AEF 717A 9AEB 717B 9AEE 717C 9AF4 717D 9AF1 717E 9AF7 7221 9AFB 7222 9B06 7223 9B18 7224 9B1A 7225 9B1F 7226 9B22 7227 9B23 7228 9B25 7229 9B27 722A 9B28 722B 9B29 722C 9B2A 722D 9B2E 722E 9B2F 722F 9B32 7230 9B44 7231 9B43 7232 9B4F 7233 9B4D 7234 9B4E 7235 9B51 7236 9B58 7237 9B74 7238 9B93 7239 9B83 723A 9B91 723B 9B96 723C 9B97 723D 9B9F 723E 9BA0 723F 9BA8 7240 9BB4 7241 9BC0 7242 9BCA 7243 9BB9 7244 9BC6 7245 9BCF 7246 9BD1 7247 9BD2 7248 9BE3 7249 9BE2 724A 9BE4 724B 9BD4 724C 9BE1 724D 9C3A 724E 9BF2 724F 9BF1 7250 9BF0 7251 9C15 7252 9C14 7253 9C09 7254 9C13 7255 9C0C 7256 9C06 7257 9C08 7258 9C12 7259 9C0A 725A 9C04 725B 9C2E 725C 9C1B 725D 9C25 725E 9C24 725F 9C21 7260 9C30 7261 9C47 7262 9C32 7263 9C46 7264 9C3E 7265 9C5A 7266 9C60 7267 9C67 7268 9C76 7269 9C78 726A 9CE7 726B 9CEC 726C 9CF0 726D 9D09 726E 9D08 726F 9CEB 7270 9D03 7271 9D06 7272 9D2A 7273 9D26 7274 9DAF 7275 9D23 7276 9D1F 7277 9D44 7278 9D15 7279 9D12 727A 9D41 727B 9D3F 727C 9D3E 727D 9D46 727E 9D48 7321 9D5D 7322 9D5E 7323 9D64 7324 9D51 7325 9D50 7326 9D59 7327 9D72 7328 9D89 7329 9D87 732A 9DAB 732B 9D6F 732C 9D7A 732D 9D9A 732E 9DA4 732F 9DA9 7330 9DB2 7331 9DC4 7332 9DC1 7333 9DBB 7334 9DB8 7335 9DBA 7336 9DC6 7337 9DCF 7338 9DC2 7339 9DD9 733A 9DD3 733B 9DF8 733C 9DE6 733D 9DED 733E 9DEF 733F 9DFD 7340 9E1A 7341 9E1B 7342 9E1E 7343 9E75 7344 9E79 7345 9E7D 7346 9E81 7347 9E88 7348 9E8B 7349 9E8C 734A 9E92 734B 9E95 734C 9E91 734D 9E9D 734E 9EA5 734F 9EA9 7350 9EB8 7351 9EAA 7352 9EAD 7353 9761 7354 9ECC 7355 9ECE 7356 9ECF 7357 9ED0 7358 9ED4 7359 9EDC 735A 9EDE 735B 9EDD 735C 9EE0 735D 9EE5 735E 9EE8 735F 9EEF 7360 9EF4 7361 9EF6 7362 9EF7 7363 9EF9 7364 9EFB 7365 9EFC 7366 9EFD 7367 9F07 7368 9F08 7369 76B7 736A 9F15 736B 9F21 736C 9F2C 736D 9F3E 736E 9F4A 736F 9F52 7370 9F54 7371 9F63 7372 9F5F 7373 9F60 7374 9F61 7375 9F66 7376 9F67 7377 9F6C 7378 9F6A 7379 9F77 737A 9F72 737B 9F76 737C 9F95 737D 9F9C 737E 9FA0 7421 582F 7422 69C7 7423 9059 7424 7464 7425 51DC 7426 7199 cyrus-imspd-v1.8/lib/charset/iso-2022-kr.t0100644004310100000120000237776607372056422017402 0ustar shadowstaff :US-ASCII 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E :KSC-5601 F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B >ESC 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) :ESC < 24 :ESC-$ :ESC-$ < 29 :ESC-$-) :ESC-$-) < 43 :US-ASCII :KSC-5601 0f :US-ASCII 8141 AC02 # HANGUL SYLLABLE KIYEOK-A-SSANGKIYEOK 8142 AC03 # HANGUL SYLLABLE KIYEOK-A-KIYEOKSIOS 8143 AC05 # HANGUL SYLLABLE KIYEOK-A-NIEUNCIEUC 8144 AC06 # HANGUL SYLLABLE KIYEOK-A-NIEUNHIEUH 8145 AC0B # HANGUL SYLLABLE KIYEOK-A-RIEULPIEUP 8146 AC0C # HANGUL SYLLABLE KIYEOK-A-RIEULSIOS 8147 AC0D # HANGUL SYLLABLE KIYEOK-A-RIEULTHIEUTH 8148 AC0E # HANGUL SYLLABLE KIYEOK-A-RIEULPHIEUPH 8149 AC0F # HANGUL SYLLABLE KIYEOK-A-RIEULHIEUH 814A AC18 # HANGUL SYLLABLE KIYEOK-A-KHIEUKH 814B AC1E # HANGUL SYLLABLE KIYEOK-AE-SSANGKIYEOK 814C AC1F # HANGUL SYLLABLE KIYEOK-AE-KIYEOKSIOS 814D AC21 # HANGUL SYLLABLE KIYEOK-AE-NIEUNCIEUC 814E AC22 # HANGUL SYLLABLE KIYEOK-AE-NIEUNHIEUH 814F AC23 # HANGUL SYLLABLE KIYEOK-AE-TIKEUT 8150 AC25 # HANGUL SYLLABLE KIYEOK-AE-RIEULKIYEOK 8151 AC26 # HANGUL SYLLABLE KIYEOK-AE-RIEULMIEUM 8152 AC27 # HANGUL SYLLABLE KIYEOK-AE-RIEULPIEUP 8153 AC28 # HANGUL SYLLABLE KIYEOK-AE-RIEULSIOS 8154 AC29 # HANGUL SYLLABLE KIYEOK-AE-RIEULTHIEUTH 8155 AC2A # HANGUL SYLLABLE KIYEOK-AE-RIEULPHIEUPH 8156 AC2B # HANGUL SYLLABLE KIYEOK-AE-RIEULHIEUH 8157 AC2E # HANGUL SYLLABLE KIYEOK-AE-PIEUPSIOS 8158 AC32 # HANGUL SYLLABLE KIYEOK-AE-CIEUC 8159 AC33 # HANGUL SYLLABLE KIYEOK-AE-CHIEUCH 815A AC34 # HANGUL SYLLABLE KIYEOK-AE-KHIEUKH 8161 AC35 # HANGUL SYLLABLE KIYEOK-AE-THIEUTH 8162 AC36 # HANGUL SYLLABLE KIYEOK-AE-PHIEUPH 8163 AC37 # HANGUL SYLLABLE KIYEOK-AE-HIEUH 8164 AC3A # HANGUL SYLLABLE KIYEOK-YA-SSANGKIYEOK 8165 AC3B # HANGUL SYLLABLE KIYEOK-YA-KIYEOKSIOS 8166 AC3D # HANGUL SYLLABLE KIYEOK-YA-NIEUNCIEUC 8167 AC3E # HANGUL SYLLABLE KIYEOK-YA-NIEUNHIEUH 8168 AC3F # HANGUL SYLLABLE KIYEOK-YA-TIKEUT 8169 AC41 # HANGUL SYLLABLE KIYEOK-YA-RIEULKIYEOK 816A AC42 # HANGUL SYLLABLE KIYEOK-YA-RIEULMIEUM 816B AC43 # HANGUL SYLLABLE KIYEOK-YA-RIEULPIEUP 816C AC44 # HANGUL SYLLABLE KIYEOK-YA-RIEULSIOS 816D AC45 # HANGUL SYLLABLE KIYEOK-YA-RIEULTHIEUTH 816E AC46 # HANGUL SYLLABLE KIYEOK-YA-RIEULPHIEUPH 816F AC47 # HANGUL SYLLABLE KIYEOK-YA-RIEULHIEUH 8170 AC48 # HANGUL SYLLABLE KIYEOK-YA-MIEUM 8171 AC49 # HANGUL SYLLABLE KIYEOK-YA-PIEUP 8172 AC4A # HANGUL SYLLABLE KIYEOK-YA-PIEUPSIOS 8173 AC4C # HANGUL SYLLABLE KIYEOK-YA-SSANGSIOS 8174 AC4E # HANGUL SYLLABLE KIYEOK-YA-CIEUC 8175 AC4F # HANGUL SYLLABLE KIYEOK-YA-CHIEUCH 8176 AC50 # HANGUL SYLLABLE KIYEOK-YA-KHIEUKH 8177 AC51 # HANGUL SYLLABLE KIYEOK-YA-THIEUTH 8178 AC52 # HANGUL SYLLABLE KIYEOK-YA-PHIEUPH 8179 AC53 # HANGUL SYLLABLE KIYEOK-YA-HIEUH 817A AC55 # HANGUL SYLLABLE KIYEOK-YAE-KIYEOK 8181 AC56 # HANGUL SYLLABLE KIYEOK-YAE-SSANGKIYEOK 8182 AC57 # HANGUL SYLLABLE KIYEOK-YAE-KIYEOKSIOS 8183 AC59 # HANGUL SYLLABLE KIYEOK-YAE-NIEUNCIEUC 8184 AC5A # HANGUL SYLLABLE KIYEOK-YAE-NIEUNHIEUH 8185 AC5B # HANGUL SYLLABLE KIYEOK-YAE-TIKEUT 8186 AC5D # HANGUL SYLLABLE KIYEOK-YAE-RIEULKIYEOK 8187 AC5E # HANGUL SYLLABLE KIYEOK-YAE-RIEULMIEUM 8188 AC5F # HANGUL SYLLABLE KIYEOK-YAE-RIEULPIEUP 8189 AC60 # HANGUL SYLLABLE KIYEOK-YAE-RIEULSIOS 818A AC61 # HANGUL SYLLABLE KIYEOK-YAE-RIEULTHIEUTH 818B AC62 # HANGUL SYLLABLE KIYEOK-YAE-RIEULPHIEUPH 818C AC63 # HANGUL SYLLABLE KIYEOK-YAE-RIEULHIEUH 818D AC64 # HANGUL SYLLABLE KIYEOK-YAE-MIEUM 818E AC65 # HANGUL SYLLABLE KIYEOK-YAE-PIEUP 818F AC66 # HANGUL SYLLABLE KIYEOK-YAE-PIEUPSIOS 8190 AC67 # HANGUL SYLLABLE KIYEOK-YAE-SIOS 8191 AC68 # HANGUL SYLLABLE KIYEOK-YAE-SSANGSIOS 8192 AC69 # HANGUL SYLLABLE KIYEOK-YAE-IEUNG 8193 AC6A # HANGUL SYLLABLE KIYEOK-YAE-CIEUC 8194 AC6B # HANGUL SYLLABLE KIYEOK-YAE-CHIEUCH 8195 AC6C # HANGUL SYLLABLE KIYEOK-YAE-KHIEUKH 8196 AC6D # HANGUL SYLLABLE KIYEOK-YAE-THIEUTH 8197 AC6E # HANGUL SYLLABLE KIYEOK-YAE-PHIEUPH 8198 AC6F # HANGUL SYLLABLE KIYEOK-YAE-HIEUH 8199 AC72 # HANGUL SYLLABLE KIYEOK-EO-SSANGKIYEOK 819A AC73 # HANGUL SYLLABLE KIYEOK-EO-KIYEOKSIOS 819B AC75 # HANGUL SYLLABLE KIYEOK-EO-NIEUNCIEUC 819C AC76 # HANGUL SYLLABLE KIYEOK-EO-NIEUNHIEUH 819D AC79 # HANGUL SYLLABLE KIYEOK-EO-RIEULKIYEOK 819E AC7B # HANGUL SYLLABLE KIYEOK-EO-RIEULPIEUP 819F AC7C # HANGUL SYLLABLE KIYEOK-EO-RIEULSIOS 81A0 AC7D # HANGUL SYLLABLE KIYEOK-EO-RIEULTHIEUTH 81A1 AC7E # HANGUL SYLLABLE KIYEOK-EO-RIEULPHIEUPH 81A2 AC7F # HANGUL SYLLABLE KIYEOK-EO-RIEULHIEUH 81A3 AC82 # HANGUL SYLLABLE KIYEOK-EO-PIEUPSIOS 81A4 AC87 # HANGUL SYLLABLE KIYEOK-EO-CHIEUCH 81A5 AC88 # HANGUL SYLLABLE KIYEOK-EO-KHIEUKH 81A6 AC8D # HANGUL SYLLABLE KIYEOK-E-KIYEOK 81A7 AC8E # HANGUL SYLLABLE KIYEOK-E-SSANGKIYEOK 81A8 AC8F # HANGUL SYLLABLE KIYEOK-E-KIYEOKSIOS 81A9 AC91 # HANGUL SYLLABLE KIYEOK-E-NIEUNCIEUC 81AA AC92 # HANGUL SYLLABLE KIYEOK-E-NIEUNHIEUH 81AB AC93 # HANGUL SYLLABLE KIYEOK-E-TIKEUT 81AC AC95 # HANGUL SYLLABLE KIYEOK-E-RIEULKIYEOK 81AD AC96 # HANGUL SYLLABLE KIYEOK-E-RIEULMIEUM 81AE AC97 # HANGUL SYLLABLE KIYEOK-E-RIEULPIEUP 81AF AC98 # HANGUL SYLLABLE KIYEOK-E-RIEULSIOS 81B0 AC99 # HANGUL SYLLABLE KIYEOK-E-RIEULTHIEUTH 81B1 AC9A # HANGUL SYLLABLE KIYEOK-E-RIEULPHIEUPH 81B2 AC9B # HANGUL SYLLABLE KIYEOK-E-RIEULHIEUH 81B3 AC9E # HANGUL SYLLABLE KIYEOK-E-PIEUPSIOS 81B4 ACA2 # HANGUL SYLLABLE KIYEOK-E-CIEUC 81B5 ACA3 # HANGUL SYLLABLE KIYEOK-E-CHIEUCH 81B6 ACA4 # HANGUL SYLLABLE KIYEOK-E-KHIEUKH 81B7 ACA5 # HANGUL SYLLABLE KIYEOK-E-THIEUTH 81B8 ACA6 # HANGUL SYLLABLE KIYEOK-E-PHIEUPH 81B9 ACA7 # HANGUL SYLLABLE KIYEOK-E-HIEUH 81BA ACAB # HANGUL SYLLABLE KIYEOK-YEO-KIYEOKSIOS 81BB ACAD # HANGUL SYLLABLE KIYEOK-YEO-NIEUNCIEUC 81BC ACAE # HANGUL SYLLABLE KIYEOK-YEO-NIEUNHIEUH 81BD ACB1 # HANGUL SYLLABLE KIYEOK-YEO-RIEULKIYEOK 81BE ACB2 # HANGUL SYLLABLE KIYEOK-YEO-RIEULMIEUM 81BF ACB3 # HANGUL SYLLABLE KIYEOK-YEO-RIEULPIEUP 81C0 ACB4 # HANGUL SYLLABLE KIYEOK-YEO-RIEULSIOS 81C1 ACB5 # HANGUL SYLLABLE KIYEOK-YEO-RIEULTHIEUTH 81C2 ACB6 # HANGUL SYLLABLE KIYEOK-YEO-RIEULPHIEUPH 81C3 ACB7 # HANGUL SYLLABLE KIYEOK-YEO-RIEULHIEUH 81C4 ACBA # HANGUL SYLLABLE KIYEOK-YEO-PIEUPSIOS 81C5 ACBE # HANGUL SYLLABLE KIYEOK-YEO-CIEUC 81C6 ACBF # HANGUL SYLLABLE KIYEOK-YEO-CHIEUCH 81C7 ACC0 # HANGUL SYLLABLE KIYEOK-YEO-KHIEUKH 81C8 ACC2 # HANGUL SYLLABLE KIYEOK-YEO-PHIEUPH 81C9 ACC3 # HANGUL SYLLABLE KIYEOK-YEO-HIEUH 81CA ACC5 # HANGUL SYLLABLE KIYEOK-YE-KIYEOK 81CB ACC6 # HANGUL SYLLABLE KIYEOK-YE-SSANGKIYEOK 81CC ACC7 # HANGUL SYLLABLE KIYEOK-YE-KIYEOKSIOS 81CD ACC9 # HANGUL SYLLABLE KIYEOK-YE-NIEUNCIEUC 81CE ACCA # HANGUL SYLLABLE KIYEOK-YE-NIEUNHIEUH 81CF ACCB # HANGUL SYLLABLE KIYEOK-YE-TIKEUT 81D0 ACCD # HANGUL SYLLABLE KIYEOK-YE-RIEULKIYEOK 81D1 ACCE # HANGUL SYLLABLE KIYEOK-YE-RIEULMIEUM 81D2 ACCF # HANGUL SYLLABLE KIYEOK-YE-RIEULPIEUP 81D3 ACD0 # HANGUL SYLLABLE KIYEOK-YE-RIEULSIOS 81D4 ACD1 # HANGUL SYLLABLE KIYEOK-YE-RIEULTHIEUTH 81D5 ACD2 # HANGUL SYLLABLE KIYEOK-YE-RIEULPHIEUPH 81D6 ACD3 # HANGUL SYLLABLE KIYEOK-YE-RIEULHIEUH 81D7 ACD4 # HANGUL SYLLABLE KIYEOK-YE-MIEUM 81D8 ACD6 # HANGUL SYLLABLE KIYEOK-YE-PIEUPSIOS 81D9 ACD8 # HANGUL SYLLABLE KIYEOK-YE-SSANGSIOS 81DA ACD9 # HANGUL SYLLABLE KIYEOK-YE-IEUNG 81DB ACDA # HANGUL SYLLABLE KIYEOK-YE-CIEUC 81DC ACDB # HANGUL SYLLABLE KIYEOK-YE-CHIEUCH 81DD ACDC # HANGUL SYLLABLE KIYEOK-YE-KHIEUKH 81DE ACDD # HANGUL SYLLABLE KIYEOK-YE-THIEUTH 81DF ACDE # HANGUL SYLLABLE KIYEOK-YE-PHIEUPH 81E0 ACDF # HANGUL SYLLABLE KIYEOK-YE-HIEUH 81E1 ACE2 # HANGUL SYLLABLE KIYEOK-O-SSANGKIYEOK 81E2 ACE3 # HANGUL SYLLABLE KIYEOK-O-KIYEOKSIOS 81E3 ACE5 # HANGUL SYLLABLE KIYEOK-O-NIEUNCIEUC 81E4 ACE6 # HANGUL SYLLABLE KIYEOK-O-NIEUNHIEUH 81E5 ACE9 # HANGUL SYLLABLE KIYEOK-O-RIEULKIYEOK 81E6 ACEB # HANGUL SYLLABLE KIYEOK-O-RIEULPIEUP 81E7 ACED # HANGUL SYLLABLE KIYEOK-O-RIEULTHIEUTH 81E8 ACEE # HANGUL SYLLABLE KIYEOK-O-RIEULPHIEUPH 81E9 ACF2 # HANGUL SYLLABLE KIYEOK-O-PIEUPSIOS 81EA ACF4 # HANGUL SYLLABLE KIYEOK-O-SSANGSIOS 81EB ACF7 # HANGUL SYLLABLE KIYEOK-O-CHIEUCH 81EC ACF8 # HANGUL SYLLABLE KIYEOK-O-KHIEUKH 81ED ACF9 # HANGUL SYLLABLE KIYEOK-O-THIEUTH 81EE ACFA # HANGUL SYLLABLE KIYEOK-O-PHIEUPH 81EF ACFB # HANGUL SYLLABLE KIYEOK-O-HIEUH 81F0 ACFE # HANGUL SYLLABLE KIYEOK-WA-SSANGKIYEOK 81F1 ACFF # HANGUL SYLLABLE KIYEOK-WA-KIYEOKSIOS 81F2 AD01 # HANGUL SYLLABLE KIYEOK-WA-NIEUNCIEUC 81F3 AD02 # HANGUL SYLLABLE KIYEOK-WA-NIEUNHIEUH 81F4 AD03 # HANGUL SYLLABLE KIYEOK-WA-TIKEUT 81F5 AD05 # HANGUL SYLLABLE KIYEOK-WA-RIEULKIYEOK 81F6 AD07 # HANGUL SYLLABLE KIYEOK-WA-RIEULPIEUP 81F7 AD08 # HANGUL SYLLABLE KIYEOK-WA-RIEULSIOS 81F8 AD09 # HANGUL SYLLABLE KIYEOK-WA-RIEULTHIEUTH 81F9 AD0A # HANGUL SYLLABLE KIYEOK-WA-RIEULPHIEUPH 81FA AD0B # HANGUL SYLLABLE KIYEOK-WA-RIEULHIEUH 81FB AD0E # HANGUL SYLLABLE KIYEOK-WA-PIEUPSIOS 81FC AD10 # HANGUL SYLLABLE KIYEOK-WA-SSANGSIOS 81FD AD12 # HANGUL SYLLABLE KIYEOK-WA-CIEUC 81FE AD13 # HANGUL SYLLABLE KIYEOK-WA-CHIEUCH 8241 AD14 # HANGUL SYLLABLE KIYEOK-WA-KHIEUKH 8242 AD15 # HANGUL SYLLABLE KIYEOK-WA-THIEUTH 8243 AD16 # HANGUL SYLLABLE KIYEOK-WA-PHIEUPH 8244 AD17 # HANGUL SYLLABLE KIYEOK-WA-HIEUH 8245 AD19 # HANGUL SYLLABLE KIYEOK-WAE-KIYEOK 8246 AD1A # HANGUL SYLLABLE KIYEOK-WAE-SSANGKIYEOK 8247 AD1B # HANGUL SYLLABLE KIYEOK-WAE-KIYEOKSIOS 8248 AD1D # HANGUL SYLLABLE KIYEOK-WAE-NIEUNCIEUC 8249 AD1E # HANGUL SYLLABLE KIYEOK-WAE-NIEUNHIEUH 824A AD1F # HANGUL SYLLABLE KIYEOK-WAE-TIKEUT 824B AD21 # HANGUL SYLLABLE KIYEOK-WAE-RIEULKIYEOK 824C AD22 # HANGUL SYLLABLE KIYEOK-WAE-RIEULMIEUM 824D AD23 # HANGUL SYLLABLE KIYEOK-WAE-RIEULPIEUP 824E AD24 # HANGUL SYLLABLE KIYEOK-WAE-RIEULSIOS 824F AD25 # HANGUL SYLLABLE KIYEOK-WAE-RIEULTHIEUTH 8250 AD26 # HANGUL SYLLABLE KIYEOK-WAE-RIEULPHIEUPH 8251 AD27 # HANGUL SYLLABLE KIYEOK-WAE-RIEULHIEUH 8252 AD28 # HANGUL SYLLABLE KIYEOK-WAE-MIEUM 8253 AD2A # HANGUL SYLLABLE KIYEOK-WAE-PIEUPSIOS 8254 AD2B # HANGUL SYLLABLE KIYEOK-WAE-SIOS 8255 AD2E # HANGUL SYLLABLE KIYEOK-WAE-CIEUC 8256 AD2F # HANGUL SYLLABLE KIYEOK-WAE-CHIEUCH 8257 AD30 # HANGUL SYLLABLE KIYEOK-WAE-KHIEUKH 8258 AD31 # HANGUL SYLLABLE KIYEOK-WAE-THIEUTH 8259 AD32 # HANGUL SYLLABLE KIYEOK-WAE-PHIEUPH 825A AD33 # HANGUL SYLLABLE KIYEOK-WAE-HIEUH 8261 AD36 # HANGUL SYLLABLE KIYEOK-OE-SSANGKIYEOK 8262 AD37 # HANGUL SYLLABLE KIYEOK-OE-KIYEOKSIOS 8263 AD39 # HANGUL SYLLABLE KIYEOK-OE-NIEUNCIEUC 8264 AD3A # HANGUL SYLLABLE KIYEOK-OE-NIEUNHIEUH 8265 AD3B # HANGUL SYLLABLE KIYEOK-OE-TIKEUT 8266 AD3D # HANGUL SYLLABLE KIYEOK-OE-RIEULKIYEOK 8267 AD3E # HANGUL SYLLABLE KIYEOK-OE-RIEULMIEUM 8268 AD3F # HANGUL SYLLABLE KIYEOK-OE-RIEULPIEUP 8269 AD40 # HANGUL SYLLABLE KIYEOK-OE-RIEULSIOS 826A AD41 # HANGUL SYLLABLE KIYEOK-OE-RIEULTHIEUTH 826B AD42 # HANGUL SYLLABLE KIYEOK-OE-RIEULPHIEUPH 826C AD43 # HANGUL SYLLABLE KIYEOK-OE-RIEULHIEUH 826D AD46 # HANGUL SYLLABLE KIYEOK-OE-PIEUPSIOS 826E AD48 # HANGUL SYLLABLE KIYEOK-OE-SSANGSIOS 826F AD4A # HANGUL SYLLABLE KIYEOK-OE-CIEUC 8270 AD4B # HANGUL SYLLABLE KIYEOK-OE-CHIEUCH 8271 AD4C # HANGUL SYLLABLE KIYEOK-OE-KHIEUKH 8272 AD4D # HANGUL SYLLABLE KIYEOK-OE-THIEUTH 8273 AD4E # HANGUL SYLLABLE KIYEOK-OE-PHIEUPH 8274 AD4F # HANGUL SYLLABLE KIYEOK-OE-HIEUH 8275 AD51 # HANGUL SYLLABLE KIYEOK-YO-KIYEOK 8276 AD52 # HANGUL SYLLABLE KIYEOK-YO-SSANGKIYEOK 8277 AD53 # HANGUL SYLLABLE KIYEOK-YO-KIYEOKSIOS 8278 AD55 # HANGUL SYLLABLE KIYEOK-YO-NIEUNCIEUC 8279 AD56 # HANGUL SYLLABLE KIYEOK-YO-NIEUNHIEUH 827A AD57 # HANGUL SYLLABLE KIYEOK-YO-TIKEUT 8281 AD59 # HANGUL SYLLABLE KIYEOK-YO-RIEULKIYEOK 8282 AD5A # HANGUL SYLLABLE KIYEOK-YO-RIEULMIEUM 8283 AD5B # HANGUL SYLLABLE KIYEOK-YO-RIEULPIEUP 8284 AD5C # HANGUL SYLLABLE KIYEOK-YO-RIEULSIOS 8285 AD5D # HANGUL SYLLABLE KIYEOK-YO-RIEULTHIEUTH 8286 AD5E # HANGUL SYLLABLE KIYEOK-YO-RIEULPHIEUPH 8287 AD5F # HANGUL SYLLABLE KIYEOK-YO-RIEULHIEUH 8288 AD60 # HANGUL SYLLABLE KIYEOK-YO-MIEUM 8289 AD62 # HANGUL SYLLABLE KIYEOK-YO-PIEUPSIOS 828A AD64 # HANGUL SYLLABLE KIYEOK-YO-SSANGSIOS 828B AD65 # HANGUL SYLLABLE KIYEOK-YO-IEUNG 828C AD66 # HANGUL SYLLABLE KIYEOK-YO-CIEUC 828D AD67 # HANGUL SYLLABLE KIYEOK-YO-CHIEUCH 828E AD68 # HANGUL SYLLABLE KIYEOK-YO-KHIEUKH 828F AD69 # HANGUL SYLLABLE KIYEOK-YO-THIEUTH 8290 AD6A # HANGUL SYLLABLE KIYEOK-YO-PHIEUPH 8291 AD6B # HANGUL SYLLABLE KIYEOK-YO-HIEUH 8292 AD6E # HANGUL SYLLABLE KIYEOK-U-SSANGKIYEOK 8293 AD6F # HANGUL SYLLABLE KIYEOK-U-KIYEOKSIOS 8294 AD71 # HANGUL SYLLABLE KIYEOK-U-NIEUNCIEUC 8295 AD72 # HANGUL SYLLABLE KIYEOK-U-NIEUNHIEUH 8296 AD77 # HANGUL SYLLABLE KIYEOK-U-RIEULPIEUP 8297 AD78 # HANGUL SYLLABLE KIYEOK-U-RIEULSIOS 8298 AD79 # HANGUL SYLLABLE KIYEOK-U-RIEULTHIEUTH 8299 AD7A # HANGUL SYLLABLE KIYEOK-U-RIEULPHIEUPH 829A AD7E # HANGUL SYLLABLE KIYEOK-U-PIEUPSIOS 829B AD80 # HANGUL SYLLABLE KIYEOK-U-SSANGSIOS 829C AD83 # HANGUL SYLLABLE KIYEOK-U-CHIEUCH 829D AD84 # HANGUL SYLLABLE KIYEOK-U-KHIEUKH 829E AD85 # HANGUL SYLLABLE KIYEOK-U-THIEUTH 829F AD86 # HANGUL SYLLABLE KIYEOK-U-PHIEUPH 82A0 AD87 # HANGUL SYLLABLE KIYEOK-U-HIEUH 82A1 AD8A # HANGUL SYLLABLE KIYEOK-WEO-SSANGKIYEOK 82A2 AD8B # HANGUL SYLLABLE KIYEOK-WEO-KIYEOKSIOS 82A3 AD8D # HANGUL SYLLABLE KIYEOK-WEO-NIEUNCIEUC 82A4 AD8E # HANGUL SYLLABLE KIYEOK-WEO-NIEUNHIEUH 82A5 AD8F # HANGUL SYLLABLE KIYEOK-WEO-TIKEUT 82A6 AD91 # HANGUL SYLLABLE KIYEOK-WEO-RIEULKIYEOK 82A7 AD92 # HANGUL SYLLABLE KIYEOK-WEO-RIEULMIEUM 82A8 AD93 # HANGUL SYLLABLE KIYEOK-WEO-RIEULPIEUP 82A9 AD94 # HANGUL SYLLABLE KIYEOK-WEO-RIEULSIOS 82AA AD95 # HANGUL SYLLABLE KIYEOK-WEO-RIEULTHIEUTH 82AB AD96 # HANGUL SYLLABLE KIYEOK-WEO-RIEULPHIEUPH 82AC AD97 # HANGUL SYLLABLE KIYEOK-WEO-RIEULHIEUH 82AD AD98 # HANGUL SYLLABLE KIYEOK-WEO-MIEUM 82AE AD99 # HANGUL SYLLABLE KIYEOK-WEO-PIEUP 82AF AD9A # HANGUL SYLLABLE KIYEOK-WEO-PIEUPSIOS 82B0 AD9B # HANGUL SYLLABLE KIYEOK-WEO-SIOS 82B1 AD9E # HANGUL SYLLABLE KIYEOK-WEO-CIEUC 82B2 AD9F # HANGUL SYLLABLE KIYEOK-WEO-CHIEUCH 82B3 ADA0 # HANGUL SYLLABLE KIYEOK-WEO-KHIEUKH 82B4 ADA1 # HANGUL SYLLABLE KIYEOK-WEO-THIEUTH 82B5 ADA2 # HANGUL SYLLABLE KIYEOK-WEO-PHIEUPH 82B6 ADA3 # HANGUL SYLLABLE KIYEOK-WEO-HIEUH 82B7 ADA5 # HANGUL SYLLABLE KIYEOK-WE-KIYEOK 82B8 ADA6 # HANGUL SYLLABLE KIYEOK-WE-SSANGKIYEOK 82B9 ADA7 # HANGUL SYLLABLE KIYEOK-WE-KIYEOKSIOS 82BA ADA8 # HANGUL SYLLABLE KIYEOK-WE-NIEUN 82BB ADA9 # HANGUL SYLLABLE KIYEOK-WE-NIEUNCIEUC 82BC ADAA # HANGUL SYLLABLE KIYEOK-WE-NIEUNHIEUH 82BD ADAB # HANGUL SYLLABLE KIYEOK-WE-TIKEUT 82BE ADAC # HANGUL SYLLABLE KIYEOK-WE-RIEUL 82BF ADAD # HANGUL SYLLABLE KIYEOK-WE-RIEULKIYEOK 82C0 ADAE # HANGUL SYLLABLE KIYEOK-WE-RIEULMIEUM 82C1 ADAF # HANGUL SYLLABLE KIYEOK-WE-RIEULPIEUP 82C2 ADB0 # HANGUL SYLLABLE KIYEOK-WE-RIEULSIOS 82C3 ADB1 # HANGUL SYLLABLE KIYEOK-WE-RIEULTHIEUTH 82C4 ADB2 # HANGUL SYLLABLE KIYEOK-WE-RIEULPHIEUPH 82C5 ADB3 # HANGUL SYLLABLE KIYEOK-WE-RIEULHIEUH 82C6 ADB4 # HANGUL SYLLABLE KIYEOK-WE-MIEUM 82C7 ADB5 # HANGUL SYLLABLE KIYEOK-WE-PIEUP 82C8 ADB6 # HANGUL SYLLABLE KIYEOK-WE-PIEUPSIOS 82C9 ADB8 # HANGUL SYLLABLE KIYEOK-WE-SSANGSIOS 82CA ADB9 # HANGUL SYLLABLE KIYEOK-WE-IEUNG 82CB ADBA # HANGUL SYLLABLE KIYEOK-WE-CIEUC 82CC ADBB # HANGUL SYLLABLE KIYEOK-WE-CHIEUCH 82CD ADBC # HANGUL SYLLABLE KIYEOK-WE-KHIEUKH 82CE ADBD # HANGUL SYLLABLE KIYEOK-WE-THIEUTH 82CF ADBE # HANGUL SYLLABLE KIYEOK-WE-PHIEUPH 82D0 ADBF # HANGUL SYLLABLE KIYEOK-WE-HIEUH 82D1 ADC2 # HANGUL SYLLABLE KIYEOK-WI-SSANGKIYEOK 82D2 ADC3 # HANGUL SYLLABLE KIYEOK-WI-KIYEOKSIOS 82D3 ADC5 # HANGUL SYLLABLE KIYEOK-WI-NIEUNCIEUC 82D4 ADC6 # HANGUL SYLLABLE KIYEOK-WI-NIEUNHIEUH 82D5 ADC7 # HANGUL SYLLABLE KIYEOK-WI-TIKEUT 82D6 ADC9 # HANGUL SYLLABLE KIYEOK-WI-RIEULKIYEOK 82D7 ADCA # HANGUL SYLLABLE KIYEOK-WI-RIEULMIEUM 82D8 ADCB # HANGUL SYLLABLE KIYEOK-WI-RIEULPIEUP 82D9 ADCC # HANGUL SYLLABLE KIYEOK-WI-RIEULSIOS 82DA ADCD # HANGUL SYLLABLE KIYEOK-WI-RIEULTHIEUTH 82DB ADCE # HANGUL SYLLABLE KIYEOK-WI-RIEULPHIEUPH 82DC ADCF # HANGUL SYLLABLE KIYEOK-WI-RIEULHIEUH 82DD ADD2 # HANGUL SYLLABLE KIYEOK-WI-PIEUPSIOS 82DE ADD4 # HANGUL SYLLABLE KIYEOK-WI-SSANGSIOS 82DF ADD5 # HANGUL SYLLABLE KIYEOK-WI-IEUNG 82E0 ADD6 # HANGUL SYLLABLE KIYEOK-WI-CIEUC 82E1 ADD7 # HANGUL SYLLABLE KIYEOK-WI-CHIEUCH 82E2 ADD8 # HANGUL SYLLABLE KIYEOK-WI-KHIEUKH 82E3 ADD9 # HANGUL SYLLABLE KIYEOK-WI-THIEUTH 82E4 ADDA # HANGUL SYLLABLE KIYEOK-WI-PHIEUPH 82E5 ADDB # HANGUL SYLLABLE KIYEOK-WI-HIEUH 82E6 ADDD # HANGUL SYLLABLE KIYEOK-YU-KIYEOK 82E7 ADDE # HANGUL SYLLABLE KIYEOK-YU-SSANGKIYEOK 82E8 ADDF # HANGUL SYLLABLE KIYEOK-YU-KIYEOKSIOS 82E9 ADE1 # HANGUL SYLLABLE KIYEOK-YU-NIEUNCIEUC 82EA ADE2 # HANGUL SYLLABLE KIYEOK-YU-NIEUNHIEUH 82EB ADE3 # HANGUL SYLLABLE KIYEOK-YU-TIKEUT 82EC ADE5 # HANGUL SYLLABLE KIYEOK-YU-RIEULKIYEOK 82ED ADE6 # HANGUL SYLLABLE KIYEOK-YU-RIEULMIEUM 82EE ADE7 # HANGUL SYLLABLE KIYEOK-YU-RIEULPIEUP 82EF ADE8 # HANGUL SYLLABLE KIYEOK-YU-RIEULSIOS 82F0 ADE9 # HANGUL SYLLABLE KIYEOK-YU-RIEULTHIEUTH 82F1 ADEA # HANGUL SYLLABLE KIYEOK-YU-RIEULPHIEUPH 82F2 ADEB # HANGUL SYLLABLE KIYEOK-YU-RIEULHIEUH 82F3 ADEC # HANGUL SYLLABLE KIYEOK-YU-MIEUM 82F4 ADED # HANGUL SYLLABLE KIYEOK-YU-PIEUP 82F5 ADEE # HANGUL SYLLABLE KIYEOK-YU-PIEUPSIOS 82F6 ADEF # HANGUL SYLLABLE KIYEOK-YU-SIOS 82F7 ADF0 # HANGUL SYLLABLE KIYEOK-YU-SSANGSIOS 82F8 ADF1 # HANGUL SYLLABLE KIYEOK-YU-IEUNG 82F9 ADF2 # HANGUL SYLLABLE KIYEOK-YU-CIEUC 82FA ADF3 # HANGUL SYLLABLE KIYEOK-YU-CHIEUCH 82FB ADF4 # HANGUL SYLLABLE KIYEOK-YU-KHIEUKH 82FC ADF5 # HANGUL SYLLABLE KIYEOK-YU-THIEUTH 82FD ADF6 # HANGUL SYLLABLE KIYEOK-YU-PHIEUPH 82FE ADF7 # HANGUL SYLLABLE KIYEOK-YU-HIEUH 8341 ADFA # HANGUL SYLLABLE KIYEOK-EU-SSANGKIYEOK 8342 ADFB # HANGUL SYLLABLE KIYEOK-EU-KIYEOKSIOS 8343 ADFD # HANGUL SYLLABLE KIYEOK-EU-NIEUNCIEUC 8344 ADFE # HANGUL SYLLABLE KIYEOK-EU-NIEUNHIEUH 8345 AE02 # HANGUL SYLLABLE KIYEOK-EU-RIEULMIEUM 8346 AE03 # HANGUL SYLLABLE KIYEOK-EU-RIEULPIEUP 8347 AE04 # HANGUL SYLLABLE KIYEOK-EU-RIEULSIOS 8348 AE05 # HANGUL SYLLABLE KIYEOK-EU-RIEULTHIEUTH 8349 AE06 # HANGUL SYLLABLE KIYEOK-EU-RIEULPHIEUPH 834A AE07 # HANGUL SYLLABLE KIYEOK-EU-RIEULHIEUH 834B AE0A # HANGUL SYLLABLE KIYEOK-EU-PIEUPSIOS 834C AE0C # HANGUL SYLLABLE KIYEOK-EU-SSANGSIOS 834D AE0E # HANGUL SYLLABLE KIYEOK-EU-CIEUC 834E AE0F # HANGUL SYLLABLE KIYEOK-EU-CHIEUCH 834F AE10 # HANGUL SYLLABLE KIYEOK-EU-KHIEUKH 8350 AE11 # HANGUL SYLLABLE KIYEOK-EU-THIEUTH 8351 AE12 # HANGUL SYLLABLE KIYEOK-EU-PHIEUPH 8352 AE13 # HANGUL SYLLABLE KIYEOK-EU-HIEUH 8353 AE15 # HANGUL SYLLABLE KIYEOK-YI-KIYEOK 8354 AE16 # HANGUL SYLLABLE KIYEOK-YI-SSANGKIYEOK 8355 AE17 # HANGUL SYLLABLE KIYEOK-YI-KIYEOKSIOS 8356 AE18 # HANGUL SYLLABLE KIYEOK-YI-NIEUN 8357 AE19 # HANGUL SYLLABLE KIYEOK-YI-NIEUNCIEUC 8358 AE1A # HANGUL SYLLABLE KIYEOK-YI-NIEUNHIEUH 8359 AE1B # HANGUL SYLLABLE KIYEOK-YI-TIKEUT 835A AE1C # HANGUL SYLLABLE KIYEOK-YI-RIEUL 8361 AE1D # HANGUL SYLLABLE KIYEOK-YI-RIEULKIYEOK 8362 AE1E # HANGUL SYLLABLE KIYEOK-YI-RIEULMIEUM 8363 AE1F # HANGUL SYLLABLE KIYEOK-YI-RIEULPIEUP 8364 AE20 # HANGUL SYLLABLE KIYEOK-YI-RIEULSIOS 8365 AE21 # HANGUL SYLLABLE KIYEOK-YI-RIEULTHIEUTH 8366 AE22 # HANGUL SYLLABLE KIYEOK-YI-RIEULPHIEUPH 8367 AE23 # HANGUL SYLLABLE KIYEOK-YI-RIEULHIEUH 8368 AE24 # HANGUL SYLLABLE KIYEOK-YI-MIEUM 8369 AE25 # HANGUL SYLLABLE KIYEOK-YI-PIEUP 836A AE26 # HANGUL SYLLABLE KIYEOK-YI-PIEUPSIOS 836B AE27 # HANGUL SYLLABLE KIYEOK-YI-SIOS 836C AE28 # HANGUL SYLLABLE KIYEOK-YI-SSANGSIOS 836D AE29 # HANGUL SYLLABLE KIYEOK-YI-IEUNG 836E AE2A # HANGUL SYLLABLE KIYEOK-YI-CIEUC 836F AE2B # HANGUL SYLLABLE KIYEOK-YI-CHIEUCH 8370 AE2C # HANGUL SYLLABLE KIYEOK-YI-KHIEUKH 8371 AE2D # HANGUL SYLLABLE KIYEOK-YI-THIEUTH 8372 AE2E # HANGUL SYLLABLE KIYEOK-YI-PHIEUPH 8373 AE2F # HANGUL SYLLABLE KIYEOK-YI-HIEUH 8374 AE32 # HANGUL SYLLABLE KIYEOK-I-SSANGKIYEOK 8375 AE33 # HANGUL SYLLABLE KIYEOK-I-KIYEOKSIOS 8376 AE35 # HANGUL SYLLABLE KIYEOK-I-NIEUNCIEUC 8377 AE36 # HANGUL SYLLABLE KIYEOK-I-NIEUNHIEUH 8378 AE39 # HANGUL SYLLABLE KIYEOK-I-RIEULKIYEOK 8379 AE3B # HANGUL SYLLABLE KIYEOK-I-RIEULPIEUP 837A AE3C # HANGUL SYLLABLE KIYEOK-I-RIEULSIOS 8381 AE3D # HANGUL SYLLABLE KIYEOK-I-RIEULTHIEUTH 8382 AE3E # HANGUL SYLLABLE KIYEOK-I-RIEULPHIEUPH 8383 AE3F # HANGUL SYLLABLE KIYEOK-I-RIEULHIEUH 8384 AE42 # HANGUL SYLLABLE KIYEOK-I-PIEUPSIOS 8385 AE44 # HANGUL SYLLABLE KIYEOK-I-SSANGSIOS 8386 AE47 # HANGUL SYLLABLE KIYEOK-I-CHIEUCH 8387 AE48 # HANGUL SYLLABLE KIYEOK-I-KHIEUKH 8388 AE49 # HANGUL SYLLABLE KIYEOK-I-THIEUTH 8389 AE4B # HANGUL SYLLABLE KIYEOK-I-HIEUH 838A AE4F # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOKSIOS 838B AE51 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUNCIEUC 838C AE52 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUNHIEUH 838D AE53 # HANGUL SYLLABLE SSANGKIYEOK-A-TIKEUT 838E AE55 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULKIYEOK 838F AE57 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULPIEUP 8390 AE58 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULSIOS 8391 AE59 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULTHIEUTH 8392 AE5A # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULPHIEUPH 8393 AE5B # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULHIEUH 8394 AE5E # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUPSIOS 8395 AE62 # HANGUL SYLLABLE SSANGKIYEOK-A-CIEUC 8396 AE63 # HANGUL SYLLABLE SSANGKIYEOK-A-CHIEUCH 8397 AE64 # HANGUL SYLLABLE SSANGKIYEOK-A-KHIEUKH 8398 AE66 # HANGUL SYLLABLE SSANGKIYEOK-A-PHIEUPH 8399 AE67 # HANGUL SYLLABLE SSANGKIYEOK-A-HIEUH 839A AE6A # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGKIYEOK 839B AE6B # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOKSIOS 839C AE6D # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUNCIEUC 839D AE6E # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUNHIEUH 839E AE6F # HANGUL SYLLABLE SSANGKIYEOK-AE-TIKEUT 839F AE71 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULKIYEOK 83A0 AE72 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULMIEUM 83A1 AE73 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULPIEUP 83A2 AE74 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULSIOS 83A3 AE75 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULTHIEUTH 83A4 AE76 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULPHIEUPH 83A5 AE77 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULHIEUH 83A6 AE7A # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUPSIOS 83A7 AE7E # HANGUL SYLLABLE SSANGKIYEOK-AE-CIEUC 83A8 AE7F # HANGUL SYLLABLE SSANGKIYEOK-AE-CHIEUCH 83A9 AE80 # HANGUL SYLLABLE SSANGKIYEOK-AE-KHIEUKH 83AA AE81 # HANGUL SYLLABLE SSANGKIYEOK-AE-THIEUTH 83AB AE82 # HANGUL SYLLABLE SSANGKIYEOK-AE-PHIEUPH 83AC AE83 # HANGUL SYLLABLE SSANGKIYEOK-AE-HIEUH 83AD AE86 # HANGUL SYLLABLE SSANGKIYEOK-YA-SSANGKIYEOK 83AE AE87 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOKSIOS 83AF AE88 # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUN 83B0 AE89 # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUNCIEUC 83B1 AE8A # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUNHIEUH 83B2 AE8B # HANGUL SYLLABLE SSANGKIYEOK-YA-TIKEUT 83B3 AE8D # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULKIYEOK 83B4 AE8E # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULMIEUM 83B5 AE8F # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULPIEUP 83B6 AE90 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULSIOS 83B7 AE91 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULTHIEUTH 83B8 AE92 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULPHIEUPH 83B9 AE93 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULHIEUH 83BA AE94 # HANGUL SYLLABLE SSANGKIYEOK-YA-MIEUM 83BB AE95 # HANGUL SYLLABLE SSANGKIYEOK-YA-PIEUP 83BC AE96 # HANGUL SYLLABLE SSANGKIYEOK-YA-PIEUPSIOS 83BD AE97 # HANGUL SYLLABLE SSANGKIYEOK-YA-SIOS 83BE AE98 # HANGUL SYLLABLE SSANGKIYEOK-YA-SSANGSIOS 83BF AE99 # HANGUL SYLLABLE SSANGKIYEOK-YA-IEUNG 83C0 AE9A # HANGUL SYLLABLE SSANGKIYEOK-YA-CIEUC 83C1 AE9B # HANGUL SYLLABLE SSANGKIYEOK-YA-CHIEUCH 83C2 AE9C # HANGUL SYLLABLE SSANGKIYEOK-YA-KHIEUKH 83C3 AE9D # HANGUL SYLLABLE SSANGKIYEOK-YA-THIEUTH 83C4 AE9E # HANGUL SYLLABLE SSANGKIYEOK-YA-PHIEUPH 83C5 AE9F # HANGUL SYLLABLE SSANGKIYEOK-YA-HIEUH 83C6 AEA0 # HANGUL SYLLABLE SSANGKIYEOK-YAE 83C7 AEA1 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KIYEOK 83C8 AEA2 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SSANGKIYEOK 83C9 AEA3 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KIYEOKSIOS 83CA AEA4 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUN 83CB AEA5 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUNCIEUC 83CC AEA6 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUNHIEUH 83CD AEA7 # HANGUL SYLLABLE SSANGKIYEOK-YAE-TIKEUT 83CE AEA8 # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEUL 83CF AEA9 # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULKIYEOK 83D0 AEAA # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULMIEUM 83D1 AEAB # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULPIEUP 83D2 AEAC # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULSIOS 83D3 AEAD # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULTHIEUTH 83D4 AEAE # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULPHIEUPH 83D5 AEAF # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULHIEUH 83D6 AEB0 # HANGUL SYLLABLE SSANGKIYEOK-YAE-MIEUM 83D7 AEB1 # HANGUL SYLLABLE SSANGKIYEOK-YAE-PIEUP 83D8 AEB2 # HANGUL SYLLABLE SSANGKIYEOK-YAE-PIEUPSIOS 83D9 AEB3 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SIOS 83DA AEB4 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SSANGSIOS 83DB AEB5 # HANGUL SYLLABLE SSANGKIYEOK-YAE-IEUNG 83DC AEB6 # HANGUL SYLLABLE SSANGKIYEOK-YAE-CIEUC 83DD AEB7 # HANGUL SYLLABLE SSANGKIYEOK-YAE-CHIEUCH 83DE AEB8 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KHIEUKH 83DF AEB9 # HANGUL SYLLABLE SSANGKIYEOK-YAE-THIEUTH 83E0 AEBA # HANGUL SYLLABLE SSANGKIYEOK-YAE-PHIEUPH 83E1 AEBB # HANGUL SYLLABLE SSANGKIYEOK-YAE-HIEUH 83E2 AEBF # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOKSIOS 83E3 AEC1 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUNCIEUC 83E4 AEC2 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUNHIEUH 83E5 AEC3 # HANGUL SYLLABLE SSANGKIYEOK-EO-TIKEUT 83E6 AEC5 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULKIYEOK 83E7 AEC6 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULMIEUM 83E8 AEC7 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULPIEUP 83E9 AEC8 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULSIOS 83EA AEC9 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULTHIEUTH 83EB AECA # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULPHIEUPH 83EC AECB # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULHIEUH 83ED AECE # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUPSIOS 83EE AED2 # HANGUL SYLLABLE SSANGKIYEOK-EO-CIEUC 83EF AED3 # HANGUL SYLLABLE SSANGKIYEOK-EO-CHIEUCH 83F0 AED4 # HANGUL SYLLABLE SSANGKIYEOK-EO-KHIEUKH 83F1 AED5 # HANGUL SYLLABLE SSANGKIYEOK-EO-THIEUTH 83F2 AED6 # HANGUL SYLLABLE SSANGKIYEOK-EO-PHIEUPH 83F3 AED7 # HANGUL SYLLABLE SSANGKIYEOK-EO-HIEUH 83F4 AEDA # HANGUL SYLLABLE SSANGKIYEOK-E-SSANGKIYEOK 83F5 AEDB # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOKSIOS 83F6 AEDD # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUNCIEUC 83F7 AEDE # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUNHIEUH 83F8 AEDF # HANGUL SYLLABLE SSANGKIYEOK-E-TIKEUT 83F9 AEE0 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEUL 83FA AEE1 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULKIYEOK 83FB AEE2 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULMIEUM 83FC AEE3 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULPIEUP 83FD AEE4 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULSIOS 83FE AEE5 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULTHIEUTH 8441 AEE6 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULPHIEUPH 8442 AEE7 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULHIEUH 8443 AEE9 # HANGUL SYLLABLE SSANGKIYEOK-E-PIEUP 8444 AEEA # HANGUL SYLLABLE SSANGKIYEOK-E-PIEUPSIOS 8445 AEEC # HANGUL SYLLABLE SSANGKIYEOK-E-SSANGSIOS 8446 AEEE # HANGUL SYLLABLE SSANGKIYEOK-E-CIEUC 8447 AEEF # HANGUL SYLLABLE SSANGKIYEOK-E-CHIEUCH 8448 AEF0 # HANGUL SYLLABLE SSANGKIYEOK-E-KHIEUKH 8449 AEF1 # HANGUL SYLLABLE SSANGKIYEOK-E-THIEUTH 844A AEF2 # HANGUL SYLLABLE SSANGKIYEOK-E-PHIEUPH 844B AEF3 # HANGUL SYLLABLE SSANGKIYEOK-E-HIEUH 844C AEF5 # HANGUL SYLLABLE SSANGKIYEOK-YEO-KIYEOK 844D AEF6 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGKIYEOK 844E AEF7 # HANGUL SYLLABLE SSANGKIYEOK-YEO-KIYEOKSIOS 844F AEF9 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUNCIEUC 8450 AEFA # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUNHIEUH 8451 AEFB # HANGUL SYLLABLE SSANGKIYEOK-YEO-TIKEUT 8452 AEFD # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULKIYEOK 8453 AEFE # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULMIEUM 8454 AEFF # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULPIEUP 8455 AF00 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULSIOS 8456 AF01 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULTHIEUTH 8457 AF02 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULPHIEUPH 8458 AF03 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULHIEUH 8459 AF04 # HANGUL SYLLABLE SSANGKIYEOK-YEO-MIEUM 845A AF05 # HANGUL SYLLABLE SSANGKIYEOK-YEO-PIEUP 8461 AF06 # HANGUL SYLLABLE SSANGKIYEOK-YEO-PIEUPSIOS 8462 AF09 # HANGUL SYLLABLE SSANGKIYEOK-YEO-IEUNG 8463 AF0A # HANGUL SYLLABLE SSANGKIYEOK-YEO-CIEUC 8464 AF0B # HANGUL SYLLABLE SSANGKIYEOK-YEO-CHIEUCH 8465 AF0C # HANGUL SYLLABLE SSANGKIYEOK-YEO-KHIEUKH 8466 AF0E # HANGUL SYLLABLE SSANGKIYEOK-YEO-PHIEUPH 8467 AF0F # HANGUL SYLLABLE SSANGKIYEOK-YEO-HIEUH 8468 AF11 # HANGUL SYLLABLE SSANGKIYEOK-YE-KIYEOK 8469 AF12 # HANGUL SYLLABLE SSANGKIYEOK-YE-SSANGKIYEOK 846A AF13 # HANGUL SYLLABLE SSANGKIYEOK-YE-KIYEOKSIOS 846B AF14 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUN 846C AF15 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUNCIEUC 846D AF16 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUNHIEUH 846E AF17 # HANGUL SYLLABLE SSANGKIYEOK-YE-TIKEUT 846F AF18 # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEUL 8470 AF19 # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULKIYEOK 8471 AF1A # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULMIEUM 8472 AF1B # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULPIEUP 8473 AF1C # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULSIOS 8474 AF1D # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULTHIEUTH 8475 AF1E # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULPHIEUPH 8476 AF1F # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULHIEUH 8477 AF20 # HANGUL SYLLABLE SSANGKIYEOK-YE-MIEUM 8478 AF21 # HANGUL SYLLABLE SSANGKIYEOK-YE-PIEUP 8479 AF22 # HANGUL SYLLABLE SSANGKIYEOK-YE-PIEUPSIOS 847A AF23 # HANGUL SYLLABLE SSANGKIYEOK-YE-SIOS 8481 AF24 # HANGUL SYLLABLE SSANGKIYEOK-YE-SSANGSIOS 8482 AF25 # HANGUL SYLLABLE SSANGKIYEOK-YE-IEUNG 8483 AF26 # HANGUL SYLLABLE SSANGKIYEOK-YE-CIEUC 8484 AF27 # HANGUL SYLLABLE SSANGKIYEOK-YE-CHIEUCH 8485 AF28 # HANGUL SYLLABLE SSANGKIYEOK-YE-KHIEUKH 8486 AF29 # HANGUL SYLLABLE SSANGKIYEOK-YE-THIEUTH 8487 AF2A # HANGUL SYLLABLE SSANGKIYEOK-YE-PHIEUPH 8488 AF2B # HANGUL SYLLABLE SSANGKIYEOK-YE-HIEUH 8489 AF2E # HANGUL SYLLABLE SSANGKIYEOK-O-SSANGKIYEOK 848A AF2F # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOKSIOS 848B AF31 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNCIEUC 848C AF33 # HANGUL SYLLABLE SSANGKIYEOK-O-TIKEUT 848D AF35 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULKIYEOK 848E AF36 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULMIEUM 848F AF37 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULPIEUP 8490 AF38 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULSIOS 8491 AF39 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULTHIEUTH 8492 AF3A # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULPHIEUPH 8493 AF3B # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULHIEUH 8494 AF3E # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUPSIOS 8495 AF40 # HANGUL SYLLABLE SSANGKIYEOK-O-SSANGSIOS 8496 AF44 # HANGUL SYLLABLE SSANGKIYEOK-O-KHIEUKH 8497 AF45 # HANGUL SYLLABLE SSANGKIYEOK-O-THIEUTH 8498 AF46 # HANGUL SYLLABLE SSANGKIYEOK-O-PHIEUPH 8499 AF47 # HANGUL SYLLABLE SSANGKIYEOK-O-HIEUH 849A AF4A # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGKIYEOK 849B AF4B # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOKSIOS 849C AF4C # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUN 849D AF4D # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUNCIEUC 849E AF4E # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUNHIEUH 849F AF4F # HANGUL SYLLABLE SSANGKIYEOK-WA-TIKEUT 84A0 AF51 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULKIYEOK 84A1 AF52 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULMIEUM 84A2 AF53 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULPIEUP 84A3 AF54 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULSIOS 84A4 AF55 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULTHIEUTH 84A5 AF56 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULPHIEUPH 84A6 AF57 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULHIEUH 84A7 AF58 # HANGUL SYLLABLE SSANGKIYEOK-WA-MIEUM 84A8 AF59 # HANGUL SYLLABLE SSANGKIYEOK-WA-PIEUP 84A9 AF5A # HANGUL SYLLABLE SSANGKIYEOK-WA-PIEUPSIOS 84AA AF5B # HANGUL SYLLABLE SSANGKIYEOK-WA-SIOS 84AB AF5E # HANGUL SYLLABLE SSANGKIYEOK-WA-CIEUC 84AC AF5F # HANGUL SYLLABLE SSANGKIYEOK-WA-CHIEUCH 84AD AF60 # HANGUL SYLLABLE SSANGKIYEOK-WA-KHIEUKH 84AE AF61 # HANGUL SYLLABLE SSANGKIYEOK-WA-THIEUTH 84AF AF62 # HANGUL SYLLABLE SSANGKIYEOK-WA-PHIEUPH 84B0 AF63 # HANGUL SYLLABLE SSANGKIYEOK-WA-HIEUH 84B1 AF66 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SSANGKIYEOK 84B2 AF67 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOKSIOS 84B3 AF68 # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUN 84B4 AF69 # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUNCIEUC 84B5 AF6A # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUNHIEUH 84B6 AF6B # HANGUL SYLLABLE SSANGKIYEOK-WAE-TIKEUT 84B7 AF6C # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEUL 84B8 AF6D # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULKIYEOK 84B9 AF6E # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULMIEUM 84BA AF6F # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULPIEUP 84BB AF70 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULSIOS 84BC AF71 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULTHIEUTH 84BD AF72 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULPHIEUPH 84BE AF73 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULHIEUH 84BF AF74 # HANGUL SYLLABLE SSANGKIYEOK-WAE-MIEUM 84C0 AF75 # HANGUL SYLLABLE SSANGKIYEOK-WAE-PIEUP 84C1 AF76 # HANGUL SYLLABLE SSANGKIYEOK-WAE-PIEUPSIOS 84C2 AF77 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SIOS 84C3 AF78 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SSANGSIOS 84C4 AF7A # HANGUL SYLLABLE SSANGKIYEOK-WAE-CIEUC 84C5 AF7B # HANGUL SYLLABLE SSANGKIYEOK-WAE-CHIEUCH 84C6 AF7C # HANGUL SYLLABLE SSANGKIYEOK-WAE-KHIEUKH 84C7 AF7D # HANGUL SYLLABLE SSANGKIYEOK-WAE-THIEUTH 84C8 AF7E # HANGUL SYLLABLE SSANGKIYEOK-WAE-PHIEUPH 84C9 AF7F # HANGUL SYLLABLE SSANGKIYEOK-WAE-HIEUH 84CA AF81 # HANGUL SYLLABLE SSANGKIYEOK-OE-KIYEOK 84CB AF82 # HANGUL SYLLABLE SSANGKIYEOK-OE-SSANGKIYEOK 84CC AF83 # HANGUL SYLLABLE SSANGKIYEOK-OE-KIYEOKSIOS 84CD AF85 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUNCIEUC 84CE AF86 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUNHIEUH 84CF AF87 # HANGUL SYLLABLE SSANGKIYEOK-OE-TIKEUT 84D0 AF89 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULKIYEOK 84D1 AF8A # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULMIEUM 84D2 AF8B # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULPIEUP 84D3 AF8C # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULSIOS 84D4 AF8D # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULTHIEUTH 84D5 AF8E # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULPHIEUPH 84D6 AF8F # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULHIEUH 84D7 AF92 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUPSIOS 84D8 AF93 # HANGUL SYLLABLE SSANGKIYEOK-OE-SIOS 84D9 AF94 # HANGUL SYLLABLE SSANGKIYEOK-OE-SSANGSIOS 84DA AF96 # HANGUL SYLLABLE SSANGKIYEOK-OE-CIEUC 84DB AF97 # HANGUL SYLLABLE SSANGKIYEOK-OE-CHIEUCH 84DC AF98 # HANGUL SYLLABLE SSANGKIYEOK-OE-KHIEUKH 84DD AF99 # HANGUL SYLLABLE SSANGKIYEOK-OE-THIEUTH 84DE AF9A # HANGUL SYLLABLE SSANGKIYEOK-OE-PHIEUPH 84DF AF9B # HANGUL SYLLABLE SSANGKIYEOK-OE-HIEUH 84E0 AF9D # HANGUL SYLLABLE SSANGKIYEOK-YO-KIYEOK 84E1 AF9E # HANGUL SYLLABLE SSANGKIYEOK-YO-SSANGKIYEOK 84E2 AF9F # HANGUL SYLLABLE SSANGKIYEOK-YO-KIYEOKSIOS 84E3 AFA0 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUN 84E4 AFA1 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUNCIEUC 84E5 AFA2 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUNHIEUH 84E6 AFA3 # HANGUL SYLLABLE SSANGKIYEOK-YO-TIKEUT 84E7 AFA4 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEUL 84E8 AFA5 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULKIYEOK 84E9 AFA6 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULMIEUM 84EA AFA7 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULPIEUP 84EB AFA8 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULSIOS 84EC AFA9 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULTHIEUTH 84ED AFAA # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULPHIEUPH 84EE AFAB # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULHIEUH 84EF AFAC # HANGUL SYLLABLE SSANGKIYEOK-YO-MIEUM 84F0 AFAD # HANGUL SYLLABLE SSANGKIYEOK-YO-PIEUP 84F1 AFAE # HANGUL SYLLABLE SSANGKIYEOK-YO-PIEUPSIOS 84F2 AFAF # HANGUL SYLLABLE SSANGKIYEOK-YO-SIOS 84F3 AFB0 # HANGUL SYLLABLE SSANGKIYEOK-YO-SSANGSIOS 84F4 AFB1 # HANGUL SYLLABLE SSANGKIYEOK-YO-IEUNG 84F5 AFB2 # HANGUL SYLLABLE SSANGKIYEOK-YO-CIEUC 84F6 AFB3 # HANGUL SYLLABLE SSANGKIYEOK-YO-CHIEUCH 84F7 AFB4 # HANGUL SYLLABLE SSANGKIYEOK-YO-KHIEUKH 84F8 AFB5 # HANGUL SYLLABLE SSANGKIYEOK-YO-THIEUTH 84F9 AFB6 # HANGUL SYLLABLE SSANGKIYEOK-YO-PHIEUPH 84FA AFB7 # HANGUL SYLLABLE SSANGKIYEOK-YO-HIEUH 84FB AFBA # HANGUL SYLLABLE SSANGKIYEOK-U-SSANGKIYEOK 84FC AFBB # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOKSIOS 84FD AFBD # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUNCIEUC 84FE AFBE # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUNHIEUH 8541 AFBF # HANGUL SYLLABLE SSANGKIYEOK-U-TIKEUT 8542 AFC1 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULKIYEOK 8543 AFC2 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULMIEUM 8544 AFC3 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULPIEUP 8545 AFC4 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULSIOS 8546 AFC5 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULTHIEUTH 8547 AFC6 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULPHIEUPH 8548 AFCA # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUPSIOS 8549 AFCC # HANGUL SYLLABLE SSANGKIYEOK-U-SSANGSIOS 854A AFCF # HANGUL SYLLABLE SSANGKIYEOK-U-CHIEUCH 854B AFD0 # HANGUL SYLLABLE SSANGKIYEOK-U-KHIEUKH 854C AFD1 # HANGUL SYLLABLE SSANGKIYEOK-U-THIEUTH 854D AFD2 # HANGUL SYLLABLE SSANGKIYEOK-U-PHIEUPH 854E AFD3 # HANGUL SYLLABLE SSANGKIYEOK-U-HIEUH 854F AFD5 # HANGUL SYLLABLE SSANGKIYEOK-WEO-KIYEOK 8550 AFD6 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGKIYEOK 8551 AFD7 # HANGUL SYLLABLE SSANGKIYEOK-WEO-KIYEOKSIOS 8552 AFD8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUN 8553 AFD9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUNCIEUC 8554 AFDA # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUNHIEUH 8555 AFDB # HANGUL SYLLABLE SSANGKIYEOK-WEO-TIKEUT 8556 AFDD # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULKIYEOK 8557 AFDE # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULMIEUM 8558 AFDF # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULPIEUP 8559 AFE0 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULSIOS 855A AFE1 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULTHIEUTH 8561 AFE2 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULPHIEUPH 8562 AFE3 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULHIEUH 8563 AFE4 # HANGUL SYLLABLE SSANGKIYEOK-WEO-MIEUM 8564 AFE5 # HANGUL SYLLABLE SSANGKIYEOK-WEO-PIEUP 8565 AFE6 # HANGUL SYLLABLE SSANGKIYEOK-WEO-PIEUPSIOS 8566 AFE7 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SIOS 8567 AFEA # HANGUL SYLLABLE SSANGKIYEOK-WEO-CIEUC 8568 AFEB # HANGUL SYLLABLE SSANGKIYEOK-WEO-CHIEUCH 8569 AFEC # HANGUL SYLLABLE SSANGKIYEOK-WEO-KHIEUKH 856A AFED # HANGUL SYLLABLE SSANGKIYEOK-WEO-THIEUTH 856B AFEE # HANGUL SYLLABLE SSANGKIYEOK-WEO-PHIEUPH 856C AFEF # HANGUL SYLLABLE SSANGKIYEOK-WEO-HIEUH 856D AFF2 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGKIYEOK 856E AFF3 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOKSIOS 856F AFF5 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUNCIEUC 8570 AFF6 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUNHIEUH 8571 AFF7 # HANGUL SYLLABLE SSANGKIYEOK-WE-TIKEUT 8572 AFF9 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULKIYEOK 8573 AFFA # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULMIEUM 8574 AFFB # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULPIEUP 8575 AFFC # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULSIOS 8576 AFFD # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULTHIEUTH 8577 AFFE # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULPHIEUPH 8578 AFFF # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULHIEUH 8579 B002 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUPSIOS 857A B003 # HANGUL SYLLABLE SSANGKIYEOK-WE-SIOS 8581 B005 # HANGUL SYLLABLE SSANGKIYEOK-WE-IEUNG 8582 B006 # HANGUL SYLLABLE SSANGKIYEOK-WE-CIEUC 8583 B007 # HANGUL SYLLABLE SSANGKIYEOK-WE-CHIEUCH 8584 B008 # HANGUL SYLLABLE SSANGKIYEOK-WE-KHIEUKH 8585 B009 # HANGUL SYLLABLE SSANGKIYEOK-WE-THIEUTH 8586 B00A # HANGUL SYLLABLE SSANGKIYEOK-WE-PHIEUPH 8587 B00B # HANGUL SYLLABLE SSANGKIYEOK-WE-HIEUH 8588 B00D # HANGUL SYLLABLE SSANGKIYEOK-WI-KIYEOK 8589 B00E # HANGUL SYLLABLE SSANGKIYEOK-WI-SSANGKIYEOK 858A B00F # HANGUL SYLLABLE SSANGKIYEOK-WI-KIYEOKSIOS 858B B011 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUNCIEUC 858C B012 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUNHIEUH 858D B013 # HANGUL SYLLABLE SSANGKIYEOK-WI-TIKEUT 858E B015 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULKIYEOK 858F B016 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULMIEUM 8590 B017 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULPIEUP 8591 B018 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULSIOS 8592 B019 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULTHIEUTH 8593 B01A # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULPHIEUPH 8594 B01B # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULHIEUH 8595 B01E # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUPSIOS 8596 B01F # HANGUL SYLLABLE SSANGKIYEOK-WI-SIOS 8597 B020 # HANGUL SYLLABLE SSANGKIYEOK-WI-SSANGSIOS 8598 B021 # HANGUL SYLLABLE SSANGKIYEOK-WI-IEUNG 8599 B022 # HANGUL SYLLABLE SSANGKIYEOK-WI-CIEUC 859A B023 # HANGUL SYLLABLE SSANGKIYEOK-WI-CHIEUCH 859B B024 # HANGUL SYLLABLE SSANGKIYEOK-WI-KHIEUKH 859C B025 # HANGUL SYLLABLE SSANGKIYEOK-WI-THIEUTH 859D B026 # HANGUL SYLLABLE SSANGKIYEOK-WI-PHIEUPH 859E B027 # HANGUL SYLLABLE SSANGKIYEOK-WI-HIEUH 859F B029 # HANGUL SYLLABLE SSANGKIYEOK-YU-KIYEOK 85A0 B02A # HANGUL SYLLABLE SSANGKIYEOK-YU-SSANGKIYEOK 85A1 B02B # HANGUL SYLLABLE SSANGKIYEOK-YU-KIYEOKSIOS 85A2 B02C # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUN 85A3 B02D # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUNCIEUC 85A4 B02E # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUNHIEUH 85A5 B02F # HANGUL SYLLABLE SSANGKIYEOK-YU-TIKEUT 85A6 B030 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEUL 85A7 B031 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULKIYEOK 85A8 B032 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULMIEUM 85A9 B033 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULPIEUP 85AA B034 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULSIOS 85AB B035 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULTHIEUTH 85AC B036 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULPHIEUPH 85AD B037 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULHIEUH 85AE B038 # HANGUL SYLLABLE SSANGKIYEOK-YU-MIEUM 85AF B039 # HANGUL SYLLABLE SSANGKIYEOK-YU-PIEUP 85B0 B03A # HANGUL SYLLABLE SSANGKIYEOK-YU-PIEUPSIOS 85B1 B03B # HANGUL SYLLABLE SSANGKIYEOK-YU-SIOS 85B2 B03C # HANGUL SYLLABLE SSANGKIYEOK-YU-SSANGSIOS 85B3 B03D # HANGUL SYLLABLE SSANGKIYEOK-YU-IEUNG 85B4 B03E # HANGUL SYLLABLE SSANGKIYEOK-YU-CIEUC 85B5 B03F # HANGUL SYLLABLE SSANGKIYEOK-YU-CHIEUCH 85B6 B040 # HANGUL SYLLABLE SSANGKIYEOK-YU-KHIEUKH 85B7 B041 # HANGUL SYLLABLE SSANGKIYEOK-YU-THIEUTH 85B8 B042 # HANGUL SYLLABLE SSANGKIYEOK-YU-PHIEUPH 85B9 B043 # HANGUL SYLLABLE SSANGKIYEOK-YU-HIEUH 85BA B046 # HANGUL SYLLABLE SSANGKIYEOK-EU-SSANGKIYEOK 85BB B047 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOKSIOS 85BC B049 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNCIEUC 85BD B04B # HANGUL SYLLABLE SSANGKIYEOK-EU-TIKEUT 85BE B04D # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULKIYEOK 85BF B04F # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULPIEUP 85C0 B050 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULSIOS 85C1 B051 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULTHIEUTH 85C2 B052 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULPHIEUPH 85C3 B056 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUPSIOS 85C4 B058 # HANGUL SYLLABLE SSANGKIYEOK-EU-SSANGSIOS 85C5 B05A # HANGUL SYLLABLE SSANGKIYEOK-EU-CIEUC 85C6 B05B # HANGUL SYLLABLE SSANGKIYEOK-EU-CHIEUCH 85C7 B05C # HANGUL SYLLABLE SSANGKIYEOK-EU-KHIEUKH 85C8 B05E # HANGUL SYLLABLE SSANGKIYEOK-EU-PHIEUPH 85C9 B05F # HANGUL SYLLABLE SSANGKIYEOK-EU-HIEUH 85CA B060 # HANGUL SYLLABLE SSANGKIYEOK-YI 85CB B061 # HANGUL SYLLABLE SSANGKIYEOK-YI-KIYEOK 85CC B062 # HANGUL SYLLABLE SSANGKIYEOK-YI-SSANGKIYEOK 85CD B063 # HANGUL SYLLABLE SSANGKIYEOK-YI-KIYEOKSIOS 85CE B064 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUN 85CF B065 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUNCIEUC 85D0 B066 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUNHIEUH 85D1 B067 # HANGUL SYLLABLE SSANGKIYEOK-YI-TIKEUT 85D2 B068 # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEUL 85D3 B069 # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULKIYEOK 85D4 B06A # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULMIEUM 85D5 B06B # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULPIEUP 85D6 B06C # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULSIOS 85D7 B06D # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULTHIEUTH 85D8 B06E # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULPHIEUPH 85D9 B06F # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULHIEUH 85DA B070 # HANGUL SYLLABLE SSANGKIYEOK-YI-MIEUM 85DB B071 # HANGUL SYLLABLE SSANGKIYEOK-YI-PIEUP 85DC B072 # HANGUL SYLLABLE SSANGKIYEOK-YI-PIEUPSIOS 85DD B073 # HANGUL SYLLABLE SSANGKIYEOK-YI-SIOS 85DE B074 # HANGUL SYLLABLE SSANGKIYEOK-YI-SSANGSIOS 85DF B075 # HANGUL SYLLABLE SSANGKIYEOK-YI-IEUNG 85E0 B076 # HANGUL SYLLABLE SSANGKIYEOK-YI-CIEUC 85E1 B077 # HANGUL SYLLABLE SSANGKIYEOK-YI-CHIEUCH 85E2 B078 # HANGUL SYLLABLE SSANGKIYEOK-YI-KHIEUKH 85E3 B079 # HANGUL SYLLABLE SSANGKIYEOK-YI-THIEUTH 85E4 B07A # HANGUL SYLLABLE SSANGKIYEOK-YI-PHIEUPH 85E5 B07B # HANGUL SYLLABLE SSANGKIYEOK-YI-HIEUH 85E6 B07E # HANGUL SYLLABLE SSANGKIYEOK-I-SSANGKIYEOK 85E7 B07F # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOKSIOS 85E8 B081 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUNCIEUC 85E9 B082 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUNHIEUH 85EA B083 # HANGUL SYLLABLE SSANGKIYEOK-I-TIKEUT 85EB B085 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULKIYEOK 85EC B086 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULMIEUM 85ED B087 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULPIEUP 85EE B088 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULSIOS 85EF B089 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULTHIEUTH 85F0 B08A # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULPHIEUPH 85F1 B08B # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULHIEUH 85F2 B08E # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUPSIOS 85F3 B090 # HANGUL SYLLABLE SSANGKIYEOK-I-SSANGSIOS 85F4 B092 # HANGUL SYLLABLE SSANGKIYEOK-I-CIEUC 85F5 B093 # HANGUL SYLLABLE SSANGKIYEOK-I-CHIEUCH 85F6 B094 # HANGUL SYLLABLE SSANGKIYEOK-I-KHIEUKH 85F7 B095 # HANGUL SYLLABLE SSANGKIYEOK-I-THIEUTH 85F8 B096 # HANGUL SYLLABLE SSANGKIYEOK-I-PHIEUPH 85F9 B097 # HANGUL SYLLABLE SSANGKIYEOK-I-HIEUH 85FA B09B # HANGUL SYLLABLE NIEUN-A-KIYEOKSIOS 85FB B09D # HANGUL SYLLABLE NIEUN-A-NIEUNCIEUC 85FC B09E # HANGUL SYLLABLE NIEUN-A-NIEUNHIEUH 85FD B0A3 # HANGUL SYLLABLE NIEUN-A-RIEULPIEUP 85FE B0A4 # HANGUL SYLLABLE NIEUN-A-RIEULSIOS 8641 B0A5 # HANGUL SYLLABLE NIEUN-A-RIEULTHIEUTH 8642 B0A6 # HANGUL SYLLABLE NIEUN-A-RIEULPHIEUPH 8643 B0A7 # HANGUL SYLLABLE NIEUN-A-RIEULHIEUH 8644 B0AA # HANGUL SYLLABLE NIEUN-A-PIEUPSIOS 8645 B0B0 # HANGUL SYLLABLE NIEUN-A-KHIEUKH 8646 B0B2 # HANGUL SYLLABLE NIEUN-A-PHIEUPH 8647 B0B6 # HANGUL SYLLABLE NIEUN-AE-SSANGKIYEOK 8648 B0B7 # HANGUL SYLLABLE NIEUN-AE-KIYEOKSIOS 8649 B0B9 # HANGUL SYLLABLE NIEUN-AE-NIEUNCIEUC 864A B0BA # HANGUL SYLLABLE NIEUN-AE-NIEUNHIEUH 864B B0BB # HANGUL SYLLABLE NIEUN-AE-TIKEUT 864C B0BD # HANGUL SYLLABLE NIEUN-AE-RIEULKIYEOK 864D B0BE # HANGUL SYLLABLE NIEUN-AE-RIEULMIEUM 864E B0BF # HANGUL SYLLABLE NIEUN-AE-RIEULPIEUP 864F B0C0 # HANGUL SYLLABLE NIEUN-AE-RIEULSIOS 8650 B0C1 # HANGUL SYLLABLE NIEUN-AE-RIEULTHIEUTH 8651 B0C2 # HANGUL SYLLABLE NIEUN-AE-RIEULPHIEUPH 8652 B0C3 # HANGUL SYLLABLE NIEUN-AE-RIEULHIEUH 8653 B0C6 # HANGUL SYLLABLE NIEUN-AE-PIEUPSIOS 8654 B0CA # HANGUL SYLLABLE NIEUN-AE-CIEUC 8655 B0CB # HANGUL SYLLABLE NIEUN-AE-CHIEUCH 8656 B0CC # HANGUL SYLLABLE NIEUN-AE-KHIEUKH 8657 B0CD # HANGUL SYLLABLE NIEUN-AE-THIEUTH 8658 B0CE # HANGUL SYLLABLE NIEUN-AE-PHIEUPH 8659 B0CF # HANGUL SYLLABLE NIEUN-AE-HIEUH 865A B0D2 # HANGUL SYLLABLE NIEUN-YA-SSANGKIYEOK 8661 B0D3 # HANGUL SYLLABLE NIEUN-YA-KIYEOKSIOS 8662 B0D5 # HANGUL SYLLABLE NIEUN-YA-NIEUNCIEUC 8663 B0D6 # HANGUL SYLLABLE NIEUN-YA-NIEUNHIEUH 8664 B0D7 # HANGUL SYLLABLE NIEUN-YA-TIKEUT 8665 B0D9 # HANGUL SYLLABLE NIEUN-YA-RIEULKIYEOK 8666 B0DA # HANGUL SYLLABLE NIEUN-YA-RIEULMIEUM 8667 B0DB # HANGUL SYLLABLE NIEUN-YA-RIEULPIEUP 8668 B0DC # HANGUL SYLLABLE NIEUN-YA-RIEULSIOS 8669 B0DD # HANGUL SYLLABLE NIEUN-YA-RIEULTHIEUTH 866A B0DE # HANGUL SYLLABLE NIEUN-YA-RIEULPHIEUPH 866B B0DF # HANGUL SYLLABLE NIEUN-YA-RIEULHIEUH 866C B0E1 # HANGUL SYLLABLE NIEUN-YA-PIEUP 866D B0E2 # HANGUL SYLLABLE NIEUN-YA-PIEUPSIOS 866E B0E3 # HANGUL SYLLABLE NIEUN-YA-SIOS 866F B0E4 # HANGUL SYLLABLE NIEUN-YA-SSANGSIOS 8670 B0E6 # HANGUL SYLLABLE NIEUN-YA-CIEUC 8671 B0E7 # HANGUL SYLLABLE NIEUN-YA-CHIEUCH 8672 B0E8 # HANGUL SYLLABLE NIEUN-YA-KHIEUKH 8673 B0E9 # HANGUL SYLLABLE NIEUN-YA-THIEUTH 8674 B0EA # HANGUL SYLLABLE NIEUN-YA-PHIEUPH 8675 B0EB # HANGUL SYLLABLE NIEUN-YA-HIEUH 8676 B0EC # HANGUL SYLLABLE NIEUN-YAE 8677 B0ED # HANGUL SYLLABLE NIEUN-YAE-KIYEOK 8678 B0EE # HANGUL SYLLABLE NIEUN-YAE-SSANGKIYEOK 8679 B0EF # HANGUL SYLLABLE NIEUN-YAE-KIYEOKSIOS 867A B0F0 # HANGUL SYLLABLE NIEUN-YAE-NIEUN 8681 B0F1 # HANGUL SYLLABLE NIEUN-YAE-NIEUNCIEUC 8682 B0F2 # HANGUL SYLLABLE NIEUN-YAE-NIEUNHIEUH 8683 B0F3 # HANGUL SYLLABLE NIEUN-YAE-TIKEUT 8684 B0F4 # HANGUL SYLLABLE NIEUN-YAE-RIEUL 8685 B0F5 # HANGUL SYLLABLE NIEUN-YAE-RIEULKIYEOK 8686 B0F6 # HANGUL SYLLABLE NIEUN-YAE-RIEULMIEUM 8687 B0F7 # HANGUL SYLLABLE NIEUN-YAE-RIEULPIEUP 8688 B0F8 # HANGUL SYLLABLE NIEUN-YAE-RIEULSIOS 8689 B0F9 # HANGUL SYLLABLE NIEUN-YAE-RIEULTHIEUTH 868A B0FA # HANGUL SYLLABLE NIEUN-YAE-RIEULPHIEUPH 868B B0FB # HANGUL SYLLABLE NIEUN-YAE-RIEULHIEUH 868C B0FC # HANGUL SYLLABLE NIEUN-YAE-MIEUM 868D B0FD # HANGUL SYLLABLE NIEUN-YAE-PIEUP 868E B0FE # HANGUL SYLLABLE NIEUN-YAE-PIEUPSIOS 868F B0FF # HANGUL SYLLABLE NIEUN-YAE-SIOS 8690 B100 # HANGUL SYLLABLE NIEUN-YAE-SSANGSIOS 8691 B101 # HANGUL SYLLABLE NIEUN-YAE-IEUNG 8692 B102 # HANGUL SYLLABLE NIEUN-YAE-CIEUC 8693 B103 # HANGUL SYLLABLE NIEUN-YAE-CHIEUCH 8694 B104 # HANGUL SYLLABLE NIEUN-YAE-KHIEUKH 8695 B105 # HANGUL SYLLABLE NIEUN-YAE-THIEUTH 8696 B106 # HANGUL SYLLABLE NIEUN-YAE-PHIEUPH 8697 B107 # HANGUL SYLLABLE NIEUN-YAE-HIEUH 8698 B10A # HANGUL SYLLABLE NIEUN-EO-SSANGKIYEOK 8699 B10D # HANGUL SYLLABLE NIEUN-EO-NIEUNCIEUC 869A B10E # HANGUL SYLLABLE NIEUN-EO-NIEUNHIEUH 869B B10F # HANGUL SYLLABLE NIEUN-EO-TIKEUT 869C B111 # HANGUL SYLLABLE NIEUN-EO-RIEULKIYEOK 869D B114 # HANGUL SYLLABLE NIEUN-EO-RIEULSIOS 869E B115 # HANGUL SYLLABLE NIEUN-EO-RIEULTHIEUTH 869F B116 # HANGUL SYLLABLE NIEUN-EO-RIEULPHIEUPH 86A0 B117 # HANGUL SYLLABLE NIEUN-EO-RIEULHIEUH 86A1 B11A # HANGUL SYLLABLE NIEUN-EO-PIEUPSIOS 86A2 B11E # HANGUL SYLLABLE NIEUN-EO-CIEUC 86A3 B11F # HANGUL SYLLABLE NIEUN-EO-CHIEUCH 86A4 B120 # HANGUL SYLLABLE NIEUN-EO-KHIEUKH 86A5 B121 # HANGUL SYLLABLE NIEUN-EO-THIEUTH 86A6 B122 # HANGUL SYLLABLE NIEUN-EO-PHIEUPH 86A7 B126 # HANGUL SYLLABLE NIEUN-E-SSANGKIYEOK 86A8 B127 # HANGUL SYLLABLE NIEUN-E-KIYEOKSIOS 86A9 B129 # HANGUL SYLLABLE NIEUN-E-NIEUNCIEUC 86AA B12A # HANGUL SYLLABLE NIEUN-E-NIEUNHIEUH 86AB B12B # HANGUL SYLLABLE NIEUN-E-TIKEUT 86AC B12D # HANGUL SYLLABLE NIEUN-E-RIEULKIYEOK 86AD B12E # HANGUL SYLLABLE NIEUN-E-RIEULMIEUM 86AE B12F # HANGUL SYLLABLE NIEUN-E-RIEULPIEUP 86AF B130 # HANGUL SYLLABLE NIEUN-E-RIEULSIOS 86B0 B131 # HANGUL SYLLABLE NIEUN-E-RIEULTHIEUTH 86B1 B132 # HANGUL SYLLABLE NIEUN-E-RIEULPHIEUPH 86B2 B133 # HANGUL SYLLABLE NIEUN-E-RIEULHIEUH 86B3 B136 # HANGUL SYLLABLE NIEUN-E-PIEUPSIOS 86B4 B13A # HANGUL SYLLABLE NIEUN-E-CIEUC 86B5 B13B # HANGUL SYLLABLE NIEUN-E-CHIEUCH 86B6 B13C # HANGUL SYLLABLE NIEUN-E-KHIEUKH 86B7 B13D # HANGUL SYLLABLE NIEUN-E-THIEUTH 86B8 B13E # HANGUL SYLLABLE NIEUN-E-PHIEUPH 86B9 B13F # HANGUL SYLLABLE NIEUN-E-HIEUH 86BA B142 # HANGUL SYLLABLE NIEUN-YEO-SSANGKIYEOK 86BB B143 # HANGUL SYLLABLE NIEUN-YEO-KIYEOKSIOS 86BC B145 # HANGUL SYLLABLE NIEUN-YEO-NIEUNCIEUC 86BD B146 # HANGUL SYLLABLE NIEUN-YEO-NIEUNHIEUH 86BE B147 # HANGUL SYLLABLE NIEUN-YEO-TIKEUT 86BF B149 # HANGUL SYLLABLE NIEUN-YEO-RIEULKIYEOK 86C0 B14A # HANGUL SYLLABLE NIEUN-YEO-RIEULMIEUM 86C1 B14B # HANGUL SYLLABLE NIEUN-YEO-RIEULPIEUP 86C2 B14C # HANGUL SYLLABLE NIEUN-YEO-RIEULSIOS 86C3 B14D # HANGUL SYLLABLE NIEUN-YEO-RIEULTHIEUTH 86C4 B14E # HANGUL SYLLABLE NIEUN-YEO-RIEULPHIEUPH 86C5 B14F # HANGUL SYLLABLE NIEUN-YEO-RIEULHIEUH 86C6 B152 # HANGUL SYLLABLE NIEUN-YEO-PIEUPSIOS 86C7 B153 # HANGUL SYLLABLE NIEUN-YEO-SIOS 86C8 B156 # HANGUL SYLLABLE NIEUN-YEO-CIEUC 86C9 B157 # HANGUL SYLLABLE NIEUN-YEO-CHIEUCH 86CA B159 # HANGUL SYLLABLE NIEUN-YEO-THIEUTH 86CB B15A # HANGUL SYLLABLE NIEUN-YEO-PHIEUPH 86CC B15B # HANGUL SYLLABLE NIEUN-YEO-HIEUH 86CD B15D # HANGUL SYLLABLE NIEUN-YE-KIYEOK 86CE B15E # HANGUL SYLLABLE NIEUN-YE-SSANGKIYEOK 86CF B15F # HANGUL SYLLABLE NIEUN-YE-KIYEOKSIOS 86D0 B161 # HANGUL SYLLABLE NIEUN-YE-NIEUNCIEUC 86D1 B162 # HANGUL SYLLABLE NIEUN-YE-NIEUNHIEUH 86D2 B163 # HANGUL SYLLABLE NIEUN-YE-TIKEUT 86D3 B164 # HANGUL SYLLABLE NIEUN-YE-RIEUL 86D4 B165 # HANGUL SYLLABLE NIEUN-YE-RIEULKIYEOK 86D5 B166 # HANGUL SYLLABLE NIEUN-YE-RIEULMIEUM 86D6 B167 # HANGUL SYLLABLE NIEUN-YE-RIEULPIEUP 86D7 B168 # HANGUL SYLLABLE NIEUN-YE-RIEULSIOS 86D8 B169 # HANGUL SYLLABLE NIEUN-YE-RIEULTHIEUTH 86D9 B16A # HANGUL SYLLABLE NIEUN-YE-RIEULPHIEUPH 86DA B16B # HANGUL SYLLABLE NIEUN-YE-RIEULHIEUH 86DB B16C # HANGUL SYLLABLE NIEUN-YE-MIEUM 86DC B16D # HANGUL SYLLABLE NIEUN-YE-PIEUP 86DD B16E # HANGUL SYLLABLE NIEUN-YE-PIEUPSIOS 86DE B16F # HANGUL SYLLABLE NIEUN-YE-SIOS 86DF B170 # HANGUL SYLLABLE NIEUN-YE-SSANGSIOS 86E0 B171 # HANGUL SYLLABLE NIEUN-YE-IEUNG 86E1 B172 # HANGUL SYLLABLE NIEUN-YE-CIEUC 86E2 B173 # HANGUL SYLLABLE NIEUN-YE-CHIEUCH 86E3 B174 # HANGUL SYLLABLE NIEUN-YE-KHIEUKH 86E4 B175 # HANGUL SYLLABLE NIEUN-YE-THIEUTH 86E5 B176 # HANGUL SYLLABLE NIEUN-YE-PHIEUPH 86E6 B177 # HANGUL SYLLABLE NIEUN-YE-HIEUH 86E7 B17A # HANGUL SYLLABLE NIEUN-O-SSANGKIYEOK 86E8 B17B # HANGUL SYLLABLE NIEUN-O-KIYEOKSIOS 86E9 B17D # HANGUL SYLLABLE NIEUN-O-NIEUNCIEUC 86EA B17E # HANGUL SYLLABLE NIEUN-O-NIEUNHIEUH 86EB B17F # HANGUL SYLLABLE NIEUN-O-TIKEUT 86EC B181 # HANGUL SYLLABLE NIEUN-O-RIEULKIYEOK 86ED B183 # HANGUL SYLLABLE NIEUN-O-RIEULPIEUP 86EE B184 # HANGUL SYLLABLE NIEUN-O-RIEULSIOS 86EF B185 # HANGUL SYLLABLE NIEUN-O-RIEULTHIEUTH 86F0 B186 # HANGUL SYLLABLE NIEUN-O-RIEULPHIEUPH 86F1 B187 # HANGUL SYLLABLE NIEUN-O-RIEULHIEUH 86F2 B18A # HANGUL SYLLABLE NIEUN-O-PIEUPSIOS 86F3 B18C # HANGUL SYLLABLE NIEUN-O-SSANGSIOS 86F4 B18E # HANGUL SYLLABLE NIEUN-O-CIEUC 86F5 B18F # HANGUL SYLLABLE NIEUN-O-CHIEUCH 86F6 B190 # HANGUL SYLLABLE NIEUN-O-KHIEUKH 86F7 B191 # HANGUL SYLLABLE NIEUN-O-THIEUTH 86F8 B195 # HANGUL SYLLABLE NIEUN-WA-KIYEOK 86F9 B196 # HANGUL SYLLABLE NIEUN-WA-SSANGKIYEOK 86FA B197 # HANGUL SYLLABLE NIEUN-WA-KIYEOKSIOS 86FB B199 # HANGUL SYLLABLE NIEUN-WA-NIEUNCIEUC 86FC B19A # HANGUL SYLLABLE NIEUN-WA-NIEUNHIEUH 86FD B19B # HANGUL SYLLABLE NIEUN-WA-TIKEUT 86FE B19D # HANGUL SYLLABLE NIEUN-WA-RIEULKIYEOK 8741 B19E # HANGUL SYLLABLE NIEUN-WA-RIEULMIEUM 8742 B19F # HANGUL SYLLABLE NIEUN-WA-RIEULPIEUP 8743 B1A0 # HANGUL SYLLABLE NIEUN-WA-RIEULSIOS 8744 B1A1 # HANGUL SYLLABLE NIEUN-WA-RIEULTHIEUTH 8745 B1A2 # HANGUL SYLLABLE NIEUN-WA-RIEULPHIEUPH 8746 B1A3 # HANGUL SYLLABLE NIEUN-WA-RIEULHIEUH 8747 B1A4 # HANGUL SYLLABLE NIEUN-WA-MIEUM 8748 B1A5 # HANGUL SYLLABLE NIEUN-WA-PIEUP 8749 B1A6 # HANGUL SYLLABLE NIEUN-WA-PIEUPSIOS 874A B1A7 # HANGUL SYLLABLE NIEUN-WA-SIOS 874B B1A9 # HANGUL SYLLABLE NIEUN-WA-IEUNG 874C B1AA # HANGUL SYLLABLE NIEUN-WA-CIEUC 874D B1AB # HANGUL SYLLABLE NIEUN-WA-CHIEUCH 874E B1AC # HANGUL SYLLABLE NIEUN-WA-KHIEUKH 874F B1AD # HANGUL SYLLABLE NIEUN-WA-THIEUTH 8750 B1AE # HANGUL SYLLABLE NIEUN-WA-PHIEUPH 8751 B1AF # HANGUL SYLLABLE NIEUN-WA-HIEUH 8752 B1B0 # HANGUL SYLLABLE NIEUN-WAE 8753 B1B1 # HANGUL SYLLABLE NIEUN-WAE-KIYEOK 8754 B1B2 # HANGUL SYLLABLE NIEUN-WAE-SSANGKIYEOK 8755 B1B3 # HANGUL SYLLABLE NIEUN-WAE-KIYEOKSIOS 8756 B1B4 # HANGUL SYLLABLE NIEUN-WAE-NIEUN 8757 B1B5 # HANGUL SYLLABLE NIEUN-WAE-NIEUNCIEUC 8758 B1B6 # HANGUL SYLLABLE NIEUN-WAE-NIEUNHIEUH 8759 B1B7 # HANGUL SYLLABLE NIEUN-WAE-TIKEUT 875A B1B8 # HANGUL SYLLABLE NIEUN-WAE-RIEUL 8761 B1B9 # HANGUL SYLLABLE NIEUN-WAE-RIEULKIYEOK 8762 B1BA # HANGUL SYLLABLE NIEUN-WAE-RIEULMIEUM 8763 B1BB # HANGUL SYLLABLE NIEUN-WAE-RIEULPIEUP 8764 B1BC # HANGUL SYLLABLE NIEUN-WAE-RIEULSIOS 8765 B1BD # HANGUL SYLLABLE NIEUN-WAE-RIEULTHIEUTH 8766 B1BE # HANGUL SYLLABLE NIEUN-WAE-RIEULPHIEUPH 8767 B1BF # HANGUL SYLLABLE NIEUN-WAE-RIEULHIEUH 8768 B1C0 # HANGUL SYLLABLE NIEUN-WAE-MIEUM 8769 B1C1 # HANGUL SYLLABLE NIEUN-WAE-PIEUP 876A B1C2 # HANGUL SYLLABLE NIEUN-WAE-PIEUPSIOS 876B B1C3 # HANGUL SYLLABLE NIEUN-WAE-SIOS 876C B1C4 # HANGUL SYLLABLE NIEUN-WAE-SSANGSIOS 876D B1C5 # HANGUL SYLLABLE NIEUN-WAE-IEUNG 876E B1C6 # HANGUL SYLLABLE NIEUN-WAE-CIEUC 876F B1C7 # HANGUL SYLLABLE NIEUN-WAE-CHIEUCH 8770 B1C8 # HANGUL SYLLABLE NIEUN-WAE-KHIEUKH 8771 B1C9 # HANGUL SYLLABLE NIEUN-WAE-THIEUTH 8772 B1CA # HANGUL SYLLABLE NIEUN-WAE-PHIEUPH 8773 B1CB # HANGUL SYLLABLE NIEUN-WAE-HIEUH 8774 B1CD # HANGUL SYLLABLE NIEUN-OE-KIYEOK 8775 B1CE # HANGUL SYLLABLE NIEUN-OE-SSANGKIYEOK 8776 B1CF # HANGUL SYLLABLE NIEUN-OE-KIYEOKSIOS 8777 B1D1 # HANGUL SYLLABLE NIEUN-OE-NIEUNCIEUC 8778 B1D2 # HANGUL SYLLABLE NIEUN-OE-NIEUNHIEUH 8779 B1D3 # HANGUL SYLLABLE NIEUN-OE-TIKEUT 877A B1D5 # HANGUL SYLLABLE NIEUN-OE-RIEULKIYEOK 8781 B1D6 # HANGUL SYLLABLE NIEUN-OE-RIEULMIEUM 8782 B1D7 # HANGUL SYLLABLE NIEUN-OE-RIEULPIEUP 8783 B1D8 # HANGUL SYLLABLE NIEUN-OE-RIEULSIOS 8784 B1D9 # HANGUL SYLLABLE NIEUN-OE-RIEULTHIEUTH 8785 B1DA # HANGUL SYLLABLE NIEUN-OE-RIEULPHIEUPH 8786 B1DB # HANGUL SYLLABLE NIEUN-OE-RIEULHIEUH 8787 B1DE # HANGUL SYLLABLE NIEUN-OE-PIEUPSIOS 8788 B1E0 # HANGUL SYLLABLE NIEUN-OE-SSANGSIOS 8789 B1E1 # HANGUL SYLLABLE NIEUN-OE-IEUNG 878A B1E2 # HANGUL SYLLABLE NIEUN-OE-CIEUC 878B B1E3 # HANGUL SYLLABLE NIEUN-OE-CHIEUCH 878C B1E4 # HANGUL SYLLABLE NIEUN-OE-KHIEUKH 878D B1E5 # HANGUL SYLLABLE NIEUN-OE-THIEUTH 878E B1E6 # HANGUL SYLLABLE NIEUN-OE-PHIEUPH 878F B1E7 # HANGUL SYLLABLE NIEUN-OE-HIEUH 8790 B1EA # HANGUL SYLLABLE NIEUN-YO-SSANGKIYEOK 8791 B1EB # HANGUL SYLLABLE NIEUN-YO-KIYEOKSIOS 8792 B1ED # HANGUL SYLLABLE NIEUN-YO-NIEUNCIEUC 8793 B1EE # HANGUL SYLLABLE NIEUN-YO-NIEUNHIEUH 8794 B1EF # HANGUL SYLLABLE NIEUN-YO-TIKEUT 8795 B1F1 # HANGUL SYLLABLE NIEUN-YO-RIEULKIYEOK 8796 B1F2 # HANGUL SYLLABLE NIEUN-YO-RIEULMIEUM 8797 B1F3 # HANGUL SYLLABLE NIEUN-YO-RIEULPIEUP 8798 B1F4 # HANGUL SYLLABLE NIEUN-YO-RIEULSIOS 8799 B1F5 # HANGUL SYLLABLE NIEUN-YO-RIEULTHIEUTH 879A B1F6 # HANGUL SYLLABLE NIEUN-YO-RIEULPHIEUPH 879B B1F7 # HANGUL SYLLABLE NIEUN-YO-RIEULHIEUH 879C B1F8 # HANGUL SYLLABLE NIEUN-YO-MIEUM 879D B1FA # HANGUL SYLLABLE NIEUN-YO-PIEUPSIOS 879E B1FC # HANGUL SYLLABLE NIEUN-YO-SSANGSIOS 879F B1FE # HANGUL SYLLABLE NIEUN-YO-CIEUC 87A0 B1FF # HANGUL SYLLABLE NIEUN-YO-CHIEUCH 87A1 B200 # HANGUL SYLLABLE NIEUN-YO-KHIEUKH 87A2 B201 # HANGUL SYLLABLE NIEUN-YO-THIEUTH 87A3 B202 # HANGUL SYLLABLE NIEUN-YO-PHIEUPH 87A4 B203 # HANGUL SYLLABLE NIEUN-YO-HIEUH 87A5 B206 # HANGUL SYLLABLE NIEUN-U-SSANGKIYEOK 87A6 B207 # HANGUL SYLLABLE NIEUN-U-KIYEOKSIOS 87A7 B209 # HANGUL SYLLABLE NIEUN-U-NIEUNCIEUC 87A8 B20A # HANGUL SYLLABLE NIEUN-U-NIEUNHIEUH 87A9 B20D # HANGUL SYLLABLE NIEUN-U-RIEULKIYEOK 87AA B20E # HANGUL SYLLABLE NIEUN-U-RIEULMIEUM 87AB B20F # HANGUL SYLLABLE NIEUN-U-RIEULPIEUP 87AC B210 # HANGUL SYLLABLE NIEUN-U-RIEULSIOS 87AD B211 # HANGUL SYLLABLE NIEUN-U-RIEULTHIEUTH 87AE B212 # HANGUL SYLLABLE NIEUN-U-RIEULPHIEUPH 87AF B213 # HANGUL SYLLABLE NIEUN-U-RIEULHIEUH 87B0 B216 # HANGUL SYLLABLE NIEUN-U-PIEUPSIOS 87B1 B218 # HANGUL SYLLABLE NIEUN-U-SSANGSIOS 87B2 B21A # HANGUL SYLLABLE NIEUN-U-CIEUC 87B3 B21B # HANGUL SYLLABLE NIEUN-U-CHIEUCH 87B4 B21C # HANGUL SYLLABLE NIEUN-U-KHIEUKH 87B5 B21D # HANGUL SYLLABLE NIEUN-U-THIEUTH 87B6 B21E # HANGUL SYLLABLE NIEUN-U-PHIEUPH 87B7 B21F # HANGUL SYLLABLE NIEUN-U-HIEUH 87B8 B221 # HANGUL SYLLABLE NIEUN-WEO-KIYEOK 87B9 B222 # HANGUL SYLLABLE NIEUN-WEO-SSANGKIYEOK 87BA B223 # HANGUL SYLLABLE NIEUN-WEO-KIYEOKSIOS 87BB B224 # HANGUL SYLLABLE NIEUN-WEO-NIEUN 87BC B225 # HANGUL SYLLABLE NIEUN-WEO-NIEUNCIEUC 87BD B226 # HANGUL SYLLABLE NIEUN-WEO-NIEUNHIEUH 87BE B227 # HANGUL SYLLABLE NIEUN-WEO-TIKEUT 87BF B228 # HANGUL SYLLABLE NIEUN-WEO-RIEUL 87C0 B229 # HANGUL SYLLABLE NIEUN-WEO-RIEULKIYEOK 87C1 B22A # HANGUL SYLLABLE NIEUN-WEO-RIEULMIEUM 87C2 B22B # HANGUL SYLLABLE NIEUN-WEO-RIEULPIEUP 87C3 B22C # HANGUL SYLLABLE NIEUN-WEO-RIEULSIOS 87C4 B22D # HANGUL SYLLABLE NIEUN-WEO-RIEULTHIEUTH 87C5 B22E # HANGUL SYLLABLE NIEUN-WEO-RIEULPHIEUPH 87C6 B22F # HANGUL SYLLABLE NIEUN-WEO-RIEULHIEUH 87C7 B230 # HANGUL SYLLABLE NIEUN-WEO-MIEUM 87C8 B231 # HANGUL SYLLABLE NIEUN-WEO-PIEUP 87C9 B232 # HANGUL SYLLABLE NIEUN-WEO-PIEUPSIOS 87CA B233 # HANGUL SYLLABLE NIEUN-WEO-SIOS 87CB B235 # HANGUL SYLLABLE NIEUN-WEO-IEUNG 87CC B236 # HANGUL SYLLABLE NIEUN-WEO-CIEUC 87CD B237 # HANGUL SYLLABLE NIEUN-WEO-CHIEUCH 87CE B238 # HANGUL SYLLABLE NIEUN-WEO-KHIEUKH 87CF B239 # HANGUL SYLLABLE NIEUN-WEO-THIEUTH 87D0 B23A # HANGUL SYLLABLE NIEUN-WEO-PHIEUPH 87D1 B23B # HANGUL SYLLABLE NIEUN-WEO-HIEUH 87D2 B23D # HANGUL SYLLABLE NIEUN-WE-KIYEOK 87D3 B23E # HANGUL SYLLABLE NIEUN-WE-SSANGKIYEOK 87D4 B23F # HANGUL SYLLABLE NIEUN-WE-KIYEOKSIOS 87D5 B240 # HANGUL SYLLABLE NIEUN-WE-NIEUN 87D6 B241 # HANGUL SYLLABLE NIEUN-WE-NIEUNCIEUC 87D7 B242 # HANGUL SYLLABLE NIEUN-WE-NIEUNHIEUH 87D8 B243 # HANGUL SYLLABLE NIEUN-WE-TIKEUT 87D9 B244 # HANGUL SYLLABLE NIEUN-WE-RIEUL 87DA B245 # HANGUL SYLLABLE NIEUN-WE-RIEULKIYEOK 87DB B246 # HANGUL SYLLABLE NIEUN-WE-RIEULMIEUM 87DC B247 # HANGUL SYLLABLE NIEUN-WE-RIEULPIEUP 87DD B248 # HANGUL SYLLABLE NIEUN-WE-RIEULSIOS 87DE B249 # HANGUL SYLLABLE NIEUN-WE-RIEULTHIEUTH 87DF B24A # HANGUL SYLLABLE NIEUN-WE-RIEULPHIEUPH 87E0 B24B # HANGUL SYLLABLE NIEUN-WE-RIEULHIEUH 87E1 B24C # HANGUL SYLLABLE NIEUN-WE-MIEUM 87E2 B24D # HANGUL SYLLABLE NIEUN-WE-PIEUP 87E3 B24E # HANGUL SYLLABLE NIEUN-WE-PIEUPSIOS 87E4 B24F # HANGUL SYLLABLE NIEUN-WE-SIOS 87E5 B250 # HANGUL SYLLABLE NIEUN-WE-SSANGSIOS 87E6 B251 # HANGUL SYLLABLE NIEUN-WE-IEUNG 87E7 B252 # HANGUL SYLLABLE NIEUN-WE-CIEUC 87E8 B253 # HANGUL SYLLABLE NIEUN-WE-CHIEUCH 87E9 B254 # HANGUL SYLLABLE NIEUN-WE-KHIEUKH 87EA B255 # HANGUL SYLLABLE NIEUN-WE-THIEUTH 87EB B256 # HANGUL SYLLABLE NIEUN-WE-PHIEUPH 87EC B257 # HANGUL SYLLABLE NIEUN-WE-HIEUH 87ED B259 # HANGUL SYLLABLE NIEUN-WI-KIYEOK 87EE B25A # HANGUL SYLLABLE NIEUN-WI-SSANGKIYEOK 87EF B25B # HANGUL SYLLABLE NIEUN-WI-KIYEOKSIOS 87F0 B25D # HANGUL SYLLABLE NIEUN-WI-NIEUNCIEUC 87F1 B25E # HANGUL SYLLABLE NIEUN-WI-NIEUNHIEUH 87F2 B25F # HANGUL SYLLABLE NIEUN-WI-TIKEUT 87F3 B261 # HANGUL SYLLABLE NIEUN-WI-RIEULKIYEOK 87F4 B262 # HANGUL SYLLABLE NIEUN-WI-RIEULMIEUM 87F5 B263 # HANGUL SYLLABLE NIEUN-WI-RIEULPIEUP 87F6 B264 # HANGUL SYLLABLE NIEUN-WI-RIEULSIOS 87F7 B265 # HANGUL SYLLABLE NIEUN-WI-RIEULTHIEUTH 87F8 B266 # HANGUL SYLLABLE NIEUN-WI-RIEULPHIEUPH 87F9 B267 # HANGUL SYLLABLE NIEUN-WI-RIEULHIEUH 87FA B26A # HANGUL SYLLABLE NIEUN-WI-PIEUPSIOS 87FB B26B # HANGUL SYLLABLE NIEUN-WI-SIOS 87FC B26C # HANGUL SYLLABLE NIEUN-WI-SSANGSIOS 87FD B26D # HANGUL SYLLABLE NIEUN-WI-IEUNG 87FE B26E # HANGUL SYLLABLE NIEUN-WI-CIEUC 8841 B26F # HANGUL SYLLABLE NIEUN-WI-CHIEUCH 8842 B270 # HANGUL SYLLABLE NIEUN-WI-KHIEUKH 8843 B271 # HANGUL SYLLABLE NIEUN-WI-THIEUTH 8844 B272 # HANGUL SYLLABLE NIEUN-WI-PHIEUPH 8845 B273 # HANGUL SYLLABLE NIEUN-WI-HIEUH 8846 B276 # HANGUL SYLLABLE NIEUN-YU-SSANGKIYEOK 8847 B277 # HANGUL SYLLABLE NIEUN-YU-KIYEOKSIOS 8848 B278 # HANGUL SYLLABLE NIEUN-YU-NIEUN 8849 B279 # HANGUL SYLLABLE NIEUN-YU-NIEUNCIEUC 884A B27A # HANGUL SYLLABLE NIEUN-YU-NIEUNHIEUH 884B B27B # HANGUL SYLLABLE NIEUN-YU-TIKEUT 884C B27D # HANGUL SYLLABLE NIEUN-YU-RIEULKIYEOK 884D B27E # HANGUL SYLLABLE NIEUN-YU-RIEULMIEUM 884E B27F # HANGUL SYLLABLE NIEUN-YU-RIEULPIEUP 884F B280 # HANGUL SYLLABLE NIEUN-YU-RIEULSIOS 8850 B281 # HANGUL SYLLABLE NIEUN-YU-RIEULTHIEUTH 8851 B282 # HANGUL SYLLABLE NIEUN-YU-RIEULPHIEUPH 8852 B283 # HANGUL SYLLABLE NIEUN-YU-RIEULHIEUH 8853 B286 # HANGUL SYLLABLE NIEUN-YU-PIEUPSIOS 8854 B287 # HANGUL SYLLABLE NIEUN-YU-SIOS 8855 B288 # HANGUL SYLLABLE NIEUN-YU-SSANGSIOS 8856 B28A # HANGUL SYLLABLE NIEUN-YU-CIEUC 8857 B28B # HANGUL SYLLABLE NIEUN-YU-CHIEUCH 8858 B28C # HANGUL SYLLABLE NIEUN-YU-KHIEUKH 8859 B28D # HANGUL SYLLABLE NIEUN-YU-THIEUTH 885A B28E # HANGUL SYLLABLE NIEUN-YU-PHIEUPH 8861 B28F # HANGUL SYLLABLE NIEUN-YU-HIEUH 8862 B292 # HANGUL SYLLABLE NIEUN-EU-SSANGKIYEOK 8863 B293 # HANGUL SYLLABLE NIEUN-EU-KIYEOKSIOS 8864 B295 # HANGUL SYLLABLE NIEUN-EU-NIEUNCIEUC 8865 B296 # HANGUL SYLLABLE NIEUN-EU-NIEUNHIEUH 8866 B297 # HANGUL SYLLABLE NIEUN-EU-TIKEUT 8867 B29B # HANGUL SYLLABLE NIEUN-EU-RIEULPIEUP 8868 B29C # HANGUL SYLLABLE NIEUN-EU-RIEULSIOS 8869 B29D # HANGUL SYLLABLE NIEUN-EU-RIEULTHIEUTH 886A B29E # HANGUL SYLLABLE NIEUN-EU-RIEULPHIEUPH 886B B29F # HANGUL SYLLABLE NIEUN-EU-RIEULHIEUH 886C B2A2 # HANGUL SYLLABLE NIEUN-EU-PIEUPSIOS 886D B2A4 # HANGUL SYLLABLE NIEUN-EU-SSANGSIOS 886E B2A7 # HANGUL SYLLABLE NIEUN-EU-CHIEUCH 886F B2A8 # HANGUL SYLLABLE NIEUN-EU-KHIEUKH 8870 B2A9 # HANGUL SYLLABLE NIEUN-EU-THIEUTH 8871 B2AB # HANGUL SYLLABLE NIEUN-EU-HIEUH 8872 B2AD # HANGUL SYLLABLE NIEUN-YI-KIYEOK 8873 B2AE # HANGUL SYLLABLE NIEUN-YI-SSANGKIYEOK 8874 B2AF # HANGUL SYLLABLE NIEUN-YI-KIYEOKSIOS 8875 B2B1 # HANGUL SYLLABLE NIEUN-YI-NIEUNCIEUC 8876 B2B2 # HANGUL SYLLABLE NIEUN-YI-NIEUNHIEUH 8877 B2B3 # HANGUL SYLLABLE NIEUN-YI-TIKEUT 8878 B2B5 # HANGUL SYLLABLE NIEUN-YI-RIEULKIYEOK 8879 B2B6 # HANGUL SYLLABLE NIEUN-YI-RIEULMIEUM 887A B2B7 # HANGUL SYLLABLE NIEUN-YI-RIEULPIEUP 8881 B2B8 # HANGUL SYLLABLE NIEUN-YI-RIEULSIOS 8882 B2B9 # HANGUL SYLLABLE NIEUN-YI-RIEULTHIEUTH 8883 B2BA # HANGUL SYLLABLE NIEUN-YI-RIEULPHIEUPH 8884 B2BB # HANGUL SYLLABLE NIEUN-YI-RIEULHIEUH 8885 B2BC # HANGUL SYLLABLE NIEUN-YI-MIEUM 8886 B2BD # HANGUL SYLLABLE NIEUN-YI-PIEUP 8887 B2BE # HANGUL SYLLABLE NIEUN-YI-PIEUPSIOS 8888 B2BF # HANGUL SYLLABLE NIEUN-YI-SIOS 8889 B2C0 # HANGUL SYLLABLE NIEUN-YI-SSANGSIOS 888A B2C1 # HANGUL SYLLABLE NIEUN-YI-IEUNG 888B B2C2 # HANGUL SYLLABLE NIEUN-YI-CIEUC 888C B2C3 # HANGUL SYLLABLE NIEUN-YI-CHIEUCH 888D B2C4 # HANGUL SYLLABLE NIEUN-YI-KHIEUKH 888E B2C5 # HANGUL SYLLABLE NIEUN-YI-THIEUTH 888F B2C6 # HANGUL SYLLABLE NIEUN-YI-PHIEUPH 8890 B2C7 # HANGUL SYLLABLE NIEUN-YI-HIEUH 8891 B2CA # HANGUL SYLLABLE NIEUN-I-SSANGKIYEOK 8892 B2CB # HANGUL SYLLABLE NIEUN-I-KIYEOKSIOS 8893 B2CD # HANGUL SYLLABLE NIEUN-I-NIEUNCIEUC 8894 B2CE # HANGUL SYLLABLE NIEUN-I-NIEUNHIEUH 8895 B2CF # HANGUL SYLLABLE NIEUN-I-TIKEUT 8896 B2D1 # HANGUL SYLLABLE NIEUN-I-RIEULKIYEOK 8897 B2D3 # HANGUL SYLLABLE NIEUN-I-RIEULPIEUP--<3/22/95> 8898 B2D4 # HANGUL SYLLABLE NIEUN-I-RIEULSIOS---<3/22/95> 8899 B2D5 # HANGUL SYLLABLE NIEUN-I-RIEULTHIEUTH<3/22/95> 889A B2D6 # HANGUL SYLLABLE NIEUN-I-RIEULPHIEUPH<3/22/95> 889B B2D7 # HANGUL SYLLABLE NIEUN-I-RIEULHIEUH 889C B2DA # HANGUL SYLLABLE NIEUN-I-PIEUPSIOS 889D B2DC # HANGUL SYLLABLE NIEUN-I-SSANGSIOS 889E B2DE # HANGUL SYLLABLE NIEUN-I-CIEUC 889F B2DF # HANGUL SYLLABLE NIEUN-I-CHIEUCH 88A0 B2E0 # HANGUL SYLLABLE NIEUN-I-KHIEUKH 88A1 B2E1 # HANGUL SYLLABLE NIEUN-I-THIEUTH 88A2 B2E3 # HANGUL SYLLABLE NIEUN-I-HIEUH 88A3 B2E7 # HANGUL SYLLABLE TIKEUT-A-KIYEOKSIOS 88A4 B2E9 # HANGUL SYLLABLE TIKEUT-A-NIEUNCIEUC 88A5 B2EA # HANGUL SYLLABLE TIKEUT-A-NIEUNHIEUH 88A6 B2F0 # HANGUL SYLLABLE TIKEUT-A-RIEULSIOS 88A7 B2F1 # HANGUL SYLLABLE TIKEUT-A-RIEULTHIEUTH 88A8 B2F2 # HANGUL SYLLABLE TIKEUT-A-RIEULPHIEUPH 88A9 B2F6 # HANGUL SYLLABLE TIKEUT-A-PIEUPSIOS 88AA B2FC # HANGUL SYLLABLE TIKEUT-A-KHIEUKH 88AB B2FD # HANGUL SYLLABLE TIKEUT-A-THIEUTH 88AC B2FE # HANGUL SYLLABLE TIKEUT-A-PHIEUPH 88AD B302 # HANGUL SYLLABLE TIKEUT-AE-SSANGKIYEOK 88AE B303 # HANGUL SYLLABLE TIKEUT-AE-KIYEOKSIOS 88AF B305 # HANGUL SYLLABLE TIKEUT-AE-NIEUNCIEUC 88B0 B306 # HANGUL SYLLABLE TIKEUT-AE-NIEUNHIEUH 88B1 B307 # HANGUL SYLLABLE TIKEUT-AE-TIKEUT 88B2 B309 # HANGUL SYLLABLE TIKEUT-AE-RIEULKIYEOK 88B3 B30A # HANGUL SYLLABLE TIKEUT-AE-RIEULMIEUM 88B4 B30B # HANGUL SYLLABLE TIKEUT-AE-RIEULPIEUP 88B5 B30C # HANGUL SYLLABLE TIKEUT-AE-RIEULSIOS 88B6 B30D # HANGUL SYLLABLE TIKEUT-AE-RIEULTHIEUTH 88B7 B30E # HANGUL SYLLABLE TIKEUT-AE-RIEULPHIEUPH 88B8 B30F # HANGUL SYLLABLE TIKEUT-AE-RIEULHIEUH 88B9 B312 # HANGUL SYLLABLE TIKEUT-AE-PIEUPSIOS 88BA B316 # HANGUL SYLLABLE TIKEUT-AE-CIEUC 88BB B317 # HANGUL SYLLABLE TIKEUT-AE-CHIEUCH 88BC B318 # HANGUL SYLLABLE TIKEUT-AE-KHIEUKH 88BD B319 # HANGUL SYLLABLE TIKEUT-AE-THIEUTH 88BE B31A # HANGUL SYLLABLE TIKEUT-AE-PHIEUPH 88BF B31B # HANGUL SYLLABLE TIKEUT-AE-HIEUH 88C0 B31D # HANGUL SYLLABLE TIKEUT-YA-KIYEOK 88C1 B31E # HANGUL SYLLABLE TIKEUT-YA-SSANGKIYEOK 88C2 B31F # HANGUL SYLLABLE TIKEUT-YA-KIYEOKSIOS 88C3 B320 # HANGUL SYLLABLE TIKEUT-YA-NIEUN 88C4 B321 # HANGUL SYLLABLE TIKEUT-YA-NIEUNCIEUC 88C5 B322 # HANGUL SYLLABLE TIKEUT-YA-NIEUNHIEUH 88C6 B323 # HANGUL SYLLABLE TIKEUT-YA-TIKEUT 88C7 B324 # HANGUL SYLLABLE TIKEUT-YA-RIEUL 88C8 B325 # HANGUL SYLLABLE TIKEUT-YA-RIEULKIYEOK 88C9 B326 # HANGUL SYLLABLE TIKEUT-YA-RIEULMIEUM 88CA B327 # HANGUL SYLLABLE TIKEUT-YA-RIEULPIEUP 88CB B328 # HANGUL SYLLABLE TIKEUT-YA-RIEULSIOS 88CC B329 # HANGUL SYLLABLE TIKEUT-YA-RIEULTHIEUTH 88CD B32A # HANGUL SYLLABLE TIKEUT-YA-RIEULPHIEUPH 88CE B32B # HANGUL SYLLABLE TIKEUT-YA-RIEULHIEUH 88CF B32C # HANGUL SYLLABLE TIKEUT-YA-MIEUM 88D0 B32D # HANGUL SYLLABLE TIKEUT-YA-PIEUP 88D1 B32E # HANGUL SYLLABLE TIKEUT-YA-PIEUPSIOS 88D2 B32F # HANGUL SYLLABLE TIKEUT-YA-SIOS 88D3 B330 # HANGUL SYLLABLE TIKEUT-YA-SSANGSIOS 88D4 B331 # HANGUL SYLLABLE TIKEUT-YA-IEUNG 88D5 B332 # HANGUL SYLLABLE TIKEUT-YA-CIEUC 88D6 B333 # HANGUL SYLLABLE TIKEUT-YA-CHIEUCH 88D7 B334 # HANGUL SYLLABLE TIKEUT-YA-KHIEUKH 88D8 B335 # HANGUL SYLLABLE TIKEUT-YA-THIEUTH 88D9 B336 # HANGUL SYLLABLE TIKEUT-YA-PHIEUPH 88DA B337 # HANGUL SYLLABLE TIKEUT-YA-HIEUH 88DB B338 # HANGUL SYLLABLE TIKEUT-YAE 88DC B339 # HANGUL SYLLABLE TIKEUT-YAE-KIYEOK 88DD B33A # HANGUL SYLLABLE TIKEUT-YAE-SSANGKIYEOK 88DE B33B # HANGUL SYLLABLE TIKEUT-YAE-KIYEOKSIOS 88DF B33C # HANGUL SYLLABLE TIKEUT-YAE-NIEUN 88E0 B33D # HANGUL SYLLABLE TIKEUT-YAE-NIEUNCIEUC 88E1 B33E # HANGUL SYLLABLE TIKEUT-YAE-NIEUNHIEUH 88E2 B33F # HANGUL SYLLABLE TIKEUT-YAE-TIKEUT 88E3 B340 # HANGUL SYLLABLE TIKEUT-YAE-RIEUL 88E4 B341 # HANGUL SYLLABLE TIKEUT-YAE-RIEULKIYEOK 88E5 B342 # HANGUL SYLLABLE TIKEUT-YAE-RIEULMIEUM 88E6 B343 # HANGUL SYLLABLE TIKEUT-YAE-RIEULPIEUP 88E7 B344 # HANGUL SYLLABLE TIKEUT-YAE-RIEULSIOS 88E8 B345 # HANGUL SYLLABLE TIKEUT-YAE-RIEULTHIEUTH 88E9 B346 # HANGUL SYLLABLE TIKEUT-YAE-RIEULPHIEUPH 88EA B347 # HANGUL SYLLABLE TIKEUT-YAE-RIEULHIEUH 88EB B348 # HANGUL SYLLABLE TIKEUT-YAE-MIEUM 88EC B349 # HANGUL SYLLABLE TIKEUT-YAE-PIEUP 88ED B34A # HANGUL SYLLABLE TIKEUT-YAE-PIEUPSIOS 88EE B34B # HANGUL SYLLABLE TIKEUT-YAE-SIOS 88EF B34C # HANGUL SYLLABLE TIKEUT-YAE-SSANGSIOS 88F0 B34D # HANGUL SYLLABLE TIKEUT-YAE-IEUNG 88F1 B34E # HANGUL SYLLABLE TIKEUT-YAE-CIEUC 88F2 B34F # HANGUL SYLLABLE TIKEUT-YAE-CHIEUCH 88F3 B350 # HANGUL SYLLABLE TIKEUT-YAE-KHIEUKH 88F4 B351 # HANGUL SYLLABLE TIKEUT-YAE-THIEUTH 88F5 B352 # HANGUL SYLLABLE TIKEUT-YAE-PHIEUPH 88F6 B353 # HANGUL SYLLABLE TIKEUT-YAE-HIEUH 88F7 B357 # HANGUL SYLLABLE TIKEUT-EO-KIYEOKSIOS 88F8 B359 # HANGUL SYLLABLE TIKEUT-EO-NIEUNCIEUC 88F9 B35A # HANGUL SYLLABLE TIKEUT-EO-NIEUNHIEUH 88FA B35D # HANGUL SYLLABLE TIKEUT-EO-RIEULKIYEOK 88FB B360 # HANGUL SYLLABLE TIKEUT-EO-RIEULSIOS 88FC B361 # HANGUL SYLLABLE TIKEUT-EO-RIEULTHIEUTH 88FD B362 # HANGUL SYLLABLE TIKEUT-EO-RIEULPHIEUPH 88FE B363 # HANGUL SYLLABLE TIKEUT-EO-RIEULHIEUH 8941 B366 # HANGUL SYLLABLE TIKEUT-EO-PIEUPSIOS 8942 B368 # HANGUL SYLLABLE TIKEUT-EO-SSANGSIOS 8943 B36A # HANGUL SYLLABLE TIKEUT-EO-CIEUC 8944 B36C # HANGUL SYLLABLE TIKEUT-EO-KHIEUKH 8945 B36D # HANGUL SYLLABLE TIKEUT-EO-THIEUTH 8946 B36F # HANGUL SYLLABLE TIKEUT-EO-HIEUH 8947 B372 # HANGUL SYLLABLE TIKEUT-E-SSANGKIYEOK 8948 B373 # HANGUL SYLLABLE TIKEUT-E-KIYEOKSIOS 8949 B375 # HANGUL SYLLABLE TIKEUT-E-NIEUNCIEUC 894A B376 # HANGUL SYLLABLE TIKEUT-E-NIEUNHIEUH 894B B377 # HANGUL SYLLABLE TIKEUT-E-TIKEUT 894C B379 # HANGUL SYLLABLE TIKEUT-E-RIEULKIYEOK 894D B37A # HANGUL SYLLABLE TIKEUT-E-RIEULMIEUM 894E B37B # HANGUL SYLLABLE TIKEUT-E-RIEULPIEUP 894F B37C # HANGUL SYLLABLE TIKEUT-E-RIEULSIOS 8950 B37D # HANGUL SYLLABLE TIKEUT-E-RIEULTHIEUTH 8951 B37E # HANGUL SYLLABLE TIKEUT-E-RIEULPHIEUPH 8952 B37F # HANGUL SYLLABLE TIKEUT-E-RIEULHIEUH 8953 B382 # HANGUL SYLLABLE TIKEUT-E-PIEUPSIOS 8954 B386 # HANGUL SYLLABLE TIKEUT-E-CIEUC 8955 B387 # HANGUL SYLLABLE TIKEUT-E-CHIEUCH 8956 B388 # HANGUL SYLLABLE TIKEUT-E-KHIEUKH 8957 B389 # HANGUL SYLLABLE TIKEUT-E-THIEUTH 8958 B38A # HANGUL SYLLABLE TIKEUT-E-PHIEUPH 8959 B38B # HANGUL SYLLABLE TIKEUT-E-HIEUH 895A B38D # HANGUL SYLLABLE TIKEUT-YEO-KIYEOK 8961 B38E # HANGUL SYLLABLE TIKEUT-YEO-SSANGKIYEOK 8962 B38F # HANGUL SYLLABLE TIKEUT-YEO-KIYEOKSIOS 8963 B391 # HANGUL SYLLABLE TIKEUT-YEO-NIEUNCIEUC 8964 B392 # HANGUL SYLLABLE TIKEUT-YEO-NIEUNHIEUH 8965 B393 # HANGUL SYLLABLE TIKEUT-YEO-TIKEUT 8966 B395 # HANGUL SYLLABLE TIKEUT-YEO-RIEULKIYEOK 8967 B396 # HANGUL SYLLABLE TIKEUT-YEO-RIEULMIEUM 8968 B397 # HANGUL SYLLABLE TIKEUT-YEO-RIEULPIEUP 8969 B398 # HANGUL SYLLABLE TIKEUT-YEO-RIEULSIOS 896A B399 # HANGUL SYLLABLE TIKEUT-YEO-RIEULTHIEUTH 896B B39A # HANGUL SYLLABLE TIKEUT-YEO-RIEULPHIEUPH 896C B39B # HANGUL SYLLABLE TIKEUT-YEO-RIEULHIEUH 896D B39C # HANGUL SYLLABLE TIKEUT-YEO-MIEUM 896E B39D # HANGUL SYLLABLE TIKEUT-YEO-PIEUP 896F B39E # HANGUL SYLLABLE TIKEUT-YEO-PIEUPSIOS 8970 B39F # HANGUL SYLLABLE TIKEUT-YEO-SIOS 8971 B3A2 # HANGUL SYLLABLE TIKEUT-YEO-CIEUC 8972 B3A3 # HANGUL SYLLABLE TIKEUT-YEO-CHIEUCH 8973 B3A4 # HANGUL SYLLABLE TIKEUT-YEO-KHIEUKH 8974 B3A5 # HANGUL SYLLABLE TIKEUT-YEO-THIEUTH 8975 B3A6 # HANGUL SYLLABLE TIKEUT-YEO-PHIEUPH 8976 B3A7 # HANGUL SYLLABLE TIKEUT-YEO-HIEUH 8977 B3A9 # HANGUL SYLLABLE TIKEUT-YE-KIYEOK 8978 B3AA # HANGUL SYLLABLE TIKEUT-YE-SSANGKIYEOK 8979 B3AB # HANGUL SYLLABLE TIKEUT-YE-KIYEOKSIOS 897A B3AD # HANGUL SYLLABLE TIKEUT-YE-NIEUNCIEUC 8981 B3AE # HANGUL SYLLABLE TIKEUT-YE-NIEUNHIEUH 8982 B3AF # HANGUL SYLLABLE TIKEUT-YE-TIKEUT 8983 B3B0 # HANGUL SYLLABLE TIKEUT-YE-RIEUL 8984 B3B1 # HANGUL SYLLABLE TIKEUT-YE-RIEULKIYEOK 8985 B3B2 # HANGUL SYLLABLE TIKEUT-YE-RIEULMIEUM 8986 B3B3 # HANGUL SYLLABLE TIKEUT-YE-RIEULPIEUP 8987 B3B4 # HANGUL SYLLABLE TIKEUT-YE-RIEULSIOS 8988 B3B5 # HANGUL SYLLABLE TIKEUT-YE-RIEULTHIEUTH 8989 B3B6 # HANGUL SYLLABLE TIKEUT-YE-RIEULPHIEUPH 898A B3B7 # HANGUL SYLLABLE TIKEUT-YE-RIEULHIEUH 898B B3B8 # HANGUL SYLLABLE TIKEUT-YE-MIEUM 898C B3B9 # HANGUL SYLLABLE TIKEUT-YE-PIEUP 898D B3BA # HANGUL SYLLABLE TIKEUT-YE-PIEUPSIOS 898E B3BB # HANGUL SYLLABLE TIKEUT-YE-SIOS 898F B3BC # HANGUL SYLLABLE TIKEUT-YE-SSANGSIOS 8990 B3BD # HANGUL SYLLABLE TIKEUT-YE-IEUNG 8991 B3BE # HANGUL SYLLABLE TIKEUT-YE-CIEUC 8992 B3BF # HANGUL SYLLABLE TIKEUT-YE-CHIEUCH 8993 B3C0 # HANGUL SYLLABLE TIKEUT-YE-KHIEUKH 8994 B3C1 # HANGUL SYLLABLE TIKEUT-YE-THIEUTH 8995 B3C2 # HANGUL SYLLABLE TIKEUT-YE-PHIEUPH 8996 B3C3 # HANGUL SYLLABLE TIKEUT-YE-HIEUH 8997 B3C6 # HANGUL SYLLABLE TIKEUT-O-SSANGKIYEOK 8998 B3C7 # HANGUL SYLLABLE TIKEUT-O-KIYEOKSIOS 8999 B3C9 # HANGUL SYLLABLE TIKEUT-O-NIEUNCIEUC 899A B3CA # HANGUL SYLLABLE TIKEUT-O-NIEUNHIEUH 899B B3CD # HANGUL SYLLABLE TIKEUT-O-RIEULKIYEOK 899C B3CF # HANGUL SYLLABLE TIKEUT-O-RIEULPIEUP 899D B3D1 # HANGUL SYLLABLE TIKEUT-O-RIEULTHIEUTH 899E B3D2 # HANGUL SYLLABLE TIKEUT-O-RIEULPHIEUPH 899F B3D3 # HANGUL SYLLABLE TIKEUT-O-RIEULHIEUH 89A0 B3D6 # HANGUL SYLLABLE TIKEUT-O-PIEUPSIOS 89A1 B3D8 # HANGUL SYLLABLE TIKEUT-O-SSANGSIOS 89A2 B3DA # HANGUL SYLLABLE TIKEUT-O-CIEUC 89A3 B3DC # HANGUL SYLLABLE TIKEUT-O-KHIEUKH 89A4 B3DE # HANGUL SYLLABLE TIKEUT-O-PHIEUPH 89A5 B3DF # HANGUL SYLLABLE TIKEUT-O-HIEUH 89A6 B3E1 # HANGUL SYLLABLE TIKEUT-WA-KIYEOK 89A7 B3E2 # HANGUL SYLLABLE TIKEUT-WA-SSANGKIYEOK 89A8 B3E3 # HANGUL SYLLABLE TIKEUT-WA-KIYEOKSIOS 89A9 B3E5 # HANGUL SYLLABLE TIKEUT-WA-NIEUNCIEUC 89AA B3E6 # HANGUL SYLLABLE TIKEUT-WA-NIEUNHIEUH 89AB B3E7 # HANGUL SYLLABLE TIKEUT-WA-TIKEUT 89AC B3E9 # HANGUL SYLLABLE TIKEUT-WA-RIEULKIYEOK 89AD B3EA # HANGUL SYLLABLE TIKEUT-WA-RIEULMIEUM 89AE B3EB # HANGUL SYLLABLE TIKEUT-WA-RIEULPIEUP 89AF B3EC # HANGUL SYLLABLE TIKEUT-WA-RIEULSIOS 89B0 B3ED # HANGUL SYLLABLE TIKEUT-WA-RIEULTHIEUTH 89B1 B3EE # HANGUL SYLLABLE TIKEUT-WA-RIEULPHIEUPH 89B2 B3EF # HANGUL SYLLABLE TIKEUT-WA-RIEULHIEUH 89B3 B3F0 # HANGUL SYLLABLE TIKEUT-WA-MIEUM 89B4 B3F1 # HANGUL SYLLABLE TIKEUT-WA-PIEUP 89B5 B3F2 # HANGUL SYLLABLE TIKEUT-WA-PIEUPSIOS 89B6 B3F3 # HANGUL SYLLABLE TIKEUT-WA-SIOS 89B7 B3F4 # HANGUL SYLLABLE TIKEUT-WA-SSANGSIOS 89B8 B3F5 # HANGUL SYLLABLE TIKEUT-WA-IEUNG 89B9 B3F6 # HANGUL SYLLABLE TIKEUT-WA-CIEUC 89BA B3F7 # HANGUL SYLLABLE TIKEUT-WA-CHIEUCH 89BB B3F8 # HANGUL SYLLABLE TIKEUT-WA-KHIEUKH 89BC B3F9 # HANGUL SYLLABLE TIKEUT-WA-THIEUTH 89BD B3FA # HANGUL SYLLABLE TIKEUT-WA-PHIEUPH 89BE B3FB # HANGUL SYLLABLE TIKEUT-WA-HIEUH 89BF B3FD # HANGUL SYLLABLE TIKEUT-WAE-KIYEOK 89C0 B3FE # HANGUL SYLLABLE TIKEUT-WAE-SSANGKIYEOK 89C1 B3FF # HANGUL SYLLABLE TIKEUT-WAE-KIYEOKSIOS 89C2 B400 # HANGUL SYLLABLE TIKEUT-WAE-NIEUN 89C3 B401 # HANGUL SYLLABLE TIKEUT-WAE-NIEUNCIEUC 89C4 B402 # HANGUL SYLLABLE TIKEUT-WAE-NIEUNHIEUH 89C5 B403 # HANGUL SYLLABLE TIKEUT-WAE-TIKEUT 89C6 B404 # HANGUL SYLLABLE TIKEUT-WAE-RIEUL 89C7 B405 # HANGUL SYLLABLE TIKEUT-WAE-RIEULKIYEOK 89C8 B406 # HANGUL SYLLABLE TIKEUT-WAE-RIEULMIEUM 89C9 B407 # HANGUL SYLLABLE TIKEUT-WAE-RIEULPIEUP 89CA B408 # HANGUL SYLLABLE TIKEUT-WAE-RIEULSIOS 89CB B409 # HANGUL SYLLABLE TIKEUT-WAE-RIEULTHIEUTH 89CC B40A # HANGUL SYLLABLE TIKEUT-WAE-RIEULPHIEUPH 89CD B40B # HANGUL SYLLABLE TIKEUT-WAE-RIEULHIEUH 89CE B40C # HANGUL SYLLABLE TIKEUT-WAE-MIEUM 89CF B40D # HANGUL SYLLABLE TIKEUT-WAE-PIEUP 89D0 B40E # HANGUL SYLLABLE TIKEUT-WAE-PIEUPSIOS 89D1 B40F # HANGUL SYLLABLE TIKEUT-WAE-SIOS 89D2 B411 # HANGUL SYLLABLE TIKEUT-WAE-IEUNG 89D3 B412 # HANGUL SYLLABLE TIKEUT-WAE-CIEUC 89D4 B413 # HANGUL SYLLABLE TIKEUT-WAE-CHIEUCH 89D5 B414 # HANGUL SYLLABLE TIKEUT-WAE-KHIEUKH 89D6 B415 # HANGUL SYLLABLE TIKEUT-WAE-THIEUTH 89D7 B416 # HANGUL SYLLABLE TIKEUT-WAE-PHIEUPH 89D8 B417 # HANGUL SYLLABLE TIKEUT-WAE-HIEUH 89D9 B419 # HANGUL SYLLABLE TIKEUT-OE-KIYEOK 89DA B41A # HANGUL SYLLABLE TIKEUT-OE-SSANGKIYEOK 89DB B41B # HANGUL SYLLABLE TIKEUT-OE-KIYEOKSIOS 89DC B41D # HANGUL SYLLABLE TIKEUT-OE-NIEUNCIEUC 89DD B41E # HANGUL SYLLABLE TIKEUT-OE-NIEUNHIEUH 89DE B41F # HANGUL SYLLABLE TIKEUT-OE-TIKEUT 89DF B421 # HANGUL SYLLABLE TIKEUT-OE-RIEULKIYEOK 89E0 B422 # HANGUL SYLLABLE TIKEUT-OE-RIEULMIEUM 89E1 B423 # HANGUL SYLLABLE TIKEUT-OE-RIEULPIEUP 89E2 B424 # HANGUL SYLLABLE TIKEUT-OE-RIEULSIOS 89E3 B425 # HANGUL SYLLABLE TIKEUT-OE-RIEULTHIEUTH 89E4 B426 # HANGUL SYLLABLE TIKEUT-OE-RIEULPHIEUPH 89E5 B427 # HANGUL SYLLABLE TIKEUT-OE-RIEULHIEUH 89E6 B42A # HANGUL SYLLABLE TIKEUT-OE-PIEUPSIOS 89E7 B42C # HANGUL SYLLABLE TIKEUT-OE-SSANGSIOS 89E8 B42D # HANGUL SYLLABLE TIKEUT-OE-IEUNG 89E9 B42E # HANGUL SYLLABLE TIKEUT-OE-CIEUC 89EA B42F # HANGUL SYLLABLE TIKEUT-OE-CHIEUCH 89EB B430 # HANGUL SYLLABLE TIKEUT-OE-KHIEUKH 89EC B431 # HANGUL SYLLABLE TIKEUT-OE-THIEUTH 89ED B432 # HANGUL SYLLABLE TIKEUT-OE-PHIEUPH 89EE B433 # HANGUL SYLLABLE TIKEUT-OE-HIEUH 89EF B435 # HANGUL SYLLABLE TIKEUT-YO-KIYEOK 89F0 B436 # HANGUL SYLLABLE TIKEUT-YO-SSANGKIYEOK 89F1 B437 # HANGUL SYLLABLE TIKEUT-YO-KIYEOKSIOS 89F2 B438 # HANGUL SYLLABLE TIKEUT-YO-NIEUN 89F3 B439 # HANGUL SYLLABLE TIKEUT-YO-NIEUNCIEUC 89F4 B43A # HANGUL SYLLABLE TIKEUT-YO-NIEUNHIEUH 89F5 B43B # HANGUL SYLLABLE TIKEUT-YO-TIKEUT 89F6 B43C # HANGUL SYLLABLE TIKEUT-YO-RIEUL 89F7 B43D # HANGUL SYLLABLE TIKEUT-YO-RIEULKIYEOK 89F8 B43E # HANGUL SYLLABLE TIKEUT-YO-RIEULMIEUM 89F9 B43F # HANGUL SYLLABLE TIKEUT-YO-RIEULPIEUP 89FA B440 # HANGUL SYLLABLE TIKEUT-YO-RIEULSIOS 89FB B441 # HANGUL SYLLABLE TIKEUT-YO-RIEULTHIEUTH 89FC B442 # HANGUL SYLLABLE TIKEUT-YO-RIEULPHIEUPH 89FD B443 # HANGUL SYLLABLE TIKEUT-YO-RIEULHIEUH 89FE B444 # HANGUL SYLLABLE TIKEUT-YO-MIEUM 8A41 B445 # HANGUL SYLLABLE TIKEUT-YO-PIEUP 8A42 B446 # HANGUL SYLLABLE TIKEUT-YO-PIEUPSIOS 8A43 B447 # HANGUL SYLLABLE TIKEUT-YO-SIOS 8A44 B448 # HANGUL SYLLABLE TIKEUT-YO-SSANGSIOS 8A45 B449 # HANGUL SYLLABLE TIKEUT-YO-IEUNG 8A46 B44A # HANGUL SYLLABLE TIKEUT-YO-CIEUC 8A47 B44B # HANGUL SYLLABLE TIKEUT-YO-CHIEUCH 8A48 B44C # HANGUL SYLLABLE TIKEUT-YO-KHIEUKH 8A49 B44D # HANGUL SYLLABLE TIKEUT-YO-THIEUTH 8A4A B44E # HANGUL SYLLABLE TIKEUT-YO-PHIEUPH 8A4B B44F # HANGUL SYLLABLE TIKEUT-YO-HIEUH 8A4C B452 # HANGUL SYLLABLE TIKEUT-U-SSANGKIYEOK 8A4D B453 # HANGUL SYLLABLE TIKEUT-U-KIYEOKSIOS 8A4E B455 # HANGUL SYLLABLE TIKEUT-U-NIEUNCIEUC 8A4F B456 # HANGUL SYLLABLE TIKEUT-U-NIEUNHIEUH 8A50 B457 # HANGUL SYLLABLE TIKEUT-U-TIKEUT 8A51 B459 # HANGUL SYLLABLE TIKEUT-U-RIEULKIYEOK 8A52 B45A # HANGUL SYLLABLE TIKEUT-U-RIEULMIEUM 8A53 B45B # HANGUL SYLLABLE TIKEUT-U-RIEULPIEUP 8A54 B45C # HANGUL SYLLABLE TIKEUT-U-RIEULSIOS 8A55 B45D # HANGUL SYLLABLE TIKEUT-U-RIEULTHIEUTH 8A56 B45E # HANGUL SYLLABLE TIKEUT-U-RIEULPHIEUPH 8A57 B45F # HANGUL SYLLABLE TIKEUT-U-RIEULHIEUH 8A58 B462 # HANGUL SYLLABLE TIKEUT-U-PIEUPSIOS 8A59 B464 # HANGUL SYLLABLE TIKEUT-U-SSANGSIOS 8A5A B466 # HANGUL SYLLABLE TIKEUT-U-CIEUC 8A61 B467 # HANGUL SYLLABLE TIKEUT-U-CHIEUCH 8A62 B468 # HANGUL SYLLABLE TIKEUT-U-KHIEUKH 8A63 B469 # HANGUL SYLLABLE TIKEUT-U-THIEUTH 8A64 B46A # HANGUL SYLLABLE TIKEUT-U-PHIEUPH 8A65 B46B # HANGUL SYLLABLE TIKEUT-U-HIEUH 8A66 B46D # HANGUL SYLLABLE TIKEUT-WEO-KIYEOK 8A67 B46E # HANGUL SYLLABLE TIKEUT-WEO-SSANGKIYEOK 8A68 B46F # HANGUL SYLLABLE TIKEUT-WEO-KIYEOKSIOS 8A69 B470 # HANGUL SYLLABLE TIKEUT-WEO-NIEUN 8A6A B471 # HANGUL SYLLABLE TIKEUT-WEO-NIEUNCIEUC 8A6B B472 # HANGUL SYLLABLE TIKEUT-WEO-NIEUNHIEUH 8A6C B473 # HANGUL SYLLABLE TIKEUT-WEO-TIKEUT 8A6D B474 # HANGUL SYLLABLE TIKEUT-WEO-RIEUL 8A6E B475 # HANGUL SYLLABLE TIKEUT-WEO-RIEULKIYEOK 8A6F B476 # HANGUL SYLLABLE TIKEUT-WEO-RIEULMIEUM 8A70 B477 # HANGUL SYLLABLE TIKEUT-WEO-RIEULPIEUP 8A71 B478 # HANGUL SYLLABLE TIKEUT-WEO-RIEULSIOS 8A72 B479 # HANGUL SYLLABLE TIKEUT-WEO-RIEULTHIEUTH 8A73 B47A # HANGUL SYLLABLE TIKEUT-WEO-RIEULPHIEUPH 8A74 B47B # HANGUL SYLLABLE TIKEUT-WEO-RIEULHIEUH 8A75 B47C # HANGUL SYLLABLE TIKEUT-WEO-MIEUM 8A76 B47D # HANGUL SYLLABLE TIKEUT-WEO-PIEUP 8A77 B47E # HANGUL SYLLABLE TIKEUT-WEO-PIEUPSIOS 8A78 B47F # HANGUL SYLLABLE TIKEUT-WEO-SIOS 8A79 B481 # HANGUL SYLLABLE TIKEUT-WEO-IEUNG 8A7A B482 # HANGUL SYLLABLE TIKEUT-WEO-CIEUC 8A81 B483 # HANGUL SYLLABLE TIKEUT-WEO-CHIEUCH 8A82 B484 # HANGUL SYLLABLE TIKEUT-WEO-KHIEUKH 8A83 B485 # HANGUL SYLLABLE TIKEUT-WEO-THIEUTH 8A84 B486 # HANGUL SYLLABLE TIKEUT-WEO-PHIEUPH 8A85 B487 # HANGUL SYLLABLE TIKEUT-WEO-HIEUH 8A86 B489 # HANGUL SYLLABLE TIKEUT-WE-KIYEOK 8A87 B48A # HANGUL SYLLABLE TIKEUT-WE-SSANGKIYEOK 8A88 B48B # HANGUL SYLLABLE TIKEUT-WE-KIYEOKSIOS 8A89 B48C # HANGUL SYLLABLE TIKEUT-WE-NIEUN 8A8A B48D # HANGUL SYLLABLE TIKEUT-WE-NIEUNCIEUC 8A8B B48E # HANGUL SYLLABLE TIKEUT-WE-NIEUNHIEUH 8A8C B48F # HANGUL SYLLABLE TIKEUT-WE-TIKEUT 8A8D B490 # HANGUL SYLLABLE TIKEUT-WE-RIEUL 8A8E B491 # HANGUL SYLLABLE TIKEUT-WE-RIEULKIYEOK 8A8F B492 # HANGUL SYLLABLE TIKEUT-WE-RIEULMIEUM 8A90 B493 # HANGUL SYLLABLE TIKEUT-WE-RIEULPIEUP 8A91 B494 # HANGUL SYLLABLE TIKEUT-WE-RIEULSIOS 8A92 B495 # HANGUL SYLLABLE TIKEUT-WE-RIEULTHIEUTH 8A93 B496 # HANGUL SYLLABLE TIKEUT-WE-RIEULPHIEUPH 8A94 B497 # HANGUL SYLLABLE TIKEUT-WE-RIEULHIEUH 8A95 B498 # HANGUL SYLLABLE TIKEUT-WE-MIEUM 8A96 B499 # HANGUL SYLLABLE TIKEUT-WE-PIEUP 8A97 B49A # HANGUL SYLLABLE TIKEUT-WE-PIEUPSIOS 8A98 B49B # HANGUL SYLLABLE TIKEUT-WE-SIOS 8A99 B49C # HANGUL SYLLABLE TIKEUT-WE-SSANGSIOS 8A9A B49E # HANGUL SYLLABLE TIKEUT-WE-CIEUC 8A9B B49F # HANGUL SYLLABLE TIKEUT-WE-CHIEUCH 8A9C B4A0 # HANGUL SYLLABLE TIKEUT-WE-KHIEUKH 8A9D B4A1 # HANGUL SYLLABLE TIKEUT-WE-THIEUTH 8A9E B4A2 # HANGUL SYLLABLE TIKEUT-WE-PHIEUPH 8A9F B4A3 # HANGUL SYLLABLE TIKEUT-WE-HIEUH 8AA0 B4A5 # HANGUL SYLLABLE TIKEUT-WI-KIYEOK 8AA1 B4A6 # HANGUL SYLLABLE TIKEUT-WI-SSANGKIYEOK 8AA2 B4A7 # HANGUL SYLLABLE TIKEUT-WI-KIYEOKSIOS 8AA3 B4A9 # HANGUL SYLLABLE TIKEUT-WI-NIEUNCIEUC 8AA4 B4AA # HANGUL SYLLABLE TIKEUT-WI-NIEUNHIEUH 8AA5 B4AB # HANGUL SYLLABLE TIKEUT-WI-TIKEUT 8AA6 B4AD # HANGUL SYLLABLE TIKEUT-WI-RIEULKIYEOK 8AA7 B4AE # HANGUL SYLLABLE TIKEUT-WI-RIEULMIEUM 8AA8 B4AF # HANGUL SYLLABLE TIKEUT-WI-RIEULPIEUP 8AA9 B4B0 # HANGUL SYLLABLE TIKEUT-WI-RIEULSIOS 8AAA B4B1 # HANGUL SYLLABLE TIKEUT-WI-RIEULTHIEUTH 8AAB B4B2 # HANGUL SYLLABLE TIKEUT-WI-RIEULPHIEUPH 8AAC B4B3 # HANGUL SYLLABLE TIKEUT-WI-RIEULHIEUH 8AAD B4B4 # HANGUL SYLLABLE TIKEUT-WI-MIEUM 8AAE B4B6 # HANGUL SYLLABLE TIKEUT-WI-PIEUPSIOS 8AAF B4B8 # HANGUL SYLLABLE TIKEUT-WI-SSANGSIOS 8AB0 B4BA # HANGUL SYLLABLE TIKEUT-WI-CIEUC 8AB1 B4BB # HANGUL SYLLABLE TIKEUT-WI-CHIEUCH 8AB2 B4BC # HANGUL SYLLABLE TIKEUT-WI-KHIEUKH 8AB3 B4BD # HANGUL SYLLABLE TIKEUT-WI-THIEUTH 8AB4 B4BE # HANGUL SYLLABLE TIKEUT-WI-PHIEUPH 8AB5 B4BF # HANGUL SYLLABLE TIKEUT-WI-HIEUH 8AB6 B4C1 # HANGUL SYLLABLE TIKEUT-YU-KIYEOK 8AB7 B4C2 # HANGUL SYLLABLE TIKEUT-YU-SSANGKIYEOK 8AB8 B4C3 # HANGUL SYLLABLE TIKEUT-YU-KIYEOKSIOS 8AB9 B4C5 # HANGUL SYLLABLE TIKEUT-YU-NIEUNCIEUC 8ABA B4C6 # HANGUL SYLLABLE TIKEUT-YU-NIEUNHIEUH 8ABB B4C7 # HANGUL SYLLABLE TIKEUT-YU-TIKEUT 8ABC B4C9 # HANGUL SYLLABLE TIKEUT-YU-RIEULKIYEOK 8ABD B4CA # HANGUL SYLLABLE TIKEUT-YU-RIEULMIEUM 8ABE B4CB # HANGUL SYLLABLE TIKEUT-YU-RIEULPIEUP 8ABF B4CC # HANGUL SYLLABLE TIKEUT-YU-RIEULSIOS 8AC0 B4CD # HANGUL SYLLABLE TIKEUT-YU-RIEULTHIEUTH 8AC1 B4CE # HANGUL SYLLABLE TIKEUT-YU-RIEULPHIEUPH 8AC2 B4CF # HANGUL SYLLABLE TIKEUT-YU-RIEULHIEUH 8AC3 B4D1 # HANGUL SYLLABLE TIKEUT-YU-PIEUP 8AC4 B4D2 # HANGUL SYLLABLE TIKEUT-YU-PIEUPSIOS 8AC5 B4D3 # HANGUL SYLLABLE TIKEUT-YU-SIOS 8AC6 B4D4 # HANGUL SYLLABLE TIKEUT-YU-SSANGSIOS 8AC7 B4D6 # HANGUL SYLLABLE TIKEUT-YU-CIEUC 8AC8 B4D7 # HANGUL SYLLABLE TIKEUT-YU-CHIEUCH 8AC9 B4D8 # HANGUL SYLLABLE TIKEUT-YU-KHIEUKH 8ACA B4D9 # HANGUL SYLLABLE TIKEUT-YU-THIEUTH 8ACB B4DA # HANGUL SYLLABLE TIKEUT-YU-PHIEUPH 8ACC B4DB # HANGUL SYLLABLE TIKEUT-YU-HIEUH 8ACD B4DE # HANGUL SYLLABLE TIKEUT-EU-SSANGKIYEOK 8ACE B4DF # HANGUL SYLLABLE TIKEUT-EU-KIYEOKSIOS 8ACF B4E1 # HANGUL SYLLABLE TIKEUT-EU-NIEUNCIEUC 8AD0 B4E2 # HANGUL SYLLABLE TIKEUT-EU-NIEUNHIEUH 8AD1 B4E5 # HANGUL SYLLABLE TIKEUT-EU-RIEULKIYEOK 8AD2 B4E7 # HANGUL SYLLABLE TIKEUT-EU-RIEULPIEUP 8AD3 B4E8 # HANGUL SYLLABLE TIKEUT-EU-RIEULSIOS 8AD4 B4E9 # HANGUL SYLLABLE TIKEUT-EU-RIEULTHIEUTH 8AD5 B4EA # HANGUL SYLLABLE TIKEUT-EU-RIEULPHIEUPH 8AD6 B4EB # HANGUL SYLLABLE TIKEUT-EU-RIEULHIEUH 8AD7 B4EE # HANGUL SYLLABLE TIKEUT-EU-PIEUPSIOS 8AD8 B4F0 # HANGUL SYLLABLE TIKEUT-EU-SSANGSIOS 8AD9 B4F2 # HANGUL SYLLABLE TIKEUT-EU-CIEUC 8ADA B4F3 # HANGUL SYLLABLE TIKEUT-EU-CHIEUCH 8ADB B4F4 # HANGUL SYLLABLE TIKEUT-EU-KHIEUKH 8ADC B4F5 # HANGUL SYLLABLE TIKEUT-EU-THIEUTH 8ADD B4F6 # HANGUL SYLLABLE TIKEUT-EU-PHIEUPH 8ADE B4F7 # HANGUL SYLLABLE TIKEUT-EU-HIEUH 8ADF B4F9 # HANGUL SYLLABLE TIKEUT-YI-KIYEOK 8AE0 B4FA # HANGUL SYLLABLE TIKEUT-YI-SSANGKIYEOK 8AE1 B4FB # HANGUL SYLLABLE TIKEUT-YI-KIYEOKSIOS 8AE2 B4FC # HANGUL SYLLABLE TIKEUT-YI-NIEUN 8AE3 B4FD # HANGUL SYLLABLE TIKEUT-YI-NIEUNCIEUC 8AE4 B4FE # HANGUL SYLLABLE TIKEUT-YI-NIEUNHIEUH 8AE5 B4FF # HANGUL SYLLABLE TIKEUT-YI-TIKEUT 8AE6 B500 # HANGUL SYLLABLE TIKEUT-YI-RIEUL 8AE7 B501 # HANGUL SYLLABLE TIKEUT-YI-RIEULKIYEOK 8AE8 B502 # HANGUL SYLLABLE TIKEUT-YI-RIEULMIEUM 8AE9 B503 # HANGUL SYLLABLE TIKEUT-YI-RIEULPIEUP 8AEA B504 # HANGUL SYLLABLE TIKEUT-YI-RIEULSIOS 8AEB B505 # HANGUL SYLLABLE TIKEUT-YI-RIEULTHIEUTH 8AEC B506 # HANGUL SYLLABLE TIKEUT-YI-RIEULPHIEUPH 8AED B507 # HANGUL SYLLABLE TIKEUT-YI-RIEULHIEUH 8AEE B508 # HANGUL SYLLABLE TIKEUT-YI-MIEUM 8AEF B509 # HANGUL SYLLABLE TIKEUT-YI-PIEUP 8AF0 B50A # HANGUL SYLLABLE TIKEUT-YI-PIEUPSIOS 8AF1 B50B # HANGUL SYLLABLE TIKEUT-YI-SIOS 8AF2 B50C # HANGUL SYLLABLE TIKEUT-YI-SSANGSIOS 8AF3 B50D # HANGUL SYLLABLE TIKEUT-YI-IEUNG 8AF4 B50E # HANGUL SYLLABLE TIKEUT-YI-CIEUC 8AF5 B50F # HANGUL SYLLABLE TIKEUT-YI-CHIEUCH 8AF6 B510 # HANGUL SYLLABLE TIKEUT-YI-KHIEUKH 8AF7 B511 # HANGUL SYLLABLE TIKEUT-YI-THIEUTH 8AF8 B512 # HANGUL SYLLABLE TIKEUT-YI-PHIEUPH 8AF9 B513 # HANGUL SYLLABLE TIKEUT-YI-HIEUH 8AFA B516 # HANGUL SYLLABLE TIKEUT-I-SSANGKIYEOK 8AFB B517 # HANGUL SYLLABLE TIKEUT-I-KIYEOKSIOS 8AFC B519 # HANGUL SYLLABLE TIKEUT-I-NIEUNCIEUC 8AFD B51A # HANGUL SYLLABLE TIKEUT-I-NIEUNHIEUH 8AFE B51D # HANGUL SYLLABLE TIKEUT-I-RIEULKIYEOK 8B41 B51E # HANGUL SYLLABLE TIKEUT-I-RIEULMIEUM 8B42 B51F # HANGUL SYLLABLE TIKEUT-I-RIEULPIEUP 8B43 B520 # HANGUL SYLLABLE TIKEUT-I-RIEULSIOS 8B44 B521 # HANGUL SYLLABLE TIKEUT-I-RIEULTHIEUTH 8B45 B522 # HANGUL SYLLABLE TIKEUT-I-RIEULPHIEUPH 8B46 B523 # HANGUL SYLLABLE TIKEUT-I-RIEULHIEUH 8B47 B526 # HANGUL SYLLABLE TIKEUT-I-PIEUPSIOS 8B48 B52B # HANGUL SYLLABLE TIKEUT-I-CHIEUCH 8B49 B52C # HANGUL SYLLABLE TIKEUT-I-KHIEUKH 8B4A B52D # HANGUL SYLLABLE TIKEUT-I-THIEUTH 8B4B B52E # HANGUL SYLLABLE TIKEUT-I-PHIEUPH 8B4C B52F # HANGUL SYLLABLE TIKEUT-I-HIEUH 8B4D B532 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGKIYEOK 8B4E B533 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOKSIOS 8B4F B535 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUNCIEUC 8B50 B536 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUNHIEUH 8B51 B537 # HANGUL SYLLABLE SSANGTIKEUT-A-TIKEUT 8B52 B539 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULKIYEOK 8B53 B53A # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULMIEUM 8B54 B53B # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULPIEUP 8B55 B53C # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULSIOS 8B56 B53D # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULTHIEUTH 8B57 B53E # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULPHIEUPH 8B58 B53F # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULHIEUH 8B59 B542 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUPSIOS 8B5A B546 # HANGUL SYLLABLE SSANGTIKEUT-A-CIEUC 8B61 B547 # HANGUL SYLLABLE SSANGTIKEUT-A-CHIEUCH 8B62 B548 # HANGUL SYLLABLE SSANGTIKEUT-A-KHIEUKH 8B63 B549 # HANGUL SYLLABLE SSANGTIKEUT-A-THIEUTH 8B64 B54A # HANGUL SYLLABLE SSANGTIKEUT-A-PHIEUPH 8B65 B54E # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGKIYEOK 8B66 B54F # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOKSIOS 8B67 B551 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUNCIEUC 8B68 B552 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUNHIEUH 8B69 B553 # HANGUL SYLLABLE SSANGTIKEUT-AE-TIKEUT 8B6A B555 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULKIYEOK 8B6B B556 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULMIEUM 8B6C B557 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULPIEUP 8B6D B558 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULSIOS 8B6E B559 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULTHIEUTH 8B6F B55A # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULPHIEUPH 8B70 B55B # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULHIEUH 8B71 B55E # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUPSIOS 8B72 B562 # HANGUL SYLLABLE SSANGTIKEUT-AE-CIEUC 8B73 B563 # HANGUL SYLLABLE SSANGTIKEUT-AE-CHIEUCH 8B74 B564 # HANGUL SYLLABLE SSANGTIKEUT-AE-KHIEUKH 8B75 B565 # HANGUL SYLLABLE SSANGTIKEUT-AE-THIEUTH 8B76 B566 # HANGUL SYLLABLE SSANGTIKEUT-AE-PHIEUPH 8B77 B567 # HANGUL SYLLABLE SSANGTIKEUT-AE-HIEUH 8B78 B568 # HANGUL SYLLABLE SSANGTIKEUT-YA 8B79 B569 # HANGUL SYLLABLE SSANGTIKEUT-YA-KIYEOK 8B7A B56A # HANGUL SYLLABLE SSANGTIKEUT-YA-SSANGKIYEOK 8B81 B56B # HANGUL SYLLABLE SSANGTIKEUT-YA-KIYEOKSIOS 8B82 B56C # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUN 8B83 B56D # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUNCIEUC 8B84 B56E # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUNHIEUH 8B85 B56F # HANGUL SYLLABLE SSANGTIKEUT-YA-TIKEUT 8B86 B570 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEUL 8B87 B571 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULKIYEOK 8B88 B572 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULMIEUM 8B89 B573 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULPIEUP 8B8A B574 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULSIOS 8B8B B575 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULTHIEUTH 8B8C B576 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULPHIEUPH 8B8D B577 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULHIEUH 8B8E B578 # HANGUL SYLLABLE SSANGTIKEUT-YA-MIEUM 8B8F B579 # HANGUL SYLLABLE SSANGTIKEUT-YA-PIEUP 8B90 B57A # HANGUL SYLLABLE SSANGTIKEUT-YA-PIEUPSIOS 8B91 B57B # HANGUL SYLLABLE SSANGTIKEUT-YA-SIOS 8B92 B57C # HANGUL SYLLABLE SSANGTIKEUT-YA-SSANGSIOS 8B93 B57D # HANGUL SYLLABLE SSANGTIKEUT-YA-IEUNG 8B94 B57E # HANGUL SYLLABLE SSANGTIKEUT-YA-CIEUC 8B95 B57F # HANGUL SYLLABLE SSANGTIKEUT-YA-CHIEUCH 8B96 B580 # HANGUL SYLLABLE SSANGTIKEUT-YA-KHIEUKH 8B97 B581 # HANGUL SYLLABLE SSANGTIKEUT-YA-THIEUTH 8B98 B582 # HANGUL SYLLABLE SSANGTIKEUT-YA-PHIEUPH 8B99 B583 # HANGUL SYLLABLE SSANGTIKEUT-YA-HIEUH 8B9A B584 # HANGUL SYLLABLE SSANGTIKEUT-YAE 8B9B B585 # HANGUL SYLLABLE SSANGTIKEUT-YAE-KIYEOK 8B9C B586 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SSANGKIYEOK 8B9D B587 # HANGUL SYLLABLE SSANGTIKEUT-YAE-KIYEOKSIOS 8B9E B588 # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUN 8B9F B589 # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUNCIEUC 8BA0 B58A # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUNHIEUH 8BA1 B58B # HANGUL SYLLABLE SSANGTIKEUT-YAE-TIKEUT 8BA2 B58C # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEUL 8BA3 B58D # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULKIYEOK 8BA4 B58E # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULMIEUM 8BA5 B58F # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULPIEUP 8BA6 B590 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULSIOS 8BA7 B591 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULTHIEUTH 8BA8 B592 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULPHIEUPH 8BA9 B593 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULHIEUH 8BAA B594 # HANGUL SYLLABLE SSANGTIKEUT-YAE-MIEUM 8BAB B595 # HANGUL SYLLABLE SSANGTIKEUT-YAE-PIEUP 8BAC B596 # HANGUL SYLLABLE SSANGTIKEUT-YAE-PIEUPSIOS 8BAD B597 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SIOS 8BAE B598 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SSANGSIOS 8BAF B599 # HANGUL SYLLABLE SSANGTIKEUT-YAE-IEUNG 8BB0 B59A # HANGUL SYLLABLE SSANGTIKEUT-YAE-CIEUC 8BB1 B59B # HANGUL SYLLABLE SSANGTIKEUT-YAE-CHIEUCH 8BB2 B59C # HANGUL SYLLABLE SSANGTIKEUT-YAE-KHIEUKH 8BB3 B59D # HANGUL SYLLABLE SSANGTIKEUT-YAE-THIEUTH 8BB4 B59E # HANGUL SYLLABLE SSANGTIKEUT-YAE-PHIEUPH 8BB5 B59F # HANGUL SYLLABLE SSANGTIKEUT-YAE-HIEUH 8BB6 B5A2 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGKIYEOK 8BB7 B5A3 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOKSIOS 8BB8 B5A5 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUNCIEUC 8BB9 B5A6 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUNHIEUH 8BBA B5A7 # HANGUL SYLLABLE SSANGTIKEUT-EO-TIKEUT 8BBB B5A9 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULKIYEOK 8BBC B5AC # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULSIOS 8BBD B5AD # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULTHIEUTH 8BBE B5AE # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPHIEUPH 8BBF B5AF # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULHIEUH 8BC0 B5B2 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUPSIOS 8BC1 B5B6 # HANGUL SYLLABLE SSANGTIKEUT-EO-CIEUC 8BC2 B5B7 # HANGUL SYLLABLE SSANGTIKEUT-EO-CHIEUCH 8BC3 B5B8 # HANGUL SYLLABLE SSANGTIKEUT-EO-KHIEUKH 8BC4 B5B9 # HANGUL SYLLABLE SSANGTIKEUT-EO-THIEUTH 8BC5 B5BA # HANGUL SYLLABLE SSANGTIKEUT-EO-PHIEUPH 8BC6 B5BE # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGKIYEOK 8BC7 B5BF # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOKSIOS 8BC8 B5C1 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUNCIEUC 8BC9 B5C2 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUNHIEUH 8BCA B5C3 # HANGUL SYLLABLE SSANGTIKEUT-E-TIKEUT 8BCB B5C5 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULKIYEOK 8BCC B5C6 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULMIEUM 8BCD B5C7 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULPIEUP 8BCE B5C8 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULSIOS 8BCF B5C9 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULTHIEUTH 8BD0 B5CA # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULPHIEUPH 8BD1 B5CB # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULHIEUH 8BD2 B5CE # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUPSIOS 8BD3 B5D2 # HANGUL SYLLABLE SSANGTIKEUT-E-CIEUC 8BD4 B5D3 # HANGUL SYLLABLE SSANGTIKEUT-E-CHIEUCH 8BD5 B5D4 # HANGUL SYLLABLE SSANGTIKEUT-E-KHIEUKH 8BD6 B5D5 # HANGUL SYLLABLE SSANGTIKEUT-E-THIEUTH 8BD7 B5D6 # HANGUL SYLLABLE SSANGTIKEUT-E-PHIEUPH 8BD8 B5D7 # HANGUL SYLLABLE SSANGTIKEUT-E-HIEUH 8BD9 B5D9 # HANGUL SYLLABLE SSANGTIKEUT-YEO-KIYEOK 8BDA B5DA # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGKIYEOK 8BDB B5DB # HANGUL SYLLABLE SSANGTIKEUT-YEO-KIYEOKSIOS 8BDC B5DC # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUN 8BDD B5DD # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUNCIEUC 8BDE B5DE # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUNHIEUH 8BDF B5DF # HANGUL SYLLABLE SSANGTIKEUT-YEO-TIKEUT 8BE0 B5E0 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEUL 8BE1 B5E1 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULKIYEOK 8BE2 B5E2 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULMIEUM 8BE3 B5E3 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULPIEUP 8BE4 B5E4 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULSIOS 8BE5 B5E5 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULTHIEUTH 8BE6 B5E6 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULPHIEUPH 8BE7 B5E7 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULHIEUH 8BE8 B5E8 # HANGUL SYLLABLE SSANGTIKEUT-YEO-MIEUM 8BE9 B5E9 # HANGUL SYLLABLE SSANGTIKEUT-YEO-PIEUP 8BEA B5EA # HANGUL SYLLABLE SSANGTIKEUT-YEO-PIEUPSIOS 8BEB B5EB # HANGUL SYLLABLE SSANGTIKEUT-YEO-SIOS 8BEC B5ED # HANGUL SYLLABLE SSANGTIKEUT-YEO-IEUNG 8BED B5EE # HANGUL SYLLABLE SSANGTIKEUT-YEO-CIEUC 8BEE B5EF # HANGUL SYLLABLE SSANGTIKEUT-YEO-CHIEUCH 8BEF B5F0 # HANGUL SYLLABLE SSANGTIKEUT-YEO-KHIEUKH 8BF0 B5F1 # HANGUL SYLLABLE SSANGTIKEUT-YEO-THIEUTH 8BF1 B5F2 # HANGUL SYLLABLE SSANGTIKEUT-YEO-PHIEUPH 8BF2 B5F3 # HANGUL SYLLABLE SSANGTIKEUT-YEO-HIEUH 8BF3 B5F4 # HANGUL SYLLABLE SSANGTIKEUT-YE 8BF4 B5F5 # HANGUL SYLLABLE SSANGTIKEUT-YE-KIYEOK 8BF5 B5F6 # HANGUL SYLLABLE SSANGTIKEUT-YE-SSANGKIYEOK 8BF6 B5F7 # HANGUL SYLLABLE SSANGTIKEUT-YE-KIYEOKSIOS 8BF7 B5F8 # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUN 8BF8 B5F9 # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUNCIEUC 8BF9 B5FA # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUNHIEUH 8BFA B5FB # HANGUL SYLLABLE SSANGTIKEUT-YE-TIKEUT 8BFB B5FC # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEUL 8BFC B5FD # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULKIYEOK 8BFD B5FE # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULMIEUM 8BFE B5FF # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULPIEUP 8C41 B600 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULSIOS 8C42 B601 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULTHIEUTH 8C43 B602 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULPHIEUPH 8C44 B603 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULHIEUH 8C45 B604 # HANGUL SYLLABLE SSANGTIKEUT-YE-MIEUM 8C46 B605 # HANGUL SYLLABLE SSANGTIKEUT-YE-PIEUP 8C47 B606 # HANGUL SYLLABLE SSANGTIKEUT-YE-PIEUPSIOS 8C48 B607 # HANGUL SYLLABLE SSANGTIKEUT-YE-SIOS 8C49 B608 # HANGUL SYLLABLE SSANGTIKEUT-YE-SSANGSIOS 8C4A B609 # HANGUL SYLLABLE SSANGTIKEUT-YE-IEUNG 8C4B B60A # HANGUL SYLLABLE SSANGTIKEUT-YE-CIEUC 8C4C B60B # HANGUL SYLLABLE SSANGTIKEUT-YE-CHIEUCH 8C4D B60C # HANGUL SYLLABLE SSANGTIKEUT-YE-KHIEUKH 8C4E B60D # HANGUL SYLLABLE SSANGTIKEUT-YE-THIEUTH 8C4F B60E # HANGUL SYLLABLE SSANGTIKEUT-YE-PHIEUPH 8C50 B60F # HANGUL SYLLABLE SSANGTIKEUT-YE-HIEUH 8C51 B612 # HANGUL SYLLABLE SSANGTIKEUT-O-SSANGKIYEOK 8C52 B613 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOKSIOS 8C53 B615 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUNCIEUC 8C54 B616 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUNHIEUH 8C55 B617 # HANGUL SYLLABLE SSANGTIKEUT-O-TIKEUT 8C56 B619 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULKIYEOK 8C57 B61A # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULMIEUM 8C58 B61B # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULPIEUP 8C59 B61C # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULSIOS 8C5A B61D # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULTHIEUTH 8C61 B61E # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULPHIEUPH 8C62 B61F # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULHIEUH 8C63 B620 # HANGUL SYLLABLE SSANGTIKEUT-O-MIEUM 8C64 B621 # HANGUL SYLLABLE SSANGTIKEUT-O-PIEUP 8C65 B622 # HANGUL SYLLABLE SSANGTIKEUT-O-PIEUPSIOS 8C66 B623 # HANGUL SYLLABLE SSANGTIKEUT-O-SIOS 8C67 B624 # HANGUL SYLLABLE SSANGTIKEUT-O-SSANGSIOS 8C68 B626 # HANGUL SYLLABLE SSANGTIKEUT-O-CIEUC 8C69 B627 # HANGUL SYLLABLE SSANGTIKEUT-O-CHIEUCH 8C6A B628 # HANGUL SYLLABLE SSANGTIKEUT-O-KHIEUKH 8C6B B629 # HANGUL SYLLABLE SSANGTIKEUT-O-THIEUTH 8C6C B62A # HANGUL SYLLABLE SSANGTIKEUT-O-PHIEUPH 8C6D B62B # HANGUL SYLLABLE SSANGTIKEUT-O-HIEUH 8C6E B62D # HANGUL SYLLABLE SSANGTIKEUT-WA-KIYEOK 8C6F B62E # HANGUL SYLLABLE SSANGTIKEUT-WA-SSANGKIYEOK 8C70 B62F # HANGUL SYLLABLE SSANGTIKEUT-WA-KIYEOKSIOS 8C71 B630 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUN 8C72 B631 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUNCIEUC 8C73 B632 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUNHIEUH 8C74 B633 # HANGUL SYLLABLE SSANGTIKEUT-WA-TIKEUT 8C75 B635 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULKIYEOK 8C76 B636 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULMIEUM 8C77 B637 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULPIEUP 8C78 B638 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULSIOS 8C79 B639 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULTHIEUTH 8C7A B63A # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULPHIEUPH 8C81 B63B # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULHIEUH 8C82 B63C # HANGUL SYLLABLE SSANGTIKEUT-WA-MIEUM 8C83 B63D # HANGUL SYLLABLE SSANGTIKEUT-WA-PIEUP 8C84 B63E # HANGUL SYLLABLE SSANGTIKEUT-WA-PIEUPSIOS 8C85 B63F # HANGUL SYLLABLE SSANGTIKEUT-WA-SIOS 8C86 B640 # HANGUL SYLLABLE SSANGTIKEUT-WA-SSANGSIOS 8C87 B641 # HANGUL SYLLABLE SSANGTIKEUT-WA-IEUNG 8C88 B642 # HANGUL SYLLABLE SSANGTIKEUT-WA-CIEUC 8C89 B643 # HANGUL SYLLABLE SSANGTIKEUT-WA-CHIEUCH 8C8A B644 # HANGUL SYLLABLE SSANGTIKEUT-WA-KHIEUKH 8C8B B645 # HANGUL SYLLABLE SSANGTIKEUT-WA-THIEUTH 8C8C B646 # HANGUL SYLLABLE SSANGTIKEUT-WA-PHIEUPH 8C8D B647 # HANGUL SYLLABLE SSANGTIKEUT-WA-HIEUH 8C8E B649 # HANGUL SYLLABLE SSANGTIKEUT-WAE-KIYEOK 8C8F B64A # HANGUL SYLLABLE SSANGTIKEUT-WAE-SSANGKIYEOK 8C90 B64B # HANGUL SYLLABLE SSANGTIKEUT-WAE-KIYEOKSIOS 8C91 B64C # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUN 8C92 B64D # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUNCIEUC 8C93 B64E # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUNHIEUH 8C94 B64F # HANGUL SYLLABLE SSANGTIKEUT-WAE-TIKEUT 8C95 B650 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEUL 8C96 B651 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULKIYEOK 8C97 B652 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULMIEUM 8C98 B653 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULPIEUP 8C99 B654 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULSIOS 8C9A B655 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULTHIEUTH 8C9B B656 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULPHIEUPH 8C9C B657 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULHIEUH 8C9D B658 # HANGUL SYLLABLE SSANGTIKEUT-WAE-MIEUM 8C9E B659 # HANGUL SYLLABLE SSANGTIKEUT-WAE-PIEUP 8C9F B65A # HANGUL SYLLABLE SSANGTIKEUT-WAE-PIEUPSIOS 8CA0 B65B # HANGUL SYLLABLE SSANGTIKEUT-WAE-SIOS 8CA1 B65C # HANGUL SYLLABLE SSANGTIKEUT-WAE-SSANGSIOS 8CA2 B65D # HANGUL SYLLABLE SSANGTIKEUT-WAE-IEUNG 8CA3 B65E # HANGUL SYLLABLE SSANGTIKEUT-WAE-CIEUC 8CA4 B65F # HANGUL SYLLABLE SSANGTIKEUT-WAE-CHIEUCH 8CA5 B660 # HANGUL SYLLABLE SSANGTIKEUT-WAE-KHIEUKH 8CA6 B661 # HANGUL SYLLABLE SSANGTIKEUT-WAE-THIEUTH 8CA7 B662 # HANGUL SYLLABLE SSANGTIKEUT-WAE-PHIEUPH 8CA8 B663 # HANGUL SYLLABLE SSANGTIKEUT-WAE-HIEUH 8CA9 B665 # HANGUL SYLLABLE SSANGTIKEUT-OE-KIYEOK 8CAA B666 # HANGUL SYLLABLE SSANGTIKEUT-OE-SSANGKIYEOK 8CAB B667 # HANGUL SYLLABLE SSANGTIKEUT-OE-KIYEOKSIOS 8CAC B669 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUNCIEUC 8CAD B66A # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUNHIEUH 8CAE B66B # HANGUL SYLLABLE SSANGTIKEUT-OE-TIKEUT 8CAF B66C # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEUL 8CB0 B66D # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULKIYEOK 8CB1 B66E # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULMIEUM 8CB2 B66F # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULPIEUP 8CB3 B670 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULSIOS 8CB4 B671 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULTHIEUTH 8CB5 B672 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULPHIEUPH 8CB6 B673 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULHIEUH 8CB7 B674 # HANGUL SYLLABLE SSANGTIKEUT-OE-MIEUM 8CB8 B675 # HANGUL SYLLABLE SSANGTIKEUT-OE-PIEUP 8CB9 B676 # HANGUL SYLLABLE SSANGTIKEUT-OE-PIEUPSIOS 8CBA B677 # HANGUL SYLLABLE SSANGTIKEUT-OE-SIOS 8CBB B678 # HANGUL SYLLABLE SSANGTIKEUT-OE-SSANGSIOS 8CBC B679 # HANGUL SYLLABLE SSANGTIKEUT-OE-IEUNG 8CBD B67A # HANGUL SYLLABLE SSANGTIKEUT-OE-CIEUC 8CBE B67B # HANGUL SYLLABLE SSANGTIKEUT-OE-CHIEUCH 8CBF B67C # HANGUL SYLLABLE SSANGTIKEUT-OE-KHIEUKH 8CC0 B67D # HANGUL SYLLABLE SSANGTIKEUT-OE-THIEUTH 8CC1 B67E # HANGUL SYLLABLE SSANGTIKEUT-OE-PHIEUPH 8CC2 B67F # HANGUL SYLLABLE SSANGTIKEUT-OE-HIEUH 8CC3 B680 # HANGUL SYLLABLE SSANGTIKEUT-YO 8CC4 B681 # HANGUL SYLLABLE SSANGTIKEUT-YO-KIYEOK 8CC5 B682 # HANGUL SYLLABLE SSANGTIKEUT-YO-SSANGKIYEOK 8CC6 B683 # HANGUL SYLLABLE SSANGTIKEUT-YO-KIYEOKSIOS 8CC7 B684 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUN 8CC8 B685 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUNCIEUC 8CC9 B686 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUNHIEUH 8CCA B687 # HANGUL SYLLABLE SSANGTIKEUT-YO-TIKEUT 8CCB B688 # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEUL 8CCC B689 # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULKIYEOK 8CCD B68A # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULMIEUM 8CCE B68B # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULPIEUP 8CCF B68C # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULSIOS 8CD0 B68D # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULTHIEUTH 8CD1 B68E # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULPHIEUPH 8CD2 B68F # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULHIEUH 8CD3 B690 # HANGUL SYLLABLE SSANGTIKEUT-YO-MIEUM 8CD4 B691 # HANGUL SYLLABLE SSANGTIKEUT-YO-PIEUP 8CD5 B692 # HANGUL SYLLABLE SSANGTIKEUT-YO-PIEUPSIOS 8CD6 B693 # HANGUL SYLLABLE SSANGTIKEUT-YO-SIOS 8CD7 B694 # HANGUL SYLLABLE SSANGTIKEUT-YO-SSANGSIOS 8CD8 B695 # HANGUL SYLLABLE SSANGTIKEUT-YO-IEUNG 8CD9 B696 # HANGUL SYLLABLE SSANGTIKEUT-YO-CIEUC 8CDA B697 # HANGUL SYLLABLE SSANGTIKEUT-YO-CHIEUCH 8CDB B698 # HANGUL SYLLABLE SSANGTIKEUT-YO-KHIEUKH 8CDC B699 # HANGUL SYLLABLE SSANGTIKEUT-YO-THIEUTH 8CDD B69A # HANGUL SYLLABLE SSANGTIKEUT-YO-PHIEUPH 8CDE B69B # HANGUL SYLLABLE SSANGTIKEUT-YO-HIEUH 8CDF B69E # HANGUL SYLLABLE SSANGTIKEUT-U-SSANGKIYEOK 8CE0 B69F # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOKSIOS 8CE1 B6A1 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUNCIEUC 8CE2 B6A2 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUNHIEUH 8CE3 B6A3 # HANGUL SYLLABLE SSANGTIKEUT-U-TIKEUT 8CE4 B6A5 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULKIYEOK 8CE5 B6A6 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULMIEUM 8CE6 B6A7 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULPIEUP 8CE7 B6A8 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULSIOS 8CE8 B6A9 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULTHIEUTH 8CE9 B6AA # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULPHIEUPH 8CEA B6AD # HANGUL SYLLABLE SSANGTIKEUT-U-PIEUP 8CEB B6AE # HANGUL SYLLABLE SSANGTIKEUT-U-PIEUPSIOS 8CEC B6AF # HANGUL SYLLABLE SSANGTIKEUT-U-SIOS 8CED B6B0 # HANGUL SYLLABLE SSANGTIKEUT-U-SSANGSIOS 8CEE B6B2 # HANGUL SYLLABLE SSANGTIKEUT-U-CIEUC 8CEF B6B3 # HANGUL SYLLABLE SSANGTIKEUT-U-CHIEUCH 8CF0 B6B4 # HANGUL SYLLABLE SSANGTIKEUT-U-KHIEUKH 8CF1 B6B5 # HANGUL SYLLABLE SSANGTIKEUT-U-THIEUTH 8CF2 B6B6 # HANGUL SYLLABLE SSANGTIKEUT-U-PHIEUPH 8CF3 B6B7 # HANGUL SYLLABLE SSANGTIKEUT-U-HIEUH 8CF4 B6B8 # HANGUL SYLLABLE SSANGTIKEUT-WEO 8CF5 B6B9 # HANGUL SYLLABLE SSANGTIKEUT-WEO-KIYEOK 8CF6 B6BA # HANGUL SYLLABLE SSANGTIKEUT-WEO-SSANGKIYEOK 8CF7 B6BB # HANGUL SYLLABLE SSANGTIKEUT-WEO-KIYEOKSIOS 8CF8 B6BC # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUN 8CF9 B6BD # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUNCIEUC 8CFA B6BE # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUNHIEUH 8CFB B6BF # HANGUL SYLLABLE SSANGTIKEUT-WEO-TIKEUT 8CFC B6C0 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEUL 8CFD B6C1 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULKIYEOK 8CFE B6C2 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULMIEUM 8D41 B6C3 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULPIEUP 8D42 B6C4 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULSIOS 8D43 B6C5 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULTHIEUTH 8D44 B6C6 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULPHIEUPH 8D45 B6C7 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULHIEUH 8D46 B6C8 # HANGUL SYLLABLE SSANGTIKEUT-WEO-MIEUM 8D47 B6C9 # HANGUL SYLLABLE SSANGTIKEUT-WEO-PIEUP 8D48 B6CA # HANGUL SYLLABLE SSANGTIKEUT-WEO-PIEUPSIOS 8D49 B6CB # HANGUL SYLLABLE SSANGTIKEUT-WEO-SIOS 8D4A B6CC # HANGUL SYLLABLE SSANGTIKEUT-WEO-SSANGSIOS 8D4B B6CD # HANGUL SYLLABLE SSANGTIKEUT-WEO-IEUNG 8D4C B6CE # HANGUL SYLLABLE SSANGTIKEUT-WEO-CIEUC 8D4D B6CF # HANGUL SYLLABLE SSANGTIKEUT-WEO-CHIEUCH 8D4E B6D0 # HANGUL SYLLABLE SSANGTIKEUT-WEO-KHIEUKH 8D4F B6D1 # HANGUL SYLLABLE SSANGTIKEUT-WEO-THIEUTH 8D50 B6D2 # HANGUL SYLLABLE SSANGTIKEUT-WEO-PHIEUPH 8D51 B6D3 # HANGUL SYLLABLE SSANGTIKEUT-WEO-HIEUH 8D52 B6D5 # HANGUL SYLLABLE SSANGTIKEUT-WE-KIYEOK 8D53 B6D6 # HANGUL SYLLABLE SSANGTIKEUT-WE-SSANGKIYEOK 8D54 B6D7 # HANGUL SYLLABLE SSANGTIKEUT-WE-KIYEOKSIOS 8D55 B6D8 # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUN 8D56 B6D9 # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUNCIEUC 8D57 B6DA # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUNHIEUH 8D58 B6DB # HANGUL SYLLABLE SSANGTIKEUT-WE-TIKEUT 8D59 B6DC # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEUL 8D5A B6DD # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULKIYEOK 8D61 B6DE # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULMIEUM 8D62 B6DF # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULPIEUP 8D63 B6E0 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULSIOS 8D64 B6E1 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULTHIEUTH 8D65 B6E2 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULPHIEUPH 8D66 B6E3 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULHIEUH 8D67 B6E4 # HANGUL SYLLABLE SSANGTIKEUT-WE-MIEUM 8D68 B6E5 # HANGUL SYLLABLE SSANGTIKEUT-WE-PIEUP 8D69 B6E6 # HANGUL SYLLABLE SSANGTIKEUT-WE-PIEUPSIOS 8D6A B6E7 # HANGUL SYLLABLE SSANGTIKEUT-WE-SIOS 8D6B B6E8 # HANGUL SYLLABLE SSANGTIKEUT-WE-SSANGSIOS 8D6C B6E9 # HANGUL SYLLABLE SSANGTIKEUT-WE-IEUNG 8D6D B6EA # HANGUL SYLLABLE SSANGTIKEUT-WE-CIEUC 8D6E B6EB # HANGUL SYLLABLE SSANGTIKEUT-WE-CHIEUCH 8D6F B6EC # HANGUL SYLLABLE SSANGTIKEUT-WE-KHIEUKH 8D70 B6ED # HANGUL SYLLABLE SSANGTIKEUT-WE-THIEUTH 8D71 B6EE # HANGUL SYLLABLE SSANGTIKEUT-WE-PHIEUPH 8D72 B6EF # HANGUL SYLLABLE SSANGTIKEUT-WE-HIEUH 8D73 B6F1 # HANGUL SYLLABLE SSANGTIKEUT-WI-KIYEOK 8D74 B6F2 # HANGUL SYLLABLE SSANGTIKEUT-WI-SSANGKIYEOK 8D75 B6F3 # HANGUL SYLLABLE SSANGTIKEUT-WI-KIYEOKSIOS 8D76 B6F5 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUNCIEUC 8D77 B6F6 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUNHIEUH 8D78 B6F7 # HANGUL SYLLABLE SSANGTIKEUT-WI-TIKEUT 8D79 B6F9 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULKIYEOK 8D7A B6FA # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULMIEUM 8D81 B6FB # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULPIEUP 8D82 B6FC # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULSIOS 8D83 B6FD # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULTHIEUTH 8D84 B6FE # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULPHIEUPH 8D85 B6FF # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULHIEUH 8D86 B702 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUPSIOS 8D87 B703 # HANGUL SYLLABLE SSANGTIKEUT-WI-SIOS 8D88 B704 # HANGUL SYLLABLE SSANGTIKEUT-WI-SSANGSIOS 8D89 B706 # HANGUL SYLLABLE SSANGTIKEUT-WI-CIEUC 8D8A B707 # HANGUL SYLLABLE SSANGTIKEUT-WI-CHIEUCH 8D8B B708 # HANGUL SYLLABLE SSANGTIKEUT-WI-KHIEUKH 8D8C B709 # HANGUL SYLLABLE SSANGTIKEUT-WI-THIEUTH 8D8D B70A # HANGUL SYLLABLE SSANGTIKEUT-WI-PHIEUPH 8D8E B70B # HANGUL SYLLABLE SSANGTIKEUT-WI-HIEUH 8D8F B70C # HANGUL SYLLABLE SSANGTIKEUT-YU 8D90 B70D # HANGUL SYLLABLE SSANGTIKEUT-YU-KIYEOK 8D91 B70E # HANGUL SYLLABLE SSANGTIKEUT-YU-SSANGKIYEOK 8D92 B70F # HANGUL SYLLABLE SSANGTIKEUT-YU-KIYEOKSIOS 8D93 B710 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUN 8D94 B711 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUNCIEUC 8D95 B712 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUNHIEUH 8D96 B713 # HANGUL SYLLABLE SSANGTIKEUT-YU-TIKEUT 8D97 B714 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEUL 8D98 B715 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULKIYEOK 8D99 B716 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULMIEUM 8D9A B717 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULPIEUP 8D9B B718 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULSIOS 8D9C B719 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULTHIEUTH 8D9D B71A # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULPHIEUPH 8D9E B71B # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULHIEUH 8D9F B71C # HANGUL SYLLABLE SSANGTIKEUT-YU-MIEUM 8DA0 B71D # HANGUL SYLLABLE SSANGTIKEUT-YU-PIEUP 8DA1 B71E # HANGUL SYLLABLE SSANGTIKEUT-YU-PIEUPSIOS 8DA2 B71F # HANGUL SYLLABLE SSANGTIKEUT-YU-SIOS 8DA3 B720 # HANGUL SYLLABLE SSANGTIKEUT-YU-SSANGSIOS 8DA4 B721 # HANGUL SYLLABLE SSANGTIKEUT-YU-IEUNG 8DA5 B722 # HANGUL SYLLABLE SSANGTIKEUT-YU-CIEUC 8DA6 B723 # HANGUL SYLLABLE SSANGTIKEUT-YU-CHIEUCH 8DA7 B724 # HANGUL SYLLABLE SSANGTIKEUT-YU-KHIEUKH 8DA8 B725 # HANGUL SYLLABLE SSANGTIKEUT-YU-THIEUTH 8DA9 B726 # HANGUL SYLLABLE SSANGTIKEUT-YU-PHIEUPH 8DAA B727 # HANGUL SYLLABLE SSANGTIKEUT-YU-HIEUH 8DAB B72A # HANGUL SYLLABLE SSANGTIKEUT-EU-SSANGKIYEOK 8DAC B72B # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOKSIOS 8DAD B72D # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUNCIEUC 8DAE B72E # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUNHIEUH 8DAF B731 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULKIYEOK 8DB0 B732 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULMIEUM 8DB1 B733 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULPIEUP 8DB2 B734 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULSIOS 8DB3 B735 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULTHIEUTH 8DB4 B736 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULPHIEUPH 8DB5 B737 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULHIEUH 8DB6 B73A # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUPSIOS 8DB7 B73C # HANGUL SYLLABLE SSANGTIKEUT-EU-SSANGSIOS 8DB8 B73D # HANGUL SYLLABLE SSANGTIKEUT-EU-IEUNG 8DB9 B73E # HANGUL SYLLABLE SSANGTIKEUT-EU-CIEUC 8DBA B73F # HANGUL SYLLABLE SSANGTIKEUT-EU-CHIEUCH 8DBB B740 # HANGUL SYLLABLE SSANGTIKEUT-EU-KHIEUKH 8DBC B741 # HANGUL SYLLABLE SSANGTIKEUT-EU-THIEUTH 8DBD B742 # HANGUL SYLLABLE SSANGTIKEUT-EU-PHIEUPH 8DBE B743 # HANGUL SYLLABLE SSANGTIKEUT-EU-HIEUH 8DBF B745 # HANGUL SYLLABLE SSANGTIKEUT-YI-KIYEOK 8DC0 B746 # HANGUL SYLLABLE SSANGTIKEUT-YI-SSANGKIYEOK 8DC1 B747 # HANGUL SYLLABLE SSANGTIKEUT-YI-KIYEOKSIOS 8DC2 B749 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUNCIEUC 8DC3 B74A # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUNHIEUH 8DC4 B74B # HANGUL SYLLABLE SSANGTIKEUT-YI-TIKEUT 8DC5 B74D # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULKIYEOK 8DC6 B74E # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULMIEUM 8DC7 B74F # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULPIEUP 8DC8 B750 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULSIOS 8DC9 B751 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULTHIEUTH 8DCA B752 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULPHIEUPH 8DCB B753 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULHIEUH 8DCC B756 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUPSIOS 8DCD B757 # HANGUL SYLLABLE SSANGTIKEUT-YI-SIOS 8DCE B758 # HANGUL SYLLABLE SSANGTIKEUT-YI-SSANGSIOS 8DCF B759 # HANGUL SYLLABLE SSANGTIKEUT-YI-IEUNG 8DD0 B75A # HANGUL SYLLABLE SSANGTIKEUT-YI-CIEUC 8DD1 B75B # HANGUL SYLLABLE SSANGTIKEUT-YI-CHIEUCH 8DD2 B75C # HANGUL SYLLABLE SSANGTIKEUT-YI-KHIEUKH 8DD3 B75D # HANGUL SYLLABLE SSANGTIKEUT-YI-THIEUTH 8DD4 B75E # HANGUL SYLLABLE SSANGTIKEUT-YI-PHIEUPH 8DD5 B75F # HANGUL SYLLABLE SSANGTIKEUT-YI-HIEUH 8DD6 B761 # HANGUL SYLLABLE SSANGTIKEUT-I-KIYEOK 8DD7 B762 # HANGUL SYLLABLE SSANGTIKEUT-I-SSANGKIYEOK 8DD8 B763 # HANGUL SYLLABLE SSANGTIKEUT-I-KIYEOKSIOS 8DD9 B765 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUNCIEUC 8DDA B766 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUNHIEUH 8DDB B767 # HANGUL SYLLABLE SSANGTIKEUT-I-TIKEUT 8DDC B769 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULKIYEOK 8DDD B76A # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULMIEUM 8DDE B76B # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULPIEUP 8DDF B76C # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULSIOS 8DE0 B76D # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULTHIEUTH 8DE1 B76E # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULPHIEUPH 8DE2 B76F # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULHIEUH 8DE3 B772 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUPSIOS 8DE4 B774 # HANGUL SYLLABLE SSANGTIKEUT-I-SSANGSIOS 8DE5 B776 # HANGUL SYLLABLE SSANGTIKEUT-I-CIEUC 8DE6 B777 # HANGUL SYLLABLE SSANGTIKEUT-I-CHIEUCH 8DE7 B778 # HANGUL SYLLABLE SSANGTIKEUT-I-KHIEUKH 8DE8 B779 # HANGUL SYLLABLE SSANGTIKEUT-I-THIEUTH 8DE9 B77A # HANGUL SYLLABLE SSANGTIKEUT-I-PHIEUPH 8DEA B77B # HANGUL SYLLABLE SSANGTIKEUT-I-HIEUH 8DEB B77E # HANGUL SYLLABLE RIEUL-A-SSANGKIYEOK 8DEC B77F # HANGUL SYLLABLE RIEUL-A-KIYEOKSIOS 8DED B781 # HANGUL SYLLABLE RIEUL-A-NIEUNCIEUC 8DEE B782 # HANGUL SYLLABLE RIEUL-A-NIEUNHIEUH 8DEF B783 # HANGUL SYLLABLE RIEUL-A-TIKEUT 8DF0 B785 # HANGUL SYLLABLE RIEUL-A-RIEULKIYEOK 8DF1 B786 # HANGUL SYLLABLE RIEUL-A-RIEULMIEUM 8DF2 B787 # HANGUL SYLLABLE RIEUL-A-RIEULPIEUP 8DF3 B788 # HANGUL SYLLABLE RIEUL-A-RIEULSIOS 8DF4 B789 # HANGUL SYLLABLE RIEUL-A-RIEULTHIEUTH 8DF5 B78A # HANGUL SYLLABLE RIEUL-A-RIEULPHIEUPH 8DF6 B78B # HANGUL SYLLABLE RIEUL-A-RIEULHIEUH 8DF7 B78E # HANGUL SYLLABLE RIEUL-A-PIEUPSIOS 8DF8 B793 # HANGUL SYLLABLE RIEUL-A-CHIEUCH 8DF9 B794 # HANGUL SYLLABLE RIEUL-A-KHIEUKH 8DFA B795 # HANGUL SYLLABLE RIEUL-A-THIEUTH 8DFB B79A # HANGUL SYLLABLE RIEUL-AE-SSANGKIYEOK 8DFC B79B # HANGUL SYLLABLE RIEUL-AE-KIYEOKSIOS 8DFD B79D # HANGUL SYLLABLE RIEUL-AE-NIEUNCIEUC 8DFE B79E # HANGUL SYLLABLE RIEUL-AE-NIEUNHIEUH 8E41 B79F # HANGUL SYLLABLE RIEUL-AE-TIKEUT 8E42 B7A1 # HANGUL SYLLABLE RIEUL-AE-RIEULKIYEOK 8E43 B7A2 # HANGUL SYLLABLE RIEUL-AE-RIEULMIEUM 8E44 B7A3 # HANGUL SYLLABLE RIEUL-AE-RIEULPIEUP 8E45 B7A4 # HANGUL SYLLABLE RIEUL-AE-RIEULSIOS 8E46 B7A5 # HANGUL SYLLABLE RIEUL-AE-RIEULTHIEUTH 8E47 B7A6 # HANGUL SYLLABLE RIEUL-AE-RIEULPHIEUPH 8E48 B7A7 # HANGUL SYLLABLE RIEUL-AE-RIEULHIEUH 8E49 B7AA # HANGUL SYLLABLE RIEUL-AE-PIEUPSIOS 8E4A B7AE # HANGUL SYLLABLE RIEUL-AE-CIEUC 8E4B B7AF # HANGUL SYLLABLE RIEUL-AE-CHIEUCH 8E4C B7B0 # HANGUL SYLLABLE RIEUL-AE-KHIEUKH 8E4D B7B1 # HANGUL SYLLABLE RIEUL-AE-THIEUTH 8E4E B7B2 # HANGUL SYLLABLE RIEUL-AE-PHIEUPH 8E4F B7B3 # HANGUL SYLLABLE RIEUL-AE-HIEUH 8E50 B7B6 # HANGUL SYLLABLE RIEUL-YA-SSANGKIYEOK 8E51 B7B7 # HANGUL SYLLABLE RIEUL-YA-KIYEOKSIOS 8E52 B7B9 # HANGUL SYLLABLE RIEUL-YA-NIEUNCIEUC 8E53 B7BA # HANGUL SYLLABLE RIEUL-YA-NIEUNHIEUH 8E54 B7BB # HANGUL SYLLABLE RIEUL-YA-TIKEUT 8E55 B7BC # HANGUL SYLLABLE RIEUL-YA-RIEUL 8E56 B7BD # HANGUL SYLLABLE RIEUL-YA-RIEULKIYEOK 8E57 B7BE # HANGUL SYLLABLE RIEUL-YA-RIEULMIEUM 8E58 B7BF # HANGUL SYLLABLE RIEUL-YA-RIEULPIEUP 8E59 B7C0 # HANGUL SYLLABLE RIEUL-YA-RIEULSIOS 8E5A B7C1 # HANGUL SYLLABLE RIEUL-YA-RIEULTHIEUTH 8E61 B7C2 # HANGUL SYLLABLE RIEUL-YA-RIEULPHIEUPH 8E62 B7C3 # HANGUL SYLLABLE RIEUL-YA-RIEULHIEUH 8E63 B7C4 # HANGUL SYLLABLE RIEUL-YA-MIEUM 8E64 B7C5 # HANGUL SYLLABLE RIEUL-YA-PIEUP 8E65 B7C6 # HANGUL SYLLABLE RIEUL-YA-PIEUPSIOS 8E66 B7C8 # HANGUL SYLLABLE RIEUL-YA-SSANGSIOS 8E67 B7CA # HANGUL SYLLABLE RIEUL-YA-CIEUC 8E68 B7CB # HANGUL SYLLABLE RIEUL-YA-CHIEUCH 8E69 B7CC # HANGUL SYLLABLE RIEUL-YA-KHIEUKH 8E6A B7CD # HANGUL SYLLABLE RIEUL-YA-THIEUTH 8E6B B7CE # HANGUL SYLLABLE RIEUL-YA-PHIEUPH 8E6C B7CF # HANGUL SYLLABLE RIEUL-YA-HIEUH 8E6D B7D0 # HANGUL SYLLABLE RIEUL-YAE 8E6E B7D1 # HANGUL SYLLABLE RIEUL-YAE-KIYEOK 8E6F B7D2 # HANGUL SYLLABLE RIEUL-YAE-SSANGKIYEOK 8E70 B7D3 # HANGUL SYLLABLE RIEUL-YAE-KIYEOKSIOS 8E71 B7D4 # HANGUL SYLLABLE RIEUL-YAE-NIEUN 8E72 B7D5 # HANGUL SYLLABLE RIEUL-YAE-NIEUNCIEUC 8E73 B7D6 # HANGUL SYLLABLE RIEUL-YAE-NIEUNHIEUH 8E74 B7D7 # HANGUL SYLLABLE RIEUL-YAE-TIKEUT 8E75 B7D8 # HANGUL SYLLABLE RIEUL-YAE-RIEUL 8E76 B7D9 # HANGUL SYLLABLE RIEUL-YAE-RIEULKIYEOK 8E77 B7DA # HANGUL SYLLABLE RIEUL-YAE-RIEULMIEUM 8E78 B7DB # HANGUL SYLLABLE RIEUL-YAE-RIEULPIEUP 8E79 B7DC # HANGUL SYLLABLE RIEUL-YAE-RIEULSIOS 8E7A B7DD # HANGUL SYLLABLE RIEUL-YAE-RIEULTHIEUTH 8E81 B7DE # HANGUL SYLLABLE RIEUL-YAE-RIEULPHIEUPH 8E82 B7DF # HANGUL SYLLABLE RIEUL-YAE-RIEULHIEUH 8E83 B7E0 # HANGUL SYLLABLE RIEUL-YAE-MIEUM 8E84 B7E1 # HANGUL SYLLABLE RIEUL-YAE-PIEUP 8E85 B7E2 # HANGUL SYLLABLE RIEUL-YAE-PIEUPSIOS 8E86 B7E3 # HANGUL SYLLABLE RIEUL-YAE-SIOS 8E87 B7E4 # HANGUL SYLLABLE RIEUL-YAE-SSANGSIOS 8E88 B7E5 # HANGUL SYLLABLE RIEUL-YAE-IEUNG 8E89 B7E6 # HANGUL SYLLABLE RIEUL-YAE-CIEUC 8E8A B7E7 # HANGUL SYLLABLE RIEUL-YAE-CHIEUCH 8E8B B7E8 # HANGUL SYLLABLE RIEUL-YAE-KHIEUKH 8E8C B7E9 # HANGUL SYLLABLE RIEUL-YAE-THIEUTH 8E8D B7EA # HANGUL SYLLABLE RIEUL-YAE-PHIEUPH 8E8E B7EB # HANGUL SYLLABLE RIEUL-YAE-HIEUH 8E8F B7EE # HANGUL SYLLABLE RIEUL-EO-SSANGKIYEOK 8E90 B7EF # HANGUL SYLLABLE RIEUL-EO-KIYEOKSIOS 8E91 B7F1 # HANGUL SYLLABLE RIEUL-EO-NIEUNCIEUC 8E92 B7F2 # HANGUL SYLLABLE RIEUL-EO-NIEUNHIEUH 8E93 B7F3 # HANGUL SYLLABLE RIEUL-EO-TIKEUT 8E94 B7F5 # HANGUL SYLLABLE RIEUL-EO-RIEULKIYEOK 8E95 B7F6 # HANGUL SYLLABLE RIEUL-EO-RIEULMIEUM 8E96 B7F7 # HANGUL SYLLABLE RIEUL-EO-RIEULPIEUP 8E97 B7F8 # HANGUL SYLLABLE RIEUL-EO-RIEULSIOS 8E98 B7F9 # HANGUL SYLLABLE RIEUL-EO-RIEULTHIEUTH 8E99 B7FA # HANGUL SYLLABLE RIEUL-EO-RIEULPHIEUPH 8E9A B7FB # HANGUL SYLLABLE RIEUL-EO-RIEULHIEUH 8E9B B7FE # HANGUL SYLLABLE RIEUL-EO-PIEUPSIOS 8E9C B802 # HANGUL SYLLABLE RIEUL-EO-CIEUC 8E9D B803 # HANGUL SYLLABLE RIEUL-EO-CHIEUCH 8E9E B804 # HANGUL SYLLABLE RIEUL-EO-KHIEUKH 8E9F B805 # HANGUL SYLLABLE RIEUL-EO-THIEUTH 8EA0 B806 # HANGUL SYLLABLE RIEUL-EO-PHIEUPH 8EA1 B80A # HANGUL SYLLABLE RIEUL-E-SSANGKIYEOK 8EA2 B80B # HANGUL SYLLABLE RIEUL-E-KIYEOKSIOS 8EA3 B80D # HANGUL SYLLABLE RIEUL-E-NIEUNCIEUC 8EA4 B80E # HANGUL SYLLABLE RIEUL-E-NIEUNHIEUH 8EA5 B80F # HANGUL SYLLABLE RIEUL-E-TIKEUT 8EA6 B811 # HANGUL SYLLABLE RIEUL-E-RIEULKIYEOK 8EA7 B812 # HANGUL SYLLABLE RIEUL-E-RIEULMIEUM 8EA8 B813 # HANGUL SYLLABLE RIEUL-E-RIEULPIEUP 8EA9 B814 # HANGUL SYLLABLE RIEUL-E-RIEULSIOS 8EAA B815 # HANGUL SYLLABLE RIEUL-E-RIEULTHIEUTH 8EAB B816 # HANGUL SYLLABLE RIEUL-E-RIEULPHIEUPH 8EAC B817 # HANGUL SYLLABLE RIEUL-E-RIEULHIEUH 8EAD B81A # HANGUL SYLLABLE RIEUL-E-PIEUPSIOS 8EAE B81C # HANGUL SYLLABLE RIEUL-E-SSANGSIOS 8EAF B81E # HANGUL SYLLABLE RIEUL-E-CIEUC 8EB0 B81F # HANGUL SYLLABLE RIEUL-E-CHIEUCH 8EB1 B820 # HANGUL SYLLABLE RIEUL-E-KHIEUKH 8EB2 B821 # HANGUL SYLLABLE RIEUL-E-THIEUTH 8EB3 B822 # HANGUL SYLLABLE RIEUL-E-PHIEUPH 8EB4 B823 # HANGUL SYLLABLE RIEUL-E-HIEUH 8EB5 B826 # HANGUL SYLLABLE RIEUL-YEO-SSANGKIYEOK 8EB6 B827 # HANGUL SYLLABLE RIEUL-YEO-KIYEOKSIOS 8EB7 B829 # HANGUL SYLLABLE RIEUL-YEO-NIEUNCIEUC 8EB8 B82A # HANGUL SYLLABLE RIEUL-YEO-NIEUNHIEUH 8EB9 B82B # HANGUL SYLLABLE RIEUL-YEO-TIKEUT 8EBA B82D # HANGUL SYLLABLE RIEUL-YEO-RIEULKIYEOK 8EBB B82E # HANGUL SYLLABLE RIEUL-YEO-RIEULMIEUM 8EBC B82F # HANGUL SYLLABLE RIEUL-YEO-RIEULPIEUP 8EBD B830 # HANGUL SYLLABLE RIEUL-YEO-RIEULSIOS 8EBE B831 # HANGUL SYLLABLE RIEUL-YEO-RIEULTHIEUTH 8EBF B832 # HANGUL SYLLABLE RIEUL-YEO-RIEULPHIEUPH 8EC0 B833 # HANGUL SYLLABLE RIEUL-YEO-RIEULHIEUH 8EC1 B836 # HANGUL SYLLABLE RIEUL-YEO-PIEUPSIOS 8EC2 B83A # HANGUL SYLLABLE RIEUL-YEO-CIEUC 8EC3 B83B # HANGUL SYLLABLE RIEUL-YEO-CHIEUCH 8EC4 B83C # HANGUL SYLLABLE RIEUL-YEO-KHIEUKH 8EC5 B83D # HANGUL SYLLABLE RIEUL-YEO-THIEUTH 8EC6 B83E # HANGUL SYLLABLE RIEUL-YEO-PHIEUPH 8EC7 B83F # HANGUL SYLLABLE RIEUL-YEO-HIEUH 8EC8 B841 # HANGUL SYLLABLE RIEUL-YE-KIYEOK 8EC9 B842 # HANGUL SYLLABLE RIEUL-YE-SSANGKIYEOK 8ECA B843 # HANGUL SYLLABLE RIEUL-YE-KIYEOKSIOS 8ECB B845 # HANGUL SYLLABLE RIEUL-YE-NIEUNCIEUC 8ECC B846 # HANGUL SYLLABLE RIEUL-YE-NIEUNHIEUH 8ECD B847 # HANGUL SYLLABLE RIEUL-YE-TIKEUT 8ECE B848 # HANGUL SYLLABLE RIEUL-YE-RIEUL 8ECF B849 # HANGUL SYLLABLE RIEUL-YE-RIEULKIYEOK 8ED0 B84A # HANGUL SYLLABLE RIEUL-YE-RIEULMIEUM 8ED1 B84B # HANGUL SYLLABLE RIEUL-YE-RIEULPIEUP 8ED2 B84C # HANGUL SYLLABLE RIEUL-YE-RIEULSIOS 8ED3 B84D # HANGUL SYLLABLE RIEUL-YE-RIEULTHIEUTH 8ED4 B84E # HANGUL SYLLABLE RIEUL-YE-RIEULPHIEUPH 8ED5 B84F # HANGUL SYLLABLE RIEUL-YE-RIEULHIEUH 8ED6 B850 # HANGUL SYLLABLE RIEUL-YE-MIEUM 8ED7 B852 # HANGUL SYLLABLE RIEUL-YE-PIEUPSIOS 8ED8 B854 # HANGUL SYLLABLE RIEUL-YE-SSANGSIOS 8ED9 B855 # HANGUL SYLLABLE RIEUL-YE-IEUNG 8EDA B856 # HANGUL SYLLABLE RIEUL-YE-CIEUC 8EDB B857 # HANGUL SYLLABLE RIEUL-YE-CHIEUCH 8EDC B858 # HANGUL SYLLABLE RIEUL-YE-KHIEUKH 8EDD B859 # HANGUL SYLLABLE RIEUL-YE-THIEUTH 8EDE B85A # HANGUL SYLLABLE RIEUL-YE-PHIEUPH 8EDF B85B # HANGUL SYLLABLE RIEUL-YE-HIEUH 8EE0 B85E # HANGUL SYLLABLE RIEUL-O-SSANGKIYEOK 8EE1 B85F # HANGUL SYLLABLE RIEUL-O-KIYEOKSIOS 8EE2 B861 # HANGUL SYLLABLE RIEUL-O-NIEUNCIEUC 8EE3 B862 # HANGUL SYLLABLE RIEUL-O-NIEUNHIEUH 8EE4 B863 # HANGUL SYLLABLE RIEUL-O-TIKEUT 8EE5 B865 # HANGUL SYLLABLE RIEUL-O-RIEULKIYEOK 8EE6 B866 # HANGUL SYLLABLE RIEUL-O-RIEULMIEUM 8EE7 B867 # HANGUL SYLLABLE RIEUL-O-RIEULPIEUP 8EE8 B868 # HANGUL SYLLABLE RIEUL-O-RIEULSIOS 8EE9 B869 # HANGUL SYLLABLE RIEUL-O-RIEULTHIEUTH 8EEA B86A # HANGUL SYLLABLE RIEUL-O-RIEULPHIEUPH 8EEB B86B # HANGUL SYLLABLE RIEUL-O-RIEULHIEUH 8EEC B86E # HANGUL SYLLABLE RIEUL-O-PIEUPSIOS 8EED B870 # HANGUL SYLLABLE RIEUL-O-SSANGSIOS 8EEE B872 # HANGUL SYLLABLE RIEUL-O-CIEUC 8EEF B873 # HANGUL SYLLABLE RIEUL-O-CHIEUCH 8EF0 B874 # HANGUL SYLLABLE RIEUL-O-KHIEUKH 8EF1 B875 # HANGUL SYLLABLE RIEUL-O-THIEUTH 8EF2 B876 # HANGUL SYLLABLE RIEUL-O-PHIEUPH 8EF3 B877 # HANGUL SYLLABLE RIEUL-O-HIEUH 8EF4 B879 # HANGUL SYLLABLE RIEUL-WA-KIYEOK 8EF5 B87A # HANGUL SYLLABLE RIEUL-WA-SSANGKIYEOK 8EF6 B87B # HANGUL SYLLABLE RIEUL-WA-KIYEOKSIOS 8EF7 B87D # HANGUL SYLLABLE RIEUL-WA-NIEUNCIEUC 8EF8 B87E # HANGUL SYLLABLE RIEUL-WA-NIEUNHIEUH 8EF9 B87F # HANGUL SYLLABLE RIEUL-WA-TIKEUT 8EFA B880 # HANGUL SYLLABLE RIEUL-WA-RIEUL 8EFB B881 # HANGUL SYLLABLE RIEUL-WA-RIEULKIYEOK 8EFC B882 # HANGUL SYLLABLE RIEUL-WA-RIEULMIEUM 8EFD B883 # HANGUL SYLLABLE RIEUL-WA-RIEULPIEUP 8EFE B884 # HANGUL SYLLABLE RIEUL-WA-RIEULSIOS 8F41 B885 # HANGUL SYLLABLE RIEUL-WA-RIEULTHIEUTH 8F42 B886 # HANGUL SYLLABLE RIEUL-WA-RIEULPHIEUPH 8F43 B887 # HANGUL SYLLABLE RIEUL-WA-RIEULHIEUH 8F44 B888 # HANGUL SYLLABLE RIEUL-WA-MIEUM 8F45 B889 # HANGUL SYLLABLE RIEUL-WA-PIEUP 8F46 B88A # HANGUL SYLLABLE RIEUL-WA-PIEUPSIOS 8F47 B88B # HANGUL SYLLABLE RIEUL-WA-SIOS 8F48 B88C # HANGUL SYLLABLE RIEUL-WA-SSANGSIOS 8F49 B88E # HANGUL SYLLABLE RIEUL-WA-CIEUC 8F4A B88F # HANGUL SYLLABLE RIEUL-WA-CHIEUCH 8F4B B890 # HANGUL SYLLABLE RIEUL-WA-KHIEUKH 8F4C B891 # HANGUL SYLLABLE RIEUL-WA-THIEUTH 8F4D B892 # HANGUL SYLLABLE RIEUL-WA-PHIEUPH 8F4E B893 # HANGUL SYLLABLE RIEUL-WA-HIEUH 8F4F B894 # HANGUL SYLLABLE RIEUL-WAE 8F50 B895 # HANGUL SYLLABLE RIEUL-WAE-KIYEOK 8F51 B896 # HANGUL SYLLABLE RIEUL-WAE-SSANGKIYEOK 8F52 B897 # HANGUL SYLLABLE RIEUL-WAE-KIYEOKSIOS 8F53 B898 # HANGUL SYLLABLE RIEUL-WAE-NIEUN 8F54 B899 # HANGUL SYLLABLE RIEUL-WAE-NIEUNCIEUC 8F55 B89A # HANGUL SYLLABLE RIEUL-WAE-NIEUNHIEUH 8F56 B89B # HANGUL SYLLABLE RIEUL-WAE-TIKEUT 8F57 B89C # HANGUL SYLLABLE RIEUL-WAE-RIEUL 8F58 B89D # HANGUL SYLLABLE RIEUL-WAE-RIEULKIYEOK 8F59 B89E # HANGUL SYLLABLE RIEUL-WAE-RIEULMIEUM 8F5A B89F # HANGUL SYLLABLE RIEUL-WAE-RIEULPIEUP 8F61 B8A0 # HANGUL SYLLABLE RIEUL-WAE-RIEULSIOS 8F62 B8A1 # HANGUL SYLLABLE RIEUL-WAE-RIEULTHIEUTH 8F63 B8A2 # HANGUL SYLLABLE RIEUL-WAE-RIEULPHIEUPH 8F64 B8A3 # HANGUL SYLLABLE RIEUL-WAE-RIEULHIEUH 8F65 B8A4 # HANGUL SYLLABLE RIEUL-WAE-MIEUM 8F66 B8A5 # HANGUL SYLLABLE RIEUL-WAE-PIEUP 8F67 B8A6 # HANGUL SYLLABLE RIEUL-WAE-PIEUPSIOS 8F68 B8A7 # HANGUL SYLLABLE RIEUL-WAE-SIOS 8F69 B8A9 # HANGUL SYLLABLE RIEUL-WAE-IEUNG 8F6A B8AA # HANGUL SYLLABLE RIEUL-WAE-CIEUC 8F6B B8AB # HANGUL SYLLABLE RIEUL-WAE-CHIEUCH 8F6C B8AC # HANGUL SYLLABLE RIEUL-WAE-KHIEUKH 8F6D B8AD # HANGUL SYLLABLE RIEUL-WAE-THIEUTH 8F6E B8AE # HANGUL SYLLABLE RIEUL-WAE-PHIEUPH 8F6F B8AF # HANGUL SYLLABLE RIEUL-WAE-HIEUH 8F70 B8B1 # HANGUL SYLLABLE RIEUL-OE-KIYEOK 8F71 B8B2 # HANGUL SYLLABLE RIEUL-OE-SSANGKIYEOK 8F72 B8B3 # HANGUL SYLLABLE RIEUL-OE-KIYEOKSIOS 8F73 B8B5 # HANGUL SYLLABLE RIEUL-OE-NIEUNCIEUC 8F74 B8B6 # HANGUL SYLLABLE RIEUL-OE-NIEUNHIEUH 8F75 B8B7 # HANGUL SYLLABLE RIEUL-OE-TIKEUT 8F76 B8B9 # HANGUL SYLLABLE RIEUL-OE-RIEULKIYEOK 8F77 B8BA # HANGUL SYLLABLE RIEUL-OE-RIEULMIEUM 8F78 B8BB # HANGUL SYLLABLE RIEUL-OE-RIEULPIEUP 8F79 B8BC # HANGUL SYLLABLE RIEUL-OE-RIEULSIOS 8F7A B8BD # HANGUL SYLLABLE RIEUL-OE-RIEULTHIEUTH 8F81 B8BE # HANGUL SYLLABLE RIEUL-OE-RIEULPHIEUPH 8F82 B8BF # HANGUL SYLLABLE RIEUL-OE-RIEULHIEUH 8F83 B8C2 # HANGUL SYLLABLE RIEUL-OE-PIEUPSIOS 8F84 B8C4 # HANGUL SYLLABLE RIEUL-OE-SSANGSIOS 8F85 B8C6 # HANGUL SYLLABLE RIEUL-OE-CIEUC 8F86 B8C7 # HANGUL SYLLABLE RIEUL-OE-CHIEUCH 8F87 B8C8 # HANGUL SYLLABLE RIEUL-OE-KHIEUKH 8F88 B8C9 # HANGUL SYLLABLE RIEUL-OE-THIEUTH 8F89 B8CA # HANGUL SYLLABLE RIEUL-OE-PHIEUPH 8F8A B8CB # HANGUL SYLLABLE RIEUL-OE-HIEUH 8F8B B8CD # HANGUL SYLLABLE RIEUL-YO-KIYEOK 8F8C B8CE # HANGUL SYLLABLE RIEUL-YO-SSANGKIYEOK 8F8D B8CF # HANGUL SYLLABLE RIEUL-YO-KIYEOKSIOS 8F8E B8D1 # HANGUL SYLLABLE RIEUL-YO-NIEUNCIEUC 8F8F B8D2 # HANGUL SYLLABLE RIEUL-YO-NIEUNHIEUH 8F90 B8D3 # HANGUL SYLLABLE RIEUL-YO-TIKEUT 8F91 B8D5 # HANGUL SYLLABLE RIEUL-YO-RIEULKIYEOK 8F92 B8D6 # HANGUL SYLLABLE RIEUL-YO-RIEULMIEUM 8F93 B8D7 # HANGUL SYLLABLE RIEUL-YO-RIEULPIEUP 8F94 B8D8 # HANGUL SYLLABLE RIEUL-YO-RIEULSIOS 8F95 B8D9 # HANGUL SYLLABLE RIEUL-YO-RIEULTHIEUTH 8F96 B8DA # HANGUL SYLLABLE RIEUL-YO-RIEULPHIEUPH 8F97 B8DB # HANGUL SYLLABLE RIEUL-YO-RIEULHIEUH 8F98 B8DC # HANGUL SYLLABLE RIEUL-YO-MIEUM 8F99 B8DE # HANGUL SYLLABLE RIEUL-YO-PIEUPSIOS 8F9A B8E0 # HANGUL SYLLABLE RIEUL-YO-SSANGSIOS 8F9B B8E2 # HANGUL SYLLABLE RIEUL-YO-CIEUC 8F9C B8E3 # HANGUL SYLLABLE RIEUL-YO-CHIEUCH 8F9D B8E4 # HANGUL SYLLABLE RIEUL-YO-KHIEUKH 8F9E B8E5 # HANGUL SYLLABLE RIEUL-YO-THIEUTH 8F9F B8E6 # HANGUL SYLLABLE RIEUL-YO-PHIEUPH 8FA0 B8E7 # HANGUL SYLLABLE RIEUL-YO-HIEUH 8FA1 B8EA # HANGUL SYLLABLE RIEUL-U-SSANGKIYEOK 8FA2 B8EB # HANGUL SYLLABLE RIEUL-U-KIYEOKSIOS 8FA3 B8ED # HANGUL SYLLABLE RIEUL-U-NIEUNCIEUC 8FA4 B8EE # HANGUL SYLLABLE RIEUL-U-NIEUNHIEUH 8FA5 B8EF # HANGUL SYLLABLE RIEUL-U-TIKEUT 8FA6 B8F1 # HANGUL SYLLABLE RIEUL-U-RIEULKIYEOK 8FA7 B8F2 # HANGUL SYLLABLE RIEUL-U-RIEULMIEUM 8FA8 B8F3 # HANGUL SYLLABLE RIEUL-U-RIEULPIEUP 8FA9 B8F4 # HANGUL SYLLABLE RIEUL-U-RIEULSIOS 8FAA B8F5 # HANGUL SYLLABLE RIEUL-U-RIEULTHIEUTH 8FAB B8F6 # HANGUL SYLLABLE RIEUL-U-RIEULPHIEUPH 8FAC B8F7 # HANGUL SYLLABLE RIEUL-U-RIEULHIEUH 8FAD B8FA # HANGUL SYLLABLE RIEUL-U-PIEUPSIOS 8FAE B8FC # HANGUL SYLLABLE RIEUL-U-SSANGSIOS 8FAF B8FE # HANGUL SYLLABLE RIEUL-U-CIEUC 8FB0 B8FF # HANGUL SYLLABLE RIEUL-U-CHIEUCH 8FB1 B900 # HANGUL SYLLABLE RIEUL-U-KHIEUKH 8FB2 B901 # HANGUL SYLLABLE RIEUL-U-THIEUTH 8FB3 B902 # HANGUL SYLLABLE RIEUL-U-PHIEUPH 8FB4 B903 # HANGUL SYLLABLE RIEUL-U-HIEUH 8FB5 B905 # HANGUL SYLLABLE RIEUL-WEO-KIYEOK 8FB6 B906 # HANGUL SYLLABLE RIEUL-WEO-SSANGKIYEOK 8FB7 B907 # HANGUL SYLLABLE RIEUL-WEO-KIYEOKSIOS 8FB8 B908 # HANGUL SYLLABLE RIEUL-WEO-NIEUN 8FB9 B909 # HANGUL SYLLABLE RIEUL-WEO-NIEUNCIEUC 8FBA B90A # HANGUL SYLLABLE RIEUL-WEO-NIEUNHIEUH 8FBB B90B # HANGUL SYLLABLE RIEUL-WEO-TIKEUT 8FBC B90C # HANGUL SYLLABLE RIEUL-WEO-RIEUL 8FBD B90D # HANGUL SYLLABLE RIEUL-WEO-RIEULKIYEOK 8FBE B90E # HANGUL SYLLABLE RIEUL-WEO-RIEULMIEUM 8FBF B90F # HANGUL SYLLABLE RIEUL-WEO-RIEULPIEUP 8FC0 B910 # HANGUL SYLLABLE RIEUL-WEO-RIEULSIOS 8FC1 B911 # HANGUL SYLLABLE RIEUL-WEO-RIEULTHIEUTH 8FC2 B912 # HANGUL SYLLABLE RIEUL-WEO-RIEULPHIEUPH 8FC3 B913 # HANGUL SYLLABLE RIEUL-WEO-RIEULHIEUH 8FC4 B914 # HANGUL SYLLABLE RIEUL-WEO-MIEUM 8FC5 B915 # HANGUL SYLLABLE RIEUL-WEO-PIEUP 8FC6 B916 # HANGUL SYLLABLE RIEUL-WEO-PIEUPSIOS 8FC7 B917 # HANGUL SYLLABLE RIEUL-WEO-SIOS 8FC8 B919 # HANGUL SYLLABLE RIEUL-WEO-IEUNG 8FC9 B91A # HANGUL SYLLABLE RIEUL-WEO-CIEUC 8FCA B91B # HANGUL SYLLABLE RIEUL-WEO-CHIEUCH 8FCB B91C # HANGUL SYLLABLE RIEUL-WEO-KHIEUKH 8FCC B91D # HANGUL SYLLABLE RIEUL-WEO-THIEUTH 8FCD B91E # HANGUL SYLLABLE RIEUL-WEO-PHIEUPH 8FCE B91F # HANGUL SYLLABLE RIEUL-WEO-HIEUH 8FCF B921 # HANGUL SYLLABLE RIEUL-WE-KIYEOK 8FD0 B922 # HANGUL SYLLABLE RIEUL-WE-SSANGKIYEOK 8FD1 B923 # HANGUL SYLLABLE RIEUL-WE-KIYEOKSIOS 8FD2 B924 # HANGUL SYLLABLE RIEUL-WE-NIEUN 8FD3 B925 # HANGUL SYLLABLE RIEUL-WE-NIEUNCIEUC 8FD4 B926 # HANGUL SYLLABLE RIEUL-WE-NIEUNHIEUH 8FD5 B927 # HANGUL SYLLABLE RIEUL-WE-TIKEUT 8FD6 B928 # HANGUL SYLLABLE RIEUL-WE-RIEUL 8FD7 B929 # HANGUL SYLLABLE RIEUL-WE-RIEULKIYEOK 8FD8 B92A # HANGUL SYLLABLE RIEUL-WE-RIEULMIEUM 8FD9 B92B # HANGUL SYLLABLE RIEUL-WE-RIEULPIEUP 8FDA B92C # HANGUL SYLLABLE RIEUL-WE-RIEULSIOS 8FDB B92D # HANGUL SYLLABLE RIEUL-WE-RIEULTHIEUTH 8FDC B92E # HANGUL SYLLABLE RIEUL-WE-RIEULPHIEUPH 8FDD B92F # HANGUL SYLLABLE RIEUL-WE-RIEULHIEUH 8FDE B930 # HANGUL SYLLABLE RIEUL-WE-MIEUM 8FDF B931 # HANGUL SYLLABLE RIEUL-WE-PIEUP 8FE0 B932 # HANGUL SYLLABLE RIEUL-WE-PIEUPSIOS 8FE1 B933 # HANGUL SYLLABLE RIEUL-WE-SIOS 8FE2 B934 # HANGUL SYLLABLE RIEUL-WE-SSANGSIOS 8FE3 B935 # HANGUL SYLLABLE RIEUL-WE-IEUNG 8FE4 B936 # HANGUL SYLLABLE RIEUL-WE-CIEUC 8FE5 B937 # HANGUL SYLLABLE RIEUL-WE-CHIEUCH 8FE6 B938 # HANGUL SYLLABLE RIEUL-WE-KHIEUKH 8FE7 B939 # HANGUL SYLLABLE RIEUL-WE-THIEUTH 8FE8 B93A # HANGUL SYLLABLE RIEUL-WE-PHIEUPH 8FE9 B93B # HANGUL SYLLABLE RIEUL-WE-HIEUH 8FEA B93E # HANGUL SYLLABLE RIEUL-WI-SSANGKIYEOK 8FEB B93F # HANGUL SYLLABLE RIEUL-WI-KIYEOKSIOS 8FEC B941 # HANGUL SYLLABLE RIEUL-WI-NIEUNCIEUC 8FED B942 # HANGUL SYLLABLE RIEUL-WI-NIEUNHIEUH 8FEE B943 # HANGUL SYLLABLE RIEUL-WI-TIKEUT 8FEF B945 # HANGUL SYLLABLE RIEUL-WI-RIEULKIYEOK 8FF0 B946 # HANGUL SYLLABLE RIEUL-WI-RIEULMIEUM 8FF1 B947 # HANGUL SYLLABLE RIEUL-WI-RIEULPIEUP 8FF2 B948 # HANGUL SYLLABLE RIEUL-WI-RIEULSIOS 8FF3 B949 # HANGUL SYLLABLE RIEUL-WI-RIEULTHIEUTH 8FF4 B94A # HANGUL SYLLABLE RIEUL-WI-RIEULPHIEUPH 8FF5 B94B # HANGUL SYLLABLE RIEUL-WI-RIEULHIEUH 8FF6 B94D # HANGUL SYLLABLE RIEUL-WI-PIEUP 8FF7 B94E # HANGUL SYLLABLE RIEUL-WI-PIEUPSIOS 8FF8 B950 # HANGUL SYLLABLE RIEUL-WI-SSANGSIOS 8FF9 B952 # HANGUL SYLLABLE RIEUL-WI-CIEUC 8FFA B953 # HANGUL SYLLABLE RIEUL-WI-CHIEUCH 8FFB B954 # HANGUL SYLLABLE RIEUL-WI-KHIEUKH 8FFC B955 # HANGUL SYLLABLE RIEUL-WI-THIEUTH 8FFD B956 # HANGUL SYLLABLE RIEUL-WI-PHIEUPH 8FFE B957 # HANGUL SYLLABLE RIEUL-WI-HIEUH 9041 B95A # HANGUL SYLLABLE RIEUL-YU-SSANGKIYEOK 9042 B95B # HANGUL SYLLABLE RIEUL-YU-KIYEOKSIOS 9043 B95D # HANGUL SYLLABLE RIEUL-YU-NIEUNCIEUC 9044 B95E # HANGUL SYLLABLE RIEUL-YU-NIEUNHIEUH 9045 B95F # HANGUL SYLLABLE RIEUL-YU-TIKEUT 9046 B961 # HANGUL SYLLABLE RIEUL-YU-RIEULKIYEOK 9047 B962 # HANGUL SYLLABLE RIEUL-YU-RIEULMIEUM 9048 B963 # HANGUL SYLLABLE RIEUL-YU-RIEULPIEUP 9049 B964 # HANGUL SYLLABLE RIEUL-YU-RIEULSIOS 904A B965 # HANGUL SYLLABLE RIEUL-YU-RIEULTHIEUTH 904B B966 # HANGUL SYLLABLE RIEUL-YU-RIEULPHIEUPH 904C B967 # HANGUL SYLLABLE RIEUL-YU-RIEULHIEUH 904D B96A # HANGUL SYLLABLE RIEUL-YU-PIEUPSIOS 904E B96C # HANGUL SYLLABLE RIEUL-YU-SSANGSIOS 904F B96E # HANGUL SYLLABLE RIEUL-YU-CIEUC 9050 B96F # HANGUL SYLLABLE RIEUL-YU-CHIEUCH 9051 B970 # HANGUL SYLLABLE RIEUL-YU-KHIEUKH 9052 B971 # HANGUL SYLLABLE RIEUL-YU-THIEUTH 9053 B972 # HANGUL SYLLABLE RIEUL-YU-PHIEUPH 9054 B973 # HANGUL SYLLABLE RIEUL-YU-HIEUH 9055 B976 # HANGUL SYLLABLE RIEUL-EU-SSANGKIYEOK 9056 B977 # HANGUL SYLLABLE RIEUL-EU-KIYEOKSIOS 9057 B979 # HANGUL SYLLABLE RIEUL-EU-NIEUNCIEUC 9058 B97A # HANGUL SYLLABLE RIEUL-EU-NIEUNHIEUH 9059 B97B # HANGUL SYLLABLE RIEUL-EU-TIKEUT 905A B97D # HANGUL SYLLABLE RIEUL-EU-RIEULKIYEOK 9061 B97E # HANGUL SYLLABLE RIEUL-EU-RIEULMIEUM 9062 B97F # HANGUL SYLLABLE RIEUL-EU-RIEULPIEUP 9063 B980 # HANGUL SYLLABLE RIEUL-EU-RIEULSIOS 9064 B981 # HANGUL SYLLABLE RIEUL-EU-RIEULTHIEUTH 9065 B982 # HANGUL SYLLABLE RIEUL-EU-RIEULPHIEUPH 9066 B983 # HANGUL SYLLABLE RIEUL-EU-RIEULHIEUH 9067 B986 # HANGUL SYLLABLE RIEUL-EU-PIEUPSIOS 9068 B988 # HANGUL SYLLABLE RIEUL-EU-SSANGSIOS 9069 B98B # HANGUL SYLLABLE RIEUL-EU-CHIEUCH 906A B98C # HANGUL SYLLABLE RIEUL-EU-KHIEUKH 906B B98F # HANGUL SYLLABLE RIEUL-EU-HIEUH 906C B990 # HANGUL SYLLABLE RIEUL-YI 906D B991 # HANGUL SYLLABLE RIEUL-YI-KIYEOK 906E B992 # HANGUL SYLLABLE RIEUL-YI-SSANGKIYEOK 906F B993 # HANGUL SYLLABLE RIEUL-YI-KIYEOKSIOS 9070 B994 # HANGUL SYLLABLE RIEUL-YI-NIEUN 9071 B995 # HANGUL SYLLABLE RIEUL-YI-NIEUNCIEUC 9072 B996 # HANGUL SYLLABLE RIEUL-YI-NIEUNHIEUH 9073 B997 # HANGUL SYLLABLE RIEUL-YI-TIKEUT 9074 B998 # HANGUL SYLLABLE RIEUL-YI-RIEUL 9075 B999 # HANGUL SYLLABLE RIEUL-YI-RIEULKIYEOK 9076 B99A # HANGUL SYLLABLE RIEUL-YI-RIEULMIEUM 9077 B99B # HANGUL SYLLABLE RIEUL-YI-RIEULPIEUP 9078 B99C # HANGUL SYLLABLE RIEUL-YI-RIEULSIOS 9079 B99D # HANGUL SYLLABLE RIEUL-YI-RIEULTHIEUTH 907A B99E # HANGUL SYLLABLE RIEUL-YI-RIEULPHIEUPH 9081 B99F # HANGUL SYLLABLE RIEUL-YI-RIEULHIEUH 9082 B9A0 # HANGUL SYLLABLE RIEUL-YI-MIEUM 9083 B9A1 # HANGUL SYLLABLE RIEUL-YI-PIEUP 9084 B9A2 # HANGUL SYLLABLE RIEUL-YI-PIEUPSIOS 9085 B9A3 # HANGUL SYLLABLE RIEUL-YI-SIOS 9086 B9A4 # HANGUL SYLLABLE RIEUL-YI-SSANGSIOS 9087 B9A5 # HANGUL SYLLABLE RIEUL-YI-IEUNG 9088 B9A6 # HANGUL SYLLABLE RIEUL-YI-CIEUC 9089 B9A7 # HANGUL SYLLABLE RIEUL-YI-CHIEUCH 908A B9A8 # HANGUL SYLLABLE RIEUL-YI-KHIEUKH 908B B9A9 # HANGUL SYLLABLE RIEUL-YI-THIEUTH 908C B9AA # HANGUL SYLLABLE RIEUL-YI-PHIEUPH 908D B9AB # HANGUL SYLLABLE RIEUL-YI-HIEUH 908E B9AE # HANGUL SYLLABLE RIEUL-I-SSANGKIYEOK 908F B9AF # HANGUL SYLLABLE RIEUL-I-KIYEOKSIOS 9090 B9B1 # HANGUL SYLLABLE RIEUL-I-NIEUNCIEUC 9091 B9B2 # HANGUL SYLLABLE RIEUL-I-NIEUNHIEUH 9092 B9B3 # HANGUL SYLLABLE RIEUL-I-TIKEUT 9093 B9B5 # HANGUL SYLLABLE RIEUL-I-RIEULKIYEOK 9094 B9B6 # HANGUL SYLLABLE RIEUL-I-RIEULMIEUM 9095 B9B7 # HANGUL SYLLABLE RIEUL-I-RIEULPIEUP 9096 B9B8 # HANGUL SYLLABLE RIEUL-I-RIEULSIOS 9097 B9B9 # HANGUL SYLLABLE RIEUL-I-RIEULTHIEUTH 9098 B9BA # HANGUL SYLLABLE RIEUL-I-RIEULPHIEUPH 9099 B9BB # HANGUL SYLLABLE RIEUL-I-RIEULHIEUH 909A B9BE # HANGUL SYLLABLE RIEUL-I-PIEUPSIOS 909B B9C0 # HANGUL SYLLABLE RIEUL-I-SSANGSIOS 909C B9C2 # HANGUL SYLLABLE RIEUL-I-CIEUC 909D B9C3 # HANGUL SYLLABLE RIEUL-I-CHIEUCH 909E B9C4 # HANGUL SYLLABLE RIEUL-I-KHIEUKH 909F B9C5 # HANGUL SYLLABLE RIEUL-I-THIEUTH 90A0 B9C6 # HANGUL SYLLABLE RIEUL-I-PHIEUPH 90A1 B9C7 # HANGUL SYLLABLE RIEUL-I-HIEUH 90A2 B9CA # HANGUL SYLLABLE MIEUM-A-SSANGKIYEOK 90A3 B9CB # HANGUL SYLLABLE MIEUM-A-KIYEOKSIOS 90A4 B9CD # HANGUL SYLLABLE MIEUM-A-NIEUNCIEUC 90A5 B9D3 # HANGUL SYLLABLE MIEUM-A-RIEULPIEUP 90A6 B9D4 # HANGUL SYLLABLE MIEUM-A-RIEULSIOS 90A7 B9D5 # HANGUL SYLLABLE MIEUM-A-RIEULTHIEUTH 90A8 B9D6 # HANGUL SYLLABLE MIEUM-A-RIEULPHIEUPH 90A9 B9D7 # HANGUL SYLLABLE MIEUM-A-RIEULHIEUH 90AA B9DA # HANGUL SYLLABLE MIEUM-A-PIEUPSIOS 90AB B9DC # HANGUL SYLLABLE MIEUM-A-SSANGSIOS 90AC B9DF # HANGUL SYLLABLE MIEUM-A-CHIEUCH 90AD B9E0 # HANGUL SYLLABLE MIEUM-A-KHIEUKH 90AE B9E2 # HANGUL SYLLABLE MIEUM-A-PHIEUPH 90AF B9E6 # HANGUL SYLLABLE MIEUM-AE-SSANGKIYEOK 90B0 B9E7 # HANGUL SYLLABLE MIEUM-AE-KIYEOKSIOS 90B1 B9E9 # HANGUL SYLLABLE MIEUM-AE-NIEUNCIEUC 90B2 B9EA # HANGUL SYLLABLE MIEUM-AE-NIEUNHIEUH 90B3 B9EB # HANGUL SYLLABLE MIEUM-AE-TIKEUT 90B4 B9ED # HANGUL SYLLABLE MIEUM-AE-RIEULKIYEOK 90B5 B9EE # HANGUL SYLLABLE MIEUM-AE-RIEULMIEUM 90B6 B9EF # HANGUL SYLLABLE MIEUM-AE-RIEULPIEUP 90B7 B9F0 # HANGUL SYLLABLE MIEUM-AE-RIEULSIOS 90B8 B9F1 # HANGUL SYLLABLE MIEUM-AE-RIEULTHIEUTH 90B9 B9F2 # HANGUL SYLLABLE MIEUM-AE-RIEULPHIEUPH 90BA B9F3 # HANGUL SYLLABLE MIEUM-AE-RIEULHIEUH 90BB B9F6 # HANGUL SYLLABLE MIEUM-AE-PIEUPSIOS 90BC B9FB # HANGUL SYLLABLE MIEUM-AE-CHIEUCH 90BD B9FC # HANGUL SYLLABLE MIEUM-AE-KHIEUKH 90BE B9FD # HANGUL SYLLABLE MIEUM-AE-THIEUTH 90BF B9FE # HANGUL SYLLABLE MIEUM-AE-PHIEUPH 90C0 B9FF # HANGUL SYLLABLE MIEUM-AE-HIEUH 90C1 BA02 # HANGUL SYLLABLE MIEUM-YA-SSANGKIYEOK 90C2 BA03 # HANGUL SYLLABLE MIEUM-YA-KIYEOKSIOS 90C3 BA04 # HANGUL SYLLABLE MIEUM-YA-NIEUN 90C4 BA05 # HANGUL SYLLABLE MIEUM-YA-NIEUNCIEUC 90C5 BA06 # HANGUL SYLLABLE MIEUM-YA-NIEUNHIEUH 90C6 BA07 # HANGUL SYLLABLE MIEUM-YA-TIKEUT 90C7 BA09 # HANGUL SYLLABLE MIEUM-YA-RIEULKIYEOK 90C8 BA0A # HANGUL SYLLABLE MIEUM-YA-RIEULMIEUM 90C9 BA0B # HANGUL SYLLABLE MIEUM-YA-RIEULPIEUP 90CA BA0C # HANGUL SYLLABLE MIEUM-YA-RIEULSIOS 90CB BA0D # HANGUL SYLLABLE MIEUM-YA-RIEULTHIEUTH 90CC BA0E # HANGUL SYLLABLE MIEUM-YA-RIEULPHIEUPH 90CD BA0F # HANGUL SYLLABLE MIEUM-YA-RIEULHIEUH 90CE BA10 # HANGUL SYLLABLE MIEUM-YA-MIEUM 90CF BA11 # HANGUL SYLLABLE MIEUM-YA-PIEUP 90D0 BA12 # HANGUL SYLLABLE MIEUM-YA-PIEUPSIOS 90D1 BA13 # HANGUL SYLLABLE MIEUM-YA-SIOS 90D2 BA14 # HANGUL SYLLABLE MIEUM-YA-SSANGSIOS 90D3 BA16 # HANGUL SYLLABLE MIEUM-YA-CIEUC 90D4 BA17 # HANGUL SYLLABLE MIEUM-YA-CHIEUCH 90D5 BA18 # HANGUL SYLLABLE MIEUM-YA-KHIEUKH 90D6 BA19 # HANGUL SYLLABLE MIEUM-YA-THIEUTH 90D7 BA1A # HANGUL SYLLABLE MIEUM-YA-PHIEUPH 90D8 BA1B # HANGUL SYLLABLE MIEUM-YA-HIEUH 90D9 BA1C # HANGUL SYLLABLE MIEUM-YAE 90DA BA1D # HANGUL SYLLABLE MIEUM-YAE-KIYEOK 90DB BA1E # HANGUL SYLLABLE MIEUM-YAE-SSANGKIYEOK 90DC BA1F # HANGUL SYLLABLE MIEUM-YAE-KIYEOKSIOS 90DD BA20 # HANGUL SYLLABLE MIEUM-YAE-NIEUN 90DE BA21 # HANGUL SYLLABLE MIEUM-YAE-NIEUNCIEUC 90DF BA22 # HANGUL SYLLABLE MIEUM-YAE-NIEUNHIEUH 90E0 BA23 # HANGUL SYLLABLE MIEUM-YAE-TIKEUT 90E1 BA24 # HANGUL SYLLABLE MIEUM-YAE-RIEUL 90E2 BA25 # HANGUL SYLLABLE MIEUM-YAE-RIEULKIYEOK 90E3 BA26 # HANGUL SYLLABLE MIEUM-YAE-RIEULMIEUM 90E4 BA27 # HANGUL SYLLABLE MIEUM-YAE-RIEULPIEUP 90E5 BA28 # HANGUL SYLLABLE MIEUM-YAE-RIEULSIOS 90E6 BA29 # HANGUL SYLLABLE MIEUM-YAE-RIEULTHIEUTH 90E7 BA2A # HANGUL SYLLABLE MIEUM-YAE-RIEULPHIEUPH 90E8 BA2B # HANGUL SYLLABLE MIEUM-YAE-RIEULHIEUH 90E9 BA2C # HANGUL SYLLABLE MIEUM-YAE-MIEUM 90EA BA2D # HANGUL SYLLABLE MIEUM-YAE-PIEUP 90EB BA2E # HANGUL SYLLABLE MIEUM-YAE-PIEUPSIOS 90EC BA2F # HANGUL SYLLABLE MIEUM-YAE-SIOS 90ED BA30 # HANGUL SYLLABLE MIEUM-YAE-SSANGSIOS 90EE BA31 # HANGUL SYLLABLE MIEUM-YAE-IEUNG 90EF BA32 # HANGUL SYLLABLE MIEUM-YAE-CIEUC 90F0 BA33 # HANGUL SYLLABLE MIEUM-YAE-CHIEUCH 90F1 BA34 # HANGUL SYLLABLE MIEUM-YAE-KHIEUKH 90F2 BA35 # HANGUL SYLLABLE MIEUM-YAE-THIEUTH 90F3 BA36 # HANGUL SYLLABLE MIEUM-YAE-PHIEUPH 90F4 BA37 # HANGUL SYLLABLE MIEUM-YAE-HIEUH 90F5 BA3A # HANGUL SYLLABLE MIEUM-EO-SSANGKIYEOK 90F6 BA3B # HANGUL SYLLABLE MIEUM-EO-KIYEOKSIOS 90F7 BA3D # HANGUL SYLLABLE MIEUM-EO-NIEUNCIEUC 90F8 BA3E # HANGUL SYLLABLE MIEUM-EO-NIEUNHIEUH 90F9 BA3F # HANGUL SYLLABLE MIEUM-EO-TIKEUT 90FA BA41 # HANGUL SYLLABLE MIEUM-EO-RIEULKIYEOK 90FB BA43 # HANGUL SYLLABLE MIEUM-EO-RIEULPIEUP 90FC BA44 # HANGUL SYLLABLE MIEUM-EO-RIEULSIOS 90FD BA45 # HANGUL SYLLABLE MIEUM-EO-RIEULTHIEUTH 90FE BA46 # HANGUL SYLLABLE MIEUM-EO-RIEULPHIEUPH 9141 BA47 # HANGUL SYLLABLE MIEUM-EO-RIEULHIEUH 9142 BA4A # HANGUL SYLLABLE MIEUM-EO-PIEUPSIOS 9143 BA4C # HANGUL SYLLABLE MIEUM-EO-SSANGSIOS 9144 BA4F # HANGUL SYLLABLE MIEUM-EO-CHIEUCH 9145 BA50 # HANGUL SYLLABLE MIEUM-EO-KHIEUKH 9146 BA51 # HANGUL SYLLABLE MIEUM-EO-THIEUTH 9147 BA52 # HANGUL SYLLABLE MIEUM-EO-PHIEUPH 9148 BA56 # HANGUL SYLLABLE MIEUM-E-SSANGKIYEOK 9149 BA57 # HANGUL SYLLABLE MIEUM-E-KIYEOKSIOS 914A BA59 # HANGUL SYLLABLE MIEUM-E-NIEUNCIEUC 914B BA5A # HANGUL SYLLABLE MIEUM-E-NIEUNHIEUH 914C BA5B # HANGUL SYLLABLE MIEUM-E-TIKEUT 914D BA5D # HANGUL SYLLABLE MIEUM-E-RIEULKIYEOK 914E BA5E # HANGUL SYLLABLE MIEUM-E-RIEULMIEUM 914F BA5F # HANGUL SYLLABLE MIEUM-E-RIEULPIEUP 9150 BA60 # HANGUL SYLLABLE MIEUM-E-RIEULSIOS 9151 BA61 # HANGUL SYLLABLE MIEUM-E-RIEULTHIEUTH 9152 BA62 # HANGUL SYLLABLE MIEUM-E-RIEULPHIEUPH 9153 BA63 # HANGUL SYLLABLE MIEUM-E-RIEULHIEUH 9154 BA66 # HANGUL SYLLABLE MIEUM-E-PIEUPSIOS 9155 BA6A # HANGUL SYLLABLE MIEUM-E-CIEUC 9156 BA6B # HANGUL SYLLABLE MIEUM-E-CHIEUCH 9157 BA6C # HANGUL SYLLABLE MIEUM-E-KHIEUKH 9158 BA6D # HANGUL SYLLABLE MIEUM-E-THIEUTH 9159 BA6E # HANGUL SYLLABLE MIEUM-E-PHIEUPH 915A BA6F # HANGUL SYLLABLE MIEUM-E-HIEUH 9161 BA72 # HANGUL SYLLABLE MIEUM-YEO-SSANGKIYEOK 9162 BA73 # HANGUL SYLLABLE MIEUM-YEO-KIYEOKSIOS 9163 BA75 # HANGUL SYLLABLE MIEUM-YEO-NIEUNCIEUC 9164 BA76 # HANGUL SYLLABLE MIEUM-YEO-NIEUNHIEUH 9165 BA77 # HANGUL SYLLABLE MIEUM-YEO-TIKEUT 9166 BA79 # HANGUL SYLLABLE MIEUM-YEO-RIEULKIYEOK 9167 BA7A # HANGUL SYLLABLE MIEUM-YEO-RIEULMIEUM 9168 BA7B # HANGUL SYLLABLE MIEUM-YEO-RIEULPIEUP 9169 BA7C # HANGUL SYLLABLE MIEUM-YEO-RIEULSIOS 916A BA7D # HANGUL SYLLABLE MIEUM-YEO-RIEULTHIEUTH 916B BA7E # HANGUL SYLLABLE MIEUM-YEO-RIEULPHIEUPH 916C BA7F # HANGUL SYLLABLE MIEUM-YEO-RIEULHIEUH 916D BA80 # HANGUL SYLLABLE MIEUM-YEO-MIEUM 916E BA81 # HANGUL SYLLABLE MIEUM-YEO-PIEUP 916F BA82 # HANGUL SYLLABLE MIEUM-YEO-PIEUPSIOS 9170 BA86 # HANGUL SYLLABLE MIEUM-YEO-CIEUC 9171 BA88 # HANGUL SYLLABLE MIEUM-YEO-KHIEUKH 9172 BA89 # HANGUL SYLLABLE MIEUM-YEO-THIEUTH 9173 BA8A # HANGUL SYLLABLE MIEUM-YEO-PHIEUPH 9174 BA8B # HANGUL SYLLABLE MIEUM-YEO-HIEUH 9175 BA8D # HANGUL SYLLABLE MIEUM-YE-KIYEOK 9176 BA8E # HANGUL SYLLABLE MIEUM-YE-SSANGKIYEOK 9177 BA8F # HANGUL SYLLABLE MIEUM-YE-KIYEOKSIOS 9178 BA90 # HANGUL SYLLABLE MIEUM-YE-NIEUN 9179 BA91 # HANGUL SYLLABLE MIEUM-YE-NIEUNCIEUC 917A BA92 # HANGUL SYLLABLE MIEUM-YE-NIEUNHIEUH 9181 BA93 # HANGUL SYLLABLE MIEUM-YE-TIKEUT 9182 BA94 # HANGUL SYLLABLE MIEUM-YE-RIEUL 9183 BA95 # HANGUL SYLLABLE MIEUM-YE-RIEULKIYEOK 9184 BA96 # HANGUL SYLLABLE MIEUM-YE-RIEULMIEUM 9185 BA97 # HANGUL SYLLABLE MIEUM-YE-RIEULPIEUP 9186 BA98 # HANGUL SYLLABLE MIEUM-YE-RIEULSIOS 9187 BA99 # HANGUL SYLLABLE MIEUM-YE-RIEULTHIEUTH 9188 BA9A # HANGUL SYLLABLE MIEUM-YE-RIEULPHIEUPH 9189 BA9B # HANGUL SYLLABLE MIEUM-YE-RIEULHIEUH 918A BA9C # HANGUL SYLLABLE MIEUM-YE-MIEUM 918B BA9D # HANGUL SYLLABLE MIEUM-YE-PIEUP 918C BA9E # HANGUL SYLLABLE MIEUM-YE-PIEUPSIOS 918D BA9F # HANGUL SYLLABLE MIEUM-YE-SIOS 918E BAA0 # HANGUL SYLLABLE MIEUM-YE-SSANGSIOS 918F BAA1 # HANGUL SYLLABLE MIEUM-YE-IEUNG 9190 BAA2 # HANGUL SYLLABLE MIEUM-YE-CIEUC 9191 BAA3 # HANGUL SYLLABLE MIEUM-YE-CHIEUCH 9192 BAA4 # HANGUL SYLLABLE MIEUM-YE-KHIEUKH 9193 BAA5 # HANGUL SYLLABLE MIEUM-YE-THIEUTH 9194 BAA6 # HANGUL SYLLABLE MIEUM-YE-PHIEUPH 9195 BAA7 # HANGUL SYLLABLE MIEUM-YE-HIEUH 9196 BAAA # HANGUL SYLLABLE MIEUM-O-SSANGKIYEOK 9197 BAAD # HANGUL SYLLABLE MIEUM-O-NIEUNCIEUC 9198 BAAE # HANGUL SYLLABLE MIEUM-O-NIEUNHIEUH 9199 BAAF # HANGUL SYLLABLE MIEUM-O-TIKEUT 919A BAB1 # HANGUL SYLLABLE MIEUM-O-RIEULKIYEOK 919B BAB3 # HANGUL SYLLABLE MIEUM-O-RIEULPIEUP 919C BAB4 # HANGUL SYLLABLE MIEUM-O-RIEULSIOS 919D BAB5 # HANGUL SYLLABLE MIEUM-O-RIEULTHIEUTH 919E BAB6 # HANGUL SYLLABLE MIEUM-O-RIEULPHIEUPH 919F BAB7 # HANGUL SYLLABLE MIEUM-O-RIEULHIEUH 91A0 BABA # HANGUL SYLLABLE MIEUM-O-PIEUPSIOS 91A1 BABC # HANGUL SYLLABLE MIEUM-O-SSANGSIOS 91A2 BABE # HANGUL SYLLABLE MIEUM-O-CIEUC 91A3 BABF # HANGUL SYLLABLE MIEUM-O-CHIEUCH 91A4 BAC0 # HANGUL SYLLABLE MIEUM-O-KHIEUKH 91A5 BAC1 # HANGUL SYLLABLE MIEUM-O-THIEUTH 91A6 BAC2 # HANGUL SYLLABLE MIEUM-O-PHIEUPH 91A7 BAC3 # HANGUL SYLLABLE MIEUM-O-HIEUH 91A8 BAC5 # HANGUL SYLLABLE MIEUM-WA-KIYEOK 91A9 BAC6 # HANGUL SYLLABLE MIEUM-WA-SSANGKIYEOK 91AA BAC7 # HANGUL SYLLABLE MIEUM-WA-KIYEOKSIOS 91AB BAC9 # HANGUL SYLLABLE MIEUM-WA-NIEUNCIEUC 91AC BACA # HANGUL SYLLABLE MIEUM-WA-NIEUNHIEUH 91AD BACB # HANGUL SYLLABLE MIEUM-WA-TIKEUT 91AE BACC # HANGUL SYLLABLE MIEUM-WA-RIEUL 91AF BACD # HANGUL SYLLABLE MIEUM-WA-RIEULKIYEOK 91B0 BACE # HANGUL SYLLABLE MIEUM-WA-RIEULMIEUM 91B1 BACF # HANGUL SYLLABLE MIEUM-WA-RIEULPIEUP 91B2 BAD0 # HANGUL SYLLABLE MIEUM-WA-RIEULSIOS 91B3 BAD1 # HANGUL SYLLABLE MIEUM-WA-RIEULTHIEUTH 91B4 BAD2 # HANGUL SYLLABLE MIEUM-WA-RIEULPHIEUPH 91B5 BAD3 # HANGUL SYLLABLE MIEUM-WA-RIEULHIEUH 91B6 BAD4 # HANGUL SYLLABLE MIEUM-WA-MIEUM 91B7 BAD5 # HANGUL SYLLABLE MIEUM-WA-PIEUP 91B8 BAD6 # HANGUL SYLLABLE MIEUM-WA-PIEUPSIOS 91B9 BAD7 # HANGUL SYLLABLE MIEUM-WA-SIOS 91BA BADA # HANGUL SYLLABLE MIEUM-WA-CIEUC 91BB BADB # HANGUL SYLLABLE MIEUM-WA-CHIEUCH 91BC BADC # HANGUL SYLLABLE MIEUM-WA-KHIEUKH 91BD BADD # HANGUL SYLLABLE MIEUM-WA-THIEUTH 91BE BADE # HANGUL SYLLABLE MIEUM-WA-PHIEUPH 91BF BADF # HANGUL SYLLABLE MIEUM-WA-HIEUH 91C0 BAE0 # HANGUL SYLLABLE MIEUM-WAE 91C1 BAE1 # HANGUL SYLLABLE MIEUM-WAE-KIYEOK 91C2 BAE2 # HANGUL SYLLABLE MIEUM-WAE-SSANGKIYEOK 91C3 BAE3 # HANGUL SYLLABLE MIEUM-WAE-KIYEOKSIOS 91C4 BAE4 # HANGUL SYLLABLE MIEUM-WAE-NIEUN 91C5 BAE5 # HANGUL SYLLABLE MIEUM-WAE-NIEUNCIEUC 91C6 BAE6 # HANGUL SYLLABLE MIEUM-WAE-NIEUNHIEUH 91C7 BAE7 # HANGUL SYLLABLE MIEUM-WAE-TIKEUT 91C8 BAE8 # HANGUL SYLLABLE MIEUM-WAE-RIEUL 91C9 BAE9 # HANGUL SYLLABLE MIEUM-WAE-RIEULKIYEOK 91CA BAEA # HANGUL SYLLABLE MIEUM-WAE-RIEULMIEUM 91CB BAEB # HANGUL SYLLABLE MIEUM-WAE-RIEULPIEUP 91CC BAEC # HANGUL SYLLABLE MIEUM-WAE-RIEULSIOS 91CD BAED # HANGUL SYLLABLE MIEUM-WAE-RIEULTHIEUTH 91CE BAEE # HANGUL SYLLABLE MIEUM-WAE-RIEULPHIEUPH 91CF BAEF # HANGUL SYLLABLE MIEUM-WAE-RIEULHIEUH 91D0 BAF0 # HANGUL SYLLABLE MIEUM-WAE-MIEUM 91D1 BAF1 # HANGUL SYLLABLE MIEUM-WAE-PIEUP 91D2 BAF2 # HANGUL SYLLABLE MIEUM-WAE-PIEUPSIOS 91D3 BAF3 # HANGUL SYLLABLE MIEUM-WAE-SIOS 91D4 BAF4 # HANGUL SYLLABLE MIEUM-WAE-SSANGSIOS 91D5 BAF5 # HANGUL SYLLABLE MIEUM-WAE-IEUNG 91D6 BAF6 # HANGUL SYLLABLE MIEUM-WAE-CIEUC 91D7 BAF7 # HANGUL SYLLABLE MIEUM-WAE-CHIEUCH 91D8 BAF8 # HANGUL SYLLABLE MIEUM-WAE-KHIEUKH 91D9 BAF9 # HANGUL SYLLABLE MIEUM-WAE-THIEUTH 91DA BAFA # HANGUL SYLLABLE MIEUM-WAE-PHIEUPH 91DB BAFB # HANGUL SYLLABLE MIEUM-WAE-HIEUH 91DC BAFD # HANGUL SYLLABLE MIEUM-OE-KIYEOK 91DD BAFE # HANGUL SYLLABLE MIEUM-OE-SSANGKIYEOK 91DE BAFF # HANGUL SYLLABLE MIEUM-OE-KIYEOKSIOS 91DF BB01 # HANGUL SYLLABLE MIEUM-OE-NIEUNCIEUC 91E0 BB02 # HANGUL SYLLABLE MIEUM-OE-NIEUNHIEUH 91E1 BB03 # HANGUL SYLLABLE MIEUM-OE-TIKEUT 91E2 BB05 # HANGUL SYLLABLE MIEUM-OE-RIEULKIYEOK 91E3 BB06 # HANGUL SYLLABLE MIEUM-OE-RIEULMIEUM 91E4 BB07 # HANGUL SYLLABLE MIEUM-OE-RIEULPIEUP 91E5 BB08 # HANGUL SYLLABLE MIEUM-OE-RIEULSIOS 91E6 BB09 # HANGUL SYLLABLE MIEUM-OE-RIEULTHIEUTH 91E7 BB0A # HANGUL SYLLABLE MIEUM-OE-RIEULPHIEUPH 91E8 BB0B # HANGUL SYLLABLE MIEUM-OE-RIEULHIEUH 91E9 BB0C # HANGUL SYLLABLE MIEUM-OE-MIEUM 91EA BB0E # HANGUL SYLLABLE MIEUM-OE-PIEUPSIOS 91EB BB10 # HANGUL SYLLABLE MIEUM-OE-SSANGSIOS 91EC BB12 # HANGUL SYLLABLE MIEUM-OE-CIEUC 91ED BB13 # HANGUL SYLLABLE MIEUM-OE-CHIEUCH 91EE BB14 # HANGUL SYLLABLE MIEUM-OE-KHIEUKH 91EF BB15 # HANGUL SYLLABLE MIEUM-OE-THIEUTH 91F0 BB16 # HANGUL SYLLABLE MIEUM-OE-PHIEUPH 91F1 BB17 # HANGUL SYLLABLE MIEUM-OE-HIEUH 91F2 BB19 # HANGUL SYLLABLE MIEUM-YO-KIYEOK 91F3 BB1A # HANGUL SYLLABLE MIEUM-YO-SSANGKIYEOK 91F4 BB1B # HANGUL SYLLABLE MIEUM-YO-KIYEOKSIOS 91F5 BB1D # HANGUL SYLLABLE MIEUM-YO-NIEUNCIEUC 91F6 BB1E # HANGUL SYLLABLE MIEUM-YO-NIEUNHIEUH 91F7 BB1F # HANGUL SYLLABLE MIEUM-YO-TIKEUT 91F8 BB21 # HANGUL SYLLABLE MIEUM-YO-RIEULKIYEOK 91F9 BB22 # HANGUL SYLLABLE MIEUM-YO-RIEULMIEUM 91FA BB23 # HANGUL SYLLABLE MIEUM-YO-RIEULPIEUP 91FB BB24 # HANGUL SYLLABLE MIEUM-YO-RIEULSIOS 91FC BB25 # HANGUL SYLLABLE MIEUM-YO-RIEULTHIEUTH 91FD BB26 # HANGUL SYLLABLE MIEUM-YO-RIEULPHIEUPH 91FE BB27 # HANGUL SYLLABLE MIEUM-YO-RIEULHIEUH 9241 BB28 # HANGUL SYLLABLE MIEUM-YO-MIEUM 9242 BB2A # HANGUL SYLLABLE MIEUM-YO-PIEUPSIOS 9243 BB2C # HANGUL SYLLABLE MIEUM-YO-SSANGSIOS 9244 BB2D # HANGUL SYLLABLE MIEUM-YO-IEUNG 9245 BB2E # HANGUL SYLLABLE MIEUM-YO-CIEUC 9246 BB2F # HANGUL SYLLABLE MIEUM-YO-CHIEUCH 9247 BB30 # HANGUL SYLLABLE MIEUM-YO-KHIEUKH 9248 BB31 # HANGUL SYLLABLE MIEUM-YO-THIEUTH 9249 BB32 # HANGUL SYLLABLE MIEUM-YO-PHIEUPH 924A BB33 # HANGUL SYLLABLE MIEUM-YO-HIEUH 924B BB37 # HANGUL SYLLABLE MIEUM-U-KIYEOKSIOS 924C BB39 # HANGUL SYLLABLE MIEUM-U-NIEUNCIEUC 924D BB3A # HANGUL SYLLABLE MIEUM-U-NIEUNHIEUH 924E BB3F # HANGUL SYLLABLE MIEUM-U-RIEULPIEUP 924F BB40 # HANGUL SYLLABLE MIEUM-U-RIEULSIOS 9250 BB41 # HANGUL SYLLABLE MIEUM-U-RIEULTHIEUTH 9251 BB42 # HANGUL SYLLABLE MIEUM-U-RIEULPHIEUPH 9252 BB43 # HANGUL SYLLABLE MIEUM-U-RIEULHIEUH 9253 BB46 # HANGUL SYLLABLE MIEUM-U-PIEUPSIOS 9254 BB48 # HANGUL SYLLABLE MIEUM-U-SSANGSIOS 9255 BB4A # HANGUL SYLLABLE MIEUM-U-CIEUC 9256 BB4B # HANGUL SYLLABLE MIEUM-U-CHIEUCH 9257 BB4C # HANGUL SYLLABLE MIEUM-U-KHIEUKH 9258 BB4E # HANGUL SYLLABLE MIEUM-U-PHIEUPH 9259 BB51 # HANGUL SYLLABLE MIEUM-WEO-KIYEOK 925A BB52 # HANGUL SYLLABLE MIEUM-WEO-SSANGKIYEOK 9261 BB53 # HANGUL SYLLABLE MIEUM-WEO-KIYEOKSIOS 9262 BB55 # HANGUL SYLLABLE MIEUM-WEO-NIEUNCIEUC 9263 BB56 # HANGUL SYLLABLE MIEUM-WEO-NIEUNHIEUH 9264 BB57 # HANGUL SYLLABLE MIEUM-WEO-TIKEUT 9265 BB59 # HANGUL SYLLABLE MIEUM-WEO-RIEULKIYEOK 9266 BB5A # HANGUL SYLLABLE MIEUM-WEO-RIEULMIEUM 9267 BB5B # HANGUL SYLLABLE MIEUM-WEO-RIEULPIEUP 9268 BB5C # HANGUL SYLLABLE MIEUM-WEO-RIEULSIOS 9269 BB5D # HANGUL SYLLABLE MIEUM-WEO-RIEULTHIEUTH 926A BB5E # HANGUL SYLLABLE MIEUM-WEO-RIEULPHIEUPH 926B BB5F # HANGUL SYLLABLE MIEUM-WEO-RIEULHIEUH 926C BB60 # HANGUL SYLLABLE MIEUM-WEO-MIEUM 926D BB62 # HANGUL SYLLABLE MIEUM-WEO-PIEUPSIOS 926E BB64 # HANGUL SYLLABLE MIEUM-WEO-SSANGSIOS 926F BB65 # HANGUL SYLLABLE MIEUM-WEO-IEUNG 9270 BB66 # HANGUL SYLLABLE MIEUM-WEO-CIEUC 9271 BB67 # HANGUL SYLLABLE MIEUM-WEO-CHIEUCH 9272 BB68 # HANGUL SYLLABLE MIEUM-WEO-KHIEUKH 9273 BB69 # HANGUL SYLLABLE MIEUM-WEO-THIEUTH 9274 BB6A # HANGUL SYLLABLE MIEUM-WEO-PHIEUPH 9275 BB6B # HANGUL SYLLABLE MIEUM-WEO-HIEUH 9276 BB6D # HANGUL SYLLABLE MIEUM-WE-KIYEOK 9277 BB6E # HANGUL SYLLABLE MIEUM-WE-SSANGKIYEOK 9278 BB6F # HANGUL SYLLABLE MIEUM-WE-KIYEOKSIOS 9279 BB70 # HANGUL SYLLABLE MIEUM-WE-NIEUN 927A BB71 # HANGUL SYLLABLE MIEUM-WE-NIEUNCIEUC 9281 BB72 # HANGUL SYLLABLE MIEUM-WE-NIEUNHIEUH 9282 BB73 # HANGUL SYLLABLE MIEUM-WE-TIKEUT 9283 BB74 # HANGUL SYLLABLE MIEUM-WE-RIEUL 9284 BB75 # HANGUL SYLLABLE MIEUM-WE-RIEULKIYEOK 9285 BB76 # HANGUL SYLLABLE MIEUM-WE-RIEULMIEUM 9286 BB77 # HANGUL SYLLABLE MIEUM-WE-RIEULPIEUP 9287 BB78 # HANGUL SYLLABLE MIEUM-WE-RIEULSIOS 9288 BB79 # HANGUL SYLLABLE MIEUM-WE-RIEULTHIEUTH 9289 BB7A # HANGUL SYLLABLE MIEUM-WE-RIEULPHIEUPH 928A BB7B # HANGUL SYLLABLE MIEUM-WE-RIEULHIEUH 928B BB7C # HANGUL SYLLABLE MIEUM-WE-MIEUM 928C BB7D # HANGUL SYLLABLE MIEUM-WE-PIEUP 928D BB7E # HANGUL SYLLABLE MIEUM-WE-PIEUPSIOS 928E BB7F # HANGUL SYLLABLE MIEUM-WE-SIOS 928F BB80 # HANGUL SYLLABLE MIEUM-WE-SSANGSIOS 9290 BB81 # HANGUL SYLLABLE MIEUM-WE-IEUNG 9291 BB82 # HANGUL SYLLABLE MIEUM-WE-CIEUC 9292 BB83 # HANGUL SYLLABLE MIEUM-WE-CHIEUCH 9293 BB84 # HANGUL SYLLABLE MIEUM-WE-KHIEUKH 9294 BB85 # HANGUL SYLLABLE MIEUM-WE-THIEUTH 9295 BB86 # HANGUL SYLLABLE MIEUM-WE-PHIEUPH 9296 BB87 # HANGUL SYLLABLE MIEUM-WE-HIEUH 9297 BB89 # HANGUL SYLLABLE MIEUM-WI-KIYEOK 9298 BB8A # HANGUL SYLLABLE MIEUM-WI-SSANGKIYEOK 9299 BB8B # HANGUL SYLLABLE MIEUM-WI-KIYEOKSIOS 929A BB8D # HANGUL SYLLABLE MIEUM-WI-NIEUNCIEUC 929B BB8E # HANGUL SYLLABLE MIEUM-WI-NIEUNHIEUH 929C BB8F # HANGUL SYLLABLE MIEUM-WI-TIKEUT 929D BB91 # HANGUL SYLLABLE MIEUM-WI-RIEULKIYEOK 929E BB92 # HANGUL SYLLABLE MIEUM-WI-RIEULMIEUM 929F BB93 # HANGUL SYLLABLE MIEUM-WI-RIEULPIEUP 92A0 BB94 # HANGUL SYLLABLE MIEUM-WI-RIEULSIOS 92A1 BB95 # HANGUL SYLLABLE MIEUM-WI-RIEULTHIEUTH 92A2 BB96 # HANGUL SYLLABLE MIEUM-WI-RIEULPHIEUPH 92A3 BB97 # HANGUL SYLLABLE MIEUM-WI-RIEULHIEUH 92A4 BB98 # HANGUL SYLLABLE MIEUM-WI-MIEUM 92A5 BB99 # HANGUL SYLLABLE MIEUM-WI-PIEUP 92A6 BB9A # HANGUL SYLLABLE MIEUM-WI-PIEUPSIOS 92A7 BB9B # HANGUL SYLLABLE MIEUM-WI-SIOS 92A8 BB9C # HANGUL SYLLABLE MIEUM-WI-SSANGSIOS 92A9 BB9D # HANGUL SYLLABLE MIEUM-WI-IEUNG 92AA BB9E # HANGUL SYLLABLE MIEUM-WI-CIEUC 92AB BB9F # HANGUL SYLLABLE MIEUM-WI-CHIEUCH 92AC BBA0 # HANGUL SYLLABLE MIEUM-WI-KHIEUKH 92AD BBA1 # HANGUL SYLLABLE MIEUM-WI-THIEUTH 92AE BBA2 # HANGUL SYLLABLE MIEUM-WI-PHIEUPH 92AF BBA3 # HANGUL SYLLABLE MIEUM-WI-HIEUH 92B0 BBA5 # HANGUL SYLLABLE MIEUM-YU-KIYEOK 92B1 BBA6 # HANGUL SYLLABLE MIEUM-YU-SSANGKIYEOK 92B2 BBA7 # HANGUL SYLLABLE MIEUM-YU-KIYEOKSIOS 92B3 BBA9 # HANGUL SYLLABLE MIEUM-YU-NIEUNCIEUC 92B4 BBAA # HANGUL SYLLABLE MIEUM-YU-NIEUNHIEUH 92B5 BBAB # HANGUL SYLLABLE MIEUM-YU-TIKEUT 92B6 BBAD # HANGUL SYLLABLE MIEUM-YU-RIEULKIYEOK 92B7 BBAE # HANGUL SYLLABLE MIEUM-YU-RIEULMIEUM 92B8 BBAF # HANGUL SYLLABLE MIEUM-YU-RIEULPIEUP 92B9 BBB0 # HANGUL SYLLABLE MIEUM-YU-RIEULSIOS 92BA BBB1 # HANGUL SYLLABLE MIEUM-YU-RIEULTHIEUTH 92BB BBB2 # HANGUL SYLLABLE MIEUM-YU-RIEULPHIEUPH 92BC BBB3 # HANGUL SYLLABLE MIEUM-YU-RIEULHIEUH 92BD BBB5 # HANGUL SYLLABLE MIEUM-YU-PIEUP 92BE BBB6 # HANGUL SYLLABLE MIEUM-YU-PIEUPSIOS 92BF BBB8 # HANGUL SYLLABLE MIEUM-YU-SSANGSIOS 92C0 BBB9 # HANGUL SYLLABLE MIEUM-YU-IEUNG 92C1 BBBA # HANGUL SYLLABLE MIEUM-YU-CIEUC 92C2 BBBB # HANGUL SYLLABLE MIEUM-YU-CHIEUCH 92C3 BBBC # HANGUL SYLLABLE MIEUM-YU-KHIEUKH 92C4 BBBD # HANGUL SYLLABLE MIEUM-YU-THIEUTH 92C5 BBBE # HANGUL SYLLABLE MIEUM-YU-PHIEUPH 92C6 BBBF # HANGUL SYLLABLE MIEUM-YU-HIEUH 92C7 BBC1 # HANGUL SYLLABLE MIEUM-EU-KIYEOK 92C8 BBC2 # HANGUL SYLLABLE MIEUM-EU-SSANGKIYEOK 92C9 BBC3 # HANGUL SYLLABLE MIEUM-EU-KIYEOKSIOS 92CA BBC5 # HANGUL SYLLABLE MIEUM-EU-NIEUNCIEUC 92CB BBC6 # HANGUL SYLLABLE MIEUM-EU-NIEUNHIEUH 92CC BBC7 # HANGUL SYLLABLE MIEUM-EU-TIKEUT 92CD BBC9 # HANGUL SYLLABLE MIEUM-EU-RIEULKIYEOK 92CE BBCA # HANGUL SYLLABLE MIEUM-EU-RIEULMIEUM 92CF BBCB # HANGUL SYLLABLE MIEUM-EU-RIEULPIEUP 92D0 BBCC # HANGUL SYLLABLE MIEUM-EU-RIEULSIOS 92D1 BBCD # HANGUL SYLLABLE MIEUM-EU-RIEULTHIEUTH 92D2 BBCE # HANGUL SYLLABLE MIEUM-EU-RIEULPHIEUPH 92D3 BBCF # HANGUL SYLLABLE MIEUM-EU-RIEULHIEUH 92D4 BBD1 # HANGUL SYLLABLE MIEUM-EU-PIEUP 92D5 BBD2 # HANGUL SYLLABLE MIEUM-EU-PIEUPSIOS 92D6 BBD4 # HANGUL SYLLABLE MIEUM-EU-SSANGSIOS 92D7 BBD5 # HANGUL SYLLABLE MIEUM-EU-IEUNG 92D8 BBD6 # HANGUL SYLLABLE MIEUM-EU-CIEUC 92D9 BBD7 # HANGUL SYLLABLE MIEUM-EU-CHIEUCH 92DA BBD8 # HANGUL SYLLABLE MIEUM-EU-KHIEUKH 92DB BBD9 # HANGUL SYLLABLE MIEUM-EU-THIEUTH 92DC BBDA # HANGUL SYLLABLE MIEUM-EU-PHIEUPH 92DD BBDB # HANGUL SYLLABLE MIEUM-EU-HIEUH 92DE BBDC # HANGUL SYLLABLE MIEUM-YI 92DF BBDD # HANGUL SYLLABLE MIEUM-YI-KIYEOK 92E0 BBDE # HANGUL SYLLABLE MIEUM-YI-SSANGKIYEOK 92E1 BBDF # HANGUL SYLLABLE MIEUM-YI-KIYEOKSIOS 92E2 BBE0 # HANGUL SYLLABLE MIEUM-YI-NIEUN 92E3 BBE1 # HANGUL SYLLABLE MIEUM-YI-NIEUNCIEUC 92E4 BBE2 # HANGUL SYLLABLE MIEUM-YI-NIEUNHIEUH 92E5 BBE3 # HANGUL SYLLABLE MIEUM-YI-TIKEUT 92E6 BBE4 # HANGUL SYLLABLE MIEUM-YI-RIEUL 92E7 BBE5 # HANGUL SYLLABLE MIEUM-YI-RIEULKIYEOK 92E8 BBE6 # HANGUL SYLLABLE MIEUM-YI-RIEULMIEUM 92E9 BBE7 # HANGUL SYLLABLE MIEUM-YI-RIEULPIEUP 92EA BBE8 # HANGUL SYLLABLE MIEUM-YI-RIEULSIOS 92EB BBE9 # HANGUL SYLLABLE MIEUM-YI-RIEULTHIEUTH 92EC BBEA # HANGUL SYLLABLE MIEUM-YI-RIEULPHIEUPH 92ED BBEB # HANGUL SYLLABLE MIEUM-YI-RIEULHIEUH 92EE BBEC # HANGUL SYLLABLE MIEUM-YI-MIEUM 92EF BBED # HANGUL SYLLABLE MIEUM-YI-PIEUP 92F0 BBEE # HANGUL SYLLABLE MIEUM-YI-PIEUPSIOS 92F1 BBEF # HANGUL SYLLABLE MIEUM-YI-SIOS 92F2 BBF0 # HANGUL SYLLABLE MIEUM-YI-SSANGSIOS 92F3 BBF1 # HANGUL SYLLABLE MIEUM-YI-IEUNG 92F4 BBF2 # HANGUL SYLLABLE MIEUM-YI-CIEUC 92F5 BBF3 # HANGUL SYLLABLE MIEUM-YI-CHIEUCH 92F6 BBF4 # HANGUL SYLLABLE MIEUM-YI-KHIEUKH 92F7 BBF5 # HANGUL SYLLABLE MIEUM-YI-THIEUTH 92F8 BBF6 # HANGUL SYLLABLE MIEUM-YI-PHIEUPH 92F9 BBF7 # HANGUL SYLLABLE MIEUM-YI-HIEUH 92FA BBFA # HANGUL SYLLABLE MIEUM-I-SSANGKIYEOK 92FB BBFB # HANGUL SYLLABLE MIEUM-I-KIYEOKSIOS 92FC BBFD # HANGUL SYLLABLE MIEUM-I-NIEUNCIEUC 92FD BBFE # HANGUL SYLLABLE MIEUM-I-NIEUNHIEUH 92FE BC01 # HANGUL SYLLABLE MIEUM-I-RIEULKIYEOK 9341 BC03 # HANGUL SYLLABLE MIEUM-I-RIEULPIEUP 9342 BC04 # HANGUL SYLLABLE MIEUM-I-RIEULSIOS 9343 BC05 # HANGUL SYLLABLE MIEUM-I-RIEULTHIEUTH 9344 BC06 # HANGUL SYLLABLE MIEUM-I-RIEULPHIEUPH 9345 BC07 # HANGUL SYLLABLE MIEUM-I-RIEULHIEUH 9346 BC0A # HANGUL SYLLABLE MIEUM-I-PIEUPSIOS 9347 BC0E # HANGUL SYLLABLE MIEUM-I-CIEUC 9348 BC10 # HANGUL SYLLABLE MIEUM-I-KHIEUKH 9349 BC12 # HANGUL SYLLABLE MIEUM-I-PHIEUPH 934A BC13 # HANGUL SYLLABLE MIEUM-I-HIEUH 934B BC19 # HANGUL SYLLABLE PIEUP-A-NIEUNCIEUC 934C BC1A # HANGUL SYLLABLE PIEUP-A-NIEUNHIEUH 934D BC20 # HANGUL SYLLABLE PIEUP-A-RIEULSIOS 934E BC21 # HANGUL SYLLABLE PIEUP-A-RIEULTHIEUTH 934F BC22 # HANGUL SYLLABLE PIEUP-A-RIEULPHIEUPH 9350 BC23 # HANGUL SYLLABLE PIEUP-A-RIEULHIEUH 9351 BC26 # HANGUL SYLLABLE PIEUP-A-PIEUPSIOS 9352 BC28 # HANGUL SYLLABLE PIEUP-A-SSANGSIOS 9353 BC2A # HANGUL SYLLABLE PIEUP-A-CIEUC 9354 BC2B # HANGUL SYLLABLE PIEUP-A-CHIEUCH 9355 BC2C # HANGUL SYLLABLE PIEUP-A-KHIEUKH 9356 BC2E # HANGUL SYLLABLE PIEUP-A-PHIEUPH 9357 BC2F # HANGUL SYLLABLE PIEUP-A-HIEUH 9358 BC32 # HANGUL SYLLABLE PIEUP-AE-SSANGKIYEOK 9359 BC33 # HANGUL SYLLABLE PIEUP-AE-KIYEOKSIOS 935A BC35 # HANGUL SYLLABLE PIEUP-AE-NIEUNCIEUC 9361 BC36 # HANGUL SYLLABLE PIEUP-AE-NIEUNHIEUH 9362 BC37 # HANGUL SYLLABLE PIEUP-AE-TIKEUT 9363 BC39 # HANGUL SYLLABLE PIEUP-AE-RIEULKIYEOK 9364 BC3A # HANGUL SYLLABLE PIEUP-AE-RIEULMIEUM 9365 BC3B # HANGUL SYLLABLE PIEUP-AE-RIEULPIEUP 9366 BC3C # HANGUL SYLLABLE PIEUP-AE-RIEULSIOS 9367 BC3D # HANGUL SYLLABLE PIEUP-AE-RIEULTHIEUTH 9368 BC3E # HANGUL SYLLABLE PIEUP-AE-RIEULPHIEUPH 9369 BC3F # HANGUL SYLLABLE PIEUP-AE-RIEULHIEUH 936A BC42 # HANGUL SYLLABLE PIEUP-AE-PIEUPSIOS 936B BC46 # HANGUL SYLLABLE PIEUP-AE-CIEUC 936C BC47 # HANGUL SYLLABLE PIEUP-AE-CHIEUCH 936D BC48 # HANGUL SYLLABLE PIEUP-AE-KHIEUKH 936E BC4A # HANGUL SYLLABLE PIEUP-AE-PHIEUPH 936F BC4B # HANGUL SYLLABLE PIEUP-AE-HIEUH 9370 BC4E # HANGUL SYLLABLE PIEUP-YA-SSANGKIYEOK 9371 BC4F # HANGUL SYLLABLE PIEUP-YA-KIYEOKSIOS 9372 BC51 # HANGUL SYLLABLE PIEUP-YA-NIEUNCIEUC 9373 BC52 # HANGUL SYLLABLE PIEUP-YA-NIEUNHIEUH 9374 BC53 # HANGUL SYLLABLE PIEUP-YA-TIKEUT 9375 BC54 # HANGUL SYLLABLE PIEUP-YA-RIEUL 9376 BC55 # HANGUL SYLLABLE PIEUP-YA-RIEULKIYEOK 9377 BC56 # HANGUL SYLLABLE PIEUP-YA-RIEULMIEUM 9378 BC57 # HANGUL SYLLABLE PIEUP-YA-RIEULPIEUP 9379 BC58 # HANGUL SYLLABLE PIEUP-YA-RIEULSIOS 937A BC59 # HANGUL SYLLABLE PIEUP-YA-RIEULTHIEUTH 9381 BC5A # HANGUL SYLLABLE PIEUP-YA-RIEULPHIEUPH 9382 BC5B # HANGUL SYLLABLE PIEUP-YA-RIEULHIEUH 9383 BC5C # HANGUL SYLLABLE PIEUP-YA-MIEUM 9384 BC5E # HANGUL SYLLABLE PIEUP-YA-PIEUPSIOS 9385 BC5F # HANGUL SYLLABLE PIEUP-YA-SIOS 9386 BC60 # HANGUL SYLLABLE PIEUP-YA-SSANGSIOS 9387 BC61 # HANGUL SYLLABLE PIEUP-YA-IEUNG 9388 BC62 # HANGUL SYLLABLE PIEUP-YA-CIEUC 9389 BC63 # HANGUL SYLLABLE PIEUP-YA-CHIEUCH 938A BC64 # HANGUL SYLLABLE PIEUP-YA-KHIEUKH 938B BC65 # HANGUL SYLLABLE PIEUP-YA-THIEUTH 938C BC66 # HANGUL SYLLABLE PIEUP-YA-PHIEUPH 938D BC67 # HANGUL SYLLABLE PIEUP-YA-HIEUH 938E BC68 # HANGUL SYLLABLE PIEUP-YAE 938F BC69 # HANGUL SYLLABLE PIEUP-YAE-KIYEOK 9390 BC6A # HANGUL SYLLABLE PIEUP-YAE-SSANGKIYEOK 9391 BC6B # HANGUL SYLLABLE PIEUP-YAE-KIYEOKSIOS 9392 BC6C # HANGUL SYLLABLE PIEUP-YAE-NIEUN 9393 BC6D # HANGUL SYLLABLE PIEUP-YAE-NIEUNCIEUC 9394 BC6E # HANGUL SYLLABLE PIEUP-YAE-NIEUNHIEUH 9395 BC6F # HANGUL SYLLABLE PIEUP-YAE-TIKEUT 9396 BC70 # HANGUL SYLLABLE PIEUP-YAE-RIEUL 9397 BC71 # HANGUL SYLLABLE PIEUP-YAE-RIEULKIYEOK 9398 BC72 # HANGUL SYLLABLE PIEUP-YAE-RIEULMIEUM 9399 BC73 # HANGUL SYLLABLE PIEUP-YAE-RIEULPIEUP 939A BC74 # HANGUL SYLLABLE PIEUP-YAE-RIEULSIOS 939B BC75 # HANGUL SYLLABLE PIEUP-YAE-RIEULTHIEUTH 939C BC76 # HANGUL SYLLABLE PIEUP-YAE-RIEULPHIEUPH 939D BC77 # HANGUL SYLLABLE PIEUP-YAE-RIEULHIEUH 939E BC78 # HANGUL SYLLABLE PIEUP-YAE-MIEUM 939F BC79 # HANGUL SYLLABLE PIEUP-YAE-PIEUP 93A0 BC7A # HANGUL SYLLABLE PIEUP-YAE-PIEUPSIOS 93A1 BC7B # HANGUL SYLLABLE PIEUP-YAE-SIOS 93A2 BC7C # HANGUL SYLLABLE PIEUP-YAE-SSANGSIOS 93A3 BC7D # HANGUL SYLLABLE PIEUP-YAE-IEUNG 93A4 BC7E # HANGUL SYLLABLE PIEUP-YAE-CIEUC 93A5 BC7F # HANGUL SYLLABLE PIEUP-YAE-CHIEUCH 93A6 BC80 # HANGUL SYLLABLE PIEUP-YAE-KHIEUKH 93A7 BC81 # HANGUL SYLLABLE PIEUP-YAE-THIEUTH 93A8 BC82 # HANGUL SYLLABLE PIEUP-YAE-PHIEUPH 93A9 BC83 # HANGUL SYLLABLE PIEUP-YAE-HIEUH 93AA BC86 # HANGUL SYLLABLE PIEUP-EO-SSANGKIYEOK 93AB BC87 # HANGUL SYLLABLE PIEUP-EO-KIYEOKSIOS 93AC BC89 # HANGUL SYLLABLE PIEUP-EO-NIEUNCIEUC 93AD BC8A # HANGUL SYLLABLE PIEUP-EO-NIEUNHIEUH 93AE BC8D # HANGUL SYLLABLE PIEUP-EO-RIEULKIYEOK 93AF BC8F # HANGUL SYLLABLE PIEUP-EO-RIEULPIEUP 93B0 BC90 # HANGUL SYLLABLE PIEUP-EO-RIEULSIOS 93B1 BC91 # HANGUL SYLLABLE PIEUP-EO-RIEULTHIEUTH 93B2 BC92 # HANGUL SYLLABLE PIEUP-EO-RIEULPHIEUPH 93B3 BC93 # HANGUL SYLLABLE PIEUP-EO-RIEULHIEUH 93B4 BC96 # HANGUL SYLLABLE PIEUP-EO-PIEUPSIOS 93B5 BC98 # HANGUL SYLLABLE PIEUP-EO-SSANGSIOS 93B6 BC9B # HANGUL SYLLABLE PIEUP-EO-CHIEUCH 93B7 BC9C # HANGUL SYLLABLE PIEUP-EO-KHIEUKH 93B8 BC9D # HANGUL SYLLABLE PIEUP-EO-THIEUTH 93B9 BC9E # HANGUL SYLLABLE PIEUP-EO-PHIEUPH 93BA BC9F # HANGUL SYLLABLE PIEUP-EO-HIEUH 93BB BCA2 # HANGUL SYLLABLE PIEUP-E-SSANGKIYEOK 93BC BCA3 # HANGUL SYLLABLE PIEUP-E-KIYEOKSIOS 93BD BCA5 # HANGUL SYLLABLE PIEUP-E-NIEUNCIEUC 93BE BCA6 # HANGUL SYLLABLE PIEUP-E-NIEUNHIEUH 93BF BCA9 # HANGUL SYLLABLE PIEUP-E-RIEULKIYEOK 93C0 BCAA # HANGUL SYLLABLE PIEUP-E-RIEULMIEUM 93C1 BCAB # HANGUL SYLLABLE PIEUP-E-RIEULPIEUP 93C2 BCAC # HANGUL SYLLABLE PIEUP-E-RIEULSIOS 93C3 BCAD # HANGUL SYLLABLE PIEUP-E-RIEULTHIEUTH 93C4 BCAE # HANGUL SYLLABLE PIEUP-E-RIEULPHIEUPH 93C5 BCAF # HANGUL SYLLABLE PIEUP-E-RIEULHIEUH 93C6 BCB2 # HANGUL SYLLABLE PIEUP-E-PIEUPSIOS 93C7 BCB6 # HANGUL SYLLABLE PIEUP-E-CIEUC 93C8 BCB7 # HANGUL SYLLABLE PIEUP-E-CHIEUCH 93C9 BCB8 # HANGUL SYLLABLE PIEUP-E-KHIEUKH 93CA BCB9 # HANGUL SYLLABLE PIEUP-E-THIEUTH 93CB BCBA # HANGUL SYLLABLE PIEUP-E-PHIEUPH 93CC BCBB # HANGUL SYLLABLE PIEUP-E-HIEUH 93CD BCBE # HANGUL SYLLABLE PIEUP-YEO-SSANGKIYEOK 93CE BCBF # HANGUL SYLLABLE PIEUP-YEO-KIYEOKSIOS 93CF BCC1 # HANGUL SYLLABLE PIEUP-YEO-NIEUNCIEUC 93D0 BCC2 # HANGUL SYLLABLE PIEUP-YEO-NIEUNHIEUH 93D1 BCC3 # HANGUL SYLLABLE PIEUP-YEO-TIKEUT 93D2 BCC5 # HANGUL SYLLABLE PIEUP-YEO-RIEULKIYEOK 93D3 BCC6 # HANGUL SYLLABLE PIEUP-YEO-RIEULMIEUM 93D4 BCC7 # HANGUL SYLLABLE PIEUP-YEO-RIEULPIEUP 93D5 BCC8 # HANGUL SYLLABLE PIEUP-YEO-RIEULSIOS 93D6 BCC9 # HANGUL SYLLABLE PIEUP-YEO-RIEULTHIEUTH 93D7 BCCA # HANGUL SYLLABLE PIEUP-YEO-RIEULPHIEUPH 93D8 BCCB # HANGUL SYLLABLE PIEUP-YEO-RIEULHIEUH 93D9 BCCC # HANGUL SYLLABLE PIEUP-YEO-MIEUM 93DA BCCE # HANGUL SYLLABLE PIEUP-YEO-PIEUPSIOS 93DB BCD2 # HANGUL SYLLABLE PIEUP-YEO-CIEUC 93DC BCD3 # HANGUL SYLLABLE PIEUP-YEO-CHIEUCH 93DD BCD4 # HANGUL SYLLABLE PIEUP-YEO-KHIEUKH 93DE BCD6 # HANGUL SYLLABLE PIEUP-YEO-PHIEUPH 93DF BCD7 # HANGUL SYLLABLE PIEUP-YEO-HIEUH 93E0 BCD9 # HANGUL SYLLABLE PIEUP-YE-KIYEOK 93E1 BCDA # HANGUL SYLLABLE PIEUP-YE-SSANGKIYEOK 93E2 BCDB # HANGUL SYLLABLE PIEUP-YE-KIYEOKSIOS 93E3 BCDD # HANGUL SYLLABLE PIEUP-YE-NIEUNCIEUC 93E4 BCDE # HANGUL SYLLABLE PIEUP-YE-NIEUNHIEUH 93E5 BCDF # HANGUL SYLLABLE PIEUP-YE-TIKEUT 93E6 BCE0 # HANGUL SYLLABLE PIEUP-YE-RIEUL 93E7 BCE1 # HANGUL SYLLABLE PIEUP-YE-RIEULKIYEOK 93E8 BCE2 # HANGUL SYLLABLE PIEUP-YE-RIEULMIEUM 93E9 BCE3 # HANGUL SYLLABLE PIEUP-YE-RIEULPIEUP 93EA BCE4 # HANGUL SYLLABLE PIEUP-YE-RIEULSIOS 93EB BCE5 # HANGUL SYLLABLE PIEUP-YE-RIEULTHIEUTH 93EC BCE6 # HANGUL SYLLABLE PIEUP-YE-RIEULPHIEUPH 93ED BCE7 # HANGUL SYLLABLE PIEUP-YE-RIEULHIEUH 93EE BCE8 # HANGUL SYLLABLE PIEUP-YE-MIEUM 93EF BCE9 # HANGUL SYLLABLE PIEUP-YE-PIEUP 93F0 BCEA # HANGUL SYLLABLE PIEUP-YE-PIEUPSIOS 93F1 BCEB # HANGUL SYLLABLE PIEUP-YE-SIOS 93F2 BCEC # HANGUL SYLLABLE PIEUP-YE-SSANGSIOS 93F3 BCED # HANGUL SYLLABLE PIEUP-YE-IEUNG 93F4 BCEE # HANGUL SYLLABLE PIEUP-YE-CIEUC 93F5 BCEF # HANGUL SYLLABLE PIEUP-YE-CHIEUCH 93F6 BCF0 # HANGUL SYLLABLE PIEUP-YE-KHIEUKH 93F7 BCF1 # HANGUL SYLLABLE PIEUP-YE-THIEUTH 93F8 BCF2 # HANGUL SYLLABLE PIEUP-YE-PHIEUPH 93F9 BCF3 # HANGUL SYLLABLE PIEUP-YE-HIEUH 93FA BCF7 # HANGUL SYLLABLE PIEUP-O-KIYEOKSIOS 93FB BCF9 # HANGUL SYLLABLE PIEUP-O-NIEUNCIEUC 93FC BCFA # HANGUL SYLLABLE PIEUP-O-NIEUNHIEUH 93FD BCFB # HANGUL SYLLABLE PIEUP-O-TIKEUT 93FE BCFD # HANGUL SYLLABLE PIEUP-O-RIEULKIYEOK 9441 BCFE # HANGUL SYLLABLE PIEUP-O-RIEULMIEUM 9442 BCFF # HANGUL SYLLABLE PIEUP-O-RIEULPIEUP 9443 BD00 # HANGUL SYLLABLE PIEUP-O-RIEULSIOS 9444 BD01 # HANGUL SYLLABLE PIEUP-O-RIEULTHIEUTH 9445 BD02 # HANGUL SYLLABLE PIEUP-O-RIEULPHIEUPH 9446 BD03 # HANGUL SYLLABLE PIEUP-O-RIEULHIEUH 9447 BD06 # HANGUL SYLLABLE PIEUP-O-PIEUPSIOS 9448 BD08 # HANGUL SYLLABLE PIEUP-O-SSANGSIOS 9449 BD0A # HANGUL SYLLABLE PIEUP-O-CIEUC 944A BD0B # HANGUL SYLLABLE PIEUP-O-CHIEUCH 944B BD0C # HANGUL SYLLABLE PIEUP-O-KHIEUKH 944C BD0D # HANGUL SYLLABLE PIEUP-O-THIEUTH 944D BD0E # HANGUL SYLLABLE PIEUP-O-PHIEUPH 944E BD0F # HANGUL SYLLABLE PIEUP-O-HIEUH 944F BD11 # HANGUL SYLLABLE PIEUP-WA-KIYEOK 9450 BD12 # HANGUL SYLLABLE PIEUP-WA-SSANGKIYEOK 9451 BD13 # HANGUL SYLLABLE PIEUP-WA-KIYEOKSIOS 9452 BD15 # HANGUL SYLLABLE PIEUP-WA-NIEUNCIEUC 9453 BD16 # HANGUL SYLLABLE PIEUP-WA-NIEUNHIEUH 9454 BD17 # HANGUL SYLLABLE PIEUP-WA-TIKEUT 9455 BD18 # HANGUL SYLLABLE PIEUP-WA-RIEUL 9456 BD19 # HANGUL SYLLABLE PIEUP-WA-RIEULKIYEOK 9457 BD1A # HANGUL SYLLABLE PIEUP-WA-RIEULMIEUM 9458 BD1B # HANGUL SYLLABLE PIEUP-WA-RIEULPIEUP 9459 BD1C # HANGUL SYLLABLE PIEUP-WA-RIEULSIOS 945A BD1D # HANGUL SYLLABLE PIEUP-WA-RIEULTHIEUTH 9461 BD1E # HANGUL SYLLABLE PIEUP-WA-RIEULPHIEUPH 9462 BD1F # HANGUL SYLLABLE PIEUP-WA-RIEULHIEUH 9463 BD20 # HANGUL SYLLABLE PIEUP-WA-MIEUM 9464 BD21 # HANGUL SYLLABLE PIEUP-WA-PIEUP 9465 BD22 # HANGUL SYLLABLE PIEUP-WA-PIEUPSIOS 9466 BD23 # HANGUL SYLLABLE PIEUP-WA-SIOS 9467 BD25 # HANGUL SYLLABLE PIEUP-WA-IEUNG 9468 BD26 # HANGUL SYLLABLE PIEUP-WA-CIEUC 9469 BD27 # HANGUL SYLLABLE PIEUP-WA-CHIEUCH 946A BD28 # HANGUL SYLLABLE PIEUP-WA-KHIEUKH 946B BD29 # HANGUL SYLLABLE PIEUP-WA-THIEUTH 946C BD2A # HANGUL SYLLABLE PIEUP-WA-PHIEUPH 946D BD2B # HANGUL SYLLABLE PIEUP-WA-HIEUH 946E BD2D # HANGUL SYLLABLE PIEUP-WAE-KIYEOK 946F BD2E # HANGUL SYLLABLE PIEUP-WAE-SSANGKIYEOK 9470 BD2F # HANGUL SYLLABLE PIEUP-WAE-KIYEOKSIOS 9471 BD30 # HANGUL SYLLABLE PIEUP-WAE-NIEUN 9472 BD31 # HANGUL SYLLABLE PIEUP-WAE-NIEUNCIEUC 9473 BD32 # HANGUL SYLLABLE PIEUP-WAE-NIEUNHIEUH 9474 BD33 # HANGUL SYLLABLE PIEUP-WAE-TIKEUT 9475 BD34 # HANGUL SYLLABLE PIEUP-WAE-RIEUL 9476 BD35 # HANGUL SYLLABLE PIEUP-WAE-RIEULKIYEOK 9477 BD36 # HANGUL SYLLABLE PIEUP-WAE-RIEULMIEUM 9478 BD37 # HANGUL SYLLABLE PIEUP-WAE-RIEULPIEUP 9479 BD38 # HANGUL SYLLABLE PIEUP-WAE-RIEULSIOS 947A BD39 # HANGUL SYLLABLE PIEUP-WAE-RIEULTHIEUTH 9481 BD3A # HANGUL SYLLABLE PIEUP-WAE-RIEULPHIEUPH 9482 BD3B # HANGUL SYLLABLE PIEUP-WAE-RIEULHIEUH 9483 BD3C # HANGUL SYLLABLE PIEUP-WAE-MIEUM 9484 BD3D # HANGUL SYLLABLE PIEUP-WAE-PIEUP 9485 BD3E # HANGUL SYLLABLE PIEUP-WAE-PIEUPSIOS 9486 BD3F # HANGUL SYLLABLE PIEUP-WAE-SIOS 9487 BD41 # HANGUL SYLLABLE PIEUP-WAE-IEUNG 9488 BD42 # HANGUL SYLLABLE PIEUP-WAE-CIEUC 9489 BD43 # HANGUL SYLLABLE PIEUP-WAE-CHIEUCH 948A BD44 # HANGUL SYLLABLE PIEUP-WAE-KHIEUKH 948B BD45 # HANGUL SYLLABLE PIEUP-WAE-THIEUTH 948C BD46 # HANGUL SYLLABLE PIEUP-WAE-PHIEUPH 948D BD47 # HANGUL SYLLABLE PIEUP-WAE-HIEUH 948E BD4A # HANGUL SYLLABLE PIEUP-OE-SSANGKIYEOK 948F BD4B # HANGUL SYLLABLE PIEUP-OE-KIYEOKSIOS 9490 BD4D # HANGUL SYLLABLE PIEUP-OE-NIEUNCIEUC 9491 BD4E # HANGUL SYLLABLE PIEUP-OE-NIEUNHIEUH 9492 BD4F # HANGUL SYLLABLE PIEUP-OE-TIKEUT 9493 BD51 # HANGUL SYLLABLE PIEUP-OE-RIEULKIYEOK 9494 BD52 # HANGUL SYLLABLE PIEUP-OE-RIEULMIEUM 9495 BD53 # HANGUL SYLLABLE PIEUP-OE-RIEULPIEUP 9496 BD54 # HANGUL SYLLABLE PIEUP-OE-RIEULSIOS 9497 BD55 # HANGUL SYLLABLE PIEUP-OE-RIEULTHIEUTH 9498 BD56 # HANGUL SYLLABLE PIEUP-OE-RIEULPHIEUPH 9499 BD57 # HANGUL SYLLABLE PIEUP-OE-RIEULHIEUH 949A BD5A # HANGUL SYLLABLE PIEUP-OE-PIEUPSIOS 949B BD5B # HANGUL SYLLABLE PIEUP-OE-SIOS 949C BD5C # HANGUL SYLLABLE PIEUP-OE-SSANGSIOS 949D BD5D # HANGUL SYLLABLE PIEUP-OE-IEUNG 949E BD5E # HANGUL SYLLABLE PIEUP-OE-CIEUC 949F BD5F # HANGUL SYLLABLE PIEUP-OE-CHIEUCH 94A0 BD60 # HANGUL SYLLABLE PIEUP-OE-KHIEUKH 94A1 BD61 # HANGUL SYLLABLE PIEUP-OE-THIEUTH 94A2 BD62 # HANGUL SYLLABLE PIEUP-OE-PHIEUPH 94A3 BD63 # HANGUL SYLLABLE PIEUP-OE-HIEUH 94A4 BD65 # HANGUL SYLLABLE PIEUP-YO-KIYEOK 94A5 BD66 # HANGUL SYLLABLE PIEUP-YO-SSANGKIYEOK 94A6 BD67 # HANGUL SYLLABLE PIEUP-YO-KIYEOKSIOS 94A7 BD69 # HANGUL SYLLABLE PIEUP-YO-NIEUNCIEUC 94A8 BD6A # HANGUL SYLLABLE PIEUP-YO-NIEUNHIEUH 94A9 BD6B # HANGUL SYLLABLE PIEUP-YO-TIKEUT 94AA BD6C # HANGUL SYLLABLE PIEUP-YO-RIEUL 94AB BD6D # HANGUL SYLLABLE PIEUP-YO-RIEULKIYEOK 94AC BD6E # HANGUL SYLLABLE PIEUP-YO-RIEULMIEUM 94AD BD6F # HANGUL SYLLABLE PIEUP-YO-RIEULPIEUP 94AE BD70 # HANGUL SYLLABLE PIEUP-YO-RIEULSIOS 94AF BD71 # HANGUL SYLLABLE PIEUP-YO-RIEULTHIEUTH 94B0 BD72 # HANGUL SYLLABLE PIEUP-YO-RIEULPHIEUPH 94B1 BD73 # HANGUL SYLLABLE PIEUP-YO-RIEULHIEUH 94B2 BD74 # HANGUL SYLLABLE PIEUP-YO-MIEUM 94B3 BD75 # HANGUL SYLLABLE PIEUP-YO-PIEUP 94B4 BD76 # HANGUL SYLLABLE PIEUP-YO-PIEUPSIOS 94B5 BD77 # HANGUL SYLLABLE PIEUP-YO-SIOS 94B6 BD78 # HANGUL SYLLABLE PIEUP-YO-SSANGSIOS 94B7 BD79 # HANGUL SYLLABLE PIEUP-YO-IEUNG 94B8 BD7A # HANGUL SYLLABLE PIEUP-YO-CIEUC 94B9 BD7B # HANGUL SYLLABLE PIEUP-YO-CHIEUCH 94BA BD7C # HANGUL SYLLABLE PIEUP-YO-KHIEUKH 94BB BD7D # HANGUL SYLLABLE PIEUP-YO-THIEUTH 94BC BD7E # HANGUL SYLLABLE PIEUP-YO-PHIEUPH 94BD BD7F # HANGUL SYLLABLE PIEUP-YO-HIEUH 94BE BD82 # HANGUL SYLLABLE PIEUP-U-SSANGKIYEOK 94BF BD83 # HANGUL SYLLABLE PIEUP-U-KIYEOKSIOS 94C0 BD85 # HANGUL SYLLABLE PIEUP-U-NIEUNCIEUC 94C1 BD86 # HANGUL SYLLABLE PIEUP-U-NIEUNHIEUH 94C2 BD8B # HANGUL SYLLABLE PIEUP-U-RIEULPIEUP 94C3 BD8C # HANGUL SYLLABLE PIEUP-U-RIEULSIOS 94C4 BD8D # HANGUL SYLLABLE PIEUP-U-RIEULTHIEUTH 94C5 BD8E # HANGUL SYLLABLE PIEUP-U-RIEULPHIEUPH 94C6 BD8F # HANGUL SYLLABLE PIEUP-U-RIEULHIEUH 94C7 BD92 # HANGUL SYLLABLE PIEUP-U-PIEUPSIOS 94C8 BD94 # HANGUL SYLLABLE PIEUP-U-SSANGSIOS 94C9 BD96 # HANGUL SYLLABLE PIEUP-U-CIEUC 94CA BD97 # HANGUL SYLLABLE PIEUP-U-CHIEUCH 94CB BD98 # HANGUL SYLLABLE PIEUP-U-KHIEUKH 94CC BD9B # HANGUL SYLLABLE PIEUP-U-HIEUH 94CD BD9D # HANGUL SYLLABLE PIEUP-WEO-KIYEOK 94CE BD9E # HANGUL SYLLABLE PIEUP-WEO-SSANGKIYEOK 94CF BD9F # HANGUL SYLLABLE PIEUP-WEO-KIYEOKSIOS 94D0 BDA0 # HANGUL SYLLABLE PIEUP-WEO-NIEUN 94D1 BDA1 # HANGUL SYLLABLE PIEUP-WEO-NIEUNCIEUC 94D2 BDA2 # HANGUL SYLLABLE PIEUP-WEO-NIEUNHIEUH 94D3 BDA3 # HANGUL SYLLABLE PIEUP-WEO-TIKEUT 94D4 BDA5 # HANGUL SYLLABLE PIEUP-WEO-RIEULKIYEOK 94D5 BDA6 # HANGUL SYLLABLE PIEUP-WEO-RIEULMIEUM 94D6 BDA7 # HANGUL SYLLABLE PIEUP-WEO-RIEULPIEUP 94D7 BDA8 # HANGUL SYLLABLE PIEUP-WEO-RIEULSIOS 94D8 BDA9 # HANGUL SYLLABLE PIEUP-WEO-RIEULTHIEUTH 94D9 BDAA # HANGUL SYLLABLE PIEUP-WEO-RIEULPHIEUPH 94DA BDAB # HANGUL SYLLABLE PIEUP-WEO-RIEULHIEUH 94DB BDAC # HANGUL SYLLABLE PIEUP-WEO-MIEUM 94DC BDAD # HANGUL SYLLABLE PIEUP-WEO-PIEUP 94DD BDAE # HANGUL SYLLABLE PIEUP-WEO-PIEUPSIOS 94DE BDAF # HANGUL SYLLABLE PIEUP-WEO-SIOS 94DF BDB1 # HANGUL SYLLABLE PIEUP-WEO-IEUNG 94E0 BDB2 # HANGUL SYLLABLE PIEUP-WEO-CIEUC 94E1 BDB3 # HANGUL SYLLABLE PIEUP-WEO-CHIEUCH 94E2 BDB4 # HANGUL SYLLABLE PIEUP-WEO-KHIEUKH 94E3 BDB5 # HANGUL SYLLABLE PIEUP-WEO-THIEUTH 94E4 BDB6 # HANGUL SYLLABLE PIEUP-WEO-PHIEUPH 94E5 BDB7 # HANGUL SYLLABLE PIEUP-WEO-HIEUH 94E6 BDB9 # HANGUL SYLLABLE PIEUP-WE-KIYEOK 94E7 BDBA # HANGUL SYLLABLE PIEUP-WE-SSANGKIYEOK 94E8 BDBB # HANGUL SYLLABLE PIEUP-WE-KIYEOKSIOS 94E9 BDBC # HANGUL SYLLABLE PIEUP-WE-NIEUN 94EA BDBD # HANGUL SYLLABLE PIEUP-WE-NIEUNCIEUC 94EB BDBE # HANGUL SYLLABLE PIEUP-WE-NIEUNHIEUH 94EC BDBF # HANGUL SYLLABLE PIEUP-WE-TIKEUT 94ED BDC0 # HANGUL SYLLABLE PIEUP-WE-RIEUL 94EE BDC1 # HANGUL SYLLABLE PIEUP-WE-RIEULKIYEOK 94EF BDC2 # HANGUL SYLLABLE PIEUP-WE-RIEULMIEUM 94F0 BDC3 # HANGUL SYLLABLE PIEUP-WE-RIEULPIEUP 94F1 BDC4 # HANGUL SYLLABLE PIEUP-WE-RIEULSIOS 94F2 BDC5 # HANGUL SYLLABLE PIEUP-WE-RIEULTHIEUTH 94F3 BDC6 # HANGUL SYLLABLE PIEUP-WE-RIEULPHIEUPH 94F4 BDC7 # HANGUL SYLLABLE PIEUP-WE-RIEULHIEUH 94F5 BDC8 # HANGUL SYLLABLE PIEUP-WE-MIEUM 94F6 BDC9 # HANGUL SYLLABLE PIEUP-WE-PIEUP 94F7 BDCA # HANGUL SYLLABLE PIEUP-WE-PIEUPSIOS 94F8 BDCB # HANGUL SYLLABLE PIEUP-WE-SIOS 94F9 BDCC # HANGUL SYLLABLE PIEUP-WE-SSANGSIOS 94FA BDCD # HANGUL SYLLABLE PIEUP-WE-IEUNG 94FB BDCE # HANGUL SYLLABLE PIEUP-WE-CIEUC 94FC BDCF # HANGUL SYLLABLE PIEUP-WE-CHIEUCH 94FD BDD0 # HANGUL SYLLABLE PIEUP-WE-KHIEUKH 94FE BDD1 # HANGUL SYLLABLE PIEUP-WE-THIEUTH 9541 BDD2 # HANGUL SYLLABLE PIEUP-WE-PHIEUPH 9542 BDD3 # HANGUL SYLLABLE PIEUP-WE-HIEUH 9543 BDD6 # HANGUL SYLLABLE PIEUP-WI-SSANGKIYEOK 9544 BDD7 # HANGUL SYLLABLE PIEUP-WI-KIYEOKSIOS 9545 BDD9 # HANGUL SYLLABLE PIEUP-WI-NIEUNCIEUC 9546 BDDA # HANGUL SYLLABLE PIEUP-WI-NIEUNHIEUH 9547 BDDB # HANGUL SYLLABLE PIEUP-WI-TIKEUT 9548 BDDD # HANGUL SYLLABLE PIEUP-WI-RIEULKIYEOK 9549 BDDE # HANGUL SYLLABLE PIEUP-WI-RIEULMIEUM 954A BDDF # HANGUL SYLLABLE PIEUP-WI-RIEULPIEUP 954B BDE0 # HANGUL SYLLABLE PIEUP-WI-RIEULSIOS 954C BDE1 # HANGUL SYLLABLE PIEUP-WI-RIEULTHIEUTH 954D BDE2 # HANGUL SYLLABLE PIEUP-WI-RIEULPHIEUPH 954E BDE3 # HANGUL SYLLABLE PIEUP-WI-RIEULHIEUH 954F BDE4 # HANGUL SYLLABLE PIEUP-WI-MIEUM 9550 BDE5 # HANGUL SYLLABLE PIEUP-WI-PIEUP 9551 BDE6 # HANGUL SYLLABLE PIEUP-WI-PIEUPSIOS 9552 BDE7 # HANGUL SYLLABLE PIEUP-WI-SIOS 9553 BDE8 # HANGUL SYLLABLE PIEUP-WI-SSANGSIOS 9554 BDEA # HANGUL SYLLABLE PIEUP-WI-CIEUC 9555 BDEB # HANGUL SYLLABLE PIEUP-WI-CHIEUCH 9556 BDEC # HANGUL SYLLABLE PIEUP-WI-KHIEUKH 9557 BDED # HANGUL SYLLABLE PIEUP-WI-THIEUTH 9558 BDEE # HANGUL SYLLABLE PIEUP-WI-PHIEUPH 9559 BDEF # HANGUL SYLLABLE PIEUP-WI-HIEUH 955A BDF1 # HANGUL SYLLABLE PIEUP-YU-KIYEOK 9561 BDF2 # HANGUL SYLLABLE PIEUP-YU-SSANGKIYEOK 9562 BDF3 # HANGUL SYLLABLE PIEUP-YU-KIYEOKSIOS 9563 BDF5 # HANGUL SYLLABLE PIEUP-YU-NIEUNCIEUC 9564 BDF6 # HANGUL SYLLABLE PIEUP-YU-NIEUNHIEUH 9565 BDF7 # HANGUL SYLLABLE PIEUP-YU-TIKEUT 9566 BDF9 # HANGUL SYLLABLE PIEUP-YU-RIEULKIYEOK 9567 BDFA # HANGUL SYLLABLE PIEUP-YU-RIEULMIEUM 9568 BDFB # HANGUL SYLLABLE PIEUP-YU-RIEULPIEUP 9569 BDFC # HANGUL SYLLABLE PIEUP-YU-RIEULSIOS 956A BDFD # HANGUL SYLLABLE PIEUP-YU-RIEULTHIEUTH 956B BDFE # HANGUL SYLLABLE PIEUP-YU-RIEULPHIEUPH 956C BDFF # HANGUL SYLLABLE PIEUP-YU-RIEULHIEUH 956D BE01 # HANGUL SYLLABLE PIEUP-YU-PIEUP 956E BE02 # HANGUL SYLLABLE PIEUP-YU-PIEUPSIOS 956F BE04 # HANGUL SYLLABLE PIEUP-YU-SSANGSIOS 9570 BE06 # HANGUL SYLLABLE PIEUP-YU-CIEUC 9571 BE07 # HANGUL SYLLABLE PIEUP-YU-CHIEUCH 9572 BE08 # HANGUL SYLLABLE PIEUP-YU-KHIEUKH 9573 BE09 # HANGUL SYLLABLE PIEUP-YU-THIEUTH 9574 BE0A # HANGUL SYLLABLE PIEUP-YU-PHIEUPH 9575 BE0B # HANGUL SYLLABLE PIEUP-YU-HIEUH 9576 BE0E # HANGUL SYLLABLE PIEUP-EU-SSANGKIYEOK 9577 BE0F # HANGUL SYLLABLE PIEUP-EU-KIYEOKSIOS 9578 BE11 # HANGUL SYLLABLE PIEUP-EU-NIEUNCIEUC 9579 BE12 # HANGUL SYLLABLE PIEUP-EU-NIEUNHIEUH 957A BE13 # HANGUL SYLLABLE PIEUP-EU-TIKEUT 9581 BE15 # HANGUL SYLLABLE PIEUP-EU-RIEULKIYEOK 9582 BE16 # HANGUL SYLLABLE PIEUP-EU-RIEULMIEUM 9583 BE17 # HANGUL SYLLABLE PIEUP-EU-RIEULPIEUP 9584 BE18 # HANGUL SYLLABLE PIEUP-EU-RIEULSIOS 9585 BE19 # HANGUL SYLLABLE PIEUP-EU-RIEULTHIEUTH 9586 BE1A # HANGUL SYLLABLE PIEUP-EU-RIEULPHIEUPH 9587 BE1B # HANGUL SYLLABLE PIEUP-EU-RIEULHIEUH 9588 BE1E # HANGUL SYLLABLE PIEUP-EU-PIEUPSIOS 9589 BE20 # HANGUL SYLLABLE PIEUP-EU-SSANGSIOS 958A BE21 # HANGUL SYLLABLE PIEUP-EU-IEUNG 958B BE22 # HANGUL SYLLABLE PIEUP-EU-CIEUC 958C BE23 # HANGUL SYLLABLE PIEUP-EU-CHIEUCH 958D BE24 # HANGUL SYLLABLE PIEUP-EU-KHIEUKH 958E BE25 # HANGUL SYLLABLE PIEUP-EU-THIEUTH 958F BE26 # HANGUL SYLLABLE PIEUP-EU-PHIEUPH 9590 BE27 # HANGUL SYLLABLE PIEUP-EU-HIEUH 9591 BE28 # HANGUL SYLLABLE PIEUP-YI 9592 BE29 # HANGUL SYLLABLE PIEUP-YI-KIYEOK 9593 BE2A # HANGUL SYLLABLE PIEUP-YI-SSANGKIYEOK 9594 BE2B # HANGUL SYLLABLE PIEUP-YI-KIYEOKSIOS 9595 BE2C # HANGUL SYLLABLE PIEUP-YI-NIEUN 9596 BE2D # HANGUL SYLLABLE PIEUP-YI-NIEUNCIEUC 9597 BE2E # HANGUL SYLLABLE PIEUP-YI-NIEUNHIEUH 9598 BE2F # HANGUL SYLLABLE PIEUP-YI-TIKEUT 9599 BE30 # HANGUL SYLLABLE PIEUP-YI-RIEUL 959A BE31 # HANGUL SYLLABLE PIEUP-YI-RIEULKIYEOK 959B BE32 # HANGUL SYLLABLE PIEUP-YI-RIEULMIEUM 959C BE33 # HANGUL SYLLABLE PIEUP-YI-RIEULPIEUP 959D BE34 # HANGUL SYLLABLE PIEUP-YI-RIEULSIOS 959E BE35 # HANGUL SYLLABLE PIEUP-YI-RIEULTHIEUTH 959F BE36 # HANGUL SYLLABLE PIEUP-YI-RIEULPHIEUPH 95A0 BE37 # HANGUL SYLLABLE PIEUP-YI-RIEULHIEUH 95A1 BE38 # HANGUL SYLLABLE PIEUP-YI-MIEUM 95A2 BE39 # HANGUL SYLLABLE PIEUP-YI-PIEUP 95A3 BE3A # HANGUL SYLLABLE PIEUP-YI-PIEUPSIOS 95A4 BE3B # HANGUL SYLLABLE PIEUP-YI-SIOS 95A5 BE3C # HANGUL SYLLABLE PIEUP-YI-SSANGSIOS 95A6 BE3D # HANGUL SYLLABLE PIEUP-YI-IEUNG 95A7 BE3E # HANGUL SYLLABLE PIEUP-YI-CIEUC 95A8 BE3F # HANGUL SYLLABLE PIEUP-YI-CHIEUCH 95A9 BE40 # HANGUL SYLLABLE PIEUP-YI-KHIEUKH 95AA BE41 # HANGUL SYLLABLE PIEUP-YI-THIEUTH 95AB BE42 # HANGUL SYLLABLE PIEUP-YI-PHIEUPH 95AC BE43 # HANGUL SYLLABLE PIEUP-YI-HIEUH 95AD BE46 # HANGUL SYLLABLE PIEUP-I-SSANGKIYEOK 95AE BE47 # HANGUL SYLLABLE PIEUP-I-KIYEOKSIOS 95AF BE49 # HANGUL SYLLABLE PIEUP-I-NIEUNCIEUC 95B0 BE4A # HANGUL SYLLABLE PIEUP-I-NIEUNHIEUH 95B1 BE4B # HANGUL SYLLABLE PIEUP-I-TIKEUT 95B2 BE4D # HANGUL SYLLABLE PIEUP-I-RIEULKIYEOK 95B3 BE4F # HANGUL SYLLABLE PIEUP-I-RIEULPIEUP 95B4 BE50 # HANGUL SYLLABLE PIEUP-I-RIEULSIOS 95B5 BE51 # HANGUL SYLLABLE PIEUP-I-RIEULTHIEUTH 95B6 BE52 # HANGUL SYLLABLE PIEUP-I-RIEULPHIEUPH 95B7 BE53 # HANGUL SYLLABLE PIEUP-I-RIEULHIEUH 95B8 BE56 # HANGUL SYLLABLE PIEUP-I-PIEUPSIOS 95B9 BE58 # HANGUL SYLLABLE PIEUP-I-SSANGSIOS 95BA BE5C # HANGUL SYLLABLE PIEUP-I-KHIEUKH 95BB BE5D # HANGUL SYLLABLE PIEUP-I-THIEUTH 95BC BE5E # HANGUL SYLLABLE PIEUP-I-PHIEUPH 95BD BE5F # HANGUL SYLLABLE PIEUP-I-HIEUH 95BE BE62 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGKIYEOK 95BF BE63 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOKSIOS 95C0 BE65 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUNCIEUC 95C1 BE66 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUNHIEUH 95C2 BE67 # HANGUL SYLLABLE SSANGPIEUP-A-TIKEUT 95C3 BE69 # HANGUL SYLLABLE SSANGPIEUP-A-RIEULKIYEOK 95C4 BE6B # HANGUL SYLLABLE SSANGPIEUP-A-RIEULPIEUP 95C5 BE6C # HANGUL SYLLABLE SSANGPIEUP-A-RIEULSIOS 95C6 BE6D # HANGUL SYLLABLE SSANGPIEUP-A-RIEULTHIEUTH 95C7 BE6E # HANGUL SYLLABLE SSANGPIEUP-A-RIEULPHIEUPH 95C8 BE6F # HANGUL SYLLABLE SSANGPIEUP-A-RIEULHIEUH 95C9 BE72 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUPSIOS 95CA BE76 # HANGUL SYLLABLE SSANGPIEUP-A-CIEUC 95CB BE77 # HANGUL SYLLABLE SSANGPIEUP-A-CHIEUCH 95CC BE78 # HANGUL SYLLABLE SSANGPIEUP-A-KHIEUKH 95CD BE79 # HANGUL SYLLABLE SSANGPIEUP-A-THIEUTH 95CE BE7A # HANGUL SYLLABLE SSANGPIEUP-A-PHIEUPH 95CF BE7E # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGKIYEOK 95D0 BE7F # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOKSIOS 95D1 BE81 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUNCIEUC 95D2 BE82 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUNHIEUH 95D3 BE83 # HANGUL SYLLABLE SSANGPIEUP-AE-TIKEUT 95D4 BE85 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULKIYEOK 95D5 BE86 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULMIEUM 95D6 BE87 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULPIEUP 95D7 BE88 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULSIOS 95D8 BE89 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULTHIEUTH 95D9 BE8A # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULPHIEUPH 95DA BE8B # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULHIEUH 95DB BE8E # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUPSIOS 95DC BE92 # HANGUL SYLLABLE SSANGPIEUP-AE-CIEUC 95DD BE93 # HANGUL SYLLABLE SSANGPIEUP-AE-CHIEUCH 95DE BE94 # HANGUL SYLLABLE SSANGPIEUP-AE-KHIEUKH 95DF BE95 # HANGUL SYLLABLE SSANGPIEUP-AE-THIEUTH 95E0 BE96 # HANGUL SYLLABLE SSANGPIEUP-AE-PHIEUPH 95E1 BE97 # HANGUL SYLLABLE SSANGPIEUP-AE-HIEUH 95E2 BE9A # HANGUL SYLLABLE SSANGPIEUP-YA-SSANGKIYEOK 95E3 BE9B # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOKSIOS 95E4 BE9C # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUN 95E5 BE9D # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUNCIEUC 95E6 BE9E # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUNHIEUH 95E7 BE9F # HANGUL SYLLABLE SSANGPIEUP-YA-TIKEUT 95E8 BEA0 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEUL 95E9 BEA1 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULKIYEOK 95EA BEA2 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULMIEUM 95EB BEA3 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULPIEUP 95EC BEA4 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULSIOS 95ED BEA5 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULTHIEUTH 95EE BEA6 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULPHIEUPH 95EF BEA7 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULHIEUH 95F0 BEA9 # HANGUL SYLLABLE SSANGPIEUP-YA-PIEUP 95F1 BEAA # HANGUL SYLLABLE SSANGPIEUP-YA-PIEUPSIOS 95F2 BEAB # HANGUL SYLLABLE SSANGPIEUP-YA-SIOS 95F3 BEAC # HANGUL SYLLABLE SSANGPIEUP-YA-SSANGSIOS 95F4 BEAD # HANGUL SYLLABLE SSANGPIEUP-YA-IEUNG 95F5 BEAE # HANGUL SYLLABLE SSANGPIEUP-YA-CIEUC 95F6 BEAF # HANGUL SYLLABLE SSANGPIEUP-YA-CHIEUCH 95F7 BEB0 # HANGUL SYLLABLE SSANGPIEUP-YA-KHIEUKH 95F8 BEB1 # HANGUL SYLLABLE SSANGPIEUP-YA-THIEUTH 95F9 BEB2 # HANGUL SYLLABLE SSANGPIEUP-YA-PHIEUPH 95FA BEB3 # HANGUL SYLLABLE SSANGPIEUP-YA-HIEUH 95FB BEB4 # HANGUL SYLLABLE SSANGPIEUP-YAE 95FC BEB5 # HANGUL SYLLABLE SSANGPIEUP-YAE-KIYEOK 95FD BEB6 # HANGUL SYLLABLE SSANGPIEUP-YAE-SSANGKIYEOK 95FE BEB7 # HANGUL SYLLABLE SSANGPIEUP-YAE-KIYEOKSIOS 9641 BEB8 # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUN 9642 BEB9 # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUNCIEUC 9643 BEBA # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUNHIEUH 9644 BEBB # HANGUL SYLLABLE SSANGPIEUP-YAE-TIKEUT 9645 BEBC # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEUL 9646 BEBD # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULKIYEOK 9647 BEBE # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULMIEUM 9648 BEBF # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULPIEUP 9649 BEC0 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULSIOS 964A BEC1 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULTHIEUTH 964B BEC2 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULPHIEUPH 964C BEC3 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULHIEUH 964D BEC4 # HANGUL SYLLABLE SSANGPIEUP-YAE-MIEUM 964E BEC5 # HANGUL SYLLABLE SSANGPIEUP-YAE-PIEUP 964F BEC6 # HANGUL SYLLABLE SSANGPIEUP-YAE-PIEUPSIOS 9650 BEC7 # HANGUL SYLLABLE SSANGPIEUP-YAE-SIOS 9651 BEC8 # HANGUL SYLLABLE SSANGPIEUP-YAE-SSANGSIOS 9652 BEC9 # HANGUL SYLLABLE SSANGPIEUP-YAE-IEUNG 9653 BECA # HANGUL SYLLABLE SSANGPIEUP-YAE-CIEUC 9654 BECB # HANGUL SYLLABLE SSANGPIEUP-YAE-CHIEUCH 9655 BECC # HANGUL SYLLABLE SSANGPIEUP-YAE-KHIEUKH 9656 BECD # HANGUL SYLLABLE SSANGPIEUP-YAE-THIEUTH 9657 BECE # HANGUL SYLLABLE SSANGPIEUP-YAE-PHIEUPH 9658 BECF # HANGUL SYLLABLE SSANGPIEUP-YAE-HIEUH 9659 BED2 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGKIYEOK 965A BED3 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOKSIOS 9661 BED5 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUNCIEUC 9662 BED6 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUNHIEUH 9663 BED9 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULKIYEOK 9664 BEDA # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULMIEUM 9665 BEDB # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULPIEUP 9666 BEDC # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULSIOS 9667 BEDD # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULTHIEUTH 9668 BEDE # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULPHIEUPH 9669 BEDF # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULHIEUH 966A BEE1 # HANGUL SYLLABLE SSANGPIEUP-EO-PIEUP 966B BEE2 # HANGUL SYLLABLE SSANGPIEUP-EO-PIEUPSIOS 966C BEE6 # HANGUL SYLLABLE SSANGPIEUP-EO-CIEUC 966D BEE7 # HANGUL SYLLABLE SSANGPIEUP-EO-CHIEUCH 966E BEE8 # HANGUL SYLLABLE SSANGPIEUP-EO-KHIEUKH 966F BEE9 # HANGUL SYLLABLE SSANGPIEUP-EO-THIEUTH 9670 BEEA # HANGUL SYLLABLE SSANGPIEUP-EO-PHIEUPH 9671 BEEB # HANGUL SYLLABLE SSANGPIEUP-EO-HIEUH 9672 BEED # HANGUL SYLLABLE SSANGPIEUP-E-KIYEOK 9673 BEEE # HANGUL SYLLABLE SSANGPIEUP-E-SSANGKIYEOK 9674 BEEF # HANGUL SYLLABLE SSANGPIEUP-E-KIYEOKSIOS 9675 BEF0 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUN 9676 BEF1 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUNCIEUC 9677 BEF2 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUNHIEUH 9678 BEF3 # HANGUL SYLLABLE SSANGPIEUP-E-TIKEUT 9679 BEF4 # HANGUL SYLLABLE SSANGPIEUP-E-RIEUL 967A BEF5 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULKIYEOK 9681 BEF6 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULMIEUM 9682 BEF7 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULPIEUP 9683 BEF8 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULSIOS 9684 BEF9 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULTHIEUTH 9685 BEFA # HANGUL SYLLABLE SSANGPIEUP-E-RIEULPHIEUPH 9686 BEFB # HANGUL SYLLABLE SSANGPIEUP-E-RIEULHIEUH 9687 BEFC # HANGUL SYLLABLE SSANGPIEUP-E-MIEUM 9688 BEFD # HANGUL SYLLABLE SSANGPIEUP-E-PIEUP 9689 BEFE # HANGUL SYLLABLE SSANGPIEUP-E-PIEUPSIOS 968A BEFF # HANGUL SYLLABLE SSANGPIEUP-E-SIOS 968B BF00 # HANGUL SYLLABLE SSANGPIEUP-E-SSANGSIOS 968C BF02 # HANGUL SYLLABLE SSANGPIEUP-E-CIEUC 968D BF03 # HANGUL SYLLABLE SSANGPIEUP-E-CHIEUCH 968E BF04 # HANGUL SYLLABLE SSANGPIEUP-E-KHIEUKH 968F BF05 # HANGUL SYLLABLE SSANGPIEUP-E-THIEUTH 9690 BF06 # HANGUL SYLLABLE SSANGPIEUP-E-PHIEUPH 9691 BF07 # HANGUL SYLLABLE SSANGPIEUP-E-HIEUH 9692 BF0A # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGKIYEOK 9693 BF0B # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOKSIOS 9694 BF0C # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUN 9695 BF0D # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUNCIEUC 9696 BF0E # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUNHIEUH 9697 BF0F # HANGUL SYLLABLE SSANGPIEUP-YEO-TIKEUT 9698 BF10 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEUL 9699 BF11 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULKIYEOK 969A BF12 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULMIEUM 969B BF13 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULPIEUP 969C BF14 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULSIOS 969D BF15 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULTHIEUTH 969E BF16 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULPHIEUPH 969F BF17 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULHIEUH 96A0 BF1A # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUPSIOS 96A1 BF1E # HANGUL SYLLABLE SSANGPIEUP-YEO-CIEUC 96A2 BF1F # HANGUL SYLLABLE SSANGPIEUP-YEO-CHIEUCH 96A3 BF20 # HANGUL SYLLABLE SSANGPIEUP-YEO-KHIEUKH 96A4 BF21 # HANGUL SYLLABLE SSANGPIEUP-YEO-THIEUTH 96A5 BF22 # HANGUL SYLLABLE SSANGPIEUP-YEO-PHIEUPH 96A6 BF23 # HANGUL SYLLABLE SSANGPIEUP-YEO-HIEUH 96A7 BF24 # HANGUL SYLLABLE SSANGPIEUP-YE 96A8 BF25 # HANGUL SYLLABLE SSANGPIEUP-YE-KIYEOK 96A9 BF26 # HANGUL SYLLABLE SSANGPIEUP-YE-SSANGKIYEOK 96AA BF27 # HANGUL SYLLABLE SSANGPIEUP-YE-KIYEOKSIOS 96AB BF28 # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUN 96AC BF29 # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUNCIEUC 96AD BF2A # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUNHIEUH 96AE BF2B # HANGUL SYLLABLE SSANGPIEUP-YE-TIKEUT 96AF BF2C # HANGUL SYLLABLE SSANGPIEUP-YE-RIEUL 96B0 BF2D # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULKIYEOK 96B1 BF2E # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULMIEUM 96B2 BF2F # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULPIEUP 96B3 BF30 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULSIOS 96B4 BF31 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULTHIEUTH 96B5 BF32 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULPHIEUPH 96B6 BF33 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULHIEUH 96B7 BF34 # HANGUL SYLLABLE SSANGPIEUP-YE-MIEUM 96B8 BF35 # HANGUL SYLLABLE SSANGPIEUP-YE-PIEUP 96B9 BF36 # HANGUL SYLLABLE SSANGPIEUP-YE-PIEUPSIOS 96BA BF37 # HANGUL SYLLABLE SSANGPIEUP-YE-SIOS 96BB BF38 # HANGUL SYLLABLE SSANGPIEUP-YE-SSANGSIOS 96BC BF39 # HANGUL SYLLABLE SSANGPIEUP-YE-IEUNG 96BD BF3A # HANGUL SYLLABLE SSANGPIEUP-YE-CIEUC 96BE BF3B # HANGUL SYLLABLE SSANGPIEUP-YE-CHIEUCH 96BF BF3C # HANGUL SYLLABLE SSANGPIEUP-YE-KHIEUKH 96C0 BF3D # HANGUL SYLLABLE SSANGPIEUP-YE-THIEUTH 96C1 BF3E # HANGUL SYLLABLE SSANGPIEUP-YE-PHIEUPH 96C2 BF3F # HANGUL SYLLABLE SSANGPIEUP-YE-HIEUH 96C3 BF42 # HANGUL SYLLABLE SSANGPIEUP-O-SSANGKIYEOK 96C4 BF43 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOKSIOS 96C5 BF45 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUNCIEUC 96C6 BF46 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUNHIEUH 96C7 BF47 # HANGUL SYLLABLE SSANGPIEUP-O-TIKEUT 96C8 BF49 # HANGUL SYLLABLE SSANGPIEUP-O-RIEULKIYEOK 96C9 BF4A # HANGUL SYLLABLE SSANGPIEUP-O-RIEULMIEUM 96CA BF4B # HANGUL SYLLABLE SSANGPIEUP-O-RIEULPIEUP 96CB BF4C # HANGUL SYLLABLE SSANGPIEUP-O-RIEULSIOS 96CC BF4D # HANGUL SYLLABLE SSANGPIEUP-O-RIEULTHIEUTH 96CD BF4E # HANGUL SYLLABLE SSANGPIEUP-O-RIEULPHIEUPH 96CE BF4F # HANGUL SYLLABLE SSANGPIEUP-O-RIEULHIEUH 96CF BF52 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUPSIOS 96D0 BF53 # HANGUL SYLLABLE SSANGPIEUP-O-SIOS 96D1 BF54 # HANGUL SYLLABLE SSANGPIEUP-O-SSANGSIOS 96D2 BF56 # HANGUL SYLLABLE SSANGPIEUP-O-CIEUC 96D3 BF57 # HANGUL SYLLABLE SSANGPIEUP-O-CHIEUCH 96D4 BF58 # HANGUL SYLLABLE SSANGPIEUP-O-KHIEUKH 96D5 BF59 # HANGUL SYLLABLE SSANGPIEUP-O-THIEUTH 96D6 BF5A # HANGUL SYLLABLE SSANGPIEUP-O-PHIEUPH 96D7 BF5B # HANGUL SYLLABLE SSANGPIEUP-O-HIEUH 96D8 BF5C # HANGUL SYLLABLE SSANGPIEUP-WA 96D9 BF5D # HANGUL SYLLABLE SSANGPIEUP-WA-KIYEOK 96DA BF5E # HANGUL SYLLABLE SSANGPIEUP-WA-SSANGKIYEOK 96DB BF5F # HANGUL SYLLABLE SSANGPIEUP-WA-KIYEOKSIOS 96DC BF60 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUN 96DD BF61 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUNCIEUC 96DE BF62 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUNHIEUH 96DF BF63 # HANGUL SYLLABLE SSANGPIEUP-WA-TIKEUT 96E0 BF64 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEUL 96E1 BF65 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULKIYEOK 96E2 BF66 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULMIEUM 96E3 BF67 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULPIEUP 96E4 BF68 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULSIOS 96E5 BF69 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULTHIEUTH 96E6 BF6A # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULPHIEUPH 96E7 BF6B # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULHIEUH 96E8 BF6C # HANGUL SYLLABLE SSANGPIEUP-WA-MIEUM 96E9 BF6D # HANGUL SYLLABLE SSANGPIEUP-WA-PIEUP 96EA BF6E # HANGUL SYLLABLE SSANGPIEUP-WA-PIEUPSIOS 96EB BF6F # HANGUL SYLLABLE SSANGPIEUP-WA-SIOS 96EC BF70 # HANGUL SYLLABLE SSANGPIEUP-WA-SSANGSIOS 96ED BF71 # HANGUL SYLLABLE SSANGPIEUP-WA-IEUNG 96EE BF72 # HANGUL SYLLABLE SSANGPIEUP-WA-CIEUC 96EF BF73 # HANGUL SYLLABLE SSANGPIEUP-WA-CHIEUCH 96F0 BF74 # HANGUL SYLLABLE SSANGPIEUP-WA-KHIEUKH 96F1 BF75 # HANGUL SYLLABLE SSANGPIEUP-WA-THIEUTH 96F2 BF76 # HANGUL SYLLABLE SSANGPIEUP-WA-PHIEUPH 96F3 BF77 # HANGUL SYLLABLE SSANGPIEUP-WA-HIEUH 96F4 BF78 # HANGUL SYLLABLE SSANGPIEUP-WAE 96F5 BF79 # HANGUL SYLLABLE SSANGPIEUP-WAE-KIYEOK 96F6 BF7A # HANGUL SYLLABLE SSANGPIEUP-WAE-SSANGKIYEOK 96F7 BF7B # HANGUL SYLLABLE SSANGPIEUP-WAE-KIYEOKSIOS 96F8 BF7C # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUN 96F9 BF7D # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUNCIEUC 96FA BF7E # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUNHIEUH 96FB BF7F # HANGUL SYLLABLE SSANGPIEUP-WAE-TIKEUT 96FC BF80 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEUL 96FD BF81 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULKIYEOK 96FE BF82 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULMIEUM 9741 BF83 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULPIEUP 9742 BF84 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULSIOS 9743 BF85 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULTHIEUTH 9744 BF86 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULPHIEUPH 9745 BF87 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULHIEUH 9746 BF88 # HANGUL SYLLABLE SSANGPIEUP-WAE-MIEUM 9747 BF89 # HANGUL SYLLABLE SSANGPIEUP-WAE-PIEUP 9748 BF8A # HANGUL SYLLABLE SSANGPIEUP-WAE-PIEUPSIOS 9749 BF8B # HANGUL SYLLABLE SSANGPIEUP-WAE-SIOS 974A BF8C # HANGUL SYLLABLE SSANGPIEUP-WAE-SSANGSIOS 974B BF8D # HANGUL SYLLABLE SSANGPIEUP-WAE-IEUNG 974C BF8E # HANGUL SYLLABLE SSANGPIEUP-WAE-CIEUC 974D BF8F # HANGUL SYLLABLE SSANGPIEUP-WAE-CHIEUCH 974E BF90 # HANGUL SYLLABLE SSANGPIEUP-WAE-KHIEUKH 974F BF91 # HANGUL SYLLABLE SSANGPIEUP-WAE-THIEUTH 9750 BF92 # HANGUL SYLLABLE SSANGPIEUP-WAE-PHIEUPH 9751 BF93 # HANGUL SYLLABLE SSANGPIEUP-WAE-HIEUH 9752 BF95 # HANGUL SYLLABLE SSANGPIEUP-OE-KIYEOK 9753 BF96 # HANGUL SYLLABLE SSANGPIEUP-OE-SSANGKIYEOK 9754 BF97 # HANGUL SYLLABLE SSANGPIEUP-OE-KIYEOKSIOS 9755 BF98 # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUN 9756 BF99 # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUNCIEUC 9757 BF9A # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUNHIEUH 9758 BF9B # HANGUL SYLLABLE SSANGPIEUP-OE-TIKEUT 9759 BF9C # HANGUL SYLLABLE SSANGPIEUP-OE-RIEUL 975A BF9D # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULKIYEOK 9761 BF9E # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULMIEUM 9762 BF9F # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULPIEUP 9763 BFA0 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULSIOS 9764 BFA1 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULTHIEUTH 9765 BFA2 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULPHIEUPH 9766 BFA3 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULHIEUH 9767 BFA4 # HANGUL SYLLABLE SSANGPIEUP-OE-MIEUM 9768 BFA5 # HANGUL SYLLABLE SSANGPIEUP-OE-PIEUP 9769 BFA6 # HANGUL SYLLABLE SSANGPIEUP-OE-PIEUPSIOS 976A BFA7 # HANGUL SYLLABLE SSANGPIEUP-OE-SIOS 976B BFA8 # HANGUL SYLLABLE SSANGPIEUP-OE-SSANGSIOS 976C BFA9 # HANGUL SYLLABLE SSANGPIEUP-OE-IEUNG 976D BFAA # HANGUL SYLLABLE SSANGPIEUP-OE-CIEUC 976E BFAB # HANGUL SYLLABLE SSANGPIEUP-OE-CHIEUCH 976F BFAC # HANGUL SYLLABLE SSANGPIEUP-OE-KHIEUKH 9770 BFAD # HANGUL SYLLABLE SSANGPIEUP-OE-THIEUTH 9771 BFAE # HANGUL SYLLABLE SSANGPIEUP-OE-PHIEUPH 9772 BFAF # HANGUL SYLLABLE SSANGPIEUP-OE-HIEUH 9773 BFB1 # HANGUL SYLLABLE SSANGPIEUP-YO-KIYEOK 9774 BFB2 # HANGUL SYLLABLE SSANGPIEUP-YO-SSANGKIYEOK 9775 BFB3 # HANGUL SYLLABLE SSANGPIEUP-YO-KIYEOKSIOS 9776 BFB4 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUN 9777 BFB5 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUNCIEUC 9778 BFB6 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUNHIEUH 9779 BFB7 # HANGUL SYLLABLE SSANGPIEUP-YO-TIKEUT 977A BFB8 # HANGUL SYLLABLE SSANGPIEUP-YO-RIEUL 9781 BFB9 # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULKIYEOK 9782 BFBA # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULMIEUM 9783 BFBB # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULPIEUP 9784 BFBC # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULSIOS 9785 BFBD # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULTHIEUTH 9786 BFBE # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULPHIEUPH 9787 BFBF # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULHIEUH 9788 BFC0 # HANGUL SYLLABLE SSANGPIEUP-YO-MIEUM 9789 BFC1 # HANGUL SYLLABLE SSANGPIEUP-YO-PIEUP 978A BFC2 # HANGUL SYLLABLE SSANGPIEUP-YO-PIEUPSIOS 978B BFC3 # HANGUL SYLLABLE SSANGPIEUP-YO-SIOS 978C BFC4 # HANGUL SYLLABLE SSANGPIEUP-YO-SSANGSIOS 978D BFC6 # HANGUL SYLLABLE SSANGPIEUP-YO-CIEUC 978E BFC7 # HANGUL SYLLABLE SSANGPIEUP-YO-CHIEUCH 978F BFC8 # HANGUL SYLLABLE SSANGPIEUP-YO-KHIEUKH 9790 BFC9 # HANGUL SYLLABLE SSANGPIEUP-YO-THIEUTH 9791 BFCA # HANGUL SYLLABLE SSANGPIEUP-YO-PHIEUPH 9792 BFCB # HANGUL SYLLABLE SSANGPIEUP-YO-HIEUH 9793 BFCE # HANGUL SYLLABLE SSANGPIEUP-U-SSANGKIYEOK 9794 BFCF # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOKSIOS 9795 BFD1 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUNCIEUC 9796 BFD2 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUNHIEUH 9797 BFD3 # HANGUL SYLLABLE SSANGPIEUP-U-TIKEUT 9798 BFD5 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULKIYEOK 9799 BFD6 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULMIEUM 979A BFD7 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULPIEUP 979B BFD8 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULSIOS 979C BFD9 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULTHIEUTH 979D BFDA # HANGUL SYLLABLE SSANGPIEUP-U-RIEULPHIEUPH 979E BFDB # HANGUL SYLLABLE SSANGPIEUP-U-RIEULHIEUH 979F BFDD # HANGUL SYLLABLE SSANGPIEUP-U-PIEUP 97A0 BFDE # HANGUL SYLLABLE SSANGPIEUP-U-PIEUPSIOS 97A1 BFE0 # HANGUL SYLLABLE SSANGPIEUP-U-SSANGSIOS 97A2 BFE2 # HANGUL SYLLABLE SSANGPIEUP-U-CIEUC 97A3 BFE3 # HANGUL SYLLABLE SSANGPIEUP-U-CHIEUCH 97A4 BFE4 # HANGUL SYLLABLE SSANGPIEUP-U-KHIEUKH 97A5 BFE5 # HANGUL SYLLABLE SSANGPIEUP-U-THIEUTH 97A6 BFE6 # HANGUL SYLLABLE SSANGPIEUP-U-PHIEUPH 97A7 BFE7 # HANGUL SYLLABLE SSANGPIEUP-U-HIEUH 97A8 BFE8 # HANGUL SYLLABLE SSANGPIEUP-WEO 97A9 BFE9 # HANGUL SYLLABLE SSANGPIEUP-WEO-KIYEOK 97AA BFEA # HANGUL SYLLABLE SSANGPIEUP-WEO-SSANGKIYEOK 97AB BFEB # HANGUL SYLLABLE SSANGPIEUP-WEO-KIYEOKSIOS 97AC BFEC # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUN 97AD BFED # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUNCIEUC 97AE BFEE # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUNHIEUH 97AF BFEF # HANGUL SYLLABLE SSANGPIEUP-WEO-TIKEUT 97B0 BFF0 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEUL 97B1 BFF1 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULKIYEOK 97B2 BFF2 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULMIEUM 97B3 BFF3 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULPIEUP 97B4 BFF4 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULSIOS 97B5 BFF5 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULTHIEUTH 97B6 BFF6 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULPHIEUPH 97B7 BFF7 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULHIEUH 97B8 BFF8 # HANGUL SYLLABLE SSANGPIEUP-WEO-MIEUM 97B9 BFF9 # HANGUL SYLLABLE SSANGPIEUP-WEO-PIEUP 97BA BFFA # HANGUL SYLLABLE SSANGPIEUP-WEO-PIEUPSIOS 97BB BFFB # HANGUL SYLLABLE SSANGPIEUP-WEO-SIOS 97BC BFFC # HANGUL SYLLABLE SSANGPIEUP-WEO-SSANGSIOS 97BD BFFD # HANGUL SYLLABLE SSANGPIEUP-WEO-IEUNG 97BE BFFE # HANGUL SYLLABLE SSANGPIEUP-WEO-CIEUC 97BF BFFF # HANGUL SYLLABLE SSANGPIEUP-WEO-CHIEUCH 97C0 C000 # HANGUL SYLLABLE SSANGPIEUP-WEO-KHIEUKH 97C1 C001 # HANGUL SYLLABLE SSANGPIEUP-WEO-THIEUTH 97C2 C002 # HANGUL SYLLABLE SSANGPIEUP-WEO-PHIEUPH 97C3 C003 # HANGUL SYLLABLE SSANGPIEUP-WEO-HIEUH 97C4 C004 # HANGUL SYLLABLE SSANGPIEUP-WE 97C5 C005 # HANGUL SYLLABLE SSANGPIEUP-WE-KIYEOK 97C6 C006 # HANGUL SYLLABLE SSANGPIEUP-WE-SSANGKIYEOK 97C7 C007 # HANGUL SYLLABLE SSANGPIEUP-WE-KIYEOKSIOS 97C8 C008 # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUN 97C9 C009 # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUNCIEUC 97CA C00A # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUNHIEUH 97CB C00B # HANGUL SYLLABLE SSANGPIEUP-WE-TIKEUT 97CC C00C # HANGUL SYLLABLE SSANGPIEUP-WE-RIEUL 97CD C00D # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULKIYEOK 97CE C00E # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULMIEUM 97CF C00F # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULPIEUP 97D0 C010 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULSIOS 97D1 C011 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULTHIEUTH 97D2 C012 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULPHIEUPH 97D3 C013 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULHIEUH 97D4 C014 # HANGUL SYLLABLE SSANGPIEUP-WE-MIEUM 97D5 C015 # HANGUL SYLLABLE SSANGPIEUP-WE-PIEUP 97D6 C016 # HANGUL SYLLABLE SSANGPIEUP-WE-PIEUPSIOS 97D7 C017 # HANGUL SYLLABLE SSANGPIEUP-WE-SIOS 97D8 C018 # HANGUL SYLLABLE SSANGPIEUP-WE-SSANGSIOS 97D9 C019 # HANGUL SYLLABLE SSANGPIEUP-WE-IEUNG 97DA C01A # HANGUL SYLLABLE SSANGPIEUP-WE-CIEUC 97DB C01B # HANGUL SYLLABLE SSANGPIEUP-WE-CHIEUCH 97DC C01C # HANGUL SYLLABLE SSANGPIEUP-WE-KHIEUKH 97DD C01D # HANGUL SYLLABLE SSANGPIEUP-WE-THIEUTH 97DE C01E # HANGUL SYLLABLE SSANGPIEUP-WE-PHIEUPH 97DF C01F # HANGUL SYLLABLE SSANGPIEUP-WE-HIEUH 97E0 C020 # HANGUL SYLLABLE SSANGPIEUP-WI 97E1 C021 # HANGUL SYLLABLE SSANGPIEUP-WI-KIYEOK 97E2 C022 # HANGUL SYLLABLE SSANGPIEUP-WI-SSANGKIYEOK 97E3 C023 # HANGUL SYLLABLE SSANGPIEUP-WI-KIYEOKSIOS 97E4 C024 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUN 97E5 C025 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUNCIEUC 97E6 C026 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUNHIEUH 97E7 C027 # HANGUL SYLLABLE SSANGPIEUP-WI-TIKEUT 97E8 C028 # HANGUL SYLLABLE SSANGPIEUP-WI-RIEUL 97E9 C029 # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULKIYEOK 97EA C02A # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULMIEUM 97EB C02B # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULPIEUP 97EC C02C # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULSIOS 97ED C02D # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULTHIEUTH 97EE C02E # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULPHIEUPH 97EF C02F # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULHIEUH 97F0 C030 # HANGUL SYLLABLE SSANGPIEUP-WI-MIEUM 97F1 C031 # HANGUL SYLLABLE SSANGPIEUP-WI-PIEUP 97F2 C032 # HANGUL SYLLABLE SSANGPIEUP-WI-PIEUPSIOS 97F3 C033 # HANGUL SYLLABLE SSANGPIEUP-WI-SIOS 97F4 C034 # HANGUL SYLLABLE SSANGPIEUP-WI-SSANGSIOS 97F5 C035 # HANGUL SYLLABLE SSANGPIEUP-WI-IEUNG 97F6 C036 # HANGUL SYLLABLE SSANGPIEUP-WI-CIEUC 97F7 C037 # HANGUL SYLLABLE SSANGPIEUP-WI-CHIEUCH 97F8 C038 # HANGUL SYLLABLE SSANGPIEUP-WI-KHIEUKH 97F9 C039 # HANGUL SYLLABLE SSANGPIEUP-WI-THIEUTH 97FA C03A # HANGUL SYLLABLE SSANGPIEUP-WI-PHIEUPH 97FB C03B # HANGUL SYLLABLE SSANGPIEUP-WI-HIEUH 97FC C03D # HANGUL SYLLABLE SSANGPIEUP-YU-KIYEOK 97FD C03E # HANGUL SYLLABLE SSANGPIEUP-YU-SSANGKIYEOK 97FE C03F # HANGUL SYLLABLE SSANGPIEUP-YU-KIYEOKSIOS 9841 C040 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUN 9842 C041 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUNCIEUC 9843 C042 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUNHIEUH 9844 C043 # HANGUL SYLLABLE SSANGPIEUP-YU-TIKEUT 9845 C044 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEUL 9846 C045 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULKIYEOK 9847 C046 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULMIEUM 9848 C047 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULPIEUP 9849 C048 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULSIOS 984A C049 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULTHIEUTH 984B C04A # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULPHIEUPH 984C C04B # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULHIEUH 984D C04C # HANGUL SYLLABLE SSANGPIEUP-YU-MIEUM 984E C04D # HANGUL SYLLABLE SSANGPIEUP-YU-PIEUP 984F C04E # HANGUL SYLLABLE SSANGPIEUP-YU-PIEUPSIOS 9850 C04F # HANGUL SYLLABLE SSANGPIEUP-YU-SIOS 9851 C050 # HANGUL SYLLABLE SSANGPIEUP-YU-SSANGSIOS 9852 C052 # HANGUL SYLLABLE SSANGPIEUP-YU-CIEUC 9853 C053 # HANGUL SYLLABLE SSANGPIEUP-YU-CHIEUCH 9854 C054 # HANGUL SYLLABLE SSANGPIEUP-YU-KHIEUKH 9855 C055 # HANGUL SYLLABLE SSANGPIEUP-YU-THIEUTH 9856 C056 # HANGUL SYLLABLE SSANGPIEUP-YU-PHIEUPH 9857 C057 # HANGUL SYLLABLE SSANGPIEUP-YU-HIEUH 9858 C059 # HANGUL SYLLABLE SSANGPIEUP-EU-KIYEOK 9859 C05A # HANGUL SYLLABLE SSANGPIEUP-EU-SSANGKIYEOK 985A C05B # HANGUL SYLLABLE SSANGPIEUP-EU-KIYEOKSIOS 9861 C05D # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUNCIEUC 9862 C05E # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUNHIEUH 9863 C05F # HANGUL SYLLABLE SSANGPIEUP-EU-TIKEUT 9864 C061 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULKIYEOK 9865 C062 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULMIEUM 9866 C063 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULPIEUP 9867 C064 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULSIOS 9868 C065 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULTHIEUTH 9869 C066 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULPHIEUPH 986A C067 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULHIEUH 986B C06A # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUPSIOS 986C C06B # HANGUL SYLLABLE SSANGPIEUP-EU-SIOS 986D C06C # HANGUL SYLLABLE SSANGPIEUP-EU-SSANGSIOS 986E C06D # HANGUL SYLLABLE SSANGPIEUP-EU-IEUNG 986F C06E # HANGUL SYLLABLE SSANGPIEUP-EU-CIEUC 9870 C06F # HANGUL SYLLABLE SSANGPIEUP-EU-CHIEUCH 9871 C070 # HANGUL SYLLABLE SSANGPIEUP-EU-KHIEUKH 9872 C071 # HANGUL SYLLABLE SSANGPIEUP-EU-THIEUTH 9873 C072 # HANGUL SYLLABLE SSANGPIEUP-EU-PHIEUPH 9874 C073 # HANGUL SYLLABLE SSANGPIEUP-EU-HIEUH 9875 C074 # HANGUL SYLLABLE SSANGPIEUP-YI 9876 C075 # HANGUL SYLLABLE SSANGPIEUP-YI-KIYEOK 9877 C076 # HANGUL SYLLABLE SSANGPIEUP-YI-SSANGKIYEOK 9878 C077 # HANGUL SYLLABLE SSANGPIEUP-YI-KIYEOKSIOS 9879 C078 # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUN 987A C079 # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUNCIEUC 9881 C07A # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUNHIEUH 9882 C07B # HANGUL SYLLABLE SSANGPIEUP-YI-TIKEUT 9883 C07C # HANGUL SYLLABLE SSANGPIEUP-YI-RIEUL 9884 C07D # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULKIYEOK 9885 C07E # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULMIEUM 9886 C07F # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULPIEUP 9887 C080 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULSIOS 9888 C081 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULTHIEUTH 9889 C082 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULPHIEUPH 988A C083 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULHIEUH 988B C084 # HANGUL SYLLABLE SSANGPIEUP-YI-MIEUM 988C C085 # HANGUL SYLLABLE SSANGPIEUP-YI-PIEUP 988D C086 # HANGUL SYLLABLE SSANGPIEUP-YI-PIEUPSIOS 988E C087 # HANGUL SYLLABLE SSANGPIEUP-YI-SIOS 988F C088 # HANGUL SYLLABLE SSANGPIEUP-YI-SSANGSIOS 9890 C089 # HANGUL SYLLABLE SSANGPIEUP-YI-IEUNG 9891 C08A # HANGUL SYLLABLE SSANGPIEUP-YI-CIEUC 9892 C08B # HANGUL SYLLABLE SSANGPIEUP-YI-CHIEUCH 9893 C08C # HANGUL SYLLABLE SSANGPIEUP-YI-KHIEUKH 9894 C08D # HANGUL SYLLABLE SSANGPIEUP-YI-THIEUTH 9895 C08E # HANGUL SYLLABLE SSANGPIEUP-YI-PHIEUPH 9896 C08F # HANGUL SYLLABLE SSANGPIEUP-YI-HIEUH 9897 C092 # HANGUL SYLLABLE SSANGPIEUP-I-SSANGKIYEOK 9898 C093 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOKSIOS 9899 C095 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUNCIEUC 989A C096 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUNHIEUH 989B C097 # HANGUL SYLLABLE SSANGPIEUP-I-TIKEUT 989C C099 # HANGUL SYLLABLE SSANGPIEUP-I-RIEULKIYEOK 989D C09A # HANGUL SYLLABLE SSANGPIEUP-I-RIEULMIEUM 989E C09B # HANGUL SYLLABLE SSANGPIEUP-I-RIEULPIEUP 989F C09C # HANGUL SYLLABLE SSANGPIEUP-I-RIEULSIOS 98A0 C09D # HANGUL SYLLABLE SSANGPIEUP-I-RIEULTHIEUTH 98A1 C09E # HANGUL SYLLABLE SSANGPIEUP-I-RIEULPHIEUPH 98A2 C09F # HANGUL SYLLABLE SSANGPIEUP-I-RIEULHIEUH 98A3 C0A2 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUPSIOS 98A4 C0A4 # HANGUL SYLLABLE SSANGPIEUP-I-SSANGSIOS 98A5 C0A6 # HANGUL SYLLABLE SSANGPIEUP-I-CIEUC 98A6 C0A7 # HANGUL SYLLABLE SSANGPIEUP-I-CHIEUCH 98A7 C0A8 # HANGUL SYLLABLE SSANGPIEUP-I-KHIEUKH 98A8 C0A9 # HANGUL SYLLABLE SSANGPIEUP-I-THIEUTH 98A9 C0AA # HANGUL SYLLABLE SSANGPIEUP-I-PHIEUPH 98AA C0AB # HANGUL SYLLABLE SSANGPIEUP-I-HIEUH 98AB C0AE # HANGUL SYLLABLE SIOS-A-SSANGKIYEOK 98AC C0B1 # HANGUL SYLLABLE SIOS-A-NIEUNCIEUC 98AD C0B2 # HANGUL SYLLABLE SIOS-A-NIEUNHIEUH 98AE C0B7 # HANGUL SYLLABLE SIOS-A-RIEULPIEUP 98AF C0B8 # HANGUL SYLLABLE SIOS-A-RIEULSIOS 98B0 C0B9 # HANGUL SYLLABLE SIOS-A-RIEULTHIEUTH 98B1 C0BA # HANGUL SYLLABLE SIOS-A-RIEULPHIEUPH 98B2 C0BB # HANGUL SYLLABLE SIOS-A-RIEULHIEUH 98B3 C0BE # HANGUL SYLLABLE SIOS-A-PIEUPSIOS 98B4 C0C2 # HANGUL SYLLABLE SIOS-A-CIEUC 98B5 C0C3 # HANGUL SYLLABLE SIOS-A-CHIEUCH 98B6 C0C4 # HANGUL SYLLABLE SIOS-A-KHIEUKH 98B7 C0C6 # HANGUL SYLLABLE SIOS-A-PHIEUPH 98B8 C0C7 # HANGUL SYLLABLE SIOS-A-HIEUH 98B9 C0CA # HANGUL SYLLABLE SIOS-AE-SSANGKIYEOK 98BA C0CB # HANGUL SYLLABLE SIOS-AE-KIYEOKSIOS 98BB C0CD # HANGUL SYLLABLE SIOS-AE-NIEUNCIEUC 98BC C0CE # HANGUL SYLLABLE SIOS-AE-NIEUNHIEUH 98BD C0CF # HANGUL SYLLABLE SIOS-AE-TIKEUT 98BE C0D1 # HANGUL SYLLABLE SIOS-AE-RIEULKIYEOK 98BF C0D2 # HANGUL SYLLABLE SIOS-AE-RIEULMIEUM 98C0 C0D3 # HANGUL SYLLABLE SIOS-AE-RIEULPIEUP 98C1 C0D4 # HANGUL SYLLABLE SIOS-AE-RIEULSIOS 98C2 C0D5 # HANGUL SYLLABLE SIOS-AE-RIEULTHIEUTH 98C3 C0D6 # HANGUL SYLLABLE SIOS-AE-RIEULPHIEUPH 98C4 C0D7 # HANGUL SYLLABLE SIOS-AE-RIEULHIEUH 98C5 C0DA # HANGUL SYLLABLE SIOS-AE-PIEUPSIOS 98C6 C0DE # HANGUL SYLLABLE SIOS-AE-CIEUC 98C7 C0DF # HANGUL SYLLABLE SIOS-AE-CHIEUCH 98C8 C0E0 # HANGUL SYLLABLE SIOS-AE-KHIEUKH 98C9 C0E1 # HANGUL SYLLABLE SIOS-AE-THIEUTH 98CA C0E2 # HANGUL SYLLABLE SIOS-AE-PHIEUPH 98CB C0E3 # HANGUL SYLLABLE SIOS-AE-HIEUH 98CC C0E6 # HANGUL SYLLABLE SIOS-YA-SSANGKIYEOK 98CD C0E7 # HANGUL SYLLABLE SIOS-YA-KIYEOKSIOS 98CE C0E9 # HANGUL SYLLABLE SIOS-YA-NIEUNCIEUC 98CF C0EA # HANGUL SYLLABLE SIOS-YA-NIEUNHIEUH 98D0 C0EB # HANGUL SYLLABLE SIOS-YA-TIKEUT 98D1 C0ED # HANGUL SYLLABLE SIOS-YA-RIEULKIYEOK 98D2 C0EE # HANGUL SYLLABLE SIOS-YA-RIEULMIEUM 98D3 C0EF # HANGUL SYLLABLE SIOS-YA-RIEULPIEUP 98D4 C0F0 # HANGUL SYLLABLE SIOS-YA-RIEULSIOS 98D5 C0F1 # HANGUL SYLLABLE SIOS-YA-RIEULTHIEUTH 98D6 C0F2 # HANGUL SYLLABLE SIOS-YA-RIEULPHIEUPH 98D7 C0F3 # HANGUL SYLLABLE SIOS-YA-RIEULHIEUH 98D8 C0F6 # HANGUL SYLLABLE SIOS-YA-PIEUPSIOS 98D9 C0F8 # HANGUL SYLLABLE SIOS-YA-SSANGSIOS 98DA C0FA # HANGUL SYLLABLE SIOS-YA-CIEUC 98DB C0FB # HANGUL SYLLABLE SIOS-YA-CHIEUCH 98DC C0FC # HANGUL SYLLABLE SIOS-YA-KHIEUKH 98DD C0FD # HANGUL SYLLABLE SIOS-YA-THIEUTH 98DE C0FE # HANGUL SYLLABLE SIOS-YA-PHIEUPH 98DF C0FF # HANGUL SYLLABLE SIOS-YA-HIEUH 98E0 C101 # HANGUL SYLLABLE SIOS-YAE-KIYEOK 98E1 C102 # HANGUL SYLLABLE SIOS-YAE-SSANGKIYEOK 98E2 C103 # HANGUL SYLLABLE SIOS-YAE-KIYEOKSIOS 98E3 C105 # HANGUL SYLLABLE SIOS-YAE-NIEUNCIEUC 98E4 C106 # HANGUL SYLLABLE SIOS-YAE-NIEUNHIEUH 98E5 C107 # HANGUL SYLLABLE SIOS-YAE-TIKEUT 98E6 C109 # HANGUL SYLLABLE SIOS-YAE-RIEULKIYEOK 98E7 C10A # HANGUL SYLLABLE SIOS-YAE-RIEULMIEUM 98E8 C10B # HANGUL SYLLABLE SIOS-YAE-RIEULPIEUP 98E9 C10C # HANGUL SYLLABLE SIOS-YAE-RIEULSIOS 98EA C10D # HANGUL SYLLABLE SIOS-YAE-RIEULTHIEUTH 98EB C10E # HANGUL SYLLABLE SIOS-YAE-RIEULPHIEUPH 98EC C10F # HANGUL SYLLABLE SIOS-YAE-RIEULHIEUH 98ED C111 # HANGUL SYLLABLE SIOS-YAE-PIEUP 98EE C112 # HANGUL SYLLABLE SIOS-YAE-PIEUPSIOS 98EF C113 # HANGUL SYLLABLE SIOS-YAE-SIOS 98F0 C114 # HANGUL SYLLABLE SIOS-YAE-SSANGSIOS 98F1 C116 # HANGUL SYLLABLE SIOS-YAE-CIEUC 98F2 C117 # HANGUL SYLLABLE SIOS-YAE-CHIEUCH 98F3 C118 # HANGUL SYLLABLE SIOS-YAE-KHIEUKH 98F4 C119 # HANGUL SYLLABLE SIOS-YAE-THIEUTH 98F5 C11A # HANGUL SYLLABLE SIOS-YAE-PHIEUPH 98F6 C11B # HANGUL SYLLABLE SIOS-YAE-HIEUH 98F7 C121 # HANGUL SYLLABLE SIOS-EO-NIEUNCIEUC 98F8 C122 # HANGUL SYLLABLE SIOS-EO-NIEUNHIEUH 98F9 C125 # HANGUL SYLLABLE SIOS-EO-RIEULKIYEOK 98FA C128 # HANGUL SYLLABLE SIOS-EO-RIEULSIOS 98FB C129 # HANGUL SYLLABLE SIOS-EO-RIEULTHIEUTH 98FC C12A # HANGUL SYLLABLE SIOS-EO-RIEULPHIEUPH 98FD C12B # HANGUL SYLLABLE SIOS-EO-RIEULHIEUH 98FE C12E # HANGUL SYLLABLE SIOS-EO-PIEUPSIOS 9941 C132 # HANGUL SYLLABLE SIOS-EO-CIEUC 9942 C133 # HANGUL SYLLABLE SIOS-EO-CHIEUCH 9943 C134 # HANGUL SYLLABLE SIOS-EO-KHIEUKH 9944 C135 # HANGUL SYLLABLE SIOS-EO-THIEUTH 9945 C137 # HANGUL SYLLABLE SIOS-EO-HIEUH 9946 C13A # HANGUL SYLLABLE SIOS-E-SSANGKIYEOK 9947 C13B # HANGUL SYLLABLE SIOS-E-KIYEOKSIOS 9948 C13D # HANGUL SYLLABLE SIOS-E-NIEUNCIEUC 9949 C13E # HANGUL SYLLABLE SIOS-E-NIEUNHIEUH 994A C13F # HANGUL SYLLABLE SIOS-E-TIKEUT 994B C141 # HANGUL SYLLABLE SIOS-E-RIEULKIYEOK 994C C142 # HANGUL SYLLABLE SIOS-E-RIEULMIEUM 994D C143 # HANGUL SYLLABLE SIOS-E-RIEULPIEUP 994E C144 # HANGUL SYLLABLE SIOS-E-RIEULSIOS 994F C145 # HANGUL SYLLABLE SIOS-E-RIEULTHIEUTH 9950 C146 # HANGUL SYLLABLE SIOS-E-RIEULPHIEUPH 9951 C147 # HANGUL SYLLABLE SIOS-E-RIEULHIEUH 9952 C14A # HANGUL SYLLABLE SIOS-E-PIEUPSIOS 9953 C14E # HANGUL SYLLABLE SIOS-E-CIEUC 9954 C14F # HANGUL SYLLABLE SIOS-E-CHIEUCH 9955 C150 # HANGUL SYLLABLE SIOS-E-KHIEUKH 9956 C151 # HANGUL SYLLABLE SIOS-E-THIEUTH 9957 C152 # HANGUL SYLLABLE SIOS-E-PHIEUPH 9958 C153 # HANGUL SYLLABLE SIOS-E-HIEUH 9959 C156 # HANGUL SYLLABLE SIOS-YEO-SSANGKIYEOK 995A C157 # HANGUL SYLLABLE SIOS-YEO-KIYEOKSIOS 9961 C159 # HANGUL SYLLABLE SIOS-YEO-NIEUNCIEUC 9962 C15A # HANGUL SYLLABLE SIOS-YEO-NIEUNHIEUH 9963 C15B # HANGUL SYLLABLE SIOS-YEO-TIKEUT 9964 C15D # HANGUL SYLLABLE SIOS-YEO-RIEULKIYEOK 9965 C15E # HANGUL SYLLABLE SIOS-YEO-RIEULMIEUM 9966 C15F # HANGUL SYLLABLE SIOS-YEO-RIEULPIEUP 9967 C160 # HANGUL SYLLABLE SIOS-YEO-RIEULSIOS 9968 C161 # HANGUL SYLLABLE SIOS-YEO-RIEULTHIEUTH 9969 C162 # HANGUL SYLLABLE SIOS-YEO-RIEULPHIEUPH 996A C163 # HANGUL SYLLABLE SIOS-YEO-RIEULHIEUH 996B C166 # HANGUL SYLLABLE SIOS-YEO-PIEUPSIOS 996C C16A # HANGUL SYLLABLE SIOS-YEO-CIEUC 996D C16B # HANGUL SYLLABLE SIOS-YEO-CHIEUCH 996E C16C # HANGUL SYLLABLE SIOS-YEO-KHIEUKH 996F C16D # HANGUL SYLLABLE SIOS-YEO-THIEUTH 9970 C16E # HANGUL SYLLABLE SIOS-YEO-PHIEUPH 9971 C16F # HANGUL SYLLABLE SIOS-YEO-HIEUH 9972 C171 # HANGUL SYLLABLE SIOS-YE-KIYEOK 9973 C172 # HANGUL SYLLABLE SIOS-YE-SSANGKIYEOK 9974 C173 # HANGUL SYLLABLE SIOS-YE-KIYEOKSIOS 9975 C175 # HANGUL SYLLABLE SIOS-YE-NIEUNCIEUC 9976 C176 # HANGUL SYLLABLE SIOS-YE-NIEUNHIEUH 9977 C177 # HANGUL SYLLABLE SIOS-YE-TIKEUT 9978 C179 # HANGUL SYLLABLE SIOS-YE-RIEULKIYEOK 9979 C17A # HANGUL SYLLABLE SIOS-YE-RIEULMIEUM 997A C17B # HANGUL SYLLABLE SIOS-YE-RIEULPIEUP 9981 C17C # HANGUL SYLLABLE SIOS-YE-RIEULSIOS 9982 C17D # HANGUL SYLLABLE SIOS-YE-RIEULTHIEUTH 9983 C17E # HANGUL SYLLABLE SIOS-YE-RIEULPHIEUPH 9984 C17F # HANGUL SYLLABLE SIOS-YE-RIEULHIEUH 9985 C180 # HANGUL SYLLABLE SIOS-YE-MIEUM 9986 C181 # HANGUL SYLLABLE SIOS-YE-PIEUP 9987 C182 # HANGUL SYLLABLE SIOS-YE-PIEUPSIOS 9988 C183 # HANGUL SYLLABLE SIOS-YE-SIOS 9989 C184 # HANGUL SYLLABLE SIOS-YE-SSANGSIOS 998A C186 # HANGUL SYLLABLE SIOS-YE-CIEUC 998B C187 # HANGUL SYLLABLE SIOS-YE-CHIEUCH 998C C188 # HANGUL SYLLABLE SIOS-YE-KHIEUKH 998D C189 # HANGUL SYLLABLE SIOS-YE-THIEUTH 998E C18A # HANGUL SYLLABLE SIOS-YE-PHIEUPH 998F C18B # HANGUL SYLLABLE SIOS-YE-HIEUH 9990 C18F # HANGUL SYLLABLE SIOS-O-KIYEOKSIOS 9991 C191 # HANGUL SYLLABLE SIOS-O-NIEUNCIEUC 9992 C192 # HANGUL SYLLABLE SIOS-O-NIEUNHIEUH 9993 C193 # HANGUL SYLLABLE SIOS-O-TIKEUT 9994 C195 # HANGUL SYLLABLE SIOS-O-RIEULKIYEOK 9995 C197 # HANGUL SYLLABLE SIOS-O-RIEULPIEUP 9996 C198 # HANGUL SYLLABLE SIOS-O-RIEULSIOS 9997 C199 # HANGUL SYLLABLE SIOS-O-RIEULTHIEUTH 9998 C19A # HANGUL SYLLABLE SIOS-O-RIEULPHIEUPH 9999 C19B # HANGUL SYLLABLE SIOS-O-RIEULHIEUH 999A C19E # HANGUL SYLLABLE SIOS-O-PIEUPSIOS 999B C1A0 # HANGUL SYLLABLE SIOS-O-SSANGSIOS 999C C1A2 # HANGUL SYLLABLE SIOS-O-CIEUC 999D C1A3 # HANGUL SYLLABLE SIOS-O-CHIEUCH 999E C1A4 # HANGUL SYLLABLE SIOS-O-KHIEUKH 999F C1A6 # HANGUL SYLLABLE SIOS-O-PHIEUPH 99A0 C1A7 # HANGUL SYLLABLE SIOS-O-HIEUH 99A1 C1AA # HANGUL SYLLABLE SIOS-WA-SSANGKIYEOK 99A2 C1AB # HANGUL SYLLABLE SIOS-WA-KIYEOKSIOS 99A3 C1AD # HANGUL SYLLABLE SIOS-WA-NIEUNCIEUC 99A4 C1AE # HANGUL SYLLABLE SIOS-WA-NIEUNHIEUH 99A5 C1AF # HANGUL SYLLABLE SIOS-WA-TIKEUT 99A6 C1B1 # HANGUL SYLLABLE SIOS-WA-RIEULKIYEOK 99A7 C1B2 # HANGUL SYLLABLE SIOS-WA-RIEULMIEUM 99A8 C1B3 # HANGUL SYLLABLE SIOS-WA-RIEULPIEUP 99A9 C1B4 # HANGUL SYLLABLE SIOS-WA-RIEULSIOS 99AA C1B5 # HANGUL SYLLABLE SIOS-WA-RIEULTHIEUTH 99AB C1B6 # HANGUL SYLLABLE SIOS-WA-RIEULPHIEUPH 99AC C1B7 # HANGUL SYLLABLE SIOS-WA-RIEULHIEUH 99AD C1B8 # HANGUL SYLLABLE SIOS-WA-MIEUM 99AE C1B9 # HANGUL SYLLABLE SIOS-WA-PIEUP 99AF C1BA # HANGUL SYLLABLE SIOS-WA-PIEUPSIOS 99B0 C1BB # HANGUL SYLLABLE SIOS-WA-SIOS 99B1 C1BC # HANGUL SYLLABLE SIOS-WA-SSANGSIOS 99B2 C1BE # HANGUL SYLLABLE SIOS-WA-CIEUC 99B3 C1BF # HANGUL SYLLABLE SIOS-WA-CHIEUCH 99B4 C1C0 # HANGUL SYLLABLE SIOS-WA-KHIEUKH 99B5 C1C1 # HANGUL SYLLABLE SIOS-WA-THIEUTH 99B6 C1C2 # HANGUL SYLLABLE SIOS-WA-PHIEUPH 99B7 C1C3 # HANGUL SYLLABLE SIOS-WA-HIEUH 99B8 C1C5 # HANGUL SYLLABLE SIOS-WAE-KIYEOK 99B9 C1C6 # HANGUL SYLLABLE SIOS-WAE-SSANGKIYEOK 99BA C1C7 # HANGUL SYLLABLE SIOS-WAE-KIYEOKSIOS 99BB C1C9 # HANGUL SYLLABLE SIOS-WAE-NIEUNCIEUC 99BC C1CA # HANGUL SYLLABLE SIOS-WAE-NIEUNHIEUH 99BD C1CB # HANGUL SYLLABLE SIOS-WAE-TIKEUT 99BE C1CD # HANGUL SYLLABLE SIOS-WAE-RIEULKIYEOK 99BF C1CE # HANGUL SYLLABLE SIOS-WAE-RIEULMIEUM 99C0 C1CF # HANGUL SYLLABLE SIOS-WAE-RIEULPIEUP 99C1 C1D0 # HANGUL SYLLABLE SIOS-WAE-RIEULSIOS 99C2 C1D1 # HANGUL SYLLABLE SIOS-WAE-RIEULTHIEUTH 99C3 C1D2 # HANGUL SYLLABLE SIOS-WAE-RIEULPHIEUPH 99C4 C1D3 # HANGUL SYLLABLE SIOS-WAE-RIEULHIEUH 99C5 C1D5 # HANGUL SYLLABLE SIOS-WAE-PIEUP 99C6 C1D6 # HANGUL SYLLABLE SIOS-WAE-PIEUPSIOS 99C7 C1D9 # HANGUL SYLLABLE SIOS-WAE-IEUNG 99C8 C1DA # HANGUL SYLLABLE SIOS-WAE-CIEUC 99C9 C1DB # HANGUL SYLLABLE SIOS-WAE-CHIEUCH 99CA C1DC # HANGUL SYLLABLE SIOS-WAE-KHIEUKH 99CB C1DD # HANGUL SYLLABLE SIOS-WAE-THIEUTH 99CC C1DE # HANGUL SYLLABLE SIOS-WAE-PHIEUPH 99CD C1DF # HANGUL SYLLABLE SIOS-WAE-HIEUH 99CE C1E1 # HANGUL SYLLABLE SIOS-OE-KIYEOK 99CF C1E2 # HANGUL SYLLABLE SIOS-OE-SSANGKIYEOK 99D0 C1E3 # HANGUL SYLLABLE SIOS-OE-KIYEOKSIOS 99D1 C1E5 # HANGUL SYLLABLE SIOS-OE-NIEUNCIEUC 99D2 C1E6 # HANGUL SYLLABLE SIOS-OE-NIEUNHIEUH 99D3 C1E7 # HANGUL SYLLABLE SIOS-OE-TIKEUT 99D4 C1E9 # HANGUL SYLLABLE SIOS-OE-RIEULKIYEOK 99D5 C1EA # HANGUL SYLLABLE SIOS-OE-RIEULMIEUM 99D6 C1EB # HANGUL SYLLABLE SIOS-OE-RIEULPIEUP 99D7 C1EC # HANGUL SYLLABLE SIOS-OE-RIEULSIOS 99D8 C1ED # HANGUL SYLLABLE SIOS-OE-RIEULTHIEUTH 99D9 C1EE # HANGUL SYLLABLE SIOS-OE-RIEULPHIEUPH 99DA C1EF # HANGUL SYLLABLE SIOS-OE-RIEULHIEUH 99DB C1F2 # HANGUL SYLLABLE SIOS-OE-PIEUPSIOS 99DC C1F4 # HANGUL SYLLABLE SIOS-OE-SSANGSIOS 99DD C1F5 # HANGUL SYLLABLE SIOS-OE-IEUNG 99DE C1F6 # HANGUL SYLLABLE SIOS-OE-CIEUC 99DF C1F7 # HANGUL SYLLABLE SIOS-OE-CHIEUCH 99E0 C1F8 # HANGUL SYLLABLE SIOS-OE-KHIEUKH 99E1 C1F9 # HANGUL SYLLABLE SIOS-OE-THIEUTH 99E2 C1FA # HANGUL SYLLABLE SIOS-OE-PHIEUPH 99E3 C1FB # HANGUL SYLLABLE SIOS-OE-HIEUH 99E4 C1FE # HANGUL SYLLABLE SIOS-YO-SSANGKIYEOK 99E5 C1FF # HANGUL SYLLABLE SIOS-YO-KIYEOKSIOS 99E6 C201 # HANGUL SYLLABLE SIOS-YO-NIEUNCIEUC 99E7 C202 # HANGUL SYLLABLE SIOS-YO-NIEUNHIEUH 99E8 C203 # HANGUL SYLLABLE SIOS-YO-TIKEUT 99E9 C205 # HANGUL SYLLABLE SIOS-YO-RIEULKIYEOK 99EA C206 # HANGUL SYLLABLE SIOS-YO-RIEULMIEUM 99EB C207 # HANGUL SYLLABLE SIOS-YO-RIEULPIEUP 99EC C208 # HANGUL SYLLABLE SIOS-YO-RIEULSIOS 99ED C209 # HANGUL SYLLABLE SIOS-YO-RIEULTHIEUTH 99EE C20A # HANGUL SYLLABLE SIOS-YO-RIEULPHIEUPH 99EF C20B # HANGUL SYLLABLE SIOS-YO-RIEULHIEUH 99F0 C20E # HANGUL SYLLABLE SIOS-YO-PIEUPSIOS 99F1 C210 # HANGUL SYLLABLE SIOS-YO-SSANGSIOS 99F2 C212 # HANGUL SYLLABLE SIOS-YO-CIEUC 99F3 C213 # HANGUL SYLLABLE SIOS-YO-CHIEUCH 99F4 C214 # HANGUL SYLLABLE SIOS-YO-KHIEUKH 99F5 C215 # HANGUL SYLLABLE SIOS-YO-THIEUTH 99F6 C216 # HANGUL SYLLABLE SIOS-YO-PHIEUPH 99F7 C217 # HANGUL SYLLABLE SIOS-YO-HIEUH 99F8 C21A # HANGUL SYLLABLE SIOS-U-SSANGKIYEOK 99F9 C21B # HANGUL SYLLABLE SIOS-U-KIYEOKSIOS 99FA C21D # HANGUL SYLLABLE SIOS-U-NIEUNCIEUC 99FB C21E # HANGUL SYLLABLE SIOS-U-NIEUNHIEUH 99FC C221 # HANGUL SYLLABLE SIOS-U-RIEULKIYEOK 99FD C222 # HANGUL SYLLABLE SIOS-U-RIEULMIEUM 99FE C223 # HANGUL SYLLABLE SIOS-U-RIEULPIEUP 9A41 C224 # HANGUL SYLLABLE SIOS-U-RIEULSIOS 9A42 C225 # HANGUL SYLLABLE SIOS-U-RIEULTHIEUTH 9A43 C226 # HANGUL SYLLABLE SIOS-U-RIEULPHIEUPH 9A44 C227 # HANGUL SYLLABLE SIOS-U-RIEULHIEUH 9A45 C22A # HANGUL SYLLABLE SIOS-U-PIEUPSIOS 9A46 C22C # HANGUL SYLLABLE SIOS-U-SSANGSIOS 9A47 C22E # HANGUL SYLLABLE SIOS-U-CIEUC 9A48 C230 # HANGUL SYLLABLE SIOS-U-KHIEUKH 9A49 C233 # HANGUL SYLLABLE SIOS-U-HIEUH 9A4A C235 # HANGUL SYLLABLE SIOS-WEO-KIYEOK 9A4B C236 # HANGUL SYLLABLE SIOS-WEO-SSANGKIYEOK 9A4C C237 # HANGUL SYLLABLE SIOS-WEO-KIYEOKSIOS 9A4D C238 # HANGUL SYLLABLE SIOS-WEO-NIEUN 9A4E C239 # HANGUL SYLLABLE SIOS-WEO-NIEUNCIEUC 9A4F C23A # HANGUL SYLLABLE SIOS-WEO-NIEUNHIEUH 9A50 C23B # HANGUL SYLLABLE SIOS-WEO-TIKEUT 9A51 C23C # HANGUL SYLLABLE SIOS-WEO-RIEUL 9A52 C23D # HANGUL SYLLABLE SIOS-WEO-RIEULKIYEOK 9A53 C23E # HANGUL SYLLABLE SIOS-WEO-RIEULMIEUM 9A54 C23F # HANGUL SYLLABLE SIOS-WEO-RIEULPIEUP 9A55 C240 # HANGUL SYLLABLE SIOS-WEO-RIEULSIOS 9A56 C241 # HANGUL SYLLABLE SIOS-WEO-RIEULTHIEUTH 9A57 C242 # HANGUL SYLLABLE SIOS-WEO-RIEULPHIEUPH 9A58 C243 # HANGUL SYLLABLE SIOS-WEO-RIEULHIEUH 9A59 C244 # HANGUL SYLLABLE SIOS-WEO-MIEUM 9A5A C245 # HANGUL SYLLABLE SIOS-WEO-PIEUP 9A61 C246 # HANGUL SYLLABLE SIOS-WEO-PIEUPSIOS 9A62 C247 # HANGUL SYLLABLE SIOS-WEO-SIOS 9A63 C249 # HANGUL SYLLABLE SIOS-WEO-IEUNG 9A64 C24A # HANGUL SYLLABLE SIOS-WEO-CIEUC 9A65 C24B # HANGUL SYLLABLE SIOS-WEO-CHIEUCH 9A66 C24C # HANGUL SYLLABLE SIOS-WEO-KHIEUKH 9A67 C24D # HANGUL SYLLABLE SIOS-WEO-THIEUTH 9A68 C24E # HANGUL SYLLABLE SIOS-WEO-PHIEUPH 9A69 C24F # HANGUL SYLLABLE SIOS-WEO-HIEUH 9A6A C252 # HANGUL SYLLABLE SIOS-WE-SSANGKIYEOK 9A6B C253 # HANGUL SYLLABLE SIOS-WE-KIYEOKSIOS 9A6C C255 # HANGUL SYLLABLE SIOS-WE-NIEUNCIEUC 9A6D C256 # HANGUL SYLLABLE SIOS-WE-NIEUNHIEUH 9A6E C257 # HANGUL SYLLABLE SIOS-WE-TIKEUT 9A6F C259 # HANGUL SYLLABLE SIOS-WE-RIEULKIYEOK 9A70 C25A # HANGUL SYLLABLE SIOS-WE-RIEULMIEUM 9A71 C25B # HANGUL SYLLABLE SIOS-WE-RIEULPIEUP 9A72 C25C # HANGUL SYLLABLE SIOS-WE-RIEULSIOS 9A73 C25D # HANGUL SYLLABLE SIOS-WE-RIEULTHIEUTH 9A74 C25E # HANGUL SYLLABLE SIOS-WE-RIEULPHIEUPH 9A75 C25F # HANGUL SYLLABLE SIOS-WE-RIEULHIEUH 9A76 C261 # HANGUL SYLLABLE SIOS-WE-PIEUP 9A77 C262 # HANGUL SYLLABLE SIOS-WE-PIEUPSIOS 9A78 C263 # HANGUL SYLLABLE SIOS-WE-SIOS 9A79 C264 # HANGUL SYLLABLE SIOS-WE-SSANGSIOS 9A7A C266 # HANGUL SYLLABLE SIOS-WE-CIEUC 9A81 C267 # HANGUL SYLLABLE SIOS-WE-CHIEUCH 9A82 C268 # HANGUL SYLLABLE SIOS-WE-KHIEUKH 9A83 C269 # HANGUL SYLLABLE SIOS-WE-THIEUTH 9A84 C26A # HANGUL SYLLABLE SIOS-WE-PHIEUPH 9A85 C26B # HANGUL SYLLABLE SIOS-WE-HIEUH 9A86 C26E # HANGUL SYLLABLE SIOS-WI-SSANGKIYEOK 9A87 C26F # HANGUL SYLLABLE SIOS-WI-KIYEOKSIOS 9A88 C271 # HANGUL SYLLABLE SIOS-WI-NIEUNCIEUC 9A89 C272 # HANGUL SYLLABLE SIOS-WI-NIEUNHIEUH 9A8A C273 # HANGUL SYLLABLE SIOS-WI-TIKEUT 9A8B C275 # HANGUL SYLLABLE SIOS-WI-RIEULKIYEOK 9A8C C276 # HANGUL SYLLABLE SIOS-WI-RIEULMIEUM 9A8D C277 # HANGUL SYLLABLE SIOS-WI-RIEULPIEUP 9A8E C278 # HANGUL SYLLABLE SIOS-WI-RIEULSIOS 9A8F C279 # HANGUL SYLLABLE SIOS-WI-RIEULTHIEUTH 9A90 C27A # HANGUL SYLLABLE SIOS-WI-RIEULPHIEUPH 9A91 C27B # HANGUL SYLLABLE SIOS-WI-RIEULHIEUH 9A92 C27E # HANGUL SYLLABLE SIOS-WI-PIEUPSIOS 9A93 C280 # HANGUL SYLLABLE SIOS-WI-SSANGSIOS 9A94 C282 # HANGUL SYLLABLE SIOS-WI-CIEUC 9A95 C283 # HANGUL SYLLABLE SIOS-WI-CHIEUCH 9A96 C284 # HANGUL SYLLABLE SIOS-WI-KHIEUKH 9A97 C285 # HANGUL SYLLABLE SIOS-WI-THIEUTH 9A98 C286 # HANGUL SYLLABLE SIOS-WI-PHIEUPH 9A99 C287 # HANGUL SYLLABLE SIOS-WI-HIEUH 9A9A C28A # HANGUL SYLLABLE SIOS-YU-SSANGKIYEOK 9A9B C28B # HANGUL SYLLABLE SIOS-YU-KIYEOKSIOS 9A9C C28C # HANGUL SYLLABLE SIOS-YU-NIEUN 9A9D C28D # HANGUL SYLLABLE SIOS-YU-NIEUNCIEUC 9A9E C28E # HANGUL SYLLABLE SIOS-YU-NIEUNHIEUH 9A9F C28F # HANGUL SYLLABLE SIOS-YU-TIKEUT 9AA0 C291 # HANGUL SYLLABLE SIOS-YU-RIEULKIYEOK 9AA1 C292 # HANGUL SYLLABLE SIOS-YU-RIEULMIEUM 9AA2 C293 # HANGUL SYLLABLE SIOS-YU-RIEULPIEUP 9AA3 C294 # HANGUL SYLLABLE SIOS-YU-RIEULSIOS 9AA4 C295 # HANGUL SYLLABLE SIOS-YU-RIEULTHIEUTH 9AA5 C296 # HANGUL SYLLABLE SIOS-YU-RIEULPHIEUPH 9AA6 C297 # HANGUL SYLLABLE SIOS-YU-RIEULHIEUH 9AA7 C299 # HANGUL SYLLABLE SIOS-YU-PIEUP 9AA8 C29A # HANGUL SYLLABLE SIOS-YU-PIEUPSIOS 9AA9 C29C # HANGUL SYLLABLE SIOS-YU-SSANGSIOS 9AAA C29E # HANGUL SYLLABLE SIOS-YU-CIEUC 9AAB C29F # HANGUL SYLLABLE SIOS-YU-CHIEUCH 9AAC C2A0 # HANGUL SYLLABLE SIOS-YU-KHIEUKH 9AAD C2A1 # HANGUL SYLLABLE SIOS-YU-THIEUTH 9AAE C2A2 # HANGUL SYLLABLE SIOS-YU-PHIEUPH 9AAF C2A3 # HANGUL SYLLABLE SIOS-YU-HIEUH 9AB0 C2A6 # HANGUL SYLLABLE SIOS-EU-SSANGKIYEOK 9AB1 C2A7 # HANGUL SYLLABLE SIOS-EU-KIYEOKSIOS 9AB2 C2A9 # HANGUL SYLLABLE SIOS-EU-NIEUNCIEUC 9AB3 C2AA # HANGUL SYLLABLE SIOS-EU-NIEUNHIEUH 9AB4 C2AB # HANGUL SYLLABLE SIOS-EU-TIKEUT 9AB5 C2AE # HANGUL SYLLABLE SIOS-EU-RIEULMIEUM 9AB6 C2AF # HANGUL SYLLABLE SIOS-EU-RIEULPIEUP 9AB7 C2B0 # HANGUL SYLLABLE SIOS-EU-RIEULSIOS 9AB8 C2B1 # HANGUL SYLLABLE SIOS-EU-RIEULTHIEUTH 9AB9 C2B2 # HANGUL SYLLABLE SIOS-EU-RIEULPHIEUPH 9ABA C2B3 # HANGUL SYLLABLE SIOS-EU-RIEULHIEUH 9ABB C2B6 # HANGUL SYLLABLE SIOS-EU-PIEUPSIOS 9ABC C2B8 # HANGUL SYLLABLE SIOS-EU-SSANGSIOS 9ABD C2BA # HANGUL SYLLABLE SIOS-EU-CIEUC 9ABE C2BB # HANGUL SYLLABLE SIOS-EU-CHIEUCH 9ABF C2BC # HANGUL SYLLABLE SIOS-EU-KHIEUKH 9AC0 C2BD # HANGUL SYLLABLE SIOS-EU-THIEUTH 9AC1 C2BE # HANGUL SYLLABLE SIOS-EU-PHIEUPH 9AC2 C2BF # HANGUL SYLLABLE SIOS-EU-HIEUH 9AC3 C2C0 # HANGUL SYLLABLE SIOS-YI 9AC4 C2C1 # HANGUL SYLLABLE SIOS-YI-KIYEOK 9AC5 C2C2 # HANGUL SYLLABLE SIOS-YI-SSANGKIYEOK 9AC6 C2C3 # HANGUL SYLLABLE SIOS-YI-KIYEOKSIOS 9AC7 C2C4 # HANGUL SYLLABLE SIOS-YI-NIEUN 9AC8 C2C5 # HANGUL SYLLABLE SIOS-YI-NIEUNCIEUC 9AC9 C2C6 # HANGUL SYLLABLE SIOS-YI-NIEUNHIEUH 9ACA C2C7 # HANGUL SYLLABLE SIOS-YI-TIKEUT 9ACB C2C8 # HANGUL SYLLABLE SIOS-YI-RIEUL 9ACC C2C9 # HANGUL SYLLABLE SIOS-YI-RIEULKIYEOK 9ACD C2CA # HANGUL SYLLABLE SIOS-YI-RIEULMIEUM 9ACE C2CB # HANGUL SYLLABLE SIOS-YI-RIEULPIEUP 9ACF C2CC # HANGUL SYLLABLE SIOS-YI-RIEULSIOS 9AD0 C2CD # HANGUL SYLLABLE SIOS-YI-RIEULTHIEUTH 9AD1 C2CE # HANGUL SYLLABLE SIOS-YI-RIEULPHIEUPH 9AD2 C2CF # HANGUL SYLLABLE SIOS-YI-RIEULHIEUH 9AD3 C2D0 # HANGUL SYLLABLE SIOS-YI-MIEUM 9AD4 C2D1 # HANGUL SYLLABLE SIOS-YI-PIEUP 9AD5 C2D2 # HANGUL SYLLABLE SIOS-YI-PIEUPSIOS 9AD6 C2D3 # HANGUL SYLLABLE SIOS-YI-SIOS 9AD7 C2D4 # HANGUL SYLLABLE SIOS-YI-SSANGSIOS 9AD8 C2D5 # HANGUL SYLLABLE SIOS-YI-IEUNG 9AD9 C2D6 # HANGUL SYLLABLE SIOS-YI-CIEUC 9ADA C2D7 # HANGUL SYLLABLE SIOS-YI-CHIEUCH 9ADB C2D8 # HANGUL SYLLABLE SIOS-YI-KHIEUKH 9ADC C2D9 # HANGUL SYLLABLE SIOS-YI-THIEUTH 9ADD C2DA # HANGUL SYLLABLE SIOS-YI-PHIEUPH 9ADE C2DB # HANGUL SYLLABLE SIOS-YI-HIEUH 9ADF C2DE # HANGUL SYLLABLE SIOS-I-SSANGKIYEOK 9AE0 C2DF # HANGUL SYLLABLE SIOS-I-KIYEOKSIOS 9AE1 C2E1 # HANGUL SYLLABLE SIOS-I-NIEUNCIEUC 9AE2 C2E2 # HANGUL SYLLABLE SIOS-I-NIEUNHIEUH 9AE3 C2E5 # HANGUL SYLLABLE SIOS-I-RIEULKIYEOK 9AE4 C2E6 # HANGUL SYLLABLE SIOS-I-RIEULMIEUM 9AE5 C2E7 # HANGUL SYLLABLE SIOS-I-RIEULPIEUP 9AE6 C2E8 # HANGUL SYLLABLE SIOS-I-RIEULSIOS 9AE7 C2E9 # HANGUL SYLLABLE SIOS-I-RIEULTHIEUTH 9AE8 C2EA # HANGUL SYLLABLE SIOS-I-RIEULPHIEUPH 9AE9 C2EE # HANGUL SYLLABLE SIOS-I-PIEUPSIOS 9AEA C2F0 # HANGUL SYLLABLE SIOS-I-SSANGSIOS 9AEB C2F2 # HANGUL SYLLABLE SIOS-I-CIEUC 9AEC C2F3 # HANGUL SYLLABLE SIOS-I-CHIEUCH 9AED C2F4 # HANGUL SYLLABLE SIOS-I-KHIEUKH 9AEE C2F5 # HANGUL SYLLABLE SIOS-I-THIEUTH 9AEF C2F7 # HANGUL SYLLABLE SIOS-I-HIEUH 9AF0 C2FA # HANGUL SYLLABLE SSANGSIOS-A-SSANGKIYEOK 9AF1 C2FD # HANGUL SYLLABLE SSANGSIOS-A-NIEUNCIEUC 9AF2 C2FE # HANGUL SYLLABLE SSANGSIOS-A-NIEUNHIEUH 9AF3 C2FF # HANGUL SYLLABLE SSANGSIOS-A-TIKEUT 9AF4 C301 # HANGUL SYLLABLE SSANGSIOS-A-RIEULKIYEOK 9AF5 C302 # HANGUL SYLLABLE SSANGSIOS-A-RIEULMIEUM 9AF6 C303 # HANGUL SYLLABLE SSANGSIOS-A-RIEULPIEUP 9AF7 C304 # HANGUL SYLLABLE SSANGSIOS-A-RIEULSIOS 9AF8 C305 # HANGUL SYLLABLE SSANGSIOS-A-RIEULTHIEUTH 9AF9 C306 # HANGUL SYLLABLE SSANGSIOS-A-RIEULPHIEUPH 9AFA C307 # HANGUL SYLLABLE SSANGSIOS-A-RIEULHIEUH 9AFB C30A # HANGUL SYLLABLE SSANGSIOS-A-PIEUPSIOS 9AFC C30B # HANGUL SYLLABLE SSANGSIOS-A-SIOS 9AFD C30E # HANGUL SYLLABLE SSANGSIOS-A-CIEUC 9AFE C30F # HANGUL SYLLABLE SSANGSIOS-A-CHIEUCH 9B41 C310 # HANGUL SYLLABLE SSANGSIOS-A-KHIEUKH 9B42 C311 # HANGUL SYLLABLE SSANGSIOS-A-THIEUTH 9B43 C312 # HANGUL SYLLABLE SSANGSIOS-A-PHIEUPH 9B44 C316 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGKIYEOK 9B45 C317 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOKSIOS 9B46 C319 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUNCIEUC 9B47 C31A # HANGUL SYLLABLE SSANGSIOS-AE-NIEUNHIEUH 9B48 C31B # HANGUL SYLLABLE SSANGSIOS-AE-TIKEUT 9B49 C31D # HANGUL SYLLABLE SSANGSIOS-AE-RIEULKIYEOK 9B4A C31E # HANGUL SYLLABLE SSANGSIOS-AE-RIEULMIEUM 9B4B C31F # HANGUL SYLLABLE SSANGSIOS-AE-RIEULPIEUP 9B4C C320 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULSIOS 9B4D C321 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULTHIEUTH 9B4E C322 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULPHIEUPH 9B4F C323 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULHIEUH 9B50 C326 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUPSIOS 9B51 C327 # HANGUL SYLLABLE SSANGSIOS-AE-SIOS 9B52 C32A # HANGUL SYLLABLE SSANGSIOS-AE-CIEUC 9B53 C32B # HANGUL SYLLABLE SSANGSIOS-AE-CHIEUCH 9B54 C32C # HANGUL SYLLABLE SSANGSIOS-AE-KHIEUKH 9B55 C32D # HANGUL SYLLABLE SSANGSIOS-AE-THIEUTH 9B56 C32E # HANGUL SYLLABLE SSANGSIOS-AE-PHIEUPH 9B57 C32F # HANGUL SYLLABLE SSANGSIOS-AE-HIEUH 9B58 C330 # HANGUL SYLLABLE SSANGSIOS-YA 9B59 C331 # HANGUL SYLLABLE SSANGSIOS-YA-KIYEOK 9B5A C332 # HANGUL SYLLABLE SSANGSIOS-YA-SSANGKIYEOK 9B61 C333 # HANGUL SYLLABLE SSANGSIOS-YA-KIYEOKSIOS 9B62 C334 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUN 9B63 C335 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUNCIEUC 9B64 C336 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUNHIEUH 9B65 C337 # HANGUL SYLLABLE SSANGSIOS-YA-TIKEUT 9B66 C338 # HANGUL SYLLABLE SSANGSIOS-YA-RIEUL 9B67 C339 # HANGUL SYLLABLE SSANGSIOS-YA-RIEULKIYEOK 9B68 C33A # HANGUL SYLLABLE SSANGSIOS-YA-RIEULMIEUM 9B69 C33B # HANGUL SYLLABLE SSANGSIOS-YA-RIEULPIEUP 9B6A C33C # HANGUL SYLLABLE SSANGSIOS-YA-RIEULSIOS 9B6B C33D # HANGUL SYLLABLE SSANGSIOS-YA-RIEULTHIEUTH 9B6C C33E # HANGUL SYLLABLE SSANGSIOS-YA-RIEULPHIEUPH 9B6D C33F # HANGUL SYLLABLE SSANGSIOS-YA-RIEULHIEUH 9B6E C340 # HANGUL SYLLABLE SSANGSIOS-YA-MIEUM 9B6F C341 # HANGUL SYLLABLE SSANGSIOS-YA-PIEUP 9B70 C342 # HANGUL SYLLABLE SSANGSIOS-YA-PIEUPSIOS 9B71 C343 # HANGUL SYLLABLE SSANGSIOS-YA-SIOS 9B72 C344 # HANGUL SYLLABLE SSANGSIOS-YA-SSANGSIOS 9B73 C346 # HANGUL SYLLABLE SSANGSIOS-YA-CIEUC 9B74 C347 # HANGUL SYLLABLE SSANGSIOS-YA-CHIEUCH 9B75 C348 # HANGUL SYLLABLE SSANGSIOS-YA-KHIEUKH 9B76 C349 # HANGUL SYLLABLE SSANGSIOS-YA-THIEUTH 9B77 C34A # HANGUL SYLLABLE SSANGSIOS-YA-PHIEUPH 9B78 C34B # HANGUL SYLLABLE SSANGSIOS-YA-HIEUH 9B79 C34C # HANGUL SYLLABLE SSANGSIOS-YAE 9B7A C34D # HANGUL SYLLABLE SSANGSIOS-YAE-KIYEOK 9B81 C34E # HANGUL SYLLABLE SSANGSIOS-YAE-SSANGKIYEOK 9B82 C34F # HANGUL SYLLABLE SSANGSIOS-YAE-KIYEOKSIOS 9B83 C350 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUN 9B84 C351 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUNCIEUC 9B85 C352 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUNHIEUH 9B86 C353 # HANGUL SYLLABLE SSANGSIOS-YAE-TIKEUT 9B87 C354 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEUL 9B88 C355 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULKIYEOK 9B89 C356 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULMIEUM 9B8A C357 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULPIEUP 9B8B C358 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULSIOS 9B8C C359 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULTHIEUTH 9B8D C35A # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULPHIEUPH 9B8E C35B # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULHIEUH 9B8F C35C # HANGUL SYLLABLE SSANGSIOS-YAE-MIEUM 9B90 C35D # HANGUL SYLLABLE SSANGSIOS-YAE-PIEUP 9B91 C35E # HANGUL SYLLABLE SSANGSIOS-YAE-PIEUPSIOS 9B92 C35F # HANGUL SYLLABLE SSANGSIOS-YAE-SIOS 9B93 C360 # HANGUL SYLLABLE SSANGSIOS-YAE-SSANGSIOS 9B94 C361 # HANGUL SYLLABLE SSANGSIOS-YAE-IEUNG 9B95 C362 # HANGUL SYLLABLE SSANGSIOS-YAE-CIEUC 9B96 C363 # HANGUL SYLLABLE SSANGSIOS-YAE-CHIEUCH 9B97 C364 # HANGUL SYLLABLE SSANGSIOS-YAE-KHIEUKH 9B98 C365 # HANGUL SYLLABLE SSANGSIOS-YAE-THIEUTH 9B99 C366 # HANGUL SYLLABLE SSANGSIOS-YAE-PHIEUPH 9B9A C367 # HANGUL SYLLABLE SSANGSIOS-YAE-HIEUH 9B9B C36A # HANGUL SYLLABLE SSANGSIOS-EO-SSANGKIYEOK 9B9C C36B # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOKSIOS 9B9D C36D # HANGUL SYLLABLE SSANGSIOS-EO-NIEUNCIEUC 9B9E C36E # HANGUL SYLLABLE SSANGSIOS-EO-NIEUNHIEUH 9B9F C36F # HANGUL SYLLABLE SSANGSIOS-EO-TIKEUT 9BA0 C371 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULKIYEOK 9BA1 C373 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULPIEUP 9BA2 C374 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULSIOS 9BA3 C375 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULTHIEUTH 9BA4 C376 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULPHIEUPH 9BA5 C377 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULHIEUH 9BA6 C37A # HANGUL SYLLABLE SSANGSIOS-EO-PIEUPSIOS 9BA7 C37B # HANGUL SYLLABLE SSANGSIOS-EO-SIOS 9BA8 C37E # HANGUL SYLLABLE SSANGSIOS-EO-CIEUC 9BA9 C37F # HANGUL SYLLABLE SSANGSIOS-EO-CHIEUCH 9BAA C380 # HANGUL SYLLABLE SSANGSIOS-EO-KHIEUKH 9BAB C381 # HANGUL SYLLABLE SSANGSIOS-EO-THIEUTH 9BAC C382 # HANGUL SYLLABLE SSANGSIOS-EO-PHIEUPH 9BAD C383 # HANGUL SYLLABLE SSANGSIOS-EO-HIEUH 9BAE C385 # HANGUL SYLLABLE SSANGSIOS-E-KIYEOK 9BAF C386 # HANGUL SYLLABLE SSANGSIOS-E-SSANGKIYEOK 9BB0 C387 # HANGUL SYLLABLE SSANGSIOS-E-KIYEOKSIOS 9BB1 C389 # HANGUL SYLLABLE SSANGSIOS-E-NIEUNCIEUC 9BB2 C38A # HANGUL SYLLABLE SSANGSIOS-E-NIEUNHIEUH 9BB3 C38B # HANGUL SYLLABLE SSANGSIOS-E-TIKEUT 9BB4 C38D # HANGUL SYLLABLE SSANGSIOS-E-RIEULKIYEOK 9BB5 C38E # HANGUL SYLLABLE SSANGSIOS-E-RIEULMIEUM 9BB6 C38F # HANGUL SYLLABLE SSANGSIOS-E-RIEULPIEUP 9BB7 C390 # HANGUL SYLLABLE SSANGSIOS-E-RIEULSIOS 9BB8 C391 # HANGUL SYLLABLE SSANGSIOS-E-RIEULTHIEUTH 9BB9 C392 # HANGUL SYLLABLE SSANGSIOS-E-RIEULPHIEUPH 9BBA C393 # HANGUL SYLLABLE SSANGSIOS-E-RIEULHIEUH 9BBB C394 # HANGUL SYLLABLE SSANGSIOS-E-MIEUM 9BBC C395 # HANGUL SYLLABLE SSANGSIOS-E-PIEUP 9BBD C396 # HANGUL SYLLABLE SSANGSIOS-E-PIEUPSIOS 9BBE C397 # HANGUL SYLLABLE SSANGSIOS-E-SIOS 9BBF C398 # HANGUL SYLLABLE SSANGSIOS-E-SSANGSIOS 9BC0 C399 # HANGUL SYLLABLE SSANGSIOS-E-IEUNG 9BC1 C39A # HANGUL SYLLABLE SSANGSIOS-E-CIEUC 9BC2 C39B # HANGUL SYLLABLE SSANGSIOS-E-CHIEUCH 9BC3 C39C # HANGUL SYLLABLE SSANGSIOS-E-KHIEUKH 9BC4 C39D # HANGUL SYLLABLE SSANGSIOS-E-THIEUTH 9BC5 C39E # HANGUL SYLLABLE SSANGSIOS-E-PHIEUPH 9BC6 C39F # HANGUL SYLLABLE SSANGSIOS-E-HIEUH 9BC7 C3A0 # HANGUL SYLLABLE SSANGSIOS-YEO 9BC8 C3A1 # HANGUL SYLLABLE SSANGSIOS-YEO-KIYEOK 9BC9 C3A2 # HANGUL SYLLABLE SSANGSIOS-YEO-SSANGKIYEOK 9BCA C3A3 # HANGUL SYLLABLE SSANGSIOS-YEO-KIYEOKSIOS 9BCB C3A4 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUN 9BCC C3A5 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUNCIEUC 9BCD C3A6 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUNHIEUH 9BCE C3A7 # HANGUL SYLLABLE SSANGSIOS-YEO-TIKEUT 9BCF C3A8 # HANGUL SYLLABLE SSANGSIOS-YEO-RIEUL 9BD0 C3A9 # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULKIYEOK 9BD1 C3AA # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULMIEUM 9BD2 C3AB # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULPIEUP 9BD3 C3AC # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULSIOS 9BD4 C3AD # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULTHIEUTH 9BD5 C3AE # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULPHIEUPH 9BD6 C3AF # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULHIEUH 9BD7 C3B0 # HANGUL SYLLABLE SSANGSIOS-YEO-MIEUM 9BD8 C3B1 # HANGUL SYLLABLE SSANGSIOS-YEO-PIEUP 9BD9 C3B2 # HANGUL SYLLABLE SSANGSIOS-YEO-PIEUPSIOS 9BDA C3B3 # HANGUL SYLLABLE SSANGSIOS-YEO-SIOS 9BDB C3B4 # HANGUL SYLLABLE SSANGSIOS-YEO-SSANGSIOS 9BDC C3B5 # HANGUL SYLLABLE SSANGSIOS-YEO-IEUNG 9BDD C3B6 # HANGUL SYLLABLE SSANGSIOS-YEO-CIEUC 9BDE C3B7 # HANGUL SYLLABLE SSANGSIOS-YEO-CHIEUCH 9BDF C3B8 # HANGUL SYLLABLE SSANGSIOS-YEO-KHIEUKH 9BE0 C3B9 # HANGUL SYLLABLE SSANGSIOS-YEO-THIEUTH 9BE1 C3BA # HANGUL SYLLABLE SSANGSIOS-YEO-PHIEUPH 9BE2 C3BB # HANGUL SYLLABLE SSANGSIOS-YEO-HIEUH 9BE3 C3BC # HANGUL SYLLABLE SSANGSIOS-YE 9BE4 C3BD # HANGUL SYLLABLE SSANGSIOS-YE-KIYEOK 9BE5 C3BE # HANGUL SYLLABLE SSANGSIOS-YE-SSANGKIYEOK 9BE6 C3BF # HANGUL SYLLABLE SSANGSIOS-YE-KIYEOKSIOS 9BE7 C3C1 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUNCIEUC 9BE8 C3C2 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUNHIEUH 9BE9 C3C3 # HANGUL SYLLABLE SSANGSIOS-YE-TIKEUT 9BEA C3C4 # HANGUL SYLLABLE SSANGSIOS-YE-RIEUL 9BEB C3C5 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULKIYEOK 9BEC C3C6 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULMIEUM 9BED C3C7 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULPIEUP 9BEE C3C8 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULSIOS 9BEF C3C9 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULTHIEUTH 9BF0 C3CA # HANGUL SYLLABLE SSANGSIOS-YE-RIEULPHIEUPH 9BF1 C3CB # HANGUL SYLLABLE SSANGSIOS-YE-RIEULHIEUH 9BF2 C3CC # HANGUL SYLLABLE SSANGSIOS-YE-MIEUM 9BF3 C3CD # HANGUL SYLLABLE SSANGSIOS-YE-PIEUP 9BF4 C3CE # HANGUL SYLLABLE SSANGSIOS-YE-PIEUPSIOS 9BF5 C3CF # HANGUL SYLLABLE SSANGSIOS-YE-SIOS 9BF6 C3D0 # HANGUL SYLLABLE SSANGSIOS-YE-SSANGSIOS 9BF7 C3D1 # HANGUL SYLLABLE SSANGSIOS-YE-IEUNG 9BF8 C3D2 # HANGUL SYLLABLE SSANGSIOS-YE-CIEUC 9BF9 C3D3 # HANGUL SYLLABLE SSANGSIOS-YE-CHIEUCH 9BFA C3D4 # HANGUL SYLLABLE SSANGSIOS-YE-KHIEUKH 9BFB C3D5 # HANGUL SYLLABLE SSANGSIOS-YE-THIEUTH 9BFC C3D6 # HANGUL SYLLABLE SSANGSIOS-YE-PHIEUPH 9BFD C3D7 # HANGUL SYLLABLE SSANGSIOS-YE-HIEUH 9BFE C3DA # HANGUL SYLLABLE SSANGSIOS-O-SSANGKIYEOK 9C41 C3DB # HANGUL SYLLABLE SSANGSIOS-O-KIYEOKSIOS 9C42 C3DD # HANGUL SYLLABLE SSANGSIOS-O-NIEUNCIEUC 9C43 C3DE # HANGUL SYLLABLE SSANGSIOS-O-NIEUNHIEUH 9C44 C3E1 # HANGUL SYLLABLE SSANGSIOS-O-RIEULKIYEOK 9C45 C3E3 # HANGUL SYLLABLE SSANGSIOS-O-RIEULPIEUP 9C46 C3E4 # HANGUL SYLLABLE SSANGSIOS-O-RIEULSIOS 9C47 C3E5 # HANGUL SYLLABLE SSANGSIOS-O-RIEULTHIEUTH 9C48 C3E6 # HANGUL SYLLABLE SSANGSIOS-O-RIEULPHIEUPH 9C49 C3E7 # HANGUL SYLLABLE SSANGSIOS-O-RIEULHIEUH 9C4A C3EA # HANGUL SYLLABLE SSANGSIOS-O-PIEUPSIOS 9C4B C3EB # HANGUL SYLLABLE SSANGSIOS-O-SIOS 9C4C C3EC # HANGUL SYLLABLE SSANGSIOS-O-SSANGSIOS 9C4D C3EE # HANGUL SYLLABLE SSANGSIOS-O-CIEUC 9C4E C3EF # HANGUL SYLLABLE SSANGSIOS-O-CHIEUCH 9C4F C3F0 # HANGUL SYLLABLE SSANGSIOS-O-KHIEUKH 9C50 C3F1 # HANGUL SYLLABLE SSANGSIOS-O-THIEUTH 9C51 C3F2 # HANGUL SYLLABLE SSANGSIOS-O-PHIEUPH 9C52 C3F3 # HANGUL SYLLABLE SSANGSIOS-O-HIEUH 9C53 C3F6 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGKIYEOK 9C54 C3F7 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOKSIOS 9C55 C3F9 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUNCIEUC 9C56 C3FA # HANGUL SYLLABLE SSANGSIOS-WA-NIEUNHIEUH 9C57 C3FB # HANGUL SYLLABLE SSANGSIOS-WA-TIKEUT 9C58 C3FC # HANGUL SYLLABLE SSANGSIOS-WA-RIEUL 9C59 C3FD # HANGUL SYLLABLE SSANGSIOS-WA-RIEULKIYEOK 9C5A C3FE # HANGUL SYLLABLE SSANGSIOS-WA-RIEULMIEUM 9C61 C3FF # HANGUL SYLLABLE SSANGSIOS-WA-RIEULPIEUP 9C62 C400 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULSIOS 9C63 C401 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULTHIEUTH 9C64 C402 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULPHIEUPH 9C65 C403 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULHIEUH 9C66 C404 # HANGUL SYLLABLE SSANGSIOS-WA-MIEUM 9C67 C405 # HANGUL SYLLABLE SSANGSIOS-WA-PIEUP 9C68 C406 # HANGUL SYLLABLE SSANGSIOS-WA-PIEUPSIOS 9C69 C407 # HANGUL SYLLABLE SSANGSIOS-WA-SIOS 9C6A C409 # HANGUL SYLLABLE SSANGSIOS-WA-IEUNG 9C6B C40A # HANGUL SYLLABLE SSANGSIOS-WA-CIEUC 9C6C C40B # HANGUL SYLLABLE SSANGSIOS-WA-CHIEUCH 9C6D C40C # HANGUL SYLLABLE SSANGSIOS-WA-KHIEUKH 9C6E C40D # HANGUL SYLLABLE SSANGSIOS-WA-THIEUTH 9C6F C40E # HANGUL SYLLABLE SSANGSIOS-WA-PHIEUPH 9C70 C40F # HANGUL SYLLABLE SSANGSIOS-WA-HIEUH 9C71 C411 # HANGUL SYLLABLE SSANGSIOS-WAE-KIYEOK 9C72 C412 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGKIYEOK 9C73 C413 # HANGUL SYLLABLE SSANGSIOS-WAE-KIYEOKSIOS 9C74 C414 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUN 9C75 C415 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUNCIEUC 9C76 C416 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUNHIEUH 9C77 C417 # HANGUL SYLLABLE SSANGSIOS-WAE-TIKEUT 9C78 C418 # HANGUL SYLLABLE SSANGSIOS-WAE-RIEUL 9C79 C419 # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULKIYEOK 9C7A C41A # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULMIEUM 9C81 C41B # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULPIEUP 9C82 C41C # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULSIOS 9C83 C41D # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULTHIEUTH 9C84 C41E # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULPHIEUPH 9C85 C41F # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULHIEUH 9C86 C420 # HANGUL SYLLABLE SSANGSIOS-WAE-MIEUM 9C87 C421 # HANGUL SYLLABLE SSANGSIOS-WAE-PIEUP 9C88 C422 # HANGUL SYLLABLE SSANGSIOS-WAE-PIEUPSIOS 9C89 C423 # HANGUL SYLLABLE SSANGSIOS-WAE-SIOS 9C8A C425 # HANGUL SYLLABLE SSANGSIOS-WAE-IEUNG 9C8B C426 # HANGUL SYLLABLE SSANGSIOS-WAE-CIEUC 9C8C C427 # HANGUL SYLLABLE SSANGSIOS-WAE-CHIEUCH 9C8D C428 # HANGUL SYLLABLE SSANGSIOS-WAE-KHIEUKH 9C8E C429 # HANGUL SYLLABLE SSANGSIOS-WAE-THIEUTH 9C8F C42A # HANGUL SYLLABLE SSANGSIOS-WAE-PHIEUPH 9C90 C42B # HANGUL SYLLABLE SSANGSIOS-WAE-HIEUH 9C91 C42D # HANGUL SYLLABLE SSANGSIOS-OE-KIYEOK 9C92 C42E # HANGUL SYLLABLE SSANGSIOS-OE-SSANGKIYEOK 9C93 C42F # HANGUL SYLLABLE SSANGSIOS-OE-KIYEOKSIOS 9C94 C431 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUNCIEUC 9C95 C432 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUNHIEUH 9C96 C433 # HANGUL SYLLABLE SSANGSIOS-OE-TIKEUT 9C97 C435 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULKIYEOK 9C98 C436 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULMIEUM 9C99 C437 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULPIEUP 9C9A C438 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULSIOS 9C9B C439 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULTHIEUTH 9C9C C43A # HANGUL SYLLABLE SSANGSIOS-OE-RIEULPHIEUPH 9C9D C43B # HANGUL SYLLABLE SSANGSIOS-OE-RIEULHIEUH 9C9E C43E # HANGUL SYLLABLE SSANGSIOS-OE-PIEUPSIOS 9C9F C43F # HANGUL SYLLABLE SSANGSIOS-OE-SIOS 9CA0 C440 # HANGUL SYLLABLE SSANGSIOS-OE-SSANGSIOS 9CA1 C441 # HANGUL SYLLABLE SSANGSIOS-OE-IEUNG 9CA2 C442 # HANGUL SYLLABLE SSANGSIOS-OE-CIEUC 9CA3 C443 # HANGUL SYLLABLE SSANGSIOS-OE-CHIEUCH 9CA4 C444 # HANGUL SYLLABLE SSANGSIOS-OE-KHIEUKH 9CA5 C445 # HANGUL SYLLABLE SSANGSIOS-OE-THIEUTH 9CA6 C446 # HANGUL SYLLABLE SSANGSIOS-OE-PHIEUPH 9CA7 C447 # HANGUL SYLLABLE SSANGSIOS-OE-HIEUH 9CA8 C449 # HANGUL SYLLABLE SSANGSIOS-YO-KIYEOK 9CA9 C44A # HANGUL SYLLABLE SSANGSIOS-YO-SSANGKIYEOK 9CAA C44B # HANGUL SYLLABLE SSANGSIOS-YO-KIYEOKSIOS 9CAB C44C # HANGUL SYLLABLE SSANGSIOS-YO-NIEUN 9CAC C44D # HANGUL SYLLABLE SSANGSIOS-YO-NIEUNCIEUC 9CAD C44E # HANGUL SYLLABLE SSANGSIOS-YO-NIEUNHIEUH 9CAE C44F # HANGUL SYLLABLE SSANGSIOS-YO-TIKEUT 9CAF C450 # HANGUL SYLLABLE SSANGSIOS-YO-RIEUL 9CB0 C451 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULKIYEOK 9CB1 C452 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULMIEUM 9CB2 C453 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULPIEUP 9CB3 C454 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULSIOS 9CB4 C455 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULTHIEUTH 9CB5 C456 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULPHIEUPH 9CB6 C457 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULHIEUH 9CB7 C458 # HANGUL SYLLABLE SSANGSIOS-YO-MIEUM 9CB8 C459 # HANGUL SYLLABLE SSANGSIOS-YO-PIEUP 9CB9 C45A # HANGUL SYLLABLE SSANGSIOS-YO-PIEUPSIOS 9CBA C45B # HANGUL SYLLABLE SSANGSIOS-YO-SIOS 9CBB C45C # HANGUL SYLLABLE SSANGSIOS-YO-SSANGSIOS 9CBC C45D # HANGUL SYLLABLE SSANGSIOS-YO-IEUNG 9CBD C45E # HANGUL SYLLABLE SSANGSIOS-YO-CIEUC 9CBE C45F # HANGUL SYLLABLE SSANGSIOS-YO-CHIEUCH 9CBF C460 # HANGUL SYLLABLE SSANGSIOS-YO-KHIEUKH 9CC0 C461 # HANGUL SYLLABLE SSANGSIOS-YO-THIEUTH 9CC1 C462 # HANGUL SYLLABLE SSANGSIOS-YO-PHIEUPH 9CC2 C463 # HANGUL SYLLABLE SSANGSIOS-YO-HIEUH 9CC3 C466 # HANGUL SYLLABLE SSANGSIOS-U-SSANGKIYEOK 9CC4 C467 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOKSIOS 9CC5 C469 # HANGUL SYLLABLE SSANGSIOS-U-NIEUNCIEUC 9CC6 C46A # HANGUL SYLLABLE SSANGSIOS-U-NIEUNHIEUH 9CC7 C46B # HANGUL SYLLABLE SSANGSIOS-U-TIKEUT 9CC8 C46D # HANGUL SYLLABLE SSANGSIOS-U-RIEULKIYEOK 9CC9 C46E # HANGUL SYLLABLE SSANGSIOS-U-RIEULMIEUM 9CCA C46F # HANGUL SYLLABLE SSANGSIOS-U-RIEULPIEUP 9CCB C470 # HANGUL SYLLABLE SSANGSIOS-U-RIEULSIOS 9CCC C471 # HANGUL SYLLABLE SSANGSIOS-U-RIEULTHIEUTH 9CCD C472 # HANGUL SYLLABLE SSANGSIOS-U-RIEULPHIEUPH 9CCE C473 # HANGUL SYLLABLE SSANGSIOS-U-RIEULHIEUH 9CCF C476 # HANGUL SYLLABLE SSANGSIOS-U-PIEUPSIOS 9CD0 C477 # HANGUL SYLLABLE SSANGSIOS-U-SIOS 9CD1 C478 # HANGUL SYLLABLE SSANGSIOS-U-SSANGSIOS 9CD2 C47A # HANGUL SYLLABLE SSANGSIOS-U-CIEUC 9CD3 C47B # HANGUL SYLLABLE SSANGSIOS-U-CHIEUCH 9CD4 C47C # HANGUL SYLLABLE SSANGSIOS-U-KHIEUKH 9CD5 C47D # HANGUL SYLLABLE SSANGSIOS-U-THIEUTH 9CD6 C47E # HANGUL SYLLABLE SSANGSIOS-U-PHIEUPH 9CD7 C47F # HANGUL SYLLABLE SSANGSIOS-U-HIEUH 9CD8 C481 # HANGUL SYLLABLE SSANGSIOS-WEO-KIYEOK 9CD9 C482 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGKIYEOK 9CDA C483 # HANGUL SYLLABLE SSANGSIOS-WEO-KIYEOKSIOS 9CDB C484 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUN 9CDC C485 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUNCIEUC 9CDD C486 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUNHIEUH 9CDE C487 # HANGUL SYLLABLE SSANGSIOS-WEO-TIKEUT 9CDF C488 # HANGUL SYLLABLE SSANGSIOS-WEO-RIEUL 9CE0 C489 # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULKIYEOK 9CE1 C48A # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULMIEUM 9CE2 C48B # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULPIEUP 9CE3 C48C # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULSIOS 9CE4 C48D # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULTHIEUTH 9CE5 C48E # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULPHIEUPH 9CE6 C48F # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULHIEUH 9CE7 C490 # HANGUL SYLLABLE SSANGSIOS-WEO-MIEUM 9CE8 C491 # HANGUL SYLLABLE SSANGSIOS-WEO-PIEUP 9CE9 C492 # HANGUL SYLLABLE SSANGSIOS-WEO-PIEUPSIOS 9CEA C493 # HANGUL SYLLABLE SSANGSIOS-WEO-SIOS 9CEB C495 # HANGUL SYLLABLE SSANGSIOS-WEO-IEUNG 9CEC C496 # HANGUL SYLLABLE SSANGSIOS-WEO-CIEUC 9CED C497 # HANGUL SYLLABLE SSANGSIOS-WEO-CHIEUCH 9CEE C498 # HANGUL SYLLABLE SSANGSIOS-WEO-KHIEUKH 9CEF C499 # HANGUL SYLLABLE SSANGSIOS-WEO-THIEUTH 9CF0 C49A # HANGUL SYLLABLE SSANGSIOS-WEO-PHIEUPH 9CF1 C49B # HANGUL SYLLABLE SSANGSIOS-WEO-HIEUH 9CF2 C49D # HANGUL SYLLABLE SSANGSIOS-WE-KIYEOK 9CF3 C49E # HANGUL SYLLABLE SSANGSIOS-WE-SSANGKIYEOK 9CF4 C49F # HANGUL SYLLABLE SSANGSIOS-WE-KIYEOKSIOS 9CF5 C4A0 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUN 9CF6 C4A1 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUNCIEUC 9CF7 C4A2 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUNHIEUH 9CF8 C4A3 # HANGUL SYLLABLE SSANGSIOS-WE-TIKEUT 9CF9 C4A4 # HANGUL SYLLABLE SSANGSIOS-WE-RIEUL 9CFA C4A5 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULKIYEOK 9CFB C4A6 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULMIEUM 9CFC C4A7 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULPIEUP 9CFD C4A8 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULSIOS 9CFE C4A9 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULTHIEUTH 9D41 C4AA # HANGUL SYLLABLE SSANGSIOS-WE-RIEULPHIEUPH 9D42 C4AB # HANGUL SYLLABLE SSANGSIOS-WE-RIEULHIEUH 9D43 C4AC # HANGUL SYLLABLE SSANGSIOS-WE-MIEUM 9D44 C4AD # HANGUL SYLLABLE SSANGSIOS-WE-PIEUP 9D45 C4AE # HANGUL SYLLABLE SSANGSIOS-WE-PIEUPSIOS 9D46 C4AF # HANGUL SYLLABLE SSANGSIOS-WE-SIOS 9D47 C4B0 # HANGUL SYLLABLE SSANGSIOS-WE-SSANGSIOS 9D48 C4B1 # HANGUL SYLLABLE SSANGSIOS-WE-IEUNG 9D49 C4B2 # HANGUL SYLLABLE SSANGSIOS-WE-CIEUC 9D4A C4B3 # HANGUL SYLLABLE SSANGSIOS-WE-CHIEUCH 9D4B C4B4 # HANGUL SYLLABLE SSANGSIOS-WE-KHIEUKH 9D4C C4B5 # HANGUL SYLLABLE SSANGSIOS-WE-THIEUTH 9D4D C4B6 # HANGUL SYLLABLE SSANGSIOS-WE-PHIEUPH 9D4E C4B7 # HANGUL SYLLABLE SSANGSIOS-WE-HIEUH 9D4F C4B9 # HANGUL SYLLABLE SSANGSIOS-WI-KIYEOK 9D50 C4BA # HANGUL SYLLABLE SSANGSIOS-WI-SSANGKIYEOK 9D51 C4BB # HANGUL SYLLABLE SSANGSIOS-WI-KIYEOKSIOS 9D52 C4BD # HANGUL SYLLABLE SSANGSIOS-WI-NIEUNCIEUC 9D53 C4BE # HANGUL SYLLABLE SSANGSIOS-WI-NIEUNHIEUH 9D54 C4BF # HANGUL SYLLABLE SSANGSIOS-WI-TIKEUT 9D55 C4C0 # HANGUL SYLLABLE SSANGSIOS-WI-RIEUL 9D56 C4C1 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULKIYEOK 9D57 C4C2 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULMIEUM 9D58 C4C3 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULPIEUP 9D59 C4C4 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULSIOS 9D5A C4C5 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULTHIEUTH 9D61 C4C6 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULPHIEUPH 9D62 C4C7 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULHIEUH 9D63 C4C8 # HANGUL SYLLABLE SSANGSIOS-WI-MIEUM 9D64 C4C9 # HANGUL SYLLABLE SSANGSIOS-WI-PIEUP 9D65 C4CA # HANGUL SYLLABLE SSANGSIOS-WI-PIEUPSIOS 9D66 C4CB # HANGUL SYLLABLE SSANGSIOS-WI-SIOS 9D67 C4CC # HANGUL SYLLABLE SSANGSIOS-WI-SSANGSIOS 9D68 C4CD # HANGUL SYLLABLE SSANGSIOS-WI-IEUNG 9D69 C4CE # HANGUL SYLLABLE SSANGSIOS-WI-CIEUC 9D6A C4CF # HANGUL SYLLABLE SSANGSIOS-WI-CHIEUCH 9D6B C4D0 # HANGUL SYLLABLE SSANGSIOS-WI-KHIEUKH 9D6C C4D1 # HANGUL SYLLABLE SSANGSIOS-WI-THIEUTH 9D6D C4D2 # HANGUL SYLLABLE SSANGSIOS-WI-PHIEUPH 9D6E C4D3 # HANGUL SYLLABLE SSANGSIOS-WI-HIEUH 9D6F C4D4 # HANGUL SYLLABLE SSANGSIOS-YU 9D70 C4D5 # HANGUL SYLLABLE SSANGSIOS-YU-KIYEOK 9D71 C4D6 # HANGUL SYLLABLE SSANGSIOS-YU-SSANGKIYEOK 9D72 C4D7 # HANGUL SYLLABLE SSANGSIOS-YU-KIYEOKSIOS 9D73 C4D8 # HANGUL SYLLABLE SSANGSIOS-YU-NIEUN 9D74 C4D9 # HANGUL SYLLABLE SSANGSIOS-YU-NIEUNCIEUC 9D75 C4DA # HANGUL SYLLABLE SSANGSIOS-YU-NIEUNHIEUH 9D76 C4DB # HANGUL SYLLABLE SSANGSIOS-YU-TIKEUT 9D77 C4DC # HANGUL SYLLABLE SSANGSIOS-YU-RIEUL 9D78 C4DD # HANGUL SYLLABLE SSANGSIOS-YU-RIEULKIYEOK 9D79 C4DE # HANGUL SYLLABLE SSANGSIOS-YU-RIEULMIEUM 9D7A C4DF # HANGUL SYLLABLE SSANGSIOS-YU-RIEULPIEUP 9D81 C4E0 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULSIOS 9D82 C4E1 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULTHIEUTH 9D83 C4E2 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULPHIEUPH 9D84 C4E3 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULHIEUH 9D85 C4E4 # HANGUL SYLLABLE SSANGSIOS-YU-MIEUM 9D86 C4E5 # HANGUL SYLLABLE SSANGSIOS-YU-PIEUP 9D87 C4E6 # HANGUL SYLLABLE SSANGSIOS-YU-PIEUPSIOS 9D88 C4E7 # HANGUL SYLLABLE SSANGSIOS-YU-SIOS 9D89 C4E8 # HANGUL SYLLABLE SSANGSIOS-YU-SSANGSIOS 9D8A C4EA # HANGUL SYLLABLE SSANGSIOS-YU-CIEUC 9D8B C4EB # HANGUL SYLLABLE SSANGSIOS-YU-CHIEUCH 9D8C C4EC # HANGUL SYLLABLE SSANGSIOS-YU-KHIEUKH 9D8D C4ED # HANGUL SYLLABLE SSANGSIOS-YU-THIEUTH 9D8E C4EE # HANGUL SYLLABLE SSANGSIOS-YU-PHIEUPH 9D8F C4EF # HANGUL SYLLABLE SSANGSIOS-YU-HIEUH 9D90 C4F2 # HANGUL SYLLABLE SSANGSIOS-EU-SSANGKIYEOK 9D91 C4F3 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOKSIOS 9D92 C4F5 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUNCIEUC 9D93 C4F6 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUNHIEUH 9D94 C4F7 # HANGUL SYLLABLE SSANGSIOS-EU-TIKEUT 9D95 C4F9 # HANGUL SYLLABLE SSANGSIOS-EU-RIEULKIYEOK 9D96 C4FB # HANGUL SYLLABLE SSANGSIOS-EU-RIEULPIEUP 9D97 C4FC # HANGUL SYLLABLE SSANGSIOS-EU-RIEULSIOS 9D98 C4FD # HANGUL SYLLABLE SSANGSIOS-EU-RIEULTHIEUTH 9D99 C4FE # HANGUL SYLLABLE SSANGSIOS-EU-RIEULPHIEUPH 9D9A C502 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUPSIOS 9D9B C503 # HANGUL SYLLABLE SSANGSIOS-EU-SIOS 9D9C C504 # HANGUL SYLLABLE SSANGSIOS-EU-SSANGSIOS 9D9D C505 # HANGUL SYLLABLE SSANGSIOS-EU-IEUNG 9D9E C506 # HANGUL SYLLABLE SSANGSIOS-EU-CIEUC 9D9F C507 # HANGUL SYLLABLE SSANGSIOS-EU-CHIEUCH 9DA0 C508 # HANGUL SYLLABLE SSANGSIOS-EU-KHIEUKH 9DA1 C509 # HANGUL SYLLABLE SSANGSIOS-EU-THIEUTH 9DA2 C50A # HANGUL SYLLABLE SSANGSIOS-EU-PHIEUPH 9DA3 C50B # HANGUL SYLLABLE SSANGSIOS-EU-HIEUH 9DA4 C50D # HANGUL SYLLABLE SSANGSIOS-YI-KIYEOK 9DA5 C50E # HANGUL SYLLABLE SSANGSIOS-YI-SSANGKIYEOK 9DA6 C50F # HANGUL SYLLABLE SSANGSIOS-YI-KIYEOKSIOS 9DA7 C511 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUNCIEUC 9DA8 C512 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUNHIEUH 9DA9 C513 # HANGUL SYLLABLE SSANGSIOS-YI-TIKEUT 9DAA C515 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULKIYEOK 9DAB C516 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULMIEUM 9DAC C517 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULPIEUP 9DAD C518 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULSIOS 9DAE C519 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULTHIEUTH 9DAF C51A # HANGUL SYLLABLE SSANGSIOS-YI-RIEULPHIEUPH 9DB0 C51B # HANGUL SYLLABLE SSANGSIOS-YI-RIEULHIEUH 9DB1 C51D # HANGUL SYLLABLE SSANGSIOS-YI-PIEUP 9DB2 C51E # HANGUL SYLLABLE SSANGSIOS-YI-PIEUPSIOS 9DB3 C51F # HANGUL SYLLABLE SSANGSIOS-YI-SIOS 9DB4 C520 # HANGUL SYLLABLE SSANGSIOS-YI-SSANGSIOS 9DB5 C521 # HANGUL SYLLABLE SSANGSIOS-YI-IEUNG 9DB6 C522 # HANGUL SYLLABLE SSANGSIOS-YI-CIEUC 9DB7 C523 # HANGUL SYLLABLE SSANGSIOS-YI-CHIEUCH 9DB8 C524 # HANGUL SYLLABLE SSANGSIOS-YI-KHIEUKH 9DB9 C525 # HANGUL SYLLABLE SSANGSIOS-YI-THIEUTH 9DBA C526 # HANGUL SYLLABLE SSANGSIOS-YI-PHIEUPH 9DBB C527 # HANGUL SYLLABLE SSANGSIOS-YI-HIEUH 9DBC C52A # HANGUL SYLLABLE SSANGSIOS-I-SSANGKIYEOK 9DBD C52B # HANGUL SYLLABLE SSANGSIOS-I-KIYEOKSIOS 9DBE C52D # HANGUL SYLLABLE SSANGSIOS-I-NIEUNCIEUC 9DBF C52E # HANGUL SYLLABLE SSANGSIOS-I-NIEUNHIEUH 9DC0 C52F # HANGUL SYLLABLE SSANGSIOS-I-TIKEUT 9DC1 C531 # HANGUL SYLLABLE SSANGSIOS-I-RIEULKIYEOK 9DC2 C532 # HANGUL SYLLABLE SSANGSIOS-I-RIEULMIEUM 9DC3 C533 # HANGUL SYLLABLE SSANGSIOS-I-RIEULPIEUP 9DC4 C534 # HANGUL SYLLABLE SSANGSIOS-I-RIEULSIOS 9DC5 C535 # HANGUL SYLLABLE SSANGSIOS-I-RIEULTHIEUTH 9DC6 C536 # HANGUL SYLLABLE SSANGSIOS-I-RIEULPHIEUPH 9DC7 C537 # HANGUL SYLLABLE SSANGSIOS-I-RIEULHIEUH 9DC8 C53A # HANGUL SYLLABLE SSANGSIOS-I-PIEUPSIOS 9DC9 C53C # HANGUL SYLLABLE SSANGSIOS-I-SSANGSIOS 9DCA C53E # HANGUL SYLLABLE SSANGSIOS-I-CIEUC 9DCB C53F # HANGUL SYLLABLE SSANGSIOS-I-CHIEUCH 9DCC C540 # HANGUL SYLLABLE SSANGSIOS-I-KHIEUKH 9DCD C541 # HANGUL SYLLABLE SSANGSIOS-I-THIEUTH 9DCE C542 # HANGUL SYLLABLE SSANGSIOS-I-PHIEUPH 9DCF C543 # HANGUL SYLLABLE SSANGSIOS-I-HIEUH 9DD0 C546 # HANGUL SYLLABLE IEUNG-A-SSANGKIYEOK 9DD1 C547 # HANGUL SYLLABLE IEUNG-A-KIYEOKSIOS 9DD2 C54B # HANGUL SYLLABLE IEUNG-A-TIKEUT 9DD3 C54F # HANGUL SYLLABLE IEUNG-A-RIEULPIEUP 9DD4 C550 # HANGUL SYLLABLE IEUNG-A-RIEULSIOS 9DD5 C551 # HANGUL SYLLABLE IEUNG-A-RIEULTHIEUTH 9DD6 C552 # HANGUL SYLLABLE IEUNG-A-RIEULPHIEUPH 9DD7 C556 # HANGUL SYLLABLE IEUNG-A-PIEUPSIOS 9DD8 C55A # HANGUL SYLLABLE IEUNG-A-CIEUC 9DD9 C55B # HANGUL SYLLABLE IEUNG-A-CHIEUCH 9DDA C55C # HANGUL SYLLABLE IEUNG-A-KHIEUKH 9DDB C55F # HANGUL SYLLABLE IEUNG-A-HIEUH 9DDC C562 # HANGUL SYLLABLE IEUNG-AE-SSANGKIYEOK 9DDD C563 # HANGUL SYLLABLE IEUNG-AE-KIYEOKSIOS 9DDE C565 # HANGUL SYLLABLE IEUNG-AE-NIEUNCIEUC 9DDF C566 # HANGUL SYLLABLE IEUNG-AE-NIEUNHIEUH 9DE0 C567 # HANGUL SYLLABLE IEUNG-AE-TIKEUT 9DE1 C569 # HANGUL SYLLABLE IEUNG-AE-RIEULKIYEOK 9DE2 C56A # HANGUL SYLLABLE IEUNG-AE-RIEULMIEUM 9DE3 C56B # HANGUL SYLLABLE IEUNG-AE-RIEULPIEUP 9DE4 C56C # HANGUL SYLLABLE IEUNG-AE-RIEULSIOS 9DE5 C56D # HANGUL SYLLABLE IEUNG-AE-RIEULTHIEUTH 9DE6 C56E # HANGUL SYLLABLE IEUNG-AE-RIEULPHIEUPH 9DE7 C56F # HANGUL SYLLABLE IEUNG-AE-RIEULHIEUH 9DE8 C572 # HANGUL SYLLABLE IEUNG-AE-PIEUPSIOS 9DE9 C576 # HANGUL SYLLABLE IEUNG-AE-CIEUC 9DEA C577 # HANGUL SYLLABLE IEUNG-AE-CHIEUCH 9DEB C578 # HANGUL SYLLABLE IEUNG-AE-KHIEUKH 9DEC C579 # HANGUL SYLLABLE IEUNG-AE-THIEUTH 9DED C57A # HANGUL SYLLABLE IEUNG-AE-PHIEUPH 9DEE C57B # HANGUL SYLLABLE IEUNG-AE-HIEUH 9DEF C57E # HANGUL SYLLABLE IEUNG-YA-SSANGKIYEOK 9DF0 C57F # HANGUL SYLLABLE IEUNG-YA-KIYEOKSIOS 9DF1 C581 # HANGUL SYLLABLE IEUNG-YA-NIEUNCIEUC 9DF2 C582 # HANGUL SYLLABLE IEUNG-YA-NIEUNHIEUH 9DF3 C583 # HANGUL SYLLABLE IEUNG-YA-TIKEUT 9DF4 C585 # HANGUL SYLLABLE IEUNG-YA-RIEULKIYEOK 9DF5 C586 # HANGUL SYLLABLE IEUNG-YA-RIEULMIEUM 9DF6 C588 # HANGUL SYLLABLE IEUNG-YA-RIEULSIOS 9DF7 C589 # HANGUL SYLLABLE IEUNG-YA-RIEULTHIEUTH 9DF8 C58A # HANGUL SYLLABLE IEUNG-YA-RIEULPHIEUPH 9DF9 C58B # HANGUL SYLLABLE IEUNG-YA-RIEULHIEUH 9DFA C58E # HANGUL SYLLABLE IEUNG-YA-PIEUPSIOS 9DFB C590 # HANGUL SYLLABLE IEUNG-YA-SSANGSIOS 9DFC C592 # HANGUL SYLLABLE IEUNG-YA-CIEUC 9DFD C593 # HANGUL SYLLABLE IEUNG-YA-CHIEUCH 9DFE C594 # HANGUL SYLLABLE IEUNG-YA-KHIEUKH 9E41 C596 # HANGUL SYLLABLE IEUNG-YA-PHIEUPH 9E42 C599 # HANGUL SYLLABLE IEUNG-YAE-KIYEOK 9E43 C59A # HANGUL SYLLABLE IEUNG-YAE-SSANGKIYEOK 9E44 C59B # HANGUL SYLLABLE IEUNG-YAE-KIYEOKSIOS 9E45 C59D # HANGUL SYLLABLE IEUNG-YAE-NIEUNCIEUC 9E46 C59E # HANGUL SYLLABLE IEUNG-YAE-NIEUNHIEUH 9E47 C59F # HANGUL SYLLABLE IEUNG-YAE-TIKEUT 9E48 C5A1 # HANGUL SYLLABLE IEUNG-YAE-RIEULKIYEOK 9E49 C5A2 # HANGUL SYLLABLE IEUNG-YAE-RIEULMIEUM 9E4A C5A3 # HANGUL SYLLABLE IEUNG-YAE-RIEULPIEUP 9E4B C5A4 # HANGUL SYLLABLE IEUNG-YAE-RIEULSIOS 9E4C C5A5 # HANGUL SYLLABLE IEUNG-YAE-RIEULTHIEUTH 9E4D C5A6 # HANGUL SYLLABLE IEUNG-YAE-RIEULPHIEUPH 9E4E C5A7 # HANGUL SYLLABLE IEUNG-YAE-RIEULHIEUH 9E4F C5A8 # HANGUL SYLLABLE IEUNG-YAE-MIEUM 9E50 C5AA # HANGUL SYLLABLE IEUNG-YAE-PIEUPSIOS 9E51 C5AB # HANGUL SYLLABLE IEUNG-YAE-SIOS 9E52 C5AC # HANGUL SYLLABLE IEUNG-YAE-SSANGSIOS 9E53 C5AD # HANGUL SYLLABLE IEUNG-YAE-IEUNG 9E54 C5AE # HANGUL SYLLABLE IEUNG-YAE-CIEUC 9E55 C5AF # HANGUL SYLLABLE IEUNG-YAE-CHIEUCH 9E56 C5B0 # HANGUL SYLLABLE IEUNG-YAE-KHIEUKH 9E57 C5B1 # HANGUL SYLLABLE IEUNG-YAE-THIEUTH 9E58 C5B2 # HANGUL SYLLABLE IEUNG-YAE-PHIEUPH 9E59 C5B3 # HANGUL SYLLABLE IEUNG-YAE-HIEUH 9E5A C5B6 # HANGUL SYLLABLE IEUNG-EO-SSANGKIYEOK 9E61 C5B7 # HANGUL SYLLABLE IEUNG-EO-KIYEOKSIOS 9E62 C5BA # HANGUL SYLLABLE IEUNG-EO-NIEUNHIEUH 9E63 C5BF # HANGUL SYLLABLE IEUNG-EO-RIEULPIEUP 9E64 C5C0 # HANGUL SYLLABLE IEUNG-EO-RIEULSIOS 9E65 C5C1 # HANGUL SYLLABLE IEUNG-EO-RIEULTHIEUTH 9E66 C5C2 # HANGUL SYLLABLE IEUNG-EO-RIEULPHIEUPH 9E67 C5C3 # HANGUL SYLLABLE IEUNG-EO-RIEULHIEUH 9E68 C5CB # HANGUL SYLLABLE IEUNG-EO-CHIEUCH 9E69 C5CD # HANGUL SYLLABLE IEUNG-EO-THIEUTH 9E6A C5CF # HANGUL SYLLABLE IEUNG-EO-HIEUH 9E6B C5D2 # HANGUL SYLLABLE IEUNG-E-SSANGKIYEOK 9E6C C5D3 # HANGUL SYLLABLE IEUNG-E-KIYEOKSIOS 9E6D C5D5 # HANGUL SYLLABLE IEUNG-E-NIEUNCIEUC 9E6E C5D6 # HANGUL SYLLABLE IEUNG-E-NIEUNHIEUH 9E6F C5D7 # HANGUL SYLLABLE IEUNG-E-TIKEUT 9E70 C5D9 # HANGUL SYLLABLE IEUNG-E-RIEULKIYEOK 9E71 C5DA # HANGUL SYLLABLE IEUNG-E-RIEULMIEUM 9E72 C5DB # HANGUL SYLLABLE IEUNG-E-RIEULPIEUP 9E73 C5DC # HANGUL SYLLABLE IEUNG-E-RIEULSIOS 9E74 C5DD # HANGUL SYLLABLE IEUNG-E-RIEULTHIEUTH 9E75 C5DE # HANGUL SYLLABLE IEUNG-E-RIEULPHIEUPH 9E76 C5DF # HANGUL SYLLABLE IEUNG-E-RIEULHIEUH 9E77 C5E2 # HANGUL SYLLABLE IEUNG-E-PIEUPSIOS 9E78 C5E4 # HANGUL SYLLABLE IEUNG-E-SSANGSIOS 9E79 C5E6 # HANGUL SYLLABLE IEUNG-E-CIEUC 9E7A C5E7 # HANGUL SYLLABLE IEUNG-E-CHIEUCH 9E81 C5E8 # HANGUL SYLLABLE IEUNG-E-KHIEUKH 9E82 C5E9 # HANGUL SYLLABLE IEUNG-E-THIEUTH 9E83 C5EA # HANGUL SYLLABLE IEUNG-E-PHIEUPH 9E84 C5EB # HANGUL SYLLABLE IEUNG-E-HIEUH 9E85 C5EF # HANGUL SYLLABLE IEUNG-YEO-KIYEOKSIOS 9E86 C5F1 # HANGUL SYLLABLE IEUNG-YEO-NIEUNCIEUC 9E87 C5F2 # HANGUL SYLLABLE IEUNG-YEO-NIEUNHIEUH 9E88 C5F3 # HANGUL SYLLABLE IEUNG-YEO-TIKEUT 9E89 C5F5 # HANGUL SYLLABLE IEUNG-YEO-RIEULKIYEOK 9E8A C5F8 # HANGUL SYLLABLE IEUNG-YEO-RIEULSIOS 9E8B C5F9 # HANGUL SYLLABLE IEUNG-YEO-RIEULTHIEUTH 9E8C C5FA # HANGUL SYLLABLE IEUNG-YEO-RIEULPHIEUPH 9E8D C5FB # HANGUL SYLLABLE IEUNG-YEO-RIEULHIEUH 9E8E C602 # HANGUL SYLLABLE IEUNG-YEO-CIEUC 9E8F C603 # HANGUL SYLLABLE IEUNG-YEO-CHIEUCH 9E90 C604 # HANGUL SYLLABLE IEUNG-YEO-KHIEUKH 9E91 C609 # HANGUL SYLLABLE IEUNG-YE-KIYEOK 9E92 C60A # HANGUL SYLLABLE IEUNG-YE-SSANGKIYEOK 9E93 C60B # HANGUL SYLLABLE IEUNG-YE-KIYEOKSIOS 9E94 C60D # HANGUL SYLLABLE IEUNG-YE-NIEUNCIEUC 9E95 C60E # HANGUL SYLLABLE IEUNG-YE-NIEUNHIEUH 9E96 C60F # HANGUL SYLLABLE IEUNG-YE-TIKEUT 9E97 C611 # HANGUL SYLLABLE IEUNG-YE-RIEULKIYEOK 9E98 C612 # HANGUL SYLLABLE IEUNG-YE-RIEULMIEUM 9E99 C613 # HANGUL SYLLABLE IEUNG-YE-RIEULPIEUP 9E9A C614 # HANGUL SYLLABLE IEUNG-YE-RIEULSIOS 9E9B C615 # HANGUL SYLLABLE IEUNG-YE-RIEULTHIEUTH 9E9C C616 # HANGUL SYLLABLE IEUNG-YE-RIEULPHIEUPH 9E9D C617 # HANGUL SYLLABLE IEUNG-YE-RIEULHIEUH 9E9E C61A # HANGUL SYLLABLE IEUNG-YE-PIEUPSIOS 9E9F C61D # HANGUL SYLLABLE IEUNG-YE-IEUNG 9EA0 C61E # HANGUL SYLLABLE IEUNG-YE-CIEUC 9EA1 C61F # HANGUL SYLLABLE IEUNG-YE-CHIEUCH 9EA2 C620 # HANGUL SYLLABLE IEUNG-YE-KHIEUKH 9EA3 C621 # HANGUL SYLLABLE IEUNG-YE-THIEUTH 9EA4 C622 # HANGUL SYLLABLE IEUNG-YE-PHIEUPH 9EA5 C623 # HANGUL SYLLABLE IEUNG-YE-HIEUH 9EA6 C626 # HANGUL SYLLABLE IEUNG-O-SSANGKIYEOK 9EA7 C627 # HANGUL SYLLABLE IEUNG-O-KIYEOKSIOS 9EA8 C629 # HANGUL SYLLABLE IEUNG-O-NIEUNCIEUC 9EA9 C62A # HANGUL SYLLABLE IEUNG-O-NIEUNHIEUH 9EAA C62B # HANGUL SYLLABLE IEUNG-O-TIKEUT 9EAB C62F # HANGUL SYLLABLE IEUNG-O-RIEULPIEUP 9EAC C631 # HANGUL SYLLABLE IEUNG-O-RIEULTHIEUTH 9EAD C632 # HANGUL SYLLABLE IEUNG-O-RIEULPHIEUPH 9EAE C636 # HANGUL SYLLABLE IEUNG-O-PIEUPSIOS 9EAF C638 # HANGUL SYLLABLE IEUNG-O-SSANGSIOS 9EB0 C63A # HANGUL SYLLABLE IEUNG-O-CIEUC 9EB1 C63C # HANGUL SYLLABLE IEUNG-O-KHIEUKH 9EB2 C63D # HANGUL SYLLABLE IEUNG-O-THIEUTH 9EB3 C63E # HANGUL SYLLABLE IEUNG-O-PHIEUPH 9EB4 C63F # HANGUL SYLLABLE IEUNG-O-HIEUH 9EB5 C642 # HANGUL SYLLABLE IEUNG-WA-SSANGKIYEOK 9EB6 C643 # HANGUL SYLLABLE IEUNG-WA-KIYEOKSIOS 9EB7 C645 # HANGUL SYLLABLE IEUNG-WA-NIEUNCIEUC 9EB8 C646 # HANGUL SYLLABLE IEUNG-WA-NIEUNHIEUH 9EB9 C647 # HANGUL SYLLABLE IEUNG-WA-TIKEUT 9EBA C649 # HANGUL SYLLABLE IEUNG-WA-RIEULKIYEOK 9EBB C64A # HANGUL SYLLABLE IEUNG-WA-RIEULMIEUM 9EBC C64B # HANGUL SYLLABLE IEUNG-WA-RIEULPIEUP 9EBD C64C # HANGUL SYLLABLE IEUNG-WA-RIEULSIOS 9EBE C64D # HANGUL SYLLABLE IEUNG-WA-RIEULTHIEUTH 9EBF C64E # HANGUL SYLLABLE IEUNG-WA-RIEULPHIEUPH 9EC0 C64F # HANGUL SYLLABLE IEUNG-WA-RIEULHIEUH 9EC1 C652 # HANGUL SYLLABLE IEUNG-WA-PIEUPSIOS 9EC2 C656 # HANGUL SYLLABLE IEUNG-WA-CIEUC 9EC3 C657 # HANGUL SYLLABLE IEUNG-WA-CHIEUCH 9EC4 C658 # HANGUL SYLLABLE IEUNG-WA-KHIEUKH 9EC5 C659 # HANGUL SYLLABLE IEUNG-WA-THIEUTH 9EC6 C65A # HANGUL SYLLABLE IEUNG-WA-PHIEUPH 9EC7 C65B # HANGUL SYLLABLE IEUNG-WA-HIEUH 9EC8 C65E # HANGUL SYLLABLE IEUNG-WAE-SSANGKIYEOK 9EC9 C65F # HANGUL SYLLABLE IEUNG-WAE-KIYEOKSIOS 9ECA C661 # HANGUL SYLLABLE IEUNG-WAE-NIEUNCIEUC 9ECB C662 # HANGUL SYLLABLE IEUNG-WAE-NIEUNHIEUH 9ECC C663 # HANGUL SYLLABLE IEUNG-WAE-TIKEUT 9ECD C664 # HANGUL SYLLABLE IEUNG-WAE-RIEUL 9ECE C665 # HANGUL SYLLABLE IEUNG-WAE-RIEULKIYEOK 9ECF C666 # HANGUL SYLLABLE IEUNG-WAE-RIEULMIEUM 9ED0 C667 # HANGUL SYLLABLE IEUNG-WAE-RIEULPIEUP 9ED1 C668 # HANGUL SYLLABLE IEUNG-WAE-RIEULSIOS 9ED2 C669 # HANGUL SYLLABLE IEUNG-WAE-RIEULTHIEUTH 9ED3 C66A # HANGUL SYLLABLE IEUNG-WAE-RIEULPHIEUPH 9ED4 C66B # HANGUL SYLLABLE IEUNG-WAE-RIEULHIEUH 9ED5 C66D # HANGUL SYLLABLE IEUNG-WAE-PIEUP 9ED6 C66E # HANGUL SYLLABLE IEUNG-WAE-PIEUPSIOS 9ED7 C670 # HANGUL SYLLABLE IEUNG-WAE-SSANGSIOS 9ED8 C672 # HANGUL SYLLABLE IEUNG-WAE-CIEUC 9ED9 C673 # HANGUL SYLLABLE IEUNG-WAE-CHIEUCH 9EDA C674 # HANGUL SYLLABLE IEUNG-WAE-KHIEUKH 9EDB C675 # HANGUL SYLLABLE IEUNG-WAE-THIEUTH 9EDC C676 # HANGUL SYLLABLE IEUNG-WAE-PHIEUPH 9EDD C677 # HANGUL SYLLABLE IEUNG-WAE-HIEUH 9EDE C67A # HANGUL SYLLABLE IEUNG-OE-SSANGKIYEOK 9EDF C67B # HANGUL SYLLABLE IEUNG-OE-KIYEOKSIOS 9EE0 C67D # HANGUL SYLLABLE IEUNG-OE-NIEUNCIEUC 9EE1 C67E # HANGUL SYLLABLE IEUNG-OE-NIEUNHIEUH 9EE2 C67F # HANGUL SYLLABLE IEUNG-OE-TIKEUT 9EE3 C681 # HANGUL SYLLABLE IEUNG-OE-RIEULKIYEOK 9EE4 C682 # HANGUL SYLLABLE IEUNG-OE-RIEULMIEUM 9EE5 C683 # HANGUL SYLLABLE IEUNG-OE-RIEULPIEUP 9EE6 C684 # HANGUL SYLLABLE IEUNG-OE-RIEULSIOS 9EE7 C685 # HANGUL SYLLABLE IEUNG-OE-RIEULTHIEUTH 9EE8 C686 # HANGUL SYLLABLE IEUNG-OE-RIEULPHIEUPH 9EE9 C687 # HANGUL SYLLABLE IEUNG-OE-RIEULHIEUH 9EEA C68A # HANGUL SYLLABLE IEUNG-OE-PIEUPSIOS 9EEB C68C # HANGUL SYLLABLE IEUNG-OE-SSANGSIOS 9EEC C68E # HANGUL SYLLABLE IEUNG-OE-CIEUC 9EED C68F # HANGUL SYLLABLE IEUNG-OE-CHIEUCH 9EEE C690 # HANGUL SYLLABLE IEUNG-OE-KHIEUKH 9EEF C691 # HANGUL SYLLABLE IEUNG-OE-THIEUTH 9EF0 C692 # HANGUL SYLLABLE IEUNG-OE-PHIEUPH 9EF1 C693 # HANGUL SYLLABLE IEUNG-OE-HIEUH 9EF2 C696 # HANGUL SYLLABLE IEUNG-YO-SSANGKIYEOK 9EF3 C697 # HANGUL SYLLABLE IEUNG-YO-KIYEOKSIOS 9EF4 C699 # HANGUL SYLLABLE IEUNG-YO-NIEUNCIEUC 9EF5 C69A # HANGUL SYLLABLE IEUNG-YO-NIEUNHIEUH 9EF6 C69B # HANGUL SYLLABLE IEUNG-YO-TIKEUT 9EF7 C69D # HANGUL SYLLABLE IEUNG-YO-RIEULKIYEOK 9EF8 C69E # HANGUL SYLLABLE IEUNG-YO-RIEULMIEUM 9EF9 C69F # HANGUL SYLLABLE IEUNG-YO-RIEULPIEUP 9EFA C6A0 # HANGUL SYLLABLE IEUNG-YO-RIEULSIOS 9EFB C6A1 # HANGUL SYLLABLE IEUNG-YO-RIEULTHIEUTH 9EFC C6A2 # HANGUL SYLLABLE IEUNG-YO-RIEULPHIEUPH 9EFD C6A3 # HANGUL SYLLABLE IEUNG-YO-RIEULHIEUH 9EFE C6A6 # HANGUL SYLLABLE IEUNG-YO-PIEUPSIOS 9F41 C6A8 # HANGUL SYLLABLE IEUNG-YO-SSANGSIOS 9F42 C6AA # HANGUL SYLLABLE IEUNG-YO-CIEUC 9F43 C6AB # HANGUL SYLLABLE IEUNG-YO-CHIEUCH 9F44 C6AC # HANGUL SYLLABLE IEUNG-YO-KHIEUKH 9F45 C6AD # HANGUL SYLLABLE IEUNG-YO-THIEUTH 9F46 C6AE # HANGUL SYLLABLE IEUNG-YO-PHIEUPH 9F47 C6AF # HANGUL SYLLABLE IEUNG-YO-HIEUH 9F48 C6B2 # HANGUL SYLLABLE IEUNG-U-SSANGKIYEOK 9F49 C6B3 # HANGUL SYLLABLE IEUNG-U-KIYEOKSIOS 9F4A C6B5 # HANGUL SYLLABLE IEUNG-U-NIEUNCIEUC 9F4B C6B6 # HANGUL SYLLABLE IEUNG-U-NIEUNHIEUH 9F4C C6B7 # HANGUL SYLLABLE IEUNG-U-TIKEUT 9F4D C6BB # HANGUL SYLLABLE IEUNG-U-RIEULPIEUP 9F4E C6BC # HANGUL SYLLABLE IEUNG-U-RIEULSIOS 9F4F C6BD # HANGUL SYLLABLE IEUNG-U-RIEULTHIEUTH 9F50 C6BE # HANGUL SYLLABLE IEUNG-U-RIEULPHIEUPH 9F51 C6BF # HANGUL SYLLABLE IEUNG-U-RIEULHIEUH 9F52 C6C2 # HANGUL SYLLABLE IEUNG-U-PIEUPSIOS 9F53 C6C4 # HANGUL SYLLABLE IEUNG-U-SSANGSIOS 9F54 C6C6 # HANGUL SYLLABLE IEUNG-U-CIEUC 9F55 C6C7 # HANGUL SYLLABLE IEUNG-U-CHIEUCH 9F56 C6C8 # HANGUL SYLLABLE IEUNG-U-KHIEUKH 9F57 C6C9 # HANGUL SYLLABLE IEUNG-U-THIEUTH 9F58 C6CA # HANGUL SYLLABLE IEUNG-U-PHIEUPH 9F59 C6CB # HANGUL SYLLABLE IEUNG-U-HIEUH 9F5A C6CE # HANGUL SYLLABLE IEUNG-WEO-SSANGKIYEOK 9F61 C6CF # HANGUL SYLLABLE IEUNG-WEO-KIYEOKSIOS 9F62 C6D1 # HANGUL SYLLABLE IEUNG-WEO-NIEUNCIEUC 9F63 C6D2 # HANGUL SYLLABLE IEUNG-WEO-NIEUNHIEUH 9F64 C6D3 # HANGUL SYLLABLE IEUNG-WEO-TIKEUT 9F65 C6D5 # HANGUL SYLLABLE IEUNG-WEO-RIEULKIYEOK 9F66 C6D6 # HANGUL SYLLABLE IEUNG-WEO-RIEULMIEUM 9F67 C6D7 # HANGUL SYLLABLE IEUNG-WEO-RIEULPIEUP 9F68 C6D8 # HANGUL SYLLABLE IEUNG-WEO-RIEULSIOS 9F69 C6D9 # HANGUL SYLLABLE IEUNG-WEO-RIEULTHIEUTH 9F6A C6DA # HANGUL SYLLABLE IEUNG-WEO-RIEULPHIEUPH 9F6B C6DB # HANGUL SYLLABLE IEUNG-WEO-RIEULHIEUH 9F6C C6DE # HANGUL SYLLABLE IEUNG-WEO-PIEUPSIOS 9F6D C6DF # HANGUL SYLLABLE IEUNG-WEO-SIOS 9F6E C6E2 # HANGUL SYLLABLE IEUNG-WEO-CIEUC 9F6F C6E3 # HANGUL SYLLABLE IEUNG-WEO-CHIEUCH 9F70 C6E4 # HANGUL SYLLABLE IEUNG-WEO-KHIEUKH 9F71 C6E5 # HANGUL SYLLABLE IEUNG-WEO-THIEUTH 9F72 C6E6 # HANGUL SYLLABLE IEUNG-WEO-PHIEUPH 9F73 C6E7 # HANGUL SYLLABLE IEUNG-WEO-HIEUH 9F74 C6EA # HANGUL SYLLABLE IEUNG-WE-SSANGKIYEOK 9F75 C6EB # HANGUL SYLLABLE IEUNG-WE-KIYEOKSIOS 9F76 C6ED # HANGUL SYLLABLE IEUNG-WE-NIEUNCIEUC 9F77 C6EE # HANGUL SYLLABLE IEUNG-WE-NIEUNHIEUH 9F78 C6EF # HANGUL SYLLABLE IEUNG-WE-TIKEUT 9F79 C6F1 # HANGUL SYLLABLE IEUNG-WE-RIEULKIYEOK 9F7A C6F2 # HANGUL SYLLABLE IEUNG-WE-RIEULMIEUM 9F81 C6F3 # HANGUL SYLLABLE IEUNG-WE-RIEULPIEUP 9F82 C6F4 # HANGUL SYLLABLE IEUNG-WE-RIEULSIOS 9F83 C6F5 # HANGUL SYLLABLE IEUNG-WE-RIEULTHIEUTH 9F84 C6F6 # HANGUL SYLLABLE IEUNG-WE-RIEULPHIEUPH 9F85 C6F7 # HANGUL SYLLABLE IEUNG-WE-RIEULHIEUH 9F86 C6FA # HANGUL SYLLABLE IEUNG-WE-PIEUPSIOS 9F87 C6FB # HANGUL SYLLABLE IEUNG-WE-SIOS 9F88 C6FC # HANGUL SYLLABLE IEUNG-WE-SSANGSIOS 9F89 C6FE # HANGUL SYLLABLE IEUNG-WE-CIEUC 9F8A C6FF # HANGUL SYLLABLE IEUNG-WE-CHIEUCH 9F8B C700 # HANGUL SYLLABLE IEUNG-WE-KHIEUKH 9F8C C701 # HANGUL SYLLABLE IEUNG-WE-THIEUTH 9F8D C702 # HANGUL SYLLABLE IEUNG-WE-PHIEUPH 9F8E C703 # HANGUL SYLLABLE IEUNG-WE-HIEUH 9F8F C706 # HANGUL SYLLABLE IEUNG-WI-SSANGKIYEOK 9F90 C707 # HANGUL SYLLABLE IEUNG-WI-KIYEOKSIOS 9F91 C709 # HANGUL SYLLABLE IEUNG-WI-NIEUNCIEUC 9F92 C70A # HANGUL SYLLABLE IEUNG-WI-NIEUNHIEUH 9F93 C70B # HANGUL SYLLABLE IEUNG-WI-TIKEUT 9F94 C70D # HANGUL SYLLABLE IEUNG-WI-RIEULKIYEOK 9F95 C70E # HANGUL SYLLABLE IEUNG-WI-RIEULMIEUM 9F96 C70F # HANGUL SYLLABLE IEUNG-WI-RIEULPIEUP 9F97 C710 # HANGUL SYLLABLE IEUNG-WI-RIEULSIOS 9F98 C711 # HANGUL SYLLABLE IEUNG-WI-RIEULTHIEUTH 9F99 C712 # HANGUL SYLLABLE IEUNG-WI-RIEULPHIEUPH 9F9A C713 # HANGUL SYLLABLE IEUNG-WI-RIEULHIEUH 9F9B C716 # HANGUL SYLLABLE IEUNG-WI-PIEUPSIOS 9F9C C718 # HANGUL SYLLABLE IEUNG-WI-SSANGSIOS 9F9D C71A # HANGUL SYLLABLE IEUNG-WI-CIEUC 9F9E C71B # HANGUL SYLLABLE IEUNG-WI-CHIEUCH 9F9F C71C # HANGUL SYLLABLE IEUNG-WI-KHIEUKH 9FA0 C71D # HANGUL SYLLABLE IEUNG-WI-THIEUTH 9FA1 C71E # HANGUL SYLLABLE IEUNG-WI-PHIEUPH 9FA2 C71F # HANGUL SYLLABLE IEUNG-WI-HIEUH 9FA3 C722 # HANGUL SYLLABLE IEUNG-YU-SSANGKIYEOK 9FA4 C723 # HANGUL SYLLABLE IEUNG-YU-KIYEOKSIOS 9FA5 C725 # HANGUL SYLLABLE IEUNG-YU-NIEUNCIEUC 9FA6 C726 # HANGUL SYLLABLE IEUNG-YU-NIEUNHIEUH 9FA7 C727 # HANGUL SYLLABLE IEUNG-YU-TIKEUT 9FA8 C729 # HANGUL SYLLABLE IEUNG-YU-RIEULKIYEOK 9FA9 C72A # HANGUL SYLLABLE IEUNG-YU-RIEULMIEUM 9FAA C72B # HANGUL SYLLABLE IEUNG-YU-RIEULPIEUP 9FAB C72C # HANGUL SYLLABLE IEUNG-YU-RIEULSIOS 9FAC C72D # HANGUL SYLLABLE IEUNG-YU-RIEULTHIEUTH 9FAD C72E # HANGUL SYLLABLE IEUNG-YU-RIEULPHIEUPH 9FAE C72F # HANGUL SYLLABLE IEUNG-YU-RIEULHIEUH 9FAF C732 # HANGUL SYLLABLE IEUNG-YU-PIEUPSIOS 9FB0 C734 # HANGUL SYLLABLE IEUNG-YU-SSANGSIOS 9FB1 C736 # HANGUL SYLLABLE IEUNG-YU-CIEUC 9FB2 C738 # HANGUL SYLLABLE IEUNG-YU-KHIEUKH 9FB3 C739 # HANGUL SYLLABLE IEUNG-YU-THIEUTH 9FB4 C73A # HANGUL SYLLABLE IEUNG-YU-PHIEUPH 9FB5 C73B # HANGUL SYLLABLE IEUNG-YU-HIEUH 9FB6 C73E # HANGUL SYLLABLE IEUNG-EU-SSANGKIYEOK 9FB7 C73F # HANGUL SYLLABLE IEUNG-EU-KIYEOKSIOS 9FB8 C741 # HANGUL SYLLABLE IEUNG-EU-NIEUNCIEUC 9FB9 C742 # HANGUL SYLLABLE IEUNG-EU-NIEUNHIEUH 9FBA C743 # HANGUL SYLLABLE IEUNG-EU-TIKEUT 9FBB C745 # HANGUL SYLLABLE IEUNG-EU-RIEULKIYEOK 9FBC C746 # HANGUL SYLLABLE IEUNG-EU-RIEULMIEUM 9FBD C747 # HANGUL SYLLABLE IEUNG-EU-RIEULPIEUP 9FBE C748 # HANGUL SYLLABLE IEUNG-EU-RIEULSIOS 9FBF C749 # HANGUL SYLLABLE IEUNG-EU-RIEULTHIEUTH 9FC0 C74B # HANGUL SYLLABLE IEUNG-EU-RIEULHIEUH 9FC1 C74E # HANGUL SYLLABLE IEUNG-EU-PIEUPSIOS 9FC2 C750 # HANGUL SYLLABLE IEUNG-EU-SSANGSIOS 9FC3 C759 # HANGUL SYLLABLE IEUNG-YI-KIYEOK 9FC4 C75A # HANGUL SYLLABLE IEUNG-YI-SSANGKIYEOK 9FC5 C75B # HANGUL SYLLABLE IEUNG-YI-KIYEOKSIOS 9FC6 C75D # HANGUL SYLLABLE IEUNG-YI-NIEUNCIEUC 9FC7 C75E # HANGUL SYLLABLE IEUNG-YI-NIEUNHIEUH 9FC8 C75F # HANGUL SYLLABLE IEUNG-YI-TIKEUT 9FC9 C761 # HANGUL SYLLABLE IEUNG-YI-RIEULKIYEOK 9FCA C762 # HANGUL SYLLABLE IEUNG-YI-RIEULMIEUM 9FCB C763 # HANGUL SYLLABLE IEUNG-YI-RIEULPIEUP 9FCC C764 # HANGUL SYLLABLE IEUNG-YI-RIEULSIOS 9FCD C765 # HANGUL SYLLABLE IEUNG-YI-RIEULTHIEUTH 9FCE C766 # HANGUL SYLLABLE IEUNG-YI-RIEULPHIEUPH 9FCF C767 # HANGUL SYLLABLE IEUNG-YI-RIEULHIEUH 9FD0 C769 # HANGUL SYLLABLE IEUNG-YI-PIEUP 9FD1 C76A # HANGUL SYLLABLE IEUNG-YI-PIEUPSIOS 9FD2 C76C # HANGUL SYLLABLE IEUNG-YI-SSANGSIOS 9FD3 C76D # HANGUL SYLLABLE IEUNG-YI-IEUNG 9FD4 C76E # HANGUL SYLLABLE IEUNG-YI-CIEUC 9FD5 C76F # HANGUL SYLLABLE IEUNG-YI-CHIEUCH 9FD6 C770 # HANGUL SYLLABLE IEUNG-YI-KHIEUKH 9FD7 C771 # HANGUL SYLLABLE IEUNG-YI-THIEUTH 9FD8 C772 # HANGUL SYLLABLE IEUNG-YI-PHIEUPH 9FD9 C773 # HANGUL SYLLABLE IEUNG-YI-HIEUH 9FDA C776 # HANGUL SYLLABLE IEUNG-I-SSANGKIYEOK 9FDB C777 # HANGUL SYLLABLE IEUNG-I-KIYEOKSIOS 9FDC C779 # HANGUL SYLLABLE IEUNG-I-NIEUNCIEUC 9FDD C77A # HANGUL SYLLABLE IEUNG-I-NIEUNHIEUH 9FDE C77B # HANGUL SYLLABLE IEUNG-I-TIKEUT 9FDF C77F # HANGUL SYLLABLE IEUNG-I-RIEULPIEUP 9FE0 C780 # HANGUL SYLLABLE IEUNG-I-RIEULSIOS 9FE1 C781 # HANGUL SYLLABLE IEUNG-I-RIEULTHIEUTH 9FE2 C782 # HANGUL SYLLABLE IEUNG-I-RIEULPHIEUPH 9FE3 C786 # HANGUL SYLLABLE IEUNG-I-PIEUPSIOS 9FE4 C78B # HANGUL SYLLABLE IEUNG-I-CHIEUCH 9FE5 C78C # HANGUL SYLLABLE IEUNG-I-KHIEUKH 9FE6 C78D # HANGUL SYLLABLE IEUNG-I-THIEUTH 9FE7 C78F # HANGUL SYLLABLE IEUNG-I-HIEUH 9FE8 C792 # HANGUL SYLLABLE CIEUC-A-SSANGKIYEOK 9FE9 C793 # HANGUL SYLLABLE CIEUC-A-KIYEOKSIOS 9FEA C795 # HANGUL SYLLABLE CIEUC-A-NIEUNCIEUC 9FEB C799 # HANGUL SYLLABLE CIEUC-A-RIEULKIYEOK 9FEC C79B # HANGUL SYLLABLE CIEUC-A-RIEULPIEUP 9FED C79C # HANGUL SYLLABLE CIEUC-A-RIEULSIOS 9FEE C79D # HANGUL SYLLABLE CIEUC-A-RIEULTHIEUTH 9FEF C79E # HANGUL SYLLABLE CIEUC-A-RIEULPHIEUPH 9FF0 C79F # HANGUL SYLLABLE CIEUC-A-RIEULHIEUH 9FF1 C7A2 # HANGUL SYLLABLE CIEUC-A-PIEUPSIOS 9FF2 C7A7 # HANGUL SYLLABLE CIEUC-A-CHIEUCH 9FF3 C7A8 # HANGUL SYLLABLE CIEUC-A-KHIEUKH 9FF4 C7A9 # HANGUL SYLLABLE CIEUC-A-THIEUTH 9FF5 C7AA # HANGUL SYLLABLE CIEUC-A-PHIEUPH 9FF6 C7AB # HANGUL SYLLABLE CIEUC-A-HIEUH 9FF7 C7AE # HANGUL SYLLABLE CIEUC-AE-SSANGKIYEOK 9FF8 C7AF # HANGUL SYLLABLE CIEUC-AE-KIYEOKSIOS 9FF9 C7B1 # HANGUL SYLLABLE CIEUC-AE-NIEUNCIEUC 9FFA C7B2 # HANGUL SYLLABLE CIEUC-AE-NIEUNHIEUH 9FFB C7B3 # HANGUL SYLLABLE CIEUC-AE-TIKEUT 9FFC C7B5 # HANGUL SYLLABLE CIEUC-AE-RIEULKIYEOK 9FFD C7B6 # HANGUL SYLLABLE CIEUC-AE-RIEULMIEUM 9FFE C7B7 # HANGUL SYLLABLE CIEUC-AE-RIEULPIEUP A041 C7B8 # HANGUL SYLLABLE CIEUC-AE-RIEULSIOS A042 C7B9 # HANGUL SYLLABLE CIEUC-AE-RIEULTHIEUTH A043 C7BA # HANGUL SYLLABLE CIEUC-AE-RIEULPHIEUPH A044 C7BB # HANGUL SYLLABLE CIEUC-AE-RIEULHIEUH A045 C7BE # HANGUL SYLLABLE CIEUC-AE-PIEUPSIOS A046 C7C2 # HANGUL SYLLABLE CIEUC-AE-CIEUC A047 C7C3 # HANGUL SYLLABLE CIEUC-AE-CHIEUCH A048 C7C4 # HANGUL SYLLABLE CIEUC-AE-KHIEUKH A049 C7C5 # HANGUL SYLLABLE CIEUC-AE-THIEUTH A04A C7C6 # HANGUL SYLLABLE CIEUC-AE-PHIEUPH A04B C7C7 # HANGUL SYLLABLE CIEUC-AE-HIEUH A04C C7CA # HANGUL SYLLABLE CIEUC-YA-SSANGKIYEOK A04D C7CB # HANGUL SYLLABLE CIEUC-YA-KIYEOKSIOS A04E C7CD # HANGUL SYLLABLE CIEUC-YA-NIEUNCIEUC A04F C7CF # HANGUL SYLLABLE CIEUC-YA-TIKEUT A050 C7D1 # HANGUL SYLLABLE CIEUC-YA-RIEULKIYEOK A051 C7D2 # HANGUL SYLLABLE CIEUC-YA-RIEULMIEUM A052 C7D3 # HANGUL SYLLABLE CIEUC-YA-RIEULPIEUP A053 C7D4 # HANGUL SYLLABLE CIEUC-YA-RIEULSIOS A054 C7D5 # HANGUL SYLLABLE CIEUC-YA-RIEULTHIEUTH A055 C7D6 # HANGUL SYLLABLE CIEUC-YA-RIEULPHIEUPH A056 C7D7 # HANGUL SYLLABLE CIEUC-YA-RIEULHIEUH A057 C7D9 # HANGUL SYLLABLE CIEUC-YA-PIEUP A058 C7DA # HANGUL SYLLABLE CIEUC-YA-PIEUPSIOS A059 C7DB # HANGUL SYLLABLE CIEUC-YA-SIOS A05A C7DC # HANGUL SYLLABLE CIEUC-YA-SSANGSIOS A061 C7DE # HANGUL SYLLABLE CIEUC-YA-CIEUC A062 C7DF # HANGUL SYLLABLE CIEUC-YA-CHIEUCH A063 C7E0 # HANGUL SYLLABLE CIEUC-YA-KHIEUKH A064 C7E1 # HANGUL SYLLABLE CIEUC-YA-THIEUTH A065 C7E2 # HANGUL SYLLABLE CIEUC-YA-PHIEUPH A066 C7E3 # HANGUL SYLLABLE CIEUC-YA-HIEUH A067 C7E5 # HANGUL SYLLABLE CIEUC-YAE-KIYEOK A068 C7E6 # HANGUL SYLLABLE CIEUC-YAE-SSANGKIYEOK A069 C7E7 # HANGUL SYLLABLE CIEUC-YAE-KIYEOKSIOS A06A C7E9 # HANGUL SYLLABLE CIEUC-YAE-NIEUNCIEUC A06B C7EA # HANGUL SYLLABLE CIEUC-YAE-NIEUNHIEUH A06C C7EB # HANGUL SYLLABLE CIEUC-YAE-TIKEUT A06D C7ED # HANGUL SYLLABLE CIEUC-YAE-RIEULKIYEOK A06E C7EE # HANGUL SYLLABLE CIEUC-YAE-RIEULMIEUM A06F C7EF # HANGUL SYLLABLE CIEUC-YAE-RIEULPIEUP A070 C7F0 # HANGUL SYLLABLE CIEUC-YAE-RIEULSIOS A071 C7F1 # HANGUL SYLLABLE CIEUC-YAE-RIEULTHIEUTH A072 C7F2 # HANGUL SYLLABLE CIEUC-YAE-RIEULPHIEUPH A073 C7F3 # HANGUL SYLLABLE CIEUC-YAE-RIEULHIEUH A074 C7F4 # HANGUL SYLLABLE CIEUC-YAE-MIEUM A075 C7F5 # HANGUL SYLLABLE CIEUC-YAE-PIEUP A076 C7F6 # HANGUL SYLLABLE CIEUC-YAE-PIEUPSIOS A077 C7F7 # HANGUL SYLLABLE CIEUC-YAE-SIOS A078 C7F8 # HANGUL SYLLABLE CIEUC-YAE-SSANGSIOS A079 C7F9 # HANGUL SYLLABLE CIEUC-YAE-IEUNG A07A C7FA # HANGUL SYLLABLE CIEUC-YAE-CIEUC A081 C7FB # HANGUL SYLLABLE CIEUC-YAE-CHIEUCH A082 C7FC # HANGUL SYLLABLE CIEUC-YAE-KHIEUKH A083 C7FD # HANGUL SYLLABLE CIEUC-YAE-THIEUTH A084 C7FE # HANGUL SYLLABLE CIEUC-YAE-PHIEUPH A085 C7FF # HANGUL SYLLABLE CIEUC-YAE-HIEUH A086 C802 # HANGUL SYLLABLE CIEUC-EO-SSANGKIYEOK A087 C803 # HANGUL SYLLABLE CIEUC-EO-KIYEOKSIOS A088 C805 # HANGUL SYLLABLE CIEUC-EO-NIEUNCIEUC A089 C806 # HANGUL SYLLABLE CIEUC-EO-NIEUNHIEUH A08A C807 # HANGUL SYLLABLE CIEUC-EO-TIKEUT A08B C809 # HANGUL SYLLABLE CIEUC-EO-RIEULKIYEOK A08C C80B # HANGUL SYLLABLE CIEUC-EO-RIEULPIEUP A08D C80C # HANGUL SYLLABLE CIEUC-EO-RIEULSIOS A08E C80D # HANGUL SYLLABLE CIEUC-EO-RIEULTHIEUTH A08F C80E # HANGUL SYLLABLE CIEUC-EO-RIEULPHIEUPH A090 C80F # HANGUL SYLLABLE CIEUC-EO-RIEULHIEUH A091 C812 # HANGUL SYLLABLE CIEUC-EO-PIEUPSIOS A092 C814 # HANGUL SYLLABLE CIEUC-EO-SSANGSIOS A093 C817 # HANGUL SYLLABLE CIEUC-EO-CHIEUCH A094 C818 # HANGUL SYLLABLE CIEUC-EO-KHIEUKH A095 C819 # HANGUL SYLLABLE CIEUC-EO-THIEUTH A096 C81A # HANGUL SYLLABLE CIEUC-EO-PHIEUPH A097 C81B # HANGUL SYLLABLE CIEUC-EO-HIEUH A098 C81E # HANGUL SYLLABLE CIEUC-E-SSANGKIYEOK A099 C81F # HANGUL SYLLABLE CIEUC-E-KIYEOKSIOS A09A C821 # HANGUL SYLLABLE CIEUC-E-NIEUNCIEUC A09B C822 # HANGUL SYLLABLE CIEUC-E-NIEUNHIEUH A09C C823 # HANGUL SYLLABLE CIEUC-E-TIKEUT A09D C825 # HANGUL SYLLABLE CIEUC-E-RIEULKIYEOK A09E C826 # HANGUL SYLLABLE CIEUC-E-RIEULMIEUM A09F C827 # HANGUL SYLLABLE CIEUC-E-RIEULPIEUP A0A0 C828 # HANGUL SYLLABLE CIEUC-E-RIEULSIOS A0A1 C829 # HANGUL SYLLABLE CIEUC-E-RIEULTHIEUTH A0A2 C82A # HANGUL SYLLABLE CIEUC-E-RIEULPHIEUPH A0A3 C82B # HANGUL SYLLABLE CIEUC-E-RIEULHIEUH A0A4 C82E # HANGUL SYLLABLE CIEUC-E-PIEUPSIOS A0A5 C830 # HANGUL SYLLABLE CIEUC-E-SSANGSIOS A0A6 C832 # HANGUL SYLLABLE CIEUC-E-CIEUC A0A7 C833 # HANGUL SYLLABLE CIEUC-E-CHIEUCH A0A8 C834 # HANGUL SYLLABLE CIEUC-E-KHIEUKH A0A9 C835 # HANGUL SYLLABLE CIEUC-E-THIEUTH A0AA C836 # HANGUL SYLLABLE CIEUC-E-PHIEUPH A0AB C837 # HANGUL SYLLABLE CIEUC-E-HIEUH A0AC C839 # HANGUL SYLLABLE CIEUC-YEO-KIYEOK A0AD C83A # HANGUL SYLLABLE CIEUC-YEO-SSANGKIYEOK A0AE C83B # HANGUL SYLLABLE CIEUC-YEO-KIYEOKSIOS A0AF C83D # HANGUL SYLLABLE CIEUC-YEO-NIEUNCIEUC A0B0 C83E # HANGUL SYLLABLE CIEUC-YEO-NIEUNHIEUH A0B1 C83F # HANGUL SYLLABLE CIEUC-YEO-TIKEUT A0B2 C841 # HANGUL SYLLABLE CIEUC-YEO-RIEULKIYEOK A0B3 C842 # HANGUL SYLLABLE CIEUC-YEO-RIEULMIEUM A0B4 C843 # HANGUL SYLLABLE CIEUC-YEO-RIEULPIEUP A0B5 C844 # HANGUL SYLLABLE CIEUC-YEO-RIEULSIOS A0B6 C845 # HANGUL SYLLABLE CIEUC-YEO-RIEULTHIEUTH A0B7 C846 # HANGUL SYLLABLE CIEUC-YEO-RIEULPHIEUPH A0B8 C847 # HANGUL SYLLABLE CIEUC-YEO-RIEULHIEUH A0B9 C84A # HANGUL SYLLABLE CIEUC-YEO-PIEUPSIOS A0BA C84B # HANGUL SYLLABLE CIEUC-YEO-SIOS A0BB C84E # HANGUL SYLLABLE CIEUC-YEO-CIEUC A0BC C84F # HANGUL SYLLABLE CIEUC-YEO-CHIEUCH A0BD C850 # HANGUL SYLLABLE CIEUC-YEO-KHIEUKH A0BE C851 # HANGUL SYLLABLE CIEUC-YEO-THIEUTH A0BF C852 # HANGUL SYLLABLE CIEUC-YEO-PHIEUPH A0C0 C853 # HANGUL SYLLABLE CIEUC-YEO-HIEUH A0C1 C855 # HANGUL SYLLABLE CIEUC-YE-KIYEOK A0C2 C856 # HANGUL SYLLABLE CIEUC-YE-SSANGKIYEOK A0C3 C857 # HANGUL SYLLABLE CIEUC-YE-KIYEOKSIOS A0C4 C858 # HANGUL SYLLABLE CIEUC-YE-NIEUN A0C5 C859 # HANGUL SYLLABLE CIEUC-YE-NIEUNCIEUC A0C6 C85A # HANGUL SYLLABLE CIEUC-YE-NIEUNHIEUH A0C7 C85B # HANGUL SYLLABLE CIEUC-YE-TIKEUT A0C8 C85C # HANGUL SYLLABLE CIEUC-YE-RIEUL A0C9 C85D # HANGUL SYLLABLE CIEUC-YE-RIEULKIYEOK A0CA C85E # HANGUL SYLLABLE CIEUC-YE-RIEULMIEUM A0CB C85F # HANGUL SYLLABLE CIEUC-YE-RIEULPIEUP A0CC C860 # HANGUL SYLLABLE CIEUC-YE-RIEULSIOS A0CD C861 # HANGUL SYLLABLE CIEUC-YE-RIEULTHIEUTH A0CE C862 # HANGUL SYLLABLE CIEUC-YE-RIEULPHIEUPH A0CF C863 # HANGUL SYLLABLE CIEUC-YE-RIEULHIEUH A0D0 C864 # HANGUL SYLLABLE CIEUC-YE-MIEUM A0D1 C865 # HANGUL SYLLABLE CIEUC-YE-PIEUP A0D2 C866 # HANGUL SYLLABLE CIEUC-YE-PIEUPSIOS A0D3 C867 # HANGUL SYLLABLE CIEUC-YE-SIOS A0D4 C868 # HANGUL SYLLABLE CIEUC-YE-SSANGSIOS A0D5 C869 # HANGUL SYLLABLE CIEUC-YE-IEUNG A0D6 C86A # HANGUL SYLLABLE CIEUC-YE-CIEUC A0D7 C86B # HANGUL SYLLABLE CIEUC-YE-CHIEUCH A0D8 C86C # HANGUL SYLLABLE CIEUC-YE-KHIEUKH A0D9 C86D # HANGUL SYLLABLE CIEUC-YE-THIEUTH A0DA C86E # HANGUL SYLLABLE CIEUC-YE-PHIEUPH A0DB C86F # HANGUL SYLLABLE CIEUC-YE-HIEUH A0DC C872 # HANGUL SYLLABLE CIEUC-O-SSANGKIYEOK A0DD C873 # HANGUL SYLLABLE CIEUC-O-KIYEOKSIOS A0DE C875 # HANGUL SYLLABLE CIEUC-O-NIEUNCIEUC A0DF C876 # HANGUL SYLLABLE CIEUC-O-NIEUNHIEUH A0E0 C877 # HANGUL SYLLABLE CIEUC-O-TIKEUT A0E1 C879 # HANGUL SYLLABLE CIEUC-O-RIEULKIYEOK A0E2 C87B # HANGUL SYLLABLE CIEUC-O-RIEULPIEUP A0E3 C87C # HANGUL SYLLABLE CIEUC-O-RIEULSIOS A0E4 C87D # HANGUL SYLLABLE CIEUC-O-RIEULTHIEUTH A0E5 C87E # HANGUL SYLLABLE CIEUC-O-RIEULPHIEUPH A0E6 C87F # HANGUL SYLLABLE CIEUC-O-RIEULHIEUH A0E7 C882 # HANGUL SYLLABLE CIEUC-O-PIEUPSIOS A0E8 C884 # HANGUL SYLLABLE CIEUC-O-SSANGSIOS A0E9 C888 # HANGUL SYLLABLE CIEUC-O-KHIEUKH A0EA C889 # HANGUL SYLLABLE CIEUC-O-THIEUTH A0EB C88A # HANGUL SYLLABLE CIEUC-O-PHIEUPH A0EC C88E # HANGUL SYLLABLE CIEUC-WA-SSANGKIYEOK A0ED C88F # HANGUL SYLLABLE CIEUC-WA-KIYEOKSIOS A0EE C890 # HANGUL SYLLABLE CIEUC-WA-NIEUN A0EF C891 # HANGUL SYLLABLE CIEUC-WA-NIEUNCIEUC A0F0 C892 # HANGUL SYLLABLE CIEUC-WA-NIEUNHIEUH A0F1 C893 # HANGUL SYLLABLE CIEUC-WA-TIKEUT A0F2 C895 # HANGUL SYLLABLE CIEUC-WA-RIEULKIYEOK A0F3 C896 # HANGUL SYLLABLE CIEUC-WA-RIEULMIEUM A0F4 C897 # HANGUL SYLLABLE CIEUC-WA-RIEULPIEUP A0F5 C898 # HANGUL SYLLABLE CIEUC-WA-RIEULSIOS A0F6 C899 # HANGUL SYLLABLE CIEUC-WA-RIEULTHIEUTH A0F7 C89A # HANGUL SYLLABLE CIEUC-WA-RIEULPHIEUPH A0F8 C89B # HANGUL SYLLABLE CIEUC-WA-RIEULHIEUH A0F9 C89C # HANGUL SYLLABLE CIEUC-WA-MIEUM A0FA C89E # HANGUL SYLLABLE CIEUC-WA-PIEUPSIOS A0FB C8A0 # HANGUL SYLLABLE CIEUC-WA-SSANGSIOS A0FC C8A2 # HANGUL SYLLABLE CIEUC-WA-CIEUC A0FD C8A3 # HANGUL SYLLABLE CIEUC-WA-CHIEUCH A0FE C8A4 # HANGUL SYLLABLE CIEUC-WA-KHIEUKH A141 C8A5 # HANGUL SYLLABLE CIEUC-WA-THIEUTH A142 C8A6 # HANGUL SYLLABLE CIEUC-WA-PHIEUPH A143 C8A7 # HANGUL SYLLABLE CIEUC-WA-HIEUH A144 C8A9 # HANGUL SYLLABLE CIEUC-WAE-KIYEOK A145 C8AA # HANGUL SYLLABLE CIEUC-WAE-SSANGKIYEOK A146 C8AB # HANGUL SYLLABLE CIEUC-WAE-KIYEOKSIOS A147 C8AC # HANGUL SYLLABLE CIEUC-WAE-NIEUN A148 C8AD # HANGUL SYLLABLE CIEUC-WAE-NIEUNCIEUC A149 C8AE # HANGUL SYLLABLE CIEUC-WAE-NIEUNHIEUH A14A C8AF # HANGUL SYLLABLE CIEUC-WAE-TIKEUT A14B C8B0 # HANGUL SYLLABLE CIEUC-WAE-RIEUL A14C C8B1 # HANGUL SYLLABLE CIEUC-WAE-RIEULKIYEOK A14D C8B2 # HANGUL SYLLABLE CIEUC-WAE-RIEULMIEUM A14E C8B3 # HANGUL SYLLABLE CIEUC-WAE-RIEULPIEUP A14F C8B4 # HANGUL SYLLABLE CIEUC-WAE-RIEULSIOS A150 C8B5 # HANGUL SYLLABLE CIEUC-WAE-RIEULTHIEUTH A151 C8B6 # HANGUL SYLLABLE CIEUC-WAE-RIEULPHIEUPH A152 C8B7 # HANGUL SYLLABLE CIEUC-WAE-RIEULHIEUH A153 C8B8 # HANGUL SYLLABLE CIEUC-WAE-MIEUM A154 C8B9 # HANGUL SYLLABLE CIEUC-WAE-PIEUP A155 C8BA # HANGUL SYLLABLE CIEUC-WAE-PIEUPSIOS A156 C8BB # HANGUL SYLLABLE CIEUC-WAE-SIOS A157 C8BE # HANGUL SYLLABLE CIEUC-WAE-CIEUC A158 C8BF # HANGUL SYLLABLE CIEUC-WAE-CHIEUCH A159 C8C0 # HANGUL SYLLABLE CIEUC-WAE-KHIEUKH A15A C8C1 # HANGUL SYLLABLE CIEUC-WAE-THIEUTH A161 C8C2 # HANGUL SYLLABLE CIEUC-WAE-PHIEUPH A162 C8C3 # HANGUL SYLLABLE CIEUC-WAE-HIEUH A163 C8C5 # HANGUL SYLLABLE CIEUC-OE-KIYEOK A164 C8C6 # HANGUL SYLLABLE CIEUC-OE-SSANGKIYEOK A165 C8C7 # HANGUL SYLLABLE CIEUC-OE-KIYEOKSIOS A166 C8C9 # HANGUL SYLLABLE CIEUC-OE-NIEUNCIEUC A167 C8CA # HANGUL SYLLABLE CIEUC-OE-NIEUNHIEUH A168 C8CB # HANGUL SYLLABLE CIEUC-OE-TIKEUT A169 C8CD # HANGUL SYLLABLE CIEUC-OE-RIEULKIYEOK A16A C8CE # HANGUL SYLLABLE CIEUC-OE-RIEULMIEUM A16B C8CF # HANGUL SYLLABLE CIEUC-OE-RIEULPIEUP A16C C8D0 # HANGUL SYLLABLE CIEUC-OE-RIEULSIOS A16D C8D1 # HANGUL SYLLABLE CIEUC-OE-RIEULTHIEUTH A16E C8D2 # HANGUL SYLLABLE CIEUC-OE-RIEULPHIEUPH A16F C8D3 # HANGUL SYLLABLE CIEUC-OE-RIEULHIEUH A170 C8D6 # HANGUL SYLLABLE CIEUC-OE-PIEUPSIOS A171 C8D8 # HANGUL SYLLABLE CIEUC-OE-SSANGSIOS A172 C8DA # HANGUL SYLLABLE CIEUC-OE-CIEUC A173 C8DB # HANGUL SYLLABLE CIEUC-OE-CHIEUCH A174 C8DC # HANGUL SYLLABLE CIEUC-OE-KHIEUKH A175 C8DD # HANGUL SYLLABLE CIEUC-OE-THIEUTH A176 C8DE # HANGUL SYLLABLE CIEUC-OE-PHIEUPH A177 C8DF # HANGUL SYLLABLE CIEUC-OE-HIEUH A178 C8E2 # HANGUL SYLLABLE CIEUC-YO-SSANGKIYEOK A179 C8E3 # HANGUL SYLLABLE CIEUC-YO-KIYEOKSIOS A17A C8E5 # HANGUL SYLLABLE CIEUC-YO-NIEUNCIEUC A181 C8E6 # HANGUL SYLLABLE CIEUC-YO-NIEUNHIEUH A182 C8E7 # HANGUL SYLLABLE CIEUC-YO-TIKEUT A183 C8E8 # HANGUL SYLLABLE CIEUC-YO-RIEUL A184 C8E9 # HANGUL SYLLABLE CIEUC-YO-RIEULKIYEOK A185 C8EA # HANGUL SYLLABLE CIEUC-YO-RIEULMIEUM A186 C8EB # HANGUL SYLLABLE CIEUC-YO-RIEULPIEUP A187 C8EC # HANGUL SYLLABLE CIEUC-YO-RIEULSIOS A188 C8ED # HANGUL SYLLABLE CIEUC-YO-RIEULTHIEUTH A189 C8EE # HANGUL SYLLABLE CIEUC-YO-RIEULPHIEUPH A18A C8EF # HANGUL SYLLABLE CIEUC-YO-RIEULHIEUH A18B C8F0 # HANGUL SYLLABLE CIEUC-YO-MIEUM A18C C8F1 # HANGUL SYLLABLE CIEUC-YO-PIEUP A18D C8F2 # HANGUL SYLLABLE CIEUC-YO-PIEUPSIOS A18E C8F3 # HANGUL SYLLABLE CIEUC-YO-SIOS A18F C8F4 # HANGUL SYLLABLE CIEUC-YO-SSANGSIOS A190 C8F6 # HANGUL SYLLABLE CIEUC-YO-CIEUC A191 C8F7 # HANGUL SYLLABLE CIEUC-YO-CHIEUCH A192 C8F8 # HANGUL SYLLABLE CIEUC-YO-KHIEUKH A193 C8F9 # HANGUL SYLLABLE CIEUC-YO-THIEUTH A194 C8FA # HANGUL SYLLABLE CIEUC-YO-PHIEUPH A195 C8FB # HANGUL SYLLABLE CIEUC-YO-HIEUH A196 C8FE # HANGUL SYLLABLE CIEUC-U-SSANGKIYEOK A197 C8FF # HANGUL SYLLABLE CIEUC-U-KIYEOKSIOS A198 C901 # HANGUL SYLLABLE CIEUC-U-NIEUNCIEUC A199 C902 # HANGUL SYLLABLE CIEUC-U-NIEUNHIEUH A19A C903 # HANGUL SYLLABLE CIEUC-U-TIKEUT A19B C907 # HANGUL SYLLABLE CIEUC-U-RIEULPIEUP A19C C908 # HANGUL SYLLABLE CIEUC-U-RIEULSIOS A19D C909 # HANGUL SYLLABLE CIEUC-U-RIEULTHIEUTH A19E C90A # HANGUL SYLLABLE CIEUC-U-RIEULPHIEUPH A19F C90B # HANGUL SYLLABLE CIEUC-U-RIEULHIEUH A1A0 C90E # HANGUL SYLLABLE CIEUC-U-PIEUPSIOS A1A1 3000 # IDEOGRAPHIC SPACE A1A2 3001 # IDEOGRAPHIC COMMA A1A3 3002 # IDEOGRAPHIC FULL STOP A1A4 00B7 # MIDDLE DOT A1A5 2025 # TWO DOT LEADER A1A6 2026 # HORIZONTAL ELLIPSIS A1A7 00A8 # DIAERESIS A1A8 3003 # DITTO MARK A1A9 00AD # SOFT HYPHEN A1AA 2015 # HORIZONTAL BAR A1AB 2225 # PARALLEL TO A1AC FF3C # FULLWIDTH REVERSE SOLIDUS A1AD 223C # TILDE OPERATOR A1AE 2018 # LEFT SINGLE QUOTATION MARK A1AF 2019 # RIGHT SINGLE QUOTATION MARK A1B0 201C # LEFT DOUBLE QUOTATION MARK A1B1 201D # RIGHT DOUBLE QUOTATION MARK A1B2 3014 # LEFT TORTOISE SHELL BRACKET A1B3 3015 # RIGHT TORTOISE SHELL BRACKET A1B4 3008 # LEFT ANGLE BRACKET A1B5 3009 # RIGHT ANGLE BRACKET A1B6 300A # LEFT DOUBLE ANGLE BRACKET A1B7 300B # RIGHT DOUBLE ANGLE BRACKET A1B8 300C # LEFT CORNER BRACKET A1B9 300D # RIGHT CORNER BRACKET A1BA 300E # LEFT WHITE CORNER BRACKET A1BB 300F # RIGHT WHITE CORNER BRACKET A1BC 3010 # LEFT BLACK LENTICULAR BRACKET A1BD 3011 # RIGHT BLACK LENTICULAR BRACKET A1BE 00B1 # PLUS-MINUS SIGN A1BF 00D7 # MULTIPLICATION SIGN A1C0 00F7 # DIVISION SIGN A1C1 2260 # NOT EQUAL TO A1C2 2264 # LESS-THAN OR EQUAL TO A1C3 2265 # GREATER-THAN OR EQUAL TO A1C4 221E # INFINITY A1C5 2234 # THEREFORE A1C6 00B0 # DEGREE SIGN A1C7 2032 # PRIME A1C8 2033 # DOUBLE PRIME A1C9 2103 # DEGREE CELSIUS A1CA 212B # ANGSTROM SIGN A1CB FFE0 # FULLWIDTH CENT SIGN A1CC FFE1 # FULLWIDTH POUND SIGN A1CD FFE5 # FULLWIDTH YEN SIGN A1CE 2642 # MALE SIGN A1CF 2640 # FEMALE SIGN A1D0 2220 # ANGLE A1D1 22A5 # UP TACK A1D2 2312 # ARC A1D3 2202 # PARTIAL DIFFERENTIAL A1D4 2207 # NABLA A1D5 2261 # IDENTICAL TO A1D6 2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF A1D7 00A7 # SECTION SIGN A1D8 203B # REFERENCE MARK A1D9 2606 # WHITE STAR A1DA 2605 # BLACK STAR A1DB 25CB # WHITE CIRCLE A1DC 25CF # BLACK CIRCLE A1DD 25CE # BULLSEYE A1DE 25C7 # WHITE DIAMOND A1DF 25C6 # BLACK DIAMOND A1E0 25A1 # WHITE SQUARE A1E1 25A0 # BLACK SQUARE A1E2 25B3 # WHITE UP-POINTING TRIANGLE A1E3 25B2 # BLACK UP-POINTING TRIANGLE A1E4 25BD # WHITE DOWN-POINTING TRIANGLE A1E5 25BC # BLACK DOWN-POINTING TRIANGLE A1E6 2192 # RIGHTWARDS ARROW A1E7 2190 # LEFTWARDS ARROW A1E8 2191 # UPWARDS ARROW A1E9 2193 # DOWNWARDS ARROW A1EA 2194 # LEFT RIGHT ARROW A1EB 3013 # GETA MARK A1EC 226A # MUCH LESS-THAN A1ED 226B # MUCH GREATER-THAN A1EE 221A # SQUARE ROOT A1EF 223D # REVERSED TILDE A1F0 221D # PROPORTIONAL TO A1F1 2235 # BECAUSE A1F2 222B # INTEGRAL A1F3 222C # DOUBLE INTEGRAL A1F4 2208 # ELEMENT OF A1F5 220B # CONTAINS AS MEMBER A1F6 2286 # SUBSET OF OR EQUAL TO A1F7 2287 # SUPERSET OF OR EQUAL TO A1F8 2282 # SUBSET OF A1F9 2283 # SUPERSET OF A1FA 222A # UNION A1FB 2229 # INTERSECTION A1FC 2227 # LOGICAL AND A1FD 2228 # LOGICAL OR A1FE FFE2 # FULLWIDTH NOT SIGN A241 C910 # HANGUL SYLLABLE CIEUC-U-SSANGSIOS A242 C912 # HANGUL SYLLABLE CIEUC-U-CIEUC A243 C913 # HANGUL SYLLABLE CIEUC-U-CHIEUCH A244 C914 # HANGUL SYLLABLE CIEUC-U-KHIEUKH A245 C915 # HANGUL SYLLABLE CIEUC-U-THIEUTH A246 C916 # HANGUL SYLLABLE CIEUC-U-PHIEUPH A247 C917 # HANGUL SYLLABLE CIEUC-U-HIEUH A248 C919 # HANGUL SYLLABLE CIEUC-WEO-KIYEOK A249 C91A # HANGUL SYLLABLE CIEUC-WEO-SSANGKIYEOK A24A C91B # HANGUL SYLLABLE CIEUC-WEO-KIYEOKSIOS A24B C91C # HANGUL SYLLABLE CIEUC-WEO-NIEUN A24C C91D # HANGUL SYLLABLE CIEUC-WEO-NIEUNCIEUC A24D C91E # HANGUL SYLLABLE CIEUC-WEO-NIEUNHIEUH A24E C91F # HANGUL SYLLABLE CIEUC-WEO-TIKEUT A24F C920 # HANGUL SYLLABLE CIEUC-WEO-RIEUL A250 C921 # HANGUL SYLLABLE CIEUC-WEO-RIEULKIYEOK A251 C922 # HANGUL SYLLABLE CIEUC-WEO-RIEULMIEUM A252 C923 # HANGUL SYLLABLE CIEUC-WEO-RIEULPIEUP A253 C924 # HANGUL SYLLABLE CIEUC-WEO-RIEULSIOS A254 C925 # HANGUL SYLLABLE CIEUC-WEO-RIEULTHIEUTH A255 C926 # HANGUL SYLLABLE CIEUC-WEO-RIEULPHIEUPH A256 C927 # HANGUL SYLLABLE CIEUC-WEO-RIEULHIEUH A257 C928 # HANGUL SYLLABLE CIEUC-WEO-MIEUM A258 C929 # HANGUL SYLLABLE CIEUC-WEO-PIEUP A259 C92A # HANGUL SYLLABLE CIEUC-WEO-PIEUPSIOS A25A C92B # HANGUL SYLLABLE CIEUC-WEO-SIOS A261 C92D # HANGUL SYLLABLE CIEUC-WEO-IEUNG A262 C92E # HANGUL SYLLABLE CIEUC-WEO-CIEUC A263 C92F # HANGUL SYLLABLE CIEUC-WEO-CHIEUCH A264 C930 # HANGUL SYLLABLE CIEUC-WEO-KHIEUKH A265 C931 # HANGUL SYLLABLE CIEUC-WEO-THIEUTH A266 C932 # HANGUL SYLLABLE CIEUC-WEO-PHIEUPH A267 C933 # HANGUL SYLLABLE CIEUC-WEO-HIEUH A268 C935 # HANGUL SYLLABLE CIEUC-WE-KIYEOK A269 C936 # HANGUL SYLLABLE CIEUC-WE-SSANGKIYEOK A26A C937 # HANGUL SYLLABLE CIEUC-WE-KIYEOKSIOS A26B C938 # HANGUL SYLLABLE CIEUC-WE-NIEUN A26C C939 # HANGUL SYLLABLE CIEUC-WE-NIEUNCIEUC A26D C93A # HANGUL SYLLABLE CIEUC-WE-NIEUNHIEUH A26E C93B # HANGUL SYLLABLE CIEUC-WE-TIKEUT A26F C93C # HANGUL SYLLABLE CIEUC-WE-RIEUL A270 C93D # HANGUL SYLLABLE CIEUC-WE-RIEULKIYEOK A271 C93E # HANGUL SYLLABLE CIEUC-WE-RIEULMIEUM A272 C93F # HANGUL SYLLABLE CIEUC-WE-RIEULPIEUP A273 C940 # HANGUL SYLLABLE CIEUC-WE-RIEULSIOS A274 C941 # HANGUL SYLLABLE CIEUC-WE-RIEULTHIEUTH A275 C942 # HANGUL SYLLABLE CIEUC-WE-RIEULPHIEUPH A276 C943 # HANGUL SYLLABLE CIEUC-WE-RIEULHIEUH A277 C944 # HANGUL SYLLABLE CIEUC-WE-MIEUM A278 C945 # HANGUL SYLLABLE CIEUC-WE-PIEUP A279 C946 # HANGUL SYLLABLE CIEUC-WE-PIEUPSIOS A27A C947 # HANGUL SYLLABLE CIEUC-WE-SIOS A281 C948 # HANGUL SYLLABLE CIEUC-WE-SSANGSIOS A282 C949 # HANGUL SYLLABLE CIEUC-WE-IEUNG A283 C94A # HANGUL SYLLABLE CIEUC-WE-CIEUC A284 C94B # HANGUL SYLLABLE CIEUC-WE-CHIEUCH A285 C94C # HANGUL SYLLABLE CIEUC-WE-KHIEUKH A286 C94D # HANGUL SYLLABLE CIEUC-WE-THIEUTH A287 C94E # HANGUL SYLLABLE CIEUC-WE-PHIEUPH A288 C94F # HANGUL SYLLABLE CIEUC-WE-HIEUH A289 C952 # HANGUL SYLLABLE CIEUC-WI-SSANGKIYEOK A28A C953 # HANGUL SYLLABLE CIEUC-WI-KIYEOKSIOS A28B C955 # HANGUL SYLLABLE CIEUC-WI-NIEUNCIEUC A28C C956 # HANGUL SYLLABLE CIEUC-WI-NIEUNHIEUH A28D C957 # HANGUL SYLLABLE CIEUC-WI-TIKEUT A28E C959 # HANGUL SYLLABLE CIEUC-WI-RIEULKIYEOK A28F C95A # HANGUL SYLLABLE CIEUC-WI-RIEULMIEUM A290 C95B # HANGUL SYLLABLE CIEUC-WI-RIEULPIEUP A291 C95C # HANGUL SYLLABLE CIEUC-WI-RIEULSIOS A292 C95D # HANGUL SYLLABLE CIEUC-WI-RIEULTHIEUTH A293 C95E # HANGUL SYLLABLE CIEUC-WI-RIEULPHIEUPH A294 C95F # HANGUL SYLLABLE CIEUC-WI-RIEULHIEUH A295 C962 # HANGUL SYLLABLE CIEUC-WI-PIEUPSIOS A296 C964 # HANGUL SYLLABLE CIEUC-WI-SSANGSIOS A297 C965 # HANGUL SYLLABLE CIEUC-WI-IEUNG A298 C966 # HANGUL SYLLABLE CIEUC-WI-CIEUC A299 C967 # HANGUL SYLLABLE CIEUC-WI-CHIEUCH A29A C968 # HANGUL SYLLABLE CIEUC-WI-KHIEUKH A29B C969 # HANGUL SYLLABLE CIEUC-WI-THIEUTH A29C C96A # HANGUL SYLLABLE CIEUC-WI-PHIEUPH A29D C96B # HANGUL SYLLABLE CIEUC-WI-HIEUH A29E C96D # HANGUL SYLLABLE CIEUC-YU-KIYEOK A29F C96E # HANGUL SYLLABLE CIEUC-YU-SSANGKIYEOK A2A0 C96F # HANGUL SYLLABLE CIEUC-YU-KIYEOKSIOS A2A1 21D2 # RIGHTWARDS DOUBLE ARROW A2A2 21D4 # LEFT RIGHT DOUBLE ARROW A2A3 2200 # FOR ALL A2A4 2203 # THERE EXISTS A2A5 00B4 # ACUTE ACCENT A2A6 FF5E # FULLWIDTH TILDE A2A7 02C7 # CARON A2A8 02D8 # BREVE A2A9 02DD # DOUBLE ACUTE ACCENT A2AA 02DA # RING ABOVE A2AB 02D9 # DOT ABOVE A2AC 00B8 # CEDILLA A2AD 02DB # OGONEK A2AE 00A1 # INVERTED EXCLAMATION MARK A2AF 00BF # INVERTED QUESTION MARK A2B0 02D0 # MODIFIER LETTER TRIANGULAR COLON A2B1 222E # CONTOUR INTEGRAL A2B2 2211 # N-ARY SUMMATION A2B3 220F # N-ARY PRODUCT A2B4 00A4 # CURRENCY SIGN A2B5 2109 # DEGREE FAHRENHEIT A2B6 2030 # PER MILLE SIGN A2B7 25C1 # WHITE LEFT-POINTING TRIANGLE A2B8 25C0 # BLACK LEFT-POINTING TRIANGLE A2B9 25B7 # WHITE RIGHT-POINTING TRIANGLE A2BA 25B6 # BLACK RIGHT-POINTING TRIANGLE A2BB 2664 # WHITE SPADE SUIT A2BC 2660 # BLACK SPADE SUIT A2BD 2661 # WHITE HEART SUIT A2BE 2665 # BLACK HEART SUIT A2BF 2667 # WHITE CLUB SUIT A2C0 2663 # BLACK CLUB SUIT A2C1 2299 # CIRCLED DOT OPERATOR A2C2 25C8 # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND A2C3 25A3 # WHITE SQUARE CONTAINING BLACK SMALL SQUARE A2C4 25D0 # CIRCLE WITH LEFT HALF BLACK A2C5 25D1 # CIRCLE WITH RIGHT HALF BLACK A2C6 2592 # MEDIUM SHADE A2C7 25A4 # SQUARE WITH HORIZONTAL FILL A2C8 25A5 # SQUARE WITH VERTICAL FILL A2C9 25A8 # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL A2CA 25A7 # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL A2CB 25A6 # SQUARE WITH ORTHOGONAL CROSSHATCH FILL A2CC 25A9 # SQUARE WITH DIAGONAL CROSSHATCH FILL A2CD 2668 # HOT SPRINGS A2CE 260F # WHITE TELEPHONE A2CF 260E # BLACK TELEPHONE A2D0 261C # WHITE LEFT POINTING INDEX A2D1 261E # WHITE RIGHT POINTING INDEX A2D2 00B6 # PILCROW SIGN A2D3 2020 # DAGGER A2D4 2021 # DOUBLE DAGGER A2D5 2195 # UP DOWN ARROW A2D6 2197 # NORTH EAST ARROW A2D7 2199 # SOUTH WEST ARROW A2D8 2196 # NORTH WEST ARROW A2D9 2198 # SOUTH EAST ARROW A2DA 266D # MUSIC FLAT SIGN A2DB 2669 # QUARTER NOTE A2DC 266A # EIGHTH NOTE A2DD 266C # BEAMED SIXTEENTH NOTES A2DE 327F # KOREAN STANDARD SYMBOL A2DF 321C # PARENTHESIZED HANGUL CIEUC U A2E0 2116 # NUMERO SIGN A2E1 33C7 # SQUARE CO A2E2 2122 # TRADE MARK SIGN A2E3 33C2 # SQUARE AM A2E4 33D8 # SQUARE PM A2E5 2121 # TELEPHONE SIGN A341 C971 # HANGUL SYLLABLE CIEUC-YU-NIEUNCIEUC A342 C972 # HANGUL SYLLABLE CIEUC-YU-NIEUNHIEUH A343 C973 # HANGUL SYLLABLE CIEUC-YU-TIKEUT A344 C975 # HANGUL SYLLABLE CIEUC-YU-RIEULKIYEOK A345 C976 # HANGUL SYLLABLE CIEUC-YU-RIEULMIEUM A346 C977 # HANGUL SYLLABLE CIEUC-YU-RIEULPIEUP A347 C978 # HANGUL SYLLABLE CIEUC-YU-RIEULSIOS A348 C979 # HANGUL SYLLABLE CIEUC-YU-RIEULTHIEUTH A349 C97A # HANGUL SYLLABLE CIEUC-YU-RIEULPHIEUPH A34A C97B # HANGUL SYLLABLE CIEUC-YU-RIEULHIEUH A34B C97D # HANGUL SYLLABLE CIEUC-YU-PIEUP A34C C97E # HANGUL SYLLABLE CIEUC-YU-PIEUPSIOS A34D C97F # HANGUL SYLLABLE CIEUC-YU-SIOS A34E C980 # HANGUL SYLLABLE CIEUC-YU-SSANGSIOS A34F C981 # HANGUL SYLLABLE CIEUC-YU-IEUNG A350 C982 # HANGUL SYLLABLE CIEUC-YU-CIEUC A351 C983 # HANGUL SYLLABLE CIEUC-YU-CHIEUCH A352 C984 # HANGUL SYLLABLE CIEUC-YU-KHIEUKH A353 C985 # HANGUL SYLLABLE CIEUC-YU-THIEUTH A354 C986 # HANGUL SYLLABLE CIEUC-YU-PHIEUPH A355 C987 # HANGUL SYLLABLE CIEUC-YU-HIEUH A356 C98A # HANGUL SYLLABLE CIEUC-EU-SSANGKIYEOK A357 C98B # HANGUL SYLLABLE CIEUC-EU-KIYEOKSIOS A358 C98D # HANGUL SYLLABLE CIEUC-EU-NIEUNCIEUC A359 C98E # HANGUL SYLLABLE CIEUC-EU-NIEUNHIEUH A35A C98F # HANGUL SYLLABLE CIEUC-EU-TIKEUT A361 C991 # HANGUL SYLLABLE CIEUC-EU-RIEULKIYEOK A362 C992 # HANGUL SYLLABLE CIEUC-EU-RIEULMIEUM A363 C993 # HANGUL SYLLABLE CIEUC-EU-RIEULPIEUP A364 C994 # HANGUL SYLLABLE CIEUC-EU-RIEULSIOS A365 C995 # HANGUL SYLLABLE CIEUC-EU-RIEULTHIEUTH A366 C996 # HANGUL SYLLABLE CIEUC-EU-RIEULPHIEUPH A367 C997 # HANGUL SYLLABLE CIEUC-EU-RIEULHIEUH A368 C99A # HANGUL SYLLABLE CIEUC-EU-PIEUPSIOS A369 C99C # HANGUL SYLLABLE CIEUC-EU-SSANGSIOS A36A C99E # HANGUL SYLLABLE CIEUC-EU-CIEUC A36B C99F # HANGUL SYLLABLE CIEUC-EU-CHIEUCH A36C C9A0 # HANGUL SYLLABLE CIEUC-EU-KHIEUKH A36D C9A1 # HANGUL SYLLABLE CIEUC-EU-THIEUTH A36E C9A2 # HANGUL SYLLABLE CIEUC-EU-PHIEUPH A36F C9A3 # HANGUL SYLLABLE CIEUC-EU-HIEUH A370 C9A4 # HANGUL SYLLABLE CIEUC-YI A371 C9A5 # HANGUL SYLLABLE CIEUC-YI-KIYEOK A372 C9A6 # HANGUL SYLLABLE CIEUC-YI-SSANGKIYEOK A373 C9A7 # HANGUL SYLLABLE CIEUC-YI-KIYEOKSIOS A374 C9A8 # HANGUL SYLLABLE CIEUC-YI-NIEUN A375 C9A9 # HANGUL SYLLABLE CIEUC-YI-NIEUNCIEUC A376 C9AA # HANGUL SYLLABLE CIEUC-YI-NIEUNHIEUH A377 C9AB # HANGUL SYLLABLE CIEUC-YI-TIKEUT A378 C9AC # HANGUL SYLLABLE CIEUC-YI-RIEUL A379 C9AD # HANGUL SYLLABLE CIEUC-YI-RIEULKIYEOK A37A C9AE # HANGUL SYLLABLE CIEUC-YI-RIEULMIEUM A381 C9AF # HANGUL SYLLABLE CIEUC-YI-RIEULPIEUP A382 C9B0 # HANGUL SYLLABLE CIEUC-YI-RIEULSIOS A383 C9B1 # HANGUL SYLLABLE CIEUC-YI-RIEULTHIEUTH A384 C9B2 # HANGUL SYLLABLE CIEUC-YI-RIEULPHIEUPH A385 C9B3 # HANGUL SYLLABLE CIEUC-YI-RIEULHIEUH A386 C9B4 # HANGUL SYLLABLE CIEUC-YI-MIEUM A387 C9B5 # HANGUL SYLLABLE CIEUC-YI-PIEUP A388 C9B6 # HANGUL SYLLABLE CIEUC-YI-PIEUPSIOS A389 C9B7 # HANGUL SYLLABLE CIEUC-YI-SIOS A38A C9B8 # HANGUL SYLLABLE CIEUC-YI-SSANGSIOS A38B C9B9 # HANGUL SYLLABLE CIEUC-YI-IEUNG A38C C9BA # HANGUL SYLLABLE CIEUC-YI-CIEUC A38D C9BB # HANGUL SYLLABLE CIEUC-YI-CHIEUCH A38E C9BC # HANGUL SYLLABLE CIEUC-YI-KHIEUKH A38F C9BD # HANGUL SYLLABLE CIEUC-YI-THIEUTH A390 C9BE # HANGUL SYLLABLE CIEUC-YI-PHIEUPH A391 C9BF # HANGUL SYLLABLE CIEUC-YI-HIEUH A392 C9C2 # HANGUL SYLLABLE CIEUC-I-SSANGKIYEOK A393 C9C3 # HANGUL SYLLABLE CIEUC-I-KIYEOKSIOS A394 C9C5 # HANGUL SYLLABLE CIEUC-I-NIEUNCIEUC A395 C9C6 # HANGUL SYLLABLE CIEUC-I-NIEUNHIEUH A396 C9C9 # HANGUL SYLLABLE CIEUC-I-RIEULKIYEOK A397 C9CB # HANGUL SYLLABLE CIEUC-I-RIEULPIEUP A398 C9CC # HANGUL SYLLABLE CIEUC-I-RIEULSIOS A399 C9CD # HANGUL SYLLABLE CIEUC-I-RIEULTHIEUTH A39A C9CE # HANGUL SYLLABLE CIEUC-I-RIEULPHIEUPH A39B C9CF # HANGUL SYLLABLE CIEUC-I-RIEULHIEUH A39C C9D2 # HANGUL SYLLABLE CIEUC-I-PIEUPSIOS A39D C9D4 # HANGUL SYLLABLE CIEUC-I-SSANGSIOS A39E C9D7 # HANGUL SYLLABLE CIEUC-I-CHIEUCH A39F C9D8 # HANGUL SYLLABLE CIEUC-I-KHIEUKH A3A0 C9DB # HANGUL SYLLABLE CIEUC-I-HIEUH A3A1 FF01 # FULLWIDTH EXCLAMATION MARK A3A2 FF02 # FULLWIDTH QUOTATION MARK A3A3 FF03 # FULLWIDTH NUMBER SIGN A3A4 FF04 # FULLWIDTH DOLLAR SIGN A3A5 FF05 # FULLWIDTH PERCENT SIGN A3A6 FF06 # FULLWIDTH AMPERSAND A3A7 FF07 # FULLWIDTH APOSTROPHE A3A8 FF08 # FULLWIDTH LEFT PARENTHESIS A3A9 FF09 # FULLWIDTH RIGHT PARENTHESIS A3AA FF0A # FULLWIDTH ASTERISK A3AB FF0B # FULLWIDTH PLUS SIGN A3AC FF0C # FULLWIDTH COMMA A3AD FF0D # FULLWIDTH HYPHEN-MINUS A3AE FF0E # FULLWIDTH FULL STOP A3AF FF0F # FULLWIDTH SOLIDUS A3B0 FF10 # FULLWIDTH DIGIT ZERO A3B1 FF11 # FULLWIDTH DIGIT ONE A3B2 FF12 # FULLWIDTH DIGIT TWO A3B3 FF13 # FULLWIDTH DIGIT THREE A3B4 FF14 # FULLWIDTH DIGIT FOUR A3B5 FF15 # FULLWIDTH DIGIT FIVE A3B6 FF16 # FULLWIDTH DIGIT SIX A3B7 FF17 # FULLWIDTH DIGIT SEVEN A3B8 FF18 # FULLWIDTH DIGIT EIGHT A3B9 FF19 # FULLWIDTH DIGIT NINE A3BA FF1A # FULLWIDTH COLON A3BB FF1B # FULLWIDTH SEMICOLON A3BC FF1C # FULLWIDTH LESS-THAN SIGN A3BD FF1D # FULLWIDTH EQUALS SIGN A3BE FF1E # FULLWIDTH GREATER-THAN SIGN A3BF FF1F # FULLWIDTH QUESTION MARK A3C0 FF20 # FULLWIDTH COMMERCIAL AT A3C1 FF21 # FULLWIDTH LATIN CAPITAL LETTER A A3C2 FF22 # FULLWIDTH LATIN CAPITAL LETTER B A3C3 FF23 # FULLWIDTH LATIN CAPITAL LETTER C A3C4 FF24 # FULLWIDTH LATIN CAPITAL LETTER D A3C5 FF25 # FULLWIDTH LATIN CAPITAL LETTER E A3C6 FF26 # FULLWIDTH LATIN CAPITAL LETTER F A3C7 FF27 # FULLWIDTH LATIN CAPITAL LETTER G A3C8 FF28 # FULLWIDTH LATIN CAPITAL LETTER H A3C9 FF29 # FULLWIDTH LATIN CAPITAL LETTER I A3CA FF2A # FULLWIDTH LATIN CAPITAL LETTER J A3CB FF2B # FULLWIDTH LATIN CAPITAL LETTER K A3CC FF2C # FULLWIDTH LATIN CAPITAL LETTER L A3CD FF2D # FULLWIDTH LATIN CAPITAL LETTER M A3CE FF2E # FULLWIDTH LATIN CAPITAL LETTER N A3CF FF2F # FULLWIDTH LATIN CAPITAL LETTER O A3D0 FF30 # FULLWIDTH LATIN CAPITAL LETTER P A3D1 FF31 # FULLWIDTH LATIN CAPITAL LETTER Q A3D2 FF32 # FULLWIDTH LATIN CAPITAL LETTER R A3D3 FF33 # FULLWIDTH LATIN CAPITAL LETTER S A3D4 FF34 # FULLWIDTH LATIN CAPITAL LETTER T A3D5 FF35 # FULLWIDTH LATIN CAPITAL LETTER U A3D6 FF36 # FULLWIDTH LATIN CAPITAL LETTER V A3D7 FF37 # FULLWIDTH LATIN CAPITAL LETTER W A3D8 FF38 # FULLWIDTH LATIN CAPITAL LETTER X A3D9 FF39 # FULLWIDTH LATIN CAPITAL LETTER Y A3DA FF3A # FULLWIDTH LATIN CAPITAL LETTER Z A3DB FF3B # FULLWIDTH LEFT SQUARE BRACKET A3DC FFE6 # FULLWIDTH WON SIGN A3DD FF3D # FULLWIDTH RIGHT SQUARE BRACKET A3DE FF3E # FULLWIDTH CIRCUMFLEX ACCENT A3DF FF3F # FULLWIDTH LOW LINE A3E0 FF40 # FULLWIDTH GRAVE ACCENT A3E1 FF41 # FULLWIDTH LATIN SMALL LETTER A A3E2 FF42 # FULLWIDTH LATIN SMALL LETTER B A3E3 FF43 # FULLWIDTH LATIN SMALL LETTER C A3E4 FF44 # FULLWIDTH LATIN SMALL LETTER D A3E5 FF45 # FULLWIDTH LATIN SMALL LETTER E A3E6 FF46 # FULLWIDTH LATIN SMALL LETTER F A3E7 FF47 # FULLWIDTH LATIN SMALL LETTER G A3E8 FF48 # FULLWIDTH LATIN SMALL LETTER H A3E9 FF49 # FULLWIDTH LATIN SMALL LETTER I A3EA FF4A # FULLWIDTH LATIN SMALL LETTER J A3EB FF4B # FULLWIDTH LATIN SMALL LETTER K A3EC FF4C # FULLWIDTH LATIN SMALL LETTER L A3ED FF4D # FULLWIDTH LATIN SMALL LETTER M A3EE FF4E # FULLWIDTH LATIN SMALL LETTER N A3EF FF4F # FULLWIDTH LATIN SMALL LETTER O A3F0 FF50 # FULLWIDTH LATIN SMALL LETTER P A3F1 FF51 # FULLWIDTH LATIN SMALL LETTER Q A3F2 FF52 # FULLWIDTH LATIN SMALL LETTER R A3F3 FF53 # FULLWIDTH LATIN SMALL LETTER S A3F4 FF54 # FULLWIDTH LATIN SMALL LETTER T A3F5 FF55 # FULLWIDTH LATIN SMALL LETTER U A3F6 FF56 # FULLWIDTH LATIN SMALL LETTER V A3F7 FF57 # FULLWIDTH LATIN SMALL LETTER W A3F8 FF58 # FULLWIDTH LATIN SMALL LETTER X A3F9 FF59 # FULLWIDTH LATIN SMALL LETTER Y A3FA FF5A # FULLWIDTH LATIN SMALL LETTER Z A3FB FF5B # FULLWIDTH LEFT CURLY BRACKET A3FC FF5C # FULLWIDTH VERTICAL LINE A3FD FF5D # FULLWIDTH RIGHT CURLY BRACKET A3FE FFE3 # FULLWIDTH MACRON A441 C9DE # HANGUL SYLLABLE SSANGCIEUC-A-SSANGKIYEOK A442 C9DF # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOKSIOS A443 C9E1 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNCIEUC A444 C9E3 # HANGUL SYLLABLE SSANGCIEUC-A-TIKEUT A445 C9E5 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULKIYEOK A446 C9E6 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULMIEUM A447 C9E8 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULSIOS A448 C9E9 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULTHIEUTH A449 C9EA # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPHIEUPH A44A C9EB # HANGUL SYLLABLE SSANGCIEUC-A-RIEULHIEUH A44B C9EE # HANGUL SYLLABLE SSANGCIEUC-A-PIEUPSIOS A44C C9F2 # HANGUL SYLLABLE SSANGCIEUC-A-CIEUC A44D C9F3 # HANGUL SYLLABLE SSANGCIEUC-A-CHIEUCH A44E C9F4 # HANGUL SYLLABLE SSANGCIEUC-A-KHIEUKH A44F C9F5 # HANGUL SYLLABLE SSANGCIEUC-A-THIEUTH A450 C9F6 # HANGUL SYLLABLE SSANGCIEUC-A-PHIEUPH A451 C9F7 # HANGUL SYLLABLE SSANGCIEUC-A-HIEUH A452 C9FA # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGKIYEOK A453 C9FB # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOKSIOS A454 C9FD # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUNCIEUC A455 C9FE # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUNHIEUH A456 C9FF # HANGUL SYLLABLE SSANGCIEUC-AE-TIKEUT A457 CA01 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULKIYEOK A458 CA02 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULMIEUM A459 CA03 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULPIEUP A45A CA04 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULSIOS A461 CA05 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULTHIEUTH A462 CA06 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULPHIEUPH A463 CA07 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULHIEUH A464 CA0A # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUPSIOS A465 CA0E # HANGUL SYLLABLE SSANGCIEUC-AE-CIEUC A466 CA0F # HANGUL SYLLABLE SSANGCIEUC-AE-CHIEUCH A467 CA10 # HANGUL SYLLABLE SSANGCIEUC-AE-KHIEUKH A468 CA11 # HANGUL SYLLABLE SSANGCIEUC-AE-THIEUTH A469 CA12 # HANGUL SYLLABLE SSANGCIEUC-AE-PHIEUPH A46A CA13 # HANGUL SYLLABLE SSANGCIEUC-AE-HIEUH A46B CA15 # HANGUL SYLLABLE SSANGCIEUC-YA-KIYEOK A46C CA16 # HANGUL SYLLABLE SSANGCIEUC-YA-SSANGKIYEOK A46D CA17 # HANGUL SYLLABLE SSANGCIEUC-YA-KIYEOKSIOS A46E CA19 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUNCIEUC A46F CA1A # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUNHIEUH A470 CA1B # HANGUL SYLLABLE SSANGCIEUC-YA-TIKEUT A471 CA1C # HANGUL SYLLABLE SSANGCIEUC-YA-RIEUL A472 CA1D # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULKIYEOK A473 CA1E # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULMIEUM A474 CA1F # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULPIEUP A475 CA20 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULSIOS A476 CA21 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULTHIEUTH A477 CA22 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULPHIEUPH A478 CA23 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULHIEUH A479 CA24 # HANGUL SYLLABLE SSANGCIEUC-YA-MIEUM A47A CA25 # HANGUL SYLLABLE SSANGCIEUC-YA-PIEUP A481 CA26 # HANGUL SYLLABLE SSANGCIEUC-YA-PIEUPSIOS A482 CA27 # HANGUL SYLLABLE SSANGCIEUC-YA-SIOS A483 CA28 # HANGUL SYLLABLE SSANGCIEUC-YA-SSANGSIOS A484 CA2A # HANGUL SYLLABLE SSANGCIEUC-YA-CIEUC A485 CA2B # HANGUL SYLLABLE SSANGCIEUC-YA-CHIEUCH A486 CA2C # HANGUL SYLLABLE SSANGCIEUC-YA-KHIEUKH A487 CA2D # HANGUL SYLLABLE SSANGCIEUC-YA-THIEUTH A488 CA2E # HANGUL SYLLABLE SSANGCIEUC-YA-PHIEUPH A489 CA2F # HANGUL SYLLABLE SSANGCIEUC-YA-HIEUH A48A CA30 # HANGUL SYLLABLE SSANGCIEUC-YAE A48B CA31 # HANGUL SYLLABLE SSANGCIEUC-YAE-KIYEOK A48C CA32 # HANGUL SYLLABLE SSANGCIEUC-YAE-SSANGKIYEOK A48D CA33 # HANGUL SYLLABLE SSANGCIEUC-YAE-KIYEOKSIOS A48E CA34 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUN A48F CA35 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUNCIEUC A490 CA36 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUNHIEUH A491 CA37 # HANGUL SYLLABLE SSANGCIEUC-YAE-TIKEUT A492 CA38 # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEUL A493 CA39 # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULKIYEOK A494 CA3A # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULMIEUM A495 CA3B # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULPIEUP A496 CA3C # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULSIOS A497 CA3D # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULTHIEUTH A498 CA3E # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULPHIEUPH A499 CA3F # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULHIEUH A49A CA40 # HANGUL SYLLABLE SSANGCIEUC-YAE-MIEUM A49B CA41 # HANGUL SYLLABLE SSANGCIEUC-YAE-PIEUP A49C CA42 # HANGUL SYLLABLE SSANGCIEUC-YAE-PIEUPSIOS A49D CA43 # HANGUL SYLLABLE SSANGCIEUC-YAE-SIOS A49E CA44 # HANGUL SYLLABLE SSANGCIEUC-YAE-SSANGSIOS A49F CA45 # HANGUL SYLLABLE SSANGCIEUC-YAE-IEUNG A4A0 CA46 # HANGUL SYLLABLE SSANGCIEUC-YAE-CIEUC A4A1 3131 # HANGUL LETTER KIYEOK A4A2 3132 # HANGUL LETTER SSANGKIYEOK A4A3 3133 # HANGUL LETTER KIYEOK-SIOS A4A4 3134 # HANGUL LETTER NIEUN A4A5 3135 # HANGUL LETTER NIEUN-CIEUC A4A6 3136 # HANGUL LETTER NIEUN-HIEUH A4A7 3137 # HANGUL LETTER TIKEUT A4A8 3138 # HANGUL LETTER SSANGTIKEUT A4A9 3139 # HANGUL LETTER RIEUL A4AA 313A # HANGUL LETTER RIEUL-KIYEOK A4AB 313B # HANGUL LETTER RIEUL-MIEUM A4AC 313C # HANGUL LETTER RIEUL-PIEUP A4AD 313D # HANGUL LETTER RIEUL-SIOS A4AE 313E # HANGUL LETTER RIEUL-THIEUTH A4AF 313F # HANGUL LETTER RIEUL-PHIEUPH A4B0 3140 # HANGUL LETTER RIEUL-HIEUH A4B1 3141 # HANGUL LETTER MIEUM A4B2 3142 # HANGUL LETTER PIEUP A4B3 3143 # HANGUL LETTER SSANGPIEUP A4B4 3144 # HANGUL LETTER PIEUP-SIOS A4B5 3145 # HANGUL LETTER SIOS A4B6 3146 # HANGUL LETTER SSANGSIOS A4B7 3147 # HANGUL LETTER IEUNG A4B8 3148 # HANGUL LETTER CIEUC A4B9 3149 # HANGUL LETTER SSANGCIEUC A4BA 314A # HANGUL LETTER CHIEUCH A4BB 314B # HANGUL LETTER KHIEUKH A4BC 314C # HANGUL LETTER THIEUTH A4BD 314D # HANGUL LETTER PHIEUPH A4BE 314E # HANGUL LETTER HIEUH A4BF 314F # HANGUL LETTER A A4C0 3150 # HANGUL LETTER AE A4C1 3151 # HANGUL LETTER YA A4C2 3152 # HANGUL LETTER YAE A4C3 3153 # HANGUL LETTER EO A4C4 3154 # HANGUL LETTER E A4C5 3155 # HANGUL LETTER YEO A4C6 3156 # HANGUL LETTER YE A4C7 3157 # HANGUL LETTER O A4C8 3158 # HANGUL LETTER WA A4C9 3159 # HANGUL LETTER WAE A4CA 315A # HANGUL LETTER OE A4CB 315B # HANGUL LETTER YO A4CC 315C # HANGUL LETTER U A4CD 315D # HANGUL LETTER WEO A4CE 315E # HANGUL LETTER WE A4CF 315F # HANGUL LETTER WI A4D0 3160 # HANGUL LETTER YU A4D1 3161 # HANGUL LETTER EU A4D2 3162 # HANGUL LETTER YI A4D3 3163 # HANGUL LETTER I A4D4 3164 # HANGUL FILLER A4D5 3165 # HANGUL LETTER SSANGNIEUN A4D6 3166 # HANGUL LETTER NIEUN-TIKEUT A4D7 3167 # HANGUL LETTER NIEUN-SIOS A4D8 3168 # HANGUL LETTER NIEUN-PANSIOS A4D9 3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS A4DA 316A # HANGUL LETTER RIEUL-TIKEUT A4DB 316B # HANGUL LETTER RIEUL-PIEUP-SIOS A4DC 316C # HANGUL LETTER RIEUL-PANSIOS A4DD 316D # HANGUL LETTER RIEUL-YEORINHIEUH A4DE 316E # HANGUL LETTER MIEUM-PIEUP A4DF 316F # HANGUL LETTER MIEUM-SIOS A4E0 3170 # HANGUL LETTER MIEUM-PANSIOS A4E1 3171 # HANGUL LETTER KAPYEOUNMIEUM A4E2 3172 # HANGUL LETTER PIEUP-KIYEOK A4E3 3173 # HANGUL LETTER PIEUP-TIKEUT A4E4 3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK A4E5 3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT A4E6 3176 # HANGUL LETTER PIEUP-CIEUC A4E7 3177 # HANGUL LETTER PIEUP-THIEUTH A4E8 3178 # HANGUL LETTER KAPYEOUNPIEUP A4E9 3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP A4EA 317A # HANGUL LETTER SIOS-KIYEOK A4EB 317B # HANGUL LETTER SIOS-NIEUN A4EC 317C # HANGUL LETTER SIOS-TIKEUT A4ED 317D # HANGUL LETTER SIOS-PIEUP A4EE 317E # HANGUL LETTER SIOS-CIEUC A4EF 317F # HANGUL LETTER PANSIOS A4F0 3180 # HANGUL LETTER SSANGIEUNG A4F1 3181 # HANGUL LETTER YESIEUNG A4F2 3182 # HANGUL LETTER YESIEUNG-SIOS A4F3 3183 # HANGUL LETTER YESIEUNG-PANSIOS A4F4 3184 # HANGUL LETTER KAPYEOUNPHIEUPH A4F5 3185 # HANGUL LETTER SSANGHIEUH A4F6 3186 # HANGUL LETTER YEORINHIEUH A4F7 3187 # HANGUL LETTER YO-YA A4F8 3188 # HANGUL LETTER YO-YAE A4F9 3189 # HANGUL LETTER YO-I A4FA 318A # HANGUL LETTER YU-YEO A4FB 318B # HANGUL LETTER YU-YE A4FC 318C # HANGUL LETTER YU-I A4FD 318D # HANGUL LETTER ARAEA A4FE 318E # HANGUL LETTER ARAEAE A541 CA47 # HANGUL SYLLABLE SSANGCIEUC-YAE-CHIEUCH A542 CA48 # HANGUL SYLLABLE SSANGCIEUC-YAE-KHIEUKH A543 CA49 # HANGUL SYLLABLE SSANGCIEUC-YAE-THIEUTH A544 CA4A # HANGUL SYLLABLE SSANGCIEUC-YAE-PHIEUPH A545 CA4B # HANGUL SYLLABLE SSANGCIEUC-YAE-HIEUH A546 CA4E # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGKIYEOK A547 CA4F # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOKSIOS A548 CA51 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUNCIEUC A549 CA52 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUNHIEUH A54A CA53 # HANGUL SYLLABLE SSANGCIEUC-EO-TIKEUT A54B CA55 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULKIYEOK A54C CA56 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULMIEUM A54D CA57 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULPIEUP A54E CA58 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULSIOS A54F CA59 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULTHIEUTH A550 CA5A # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULPHIEUPH A551 CA5B # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULHIEUH A552 CA5E # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUPSIOS A553 CA62 # HANGUL SYLLABLE SSANGCIEUC-EO-CIEUC A554 CA63 # HANGUL SYLLABLE SSANGCIEUC-EO-CHIEUCH A555 CA64 # HANGUL SYLLABLE SSANGCIEUC-EO-KHIEUKH A556 CA65 # HANGUL SYLLABLE SSANGCIEUC-EO-THIEUTH A557 CA66 # HANGUL SYLLABLE SSANGCIEUC-EO-PHIEUPH A558 CA67 # HANGUL SYLLABLE SSANGCIEUC-EO-HIEUH A559 CA69 # HANGUL SYLLABLE SSANGCIEUC-E-KIYEOK A55A CA6A # HANGUL SYLLABLE SSANGCIEUC-E-SSANGKIYEOK A561 CA6B # HANGUL SYLLABLE SSANGCIEUC-E-KIYEOKSIOS A562 CA6C # HANGUL SYLLABLE SSANGCIEUC-E-NIEUN A563 CA6D # HANGUL SYLLABLE SSANGCIEUC-E-NIEUNCIEUC A564 CA6E # HANGUL SYLLABLE SSANGCIEUC-E-NIEUNHIEUH A565 CA6F # HANGUL SYLLABLE SSANGCIEUC-E-TIKEUT A566 CA70 # HANGUL SYLLABLE SSANGCIEUC-E-RIEUL A567 CA71 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULKIYEOK A568 CA72 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULMIEUM A569 CA73 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULPIEUP A56A CA74 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULSIOS A56B CA75 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULTHIEUTH A56C CA76 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULPHIEUPH A56D CA77 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULHIEUH A56E CA78 # HANGUL SYLLABLE SSANGCIEUC-E-MIEUM A56F CA79 # HANGUL SYLLABLE SSANGCIEUC-E-PIEUP A570 CA7A # HANGUL SYLLABLE SSANGCIEUC-E-PIEUPSIOS A571 CA7B # HANGUL SYLLABLE SSANGCIEUC-E-SIOS A572 CA7C # HANGUL SYLLABLE SSANGCIEUC-E-SSANGSIOS A573 CA7E # HANGUL SYLLABLE SSANGCIEUC-E-CIEUC A574 CA7F # HANGUL SYLLABLE SSANGCIEUC-E-CHIEUCH A575 CA80 # HANGUL SYLLABLE SSANGCIEUC-E-KHIEUKH A576 CA81 # HANGUL SYLLABLE SSANGCIEUC-E-THIEUTH A577 CA82 # HANGUL SYLLABLE SSANGCIEUC-E-PHIEUPH A578 CA83 # HANGUL SYLLABLE SSANGCIEUC-E-HIEUH A579 CA85 # HANGUL SYLLABLE SSANGCIEUC-YEO-KIYEOK A57A CA86 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGKIYEOK A581 CA87 # HANGUL SYLLABLE SSANGCIEUC-YEO-KIYEOKSIOS A582 CA88 # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUN A583 CA89 # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUNCIEUC A584 CA8A # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUNHIEUH A585 CA8B # HANGUL SYLLABLE SSANGCIEUC-YEO-TIKEUT A586 CA8C # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEUL A587 CA8D # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULKIYEOK A588 CA8E # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULMIEUM A589 CA8F # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULPIEUP A58A CA90 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULSIOS A58B CA91 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULTHIEUTH A58C CA92 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULPHIEUPH A58D CA93 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULHIEUH A58E CA94 # HANGUL SYLLABLE SSANGCIEUC-YEO-MIEUM A58F CA95 # HANGUL SYLLABLE SSANGCIEUC-YEO-PIEUP A590 CA96 # HANGUL SYLLABLE SSANGCIEUC-YEO-PIEUPSIOS A591 CA97 # HANGUL SYLLABLE SSANGCIEUC-YEO-SIOS A592 CA99 # HANGUL SYLLABLE SSANGCIEUC-YEO-IEUNG A593 CA9A # HANGUL SYLLABLE SSANGCIEUC-YEO-CIEUC A594 CA9B # HANGUL SYLLABLE SSANGCIEUC-YEO-CHIEUCH A595 CA9C # HANGUL SYLLABLE SSANGCIEUC-YEO-KHIEUKH A596 CA9D # HANGUL SYLLABLE SSANGCIEUC-YEO-THIEUTH A597 CA9E # HANGUL SYLLABLE SSANGCIEUC-YEO-PHIEUPH A598 CA9F # HANGUL SYLLABLE SSANGCIEUC-YEO-HIEUH A599 CAA0 # HANGUL SYLLABLE SSANGCIEUC-YE A59A CAA1 # HANGUL SYLLABLE SSANGCIEUC-YE-KIYEOK A59B CAA2 # HANGUL SYLLABLE SSANGCIEUC-YE-SSANGKIYEOK A59C CAA3 # HANGUL SYLLABLE SSANGCIEUC-YE-KIYEOKSIOS A59D CAA4 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUN A59E CAA5 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUNCIEUC A59F CAA6 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUNHIEUH A5A0 CAA7 # HANGUL SYLLABLE SSANGCIEUC-YE-TIKEUT A5A1 2170 # SMALL ROMAN NUMERAL ONE A5A2 2171 # SMALL ROMAN NUMERAL TWO A5A3 2172 # SMALL ROMAN NUMERAL THREE A5A4 2173 # SMALL ROMAN NUMERAL FOUR A5A5 2174 # SMALL ROMAN NUMERAL FIVE A5A6 2175 # SMALL ROMAN NUMERAL SIX A5A7 2176 # SMALL ROMAN NUMERAL SEVEN A5A8 2177 # SMALL ROMAN NUMERAL EIGHT A5A9 2178 # SMALL ROMAN NUMERAL NINE A5AA 2179 # SMALL ROMAN NUMERAL TEN A5B0 2160 # ROMAN NUMERAL ONE A5B1 2161 # ROMAN NUMERAL TWO A5B2 2162 # ROMAN NUMERAL THREE A5B3 2163 # ROMAN NUMERAL FOUR A5B4 2164 # ROMAN NUMERAL FIVE A5B5 2165 # ROMAN NUMERAL SIX A5B6 2166 # ROMAN NUMERAL SEVEN A5B7 2167 # ROMAN NUMERAL EIGHT A5B8 2168 # ROMAN NUMERAL NINE A5B9 2169 # ROMAN NUMERAL TEN A5C1 0391 # GREEK CAPITAL LETTER ALPHA A5C2 0392 # GREEK CAPITAL LETTER BETA A5C3 0393 # GREEK CAPITAL LETTER GAMMA A5C4 0394 # GREEK CAPITAL LETTER DELTA A5C5 0395 # GREEK CAPITAL LETTER EPSILON A5C6 0396 # GREEK CAPITAL LETTER ZETA A5C7 0397 # GREEK CAPITAL LETTER ETA A5C8 0398 # GREEK CAPITAL LETTER THETA A5C9 0399 # GREEK CAPITAL LETTER IOTA A5CA 039A # GREEK CAPITAL LETTER KAPPA A5CB 039B # GREEK CAPITAL LETTER LAMDA A5CC 039C # GREEK CAPITAL LETTER MU A5CD 039D # GREEK CAPITAL LETTER NU A5CE 039E # GREEK CAPITAL LETTER XI A5CF 039F # GREEK CAPITAL LETTER OMICRON A5D0 03A0 # GREEK CAPITAL LETTER PI A5D1 03A1 # GREEK CAPITAL LETTER RHO A5D2 03A3 # GREEK CAPITAL LETTER SIGMA A5D3 03A4 # GREEK CAPITAL LETTER TAU A5D4 03A5 # GREEK CAPITAL LETTER UPSILON A5D5 03A6 # GREEK CAPITAL LETTER PHI A5D6 03A7 # GREEK CAPITAL LETTER CHI A5D7 03A8 # GREEK CAPITAL LETTER PSI A5D8 03A9 # GREEK CAPITAL LETTER OMEGA A5E1 03B1 # GREEK SMALL LETTER ALPHA A5E2 03B2 # GREEK SMALL LETTER BETA A5E3 03B3 # GREEK SMALL LETTER GAMMA A5E4 03B4 # GREEK SMALL LETTER DELTA A5E5 03B5 # GREEK SMALL LETTER EPSILON A5E6 03B6 # GREEK SMALL LETTER ZETA A5E7 03B7 # GREEK SMALL LETTER ETA A5E8 03B8 # GREEK SMALL LETTER THETA A5E9 03B9 # GREEK SMALL LETTER IOTA A5EA 03BA # GREEK SMALL LETTER KAPPA A5EB 03BB # GREEK SMALL LETTER LAMDA A5EC 03BC # GREEK SMALL LETTER MU A5ED 03BD # GREEK SMALL LETTER NU A5EE 03BE # GREEK SMALL LETTER XI A5EF 03BF # GREEK SMALL LETTER OMICRON A5F0 03C0 # GREEK SMALL LETTER PI A5F1 03C1 # GREEK SMALL LETTER RHO A5F2 03C3 # GREEK SMALL LETTER SIGMA A5F3 03C4 # GREEK SMALL LETTER TAU A5F4 03C5 # GREEK SMALL LETTER UPSILON A5F5 03C6 # GREEK SMALL LETTER PHI A5F6 03C7 # GREEK SMALL LETTER CHI A5F7 03C8 # GREEK SMALL LETTER PSI A5F8 03C9 # GREEK SMALL LETTER OMEGA A641 CAA8 # HANGUL SYLLABLE SSANGCIEUC-YE-RIEUL A642 CAA9 # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULKIYEOK A643 CAAA # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULMIEUM A644 CAAB # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULPIEUP A645 CAAC # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULSIOS A646 CAAD # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULTHIEUTH A647 CAAE # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULPHIEUPH A648 CAAF # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULHIEUH A649 CAB0 # HANGUL SYLLABLE SSANGCIEUC-YE-MIEUM A64A CAB1 # HANGUL SYLLABLE SSANGCIEUC-YE-PIEUP A64B CAB2 # HANGUL SYLLABLE SSANGCIEUC-YE-PIEUPSIOS A64C CAB3 # HANGUL SYLLABLE SSANGCIEUC-YE-SIOS A64D CAB4 # HANGUL SYLLABLE SSANGCIEUC-YE-SSANGSIOS A64E CAB5 # HANGUL SYLLABLE SSANGCIEUC-YE-IEUNG A64F CAB6 # HANGUL SYLLABLE SSANGCIEUC-YE-CIEUC A650 CAB7 # HANGUL SYLLABLE SSANGCIEUC-YE-CHIEUCH A651 CAB8 # HANGUL SYLLABLE SSANGCIEUC-YE-KHIEUKH A652 CAB9 # HANGUL SYLLABLE SSANGCIEUC-YE-THIEUTH A653 CABA # HANGUL SYLLABLE SSANGCIEUC-YE-PHIEUPH A654 CABB # HANGUL SYLLABLE SSANGCIEUC-YE-HIEUH A655 CABE # HANGUL SYLLABLE SSANGCIEUC-O-SSANGKIYEOK A656 CABF # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOKSIOS A657 CAC1 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUNCIEUC A658 CAC2 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUNHIEUH A659 CAC3 # HANGUL SYLLABLE SSANGCIEUC-O-TIKEUT A65A CAC5 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULKIYEOK A661 CAC6 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULMIEUM A662 CAC7 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULPIEUP A663 CAC8 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULSIOS A664 CAC9 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULTHIEUTH A665 CACA # HANGUL SYLLABLE SSANGCIEUC-O-RIEULPHIEUPH A666 CACB # HANGUL SYLLABLE SSANGCIEUC-O-RIEULHIEUH A667 CACE # HANGUL SYLLABLE SSANGCIEUC-O-PIEUPSIOS A668 CAD0 # HANGUL SYLLABLE SSANGCIEUC-O-SSANGSIOS A669 CAD2 # HANGUL SYLLABLE SSANGCIEUC-O-CIEUC A66A CAD4 # HANGUL SYLLABLE SSANGCIEUC-O-KHIEUKH A66B CAD5 # HANGUL SYLLABLE SSANGCIEUC-O-THIEUTH A66C CAD6 # HANGUL SYLLABLE SSANGCIEUC-O-PHIEUPH A66D CAD7 # HANGUL SYLLABLE SSANGCIEUC-O-HIEUH A66E CADA # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGKIYEOK A66F CADB # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOKSIOS A670 CADC # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUN A671 CADD # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUNCIEUC A672 CADE # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUNHIEUH A673 CADF # HANGUL SYLLABLE SSANGCIEUC-WA-TIKEUT A674 CAE1 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULKIYEOK A675 CAE2 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULMIEUM A676 CAE3 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULPIEUP A677 CAE4 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULSIOS A678 CAE5 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULTHIEUTH A679 CAE6 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULPHIEUPH A67A CAE7 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULHIEUH A681 CAE8 # HANGUL SYLLABLE SSANGCIEUC-WA-MIEUM A682 CAE9 # HANGUL SYLLABLE SSANGCIEUC-WA-PIEUP A683 CAEA # HANGUL SYLLABLE SSANGCIEUC-WA-PIEUPSIOS A684 CAEB # HANGUL SYLLABLE SSANGCIEUC-WA-SIOS A685 CAED # HANGUL SYLLABLE SSANGCIEUC-WA-IEUNG A686 CAEE # HANGUL SYLLABLE SSANGCIEUC-WA-CIEUC A687 CAEF # HANGUL SYLLABLE SSANGCIEUC-WA-CHIEUCH A688 CAF0 # HANGUL SYLLABLE SSANGCIEUC-WA-KHIEUKH A689 CAF1 # HANGUL SYLLABLE SSANGCIEUC-WA-THIEUTH A68A CAF2 # HANGUL SYLLABLE SSANGCIEUC-WA-PHIEUPH A68B CAF3 # HANGUL SYLLABLE SSANGCIEUC-WA-HIEUH A68C CAF5 # HANGUL SYLLABLE SSANGCIEUC-WAE-KIYEOK A68D CAF6 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGKIYEOK A68E CAF7 # HANGUL SYLLABLE SSANGCIEUC-WAE-KIYEOKSIOS A68F CAF8 # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUN A690 CAF9 # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUNCIEUC A691 CAFA # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUNHIEUH A692 CAFB # HANGUL SYLLABLE SSANGCIEUC-WAE-TIKEUT A693 CAFC # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEUL A694 CAFD # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULKIYEOK A695 CAFE # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULMIEUM A696 CAFF # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULPIEUP A697 CB00 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULSIOS A698 CB01 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULTHIEUTH A699 CB02 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULPHIEUPH A69A CB03 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULHIEUH A69B CB04 # HANGUL SYLLABLE SSANGCIEUC-WAE-MIEUM A69C CB05 # HANGUL SYLLABLE SSANGCIEUC-WAE-PIEUP A69D CB06 # HANGUL SYLLABLE SSANGCIEUC-WAE-PIEUPSIOS A69E CB07 # HANGUL SYLLABLE SSANGCIEUC-WAE-SIOS A69F CB09 # HANGUL SYLLABLE SSANGCIEUC-WAE-IEUNG A6A0 CB0A # HANGUL SYLLABLE SSANGCIEUC-WAE-CIEUC A6A1 2500 # BOX DRAWINGS LIGHT HORIZONTAL A6A2 2502 # BOX DRAWINGS LIGHT VERTICAL A6A3 250C # BOX DRAWINGS LIGHT DOWN AND RIGHT A6A4 2510 # BOX DRAWINGS LIGHT DOWN AND LEFT A6A5 2518 # BOX DRAWINGS LIGHT UP AND LEFT A6A6 2514 # BOX DRAWINGS LIGHT UP AND RIGHT A6A7 251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT A6A8 252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL A6A9 2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT A6AA 2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL A6AB 253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL A6AC 2501 # BOX DRAWINGS HEAVY HORIZONTAL A6AD 2503 # BOX DRAWINGS HEAVY VERTICAL A6AE 250F # BOX DRAWINGS HEAVY DOWN AND RIGHT A6AF 2513 # BOX DRAWINGS HEAVY DOWN AND LEFT A6B0 251B # BOX DRAWINGS HEAVY UP AND LEFT A6B1 2517 # BOX DRAWINGS HEAVY UP AND RIGHT A6B2 2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT A6B3 2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL A6B4 252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT A6B5 253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL A6B6 254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL A6B7 2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT A6B8 252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY A6B9 2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT A6BA 2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY A6BB 253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY A6BC 251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY A6BD 2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT A6BE 2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY A6BF 2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT A6C0 2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT A6C1 2512 # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT A6C2 2511 # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY A6C3 251A # BOX DRAWINGS UP HEAVY AND LEFT LIGHT A6C4 2519 # BOX DRAWINGS UP LIGHT AND LEFT HEAVY A6C5 2516 # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT A6C6 2515 # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY A6C7 250E # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT A6C8 250D # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY A6C9 251E # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT A6CA 251F # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT A6CB 2521 # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY A6CC 2522 # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY A6CD 2526 # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT A6CE 2527 # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT A6CF 2529 # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY A6D0 252A # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY A6D1 252D # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT A6D2 252E # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT A6D3 2531 # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY A6D4 2532 # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY A6D5 2535 # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT A6D6 2536 # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT A6D7 2539 # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY A6D8 253A # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY A6D9 253D # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT A6DA 253E # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT A6DB 2540 # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT A6DC 2541 # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT A6DD 2543 # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT A6DE 2544 # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT A6DF 2545 # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT A6E0 2546 # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT A6E1 2547 # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY A6E2 2548 # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY A6E3 2549 # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY A6E4 254A # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY A741 CB0B # HANGUL SYLLABLE SSANGCIEUC-WAE-CHIEUCH A742 CB0C # HANGUL SYLLABLE SSANGCIEUC-WAE-KHIEUKH A743 CB0D # HANGUL SYLLABLE SSANGCIEUC-WAE-THIEUTH A744 CB0E # HANGUL SYLLABLE SSANGCIEUC-WAE-PHIEUPH A745 CB0F # HANGUL SYLLABLE SSANGCIEUC-WAE-HIEUH A746 CB11 # HANGUL SYLLABLE SSANGCIEUC-OE-KIYEOK A747 CB12 # HANGUL SYLLABLE SSANGCIEUC-OE-SSANGKIYEOK A748 CB13 # HANGUL SYLLABLE SSANGCIEUC-OE-KIYEOKSIOS A749 CB15 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUNCIEUC A74A CB16 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUNHIEUH A74B CB17 # HANGUL SYLLABLE SSANGCIEUC-OE-TIKEUT A74C CB19 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULKIYEOK A74D CB1A # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULMIEUM A74E CB1B # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULPIEUP A74F CB1C # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULSIOS A750 CB1D # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULTHIEUTH A751 CB1E # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULPHIEUPH A752 CB1F # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULHIEUH A753 CB22 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUPSIOS A754 CB23 # HANGUL SYLLABLE SSANGCIEUC-OE-SIOS A755 CB24 # HANGUL SYLLABLE SSANGCIEUC-OE-SSANGSIOS A756 CB25 # HANGUL SYLLABLE SSANGCIEUC-OE-IEUNG A757 CB26 # HANGUL SYLLABLE SSANGCIEUC-OE-CIEUC A758 CB27 # HANGUL SYLLABLE SSANGCIEUC-OE-CHIEUCH A759 CB28 # HANGUL SYLLABLE SSANGCIEUC-OE-KHIEUKH A75A CB29 # HANGUL SYLLABLE SSANGCIEUC-OE-THIEUTH A761 CB2A # HANGUL SYLLABLE SSANGCIEUC-OE-PHIEUPH A762 CB2B # HANGUL SYLLABLE SSANGCIEUC-OE-HIEUH A763 CB2C # HANGUL SYLLABLE SSANGCIEUC-YO A764 CB2D # HANGUL SYLLABLE SSANGCIEUC-YO-KIYEOK A765 CB2E # HANGUL SYLLABLE SSANGCIEUC-YO-SSANGKIYEOK A766 CB2F # HANGUL SYLLABLE SSANGCIEUC-YO-KIYEOKSIOS A767 CB30 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUN A768 CB31 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUNCIEUC A769 CB32 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUNHIEUH A76A CB33 # HANGUL SYLLABLE SSANGCIEUC-YO-TIKEUT A76B CB34 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEUL A76C CB35 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULKIYEOK A76D CB36 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULMIEUM A76E CB37 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULPIEUP A76F CB38 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULSIOS A770 CB39 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULTHIEUTH A771 CB3A # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULPHIEUPH A772 CB3B # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULHIEUH A773 CB3C # HANGUL SYLLABLE SSANGCIEUC-YO-MIEUM A774 CB3D # HANGUL SYLLABLE SSANGCIEUC-YO-PIEUP A775 CB3E # HANGUL SYLLABLE SSANGCIEUC-YO-PIEUPSIOS A776 CB3F # HANGUL SYLLABLE SSANGCIEUC-YO-SIOS A777 CB40 # HANGUL SYLLABLE SSANGCIEUC-YO-SSANGSIOS A778 CB42 # HANGUL SYLLABLE SSANGCIEUC-YO-CIEUC A779 CB43 # HANGUL SYLLABLE SSANGCIEUC-YO-CHIEUCH A77A CB44 # HANGUL SYLLABLE SSANGCIEUC-YO-KHIEUKH A781 CB45 # HANGUL SYLLABLE SSANGCIEUC-YO-THIEUTH A782 CB46 # HANGUL SYLLABLE SSANGCIEUC-YO-PHIEUPH A783 CB47 # HANGUL SYLLABLE SSANGCIEUC-YO-HIEUH A784 CB4A # HANGUL SYLLABLE SSANGCIEUC-U-SSANGKIYEOK A785 CB4B # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOKSIOS A786 CB4D # HANGUL SYLLABLE SSANGCIEUC-U-NIEUNCIEUC A787 CB4E # HANGUL SYLLABLE SSANGCIEUC-U-NIEUNHIEUH A788 CB4F # HANGUL SYLLABLE SSANGCIEUC-U-TIKEUT A789 CB51 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULKIYEOK A78A CB52 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULMIEUM A78B CB53 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULPIEUP A78C CB54 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULSIOS A78D CB55 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULTHIEUTH A78E CB56 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULPHIEUPH A78F CB57 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULHIEUH A790 CB5A # HANGUL SYLLABLE SSANGCIEUC-U-PIEUPSIOS A791 CB5B # HANGUL SYLLABLE SSANGCIEUC-U-SIOS A792 CB5C # HANGUL SYLLABLE SSANGCIEUC-U-SSANGSIOS A793 CB5E # HANGUL SYLLABLE SSANGCIEUC-U-CIEUC A794 CB5F # HANGUL SYLLABLE SSANGCIEUC-U-CHIEUCH A795 CB60 # HANGUL SYLLABLE SSANGCIEUC-U-KHIEUKH A796 CB61 # HANGUL SYLLABLE SSANGCIEUC-U-THIEUTH A797 CB62 # HANGUL SYLLABLE SSANGCIEUC-U-PHIEUPH A798 CB63 # HANGUL SYLLABLE SSANGCIEUC-U-HIEUH A799 CB65 # HANGUL SYLLABLE SSANGCIEUC-WEO-KIYEOK A79A CB66 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGKIYEOK A79B CB67 # HANGUL SYLLABLE SSANGCIEUC-WEO-KIYEOKSIOS A79C CB68 # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUN A79D CB69 # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUNCIEUC A79E CB6A # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUNHIEUH A79F CB6B # HANGUL SYLLABLE SSANGCIEUC-WEO-TIKEUT A7A0 CB6C # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEUL A7A1 3395 # SQUARE MU L A7A2 3396 # SQUARE ML A7A3 3397 # SQUARE DL A7A4 2113 # SCRIPT SMALL L A7A5 3398 # SQUARE KL A7A6 33C4 # SQUARE CC A7A7 33A3 # SQUARE MM CUBED A7A8 33A4 # SQUARE CM CUBED A7A9 33A5 # SQUARE M CUBED A7AA 33A6 # SQUARE KM CUBED A7AB 3399 # SQUARE FM A7AC 339A # SQUARE NM A7AD 339B # SQUARE MU M A7AE 339C # SQUARE MM A7AF 339D # SQUARE CM A7B0 339E # SQUARE KM A7B1 339F # SQUARE MM SQUARED A7B2 33A0 # SQUARE CM SQUARED A7B3 33A1 # SQUARE M SQUARED A7B4 33A2 # SQUARE KM SQUARED A7B5 33CA # SQUARE HA A7B6 338D # SQUARE MU G A7B7 338E # SQUARE MG A7B8 338F # SQUARE KG A7B9 33CF # SQUARE KT A7BA 3388 # SQUARE CAL A7BB 3389 # SQUARE KCAL A7BC 33C8 # SQUARE DB A7BD 33A7 # SQUARE M OVER S A7BE 33A8 # SQUARE M OVER S SQUARED A7BF 33B0 # SQUARE PS A7C0 33B1 # SQUARE NS A7C1 33B2 # SQUARE MU S A7C2 33B3 # SQUARE MS A7C3 33B4 # SQUARE PV A7C4 33B5 # SQUARE NV A7C5 33B6 # SQUARE MU V A7C6 33B7 # SQUARE MV A7C7 33B8 # SQUARE KV A7C8 33B9 # SQUARE MV MEGA A7C9 3380 # SQUARE PA AMPS A7CA 3381 # SQUARE NA A7CB 3382 # SQUARE MU A A7CC 3383 # SQUARE MA A7CD 3384 # SQUARE KA A7CE 33BA # SQUARE PW A7CF 33BB # SQUARE NW A7D0 33BC # SQUARE MU W A7D1 33BD # SQUARE MW A7D2 33BE # SQUARE KW A7D3 33BF # SQUARE MW MEGA A7D4 3390 # SQUARE HZ A7D5 3391 # SQUARE KHZ A7D6 3392 # SQUARE MHZ A7D7 3393 # SQUARE GHZ A7D8 3394 # SQUARE THZ A7D9 2126 # OHM SIGN A7DA 33C0 # SQUARE K OHM A7DB 33C1 # SQUARE M OHM A7DC 338A # SQUARE PF A7DD 338B # SQUARE NF A7DE 338C # SQUARE MU F A7DF 33D6 # SQUARE MOL A7E0 33C5 # SQUARE CD A7E1 33AD # SQUARE RAD A7E2 33AE # SQUARE RAD OVER S A7E3 33AF # SQUARE RAD OVER S SQUARED A7E4 33DB # SQUARE SR A7E5 33A9 # SQUARE PA A7E6 33AA # SQUARE KPA A7E7 33AB # SQUARE MPA A7E8 33AC # SQUARE GPA A7E9 33DD # SQUARE WB A7EA 33D0 # SQUARE LM A7EB 33D3 # SQUARE LX A7EC 33C3 # SQUARE BQ A7ED 33C9 # SQUARE GY A7EE 33DC # SQUARE SV A7EF 33C6 # SQUARE C OVER KG A841 CB6D # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULKIYEOK A842 CB6E # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULMIEUM A843 CB6F # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULPIEUP A844 CB70 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULSIOS A845 CB71 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULTHIEUTH A846 CB72 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULPHIEUPH A847 CB73 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULHIEUH A848 CB74 # HANGUL SYLLABLE SSANGCIEUC-WEO-MIEUM A849 CB75 # HANGUL SYLLABLE SSANGCIEUC-WEO-PIEUP A84A CB76 # HANGUL SYLLABLE SSANGCIEUC-WEO-PIEUPSIOS A84B CB77 # HANGUL SYLLABLE SSANGCIEUC-WEO-SIOS A84C CB7A # HANGUL SYLLABLE SSANGCIEUC-WEO-CIEUC A84D CB7B # HANGUL SYLLABLE SSANGCIEUC-WEO-CHIEUCH A84E CB7C # HANGUL SYLLABLE SSANGCIEUC-WEO-KHIEUKH A84F CB7D # HANGUL SYLLABLE SSANGCIEUC-WEO-THIEUTH A850 CB7E # HANGUL SYLLABLE SSANGCIEUC-WEO-PHIEUPH A851 CB7F # HANGUL SYLLABLE SSANGCIEUC-WEO-HIEUH A852 CB80 # HANGUL SYLLABLE SSANGCIEUC-WE A853 CB81 # HANGUL SYLLABLE SSANGCIEUC-WE-KIYEOK A854 CB82 # HANGUL SYLLABLE SSANGCIEUC-WE-SSANGKIYEOK A855 CB83 # HANGUL SYLLABLE SSANGCIEUC-WE-KIYEOKSIOS A856 CB84 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUN A857 CB85 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUNCIEUC A858 CB86 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUNHIEUH A859 CB87 # HANGUL SYLLABLE SSANGCIEUC-WE-TIKEUT A85A CB88 # HANGUL SYLLABLE SSANGCIEUC-WE-RIEUL A861 CB89 # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULKIYEOK A862 CB8A # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULMIEUM A863 CB8B # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULPIEUP A864 CB8C # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULSIOS A865 CB8D # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULTHIEUTH A866 CB8E # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULPHIEUPH A867 CB8F # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULHIEUH A868 CB90 # HANGUL SYLLABLE SSANGCIEUC-WE-MIEUM A869 CB91 # HANGUL SYLLABLE SSANGCIEUC-WE-PIEUP A86A CB92 # HANGUL SYLLABLE SSANGCIEUC-WE-PIEUPSIOS A86B CB93 # HANGUL SYLLABLE SSANGCIEUC-WE-SIOS A86C CB94 # HANGUL SYLLABLE SSANGCIEUC-WE-SSANGSIOS A86D CB95 # HANGUL SYLLABLE SSANGCIEUC-WE-IEUNG A86E CB96 # HANGUL SYLLABLE SSANGCIEUC-WE-CIEUC A86F CB97 # HANGUL SYLLABLE SSANGCIEUC-WE-CHIEUCH A870 CB98 # HANGUL SYLLABLE SSANGCIEUC-WE-KHIEUKH A871 CB99 # HANGUL SYLLABLE SSANGCIEUC-WE-THIEUTH A872 CB9A # HANGUL SYLLABLE SSANGCIEUC-WE-PHIEUPH A873 CB9B # HANGUL SYLLABLE SSANGCIEUC-WE-HIEUH A874 CB9D # HANGUL SYLLABLE SSANGCIEUC-WI-KIYEOK A875 CB9E # HANGUL SYLLABLE SSANGCIEUC-WI-SSANGKIYEOK A876 CB9F # HANGUL SYLLABLE SSANGCIEUC-WI-KIYEOKSIOS A877 CBA0 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUN A878 CBA1 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUNCIEUC A879 CBA2 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUNHIEUH A87A CBA3 # HANGUL SYLLABLE SSANGCIEUC-WI-TIKEUT A881 CBA4 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEUL A882 CBA5 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULKIYEOK A883 CBA6 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULMIEUM A884 CBA7 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULPIEUP A885 CBA8 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULSIOS A886 CBA9 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULTHIEUTH A887 CBAA # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULPHIEUPH A888 CBAB # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULHIEUH A889 CBAC # HANGUL SYLLABLE SSANGCIEUC-WI-MIEUM A88A CBAD # HANGUL SYLLABLE SSANGCIEUC-WI-PIEUP A88B CBAE # HANGUL SYLLABLE SSANGCIEUC-WI-PIEUPSIOS A88C CBAF # HANGUL SYLLABLE SSANGCIEUC-WI-SIOS A88D CBB0 # HANGUL SYLLABLE SSANGCIEUC-WI-SSANGSIOS A88E CBB1 # HANGUL SYLLABLE SSANGCIEUC-WI-IEUNG A88F CBB2 # HANGUL SYLLABLE SSANGCIEUC-WI-CIEUC A890 CBB3 # HANGUL SYLLABLE SSANGCIEUC-WI-CHIEUCH A891 CBB4 # HANGUL SYLLABLE SSANGCIEUC-WI-KHIEUKH A892 CBB5 # HANGUL SYLLABLE SSANGCIEUC-WI-THIEUTH A893 CBB6 # HANGUL SYLLABLE SSANGCIEUC-WI-PHIEUPH A894 CBB7 # HANGUL SYLLABLE SSANGCIEUC-WI-HIEUH A895 CBB9 # HANGUL SYLLABLE SSANGCIEUC-YU-KIYEOK A896 CBBA # HANGUL SYLLABLE SSANGCIEUC-YU-SSANGKIYEOK A897 CBBB # HANGUL SYLLABLE SSANGCIEUC-YU-KIYEOKSIOS A898 CBBC # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUN A899 CBBD # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUNCIEUC A89A CBBE # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUNHIEUH A89B CBBF # HANGUL SYLLABLE SSANGCIEUC-YU-TIKEUT A89C CBC0 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEUL A89D CBC1 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULKIYEOK A89E CBC2 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULMIEUM A89F CBC3 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULPIEUP A8A0 CBC4 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULSIOS A8A1 00C6 # LATIN CAPITAL LIGATURE AE A8A2 00D0 # LATIN CAPITAL LETTER ETH A8A3 00AA # FEMININE ORDINAL INDICATOR A8A4 0126 # LATIN CAPITAL LETTER H WITH STROKE A8A6 0132 # LATIN CAPITAL LIGATURE IJ A8A8 013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT A8A9 0141 # LATIN CAPITAL LETTER L WITH STROKE A8AA 00D8 # LATIN CAPITAL LETTER O WITH STROKE A8AB 0152 # LATIN CAPITAL LIGATURE OE A8AC 00BA # MASCULINE ORDINAL INDICATOR A8AD 00DE # LATIN CAPITAL LETTER THORN A8AE 0166 # LATIN CAPITAL LETTER T WITH STROKE A8AF 014A # LATIN CAPITAL LETTER ENG A8B1 3260 # CIRCLED HANGUL KIYEOK A8B2 3261 # CIRCLED HANGUL NIEUN A8B3 3262 # CIRCLED HANGUL TIKEUT A8B4 3263 # CIRCLED HANGUL RIEUL A8B5 3264 # CIRCLED HANGUL MIEUM A8B6 3265 # CIRCLED HANGUL PIEUP A8B7 3266 # CIRCLED HANGUL SIOS A8B8 3267 # CIRCLED HANGUL IEUNG A8B9 3268 # CIRCLED HANGUL CIEUC A8BA 3269 # CIRCLED HANGUL CHIEUCH A8BB 326A # CIRCLED HANGUL KHIEUKH A8BC 326B # CIRCLED HANGUL THIEUTH A8BD 326C # CIRCLED HANGUL PHIEUPH A8BE 326D # CIRCLED HANGUL HIEUH A8BF 326E # CIRCLED HANGUL KIYEOK A A8C0 326F # CIRCLED HANGUL NIEUN A A8C1 3270 # CIRCLED HANGUL TIKEUT A A8C2 3271 # CIRCLED HANGUL RIEUL A A8C3 3272 # CIRCLED HANGUL MIEUM A A8C4 3273 # CIRCLED HANGUL PIEUP A A8C5 3274 # CIRCLED HANGUL SIOS A A8C6 3275 # CIRCLED HANGUL IEUNG A A8C7 3276 # CIRCLED HANGUL CIEUC A A8C8 3277 # CIRCLED HANGUL CHIEUCH A A8C9 3278 # CIRCLED HANGUL KHIEUKH A A8CA 3279 # CIRCLED HANGUL THIEUTH A A8CB 327A # CIRCLED HANGUL PHIEUPH A A8CC 327B # CIRCLED HANGUL HIEUH A A8CD 24D0 # CIRCLED LATIN SMALL LETTER A A8CE 24D1 # CIRCLED LATIN SMALL LETTER B A8CF 24D2 # CIRCLED LATIN SMALL LETTER C A8D0 24D3 # CIRCLED LATIN SMALL LETTER D A8D1 24D4 # CIRCLED LATIN SMALL LETTER E A8D2 24D5 # CIRCLED LATIN SMALL LETTER F A8D3 24D6 # CIRCLED LATIN SMALL LETTER G A8D4 24D7 # CIRCLED LATIN SMALL LETTER H A8D5 24D8 # CIRCLED LATIN SMALL LETTER I A8D6 24D9 # CIRCLED LATIN SMALL LETTER J A8D7 24DA # CIRCLED LATIN SMALL LETTER K A8D8 24DB # CIRCLED LATIN SMALL LETTER L A8D9 24DC # CIRCLED LATIN SMALL LETTER M A8DA 24DD # CIRCLED LATIN SMALL LETTER N A8DB 24DE # CIRCLED LATIN SMALL LETTER O A8DC 24DF # CIRCLED LATIN SMALL LETTER P A8DD 24E0 # CIRCLED LATIN SMALL LETTER Q A8DE 24E1 # CIRCLED LATIN SMALL LETTER R A8DF 24E2 # CIRCLED LATIN SMALL LETTER S A8E0 24E3 # CIRCLED LATIN SMALL LETTER T A8E1 24E4 # CIRCLED LATIN SMALL LETTER U A8E2 24E5 # CIRCLED LATIN SMALL LETTER V A8E3 24E6 # CIRCLED LATIN SMALL LETTER W A8E4 24E7 # CIRCLED LATIN SMALL LETTER X A8E5 24E8 # CIRCLED LATIN SMALL LETTER Y A8E6 24E9 # CIRCLED LATIN SMALL LETTER Z A8E7 2460 # CIRCLED DIGIT ONE A8E8 2461 # CIRCLED DIGIT TWO A8E9 2462 # CIRCLED DIGIT THREE A8EA 2463 # CIRCLED DIGIT FOUR A8EB 2464 # CIRCLED DIGIT FIVE A8EC 2465 # CIRCLED DIGIT SIX A8ED 2466 # CIRCLED DIGIT SEVEN A8EE 2467 # CIRCLED DIGIT EIGHT A8EF 2468 # CIRCLED DIGIT NINE A8F0 2469 # CIRCLED NUMBER TEN A8F1 246A # CIRCLED NUMBER ELEVEN A8F2 246B # CIRCLED NUMBER TWELVE A8F3 246C # CIRCLED NUMBER THIRTEEN A8F4 246D # CIRCLED NUMBER FOURTEEN A8F5 246E # CIRCLED NUMBER FIFTEEN A8F6 00BD # VULGAR FRACTION ONE HALF A8F7 2153 # VULGAR FRACTION ONE THIRD A8F8 2154 # VULGAR FRACTION TWO THIRDS A8F9 00BC # VULGAR FRACTION ONE QUARTER A8FA 00BE # VULGAR FRACTION THREE QUARTERS A8FB 215B # VULGAR FRACTION ONE EIGHTH A8FC 215C # VULGAR FRACTION THREE EIGHTHS A8FD 215D # VULGAR FRACTION FIVE EIGHTHS A8FE 215E # VULGAR FRACTION SEVEN EIGHTHS A941 CBC5 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULTHIEUTH A942 CBC6 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULPHIEUPH A943 CBC7 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULHIEUH A944 CBC8 # HANGUL SYLLABLE SSANGCIEUC-YU-MIEUM A945 CBC9 # HANGUL SYLLABLE SSANGCIEUC-YU-PIEUP A946 CBCA # HANGUL SYLLABLE SSANGCIEUC-YU-PIEUPSIOS A947 CBCB # HANGUL SYLLABLE SSANGCIEUC-YU-SIOS A948 CBCC # HANGUL SYLLABLE SSANGCIEUC-YU-SSANGSIOS A949 CBCD # HANGUL SYLLABLE SSANGCIEUC-YU-IEUNG A94A CBCE # HANGUL SYLLABLE SSANGCIEUC-YU-CIEUC A94B CBCF # HANGUL SYLLABLE SSANGCIEUC-YU-CHIEUCH A94C CBD0 # HANGUL SYLLABLE SSANGCIEUC-YU-KHIEUKH A94D CBD1 # HANGUL SYLLABLE SSANGCIEUC-YU-THIEUTH A94E CBD2 # HANGUL SYLLABLE SSANGCIEUC-YU-PHIEUPH A94F CBD3 # HANGUL SYLLABLE SSANGCIEUC-YU-HIEUH A950 CBD5 # HANGUL SYLLABLE SSANGCIEUC-EU-KIYEOK A951 CBD6 # HANGUL SYLLABLE SSANGCIEUC-EU-SSANGKIYEOK A952 CBD7 # HANGUL SYLLABLE SSANGCIEUC-EU-KIYEOKSIOS A953 CBD8 # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUN A954 CBD9 # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUNCIEUC A955 CBDA # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUNHIEUH A956 CBDB # HANGUL SYLLABLE SSANGCIEUC-EU-TIKEUT A957 CBDC # HANGUL SYLLABLE SSANGCIEUC-EU-RIEUL A958 CBDD # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULKIYEOK A959 CBDE # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULMIEUM A95A CBDF # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULPIEUP A961 CBE0 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULSIOS A962 CBE1 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULTHIEUTH A963 CBE2 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULPHIEUPH A964 CBE3 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULHIEUH A965 CBE5 # HANGUL SYLLABLE SSANGCIEUC-EU-PIEUP A966 CBE6 # HANGUL SYLLABLE SSANGCIEUC-EU-PIEUPSIOS A967 CBE8 # HANGUL SYLLABLE SSANGCIEUC-EU-SSANGSIOS A968 CBEA # HANGUL SYLLABLE SSANGCIEUC-EU-CIEUC A969 CBEB # HANGUL SYLLABLE SSANGCIEUC-EU-CHIEUCH A96A CBEC # HANGUL SYLLABLE SSANGCIEUC-EU-KHIEUKH A96B CBED # HANGUL SYLLABLE SSANGCIEUC-EU-THIEUTH A96C CBEE # HANGUL SYLLABLE SSANGCIEUC-EU-PHIEUPH A96D CBEF # HANGUL SYLLABLE SSANGCIEUC-EU-HIEUH A96E CBF0 # HANGUL SYLLABLE SSANGCIEUC-YI A96F CBF1 # HANGUL SYLLABLE SSANGCIEUC-YI-KIYEOK A970 CBF2 # HANGUL SYLLABLE SSANGCIEUC-YI-SSANGKIYEOK A971 CBF3 # HANGUL SYLLABLE SSANGCIEUC-YI-KIYEOKSIOS A972 CBF4 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUN A973 CBF5 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUNCIEUC A974 CBF6 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUNHIEUH A975 CBF7 # HANGUL SYLLABLE SSANGCIEUC-YI-TIKEUT A976 CBF8 # HANGUL SYLLABLE SSANGCIEUC-YI-RIEUL A977 CBF9 # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULKIYEOK A978 CBFA # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULMIEUM A979 CBFB # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULPIEUP A97A CBFC # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULSIOS A981 CBFD # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULTHIEUTH A982 CBFE # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULPHIEUPH A983 CBFF # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULHIEUH A984 CC00 # HANGUL SYLLABLE SSANGCIEUC-YI-MIEUM A985 CC01 # HANGUL SYLLABLE SSANGCIEUC-YI-PIEUP A986 CC02 # HANGUL SYLLABLE SSANGCIEUC-YI-PIEUPSIOS A987 CC03 # HANGUL SYLLABLE SSANGCIEUC-YI-SIOS A988 CC04 # HANGUL SYLLABLE SSANGCIEUC-YI-SSANGSIOS A989 CC05 # HANGUL SYLLABLE SSANGCIEUC-YI-IEUNG A98A CC06 # HANGUL SYLLABLE SSANGCIEUC-YI-CIEUC A98B CC07 # HANGUL SYLLABLE SSANGCIEUC-YI-CHIEUCH A98C CC08 # HANGUL SYLLABLE SSANGCIEUC-YI-KHIEUKH A98D CC09 # HANGUL SYLLABLE SSANGCIEUC-YI-THIEUTH A98E CC0A # HANGUL SYLLABLE SSANGCIEUC-YI-PHIEUPH A98F CC0B # HANGUL SYLLABLE SSANGCIEUC-YI-HIEUH A990 CC0E # HANGUL SYLLABLE SSANGCIEUC-I-SSANGKIYEOK A991 CC0F # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOKSIOS A992 CC11 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUNCIEUC A993 CC12 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUNHIEUH A994 CC13 # HANGUL SYLLABLE SSANGCIEUC-I-TIKEUT A995 CC15 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULKIYEOK A996 CC16 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULMIEUM A997 CC17 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULPIEUP A998 CC18 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULSIOS A999 CC19 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULTHIEUTH A99A CC1A # HANGUL SYLLABLE SSANGCIEUC-I-RIEULPHIEUPH A99B CC1B # HANGUL SYLLABLE SSANGCIEUC-I-RIEULHIEUH A99C CC1E # HANGUL SYLLABLE SSANGCIEUC-I-PIEUPSIOS A99D CC1F # HANGUL SYLLABLE SSANGCIEUC-I-SIOS A99E CC20 # HANGUL SYLLABLE SSANGCIEUC-I-SSANGSIOS A99F CC23 # HANGUL SYLLABLE SSANGCIEUC-I-CHIEUCH A9A0 CC24 # HANGUL SYLLABLE SSANGCIEUC-I-KHIEUKH A9A1 00E6 # LATIN SMALL LIGATURE AE A9A2 0111 # LATIN SMALL LETTER D WITH STROKE A9A3 00F0 # LATIN SMALL LETTER ETH A9A4 0127 # LATIN SMALL LETTER H WITH STROKE A9A5 0131 # LATIN SMALL LETTER DOTLESS I A9A6 0133 # LATIN SMALL LIGATURE IJ A9A7 0138 # LATIN SMALL LETTER KRA A9A8 0140 # LATIN SMALL LETTER L WITH MIDDLE DOT A9A9 0142 # LATIN SMALL LETTER L WITH STROKE A9AA 00F8 # LATIN SMALL LETTER O WITH STROKE A9AB 0153 # LATIN SMALL LIGATURE OE A9AC 00DF # LATIN SMALL LETTER SHARP S A9AD 00FE # LATIN SMALL LETTER THORN A9AE 0167 # LATIN SMALL LETTER T WITH STROKE A9AF 014B # LATIN SMALL LETTER ENG A9B0 0149 # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE A9B1 3200 # PARENTHESIZED HANGUL KIYEOK A9B2 3201 # PARENTHESIZED HANGUL NIEUN A9B3 3202 # PARENTHESIZED HANGUL TIKEUT A9B4 3203 # PARENTHESIZED HANGUL RIEUL A9B5 3204 # PARENTHESIZED HANGUL MIEUM A9B6 3205 # PARENTHESIZED HANGUL PIEUP A9B7 3206 # PARENTHESIZED HANGUL SIOS A9B8 3207 # PARENTHESIZED HANGUL IEUNG A9B9 3208 # PARENTHESIZED HANGUL CIEUC A9BA 3209 # PARENTHESIZED HANGUL CHIEUCH A9BB 320A # PARENTHESIZED HANGUL KHIEUKH A9BC 320B # PARENTHESIZED HANGUL THIEUTH A9BD 320C # PARENTHESIZED HANGUL PHIEUPH A9BE 320D # PARENTHESIZED HANGUL HIEUH A9BF 320E # PARENTHESIZED HANGUL KIYEOK A A9C0 320F # PARENTHESIZED HANGUL NIEUN A A9C1 3210 # PARENTHESIZED HANGUL TIKEUT A A9C2 3211 # PARENTHESIZED HANGUL RIEUL A A9C3 3212 # PARENTHESIZED HANGUL MIEUM A A9C4 3213 # PARENTHESIZED HANGUL PIEUP A A9C5 3214 # PARENTHESIZED HANGUL SIOS A A9C6 3215 # PARENTHESIZED HANGUL IEUNG A A9C7 3216 # PARENTHESIZED HANGUL CIEUC A A9C8 3217 # PARENTHESIZED HANGUL CHIEUCH A A9C9 3218 # PARENTHESIZED HANGUL KHIEUKH A A9CA 3219 # PARENTHESIZED HANGUL THIEUTH A A9CB 321A # PARENTHESIZED HANGUL PHIEUPH A A9CC 321B # PARENTHESIZED HANGUL HIEUH A A9CD 249C # PARENTHESIZED LATIN SMALL LETTER A A9CE 249D # PARENTHESIZED LATIN SMALL LETTER B A9CF 249E # PARENTHESIZED LATIN SMALL LETTER C A9D0 249F # PARENTHESIZED LATIN SMALL LETTER D A9D1 24A0 # PARENTHESIZED LATIN SMALL LETTER E A9D2 24A1 # PARENTHESIZED LATIN SMALL LETTER F A9D3 24A2 # PARENTHESIZED LATIN SMALL LETTER G A9D4 24A3 # PARENTHESIZED LATIN SMALL LETTER H A9D5 24A4 # PARENTHESIZED LATIN SMALL LETTER I A9D6 24A5 # PARENTHESIZED LATIN SMALL LETTER J A9D7 24A6 # PARENTHESIZED LATIN SMALL LETTER K A9D8 24A7 # PARENTHESIZED LATIN SMALL LETTER L A9D9 24A8 # PARENTHESIZED LATIN SMALL LETTER M A9DA 24A9 # PARENTHESIZED LATIN SMALL LETTER N A9DB 24AA # PARENTHESIZED LATIN SMALL LETTER O A9DC 24AB # PARENTHESIZED LATIN SMALL LETTER P A9DD 24AC # PARENTHESIZED LATIN SMALL LETTER Q A9DE 24AD # PARENTHESIZED LATIN SMALL LETTER R A9DF 24AE # PARENTHESIZED LATIN SMALL LETTER S A9E0 24AF # PARENTHESIZED LATIN SMALL LETTER T A9E1 24B0 # PARENTHESIZED LATIN SMALL LETTER U A9E2 24B1 # PARENTHESIZED LATIN SMALL LETTER V A9E3 24B2 # PARENTHESIZED LATIN SMALL LETTER W A9E4 24B3 # PARENTHESIZED LATIN SMALL LETTER X A9E5 24B4 # PARENTHESIZED LATIN SMALL LETTER Y A9E6 24B5 # PARENTHESIZED LATIN SMALL LETTER Z A9E7 2474 # PARENTHESIZED DIGIT ONE A9E8 2475 # PARENTHESIZED DIGIT TWO A9E9 2476 # PARENTHESIZED DIGIT THREE A9EA 2477 # PARENTHESIZED DIGIT FOUR A9EB 2478 # PARENTHESIZED DIGIT FIVE A9EC 2479 # PARENTHESIZED DIGIT SIX A9ED 247A # PARENTHESIZED DIGIT SEVEN A9EE 247B # PARENTHESIZED DIGIT EIGHT A9EF 247C # PARENTHESIZED DIGIT NINE A9F0 247D # PARENTHESIZED NUMBER TEN A9F1 247E # PARENTHESIZED NUMBER ELEVEN A9F2 247F # PARENTHESIZED NUMBER TWELVE A9F3 2480 # PARENTHESIZED NUMBER THIRTEEN A9F4 2481 # PARENTHESIZED NUMBER FOURTEEN A9F5 2482 # PARENTHESIZED NUMBER FIFTEEN A9F6 00B9 # SUPERSCRIPT ONE A9F7 00B2 # SUPERSCRIPT TWO A9F8 00B3 # SUPERSCRIPT THREE A9F9 2074 # SUPERSCRIPT FOUR A9FA 207F # SUPERSCRIPT LATIN SMALL LETTER N A9FB 2081 # SUBSCRIPT ONE A9FC 2082 # SUBSCRIPT TWO A9FD 2083 # SUBSCRIPT THREE A9FE 2084 # SUBSCRIPT FOUR AA41 CC25 # HANGUL SYLLABLE SSANGCIEUC-I-THIEUTH AA42 CC26 # HANGUL SYLLABLE SSANGCIEUC-I-PHIEUPH AA43 CC2A # HANGUL SYLLABLE CHIEUCH-A-SSANGKIYEOK AA44 CC2B # HANGUL SYLLABLE CHIEUCH-A-KIYEOKSIOS AA45 CC2D # HANGUL SYLLABLE CHIEUCH-A-NIEUNCIEUC AA46 CC2F # HANGUL SYLLABLE CHIEUCH-A-TIKEUT AA47 CC31 # HANGUL SYLLABLE CHIEUCH-A-RIEULKIYEOK AA48 CC32 # HANGUL SYLLABLE CHIEUCH-A-RIEULMIEUM AA49 CC33 # HANGUL SYLLABLE CHIEUCH-A-RIEULPIEUP AA4A CC34 # HANGUL SYLLABLE CHIEUCH-A-RIEULSIOS AA4B CC35 # HANGUL SYLLABLE CHIEUCH-A-RIEULTHIEUTH AA4C CC36 # HANGUL SYLLABLE CHIEUCH-A-RIEULPHIEUPH AA4D CC37 # HANGUL SYLLABLE CHIEUCH-A-RIEULHIEUH AA4E CC3A # HANGUL SYLLABLE CHIEUCH-A-PIEUPSIOS AA4F CC3F # HANGUL SYLLABLE CHIEUCH-A-CHIEUCH AA50 CC40 # HANGUL SYLLABLE CHIEUCH-A-KHIEUKH AA51 CC41 # HANGUL SYLLABLE CHIEUCH-A-THIEUTH AA52 CC42 # HANGUL SYLLABLE CHIEUCH-A-PHIEUPH AA53 CC43 # HANGUL SYLLABLE CHIEUCH-A-HIEUH AA54 CC46 # HANGUL SYLLABLE CHIEUCH-AE-SSANGKIYEOK AA55 CC47 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOKSIOS AA56 CC49 # HANGUL SYLLABLE CHIEUCH-AE-NIEUNCIEUC AA57 CC4A # HANGUL SYLLABLE CHIEUCH-AE-NIEUNHIEUH AA58 CC4B # HANGUL SYLLABLE CHIEUCH-AE-TIKEUT AA59 CC4D # HANGUL SYLLABLE CHIEUCH-AE-RIEULKIYEOK AA5A CC4E # HANGUL SYLLABLE CHIEUCH-AE-RIEULMIEUM AA61 CC4F # HANGUL SYLLABLE CHIEUCH-AE-RIEULPIEUP AA62 CC50 # HANGUL SYLLABLE CHIEUCH-AE-RIEULSIOS AA63 CC51 # HANGUL SYLLABLE CHIEUCH-AE-RIEULTHIEUTH AA64 CC52 # HANGUL SYLLABLE CHIEUCH-AE-RIEULPHIEUPH AA65 CC53 # HANGUL SYLLABLE CHIEUCH-AE-RIEULHIEUH AA66 CC56 # HANGUL SYLLABLE CHIEUCH-AE-PIEUPSIOS AA67 CC5A # HANGUL SYLLABLE CHIEUCH-AE-CIEUC AA68 CC5B # HANGUL SYLLABLE CHIEUCH-AE-CHIEUCH AA69 CC5C # HANGUL SYLLABLE CHIEUCH-AE-KHIEUKH AA6A CC5D # HANGUL SYLLABLE CHIEUCH-AE-THIEUTH AA6B CC5E # HANGUL SYLLABLE CHIEUCH-AE-PHIEUPH AA6C CC5F # HANGUL SYLLABLE CHIEUCH-AE-HIEUH AA6D CC61 # HANGUL SYLLABLE CHIEUCH-YA-KIYEOK AA6E CC62 # HANGUL SYLLABLE CHIEUCH-YA-SSANGKIYEOK AA6F CC63 # HANGUL SYLLABLE CHIEUCH-YA-KIYEOKSIOS AA70 CC65 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNCIEUC AA71 CC67 # HANGUL SYLLABLE CHIEUCH-YA-TIKEUT AA72 CC69 # HANGUL SYLLABLE CHIEUCH-YA-RIEULKIYEOK AA73 CC6A # HANGUL SYLLABLE CHIEUCH-YA-RIEULMIEUM AA74 CC6B # HANGUL SYLLABLE CHIEUCH-YA-RIEULPIEUP AA75 CC6C # HANGUL SYLLABLE CHIEUCH-YA-RIEULSIOS AA76 CC6D # HANGUL SYLLABLE CHIEUCH-YA-RIEULTHIEUTH AA77 CC6E # HANGUL SYLLABLE CHIEUCH-YA-RIEULPHIEUPH AA78 CC6F # HANGUL SYLLABLE CHIEUCH-YA-RIEULHIEUH AA79 CC71 # HANGUL SYLLABLE CHIEUCH-YA-PIEUP AA7A CC72 # HANGUL SYLLABLE CHIEUCH-YA-PIEUPSIOS AA81 CC73 # HANGUL SYLLABLE CHIEUCH-YA-SIOS AA82 CC74 # HANGUL SYLLABLE CHIEUCH-YA-SSANGSIOS AA83 CC76 # HANGUL SYLLABLE CHIEUCH-YA-CIEUC AA84 CC77 # HANGUL SYLLABLE CHIEUCH-YA-CHIEUCH AA85 CC78 # HANGUL SYLLABLE CHIEUCH-YA-KHIEUKH AA86 CC79 # HANGUL SYLLABLE CHIEUCH-YA-THIEUTH AA87 CC7A # HANGUL SYLLABLE CHIEUCH-YA-PHIEUPH AA88 CC7B # HANGUL SYLLABLE CHIEUCH-YA-HIEUH AA89 CC7C # HANGUL SYLLABLE CHIEUCH-YAE AA8A CC7D # HANGUL SYLLABLE CHIEUCH-YAE-KIYEOK AA8B CC7E # HANGUL SYLLABLE CHIEUCH-YAE-SSANGKIYEOK AA8C CC7F # HANGUL SYLLABLE CHIEUCH-YAE-KIYEOKSIOS AA8D CC80 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUN AA8E CC81 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUNCIEUC AA8F CC82 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUNHIEUH AA90 CC83 # HANGUL SYLLABLE CHIEUCH-YAE-TIKEUT AA91 CC84 # HANGUL SYLLABLE CHIEUCH-YAE-RIEUL AA92 CC85 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULKIYEOK AA93 CC86 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULMIEUM AA94 CC87 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULPIEUP AA95 CC88 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULSIOS AA96 CC89 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULTHIEUTH AA97 CC8A # HANGUL SYLLABLE CHIEUCH-YAE-RIEULPHIEUPH AA98 CC8B # HANGUL SYLLABLE CHIEUCH-YAE-RIEULHIEUH AA99 CC8C # HANGUL SYLLABLE CHIEUCH-YAE-MIEUM AA9A CC8D # HANGUL SYLLABLE CHIEUCH-YAE-PIEUP AA9B CC8E # HANGUL SYLLABLE CHIEUCH-YAE-PIEUPSIOS AA9C CC8F # HANGUL SYLLABLE CHIEUCH-YAE-SIOS AA9D CC90 # HANGUL SYLLABLE CHIEUCH-YAE-SSANGSIOS AA9E CC91 # HANGUL SYLLABLE CHIEUCH-YAE-IEUNG AA9F CC92 # HANGUL SYLLABLE CHIEUCH-YAE-CIEUC AAA0 CC93 # HANGUL SYLLABLE CHIEUCH-YAE-CHIEUCH AAA1 3041 # HIRAGANA LETTER SMALL A AAA2 3042 # HIRAGANA LETTER A AAA3 3043 # HIRAGANA LETTER SMALL I AAA4 3044 # HIRAGANA LETTER I AAA5 3045 # HIRAGANA LETTER SMALL U AAA6 3046 # HIRAGANA LETTER U AAA7 3047 # HIRAGANA LETTER SMALL E AAA8 3048 # HIRAGANA LETTER E AAA9 3049 # HIRAGANA LETTER SMALL O AAAA 304A # HIRAGANA LETTER O AAAB 304B # HIRAGANA LETTER KA AAAC 304C # HIRAGANA LETTER GA AAAD 304D # HIRAGANA LETTER KI AAAE 304E # HIRAGANA LETTER GI AAAF 304F # HIRAGANA LETTER KU AAB0 3050 # HIRAGANA LETTER GU AAB1 3051 # HIRAGANA LETTER KE AAB2 3052 # HIRAGANA LETTER GE AAB3 3053 # HIRAGANA LETTER KO AAB4 3054 # HIRAGANA LETTER GO AAB5 3055 # HIRAGANA LETTER SA AAB6 3056 # HIRAGANA LETTER ZA AAB7 3057 # HIRAGANA LETTER SI AAB8 3058 # HIRAGANA LETTER ZI AAB9 3059 # HIRAGANA LETTER SU AABA 305A # HIRAGANA LETTER ZU AABB 305B # HIRAGANA LETTER SE AABC 305C # HIRAGANA LETTER ZE AABD 305D # HIRAGANA LETTER SO AABE 305E # HIRAGANA LETTER ZO AABF 305F # HIRAGANA LETTER TA AAC0 3060 # HIRAGANA LETTER DA AAC1 3061 # HIRAGANA LETTER TI AAC2 3062 # HIRAGANA LETTER DI AAC3 3063 # HIRAGANA LETTER SMALL TU AAC4 3064 # HIRAGANA LETTER TU AAC5 3065 # HIRAGANA LETTER DU AAC6 3066 # HIRAGANA LETTER TE AAC7 3067 # HIRAGANA LETTER DE AAC8 3068 # HIRAGANA LETTER TO AAC9 3069 # HIRAGANA LETTER DO AACA 306A # HIRAGANA LETTER NA AACB 306B # HIRAGANA LETTER NI AACC 306C # HIRAGANA LETTER NU AACD 306D # HIRAGANA LETTER NE AACE 306E # HIRAGANA LETTER NO AACF 306F # HIRAGANA LETTER HA AAD0 3070 # HIRAGANA LETTER BA AAD1 3071 # HIRAGANA LETTER PA AAD2 3072 # HIRAGANA LETTER HI AAD3 3073 # HIRAGANA LETTER BI AAD4 3074 # HIRAGANA LETTER PI AAD5 3075 # HIRAGANA LETTER HU AAD6 3076 # HIRAGANA LETTER BU AAD7 3077 # HIRAGANA LETTER PU AAD8 3078 # HIRAGANA LETTER HE AAD9 3079 # HIRAGANA LETTER BE AADA 307A # HIRAGANA LETTER PE AADB 307B # HIRAGANA LETTER HO AADC 307C # HIRAGANA LETTER BO AADD 307D # HIRAGANA LETTER PO AADE 307E # HIRAGANA LETTER MA AADF 307F # HIRAGANA LETTER MI AAE0 3080 # HIRAGANA LETTER MU AAE1 3081 # HIRAGANA LETTER ME AAE2 3082 # HIRAGANA LETTER MO AAE3 3083 # HIRAGANA LETTER SMALL YA AAE4 3084 # HIRAGANA LETTER YA AAE5 3085 # HIRAGANA LETTER SMALL YU AAE6 3086 # HIRAGANA LETTER YU AAE7 3087 # HIRAGANA LETTER SMALL YO AAE8 3088 # HIRAGANA LETTER YO AAE9 3089 # HIRAGANA LETTER RA AAEA 308A # HIRAGANA LETTER RI AAEB 308B # HIRAGANA LETTER RU AAEC 308C # HIRAGANA LETTER RE AAED 308D # HIRAGANA LETTER RO AAEE 308E # HIRAGANA LETTER SMALL WA AAEF 308F # HIRAGANA LETTER WA AAF0 3090 # HIRAGANA LETTER WI AAF1 3091 # HIRAGANA LETTER WE AAF2 3092 # HIRAGANA LETTER WO AAF3 3093 # HIRAGANA LETTER N AB41 CC94 # HANGUL SYLLABLE CHIEUCH-YAE-KHIEUKH AB42 CC95 # HANGUL SYLLABLE CHIEUCH-YAE-THIEUTH AB43 CC96 # HANGUL SYLLABLE CHIEUCH-YAE-PHIEUPH AB44 CC97 # HANGUL SYLLABLE CHIEUCH-YAE-HIEUH AB45 CC9A # HANGUL SYLLABLE CHIEUCH-EO-SSANGKIYEOK AB46 CC9B # HANGUL SYLLABLE CHIEUCH-EO-KIYEOKSIOS AB47 CC9D # HANGUL SYLLABLE CHIEUCH-EO-NIEUNCIEUC AB48 CC9E # HANGUL SYLLABLE CHIEUCH-EO-NIEUNHIEUH AB49 CC9F # HANGUL SYLLABLE CHIEUCH-EO-TIKEUT AB4A CCA1 # HANGUL SYLLABLE CHIEUCH-EO-RIEULKIYEOK AB4B CCA2 # HANGUL SYLLABLE CHIEUCH-EO-RIEULMIEUM AB4C CCA3 # HANGUL SYLLABLE CHIEUCH-EO-RIEULPIEUP AB4D CCA4 # HANGUL SYLLABLE CHIEUCH-EO-RIEULSIOS AB4E CCA5 # HANGUL SYLLABLE CHIEUCH-EO-RIEULTHIEUTH AB4F CCA6 # HANGUL SYLLABLE CHIEUCH-EO-RIEULPHIEUPH AB50 CCA7 # HANGUL SYLLABLE CHIEUCH-EO-RIEULHIEUH AB51 CCAA # HANGUL SYLLABLE CHIEUCH-EO-PIEUPSIOS AB52 CCAE # HANGUL SYLLABLE CHIEUCH-EO-CIEUC AB53 CCAF # HANGUL SYLLABLE CHIEUCH-EO-CHIEUCH AB54 CCB0 # HANGUL SYLLABLE CHIEUCH-EO-KHIEUKH AB55 CCB1 # HANGUL SYLLABLE CHIEUCH-EO-THIEUTH AB56 CCB2 # HANGUL SYLLABLE CHIEUCH-EO-PHIEUPH AB57 CCB3 # HANGUL SYLLABLE CHIEUCH-EO-HIEUH AB58 CCB6 # HANGUL SYLLABLE CHIEUCH-E-SSANGKIYEOK AB59 CCB7 # HANGUL SYLLABLE CHIEUCH-E-KIYEOKSIOS AB5A CCB9 # HANGUL SYLLABLE CHIEUCH-E-NIEUNCIEUC AB61 CCBA # HANGUL SYLLABLE CHIEUCH-E-NIEUNHIEUH AB62 CCBB # HANGUL SYLLABLE CHIEUCH-E-TIKEUT AB63 CCBD # HANGUL SYLLABLE CHIEUCH-E-RIEULKIYEOK AB64 CCBE # HANGUL SYLLABLE CHIEUCH-E-RIEULMIEUM AB65 CCBF # HANGUL SYLLABLE CHIEUCH-E-RIEULPIEUP AB66 CCC0 # HANGUL SYLLABLE CHIEUCH-E-RIEULSIOS AB67 CCC1 # HANGUL SYLLABLE CHIEUCH-E-RIEULTHIEUTH AB68 CCC2 # HANGUL SYLLABLE CHIEUCH-E-RIEULPHIEUPH AB69 CCC3 # HANGUL SYLLABLE CHIEUCH-E-RIEULHIEUH AB6A CCC6 # HANGUL SYLLABLE CHIEUCH-E-PIEUPSIOS AB6B CCC8 # HANGUL SYLLABLE CHIEUCH-E-SSANGSIOS AB6C CCCA # HANGUL SYLLABLE CHIEUCH-E-CIEUC AB6D CCCB # HANGUL SYLLABLE CHIEUCH-E-CHIEUCH AB6E CCCC # HANGUL SYLLABLE CHIEUCH-E-KHIEUKH AB6F CCCD # HANGUL SYLLABLE CHIEUCH-E-THIEUTH AB70 CCCE # HANGUL SYLLABLE CHIEUCH-E-PHIEUPH AB71 CCCF # HANGUL SYLLABLE CHIEUCH-E-HIEUH AB72 CCD1 # HANGUL SYLLABLE CHIEUCH-YEO-KIYEOK AB73 CCD2 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGKIYEOK AB74 CCD3 # HANGUL SYLLABLE CHIEUCH-YEO-KIYEOKSIOS AB75 CCD5 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUNCIEUC AB76 CCD6 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUNHIEUH AB77 CCD7 # HANGUL SYLLABLE CHIEUCH-YEO-TIKEUT AB78 CCD8 # HANGUL SYLLABLE CHIEUCH-YEO-RIEUL AB79 CCD9 # HANGUL SYLLABLE CHIEUCH-YEO-RIEULKIYEOK AB7A CCDA # HANGUL SYLLABLE CHIEUCH-YEO-RIEULMIEUM AB81 CCDB # HANGUL SYLLABLE CHIEUCH-YEO-RIEULPIEUP AB82 CCDC # HANGUL SYLLABLE CHIEUCH-YEO-RIEULSIOS AB83 CCDD # HANGUL SYLLABLE CHIEUCH-YEO-RIEULTHIEUTH AB84 CCDE # HANGUL SYLLABLE CHIEUCH-YEO-RIEULPHIEUPH AB85 CCDF # HANGUL SYLLABLE CHIEUCH-YEO-RIEULHIEUH AB86 CCE0 # HANGUL SYLLABLE CHIEUCH-YEO-MIEUM AB87 CCE1 # HANGUL SYLLABLE CHIEUCH-YEO-PIEUP AB88 CCE2 # HANGUL SYLLABLE CHIEUCH-YEO-PIEUPSIOS AB89 CCE3 # HANGUL SYLLABLE CHIEUCH-YEO-SIOS AB8A CCE5 # HANGUL SYLLABLE CHIEUCH-YEO-IEUNG AB8B CCE6 # HANGUL SYLLABLE CHIEUCH-YEO-CIEUC AB8C CCE7 # HANGUL SYLLABLE CHIEUCH-YEO-CHIEUCH AB8D CCE8 # HANGUL SYLLABLE CHIEUCH-YEO-KHIEUKH AB8E CCE9 # HANGUL SYLLABLE CHIEUCH-YEO-THIEUTH AB8F CCEA # HANGUL SYLLABLE CHIEUCH-YEO-PHIEUPH AB90 CCEB # HANGUL SYLLABLE CHIEUCH-YEO-HIEUH AB91 CCED # HANGUL SYLLABLE CHIEUCH-YE-KIYEOK AB92 CCEE # HANGUL SYLLABLE CHIEUCH-YE-SSANGKIYEOK AB93 CCEF # HANGUL SYLLABLE CHIEUCH-YE-KIYEOKSIOS AB94 CCF1 # HANGUL SYLLABLE CHIEUCH-YE-NIEUNCIEUC AB95 CCF2 # HANGUL SYLLABLE CHIEUCH-YE-NIEUNHIEUH AB96 CCF3 # HANGUL SYLLABLE CHIEUCH-YE-TIKEUT AB97 CCF4 # HANGUL SYLLABLE CHIEUCH-YE-RIEUL AB98 CCF5 # HANGUL SYLLABLE CHIEUCH-YE-RIEULKIYEOK AB99 CCF6 # HANGUL SYLLABLE CHIEUCH-YE-RIEULMIEUM AB9A CCF7 # HANGUL SYLLABLE CHIEUCH-YE-RIEULPIEUP AB9B CCF8 # HANGUL SYLLABLE CHIEUCH-YE-RIEULSIOS AB9C CCF9 # HANGUL SYLLABLE CHIEUCH-YE-RIEULTHIEUTH AB9D CCFA # HANGUL SYLLABLE CHIEUCH-YE-RIEULPHIEUPH AB9E CCFB # HANGUL SYLLABLE CHIEUCH-YE-RIEULHIEUH AB9F CCFC # HANGUL SYLLABLE CHIEUCH-YE-MIEUM ABA0 CCFD # HANGUL SYLLABLE CHIEUCH-YE-PIEUP ABA1 30A1 # KATAKANA LETTER SMALL A ABA2 30A2 # KATAKANA LETTER A ABA3 30A3 # KATAKANA LETTER SMALL I ABA4 30A4 # KATAKANA LETTER I ABA5 30A5 # KATAKANA LETTER SMALL U ABA6 30A6 # KATAKANA LETTER U ABA7 30A7 # KATAKANA LETTER SMALL E ABA8 30A8 # KATAKANA LETTER E ABA9 30A9 # KATAKANA LETTER SMALL O ABAA 30AA # KATAKANA LETTER O ABAB 30AB # KATAKANA LETTER KA ABAC 30AC # KATAKANA LETTER GA ABAD 30AD # KATAKANA LETTER KI ABAE 30AE # KATAKANA LETTER GI ABAF 30AF # KATAKANA LETTER KU ABB0 30B0 # KATAKANA LETTER GU ABB1 30B1 # KATAKANA LETTER KE ABB2 30B2 # KATAKANA LETTER GE ABB3 30B3 # KATAKANA LETTER KO ABB4 30B4 # KATAKANA LETTER GO ABB5 30B5 # KATAKANA LETTER SA ABB6 30B6 # KATAKANA LETTER ZA ABB7 30B7 # KATAKANA LETTER SI ABB8 30B8 # KATAKANA LETTER ZI ABB9 30B9 # KATAKANA LETTER SU ABBA 30BA # KATAKANA LETTER ZU ABBB 30BB # KATAKANA LETTER SE ABBC 30BC # KATAKANA LETTER ZE ABBD 30BD # KATAKANA LETTER SO ABBE 30BE # KATAKANA LETTER ZO ABBF 30BF # KATAKANA LETTER TA ABC0 30C0 # KATAKANA LETTER DA ABC1 30C1 # KATAKANA LETTER TI ABC2 30C2 # KATAKANA LETTER DI ABC3 30C3 # KATAKANA LETTER SMALL TU ABC4 30C4 # KATAKANA LETTER TU ABC5 30C5 # KATAKANA LETTER DU ABC6 30C6 # KATAKANA LETTER TE ABC7 30C7 # KATAKANA LETTER DE ABC8 30C8 # KATAKANA LETTER TO ABC9 30C9 # KATAKANA LETTER DO ABCA 30CA # KATAKANA LETTER NA ABCB 30CB # KATAKANA LETTER NI ABCC 30CC # KATAKANA LETTER NU ABCD 30CD # KATAKANA LETTER NE ABCE 30CE # KATAKANA LETTER NO ABCF 30CF # KATAKANA LETTER HA ABD0 30D0 # KATAKANA LETTER BA ABD1 30D1 # KATAKANA LETTER PA ABD2 30D2 # KATAKANA LETTER HI ABD3 30D3 # KATAKANA LETTER BI ABD4 30D4 # KATAKANA LETTER PI ABD5 30D5 # KATAKANA LETTER HU ABD6 30D6 # KATAKANA LETTER BU ABD7 30D7 # KATAKANA LETTER PU ABD8 30D8 # KATAKANA LETTER HE ABD9 30D9 # KATAKANA LETTER BE ABDA 30DA # KATAKANA LETTER PE ABDB 30DB # KATAKANA LETTER HO ABDC 30DC # KATAKANA LETTER BO ABDD 30DD # KATAKANA LETTER PO ABDE 30DE # KATAKANA LETTER MA ABDF 30DF # KATAKANA LETTER MI ABE0 30E0 # KATAKANA LETTER MU ABE1 30E1 # KATAKANA LETTER ME ABE2 30E2 # KATAKANA LETTER MO ABE3 30E3 # KATAKANA LETTER SMALL YA ABE4 30E4 # KATAKANA LETTER YA ABE5 30E5 # KATAKANA LETTER SMALL YU ABE6 30E6 # KATAKANA LETTER YU ABE7 30E7 # KATAKANA LETTER SMALL YO ABE8 30E8 # KATAKANA LETTER YO ABE9 30E9 # KATAKANA LETTER RA ABEA 30EA # KATAKANA LETTER RI ABEB 30EB # KATAKANA LETTER RU ABEC 30EC # KATAKANA LETTER RE ABED 30ED # KATAKANA LETTER RO ABEE 30EE # KATAKANA LETTER SMALL WA ABEF 30EF # KATAKANA LETTER WA ABF0 30F0 # KATAKANA LETTER WI ABF1 30F1 # KATAKANA LETTER WE ABF2 30F2 # KATAKANA LETTER WO ABF3 30F3 # KATAKANA LETTER N ABF4 30F4 # KATAKANA LETTER VU ABF5 30F5 # KATAKANA LETTER SMALL KA ABF6 30F6 # KATAKANA LETTER SMALL KE AC41 CCFE # HANGUL SYLLABLE CHIEUCH-YE-PIEUPSIOS AC42 CCFF # HANGUL SYLLABLE CHIEUCH-YE-SIOS AC43 CD00 # HANGUL SYLLABLE CHIEUCH-YE-SSANGSIOS AC44 CD02 # HANGUL SYLLABLE CHIEUCH-YE-CIEUC AC45 CD03 # HANGUL SYLLABLE CHIEUCH-YE-CHIEUCH AC46 CD04 # HANGUL SYLLABLE CHIEUCH-YE-KHIEUKH AC47 CD05 # HANGUL SYLLABLE CHIEUCH-YE-THIEUTH AC48 CD06 # HANGUL SYLLABLE CHIEUCH-YE-PHIEUPH AC49 CD07 # HANGUL SYLLABLE CHIEUCH-YE-HIEUH AC4A CD0A # HANGUL SYLLABLE CHIEUCH-O-SSANGKIYEOK AC4B CD0B # HANGUL SYLLABLE CHIEUCH-O-KIYEOKSIOS AC4C CD0D # HANGUL SYLLABLE CHIEUCH-O-NIEUNCIEUC AC4D CD0E # HANGUL SYLLABLE CHIEUCH-O-NIEUNHIEUH AC4E CD0F # HANGUL SYLLABLE CHIEUCH-O-TIKEUT AC4F CD11 # HANGUL SYLLABLE CHIEUCH-O-RIEULKIYEOK AC50 CD12 # HANGUL SYLLABLE CHIEUCH-O-RIEULMIEUM AC51 CD13 # HANGUL SYLLABLE CHIEUCH-O-RIEULPIEUP AC52 CD14 # HANGUL SYLLABLE CHIEUCH-O-RIEULSIOS AC53 CD15 # HANGUL SYLLABLE CHIEUCH-O-RIEULTHIEUTH AC54 CD16 # HANGUL SYLLABLE CHIEUCH-O-RIEULPHIEUPH AC55 CD17 # HANGUL SYLLABLE CHIEUCH-O-RIEULHIEUH AC56 CD1A # HANGUL SYLLABLE CHIEUCH-O-PIEUPSIOS AC57 CD1C # HANGUL SYLLABLE CHIEUCH-O-SSANGSIOS AC58 CD1E # HANGUL SYLLABLE CHIEUCH-O-CIEUC AC59 CD1F # HANGUL SYLLABLE CHIEUCH-O-CHIEUCH AC5A CD20 # HANGUL SYLLABLE CHIEUCH-O-KHIEUKH AC61 CD21 # HANGUL SYLLABLE CHIEUCH-O-THIEUTH AC62 CD22 # HANGUL SYLLABLE CHIEUCH-O-PHIEUPH AC63 CD23 # HANGUL SYLLABLE CHIEUCH-O-HIEUH AC64 CD25 # HANGUL SYLLABLE CHIEUCH-WA-KIYEOK AC65 CD26 # HANGUL SYLLABLE CHIEUCH-WA-SSANGKIYEOK AC66 CD27 # HANGUL SYLLABLE CHIEUCH-WA-KIYEOKSIOS AC67 CD29 # HANGUL SYLLABLE CHIEUCH-WA-NIEUNCIEUC AC68 CD2A # HANGUL SYLLABLE CHIEUCH-WA-NIEUNHIEUH AC69 CD2B # HANGUL SYLLABLE CHIEUCH-WA-TIKEUT AC6A CD2D # HANGUL SYLLABLE CHIEUCH-WA-RIEULKIYEOK AC6B CD2E # HANGUL SYLLABLE CHIEUCH-WA-RIEULMIEUM AC6C CD2F # HANGUL SYLLABLE CHIEUCH-WA-RIEULPIEUP AC6D CD30 # HANGUL SYLLABLE CHIEUCH-WA-RIEULSIOS AC6E CD31 # HANGUL SYLLABLE CHIEUCH-WA-RIEULTHIEUTH AC6F CD32 # HANGUL SYLLABLE CHIEUCH-WA-RIEULPHIEUPH AC70 CD33 # HANGUL SYLLABLE CHIEUCH-WA-RIEULHIEUH AC71 CD34 # HANGUL SYLLABLE CHIEUCH-WA-MIEUM AC72 CD35 # HANGUL SYLLABLE CHIEUCH-WA-PIEUP AC73 CD36 # HANGUL SYLLABLE CHIEUCH-WA-PIEUPSIOS AC74 CD37 # HANGUL SYLLABLE CHIEUCH-WA-SIOS AC75 CD38 # HANGUL SYLLABLE CHIEUCH-WA-SSANGSIOS AC76 CD3A # HANGUL SYLLABLE CHIEUCH-WA-CIEUC AC77 CD3B # HANGUL SYLLABLE CHIEUCH-WA-CHIEUCH AC78 CD3C # HANGUL SYLLABLE CHIEUCH-WA-KHIEUKH AC79 CD3D # HANGUL SYLLABLE CHIEUCH-WA-THIEUTH AC7A CD3E # HANGUL SYLLABLE CHIEUCH-WA-PHIEUPH AC81 CD3F # HANGUL SYLLABLE CHIEUCH-WA-HIEUH AC82 CD40 # HANGUL SYLLABLE CHIEUCH-WAE AC83 CD41 # HANGUL SYLLABLE CHIEUCH-WAE-KIYEOK AC84 CD42 # HANGUL SYLLABLE CHIEUCH-WAE-SSANGKIYEOK AC85 CD43 # HANGUL SYLLABLE CHIEUCH-WAE-KIYEOKSIOS AC86 CD44 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUN AC87 CD45 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUNCIEUC AC88 CD46 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUNHIEUH AC89 CD47 # HANGUL SYLLABLE CHIEUCH-WAE-TIKEUT AC8A CD48 # HANGUL SYLLABLE CHIEUCH-WAE-RIEUL AC8B CD49 # HANGUL SYLLABLE CHIEUCH-WAE-RIEULKIYEOK AC8C CD4A # HANGUL SYLLABLE CHIEUCH-WAE-RIEULMIEUM AC8D CD4B # HANGUL SYLLABLE CHIEUCH-WAE-RIEULPIEUP AC8E CD4C # HANGUL SYLLABLE CHIEUCH-WAE-RIEULSIOS AC8F CD4D # HANGUL SYLLABLE CHIEUCH-WAE-RIEULTHIEUTH AC90 CD4E # HANGUL SYLLABLE CHIEUCH-WAE-RIEULPHIEUPH AC91 CD4F # HANGUL SYLLABLE CHIEUCH-WAE-RIEULHIEUH AC92 CD50 # HANGUL SYLLABLE CHIEUCH-WAE-MIEUM AC93 CD51 # HANGUL SYLLABLE CHIEUCH-WAE-PIEUP AC94 CD52 # HANGUL SYLLABLE CHIEUCH-WAE-PIEUPSIOS AC95 CD53 # HANGUL SYLLABLE CHIEUCH-WAE-SIOS AC96 CD54 # HANGUL SYLLABLE CHIEUCH-WAE-SSANGSIOS AC97 CD55 # HANGUL SYLLABLE CHIEUCH-WAE-IEUNG AC98 CD56 # HANGUL SYLLABLE CHIEUCH-WAE-CIEUC AC99 CD57 # HANGUL SYLLABLE CHIEUCH-WAE-CHIEUCH AC9A CD58 # HANGUL SYLLABLE CHIEUCH-WAE-KHIEUKH AC9B CD59 # HANGUL SYLLABLE CHIEUCH-WAE-THIEUTH AC9C CD5A # HANGUL SYLLABLE CHIEUCH-WAE-PHIEUPH AC9D CD5B # HANGUL SYLLABLE CHIEUCH-WAE-HIEUH AC9E CD5D # HANGUL SYLLABLE CHIEUCH-OE-KIYEOK AC9F CD5E # HANGUL SYLLABLE CHIEUCH-OE-SSANGKIYEOK ACA0 CD5F # HANGUL SYLLABLE CHIEUCH-OE-KIYEOKSIOS ACA1 0410 # CYRILLIC CAPITAL LETTER A ACA2 0411 # CYRILLIC CAPITAL LETTER BE ACA3 0412 # CYRILLIC CAPITAL LETTER VE ACA4 0413 # CYRILLIC CAPITAL LETTER GHE ACA5 0414 # CYRILLIC CAPITAL LETTER DE ACA6 0415 # CYRILLIC CAPITAL LETTER IE ACA7 0401 # CYRILLIC CAPITAL LETTER IO ACA8 0416 # CYRILLIC CAPITAL LETTER ZHE ACA9 0417 # CYRILLIC CAPITAL LETTER ZE ACAA 0418 # CYRILLIC CAPITAL LETTER I ACAB 0419 # CYRILLIC CAPITAL LETTER SHORT I ACAC 041A # CYRILLIC CAPITAL LETTER KA ACAD 041B # CYRILLIC CAPITAL LETTER EL ACAE 041C # CYRILLIC CAPITAL LETTER EM ACAF 041D # CYRILLIC CAPITAL LETTER EN ACB0 041E # CYRILLIC CAPITAL LETTER O ACB1 041F # CYRILLIC CAPITAL LETTER PE ACB2 0420 # CYRILLIC CAPITAL LETTER ER ACB3 0421 # CYRILLIC CAPITAL LETTER ES ACB4 0422 # CYRILLIC CAPITAL LETTER TE ACB5 0423 # CYRILLIC CAPITAL LETTER U ACB6 0424 # CYRILLIC CAPITAL LETTER EF ACB7 0425 # CYRILLIC CAPITAL LETTER HA ACB8 0426 # CYRILLIC CAPITAL LETTER TSE ACB9 0427 # CYRILLIC CAPITAL LETTER CHE ACBA 0428 # CYRILLIC CAPITAL LETTER SHA ACBB 0429 # CYRILLIC CAPITAL LETTER SHCHA ACBC 042A # CYRILLIC CAPITAL LETTER HARD SIGN ACBD 042B # CYRILLIC CAPITAL LETTER YERU ACBE 042C # CYRILLIC CAPITAL LETTER SOFT SIGN ACBF 042D # CYRILLIC CAPITAL LETTER E ACC0 042E # CYRILLIC CAPITAL LETTER YU ACC1 042F # CYRILLIC CAPITAL LETTER YA ACD1 0430 # CYRILLIC SMALL LETTER A ACD2 0431 # CYRILLIC SMALL LETTER BE ACD3 0432 # CYRILLIC SMALL LETTER VE ACD4 0433 # CYRILLIC SMALL LETTER GHE ACD5 0434 # CYRILLIC SMALL LETTER DE ACD6 0435 # CYRILLIC SMALL LETTER IE ACD7 0451 # CYRILLIC SMALL LETTER IO ACD8 0436 # CYRILLIC SMALL LETTER ZHE ACD9 0437 # CYRILLIC SMALL LETTER ZE ACDA 0438 # CYRILLIC SMALL LETTER I ACDB 0439 # CYRILLIC SMALL LETTER SHORT I ACDC 043A # CYRILLIC SMALL LETTER KA ACDD 043B # CYRILLIC SMALL LETTER EL ACDE 043C # CYRILLIC SMALL LETTER EM ACDF 043D # CYRILLIC SMALL LETTER EN ACE0 043E # CYRILLIC SMALL LETTER O ACE1 043F # CYRILLIC SMALL LETTER PE ACE2 0440 # CYRILLIC SMALL LETTER ER ACE3 0441 # CYRILLIC SMALL LETTER ES ACE4 0442 # CYRILLIC SMALL LETTER TE ACE5 0443 # CYRILLIC SMALL LETTER U ACE6 0444 # CYRILLIC SMALL LETTER EF ACE7 0445 # CYRILLIC SMALL LETTER HA ACE8 0446 # CYRILLIC SMALL LETTER TSE ACE9 0447 # CYRILLIC SMALL LETTER CHE ACEA 0448 # CYRILLIC SMALL LETTER SHA ACEB 0449 # CYRILLIC SMALL LETTER SHCHA ACEC 044A # CYRILLIC SMALL LETTER HARD SIGN ACED 044B # CYRILLIC SMALL LETTER YERU ACEE 044C # CYRILLIC SMALL LETTER SOFT SIGN ACEF 044D # CYRILLIC SMALL LETTER E ACF0 044E # CYRILLIC SMALL LETTER YU ACF1 044F # CYRILLIC SMALL LETTER YA AD41 CD61 # HANGUL SYLLABLE CHIEUCH-OE-NIEUNCIEUC AD42 CD62 # HANGUL SYLLABLE CHIEUCH-OE-NIEUNHIEUH AD43 CD63 # HANGUL SYLLABLE CHIEUCH-OE-TIKEUT AD44 CD65 # HANGUL SYLLABLE CHIEUCH-OE-RIEULKIYEOK AD45 CD66 # HANGUL SYLLABLE CHIEUCH-OE-RIEULMIEUM AD46 CD67 # HANGUL SYLLABLE CHIEUCH-OE-RIEULPIEUP AD47 CD68 # HANGUL SYLLABLE CHIEUCH-OE-RIEULSIOS AD48 CD69 # HANGUL SYLLABLE CHIEUCH-OE-RIEULTHIEUTH AD49 CD6A # HANGUL SYLLABLE CHIEUCH-OE-RIEULPHIEUPH AD4A CD6B # HANGUL SYLLABLE CHIEUCH-OE-RIEULHIEUH AD4B CD6E # HANGUL SYLLABLE CHIEUCH-OE-PIEUPSIOS AD4C CD70 # HANGUL SYLLABLE CHIEUCH-OE-SSANGSIOS AD4D CD72 # HANGUL SYLLABLE CHIEUCH-OE-CIEUC AD4E CD73 # HANGUL SYLLABLE CHIEUCH-OE-CHIEUCH AD4F CD74 # HANGUL SYLLABLE CHIEUCH-OE-KHIEUKH AD50 CD75 # HANGUL SYLLABLE CHIEUCH-OE-THIEUTH AD51 CD76 # HANGUL SYLLABLE CHIEUCH-OE-PHIEUPH AD52 CD77 # HANGUL SYLLABLE CHIEUCH-OE-HIEUH AD53 CD79 # HANGUL SYLLABLE CHIEUCH-YO-KIYEOK AD54 CD7A # HANGUL SYLLABLE CHIEUCH-YO-SSANGKIYEOK AD55 CD7B # HANGUL SYLLABLE CHIEUCH-YO-KIYEOKSIOS AD56 CD7C # HANGUL SYLLABLE CHIEUCH-YO-NIEUN AD57 CD7D # HANGUL SYLLABLE CHIEUCH-YO-NIEUNCIEUC AD58 CD7E # HANGUL SYLLABLE CHIEUCH-YO-NIEUNHIEUH AD59 CD7F # HANGUL SYLLABLE CHIEUCH-YO-TIKEUT AD5A CD80 # HANGUL SYLLABLE CHIEUCH-YO-RIEUL AD61 CD81 # HANGUL SYLLABLE CHIEUCH-YO-RIEULKIYEOK AD62 CD82 # HANGUL SYLLABLE CHIEUCH-YO-RIEULMIEUM AD63 CD83 # HANGUL SYLLABLE CHIEUCH-YO-RIEULPIEUP AD64 CD84 # HANGUL SYLLABLE CHIEUCH-YO-RIEULSIOS AD65 CD85 # HANGUL SYLLABLE CHIEUCH-YO-RIEULTHIEUTH AD66 CD86 # HANGUL SYLLABLE CHIEUCH-YO-RIEULPHIEUPH AD67 CD87 # HANGUL SYLLABLE CHIEUCH-YO-RIEULHIEUH AD68 CD89 # HANGUL SYLLABLE CHIEUCH-YO-PIEUP AD69 CD8A # HANGUL SYLLABLE CHIEUCH-YO-PIEUPSIOS AD6A CD8B # HANGUL SYLLABLE CHIEUCH-YO-SIOS AD6B CD8C # HANGUL SYLLABLE CHIEUCH-YO-SSANGSIOS AD6C CD8D # HANGUL SYLLABLE CHIEUCH-YO-IEUNG AD6D CD8E # HANGUL SYLLABLE CHIEUCH-YO-CIEUC AD6E CD8F # HANGUL SYLLABLE CHIEUCH-YO-CHIEUCH AD6F CD90 # HANGUL SYLLABLE CHIEUCH-YO-KHIEUKH AD70 CD91 # HANGUL SYLLABLE CHIEUCH-YO-THIEUTH AD71 CD92 # HANGUL SYLLABLE CHIEUCH-YO-PHIEUPH AD72 CD93 # HANGUL SYLLABLE CHIEUCH-YO-HIEUH AD73 CD96 # HANGUL SYLLABLE CHIEUCH-U-SSANGKIYEOK AD74 CD97 # HANGUL SYLLABLE CHIEUCH-U-KIYEOKSIOS AD75 CD99 # HANGUL SYLLABLE CHIEUCH-U-NIEUNCIEUC AD76 CD9A # HANGUL SYLLABLE CHIEUCH-U-NIEUNHIEUH AD77 CD9B # HANGUL SYLLABLE CHIEUCH-U-TIKEUT AD78 CD9D # HANGUL SYLLABLE CHIEUCH-U-RIEULKIYEOK AD79 CD9E # HANGUL SYLLABLE CHIEUCH-U-RIEULMIEUM AD7A CD9F # HANGUL SYLLABLE CHIEUCH-U-RIEULPIEUP AD81 CDA0 # HANGUL SYLLABLE CHIEUCH-U-RIEULSIOS AD82 CDA1 # HANGUL SYLLABLE CHIEUCH-U-RIEULTHIEUTH AD83 CDA2 # HANGUL SYLLABLE CHIEUCH-U-RIEULPHIEUPH AD84 CDA3 # HANGUL SYLLABLE CHIEUCH-U-RIEULHIEUH AD85 CDA6 # HANGUL SYLLABLE CHIEUCH-U-PIEUPSIOS AD86 CDA8 # HANGUL SYLLABLE CHIEUCH-U-SSANGSIOS AD87 CDAA # HANGUL SYLLABLE CHIEUCH-U-CIEUC AD88 CDAB # HANGUL SYLLABLE CHIEUCH-U-CHIEUCH AD89 CDAC # HANGUL SYLLABLE CHIEUCH-U-KHIEUKH AD8A CDAD # HANGUL SYLLABLE CHIEUCH-U-THIEUTH AD8B CDAE # HANGUL SYLLABLE CHIEUCH-U-PHIEUPH AD8C CDAF # HANGUL SYLLABLE CHIEUCH-U-HIEUH AD8D CDB1 # HANGUL SYLLABLE CHIEUCH-WEO-KIYEOK AD8E CDB2 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGKIYEOK AD8F CDB3 # HANGUL SYLLABLE CHIEUCH-WEO-KIYEOKSIOS AD90 CDB4 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUN AD91 CDB5 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUNCIEUC AD92 CDB6 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUNHIEUH AD93 CDB7 # HANGUL SYLLABLE CHIEUCH-WEO-TIKEUT AD94 CDB8 # HANGUL SYLLABLE CHIEUCH-WEO-RIEUL AD95 CDB9 # HANGUL SYLLABLE CHIEUCH-WEO-RIEULKIYEOK AD96 CDBA # HANGUL SYLLABLE CHIEUCH-WEO-RIEULMIEUM AD97 CDBB # HANGUL SYLLABLE CHIEUCH-WEO-RIEULPIEUP AD98 CDBC # HANGUL SYLLABLE CHIEUCH-WEO-RIEULSIOS AD99 CDBD # HANGUL SYLLABLE CHIEUCH-WEO-RIEULTHIEUTH AD9A CDBE # HANGUL SYLLABLE CHIEUCH-WEO-RIEULPHIEUPH AD9B CDBF # HANGUL SYLLABLE CHIEUCH-WEO-RIEULHIEUH AD9C CDC0 # HANGUL SYLLABLE CHIEUCH-WEO-MIEUM AD9D CDC1 # HANGUL SYLLABLE CHIEUCH-WEO-PIEUP AD9E CDC2 # HANGUL SYLLABLE CHIEUCH-WEO-PIEUPSIOS AD9F CDC3 # HANGUL SYLLABLE CHIEUCH-WEO-SIOS ADA0 CDC5 # HANGUL SYLLABLE CHIEUCH-WEO-IEUNG AE41 CDC6 # HANGUL SYLLABLE CHIEUCH-WEO-CIEUC AE42 CDC7 # HANGUL SYLLABLE CHIEUCH-WEO-CHIEUCH AE43 CDC8 # HANGUL SYLLABLE CHIEUCH-WEO-KHIEUKH AE44 CDC9 # HANGUL SYLLABLE CHIEUCH-WEO-THIEUTH AE45 CDCA # HANGUL SYLLABLE CHIEUCH-WEO-PHIEUPH AE46 CDCB # HANGUL SYLLABLE CHIEUCH-WEO-HIEUH AE47 CDCD # HANGUL SYLLABLE CHIEUCH-WE-KIYEOK AE48 CDCE # HANGUL SYLLABLE CHIEUCH-WE-SSANGKIYEOK AE49 CDCF # HANGUL SYLLABLE CHIEUCH-WE-KIYEOKSIOS AE4A CDD1 # HANGUL SYLLABLE CHIEUCH-WE-NIEUNCIEUC AE4B CDD2 # HANGUL SYLLABLE CHIEUCH-WE-NIEUNHIEUH AE4C CDD3 # HANGUL SYLLABLE CHIEUCH-WE-TIKEUT AE4D CDD4 # HANGUL SYLLABLE CHIEUCH-WE-RIEUL AE4E CDD5 # HANGUL SYLLABLE CHIEUCH-WE-RIEULKIYEOK AE4F CDD6 # HANGUL SYLLABLE CHIEUCH-WE-RIEULMIEUM AE50 CDD7 # HANGUL SYLLABLE CHIEUCH-WE-RIEULPIEUP AE51 CDD8 # HANGUL SYLLABLE CHIEUCH-WE-RIEULSIOS AE52 CDD9 # HANGUL SYLLABLE CHIEUCH-WE-RIEULTHIEUTH AE53 CDDA # HANGUL SYLLABLE CHIEUCH-WE-RIEULPHIEUPH AE54 CDDB # HANGUL SYLLABLE CHIEUCH-WE-RIEULHIEUH AE55 CDDC # HANGUL SYLLABLE CHIEUCH-WE-MIEUM AE56 CDDD # HANGUL SYLLABLE CHIEUCH-WE-PIEUP AE57 CDDE # HANGUL SYLLABLE CHIEUCH-WE-PIEUPSIOS AE58 CDDF # HANGUL SYLLABLE CHIEUCH-WE-SIOS AE59 CDE0 # HANGUL SYLLABLE CHIEUCH-WE-SSANGSIOS AE5A CDE1 # HANGUL SYLLABLE CHIEUCH-WE-IEUNG AE61 CDE2 # HANGUL SYLLABLE CHIEUCH-WE-CIEUC AE62 CDE3 # HANGUL SYLLABLE CHIEUCH-WE-CHIEUCH AE63 CDE4 # HANGUL SYLLABLE CHIEUCH-WE-KHIEUKH AE64 CDE5 # HANGUL SYLLABLE CHIEUCH-WE-THIEUTH AE65 CDE6 # HANGUL SYLLABLE CHIEUCH-WE-PHIEUPH AE66 CDE7 # HANGUL SYLLABLE CHIEUCH-WE-HIEUH AE67 CDE9 # HANGUL SYLLABLE CHIEUCH-WI-KIYEOK AE68 CDEA # HANGUL SYLLABLE CHIEUCH-WI-SSANGKIYEOK AE69 CDEB # HANGUL SYLLABLE CHIEUCH-WI-KIYEOKSIOS AE6A CDED # HANGUL SYLLABLE CHIEUCH-WI-NIEUNCIEUC AE6B CDEE # HANGUL SYLLABLE CHIEUCH-WI-NIEUNHIEUH AE6C CDEF # HANGUL SYLLABLE CHIEUCH-WI-TIKEUT AE6D CDF1 # HANGUL SYLLABLE CHIEUCH-WI-RIEULKIYEOK AE6E CDF2 # HANGUL SYLLABLE CHIEUCH-WI-RIEULMIEUM AE6F CDF3 # HANGUL SYLLABLE CHIEUCH-WI-RIEULPIEUP AE70 CDF4 # HANGUL SYLLABLE CHIEUCH-WI-RIEULSIOS AE71 CDF5 # HANGUL SYLLABLE CHIEUCH-WI-RIEULTHIEUTH AE72 CDF6 # HANGUL SYLLABLE CHIEUCH-WI-RIEULPHIEUPH AE73 CDF7 # HANGUL SYLLABLE CHIEUCH-WI-RIEULHIEUH AE74 CDFA # HANGUL SYLLABLE CHIEUCH-WI-PIEUPSIOS AE75 CDFC # HANGUL SYLLABLE CHIEUCH-WI-SSANGSIOS AE76 CDFE # HANGUL SYLLABLE CHIEUCH-WI-CIEUC AE77 CDFF # HANGUL SYLLABLE CHIEUCH-WI-CHIEUCH AE78 CE00 # HANGUL SYLLABLE CHIEUCH-WI-KHIEUKH AE79 CE01 # HANGUL SYLLABLE CHIEUCH-WI-THIEUTH AE7A CE02 # HANGUL SYLLABLE CHIEUCH-WI-PHIEUPH AE81 CE03 # HANGUL SYLLABLE CHIEUCH-WI-HIEUH AE82 CE05 # HANGUL SYLLABLE CHIEUCH-YU-KIYEOK AE83 CE06 # HANGUL SYLLABLE CHIEUCH-YU-SSANGKIYEOK AE84 CE07 # HANGUL SYLLABLE CHIEUCH-YU-KIYEOKSIOS AE85 CE09 # HANGUL SYLLABLE CHIEUCH-YU-NIEUNCIEUC AE86 CE0A # HANGUL SYLLABLE CHIEUCH-YU-NIEUNHIEUH AE87 CE0B # HANGUL SYLLABLE CHIEUCH-YU-TIKEUT AE88 CE0D # HANGUL SYLLABLE CHIEUCH-YU-RIEULKIYEOK AE89 CE0E # HANGUL SYLLABLE CHIEUCH-YU-RIEULMIEUM AE8A CE0F # HANGUL SYLLABLE CHIEUCH-YU-RIEULPIEUP AE8B CE10 # HANGUL SYLLABLE CHIEUCH-YU-RIEULSIOS AE8C CE11 # HANGUL SYLLABLE CHIEUCH-YU-RIEULTHIEUTH AE8D CE12 # HANGUL SYLLABLE CHIEUCH-YU-RIEULPHIEUPH AE8E CE13 # HANGUL SYLLABLE CHIEUCH-YU-RIEULHIEUH AE8F CE15 # HANGUL SYLLABLE CHIEUCH-YU-PIEUP AE90 CE16 # HANGUL SYLLABLE CHIEUCH-YU-PIEUPSIOS AE91 CE17 # HANGUL SYLLABLE CHIEUCH-YU-SIOS AE92 CE18 # HANGUL SYLLABLE CHIEUCH-YU-SSANGSIOS AE93 CE1A # HANGUL SYLLABLE CHIEUCH-YU-CIEUC AE94 CE1B # HANGUL SYLLABLE CHIEUCH-YU-CHIEUCH AE95 CE1C # HANGUL SYLLABLE CHIEUCH-YU-KHIEUKH AE96 CE1D # HANGUL SYLLABLE CHIEUCH-YU-THIEUTH AE97 CE1E # HANGUL SYLLABLE CHIEUCH-YU-PHIEUPH AE98 CE1F # HANGUL SYLLABLE CHIEUCH-YU-HIEUH AE99 CE22 # HANGUL SYLLABLE CHIEUCH-EU-SSANGKIYEOK AE9A CE23 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOKSIOS AE9B CE25 # HANGUL SYLLABLE CHIEUCH-EU-NIEUNCIEUC AE9C CE26 # HANGUL SYLLABLE CHIEUCH-EU-NIEUNHIEUH AE9D CE27 # HANGUL SYLLABLE CHIEUCH-EU-TIKEUT AE9E CE29 # HANGUL SYLLABLE CHIEUCH-EU-RIEULKIYEOK AE9F CE2A # HANGUL SYLLABLE CHIEUCH-EU-RIEULMIEUM AEA0 CE2B # HANGUL SYLLABLE CHIEUCH-EU-RIEULPIEUP AF41 CE2C # HANGUL SYLLABLE CHIEUCH-EU-RIEULSIOS AF42 CE2D # HANGUL SYLLABLE CHIEUCH-EU-RIEULTHIEUTH AF43 CE2E # HANGUL SYLLABLE CHIEUCH-EU-RIEULPHIEUPH AF44 CE2F # HANGUL SYLLABLE CHIEUCH-EU-RIEULHIEUH AF45 CE32 # HANGUL SYLLABLE CHIEUCH-EU-PIEUPSIOS AF46 CE34 # HANGUL SYLLABLE CHIEUCH-EU-SSANGSIOS AF47 CE36 # HANGUL SYLLABLE CHIEUCH-EU-CIEUC AF48 CE37 # HANGUL SYLLABLE CHIEUCH-EU-CHIEUCH AF49 CE38 # HANGUL SYLLABLE CHIEUCH-EU-KHIEUKH AF4A CE39 # HANGUL SYLLABLE CHIEUCH-EU-THIEUTH AF4B CE3A # HANGUL SYLLABLE CHIEUCH-EU-PHIEUPH AF4C CE3B # HANGUL SYLLABLE CHIEUCH-EU-HIEUH AF4D CE3C # HANGUL SYLLABLE CHIEUCH-YI AF4E CE3D # HANGUL SYLLABLE CHIEUCH-YI-KIYEOK AF4F CE3E # HANGUL SYLLABLE CHIEUCH-YI-SSANGKIYEOK AF50 CE3F # HANGUL SYLLABLE CHIEUCH-YI-KIYEOKSIOS AF51 CE40 # HANGUL SYLLABLE CHIEUCH-YI-NIEUN AF52 CE41 # HANGUL SYLLABLE CHIEUCH-YI-NIEUNCIEUC AF53 CE42 # HANGUL SYLLABLE CHIEUCH-YI-NIEUNHIEUH AF54 CE43 # HANGUL SYLLABLE CHIEUCH-YI-TIKEUT AF55 CE44 # HANGUL SYLLABLE CHIEUCH-YI-RIEUL AF56 CE45 # HANGUL SYLLABLE CHIEUCH-YI-RIEULKIYEOK AF57 CE46 # HANGUL SYLLABLE CHIEUCH-YI-RIEULMIEUM AF58 CE47 # HANGUL SYLLABLE CHIEUCH-YI-RIEULPIEUP AF59 CE48 # HANGUL SYLLABLE CHIEUCH-YI-RIEULSIOS AF5A CE49 # HANGUL SYLLABLE CHIEUCH-YI-RIEULTHIEUTH AF61 CE4A # HANGUL SYLLABLE CHIEUCH-YI-RIEULPHIEUPH AF62 CE4B # HANGUL SYLLABLE CHIEUCH-YI-RIEULHIEUH AF63 CE4C # HANGUL SYLLABLE CHIEUCH-YI-MIEUM AF64 CE4D # HANGUL SYLLABLE CHIEUCH-YI-PIEUP AF65 CE4E # HANGUL SYLLABLE CHIEUCH-YI-PIEUPSIOS AF66 CE4F # HANGUL SYLLABLE CHIEUCH-YI-SIOS AF67 CE50 # HANGUL SYLLABLE CHIEUCH-YI-SSANGSIOS AF68 CE51 # HANGUL SYLLABLE CHIEUCH-YI-IEUNG AF69 CE52 # HANGUL SYLLABLE CHIEUCH-YI-CIEUC AF6A CE53 # HANGUL SYLLABLE CHIEUCH-YI-CHIEUCH AF6B CE54 # HANGUL SYLLABLE CHIEUCH-YI-KHIEUKH AF6C CE55 # HANGUL SYLLABLE CHIEUCH-YI-THIEUTH AF6D CE56 # HANGUL SYLLABLE CHIEUCH-YI-PHIEUPH AF6E CE57 # HANGUL SYLLABLE CHIEUCH-YI-HIEUH AF6F CE5A # HANGUL SYLLABLE CHIEUCH-I-SSANGKIYEOK AF70 CE5B # HANGUL SYLLABLE CHIEUCH-I-KIYEOKSIOS AF71 CE5D # HANGUL SYLLABLE CHIEUCH-I-NIEUNCIEUC AF72 CE5E # HANGUL SYLLABLE CHIEUCH-I-NIEUNHIEUH AF73 CE62 # HANGUL SYLLABLE CHIEUCH-I-RIEULMIEUM AF74 CE63 # HANGUL SYLLABLE CHIEUCH-I-RIEULPIEUP AF75 CE64 # HANGUL SYLLABLE CHIEUCH-I-RIEULSIOS AF76 CE65 # HANGUL SYLLABLE CHIEUCH-I-RIEULTHIEUTH AF77 CE66 # HANGUL SYLLABLE CHIEUCH-I-RIEULPHIEUPH AF78 CE67 # HANGUL SYLLABLE CHIEUCH-I-RIEULHIEUH AF79 CE6A # HANGUL SYLLABLE CHIEUCH-I-PIEUPSIOS AF7A CE6C # HANGUL SYLLABLE CHIEUCH-I-SSANGSIOS AF81 CE6E # HANGUL SYLLABLE CHIEUCH-I-CIEUC AF82 CE6F # HANGUL SYLLABLE CHIEUCH-I-CHIEUCH AF83 CE70 # HANGUL SYLLABLE CHIEUCH-I-KHIEUKH AF84 CE71 # HANGUL SYLLABLE CHIEUCH-I-THIEUTH AF85 CE72 # HANGUL SYLLABLE CHIEUCH-I-PHIEUPH AF86 CE73 # HANGUL SYLLABLE CHIEUCH-I-HIEUH AF87 CE76 # HANGUL SYLLABLE KHIEUKH-A-SSANGKIYEOK AF88 CE77 # HANGUL SYLLABLE KHIEUKH-A-KIYEOKSIOS AF89 CE79 # HANGUL SYLLABLE KHIEUKH-A-NIEUNCIEUC AF8A CE7A # HANGUL SYLLABLE KHIEUKH-A-NIEUNHIEUH AF8B CE7B # HANGUL SYLLABLE KHIEUKH-A-TIKEUT AF8C CE7D # HANGUL SYLLABLE KHIEUKH-A-RIEULKIYEOK AF8D CE7E # HANGUL SYLLABLE KHIEUKH-A-RIEULMIEUM AF8E CE7F # HANGUL SYLLABLE KHIEUKH-A-RIEULPIEUP AF8F CE80 # HANGUL SYLLABLE KHIEUKH-A-RIEULSIOS AF90 CE81 # HANGUL SYLLABLE KHIEUKH-A-RIEULTHIEUTH AF91 CE82 # HANGUL SYLLABLE KHIEUKH-A-RIEULPHIEUPH AF92 CE83 # HANGUL SYLLABLE KHIEUKH-A-RIEULHIEUH AF93 CE86 # HANGUL SYLLABLE KHIEUKH-A-PIEUPSIOS AF94 CE88 # HANGUL SYLLABLE KHIEUKH-A-SSANGSIOS AF95 CE8A # HANGUL SYLLABLE KHIEUKH-A-CIEUC AF96 CE8B # HANGUL SYLLABLE KHIEUKH-A-CHIEUCH AF97 CE8C # HANGUL SYLLABLE KHIEUKH-A-KHIEUKH AF98 CE8D # HANGUL SYLLABLE KHIEUKH-A-THIEUTH AF99 CE8E # HANGUL SYLLABLE KHIEUKH-A-PHIEUPH AF9A CE8F # HANGUL SYLLABLE KHIEUKH-A-HIEUH AF9B CE92 # HANGUL SYLLABLE KHIEUKH-AE-SSANGKIYEOK AF9C CE93 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOKSIOS AF9D CE95 # HANGUL SYLLABLE KHIEUKH-AE-NIEUNCIEUC AF9E CE96 # HANGUL SYLLABLE KHIEUKH-AE-NIEUNHIEUH AF9F CE97 # HANGUL SYLLABLE KHIEUKH-AE-TIKEUT AFA0 CE99 # HANGUL SYLLABLE KHIEUKH-AE-RIEULKIYEOK B041 CE9A # HANGUL SYLLABLE KHIEUKH-AE-RIEULMIEUM B042 CE9B # HANGUL SYLLABLE KHIEUKH-AE-RIEULPIEUP B043 CE9C # HANGUL SYLLABLE KHIEUKH-AE-RIEULSIOS B044 CE9D # HANGUL SYLLABLE KHIEUKH-AE-RIEULTHIEUTH B045 CE9E # HANGUL SYLLABLE KHIEUKH-AE-RIEULPHIEUPH B046 CE9F # HANGUL SYLLABLE KHIEUKH-AE-RIEULHIEUH B047 CEA2 # HANGUL SYLLABLE KHIEUKH-AE-PIEUPSIOS B048 CEA6 # HANGUL SYLLABLE KHIEUKH-AE-CIEUC B049 CEA7 # HANGUL SYLLABLE KHIEUKH-AE-CHIEUCH B04A CEA8 # HANGUL SYLLABLE KHIEUKH-AE-KHIEUKH B04B CEA9 # HANGUL SYLLABLE KHIEUKH-AE-THIEUTH B04C CEAA # HANGUL SYLLABLE KHIEUKH-AE-PHIEUPH B04D CEAB # HANGUL SYLLABLE KHIEUKH-AE-HIEUH B04E CEAE # HANGUL SYLLABLE KHIEUKH-YA-SSANGKIYEOK B04F CEAF # HANGUL SYLLABLE KHIEUKH-YA-KIYEOKSIOS B050 CEB0 # HANGUL SYLLABLE KHIEUKH-YA-NIEUN B051 CEB1 # HANGUL SYLLABLE KHIEUKH-YA-NIEUNCIEUC B052 CEB2 # HANGUL SYLLABLE KHIEUKH-YA-NIEUNHIEUH B053 CEB3 # HANGUL SYLLABLE KHIEUKH-YA-TIKEUT B054 CEB4 # HANGUL SYLLABLE KHIEUKH-YA-RIEUL B055 CEB5 # HANGUL SYLLABLE KHIEUKH-YA-RIEULKIYEOK B056 CEB6 # HANGUL SYLLABLE KHIEUKH-YA-RIEULMIEUM B057 CEB7 # HANGUL SYLLABLE KHIEUKH-YA-RIEULPIEUP B058 CEB8 # HANGUL SYLLABLE KHIEUKH-YA-RIEULSIOS B059 CEB9 # HANGUL SYLLABLE KHIEUKH-YA-RIEULTHIEUTH B05A CEBA # HANGUL SYLLABLE KHIEUKH-YA-RIEULPHIEUPH B061 CEBB # HANGUL SYLLABLE KHIEUKH-YA-RIEULHIEUH B062 CEBC # HANGUL SYLLABLE KHIEUKH-YA-MIEUM B063 CEBD # HANGUL SYLLABLE KHIEUKH-YA-PIEUP B064 CEBE # HANGUL SYLLABLE KHIEUKH-YA-PIEUPSIOS B065 CEBF # HANGUL SYLLABLE KHIEUKH-YA-SIOS B066 CEC0 # HANGUL SYLLABLE KHIEUKH-YA-SSANGSIOS B067 CEC2 # HANGUL SYLLABLE KHIEUKH-YA-CIEUC B068 CEC3 # HANGUL SYLLABLE KHIEUKH-YA-CHIEUCH B069 CEC4 # HANGUL SYLLABLE KHIEUKH-YA-KHIEUKH B06A CEC5 # HANGUL SYLLABLE KHIEUKH-YA-THIEUTH B06B CEC6 # HANGUL SYLLABLE KHIEUKH-YA-PHIEUPH B06C CEC7 # HANGUL SYLLABLE KHIEUKH-YA-HIEUH B06D CEC8 # HANGUL SYLLABLE KHIEUKH-YAE B06E CEC9 # HANGUL SYLLABLE KHIEUKH-YAE-KIYEOK B06F CECA # HANGUL SYLLABLE KHIEUKH-YAE-SSANGKIYEOK B070 CECB # HANGUL SYLLABLE KHIEUKH-YAE-KIYEOKSIOS B071 CECC # HANGUL SYLLABLE KHIEUKH-YAE-NIEUN B072 CECD # HANGUL SYLLABLE KHIEUKH-YAE-NIEUNCIEUC B073 CECE # HANGUL SYLLABLE KHIEUKH-YAE-NIEUNHIEUH B074 CECF # HANGUL SYLLABLE KHIEUKH-YAE-TIKEUT B075 CED0 # HANGUL SYLLABLE KHIEUKH-YAE-RIEUL B076 CED1 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULKIYEOK B077 CED2 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULMIEUM B078 CED3 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULPIEUP B079 CED4 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULSIOS B07A CED5 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULTHIEUTH B081 CED6 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULPHIEUPH B082 CED7 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULHIEUH B083 CED8 # HANGUL SYLLABLE KHIEUKH-YAE-MIEUM B084 CED9 # HANGUL SYLLABLE KHIEUKH-YAE-PIEUP B085 CEDA # HANGUL SYLLABLE KHIEUKH-YAE-PIEUPSIOS B086 CEDB # HANGUL SYLLABLE KHIEUKH-YAE-SIOS B087 CEDC # HANGUL SYLLABLE KHIEUKH-YAE-SSANGSIOS B088 CEDD # HANGUL SYLLABLE KHIEUKH-YAE-IEUNG B089 CEDE # HANGUL SYLLABLE KHIEUKH-YAE-CIEUC B08A CEDF # HANGUL SYLLABLE KHIEUKH-YAE-CHIEUCH B08B CEE0 # HANGUL SYLLABLE KHIEUKH-YAE-KHIEUKH B08C CEE1 # HANGUL SYLLABLE KHIEUKH-YAE-THIEUTH B08D CEE2 # HANGUL SYLLABLE KHIEUKH-YAE-PHIEUPH B08E CEE3 # HANGUL SYLLABLE KHIEUKH-YAE-HIEUH B08F CEE6 # HANGUL SYLLABLE KHIEUKH-EO-SSANGKIYEOK B090 CEE7 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOKSIOS B091 CEE9 # HANGUL SYLLABLE KHIEUKH-EO-NIEUNCIEUC B092 CEEA # HANGUL SYLLABLE KHIEUKH-EO-NIEUNHIEUH B093 CEED # HANGUL SYLLABLE KHIEUKH-EO-RIEULKIYEOK B094 CEEE # HANGUL SYLLABLE KHIEUKH-EO-RIEULMIEUM B095 CEEF # HANGUL SYLLABLE KHIEUKH-EO-RIEULPIEUP B096 CEF0 # HANGUL SYLLABLE KHIEUKH-EO-RIEULSIOS B097 CEF1 # HANGUL SYLLABLE KHIEUKH-EO-RIEULTHIEUTH B098 CEF2 # HANGUL SYLLABLE KHIEUKH-EO-RIEULPHIEUPH B099 CEF3 # HANGUL SYLLABLE KHIEUKH-EO-RIEULHIEUH B09A CEF6 # HANGUL SYLLABLE KHIEUKH-EO-PIEUPSIOS B09B CEFA # HANGUL SYLLABLE KHIEUKH-EO-CIEUC B09C CEFB # HANGUL SYLLABLE KHIEUKH-EO-CHIEUCH B09D CEFC # HANGUL SYLLABLE KHIEUKH-EO-KHIEUKH B09E CEFD # HANGUL SYLLABLE KHIEUKH-EO-THIEUTH B09F CEFE # HANGUL SYLLABLE KHIEUKH-EO-PHIEUPH B0A0 CEFF # HANGUL SYLLABLE KHIEUKH-EO-HIEUH B0A1 AC00 # HANGUL SYLLABLE KIYEOK-A B0A2 AC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK B0A3 AC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN B0A4 AC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT B0A5 AC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL B0A6 AC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK B0A7 AC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM B0A8 AC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM B0A9 AC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP B0AA AC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS B0AB AC13 # HANGUL SYLLABLE KIYEOK-A-SIOS B0AC AC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS B0AD AC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG B0AE AC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC B0AF AC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH B0B0 AC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH B0B1 AC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH B0B2 AC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH B0B3 AC1C # HANGUL SYLLABLE KIYEOK-AE B0B4 AC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK B0B5 AC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN B0B6 AC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL B0B7 AC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM B0B8 AC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP B0B9 AC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS B0BA AC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS B0BB AC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG B0BC AC38 # HANGUL SYLLABLE KIYEOK-YA B0BD AC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK B0BE AC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN B0BF AC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL B0C0 AC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS B0C1 AC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG B0C2 AC54 # HANGUL SYLLABLE KIYEOK-YAE B0C3 AC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN B0C4 AC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL B0C5 AC70 # HANGUL SYLLABLE KIYEOK-EO B0C6 AC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK B0C7 AC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN B0C8 AC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT B0C9 AC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL B0CA AC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM B0CB AC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM B0CC AC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP B0CD AC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS B0CE AC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS B0CF AC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG B0D0 AC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC B0D1 AC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH B0D2 AC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH B0D3 AC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH B0D4 AC8C # HANGUL SYLLABLE KIYEOK-E B0D5 AC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN B0D6 AC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL B0D7 AC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM B0D8 AC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP B0D9 AC9F # HANGUL SYLLABLE KIYEOK-E-SIOS B0DA ACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS B0DB ACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG B0DC ACA8 # HANGUL SYLLABLE KIYEOK-YEO B0DD ACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK B0DE ACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK B0DF ACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN B0E0 ACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT B0E1 ACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL B0E2 ACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM B0E3 ACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP B0E4 ACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS B0E5 ACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS B0E6 ACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG B0E7 ACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH B0E8 ACC4 # HANGUL SYLLABLE KIYEOK-YE B0E9 ACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN B0EA ACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL B0EB ACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP B0EC ACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS B0ED ACE0 # HANGUL SYLLABLE KIYEOK-O B0EE ACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK B0EF ACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN B0F0 ACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT B0F1 ACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL B0F2 ACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM B0F3 ACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS B0F4 ACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH B0F5 ACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM B0F6 ACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP B0F7 ACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS B0F8 ACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG B0F9 ACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC B0FA ACFC # HANGUL SYLLABLE KIYEOK-WA B0FB ACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK B0FC AD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN B0FD AD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL B0FE AD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM B141 CF02 # HANGUL SYLLABLE KHIEUKH-E-SSANGKIYEOK B142 CF03 # HANGUL SYLLABLE KHIEUKH-E-KIYEOKSIOS B143 CF05 # HANGUL SYLLABLE KHIEUKH-E-NIEUNCIEUC B144 CF06 # HANGUL SYLLABLE KHIEUKH-E-NIEUNHIEUH B145 CF07 # HANGUL SYLLABLE KHIEUKH-E-TIKEUT B146 CF09 # HANGUL SYLLABLE KHIEUKH-E-RIEULKIYEOK B147 CF0A # HANGUL SYLLABLE KHIEUKH-E-RIEULMIEUM B148 CF0B # HANGUL SYLLABLE KHIEUKH-E-RIEULPIEUP B149 CF0C # HANGUL SYLLABLE KHIEUKH-E-RIEULSIOS B14A CF0D # HANGUL SYLLABLE KHIEUKH-E-RIEULTHIEUTH B14B CF0E # HANGUL SYLLABLE KHIEUKH-E-RIEULPHIEUPH B14C CF0F # HANGUL SYLLABLE KHIEUKH-E-RIEULHIEUH B14D CF12 # HANGUL SYLLABLE KHIEUKH-E-PIEUPSIOS B14E CF14 # HANGUL SYLLABLE KHIEUKH-E-SSANGSIOS B14F CF16 # HANGUL SYLLABLE KHIEUKH-E-CIEUC B150 CF17 # HANGUL SYLLABLE KHIEUKH-E-CHIEUCH B151 CF18 # HANGUL SYLLABLE KHIEUKH-E-KHIEUKH B152 CF19 # HANGUL SYLLABLE KHIEUKH-E-THIEUTH B153 CF1A # HANGUL SYLLABLE KHIEUKH-E-PHIEUPH B154 CF1B # HANGUL SYLLABLE KHIEUKH-E-HIEUH B155 CF1D # HANGUL SYLLABLE KHIEUKH-YEO-KIYEOK B156 CF1E # HANGUL SYLLABLE KHIEUKH-YEO-SSANGKIYEOK B157 CF1F # HANGUL SYLLABLE KHIEUKH-YEO-KIYEOKSIOS B158 CF21 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUNCIEUC B159 CF22 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUNHIEUH B15A CF23 # HANGUL SYLLABLE KHIEUKH-YEO-TIKEUT B161 CF25 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULKIYEOK B162 CF26 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULMIEUM B163 CF27 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULPIEUP B164 CF28 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULSIOS B165 CF29 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULTHIEUTH B166 CF2A # HANGUL SYLLABLE KHIEUKH-YEO-RIEULPHIEUPH B167 CF2B # HANGUL SYLLABLE KHIEUKH-YEO-RIEULHIEUH B168 CF2E # HANGUL SYLLABLE KHIEUKH-YEO-PIEUPSIOS B169 CF32 # HANGUL SYLLABLE KHIEUKH-YEO-CIEUC B16A CF33 # HANGUL SYLLABLE KHIEUKH-YEO-CHIEUCH B16B CF34 # HANGUL SYLLABLE KHIEUKH-YEO-KHIEUKH B16C CF35 # HANGUL SYLLABLE KHIEUKH-YEO-THIEUTH B16D CF36 # HANGUL SYLLABLE KHIEUKH-YEO-PHIEUPH B16E CF37 # HANGUL SYLLABLE KHIEUKH-YEO-HIEUH B16F CF39 # HANGUL SYLLABLE KHIEUKH-YE-KIYEOK B170 CF3A # HANGUL SYLLABLE KHIEUKH-YE-SSANGKIYEOK B171 CF3B # HANGUL SYLLABLE KHIEUKH-YE-KIYEOKSIOS B172 CF3C # HANGUL SYLLABLE KHIEUKH-YE-NIEUN B173 CF3D # HANGUL SYLLABLE KHIEUKH-YE-NIEUNCIEUC B174 CF3E # HANGUL SYLLABLE KHIEUKH-YE-NIEUNHIEUH B175 CF3F # HANGUL SYLLABLE KHIEUKH-YE-TIKEUT B176 CF40 # HANGUL SYLLABLE KHIEUKH-YE-RIEUL B177 CF41 # HANGUL SYLLABLE KHIEUKH-YE-RIEULKIYEOK B178 CF42 # HANGUL SYLLABLE KHIEUKH-YE-RIEULMIEUM B179 CF43 # HANGUL SYLLABLE KHIEUKH-YE-RIEULPIEUP B17A CF44 # HANGUL SYLLABLE KHIEUKH-YE-RIEULSIOS B181 CF45 # HANGUL SYLLABLE KHIEUKH-YE-RIEULTHIEUTH B182 CF46 # HANGUL SYLLABLE KHIEUKH-YE-RIEULPHIEUPH B183 CF47 # HANGUL SYLLABLE KHIEUKH-YE-RIEULHIEUH B184 CF48 # HANGUL SYLLABLE KHIEUKH-YE-MIEUM B185 CF49 # HANGUL SYLLABLE KHIEUKH-YE-PIEUP B186 CF4A # HANGUL SYLLABLE KHIEUKH-YE-PIEUPSIOS B187 CF4B # HANGUL SYLLABLE KHIEUKH-YE-SIOS B188 CF4C # HANGUL SYLLABLE KHIEUKH-YE-SSANGSIOS B189 CF4D # HANGUL SYLLABLE KHIEUKH-YE-IEUNG B18A CF4E # HANGUL SYLLABLE KHIEUKH-YE-CIEUC B18B CF4F # HANGUL SYLLABLE KHIEUKH-YE-CHIEUCH B18C CF50 # HANGUL SYLLABLE KHIEUKH-YE-KHIEUKH B18D CF51 # HANGUL SYLLABLE KHIEUKH-YE-THIEUTH B18E CF52 # HANGUL SYLLABLE KHIEUKH-YE-PHIEUPH B18F CF53 # HANGUL SYLLABLE KHIEUKH-YE-HIEUH B190 CF56 # HANGUL SYLLABLE KHIEUKH-O-SSANGKIYEOK B191 CF57 # HANGUL SYLLABLE KHIEUKH-O-KIYEOKSIOS B192 CF59 # HANGUL SYLLABLE KHIEUKH-O-NIEUNCIEUC B193 CF5A # HANGUL SYLLABLE KHIEUKH-O-NIEUNHIEUH B194 CF5B # HANGUL SYLLABLE KHIEUKH-O-TIKEUT B195 CF5D # HANGUL SYLLABLE KHIEUKH-O-RIEULKIYEOK B196 CF5E # HANGUL SYLLABLE KHIEUKH-O-RIEULMIEUM B197 CF5F # HANGUL SYLLABLE KHIEUKH-O-RIEULPIEUP B198 CF60 # HANGUL SYLLABLE KHIEUKH-O-RIEULSIOS B199 CF61 # HANGUL SYLLABLE KHIEUKH-O-RIEULTHIEUTH B19A CF62 # HANGUL SYLLABLE KHIEUKH-O-RIEULPHIEUPH B19B CF63 # HANGUL SYLLABLE KHIEUKH-O-RIEULHIEUH B19C CF66 # HANGUL SYLLABLE KHIEUKH-O-PIEUPSIOS B19D CF68 # HANGUL SYLLABLE KHIEUKH-O-SSANGSIOS B19E CF6A # HANGUL SYLLABLE KHIEUKH-O-CIEUC B19F CF6B # HANGUL SYLLABLE KHIEUKH-O-CHIEUCH B1A0 CF6C # HANGUL SYLLABLE KHIEUKH-O-KHIEUKH B1A1 AD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM B1A2 AD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP B1A3 AD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS B1A4 AD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG B1A5 AD18 # HANGUL SYLLABLE KIYEOK-WAE B1A6 AD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN B1A7 AD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL B1A8 AD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP B1A9 AD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS B1AA AD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG B1AB AD34 # HANGUL SYLLABLE KIYEOK-OE B1AC AD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK B1AD AD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN B1AE AD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL B1AF AD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM B1B0 AD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP B1B1 AD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS B1B2 AD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG B1B3 AD50 # HANGUL SYLLABLE KIYEOK-YO B1B4 AD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN B1B5 AD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL B1B6 AD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP B1B7 AD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS B1B8 AD6C # HANGUL SYLLABLE KIYEOK-U B1B9 AD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK B1BA AD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN B1BB AD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT B1BC AD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL B1BD AD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK B1BE AD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM B1BF AD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH B1C0 AD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM B1C1 AD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP B1C2 AD7F # HANGUL SYLLABLE KIYEOK-U-SIOS B1C3 AD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG B1C4 AD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC B1C5 AD88 # HANGUL SYLLABLE KIYEOK-WEO B1C6 AD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK B1C7 AD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN B1C8 AD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL B1C9 AD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS B1CA AD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG B1CB ADA4 # HANGUL SYLLABLE KIYEOK-WE B1CC ADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS B1CD ADC0 # HANGUL SYLLABLE KIYEOK-WI B1CE ADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK B1CF ADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN B1D0 ADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL B1D1 ADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM B1D2 ADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP B1D3 ADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS B1D4 ADDC # HANGUL SYLLABLE KIYEOK-YU B1D5 ADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN B1D6 ADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL B1D7 ADF8 # HANGUL SYLLABLE KIYEOK-EU B1D8 ADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK B1D9 ADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN B1DA ADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT B1DB AE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL B1DC AE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK B1DD AE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM B1DE AE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP B1DF AE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS B1E0 AE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG B1E1 AE14 # HANGUL SYLLABLE KIYEOK-YI B1E2 AE30 # HANGUL SYLLABLE KIYEOK-I B1E3 AE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK B1E4 AE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN B1E5 AE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT B1E6 AE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL B1E7 AE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM B1E8 AE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM B1E9 AE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP B1EA AE43 # HANGUL SYLLABLE KIYEOK-I-SIOS B1EB AE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG B1EC AE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC B1ED AE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH B1EE AE4C # HANGUL SYLLABLE SSANGKIYEOK-A B1EF AE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK B1F0 AE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK B1F1 AE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN B1F2 AE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL B1F3 AE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM B1F4 AE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM B1F5 AE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP B1F6 AE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS B1F7 AE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS B1F8 AE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG B1F9 AE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH B1FA AE68 # HANGUL SYLLABLE SSANGKIYEOK-AE B1FB AE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK B1FC AE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN B1FD AE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL B1FE AE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM B241 CF6D # HANGUL SYLLABLE KHIEUKH-O-THIEUTH B242 CF6E # HANGUL SYLLABLE KHIEUKH-O-PHIEUPH B243 CF6F # HANGUL SYLLABLE KHIEUKH-O-HIEUH B244 CF72 # HANGUL SYLLABLE KHIEUKH-WA-SSANGKIYEOK B245 CF73 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOKSIOS B246 CF75 # HANGUL SYLLABLE KHIEUKH-WA-NIEUNCIEUC B247 CF76 # HANGUL SYLLABLE KHIEUKH-WA-NIEUNHIEUH B248 CF77 # HANGUL SYLLABLE KHIEUKH-WA-TIKEUT B249 CF79 # HANGUL SYLLABLE KHIEUKH-WA-RIEULKIYEOK B24A CF7A # HANGUL SYLLABLE KHIEUKH-WA-RIEULMIEUM B24B CF7B # HANGUL SYLLABLE KHIEUKH-WA-RIEULPIEUP B24C CF7C # HANGUL SYLLABLE KHIEUKH-WA-RIEULSIOS B24D CF7D # HANGUL SYLLABLE KHIEUKH-WA-RIEULTHIEUTH B24E CF7E # HANGUL SYLLABLE KHIEUKH-WA-RIEULPHIEUPH B24F CF7F # HANGUL SYLLABLE KHIEUKH-WA-RIEULHIEUH B250 CF81 # HANGUL SYLLABLE KHIEUKH-WA-PIEUP B251 CF82 # HANGUL SYLLABLE KHIEUKH-WA-PIEUPSIOS B252 CF83 # HANGUL SYLLABLE KHIEUKH-WA-SIOS B253 CF84 # HANGUL SYLLABLE KHIEUKH-WA-SSANGSIOS B254 CF86 # HANGUL SYLLABLE KHIEUKH-WA-CIEUC B255 CF87 # HANGUL SYLLABLE KHIEUKH-WA-CHIEUCH B256 CF88 # HANGUL SYLLABLE KHIEUKH-WA-KHIEUKH B257 CF89 # HANGUL SYLLABLE KHIEUKH-WA-THIEUTH B258 CF8A # HANGUL SYLLABLE KHIEUKH-WA-PHIEUPH B259 CF8B # HANGUL SYLLABLE KHIEUKH-WA-HIEUH B25A CF8D # HANGUL SYLLABLE KHIEUKH-WAE-KIYEOK B261 CF8E # HANGUL SYLLABLE KHIEUKH-WAE-SSANGKIYEOK B262 CF8F # HANGUL SYLLABLE KHIEUKH-WAE-KIYEOKSIOS B263 CF90 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUN B264 CF91 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUNCIEUC B265 CF92 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUNHIEUH B266 CF93 # HANGUL SYLLABLE KHIEUKH-WAE-TIKEUT B267 CF94 # HANGUL SYLLABLE KHIEUKH-WAE-RIEUL B268 CF95 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULKIYEOK B269 CF96 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULMIEUM B26A CF97 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULPIEUP B26B CF98 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULSIOS B26C CF99 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULTHIEUTH B26D CF9A # HANGUL SYLLABLE KHIEUKH-WAE-RIEULPHIEUPH B26E CF9B # HANGUL SYLLABLE KHIEUKH-WAE-RIEULHIEUH B26F CF9C # HANGUL SYLLABLE KHIEUKH-WAE-MIEUM B270 CF9D # HANGUL SYLLABLE KHIEUKH-WAE-PIEUP B271 CF9E # HANGUL SYLLABLE KHIEUKH-WAE-PIEUPSIOS B272 CF9F # HANGUL SYLLABLE KHIEUKH-WAE-SIOS B273 CFA0 # HANGUL SYLLABLE KHIEUKH-WAE-SSANGSIOS B274 CFA2 # HANGUL SYLLABLE KHIEUKH-WAE-CIEUC B275 CFA3 # HANGUL SYLLABLE KHIEUKH-WAE-CHIEUCH B276 CFA4 # HANGUL SYLLABLE KHIEUKH-WAE-KHIEUKH B277 CFA5 # HANGUL SYLLABLE KHIEUKH-WAE-THIEUTH B278 CFA6 # HANGUL SYLLABLE KHIEUKH-WAE-PHIEUPH B279 CFA7 # HANGUL SYLLABLE KHIEUKH-WAE-HIEUH B27A CFA9 # HANGUL SYLLABLE KHIEUKH-OE-KIYEOK B281 CFAA # HANGUL SYLLABLE KHIEUKH-OE-SSANGKIYEOK B282 CFAB # HANGUL SYLLABLE KHIEUKH-OE-KIYEOKSIOS B283 CFAC # HANGUL SYLLABLE KHIEUKH-OE-NIEUN B284 CFAD # HANGUL SYLLABLE KHIEUKH-OE-NIEUNCIEUC B285 CFAE # HANGUL SYLLABLE KHIEUKH-OE-NIEUNHIEUH B286 CFAF # HANGUL SYLLABLE KHIEUKH-OE-TIKEUT B287 CFB1 # HANGUL SYLLABLE KHIEUKH-OE-RIEULKIYEOK B288 CFB2 # HANGUL SYLLABLE KHIEUKH-OE-RIEULMIEUM B289 CFB3 # HANGUL SYLLABLE KHIEUKH-OE-RIEULPIEUP B28A CFB4 # HANGUL SYLLABLE KHIEUKH-OE-RIEULSIOS B28B CFB5 # HANGUL SYLLABLE KHIEUKH-OE-RIEULTHIEUTH B28C CFB6 # HANGUL SYLLABLE KHIEUKH-OE-RIEULPHIEUPH B28D CFB7 # HANGUL SYLLABLE KHIEUKH-OE-RIEULHIEUH B28E CFB8 # HANGUL SYLLABLE KHIEUKH-OE-MIEUM B28F CFB9 # HANGUL SYLLABLE KHIEUKH-OE-PIEUP B290 CFBA # HANGUL SYLLABLE KHIEUKH-OE-PIEUPSIOS B291 CFBB # HANGUL SYLLABLE KHIEUKH-OE-SIOS B292 CFBC # HANGUL SYLLABLE KHIEUKH-OE-SSANGSIOS B293 CFBD # HANGUL SYLLABLE KHIEUKH-OE-IEUNG B294 CFBE # HANGUL SYLLABLE KHIEUKH-OE-CIEUC B295 CFBF # HANGUL SYLLABLE KHIEUKH-OE-CHIEUCH B296 CFC0 # HANGUL SYLLABLE KHIEUKH-OE-KHIEUKH B297 CFC1 # HANGUL SYLLABLE KHIEUKH-OE-THIEUTH B298 CFC2 # HANGUL SYLLABLE KHIEUKH-OE-PHIEUPH B299 CFC3 # HANGUL SYLLABLE KHIEUKH-OE-HIEUH B29A CFC5 # HANGUL SYLLABLE KHIEUKH-YO-KIYEOK B29B CFC6 # HANGUL SYLLABLE KHIEUKH-YO-SSANGKIYEOK B29C CFC7 # HANGUL SYLLABLE KHIEUKH-YO-KIYEOKSIOS B29D CFC8 # HANGUL SYLLABLE KHIEUKH-YO-NIEUN B29E CFC9 # HANGUL SYLLABLE KHIEUKH-YO-NIEUNCIEUC B29F CFCA # HANGUL SYLLABLE KHIEUKH-YO-NIEUNHIEUH B2A0 CFCB # HANGUL SYLLABLE KHIEUKH-YO-TIKEUT B2A1 AE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP B2A2 AE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS B2A3 AE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS B2A4 AE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG B2A5 AE84 # HANGUL SYLLABLE SSANGKIYEOK-YA B2A6 AE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK B2A7 AE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL B2A8 AEBC # HANGUL SYLLABLE SSANGKIYEOK-EO B2A9 AEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK B2AA AEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK B2AB AEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN B2AC AEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL B2AD AECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM B2AE AECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP B2AF AECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS B2B0 AED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS B2B1 AED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG B2B2 AED8 # HANGUL SYLLABLE SSANGKIYEOK-E B2B3 AED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK B2B4 AEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN B2B5 AEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM B2B6 AEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS B2B7 AEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG B2B8 AEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO B2B9 AEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN B2BA AEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL B2BB AF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS B2BC AF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS B2BD AF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH B2BE AF10 # HANGUL SYLLABLE SSANGKIYEOK-YE B2BF AF2C # HANGUL SYLLABLE SSANGKIYEOK-O B2C0 AF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK B2C1 AF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN B2C2 AF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH B2C3 AF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL B2C4 AF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM B2C5 AF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP B2C6 AF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS B2C7 AF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG B2C8 AF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC B2C9 AF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH B2CA AF48 # HANGUL SYLLABLE SSANGKIYEOK-WA B2CB AF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK B2CC AF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL B2CD AF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS B2CE AF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG B2CF AF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE B2D0 AF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK B2D1 AF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG B2D2 AF80 # HANGUL SYLLABLE SSANGKIYEOK-OE B2D3 AF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN B2D4 AF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL B2D5 AF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM B2D6 AF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP B2D7 AF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG B2D8 AF9C # HANGUL SYLLABLE SSANGKIYEOK-YO B2D9 AFB8 # HANGUL SYLLABLE SSANGKIYEOK-U B2DA AFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK B2DB AFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN B2DC AFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL B2DD AFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH B2DE AFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM B2DF AFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP B2E0 AFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS B2E1 AFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG B2E2 AFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC B2E3 AFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO B2E4 AFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL B2E5 AFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS B2E6 AFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG B2E7 AFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE B2E8 AFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK B2E9 AFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN B2EA AFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL B2EB B000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM B2EC B001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP B2ED B004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS B2EE B00C # HANGUL SYLLABLE SSANGKIYEOK-WI B2EF B010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN B2F0 B014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL B2F1 B01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM B2F2 B01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP B2F3 B028 # HANGUL SYLLABLE SSANGKIYEOK-YU B2F4 B044 # HANGUL SYLLABLE SSANGKIYEOK-EU B2F5 B045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK B2F6 B048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN B2F7 B04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH B2F8 B04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL B2F9 B04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM B2FA B053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH B2FB B054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM B2FC B055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP B2FD B057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS B2FE B059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG B341 CFCC # HANGUL SYLLABLE KHIEUKH-YO-RIEUL B342 CFCD # HANGUL SYLLABLE KHIEUKH-YO-RIEULKIYEOK B343 CFCE # HANGUL SYLLABLE KHIEUKH-YO-RIEULMIEUM B344 CFCF # HANGUL SYLLABLE KHIEUKH-YO-RIEULPIEUP B345 CFD0 # HANGUL SYLLABLE KHIEUKH-YO-RIEULSIOS B346 CFD1 # HANGUL SYLLABLE KHIEUKH-YO-RIEULTHIEUTH B347 CFD2 # HANGUL SYLLABLE KHIEUKH-YO-RIEULPHIEUPH B348 CFD3 # HANGUL SYLLABLE KHIEUKH-YO-RIEULHIEUH B349 CFD4 # HANGUL SYLLABLE KHIEUKH-YO-MIEUM B34A CFD5 # HANGUL SYLLABLE KHIEUKH-YO-PIEUP B34B CFD6 # HANGUL SYLLABLE KHIEUKH-YO-PIEUPSIOS B34C CFD7 # HANGUL SYLLABLE KHIEUKH-YO-SIOS B34D CFD8 # HANGUL SYLLABLE KHIEUKH-YO-SSANGSIOS B34E CFD9 # HANGUL SYLLABLE KHIEUKH-YO-IEUNG B34F CFDA # HANGUL SYLLABLE KHIEUKH-YO-CIEUC B350 CFDB # HANGUL SYLLABLE KHIEUKH-YO-CHIEUCH B351 CFDC # HANGUL SYLLABLE KHIEUKH-YO-KHIEUKH B352 CFDD # HANGUL SYLLABLE KHIEUKH-YO-THIEUTH B353 CFDE # HANGUL SYLLABLE KHIEUKH-YO-PHIEUPH B354 CFDF # HANGUL SYLLABLE KHIEUKH-YO-HIEUH B355 CFE2 # HANGUL SYLLABLE KHIEUKH-U-SSANGKIYEOK B356 CFE3 # HANGUL SYLLABLE KHIEUKH-U-KIYEOKSIOS B357 CFE5 # HANGUL SYLLABLE KHIEUKH-U-NIEUNCIEUC B358 CFE6 # HANGUL SYLLABLE KHIEUKH-U-NIEUNHIEUH B359 CFE7 # HANGUL SYLLABLE KHIEUKH-U-TIKEUT B35A CFE9 # HANGUL SYLLABLE KHIEUKH-U-RIEULKIYEOK B361 CFEA # HANGUL SYLLABLE KHIEUKH-U-RIEULMIEUM B362 CFEB # HANGUL SYLLABLE KHIEUKH-U-RIEULPIEUP B363 CFEC # HANGUL SYLLABLE KHIEUKH-U-RIEULSIOS B364 CFED # HANGUL SYLLABLE KHIEUKH-U-RIEULTHIEUTH B365 CFEE # HANGUL SYLLABLE KHIEUKH-U-RIEULPHIEUPH B366 CFEF # HANGUL SYLLABLE KHIEUKH-U-RIEULHIEUH B367 CFF2 # HANGUL SYLLABLE KHIEUKH-U-PIEUPSIOS B368 CFF4 # HANGUL SYLLABLE KHIEUKH-U-SSANGSIOS B369 CFF6 # HANGUL SYLLABLE KHIEUKH-U-CIEUC B36A CFF7 # HANGUL SYLLABLE KHIEUKH-U-CHIEUCH B36B CFF8 # HANGUL SYLLABLE KHIEUKH-U-KHIEUKH B36C CFF9 # HANGUL SYLLABLE KHIEUKH-U-THIEUTH B36D CFFA # HANGUL SYLLABLE KHIEUKH-U-PHIEUPH B36E CFFB # HANGUL SYLLABLE KHIEUKH-U-HIEUH B36F CFFD # HANGUL SYLLABLE KHIEUKH-WEO-KIYEOK B370 CFFE # HANGUL SYLLABLE KHIEUKH-WEO-SSANGKIYEOK B371 CFFF # HANGUL SYLLABLE KHIEUKH-WEO-KIYEOKSIOS B372 D001 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUNCIEUC B373 D002 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUNHIEUH B374 D003 # HANGUL SYLLABLE KHIEUKH-WEO-TIKEUT B375 D005 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULKIYEOK B376 D006 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULMIEUM B377 D007 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULPIEUP B378 D008 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULSIOS B379 D009 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULTHIEUTH B37A D00A # HANGUL SYLLABLE KHIEUKH-WEO-RIEULPHIEUPH B381 D00B # HANGUL SYLLABLE KHIEUKH-WEO-RIEULHIEUH B382 D00C # HANGUL SYLLABLE KHIEUKH-WEO-MIEUM B383 D00D # HANGUL SYLLABLE KHIEUKH-WEO-PIEUP B384 D00E # HANGUL SYLLABLE KHIEUKH-WEO-PIEUPSIOS B385 D00F # HANGUL SYLLABLE KHIEUKH-WEO-SIOS B386 D010 # HANGUL SYLLABLE KHIEUKH-WEO-SSANGSIOS B387 D012 # HANGUL SYLLABLE KHIEUKH-WEO-CIEUC B388 D013 # HANGUL SYLLABLE KHIEUKH-WEO-CHIEUCH B389 D014 # HANGUL SYLLABLE KHIEUKH-WEO-KHIEUKH B38A D015 # HANGUL SYLLABLE KHIEUKH-WEO-THIEUTH B38B D016 # HANGUL SYLLABLE KHIEUKH-WEO-PHIEUPH B38C D017 # HANGUL SYLLABLE KHIEUKH-WEO-HIEUH B38D D019 # HANGUL SYLLABLE KHIEUKH-WE-KIYEOK B38E D01A # HANGUL SYLLABLE KHIEUKH-WE-SSANGKIYEOK B38F D01B # HANGUL SYLLABLE KHIEUKH-WE-KIYEOKSIOS B390 D01C # HANGUL SYLLABLE KHIEUKH-WE-NIEUN B391 D01D # HANGUL SYLLABLE KHIEUKH-WE-NIEUNCIEUC B392 D01E # HANGUL SYLLABLE KHIEUKH-WE-NIEUNHIEUH B393 D01F # HANGUL SYLLABLE KHIEUKH-WE-TIKEUT B394 D020 # HANGUL SYLLABLE KHIEUKH-WE-RIEUL B395 D021 # HANGUL SYLLABLE KHIEUKH-WE-RIEULKIYEOK B396 D022 # HANGUL SYLLABLE KHIEUKH-WE-RIEULMIEUM B397 D023 # HANGUL SYLLABLE KHIEUKH-WE-RIEULPIEUP B398 D024 # HANGUL SYLLABLE KHIEUKH-WE-RIEULSIOS B399 D025 # HANGUL SYLLABLE KHIEUKH-WE-RIEULTHIEUTH B39A D026 # HANGUL SYLLABLE KHIEUKH-WE-RIEULPHIEUPH B39B D027 # HANGUL SYLLABLE KHIEUKH-WE-RIEULHIEUH B39C D028 # HANGUL SYLLABLE KHIEUKH-WE-MIEUM B39D D029 # HANGUL SYLLABLE KHIEUKH-WE-PIEUP B39E D02A # HANGUL SYLLABLE KHIEUKH-WE-PIEUPSIOS B39F D02B # HANGUL SYLLABLE KHIEUKH-WE-SIOS B3A0 D02C # HANGUL SYLLABLE KHIEUKH-WE-SSANGSIOS B3A1 B05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH B3A2 B07C # HANGUL SYLLABLE SSANGKIYEOK-I B3A3 B07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK B3A4 B080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN B3A5 B084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL B3A6 B08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM B3A7 B08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP B3A8 B08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS B3A9 B091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG B3AA B098 # HANGUL SYLLABLE NIEUN-A B3AB B099 # HANGUL SYLLABLE NIEUN-A-KIYEOK B3AC B09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK B3AD B09C # HANGUL SYLLABLE NIEUN-A-NIEUN B3AE B09F # HANGUL SYLLABLE NIEUN-A-TIKEUT B3AF B0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL B3B0 B0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK B3B1 B0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM B3B2 B0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM B3B3 B0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP B3B4 B0AB # HANGUL SYLLABLE NIEUN-A-SIOS B3B5 B0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS B3B6 B0AD # HANGUL SYLLABLE NIEUN-A-IEUNG B3B7 B0AE # HANGUL SYLLABLE NIEUN-A-CIEUC B3B8 B0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH B3B9 B0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH B3BA B0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH B3BB B0B4 # HANGUL SYLLABLE NIEUN-AE B3BC B0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK B3BD B0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN B3BE B0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL B3BF B0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM B3C0 B0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP B3C1 B0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS B3C2 B0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS B3C3 B0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG B3C4 B0D0 # HANGUL SYLLABLE NIEUN-YA B3C5 B0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK B3C6 B0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN B3C7 B0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL B3C8 B0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM B3C9 B0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG B3CA B108 # HANGUL SYLLABLE NIEUN-EO B3CB B109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK B3CC B10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS B3CD B10C # HANGUL SYLLABLE NIEUN-EO-NIEUN B3CE B110 # HANGUL SYLLABLE NIEUN-EO-RIEUL B3CF B112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM B3D0 B113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP B3D1 B118 # HANGUL SYLLABLE NIEUN-EO-MIEUM B3D2 B119 # HANGUL SYLLABLE NIEUN-EO-PIEUP B3D3 B11B # HANGUL SYLLABLE NIEUN-EO-SIOS B3D4 B11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS B3D5 B11D # HANGUL SYLLABLE NIEUN-EO-IEUNG B3D6 B123 # HANGUL SYLLABLE NIEUN-EO-HIEUH B3D7 B124 # HANGUL SYLLABLE NIEUN-E B3D8 B125 # HANGUL SYLLABLE NIEUN-E-KIYEOK B3D9 B128 # HANGUL SYLLABLE NIEUN-E-NIEUN B3DA B12C # HANGUL SYLLABLE NIEUN-E-RIEUL B3DB B134 # HANGUL SYLLABLE NIEUN-E-MIEUM B3DC B135 # HANGUL SYLLABLE NIEUN-E-PIEUP B3DD B137 # HANGUL SYLLABLE NIEUN-E-SIOS B3DE B138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS B3DF B139 # HANGUL SYLLABLE NIEUN-E-IEUNG B3E0 B140 # HANGUL SYLLABLE NIEUN-YEO B3E1 B141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK B3E2 B144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN B3E3 B148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL B3E4 B150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM B3E5 B151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP B3E6 B154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS B3E7 B155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG B3E8 B158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH B3E9 B15C # HANGUL SYLLABLE NIEUN-YE B3EA B160 # HANGUL SYLLABLE NIEUN-YE-NIEUN B3EB B178 # HANGUL SYLLABLE NIEUN-O B3EC B179 # HANGUL SYLLABLE NIEUN-O-KIYEOK B3ED B17C # HANGUL SYLLABLE NIEUN-O-NIEUN B3EE B180 # HANGUL SYLLABLE NIEUN-O-RIEUL B3EF B182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM B3F0 B188 # HANGUL SYLLABLE NIEUN-O-MIEUM B3F1 B189 # HANGUL SYLLABLE NIEUN-O-PIEUP B3F2 B18B # HANGUL SYLLABLE NIEUN-O-SIOS B3F3 B18D # HANGUL SYLLABLE NIEUN-O-IEUNG B3F4 B192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH B3F5 B193 # HANGUL SYLLABLE NIEUN-O-HIEUH B3F6 B194 # HANGUL SYLLABLE NIEUN-WA B3F7 B198 # HANGUL SYLLABLE NIEUN-WA-NIEUN B3F8 B19C # HANGUL SYLLABLE NIEUN-WA-RIEUL B3F9 B1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS B3FA B1CC # HANGUL SYLLABLE NIEUN-OE B3FB B1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN B3FC B1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL B3FD B1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM B3FE B1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP B441 D02E # HANGUL SYLLABLE KHIEUKH-WE-CIEUC B442 D02F # HANGUL SYLLABLE KHIEUKH-WE-CHIEUCH B443 D030 # HANGUL SYLLABLE KHIEUKH-WE-KHIEUKH B444 D031 # HANGUL SYLLABLE KHIEUKH-WE-THIEUTH B445 D032 # HANGUL SYLLABLE KHIEUKH-WE-PHIEUPH B446 D033 # HANGUL SYLLABLE KHIEUKH-WE-HIEUH B447 D036 # HANGUL SYLLABLE KHIEUKH-WI-SSANGKIYEOK B448 D037 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOKSIOS B449 D039 # HANGUL SYLLABLE KHIEUKH-WI-NIEUNCIEUC B44A D03A # HANGUL SYLLABLE KHIEUKH-WI-NIEUNHIEUH B44B D03B # HANGUL SYLLABLE KHIEUKH-WI-TIKEUT B44C D03D # HANGUL SYLLABLE KHIEUKH-WI-RIEULKIYEOK B44D D03E # HANGUL SYLLABLE KHIEUKH-WI-RIEULMIEUM B44E D03F # HANGUL SYLLABLE KHIEUKH-WI-RIEULPIEUP B44F D040 # HANGUL SYLLABLE KHIEUKH-WI-RIEULSIOS B450 D041 # HANGUL SYLLABLE KHIEUKH-WI-RIEULTHIEUTH B451 D042 # HANGUL SYLLABLE KHIEUKH-WI-RIEULPHIEUPH B452 D043 # HANGUL SYLLABLE KHIEUKH-WI-RIEULHIEUH B453 D046 # HANGUL SYLLABLE KHIEUKH-WI-PIEUPSIOS B454 D048 # HANGUL SYLLABLE KHIEUKH-WI-SSANGSIOS B455 D04A # HANGUL SYLLABLE KHIEUKH-WI-CIEUC B456 D04B # HANGUL SYLLABLE KHIEUKH-WI-CHIEUCH B457 D04C # HANGUL SYLLABLE KHIEUKH-WI-KHIEUKH B458 D04D # HANGUL SYLLABLE KHIEUKH-WI-THIEUTH B459 D04E # HANGUL SYLLABLE KHIEUKH-WI-PHIEUPH B45A D04F # HANGUL SYLLABLE KHIEUKH-WI-HIEUH B461 D051 # HANGUL SYLLABLE KHIEUKH-YU-KIYEOK B462 D052 # HANGUL SYLLABLE KHIEUKH-YU-SSANGKIYEOK B463 D053 # HANGUL SYLLABLE KHIEUKH-YU-KIYEOKSIOS B464 D055 # HANGUL SYLLABLE KHIEUKH-YU-NIEUNCIEUC B465 D056 # HANGUL SYLLABLE KHIEUKH-YU-NIEUNHIEUH B466 D057 # HANGUL SYLLABLE KHIEUKH-YU-TIKEUT B467 D059 # HANGUL SYLLABLE KHIEUKH-YU-RIEULKIYEOK B468 D05A # HANGUL SYLLABLE KHIEUKH-YU-RIEULMIEUM B469 D05B # HANGUL SYLLABLE KHIEUKH-YU-RIEULPIEUP B46A D05C # HANGUL SYLLABLE KHIEUKH-YU-RIEULSIOS B46B D05D # HANGUL SYLLABLE KHIEUKH-YU-RIEULTHIEUTH B46C D05E # HANGUL SYLLABLE KHIEUKH-YU-RIEULPHIEUPH B46D D05F # HANGUL SYLLABLE KHIEUKH-YU-RIEULHIEUH B46E D061 # HANGUL SYLLABLE KHIEUKH-YU-PIEUP B46F D062 # HANGUL SYLLABLE KHIEUKH-YU-PIEUPSIOS B470 D063 # HANGUL SYLLABLE KHIEUKH-YU-SIOS B471 D064 # HANGUL SYLLABLE KHIEUKH-YU-SSANGSIOS B472 D065 # HANGUL SYLLABLE KHIEUKH-YU-IEUNG B473 D066 # HANGUL SYLLABLE KHIEUKH-YU-CIEUC B474 D067 # HANGUL SYLLABLE KHIEUKH-YU-CHIEUCH B475 D068 # HANGUL SYLLABLE KHIEUKH-YU-KHIEUKH B476 D069 # HANGUL SYLLABLE KHIEUKH-YU-THIEUTH B477 D06A # HANGUL SYLLABLE KHIEUKH-YU-PHIEUPH B478 D06B # HANGUL SYLLABLE KHIEUKH-YU-HIEUH B479 D06E # HANGUL SYLLABLE KHIEUKH-EU-SSANGKIYEOK B47A D06F # HANGUL SYLLABLE KHIEUKH-EU-KIYEOKSIOS B481 D071 # HANGUL SYLLABLE KHIEUKH-EU-NIEUNCIEUC B482 D072 # HANGUL SYLLABLE KHIEUKH-EU-NIEUNHIEUH B483 D073 # HANGUL SYLLABLE KHIEUKH-EU-TIKEUT B484 D075 # HANGUL SYLLABLE KHIEUKH-EU-RIEULKIYEOK B485 D076 # HANGUL SYLLABLE KHIEUKH-EU-RIEULMIEUM B486 D077 # HANGUL SYLLABLE KHIEUKH-EU-RIEULPIEUP B487 D078 # HANGUL SYLLABLE KHIEUKH-EU-RIEULSIOS B488 D079 # HANGUL SYLLABLE KHIEUKH-EU-RIEULTHIEUTH B489 D07A # HANGUL SYLLABLE KHIEUKH-EU-RIEULPHIEUPH B48A D07B # HANGUL SYLLABLE KHIEUKH-EU-RIEULHIEUH B48B D07E # HANGUL SYLLABLE KHIEUKH-EU-PIEUPSIOS B48C D07F # HANGUL SYLLABLE KHIEUKH-EU-SIOS B48D D080 # HANGUL SYLLABLE KHIEUKH-EU-SSANGSIOS B48E D082 # HANGUL SYLLABLE KHIEUKH-EU-CIEUC B48F D083 # HANGUL SYLLABLE KHIEUKH-EU-CHIEUCH B490 D084 # HANGUL SYLLABLE KHIEUKH-EU-KHIEUKH B491 D085 # HANGUL SYLLABLE KHIEUKH-EU-THIEUTH B492 D086 # HANGUL SYLLABLE KHIEUKH-EU-PHIEUPH B493 D087 # HANGUL SYLLABLE KHIEUKH-EU-HIEUH B494 D088 # HANGUL SYLLABLE KHIEUKH-YI B495 D089 # HANGUL SYLLABLE KHIEUKH-YI-KIYEOK B496 D08A # HANGUL SYLLABLE KHIEUKH-YI-SSANGKIYEOK B497 D08B # HANGUL SYLLABLE KHIEUKH-YI-KIYEOKSIOS B498 D08C # HANGUL SYLLABLE KHIEUKH-YI-NIEUN B499 D08D # HANGUL SYLLABLE KHIEUKH-YI-NIEUNCIEUC B49A D08E # HANGUL SYLLABLE KHIEUKH-YI-NIEUNHIEUH B49B D08F # HANGUL SYLLABLE KHIEUKH-YI-TIKEUT B49C D090 # HANGUL SYLLABLE KHIEUKH-YI-RIEUL B49D D091 # HANGUL SYLLABLE KHIEUKH-YI-RIEULKIYEOK B49E D092 # HANGUL SYLLABLE KHIEUKH-YI-RIEULMIEUM B49F D093 # HANGUL SYLLABLE KHIEUKH-YI-RIEULPIEUP B4A0 D094 # HANGUL SYLLABLE KHIEUKH-YI-RIEULSIOS B4A1 B1DF # HANGUL SYLLABLE NIEUN-OE-SIOS B4A2 B1E8 # HANGUL SYLLABLE NIEUN-YO B4A3 B1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK B4A4 B1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN B4A5 B1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL B4A6 B1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP B4A7 B1FB # HANGUL SYLLABLE NIEUN-YO-SIOS B4A8 B1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG B4A9 B204 # HANGUL SYLLABLE NIEUN-U B4AA B205 # HANGUL SYLLABLE NIEUN-U-KIYEOK B4AB B208 # HANGUL SYLLABLE NIEUN-U-NIEUN B4AC B20B # HANGUL SYLLABLE NIEUN-U-TIKEUT B4AD B20C # HANGUL SYLLABLE NIEUN-U-RIEUL B4AE B214 # HANGUL SYLLABLE NIEUN-U-MIEUM B4AF B215 # HANGUL SYLLABLE NIEUN-U-PIEUP B4B0 B217 # HANGUL SYLLABLE NIEUN-U-SIOS B4B1 B219 # HANGUL SYLLABLE NIEUN-U-IEUNG B4B2 B220 # HANGUL SYLLABLE NIEUN-WEO B4B3 B234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS B4B4 B23C # HANGUL SYLLABLE NIEUN-WE B4B5 B258 # HANGUL SYLLABLE NIEUN-WI B4B6 B25C # HANGUL SYLLABLE NIEUN-WI-NIEUN B4B7 B260 # HANGUL SYLLABLE NIEUN-WI-RIEUL B4B8 B268 # HANGUL SYLLABLE NIEUN-WI-MIEUM B4B9 B269 # HANGUL SYLLABLE NIEUN-WI-PIEUP B4BA B274 # HANGUL SYLLABLE NIEUN-YU B4BB B275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK B4BC B27C # HANGUL SYLLABLE NIEUN-YU-RIEUL B4BD B284 # HANGUL SYLLABLE NIEUN-YU-MIEUM B4BE B285 # HANGUL SYLLABLE NIEUN-YU-PIEUP B4BF B289 # HANGUL SYLLABLE NIEUN-YU-IEUNG B4C0 B290 # HANGUL SYLLABLE NIEUN-EU B4C1 B291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK B4C2 B294 # HANGUL SYLLABLE NIEUN-EU-NIEUN B4C3 B298 # HANGUL SYLLABLE NIEUN-EU-RIEUL B4C4 B299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK B4C5 B29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM B4C6 B2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM B4C7 B2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP B4C8 B2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS B4C9 B2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG B4CA B2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC B4CB B2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH B4CC B2AC # HANGUL SYLLABLE NIEUN-YI B4CD B2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN B4CE B2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL B4CF B2C8 # HANGUL SYLLABLE NIEUN-I B4D0 B2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK B4D1 B2CC # HANGUL SYLLABLE NIEUN-I-NIEUN B4D2 B2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL B4D3 B2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95> B4D4 B2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM B4D5 B2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP B4D6 B2DB # HANGUL SYLLABLE NIEUN-I-SIOS B4D7 B2DD # HANGUL SYLLABLE NIEUN-I-IEUNG B4D8 B2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH B4D9 B2E4 # HANGUL SYLLABLE TIKEUT-A B4DA B2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK B4DB B2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK B4DC B2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN B4DD B2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT B4DE B2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL B4DF B2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK B4E0 B2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM B4E1 B2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP B4E2 B2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH B4E3 B2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM B4E4 B2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP B4E5 B2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS B4E6 B2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS B4E7 B2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG B4E8 B2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC B4E9 B2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH B4EA B2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH B4EB B300 # HANGUL SYLLABLE TIKEUT-AE B4EC B301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK B4ED B304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN B4EE B308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL B4EF B310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM B4F0 B311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP B4F1 B313 # HANGUL SYLLABLE TIKEUT-AE-SIOS B4F2 B314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS B4F3 B315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG B4F4 B31C # HANGUL SYLLABLE TIKEUT-YA B4F5 B354 # HANGUL SYLLABLE TIKEUT-EO B4F6 B355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK B4F7 B356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK B4F8 B358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN B4F9 B35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT B4FA B35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL B4FB B35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM B4FC B35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP B4FD B364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM B4FE B365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP B541 D095 # HANGUL SYLLABLE KHIEUKH-YI-RIEULTHIEUTH B542 D096 # HANGUL SYLLABLE KHIEUKH-YI-RIEULPHIEUPH B543 D097 # HANGUL SYLLABLE KHIEUKH-YI-RIEULHIEUH B544 D098 # HANGUL SYLLABLE KHIEUKH-YI-MIEUM B545 D099 # HANGUL SYLLABLE KHIEUKH-YI-PIEUP B546 D09A # HANGUL SYLLABLE KHIEUKH-YI-PIEUPSIOS B547 D09B # HANGUL SYLLABLE KHIEUKH-YI-SIOS B548 D09C # HANGUL SYLLABLE KHIEUKH-YI-SSANGSIOS B549 D09D # HANGUL SYLLABLE KHIEUKH-YI-IEUNG B54A D09E # HANGUL SYLLABLE KHIEUKH-YI-CIEUC B54B D09F # HANGUL SYLLABLE KHIEUKH-YI-CHIEUCH B54C D0A0 # HANGUL SYLLABLE KHIEUKH-YI-KHIEUKH B54D D0A1 # HANGUL SYLLABLE KHIEUKH-YI-THIEUTH B54E D0A2 # HANGUL SYLLABLE KHIEUKH-YI-PHIEUPH B54F D0A3 # HANGUL SYLLABLE KHIEUKH-YI-HIEUH B550 D0A6 # HANGUL SYLLABLE KHIEUKH-I-SSANGKIYEOK B551 D0A7 # HANGUL SYLLABLE KHIEUKH-I-KIYEOKSIOS B552 D0A9 # HANGUL SYLLABLE KHIEUKH-I-NIEUNCIEUC B553 D0AA # HANGUL SYLLABLE KHIEUKH-I-NIEUNHIEUH B554 D0AB # HANGUL SYLLABLE KHIEUKH-I-TIKEUT B555 D0AD # HANGUL SYLLABLE KHIEUKH-I-RIEULKIYEOK B556 D0AE # HANGUL SYLLABLE KHIEUKH-I-RIEULMIEUM B557 D0AF # HANGUL SYLLABLE KHIEUKH-I-RIEULPIEUP B558 D0B0 # HANGUL SYLLABLE KHIEUKH-I-RIEULSIOS B559 D0B1 # HANGUL SYLLABLE KHIEUKH-I-RIEULTHIEUTH B55A D0B2 # HANGUL SYLLABLE KHIEUKH-I-RIEULPHIEUPH B561 D0B3 # HANGUL SYLLABLE KHIEUKH-I-RIEULHIEUH B562 D0B6 # HANGUL SYLLABLE KHIEUKH-I-PIEUPSIOS B563 D0B8 # HANGUL SYLLABLE KHIEUKH-I-SSANGSIOS B564 D0BA # HANGUL SYLLABLE KHIEUKH-I-CIEUC B565 D0BB # HANGUL SYLLABLE KHIEUKH-I-CHIEUCH B566 D0BC # HANGUL SYLLABLE KHIEUKH-I-KHIEUKH B567 D0BD # HANGUL SYLLABLE KHIEUKH-I-THIEUTH B568 D0BE # HANGUL SYLLABLE KHIEUKH-I-PHIEUPH B569 D0BF # HANGUL SYLLABLE KHIEUKH-I-HIEUH B56A D0C2 # HANGUL SYLLABLE THIEUTH-A-SSANGKIYEOK B56B D0C3 # HANGUL SYLLABLE THIEUTH-A-KIYEOKSIOS B56C D0C5 # HANGUL SYLLABLE THIEUTH-A-NIEUNCIEUC B56D D0C6 # HANGUL SYLLABLE THIEUTH-A-NIEUNHIEUH B56E D0C7 # HANGUL SYLLABLE THIEUTH-A-TIKEUT B56F D0CA # HANGUL SYLLABLE THIEUTH-A-RIEULMIEUM B570 D0CB # HANGUL SYLLABLE THIEUTH-A-RIEULPIEUP B571 D0CC # HANGUL SYLLABLE THIEUTH-A-RIEULSIOS B572 D0CD # HANGUL SYLLABLE THIEUTH-A-RIEULTHIEUTH B573 D0CE # HANGUL SYLLABLE THIEUTH-A-RIEULPHIEUPH B574 D0CF # HANGUL SYLLABLE THIEUTH-A-RIEULHIEUH B575 D0D2 # HANGUL SYLLABLE THIEUTH-A-PIEUPSIOS B576 D0D6 # HANGUL SYLLABLE THIEUTH-A-CIEUC B577 D0D7 # HANGUL SYLLABLE THIEUTH-A-CHIEUCH B578 D0D8 # HANGUL SYLLABLE THIEUTH-A-KHIEUKH B579 D0D9 # HANGUL SYLLABLE THIEUTH-A-THIEUTH B57A D0DA # HANGUL SYLLABLE THIEUTH-A-PHIEUPH B581 D0DB # HANGUL SYLLABLE THIEUTH-A-HIEUH B582 D0DE # HANGUL SYLLABLE THIEUTH-AE-SSANGKIYEOK B583 D0DF # HANGUL SYLLABLE THIEUTH-AE-KIYEOKSIOS B584 D0E1 # HANGUL SYLLABLE THIEUTH-AE-NIEUNCIEUC B585 D0E2 # HANGUL SYLLABLE THIEUTH-AE-NIEUNHIEUH B586 D0E3 # HANGUL SYLLABLE THIEUTH-AE-TIKEUT B587 D0E5 # HANGUL SYLLABLE THIEUTH-AE-RIEULKIYEOK B588 D0E6 # HANGUL SYLLABLE THIEUTH-AE-RIEULMIEUM B589 D0E7 # HANGUL SYLLABLE THIEUTH-AE-RIEULPIEUP B58A D0E8 # HANGUL SYLLABLE THIEUTH-AE-RIEULSIOS B58B D0E9 # HANGUL SYLLABLE THIEUTH-AE-RIEULTHIEUTH B58C D0EA # HANGUL SYLLABLE THIEUTH-AE-RIEULPHIEUPH B58D D0EB # HANGUL SYLLABLE THIEUTH-AE-RIEULHIEUH B58E D0EE # HANGUL SYLLABLE THIEUTH-AE-PIEUPSIOS B58F D0F2 # HANGUL SYLLABLE THIEUTH-AE-CIEUC B590 D0F3 # HANGUL SYLLABLE THIEUTH-AE-CHIEUCH B591 D0F4 # HANGUL SYLLABLE THIEUTH-AE-KHIEUKH B592 D0F5 # HANGUL SYLLABLE THIEUTH-AE-THIEUTH B593 D0F6 # HANGUL SYLLABLE THIEUTH-AE-PHIEUPH B594 D0F7 # HANGUL SYLLABLE THIEUTH-AE-HIEUH B595 D0F9 # HANGUL SYLLABLE THIEUTH-YA-KIYEOK B596 D0FA # HANGUL SYLLABLE THIEUTH-YA-SSANGKIYEOK B597 D0FB # HANGUL SYLLABLE THIEUTH-YA-KIYEOKSIOS B598 D0FC # HANGUL SYLLABLE THIEUTH-YA-NIEUN B599 D0FD # HANGUL SYLLABLE THIEUTH-YA-NIEUNCIEUC B59A D0FE # HANGUL SYLLABLE THIEUTH-YA-NIEUNHIEUH B59B D0FF # HANGUL SYLLABLE THIEUTH-YA-TIKEUT B59C D100 # HANGUL SYLLABLE THIEUTH-YA-RIEUL B59D D101 # HANGUL SYLLABLE THIEUTH-YA-RIEULKIYEOK B59E D102 # HANGUL SYLLABLE THIEUTH-YA-RIEULMIEUM B59F D103 # HANGUL SYLLABLE THIEUTH-YA-RIEULPIEUP B5A0 D104 # HANGUL SYLLABLE THIEUTH-YA-RIEULSIOS B5A1 B367 # HANGUL SYLLABLE TIKEUT-EO-SIOS B5A2 B369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG B5A3 B36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH B5A4 B36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH B5A5 B370 # HANGUL SYLLABLE TIKEUT-E B5A6 B371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK B5A7 B374 # HANGUL SYLLABLE TIKEUT-E-NIEUN B5A8 B378 # HANGUL SYLLABLE TIKEUT-E-RIEUL B5A9 B380 # HANGUL SYLLABLE TIKEUT-E-MIEUM B5AA B381 # HANGUL SYLLABLE TIKEUT-E-PIEUP B5AB B383 # HANGUL SYLLABLE TIKEUT-E-SIOS B5AC B384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS B5AD B385 # HANGUL SYLLABLE TIKEUT-E-IEUNG B5AE B38C # HANGUL SYLLABLE TIKEUT-YEO B5AF B390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN B5B0 B394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL B5B1 B3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS B5B2 B3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG B5B3 B3A8 # HANGUL SYLLABLE TIKEUT-YE B5B4 B3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN B5B5 B3C4 # HANGUL SYLLABLE TIKEUT-O B5B6 B3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK B5B7 B3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN B5B8 B3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT B5B9 B3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL B5BA B3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM B5BB B3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS B5BC B3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM B5BD B3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP B5BE B3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS B5BF B3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG B5C0 B3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH B5C1 B3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH B5C2 B3E0 # HANGUL SYLLABLE TIKEUT-WA B5C3 B3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN B5C4 B3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL B5C5 B3FC # HANGUL SYLLABLE TIKEUT-WAE B5C6 B410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS B5C7 B418 # HANGUL SYLLABLE TIKEUT-OE B5C8 B41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN B5C9 B420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL B5CA B428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM B5CB B429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP B5CC B42B # HANGUL SYLLABLE TIKEUT-OE-SIOS B5CD B434 # HANGUL SYLLABLE TIKEUT-YO B5CE B450 # HANGUL SYLLABLE TIKEUT-U B5CF B451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK B5D0 B454 # HANGUL SYLLABLE TIKEUT-U-NIEUN B5D1 B458 # HANGUL SYLLABLE TIKEUT-U-RIEUL B5D2 B460 # HANGUL SYLLABLE TIKEUT-U-MIEUM B5D3 B461 # HANGUL SYLLABLE TIKEUT-U-PIEUP B5D4 B463 # HANGUL SYLLABLE TIKEUT-U-SIOS B5D5 B465 # HANGUL SYLLABLE TIKEUT-U-IEUNG B5D6 B46C # HANGUL SYLLABLE TIKEUT-WEO B5D7 B480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS B5D8 B488 # HANGUL SYLLABLE TIKEUT-WE B5D9 B49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG B5DA B4A4 # HANGUL SYLLABLE TIKEUT-WI B5DB B4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN B5DC B4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL B5DD B4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP B5DE B4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS B5DF B4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG B5E0 B4C0 # HANGUL SYLLABLE TIKEUT-YU B5E1 B4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN B5E2 B4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL B5E3 B4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM B5E4 B4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG B5E5 B4DC # HANGUL SYLLABLE TIKEUT-EU B5E6 B4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK B5E7 B4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN B5E8 B4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT B5E9 B4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL B5EA B4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM B5EB B4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM B5EC B4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP B5ED B4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS B5EE B4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG B5EF B4F8 # HANGUL SYLLABLE TIKEUT-YI B5F0 B514 # HANGUL SYLLABLE TIKEUT-I B5F1 B515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK B5F2 B518 # HANGUL SYLLABLE TIKEUT-I-NIEUN B5F3 B51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT B5F4 B51C # HANGUL SYLLABLE TIKEUT-I-RIEUL B5F5 B524 # HANGUL SYLLABLE TIKEUT-I-MIEUM B5F6 B525 # HANGUL SYLLABLE TIKEUT-I-PIEUP B5F7 B527 # HANGUL SYLLABLE TIKEUT-I-SIOS B5F8 B528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS B5F9 B529 # HANGUL SYLLABLE TIKEUT-I-IEUNG B5FA B52A # HANGUL SYLLABLE TIKEUT-I-CIEUC B5FB B530 # HANGUL SYLLABLE SSANGTIKEUT-A B5FC B531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK B5FD B534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN B5FE B538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL B641 D105 # HANGUL SYLLABLE THIEUTH-YA-RIEULTHIEUTH B642 D106 # HANGUL SYLLABLE THIEUTH-YA-RIEULPHIEUPH B643 D107 # HANGUL SYLLABLE THIEUTH-YA-RIEULHIEUH B644 D108 # HANGUL SYLLABLE THIEUTH-YA-MIEUM B645 D109 # HANGUL SYLLABLE THIEUTH-YA-PIEUP B646 D10A # HANGUL SYLLABLE THIEUTH-YA-PIEUPSIOS B647 D10B # HANGUL SYLLABLE THIEUTH-YA-SIOS B648 D10C # HANGUL SYLLABLE THIEUTH-YA-SSANGSIOS B649 D10E # HANGUL SYLLABLE THIEUTH-YA-CIEUC B64A D10F # HANGUL SYLLABLE THIEUTH-YA-CHIEUCH B64B D110 # HANGUL SYLLABLE THIEUTH-YA-KHIEUKH B64C D111 # HANGUL SYLLABLE THIEUTH-YA-THIEUTH B64D D112 # HANGUL SYLLABLE THIEUTH-YA-PHIEUPH B64E D113 # HANGUL SYLLABLE THIEUTH-YA-HIEUH B64F D114 # HANGUL SYLLABLE THIEUTH-YAE B650 D115 # HANGUL SYLLABLE THIEUTH-YAE-KIYEOK B651 D116 # HANGUL SYLLABLE THIEUTH-YAE-SSANGKIYEOK B652 D117 # HANGUL SYLLABLE THIEUTH-YAE-KIYEOKSIOS B653 D118 # HANGUL SYLLABLE THIEUTH-YAE-NIEUN B654 D119 # HANGUL SYLLABLE THIEUTH-YAE-NIEUNCIEUC B655 D11A # HANGUL SYLLABLE THIEUTH-YAE-NIEUNHIEUH B656 D11B # HANGUL SYLLABLE THIEUTH-YAE-TIKEUT B657 D11C # HANGUL SYLLABLE THIEUTH-YAE-RIEUL B658 D11D # HANGUL SYLLABLE THIEUTH-YAE-RIEULKIYEOK B659 D11E # HANGUL SYLLABLE THIEUTH-YAE-RIEULMIEUM B65A D11F # HANGUL SYLLABLE THIEUTH-YAE-RIEULPIEUP B661 D120 # HANGUL SYLLABLE THIEUTH-YAE-RIEULSIOS B662 D121 # HANGUL SYLLABLE THIEUTH-YAE-RIEULTHIEUTH B663 D122 # HANGUL SYLLABLE THIEUTH-YAE-RIEULPHIEUPH B664 D123 # HANGUL SYLLABLE THIEUTH-YAE-RIEULHIEUH B665 D124 # HANGUL SYLLABLE THIEUTH-YAE-MIEUM B666 D125 # HANGUL SYLLABLE THIEUTH-YAE-PIEUP B667 D126 # HANGUL SYLLABLE THIEUTH-YAE-PIEUPSIOS B668 D127 # HANGUL SYLLABLE THIEUTH-YAE-SIOS B669 D128 # HANGUL SYLLABLE THIEUTH-YAE-SSANGSIOS B66A D129 # HANGUL SYLLABLE THIEUTH-YAE-IEUNG B66B D12A # HANGUL SYLLABLE THIEUTH-YAE-CIEUC B66C D12B # HANGUL SYLLABLE THIEUTH-YAE-CHIEUCH B66D D12C # HANGUL SYLLABLE THIEUTH-YAE-KHIEUKH B66E D12D # HANGUL SYLLABLE THIEUTH-YAE-THIEUTH B66F D12E # HANGUL SYLLABLE THIEUTH-YAE-PHIEUPH B670 D12F # HANGUL SYLLABLE THIEUTH-YAE-HIEUH B671 D132 # HANGUL SYLLABLE THIEUTH-EO-SSANGKIYEOK B672 D133 # HANGUL SYLLABLE THIEUTH-EO-KIYEOKSIOS B673 D135 # HANGUL SYLLABLE THIEUTH-EO-NIEUNCIEUC B674 D136 # HANGUL SYLLABLE THIEUTH-EO-NIEUNHIEUH B675 D137 # HANGUL SYLLABLE THIEUTH-EO-TIKEUT B676 D139 # HANGUL SYLLABLE THIEUTH-EO-RIEULKIYEOK B677 D13B # HANGUL SYLLABLE THIEUTH-EO-RIEULPIEUP B678 D13C # HANGUL SYLLABLE THIEUTH-EO-RIEULSIOS B679 D13D # HANGUL SYLLABLE THIEUTH-EO-RIEULTHIEUTH B67A D13E # HANGUL SYLLABLE THIEUTH-EO-RIEULPHIEUPH B681 D13F # HANGUL SYLLABLE THIEUTH-EO-RIEULHIEUH B682 D142 # HANGUL SYLLABLE THIEUTH-EO-PIEUPSIOS B683 D146 # HANGUL SYLLABLE THIEUTH-EO-CIEUC B684 D147 # HANGUL SYLLABLE THIEUTH-EO-CHIEUCH B685 D148 # HANGUL SYLLABLE THIEUTH-EO-KHIEUKH B686 D149 # HANGUL SYLLABLE THIEUTH-EO-THIEUTH B687 D14A # HANGUL SYLLABLE THIEUTH-EO-PHIEUPH B688 D14B # HANGUL SYLLABLE THIEUTH-EO-HIEUH B689 D14E # HANGUL SYLLABLE THIEUTH-E-SSANGKIYEOK B68A D14F # HANGUL SYLLABLE THIEUTH-E-KIYEOKSIOS B68B D151 # HANGUL SYLLABLE THIEUTH-E-NIEUNCIEUC B68C D152 # HANGUL SYLLABLE THIEUTH-E-NIEUNHIEUH B68D D153 # HANGUL SYLLABLE THIEUTH-E-TIKEUT B68E D155 # HANGUL SYLLABLE THIEUTH-E-RIEULKIYEOK B68F D156 # HANGUL SYLLABLE THIEUTH-E-RIEULMIEUM B690 D157 # HANGUL SYLLABLE THIEUTH-E-RIEULPIEUP B691 D158 # HANGUL SYLLABLE THIEUTH-E-RIEULSIOS B692 D159 # HANGUL SYLLABLE THIEUTH-E-RIEULTHIEUTH B693 D15A # HANGUL SYLLABLE THIEUTH-E-RIEULPHIEUPH B694 D15B # HANGUL SYLLABLE THIEUTH-E-RIEULHIEUH B695 D15E # HANGUL SYLLABLE THIEUTH-E-PIEUPSIOS B696 D160 # HANGUL SYLLABLE THIEUTH-E-SSANGSIOS B697 D162 # HANGUL SYLLABLE THIEUTH-E-CIEUC B698 D163 # HANGUL SYLLABLE THIEUTH-E-CHIEUCH B699 D164 # HANGUL SYLLABLE THIEUTH-E-KHIEUKH B69A D165 # HANGUL SYLLABLE THIEUTH-E-THIEUTH B69B D166 # HANGUL SYLLABLE THIEUTH-E-PHIEUPH B69C D167 # HANGUL SYLLABLE THIEUTH-E-HIEUH B69D D169 # HANGUL SYLLABLE THIEUTH-YEO-KIYEOK B69E D16A # HANGUL SYLLABLE THIEUTH-YEO-SSANGKIYEOK B69F D16B # HANGUL SYLLABLE THIEUTH-YEO-KIYEOKSIOS B6A0 D16D # HANGUL SYLLABLE THIEUTH-YEO-NIEUNCIEUC B6A1 B540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM B6A2 B541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP B6A3 B543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS B6A4 B544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS B6A5 B545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG B6A6 B54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH B6A7 B54C # HANGUL SYLLABLE SSANGTIKEUT-AE B6A8 B54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK B6A9 B550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN B6AA B554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL B6AB B55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM B6AC B55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP B6AD B55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS B6AE B560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS B6AF B561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG B6B0 B5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO B6B1 B5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK B6B2 B5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN B6B3 B5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL B6B4 B5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM B6B5 B5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP B6B6 B5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM B6B7 B5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP B6B8 B5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS B6B9 B5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS B6BA B5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG B6BB B5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH B6BC B5BC # HANGUL SYLLABLE SSANGTIKEUT-E B6BD B5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK B6BE B5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN B6BF B5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL B6C0 B5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM B6C1 B5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP B6C2 B5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS B6C3 B5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS B6C4 B5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG B6C5 B5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO B6C6 B5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS B6C7 B610 # HANGUL SYLLABLE SSANGTIKEUT-O B6C8 B611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK B6C9 B614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN B6CA B618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL B6CB B625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG B6CC B62C # HANGUL SYLLABLE SSANGTIKEUT-WA B6CD B634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL B6CE B648 # HANGUL SYLLABLE SSANGTIKEUT-WAE B6CF B664 # HANGUL SYLLABLE SSANGTIKEUT-OE B6D0 B668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN B6D1 B69C # HANGUL SYLLABLE SSANGTIKEUT-U B6D2 B69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK B6D3 B6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN B6D4 B6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL B6D5 B6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH B6D6 B6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM B6D7 B6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG B6D8 B6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE B6D9 B6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI B6DA B6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN B6DB B6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL B6DC B700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM B6DD B701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP B6DE B705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG B6DF B728 # HANGUL SYLLABLE SSANGTIKEUT-EU B6E0 B729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK B6E1 B72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN B6E2 B72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT B6E3 B730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL B6E4 B738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM B6E5 B739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP B6E6 B73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS B6E7 B744 # HANGUL SYLLABLE SSANGTIKEUT-YI B6E8 B748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN B6E9 B74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL B6EA B754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM B6EB B755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP B6EC B760 # HANGUL SYLLABLE SSANGTIKEUT-I B6ED B764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN B6EE B768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL B6EF B770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM B6F0 B771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP B6F1 B773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS B6F2 B775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG B6F3 B77C # HANGUL SYLLABLE RIEUL-A B6F4 B77D # HANGUL SYLLABLE RIEUL-A-KIYEOK B6F5 B780 # HANGUL SYLLABLE RIEUL-A-NIEUN B6F6 B784 # HANGUL SYLLABLE RIEUL-A-RIEUL B6F7 B78C # HANGUL SYLLABLE RIEUL-A-MIEUM B6F8 B78D # HANGUL SYLLABLE RIEUL-A-PIEUP B6F9 B78F # HANGUL SYLLABLE RIEUL-A-SIOS B6FA B790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS B6FB B791 # HANGUL SYLLABLE RIEUL-A-IEUNG B6FC B792 # HANGUL SYLLABLE RIEUL-A-CIEUC B6FD B796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH B6FE B797 # HANGUL SYLLABLE RIEUL-A-HIEUH B741 D16E # HANGUL SYLLABLE THIEUTH-YEO-NIEUNHIEUH B742 D16F # HANGUL SYLLABLE THIEUTH-YEO-TIKEUT B743 D170 # HANGUL SYLLABLE THIEUTH-YEO-RIEUL B744 D171 # HANGUL SYLLABLE THIEUTH-YEO-RIEULKIYEOK B745 D172 # HANGUL SYLLABLE THIEUTH-YEO-RIEULMIEUM B746 D173 # HANGUL SYLLABLE THIEUTH-YEO-RIEULPIEUP B747 D174 # HANGUL SYLLABLE THIEUTH-YEO-RIEULSIOS B748 D175 # HANGUL SYLLABLE THIEUTH-YEO-RIEULTHIEUTH B749 D176 # HANGUL SYLLABLE THIEUTH-YEO-RIEULPHIEUPH B74A D177 # HANGUL SYLLABLE THIEUTH-YEO-RIEULHIEUH B74B D178 # HANGUL SYLLABLE THIEUTH-YEO-MIEUM B74C D179 # HANGUL SYLLABLE THIEUTH-YEO-PIEUP B74D D17A # HANGUL SYLLABLE THIEUTH-YEO-PIEUPSIOS B74E D17B # HANGUL SYLLABLE THIEUTH-YEO-SIOS B74F D17D # HANGUL SYLLABLE THIEUTH-YEO-IEUNG B750 D17E # HANGUL SYLLABLE THIEUTH-YEO-CIEUC B751 D17F # HANGUL SYLLABLE THIEUTH-YEO-CHIEUCH B752 D180 # HANGUL SYLLABLE THIEUTH-YEO-KHIEUKH B753 D181 # HANGUL SYLLABLE THIEUTH-YEO-THIEUTH B754 D182 # HANGUL SYLLABLE THIEUTH-YEO-PHIEUPH B755 D183 # HANGUL SYLLABLE THIEUTH-YEO-HIEUH B756 D185 # HANGUL SYLLABLE THIEUTH-YE-KIYEOK B757 D186 # HANGUL SYLLABLE THIEUTH-YE-SSANGKIYEOK B758 D187 # HANGUL SYLLABLE THIEUTH-YE-KIYEOKSIOS B759 D189 # HANGUL SYLLABLE THIEUTH-YE-NIEUNCIEUC B75A D18A # HANGUL SYLLABLE THIEUTH-YE-NIEUNHIEUH B761 D18B # HANGUL SYLLABLE THIEUTH-YE-TIKEUT B762 D18C # HANGUL SYLLABLE THIEUTH-YE-RIEUL B763 D18D # HANGUL SYLLABLE THIEUTH-YE-RIEULKIYEOK B764 D18E # HANGUL SYLLABLE THIEUTH-YE-RIEULMIEUM B765 D18F # HANGUL SYLLABLE THIEUTH-YE-RIEULPIEUP B766 D190 # HANGUL SYLLABLE THIEUTH-YE-RIEULSIOS B767 D191 # HANGUL SYLLABLE THIEUTH-YE-RIEULTHIEUTH B768 D192 # HANGUL SYLLABLE THIEUTH-YE-RIEULPHIEUPH B769 D193 # HANGUL SYLLABLE THIEUTH-YE-RIEULHIEUH B76A D194 # HANGUL SYLLABLE THIEUTH-YE-MIEUM B76B D195 # HANGUL SYLLABLE THIEUTH-YE-PIEUP B76C D196 # HANGUL SYLLABLE THIEUTH-YE-PIEUPSIOS B76D D197 # HANGUL SYLLABLE THIEUTH-YE-SIOS B76E D198 # HANGUL SYLLABLE THIEUTH-YE-SSANGSIOS B76F D199 # HANGUL SYLLABLE THIEUTH-YE-IEUNG B770 D19A # HANGUL SYLLABLE THIEUTH-YE-CIEUC B771 D19B # HANGUL SYLLABLE THIEUTH-YE-CHIEUCH B772 D19C # HANGUL SYLLABLE THIEUTH-YE-KHIEUKH B773 D19D # HANGUL SYLLABLE THIEUTH-YE-THIEUTH B774 D19E # HANGUL SYLLABLE THIEUTH-YE-PHIEUPH B775 D19F # HANGUL SYLLABLE THIEUTH-YE-HIEUH B776 D1A2 # HANGUL SYLLABLE THIEUTH-O-SSANGKIYEOK B777 D1A3 # HANGUL SYLLABLE THIEUTH-O-KIYEOKSIOS B778 D1A5 # HANGUL SYLLABLE THIEUTH-O-NIEUNCIEUC B779 D1A6 # HANGUL SYLLABLE THIEUTH-O-NIEUNHIEUH B77A D1A7 # HANGUL SYLLABLE THIEUTH-O-TIKEUT B781 D1A9 # HANGUL SYLLABLE THIEUTH-O-RIEULKIYEOK B782 D1AA # HANGUL SYLLABLE THIEUTH-O-RIEULMIEUM B783 D1AB # HANGUL SYLLABLE THIEUTH-O-RIEULPIEUP B784 D1AC # HANGUL SYLLABLE THIEUTH-O-RIEULSIOS B785 D1AD # HANGUL SYLLABLE THIEUTH-O-RIEULTHIEUTH B786 D1AE # HANGUL SYLLABLE THIEUTH-O-RIEULPHIEUPH B787 D1AF # HANGUL SYLLABLE THIEUTH-O-RIEULHIEUH B788 D1B2 # HANGUL SYLLABLE THIEUTH-O-PIEUPSIOS B789 D1B4 # HANGUL SYLLABLE THIEUTH-O-SSANGSIOS B78A D1B6 # HANGUL SYLLABLE THIEUTH-O-CIEUC B78B D1B7 # HANGUL SYLLABLE THIEUTH-O-CHIEUCH B78C D1B8 # HANGUL SYLLABLE THIEUTH-O-KHIEUKH B78D D1B9 # HANGUL SYLLABLE THIEUTH-O-THIEUTH B78E D1BB # HANGUL SYLLABLE THIEUTH-O-HIEUH B78F D1BD # HANGUL SYLLABLE THIEUTH-WA-KIYEOK B790 D1BE # HANGUL SYLLABLE THIEUTH-WA-SSANGKIYEOK B791 D1BF # HANGUL SYLLABLE THIEUTH-WA-KIYEOKSIOS B792 D1C1 # HANGUL SYLLABLE THIEUTH-WA-NIEUNCIEUC B793 D1C2 # HANGUL SYLLABLE THIEUTH-WA-NIEUNHIEUH B794 D1C3 # HANGUL SYLLABLE THIEUTH-WA-TIKEUT B795 D1C4 # HANGUL SYLLABLE THIEUTH-WA-RIEUL B796 D1C5 # HANGUL SYLLABLE THIEUTH-WA-RIEULKIYEOK B797 D1C6 # HANGUL SYLLABLE THIEUTH-WA-RIEULMIEUM B798 D1C7 # HANGUL SYLLABLE THIEUTH-WA-RIEULPIEUP B799 D1C8 # HANGUL SYLLABLE THIEUTH-WA-RIEULSIOS B79A D1C9 # HANGUL SYLLABLE THIEUTH-WA-RIEULTHIEUTH B79B D1CA # HANGUL SYLLABLE THIEUTH-WA-RIEULPHIEUPH B79C D1CB # HANGUL SYLLABLE THIEUTH-WA-RIEULHIEUH B79D D1CC # HANGUL SYLLABLE THIEUTH-WA-MIEUM B79E D1CD # HANGUL SYLLABLE THIEUTH-WA-PIEUP B79F D1CE # HANGUL SYLLABLE THIEUTH-WA-PIEUPSIOS B7A0 D1CF # HANGUL SYLLABLE THIEUTH-WA-SIOS B7A1 B798 # HANGUL SYLLABLE RIEUL-AE B7A2 B799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK B7A3 B79C # HANGUL SYLLABLE RIEUL-AE-NIEUN B7A4 B7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL B7A5 B7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM B7A6 B7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP B7A7 B7AB # HANGUL SYLLABLE RIEUL-AE-SIOS B7A8 B7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS B7A9 B7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG B7AA B7B4 # HANGUL SYLLABLE RIEUL-YA B7AB B7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK B7AC B7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN B7AD B7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS B7AE B7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG B7AF B7EC # HANGUL SYLLABLE RIEUL-EO B7B0 B7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK B7B1 B7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN B7B2 B7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL B7B3 B7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM B7B4 B7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP B7B5 B7FF # HANGUL SYLLABLE RIEUL-EO-SIOS B7B6 B800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS B7B7 B801 # HANGUL SYLLABLE RIEUL-EO-IEUNG B7B8 B807 # HANGUL SYLLABLE RIEUL-EO-HIEUH B7B9 B808 # HANGUL SYLLABLE RIEUL-E B7BA B809 # HANGUL SYLLABLE RIEUL-E-KIYEOK B7BB B80C # HANGUL SYLLABLE RIEUL-E-NIEUN B7BC B810 # HANGUL SYLLABLE RIEUL-E-RIEUL B7BD B818 # HANGUL SYLLABLE RIEUL-E-MIEUM B7BE B819 # HANGUL SYLLABLE RIEUL-E-PIEUP B7BF B81B # HANGUL SYLLABLE RIEUL-E-SIOS B7C0 B81D # HANGUL SYLLABLE RIEUL-E-IEUNG B7C1 B824 # HANGUL SYLLABLE RIEUL-YEO B7C2 B825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK B7C3 B828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN B7C4 B82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL B7C5 B834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM B7C6 B835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP B7C7 B837 # HANGUL SYLLABLE RIEUL-YEO-SIOS B7C8 B838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS B7C9 B839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG B7CA B840 # HANGUL SYLLABLE RIEUL-YE B7CB B844 # HANGUL SYLLABLE RIEUL-YE-NIEUN B7CC B851 # HANGUL SYLLABLE RIEUL-YE-PIEUP B7CD B853 # HANGUL SYLLABLE RIEUL-YE-SIOS B7CE B85C # HANGUL SYLLABLE RIEUL-O B7CF B85D # HANGUL SYLLABLE RIEUL-O-KIYEOK B7D0 B860 # HANGUL SYLLABLE RIEUL-O-NIEUN B7D1 B864 # HANGUL SYLLABLE RIEUL-O-RIEUL B7D2 B86C # HANGUL SYLLABLE RIEUL-O-MIEUM B7D3 B86D # HANGUL SYLLABLE RIEUL-O-PIEUP B7D4 B86F # HANGUL SYLLABLE RIEUL-O-SIOS B7D5 B871 # HANGUL SYLLABLE RIEUL-O-IEUNG B7D6 B878 # HANGUL SYLLABLE RIEUL-WA B7D7 B87C # HANGUL SYLLABLE RIEUL-WA-NIEUN B7D8 B88D # HANGUL SYLLABLE RIEUL-WA-IEUNG B7D9 B8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS B7DA B8B0 # HANGUL SYLLABLE RIEUL-OE B7DB B8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN B7DC B8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL B7DD B8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM B7DE B8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP B7DF B8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS B7E0 B8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG B7E1 B8CC # HANGUL SYLLABLE RIEUL-YO B7E2 B8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN B7E3 B8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL B7E4 B8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP B7E5 B8DF # HANGUL SYLLABLE RIEUL-YO-SIOS B7E6 B8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG B7E7 B8E8 # HANGUL SYLLABLE RIEUL-U B7E8 B8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK B7E9 B8EC # HANGUL SYLLABLE RIEUL-U-NIEUN B7EA B8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL B7EB B8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM B7EC B8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP B7ED B8FB # HANGUL SYLLABLE RIEUL-U-SIOS B7EE B8FD # HANGUL SYLLABLE RIEUL-U-IEUNG B7EF B904 # HANGUL SYLLABLE RIEUL-WEO B7F0 B918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS B7F1 B920 # HANGUL SYLLABLE RIEUL-WE B7F2 B93C # HANGUL SYLLABLE RIEUL-WI B7F3 B93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK B7F4 B940 # HANGUL SYLLABLE RIEUL-WI-NIEUN B7F5 B944 # HANGUL SYLLABLE RIEUL-WI-RIEUL B7F6 B94C # HANGUL SYLLABLE RIEUL-WI-MIEUM B7F7 B94F # HANGUL SYLLABLE RIEUL-WI-SIOS B7F8 B951 # HANGUL SYLLABLE RIEUL-WI-IEUNG B7F9 B958 # HANGUL SYLLABLE RIEUL-YU B7FA B959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK B7FB B95C # HANGUL SYLLABLE RIEUL-YU-NIEUN B7FC B960 # HANGUL SYLLABLE RIEUL-YU-RIEUL B7FD B968 # HANGUL SYLLABLE RIEUL-YU-MIEUM B7FE B969 # HANGUL SYLLABLE RIEUL-YU-PIEUP B841 D1D0 # HANGUL SYLLABLE THIEUTH-WA-SSANGSIOS B842 D1D1 # HANGUL SYLLABLE THIEUTH-WA-IEUNG B843 D1D2 # HANGUL SYLLABLE THIEUTH-WA-CIEUC B844 D1D3 # HANGUL SYLLABLE THIEUTH-WA-CHIEUCH B845 D1D4 # HANGUL SYLLABLE THIEUTH-WA-KHIEUKH B846 D1D5 # HANGUL SYLLABLE THIEUTH-WA-THIEUTH B847 D1D6 # HANGUL SYLLABLE THIEUTH-WA-PHIEUPH B848 D1D7 # HANGUL SYLLABLE THIEUTH-WA-HIEUH B849 D1D9 # HANGUL SYLLABLE THIEUTH-WAE-KIYEOK B84A D1DA # HANGUL SYLLABLE THIEUTH-WAE-SSANGKIYEOK B84B D1DB # HANGUL SYLLABLE THIEUTH-WAE-KIYEOKSIOS B84C D1DC # HANGUL SYLLABLE THIEUTH-WAE-NIEUN B84D D1DD # HANGUL SYLLABLE THIEUTH-WAE-NIEUNCIEUC B84E D1DE # HANGUL SYLLABLE THIEUTH-WAE-NIEUNHIEUH B84F D1DF # HANGUL SYLLABLE THIEUTH-WAE-TIKEUT B850 D1E0 # HANGUL SYLLABLE THIEUTH-WAE-RIEUL B851 D1E1 # HANGUL SYLLABLE THIEUTH-WAE-RIEULKIYEOK B852 D1E2 # HANGUL SYLLABLE THIEUTH-WAE-RIEULMIEUM B853 D1E3 # HANGUL SYLLABLE THIEUTH-WAE-RIEULPIEUP B854 D1E4 # HANGUL SYLLABLE THIEUTH-WAE-RIEULSIOS B855 D1E5 # HANGUL SYLLABLE THIEUTH-WAE-RIEULTHIEUTH B856 D1E6 # HANGUL SYLLABLE THIEUTH-WAE-RIEULPHIEUPH B857 D1E7 # HANGUL SYLLABLE THIEUTH-WAE-RIEULHIEUH B858 D1E8 # HANGUL SYLLABLE THIEUTH-WAE-MIEUM B859 D1E9 # HANGUL SYLLABLE THIEUTH-WAE-PIEUP B85A D1EA # HANGUL SYLLABLE THIEUTH-WAE-PIEUPSIOS B861 D1EB # HANGUL SYLLABLE THIEUTH-WAE-SIOS B862 D1EC # HANGUL SYLLABLE THIEUTH-WAE-SSANGSIOS B863 D1ED # HANGUL SYLLABLE THIEUTH-WAE-IEUNG B864 D1EE # HANGUL SYLLABLE THIEUTH-WAE-CIEUC B865 D1EF # HANGUL SYLLABLE THIEUTH-WAE-CHIEUCH B866 D1F0 # HANGUL SYLLABLE THIEUTH-WAE-KHIEUKH B867 D1F1 # HANGUL SYLLABLE THIEUTH-WAE-THIEUTH B868 D1F2 # HANGUL SYLLABLE THIEUTH-WAE-PHIEUPH B869 D1F3 # HANGUL SYLLABLE THIEUTH-WAE-HIEUH B86A D1F5 # HANGUL SYLLABLE THIEUTH-OE-KIYEOK B86B D1F6 # HANGUL SYLLABLE THIEUTH-OE-SSANGKIYEOK B86C D1F7 # HANGUL SYLLABLE THIEUTH-OE-KIYEOKSIOS B86D D1F9 # HANGUL SYLLABLE THIEUTH-OE-NIEUNCIEUC B86E D1FA # HANGUL SYLLABLE THIEUTH-OE-NIEUNHIEUH B86F D1FB # HANGUL SYLLABLE THIEUTH-OE-TIKEUT B870 D1FC # HANGUL SYLLABLE THIEUTH-OE-RIEUL B871 D1FD # HANGUL SYLLABLE THIEUTH-OE-RIEULKIYEOK B872 D1FE # HANGUL SYLLABLE THIEUTH-OE-RIEULMIEUM B873 D1FF # HANGUL SYLLABLE THIEUTH-OE-RIEULPIEUP B874 D200 # HANGUL SYLLABLE THIEUTH-OE-RIEULSIOS B875 D201 # HANGUL SYLLABLE THIEUTH-OE-RIEULTHIEUTH B876 D202 # HANGUL SYLLABLE THIEUTH-OE-RIEULPHIEUPH B877 D203 # HANGUL SYLLABLE THIEUTH-OE-RIEULHIEUH B878 D204 # HANGUL SYLLABLE THIEUTH-OE-MIEUM B879 D205 # HANGUL SYLLABLE THIEUTH-OE-PIEUP B87A D206 # HANGUL SYLLABLE THIEUTH-OE-PIEUPSIOS B881 D208 # HANGUL SYLLABLE THIEUTH-OE-SSANGSIOS B882 D20A # HANGUL SYLLABLE THIEUTH-OE-CIEUC B883 D20B # HANGUL SYLLABLE THIEUTH-OE-CHIEUCH B884 D20C # HANGUL SYLLABLE THIEUTH-OE-KHIEUKH B885 D20D # HANGUL SYLLABLE THIEUTH-OE-THIEUTH B886 D20E # HANGUL SYLLABLE THIEUTH-OE-PHIEUPH B887 D20F # HANGUL SYLLABLE THIEUTH-OE-HIEUH B888 D211 # HANGUL SYLLABLE THIEUTH-YO-KIYEOK B889 D212 # HANGUL SYLLABLE THIEUTH-YO-SSANGKIYEOK B88A D213 # HANGUL SYLLABLE THIEUTH-YO-KIYEOKSIOS B88B D214 # HANGUL SYLLABLE THIEUTH-YO-NIEUN B88C D215 # HANGUL SYLLABLE THIEUTH-YO-NIEUNCIEUC B88D D216 # HANGUL SYLLABLE THIEUTH-YO-NIEUNHIEUH B88E D217 # HANGUL SYLLABLE THIEUTH-YO-TIKEUT B88F D218 # HANGUL SYLLABLE THIEUTH-YO-RIEUL B890 D219 # HANGUL SYLLABLE THIEUTH-YO-RIEULKIYEOK B891 D21A # HANGUL SYLLABLE THIEUTH-YO-RIEULMIEUM B892 D21B # HANGUL SYLLABLE THIEUTH-YO-RIEULPIEUP B893 D21C # HANGUL SYLLABLE THIEUTH-YO-RIEULSIOS B894 D21D # HANGUL SYLLABLE THIEUTH-YO-RIEULTHIEUTH B895 D21E # HANGUL SYLLABLE THIEUTH-YO-RIEULPHIEUPH B896 D21F # HANGUL SYLLABLE THIEUTH-YO-RIEULHIEUH B897 D220 # HANGUL SYLLABLE THIEUTH-YO-MIEUM B898 D221 # HANGUL SYLLABLE THIEUTH-YO-PIEUP B899 D222 # HANGUL SYLLABLE THIEUTH-YO-PIEUPSIOS B89A D223 # HANGUL SYLLABLE THIEUTH-YO-SIOS B89B D224 # HANGUL SYLLABLE THIEUTH-YO-SSANGSIOS B89C D225 # HANGUL SYLLABLE THIEUTH-YO-IEUNG B89D D226 # HANGUL SYLLABLE THIEUTH-YO-CIEUC B89E D227 # HANGUL SYLLABLE THIEUTH-YO-CHIEUCH B89F D228 # HANGUL SYLLABLE THIEUTH-YO-KHIEUKH B8A0 D229 # HANGUL SYLLABLE THIEUTH-YO-THIEUTH B8A1 B96B # HANGUL SYLLABLE RIEUL-YU-SIOS B8A2 B96D # HANGUL SYLLABLE RIEUL-YU-IEUNG B8A3 B974 # HANGUL SYLLABLE RIEUL-EU B8A4 B975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK B8A5 B978 # HANGUL SYLLABLE RIEUL-EU-NIEUN B8A6 B97C # HANGUL SYLLABLE RIEUL-EU-RIEUL B8A7 B984 # HANGUL SYLLABLE RIEUL-EU-MIEUM B8A8 B985 # HANGUL SYLLABLE RIEUL-EU-PIEUP B8A9 B987 # HANGUL SYLLABLE RIEUL-EU-SIOS B8AA B989 # HANGUL SYLLABLE RIEUL-EU-IEUNG B8AB B98A # HANGUL SYLLABLE RIEUL-EU-CIEUC B8AC B98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH B8AD B98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH B8AE B9AC # HANGUL SYLLABLE RIEUL-I B8AF B9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK B8B0 B9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN B8B1 B9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL B8B2 B9BC # HANGUL SYLLABLE RIEUL-I-MIEUM B8B3 B9BD # HANGUL SYLLABLE RIEUL-I-PIEUP B8B4 B9BF # HANGUL SYLLABLE RIEUL-I-SIOS B8B5 B9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG B8B6 B9C8 # HANGUL SYLLABLE MIEUM-A B8B7 B9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK B8B8 B9CC # HANGUL SYLLABLE MIEUM-A-NIEUN B8B9 B9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH B8BA B9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT B8BB B9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL B8BC B9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK B8BD B9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM B8BE B9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM B8BF B9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP B8C0 B9DB # HANGUL SYLLABLE MIEUM-A-SIOS B8C1 B9DD # HANGUL SYLLABLE MIEUM-A-IEUNG B8C2 B9DE # HANGUL SYLLABLE MIEUM-A-CIEUC B8C3 B9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH B8C4 B9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH B8C5 B9E4 # HANGUL SYLLABLE MIEUM-AE B8C6 B9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK B8C7 B9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN B8C8 B9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL B8C9 B9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM B8CA B9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP B8CB B9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS B8CC B9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS B8CD B9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG B8CE B9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC B8CF BA00 # HANGUL SYLLABLE MIEUM-YA B8D0 BA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK B8D1 BA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL B8D2 BA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG B8D3 BA38 # HANGUL SYLLABLE MIEUM-EO B8D4 BA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK B8D5 BA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN B8D6 BA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL B8D7 BA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM B8D8 BA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM B8D9 BA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP B8DA BA4B # HANGUL SYLLABLE MIEUM-EO-SIOS B8DB BA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG B8DC BA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC B8DD BA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH B8DE BA54 # HANGUL SYLLABLE MIEUM-E B8DF BA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK B8E0 BA58 # HANGUL SYLLABLE MIEUM-E-NIEUN B8E1 BA5C # HANGUL SYLLABLE MIEUM-E-RIEUL B8E2 BA64 # HANGUL SYLLABLE MIEUM-E-MIEUM B8E3 BA65 # HANGUL SYLLABLE MIEUM-E-PIEUP B8E4 BA67 # HANGUL SYLLABLE MIEUM-E-SIOS B8E5 BA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS B8E6 BA69 # HANGUL SYLLABLE MIEUM-E-IEUNG B8E7 BA70 # HANGUL SYLLABLE MIEUM-YEO B8E8 BA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK B8E9 BA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN B8EA BA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL B8EB BA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS B8EC BA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS B8ED BA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG B8EE BA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH B8EF BA8C # HANGUL SYLLABLE MIEUM-YE B8F0 BAA8 # HANGUL SYLLABLE MIEUM-O B8F1 BAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK B8F2 BAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS B8F3 BAAC # HANGUL SYLLABLE MIEUM-O-NIEUN B8F4 BAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL B8F5 BAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM B8F6 BAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM B8F7 BAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP B8F8 BABB # HANGUL SYLLABLE MIEUM-O-SIOS B8F9 BABD # HANGUL SYLLABLE MIEUM-O-IEUNG B8FA BAC4 # HANGUL SYLLABLE MIEUM-WA B8FB BAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN B8FC BAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS B8FD BAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG B8FE BAFC # HANGUL SYLLABLE MIEUM-OE B941 D22A # HANGUL SYLLABLE THIEUTH-YO-PHIEUPH B942 D22B # HANGUL SYLLABLE THIEUTH-YO-HIEUH B943 D22E # HANGUL SYLLABLE THIEUTH-U-SSANGKIYEOK B944 D22F # HANGUL SYLLABLE THIEUTH-U-KIYEOKSIOS B945 D231 # HANGUL SYLLABLE THIEUTH-U-NIEUNCIEUC B946 D232 # HANGUL SYLLABLE THIEUTH-U-NIEUNHIEUH B947 D233 # HANGUL SYLLABLE THIEUTH-U-TIKEUT B948 D235 # HANGUL SYLLABLE THIEUTH-U-RIEULKIYEOK B949 D236 # HANGUL SYLLABLE THIEUTH-U-RIEULMIEUM B94A D237 # HANGUL SYLLABLE THIEUTH-U-RIEULPIEUP B94B D238 # HANGUL SYLLABLE THIEUTH-U-RIEULSIOS B94C D239 # HANGUL SYLLABLE THIEUTH-U-RIEULTHIEUTH B94D D23A # HANGUL SYLLABLE THIEUTH-U-RIEULPHIEUPH B94E D23B # HANGUL SYLLABLE THIEUTH-U-RIEULHIEUH B94F D23E # HANGUL SYLLABLE THIEUTH-U-PIEUPSIOS B950 D240 # HANGUL SYLLABLE THIEUTH-U-SSANGSIOS B951 D242 # HANGUL SYLLABLE THIEUTH-U-CIEUC B952 D243 # HANGUL SYLLABLE THIEUTH-U-CHIEUCH B953 D244 # HANGUL SYLLABLE THIEUTH-U-KHIEUKH B954 D245 # HANGUL SYLLABLE THIEUTH-U-THIEUTH B955 D246 # HANGUL SYLLABLE THIEUTH-U-PHIEUPH B956 D247 # HANGUL SYLLABLE THIEUTH-U-HIEUH B957 D249 # HANGUL SYLLABLE THIEUTH-WEO-KIYEOK B958 D24A # HANGUL SYLLABLE THIEUTH-WEO-SSANGKIYEOK B959 D24B # HANGUL SYLLABLE THIEUTH-WEO-KIYEOKSIOS B95A D24C # HANGUL SYLLABLE THIEUTH-WEO-NIEUN B961 D24D # HANGUL SYLLABLE THIEUTH-WEO-NIEUNCIEUC B962 D24E # HANGUL SYLLABLE THIEUTH-WEO-NIEUNHIEUH B963 D24F # HANGUL SYLLABLE THIEUTH-WEO-TIKEUT B964 D250 # HANGUL SYLLABLE THIEUTH-WEO-RIEUL B965 D251 # HANGUL SYLLABLE THIEUTH-WEO-RIEULKIYEOK B966 D252 # HANGUL SYLLABLE THIEUTH-WEO-RIEULMIEUM B967 D253 # HANGUL SYLLABLE THIEUTH-WEO-RIEULPIEUP B968 D254 # HANGUL SYLLABLE THIEUTH-WEO-RIEULSIOS B969 D255 # HANGUL SYLLABLE THIEUTH-WEO-RIEULTHIEUTH B96A D256 # HANGUL SYLLABLE THIEUTH-WEO-RIEULPHIEUPH B96B D257 # HANGUL SYLLABLE THIEUTH-WEO-RIEULHIEUH B96C D258 # HANGUL SYLLABLE THIEUTH-WEO-MIEUM B96D D259 # HANGUL SYLLABLE THIEUTH-WEO-PIEUP B96E D25A # HANGUL SYLLABLE THIEUTH-WEO-PIEUPSIOS B96F D25B # HANGUL SYLLABLE THIEUTH-WEO-SIOS B970 D25D # HANGUL SYLLABLE THIEUTH-WEO-IEUNG B971 D25E # HANGUL SYLLABLE THIEUTH-WEO-CIEUC B972 D25F # HANGUL SYLLABLE THIEUTH-WEO-CHIEUCH B973 D260 # HANGUL SYLLABLE THIEUTH-WEO-KHIEUKH B974 D261 # HANGUL SYLLABLE THIEUTH-WEO-THIEUTH B975 D262 # HANGUL SYLLABLE THIEUTH-WEO-PHIEUPH B976 D263 # HANGUL SYLLABLE THIEUTH-WEO-HIEUH B977 D265 # HANGUL SYLLABLE THIEUTH-WE-KIYEOK B978 D266 # HANGUL SYLLABLE THIEUTH-WE-SSANGKIYEOK B979 D267 # HANGUL SYLLABLE THIEUTH-WE-KIYEOKSIOS B97A D268 # HANGUL SYLLABLE THIEUTH-WE-NIEUN B981 D269 # HANGUL SYLLABLE THIEUTH-WE-NIEUNCIEUC B982 D26A # HANGUL SYLLABLE THIEUTH-WE-NIEUNHIEUH B983 D26B # HANGUL SYLLABLE THIEUTH-WE-TIKEUT B984 D26C # HANGUL SYLLABLE THIEUTH-WE-RIEUL B985 D26D # HANGUL SYLLABLE THIEUTH-WE-RIEULKIYEOK B986 D26E # HANGUL SYLLABLE THIEUTH-WE-RIEULMIEUM B987 D26F # HANGUL SYLLABLE THIEUTH-WE-RIEULPIEUP B988 D270 # HANGUL SYLLABLE THIEUTH-WE-RIEULSIOS B989 D271 # HANGUL SYLLABLE THIEUTH-WE-RIEULTHIEUTH B98A D272 # HANGUL SYLLABLE THIEUTH-WE-RIEULPHIEUPH B98B D273 # HANGUL SYLLABLE THIEUTH-WE-RIEULHIEUH B98C D274 # HANGUL SYLLABLE THIEUTH-WE-MIEUM B98D D275 # HANGUL SYLLABLE THIEUTH-WE-PIEUP B98E D276 # HANGUL SYLLABLE THIEUTH-WE-PIEUPSIOS B98F D277 # HANGUL SYLLABLE THIEUTH-WE-SIOS B990 D278 # HANGUL SYLLABLE THIEUTH-WE-SSANGSIOS B991 D279 # HANGUL SYLLABLE THIEUTH-WE-IEUNG B992 D27A # HANGUL SYLLABLE THIEUTH-WE-CIEUC B993 D27B # HANGUL SYLLABLE THIEUTH-WE-CHIEUCH B994 D27C # HANGUL SYLLABLE THIEUTH-WE-KHIEUKH B995 D27D # HANGUL SYLLABLE THIEUTH-WE-THIEUTH B996 D27E # HANGUL SYLLABLE THIEUTH-WE-PHIEUPH B997 D27F # HANGUL SYLLABLE THIEUTH-WE-HIEUH B998 D282 # HANGUL SYLLABLE THIEUTH-WI-SSANGKIYEOK B999 D283 # HANGUL SYLLABLE THIEUTH-WI-KIYEOKSIOS B99A D285 # HANGUL SYLLABLE THIEUTH-WI-NIEUNCIEUC B99B D286 # HANGUL SYLLABLE THIEUTH-WI-NIEUNHIEUH B99C D287 # HANGUL SYLLABLE THIEUTH-WI-TIKEUT B99D D289 # HANGUL SYLLABLE THIEUTH-WI-RIEULKIYEOK B99E D28A # HANGUL SYLLABLE THIEUTH-WI-RIEULMIEUM B99F D28B # HANGUL SYLLABLE THIEUTH-WI-RIEULPIEUP B9A0 D28C # HANGUL SYLLABLE THIEUTH-WI-RIEULSIOS B9A1 BB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN B9A2 BB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL B9A3 BB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP B9A4 BB0F # HANGUL SYLLABLE MIEUM-OE-SIOS B9A5 BB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG B9A6 BB18 # HANGUL SYLLABLE MIEUM-YO B9A7 BB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN B9A8 BB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL B9A9 BB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP B9AA BB2B # HANGUL SYLLABLE MIEUM-YO-SIOS B9AB BB34 # HANGUL SYLLABLE MIEUM-U B9AC BB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK B9AD BB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK B9AE BB38 # HANGUL SYLLABLE MIEUM-U-NIEUN B9AF BB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT B9B0 BB3C # HANGUL SYLLABLE MIEUM-U-RIEUL B9B1 BB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK B9B2 BB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM B9B3 BB44 # HANGUL SYLLABLE MIEUM-U-MIEUM B9B4 BB45 # HANGUL SYLLABLE MIEUM-U-PIEUP B9B5 BB47 # HANGUL SYLLABLE MIEUM-U-SIOS B9B6 BB49 # HANGUL SYLLABLE MIEUM-U-IEUNG B9B7 BB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH B9B8 BB4F # HANGUL SYLLABLE MIEUM-U-HIEUH B9B9 BB50 # HANGUL SYLLABLE MIEUM-WEO B9BA BB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN B9BB BB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL B9BC BB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP B9BD BB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS B9BE BB6C # HANGUL SYLLABLE MIEUM-WE B9BF BB88 # HANGUL SYLLABLE MIEUM-WI B9C0 BB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN B9C1 BB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL B9C2 BBA4 # HANGUL SYLLABLE MIEUM-YU B9C3 BBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN B9C4 BBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL B9C5 BBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM B9C6 BBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS B9C7 BBC0 # HANGUL SYLLABLE MIEUM-EU B9C8 BBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN B9C9 BBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL B9CA BBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM B9CB BBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS B9CC BBF8 # HANGUL SYLLABLE MIEUM-I B9CD BBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK B9CE BBFC # HANGUL SYLLABLE MIEUM-I-NIEUN B9CF BBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT B9D0 BC00 # HANGUL SYLLABLE MIEUM-I-RIEUL B9D1 BC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM B9D2 BC08 # HANGUL SYLLABLE MIEUM-I-MIEUM B9D3 BC09 # HANGUL SYLLABLE MIEUM-I-PIEUP B9D4 BC0B # HANGUL SYLLABLE MIEUM-I-SIOS B9D5 BC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS B9D6 BC0D # HANGUL SYLLABLE MIEUM-I-IEUNG B9D7 BC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH B9D8 BC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH B9D9 BC14 # HANGUL SYLLABLE PIEUP-A B9DA BC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK B9DB BC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK B9DC BC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS B9DD BC18 # HANGUL SYLLABLE PIEUP-A-NIEUN B9DE BC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT B9DF BC1C # HANGUL SYLLABLE PIEUP-A-RIEUL B9E0 BC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK B9E1 BC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM B9E2 BC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP B9E3 BC24 # HANGUL SYLLABLE PIEUP-A-MIEUM B9E4 BC25 # HANGUL SYLLABLE PIEUP-A-PIEUP B9E5 BC27 # HANGUL SYLLABLE PIEUP-A-SIOS B9E6 BC29 # HANGUL SYLLABLE PIEUP-A-IEUNG B9E7 BC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH B9E8 BC30 # HANGUL SYLLABLE PIEUP-AE B9E9 BC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK B9EA BC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN B9EB BC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL B9EC BC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM B9ED BC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP B9EE BC43 # HANGUL SYLLABLE PIEUP-AE-SIOS B9EF BC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS B9F0 BC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG B9F1 BC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH B9F2 BC4C # HANGUL SYLLABLE PIEUP-YA B9F3 BC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK B9F4 BC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN B9F5 BC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP B9F6 BC84 # HANGUL SYLLABLE PIEUP-EO B9F7 BC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK B9F8 BC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN B9F9 BC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT B9FA BC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL B9FB BC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM B9FC BC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM B9FD BC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP B9FE BC97 # HANGUL SYLLABLE PIEUP-EO-SIOS BA41 D28D # HANGUL SYLLABLE THIEUTH-WI-RIEULTHIEUTH BA42 D28E # HANGUL SYLLABLE THIEUTH-WI-RIEULPHIEUPH BA43 D28F # HANGUL SYLLABLE THIEUTH-WI-RIEULHIEUH BA44 D292 # HANGUL SYLLABLE THIEUTH-WI-PIEUPSIOS BA45 D293 # HANGUL SYLLABLE THIEUTH-WI-SIOS BA46 D294 # HANGUL SYLLABLE THIEUTH-WI-SSANGSIOS BA47 D296 # HANGUL SYLLABLE THIEUTH-WI-CIEUC BA48 D297 # HANGUL SYLLABLE THIEUTH-WI-CHIEUCH BA49 D298 # HANGUL SYLLABLE THIEUTH-WI-KHIEUKH BA4A D299 # HANGUL SYLLABLE THIEUTH-WI-THIEUTH BA4B D29A # HANGUL SYLLABLE THIEUTH-WI-PHIEUPH BA4C D29B # HANGUL SYLLABLE THIEUTH-WI-HIEUH BA4D D29D # HANGUL SYLLABLE THIEUTH-YU-KIYEOK BA4E D29E # HANGUL SYLLABLE THIEUTH-YU-SSANGKIYEOK BA4F D29F # HANGUL SYLLABLE THIEUTH-YU-KIYEOKSIOS BA50 D2A1 # HANGUL SYLLABLE THIEUTH-YU-NIEUNCIEUC BA51 D2A2 # HANGUL SYLLABLE THIEUTH-YU-NIEUNHIEUH BA52 D2A3 # HANGUL SYLLABLE THIEUTH-YU-TIKEUT BA53 D2A5 # HANGUL SYLLABLE THIEUTH-YU-RIEULKIYEOK BA54 D2A6 # HANGUL SYLLABLE THIEUTH-YU-RIEULMIEUM BA55 D2A7 # HANGUL SYLLABLE THIEUTH-YU-RIEULPIEUP BA56 D2A8 # HANGUL SYLLABLE THIEUTH-YU-RIEULSIOS BA57 D2A9 # HANGUL SYLLABLE THIEUTH-YU-RIEULTHIEUTH BA58 D2AA # HANGUL SYLLABLE THIEUTH-YU-RIEULPHIEUPH BA59 D2AB # HANGUL SYLLABLE THIEUTH-YU-RIEULHIEUH BA5A D2AD # HANGUL SYLLABLE THIEUTH-YU-PIEUP BA61 D2AE # HANGUL SYLLABLE THIEUTH-YU-PIEUPSIOS BA62 D2AF # HANGUL SYLLABLE THIEUTH-YU-SIOS BA63 D2B0 # HANGUL SYLLABLE THIEUTH-YU-SSANGSIOS BA64 D2B2 # HANGUL SYLLABLE THIEUTH-YU-CIEUC BA65 D2B3 # HANGUL SYLLABLE THIEUTH-YU-CHIEUCH BA66 D2B4 # HANGUL SYLLABLE THIEUTH-YU-KHIEUKH BA67 D2B5 # HANGUL SYLLABLE THIEUTH-YU-THIEUTH BA68 D2B6 # HANGUL SYLLABLE THIEUTH-YU-PHIEUPH BA69 D2B7 # HANGUL SYLLABLE THIEUTH-YU-HIEUH BA6A D2BA # HANGUL SYLLABLE THIEUTH-EU-SSANGKIYEOK BA6B D2BB # HANGUL SYLLABLE THIEUTH-EU-KIYEOKSIOS BA6C D2BD # HANGUL SYLLABLE THIEUTH-EU-NIEUNCIEUC BA6D D2BE # HANGUL SYLLABLE THIEUTH-EU-NIEUNHIEUH BA6E D2C1 # HANGUL SYLLABLE THIEUTH-EU-RIEULKIYEOK BA6F D2C3 # HANGUL SYLLABLE THIEUTH-EU-RIEULPIEUP BA70 D2C4 # HANGUL SYLLABLE THIEUTH-EU-RIEULSIOS BA71 D2C5 # HANGUL SYLLABLE THIEUTH-EU-RIEULTHIEUTH BA72 D2C6 # HANGUL SYLLABLE THIEUTH-EU-RIEULPHIEUPH BA73 D2C7 # HANGUL SYLLABLE THIEUTH-EU-RIEULHIEUH BA74 D2CA # HANGUL SYLLABLE THIEUTH-EU-PIEUPSIOS BA75 D2CC # HANGUL SYLLABLE THIEUTH-EU-SSANGSIOS BA76 D2CD # HANGUL SYLLABLE THIEUTH-EU-IEUNG BA77 D2CE # HANGUL SYLLABLE THIEUTH-EU-CIEUC BA78 D2CF # HANGUL SYLLABLE THIEUTH-EU-CHIEUCH BA79 D2D0 # HANGUL SYLLABLE THIEUTH-EU-KHIEUKH BA7A D2D1 # HANGUL SYLLABLE THIEUTH-EU-THIEUTH BA81 D2D2 # HANGUL SYLLABLE THIEUTH-EU-PHIEUPH BA82 D2D3 # HANGUL SYLLABLE THIEUTH-EU-HIEUH BA83 D2D5 # HANGUL SYLLABLE THIEUTH-YI-KIYEOK BA84 D2D6 # HANGUL SYLLABLE THIEUTH-YI-SSANGKIYEOK BA85 D2D7 # HANGUL SYLLABLE THIEUTH-YI-KIYEOKSIOS BA86 D2D9 # HANGUL SYLLABLE THIEUTH-YI-NIEUNCIEUC BA87 D2DA # HANGUL SYLLABLE THIEUTH-YI-NIEUNHIEUH BA88 D2DB # HANGUL SYLLABLE THIEUTH-YI-TIKEUT BA89 D2DD # HANGUL SYLLABLE THIEUTH-YI-RIEULKIYEOK BA8A D2DE # HANGUL SYLLABLE THIEUTH-YI-RIEULMIEUM BA8B D2DF # HANGUL SYLLABLE THIEUTH-YI-RIEULPIEUP BA8C D2E0 # HANGUL SYLLABLE THIEUTH-YI-RIEULSIOS BA8D D2E1 # HANGUL SYLLABLE THIEUTH-YI-RIEULTHIEUTH BA8E D2E2 # HANGUL SYLLABLE THIEUTH-YI-RIEULPHIEUPH BA8F D2E3 # HANGUL SYLLABLE THIEUTH-YI-RIEULHIEUH BA90 D2E6 # HANGUL SYLLABLE THIEUTH-YI-PIEUPSIOS BA91 D2E7 # HANGUL SYLLABLE THIEUTH-YI-SIOS BA92 D2E8 # HANGUL SYLLABLE THIEUTH-YI-SSANGSIOS BA93 D2E9 # HANGUL SYLLABLE THIEUTH-YI-IEUNG BA94 D2EA # HANGUL SYLLABLE THIEUTH-YI-CIEUC BA95 D2EB # HANGUL SYLLABLE THIEUTH-YI-CHIEUCH BA96 D2EC # HANGUL SYLLABLE THIEUTH-YI-KHIEUKH BA97 D2ED # HANGUL SYLLABLE THIEUTH-YI-THIEUTH BA98 D2EE # HANGUL SYLLABLE THIEUTH-YI-PHIEUPH BA99 D2EF # HANGUL SYLLABLE THIEUTH-YI-HIEUH BA9A D2F2 # HANGUL SYLLABLE THIEUTH-I-SSANGKIYEOK BA9B D2F3 # HANGUL SYLLABLE THIEUTH-I-KIYEOKSIOS BA9C D2F5 # HANGUL SYLLABLE THIEUTH-I-NIEUNCIEUC BA9D D2F6 # HANGUL SYLLABLE THIEUTH-I-NIEUNHIEUH BA9E D2F7 # HANGUL SYLLABLE THIEUTH-I-TIKEUT BA9F D2F9 # HANGUL SYLLABLE THIEUTH-I-RIEULKIYEOK BAA0 D2FA # HANGUL SYLLABLE THIEUTH-I-RIEULMIEUM BAA1 BC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG BAA2 BC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC BAA3 BCA0 # HANGUL SYLLABLE PIEUP-E BAA4 BCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK BAA5 BCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN BAA6 BCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT BAA7 BCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL BAA8 BCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM BAA9 BCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP BAAA BCB3 # HANGUL SYLLABLE PIEUP-E-SIOS BAAB BCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS BAAC BCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG BAAD BCBC # HANGUL SYLLABLE PIEUP-YEO BAAE BCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK BAAF BCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN BAB0 BCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL BAB1 BCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP BAB2 BCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS BAB3 BCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS BAB4 BCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG BAB5 BCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH BAB6 BCD8 # HANGUL SYLLABLE PIEUP-YE BAB7 BCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN BAB8 BCF4 # HANGUL SYLLABLE PIEUP-O BAB9 BCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK BABA BCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK BABB BCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN BABC BCFC # HANGUL SYLLABLE PIEUP-O-RIEUL BABD BD04 # HANGUL SYLLABLE PIEUP-O-MIEUM BABE BD05 # HANGUL SYLLABLE PIEUP-O-PIEUP BABF BD07 # HANGUL SYLLABLE PIEUP-O-SIOS BAC0 BD09 # HANGUL SYLLABLE PIEUP-O-IEUNG BAC1 BD10 # HANGUL SYLLABLE PIEUP-WA BAC2 BD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN BAC3 BD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS BAC4 BD2C # HANGUL SYLLABLE PIEUP-WAE BAC5 BD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS BAC6 BD48 # HANGUL SYLLABLE PIEUP-OE BAC7 BD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK BAC8 BD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN BAC9 BD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL BACA BD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM BACB BD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP BACC BD64 # HANGUL SYLLABLE PIEUP-YO BACD BD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN BACE BD80 # HANGUL SYLLABLE PIEUP-U BACF BD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK BAD0 BD84 # HANGUL SYLLABLE PIEUP-U-NIEUN BAD1 BD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT BAD2 BD88 # HANGUL SYLLABLE PIEUP-U-RIEUL BAD3 BD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK BAD4 BD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM BAD5 BD90 # HANGUL SYLLABLE PIEUP-U-MIEUM BAD6 BD91 # HANGUL SYLLABLE PIEUP-U-PIEUP BAD7 BD93 # HANGUL SYLLABLE PIEUP-U-SIOS BAD8 BD95 # HANGUL SYLLABLE PIEUP-U-IEUNG BAD9 BD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH BADA BD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH BADB BD9C # HANGUL SYLLABLE PIEUP-WEO BADC BDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL BADD BDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS BADE BDB8 # HANGUL SYLLABLE PIEUP-WE BADF BDD4 # HANGUL SYLLABLE PIEUP-WI BAE0 BDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK BAE1 BDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN BAE2 BDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL BAE3 BDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG BAE4 BDF0 # HANGUL SYLLABLE PIEUP-YU BAE5 BDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN BAE6 BDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL BAE7 BE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM BAE8 BE03 # HANGUL SYLLABLE PIEUP-YU-SIOS BAE9 BE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG BAEA BE0C # HANGUL SYLLABLE PIEUP-EU BAEB BE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK BAEC BE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN BAED BE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL BAEE BE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM BAEF BE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP BAF0 BE1F # HANGUL SYLLABLE PIEUP-EU-SIOS BAF1 BE44 # HANGUL SYLLABLE PIEUP-I BAF2 BE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK BAF3 BE48 # HANGUL SYLLABLE PIEUP-I-NIEUN BAF4 BE4C # HANGUL SYLLABLE PIEUP-I-RIEUL BAF5 BE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM BAF6 BE54 # HANGUL SYLLABLE PIEUP-I-MIEUM BAF7 BE55 # HANGUL SYLLABLE PIEUP-I-PIEUP BAF8 BE57 # HANGUL SYLLABLE PIEUP-I-SIOS BAF9 BE59 # HANGUL SYLLABLE PIEUP-I-IEUNG BAFA BE5A # HANGUL SYLLABLE PIEUP-I-CIEUC BAFB BE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH BAFC BE60 # HANGUL SYLLABLE SSANGPIEUP-A BAFD BE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK BAFE BE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN BB41 D2FB # HANGUL SYLLABLE THIEUTH-I-RIEULPIEUP BB42 D2FC # HANGUL SYLLABLE THIEUTH-I-RIEULSIOS BB43 D2FD # HANGUL SYLLABLE THIEUTH-I-RIEULTHIEUTH BB44 D2FE # HANGUL SYLLABLE THIEUTH-I-RIEULPHIEUPH BB45 D2FF # HANGUL SYLLABLE THIEUTH-I-RIEULHIEUH BB46 D302 # HANGUL SYLLABLE THIEUTH-I-PIEUPSIOS BB47 D304 # HANGUL SYLLABLE THIEUTH-I-SSANGSIOS BB48 D306 # HANGUL SYLLABLE THIEUTH-I-CIEUC BB49 D307 # HANGUL SYLLABLE THIEUTH-I-CHIEUCH BB4A D308 # HANGUL SYLLABLE THIEUTH-I-KHIEUKH BB4B D309 # HANGUL SYLLABLE THIEUTH-I-THIEUTH BB4C D30A # HANGUL SYLLABLE THIEUTH-I-PHIEUPH BB4D D30B # HANGUL SYLLABLE THIEUTH-I-HIEUH BB4E D30F # HANGUL SYLLABLE PHIEUPH-A-KIYEOKSIOS BB4F D311 # HANGUL SYLLABLE PHIEUPH-A-NIEUNCIEUC BB50 D312 # HANGUL SYLLABLE PHIEUPH-A-NIEUNHIEUH BB51 D313 # HANGUL SYLLABLE PHIEUPH-A-TIKEUT BB52 D315 # HANGUL SYLLABLE PHIEUPH-A-RIEULKIYEOK BB53 D317 # HANGUL SYLLABLE PHIEUPH-A-RIEULPIEUP BB54 D318 # HANGUL SYLLABLE PHIEUPH-A-RIEULSIOS BB55 D319 # HANGUL SYLLABLE PHIEUPH-A-RIEULTHIEUTH BB56 D31A # HANGUL SYLLABLE PHIEUPH-A-RIEULPHIEUPH BB57 D31B # HANGUL SYLLABLE PHIEUPH-A-RIEULHIEUH BB58 D31E # HANGUL SYLLABLE PHIEUPH-A-PIEUPSIOS BB59 D322 # HANGUL SYLLABLE PHIEUPH-A-CIEUC BB5A D323 # HANGUL SYLLABLE PHIEUPH-A-CHIEUCH BB61 D324 # HANGUL SYLLABLE PHIEUPH-A-KHIEUKH BB62 D326 # HANGUL SYLLABLE PHIEUPH-A-PHIEUPH BB63 D327 # HANGUL SYLLABLE PHIEUPH-A-HIEUH BB64 D32A # HANGUL SYLLABLE PHIEUPH-AE-SSANGKIYEOK BB65 D32B # HANGUL SYLLABLE PHIEUPH-AE-KIYEOKSIOS BB66 D32D # HANGUL SYLLABLE PHIEUPH-AE-NIEUNCIEUC BB67 D32E # HANGUL SYLLABLE PHIEUPH-AE-NIEUNHIEUH BB68 D32F # HANGUL SYLLABLE PHIEUPH-AE-TIKEUT BB69 D331 # HANGUL SYLLABLE PHIEUPH-AE-RIEULKIYEOK BB6A D332 # HANGUL SYLLABLE PHIEUPH-AE-RIEULMIEUM BB6B D333 # HANGUL SYLLABLE PHIEUPH-AE-RIEULPIEUP BB6C D334 # HANGUL SYLLABLE PHIEUPH-AE-RIEULSIOS BB6D D335 # HANGUL SYLLABLE PHIEUPH-AE-RIEULTHIEUTH BB6E D336 # HANGUL SYLLABLE PHIEUPH-AE-RIEULPHIEUPH BB6F D337 # HANGUL SYLLABLE PHIEUPH-AE-RIEULHIEUH BB70 D33A # HANGUL SYLLABLE PHIEUPH-AE-PIEUPSIOS BB71 D33E # HANGUL SYLLABLE PHIEUPH-AE-CIEUC BB72 D33F # HANGUL SYLLABLE PHIEUPH-AE-CHIEUCH BB73 D340 # HANGUL SYLLABLE PHIEUPH-AE-KHIEUKH BB74 D341 # HANGUL SYLLABLE PHIEUPH-AE-THIEUTH BB75 D342 # HANGUL SYLLABLE PHIEUPH-AE-PHIEUPH BB76 D343 # HANGUL SYLLABLE PHIEUPH-AE-HIEUH BB77 D346 # HANGUL SYLLABLE PHIEUPH-YA-SSANGKIYEOK BB78 D347 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOKSIOS BB79 D348 # HANGUL SYLLABLE PHIEUPH-YA-NIEUN BB7A D349 # HANGUL SYLLABLE PHIEUPH-YA-NIEUNCIEUC BB81 D34A # HANGUL SYLLABLE PHIEUPH-YA-NIEUNHIEUH BB82 D34B # HANGUL SYLLABLE PHIEUPH-YA-TIKEUT BB83 D34C # HANGUL SYLLABLE PHIEUPH-YA-RIEUL BB84 D34D # HANGUL SYLLABLE PHIEUPH-YA-RIEULKIYEOK BB85 D34E # HANGUL SYLLABLE PHIEUPH-YA-RIEULMIEUM BB86 D34F # HANGUL SYLLABLE PHIEUPH-YA-RIEULPIEUP BB87 D350 # HANGUL SYLLABLE PHIEUPH-YA-RIEULSIOS BB88 D351 # HANGUL SYLLABLE PHIEUPH-YA-RIEULTHIEUTH BB89 D352 # HANGUL SYLLABLE PHIEUPH-YA-RIEULPHIEUPH BB8A D353 # HANGUL SYLLABLE PHIEUPH-YA-RIEULHIEUH BB8B D354 # HANGUL SYLLABLE PHIEUPH-YA-MIEUM BB8C D355 # HANGUL SYLLABLE PHIEUPH-YA-PIEUP BB8D D356 # HANGUL SYLLABLE PHIEUPH-YA-PIEUPSIOS BB8E D357 # HANGUL SYLLABLE PHIEUPH-YA-SIOS BB8F D358 # HANGUL SYLLABLE PHIEUPH-YA-SSANGSIOS BB90 D359 # HANGUL SYLLABLE PHIEUPH-YA-IEUNG BB91 D35A # HANGUL SYLLABLE PHIEUPH-YA-CIEUC BB92 D35B # HANGUL SYLLABLE PHIEUPH-YA-CHIEUCH BB93 D35C # HANGUL SYLLABLE PHIEUPH-YA-KHIEUKH BB94 D35D # HANGUL SYLLABLE PHIEUPH-YA-THIEUTH BB95 D35E # HANGUL SYLLABLE PHIEUPH-YA-PHIEUPH BB96 D35F # HANGUL SYLLABLE PHIEUPH-YA-HIEUH BB97 D360 # HANGUL SYLLABLE PHIEUPH-YAE BB98 D361 # HANGUL SYLLABLE PHIEUPH-YAE-KIYEOK BB99 D362 # HANGUL SYLLABLE PHIEUPH-YAE-SSANGKIYEOK BB9A D363 # HANGUL SYLLABLE PHIEUPH-YAE-KIYEOKSIOS BB9B D364 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUN BB9C D365 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUNCIEUC BB9D D366 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUNHIEUH BB9E D367 # HANGUL SYLLABLE PHIEUPH-YAE-TIKEUT BB9F D368 # HANGUL SYLLABLE PHIEUPH-YAE-RIEUL BBA0 D369 # HANGUL SYLLABLE PHIEUPH-YAE-RIEULKIYEOK BBA1 BE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL BBA2 BE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM BBA3 BE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM BBA4 BE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP BBA5 BE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS BBA6 BE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS BBA7 BE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG BBA8 BE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH BBA9 BE7C # HANGUL SYLLABLE SSANGPIEUP-AE BBAA BE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK BBAB BE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN BBAC BE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL BBAD BE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM BBAE BE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP BBAF BE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS BBB0 BE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS BBB1 BE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG BBB2 BE98 # HANGUL SYLLABLE SSANGPIEUP-YA BBB3 BE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK BBB4 BEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM BBB5 BED0 # HANGUL SYLLABLE SSANGPIEUP-EO BBB6 BED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK BBB7 BED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN BBB8 BED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT BBB9 BED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL BBBA BEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM BBBB BEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS BBBC BEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS BBBD BEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG BBBE BEEC # HANGUL SYLLABLE SSANGPIEUP-E BBBF BF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG BBC0 BF08 # HANGUL SYLLABLE SSANGPIEUP-YEO BBC1 BF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK BBC2 BF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM BBC3 BF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP BBC4 BF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS BBC5 BF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS BBC6 BF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG BBC7 BF40 # HANGUL SYLLABLE SSANGPIEUP-O BBC8 BF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK BBC9 BF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN BBCA BF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL BBCB BF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM BBCC BF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP BBCD BF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG BBCE BF94 # HANGUL SYLLABLE SSANGPIEUP-OE BBCF BFB0 # HANGUL SYLLABLE SSANGPIEUP-YO BBD0 BFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG BBD1 BFCC # HANGUL SYLLABLE SSANGPIEUP-U BBD2 BFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK BBD3 BFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN BBD4 BFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL BBD5 BFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM BBD6 BFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS BBD7 BFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG BBD8 C03C # HANGUL SYLLABLE SSANGPIEUP-YU BBD9 C051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG BBDA C058 # HANGUL SYLLABLE SSANGPIEUP-EU BBDB C05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN BBDC C060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL BBDD C068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM BBDE C069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP BBDF C090 # HANGUL SYLLABLE SSANGPIEUP-I BBE0 C091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK BBE1 C094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN BBE2 C098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL BBE3 C0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM BBE4 C0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP BBE5 C0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS BBE6 C0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG BBE7 C0AC # HANGUL SYLLABLE SIOS-A BBE8 C0AD # HANGUL SYLLABLE SIOS-A-KIYEOK BBE9 C0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS BBEA C0B0 # HANGUL SYLLABLE SIOS-A-NIEUN BBEB C0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT BBEC C0B4 # HANGUL SYLLABLE SIOS-A-RIEUL BBED C0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK BBEE C0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM BBEF C0BC # HANGUL SYLLABLE SIOS-A-MIEUM BBF0 C0BD # HANGUL SYLLABLE SIOS-A-PIEUP BBF1 C0BF # HANGUL SYLLABLE SIOS-A-SIOS BBF2 C0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS BBF3 C0C1 # HANGUL SYLLABLE SIOS-A-IEUNG BBF4 C0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH BBF5 C0C8 # HANGUL SYLLABLE SIOS-AE BBF6 C0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK BBF7 C0CC # HANGUL SYLLABLE SIOS-AE-NIEUN BBF8 C0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL BBF9 C0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM BBFA C0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP BBFB C0DB # HANGUL SYLLABLE SIOS-AE-SIOS BBFC C0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS BBFD C0DD # HANGUL SYLLABLE SIOS-AE-IEUNG BBFE C0E4 # HANGUL SYLLABLE SIOS-YA BC41 D36A # HANGUL SYLLABLE PHIEUPH-YAE-RIEULMIEUM BC42 D36B # HANGUL SYLLABLE PHIEUPH-YAE-RIEULPIEUP BC43 D36C # HANGUL SYLLABLE PHIEUPH-YAE-RIEULSIOS BC44 D36D # HANGUL SYLLABLE PHIEUPH-YAE-RIEULTHIEUTH BC45 D36E # HANGUL SYLLABLE PHIEUPH-YAE-RIEULPHIEUPH BC46 D36F # HANGUL SYLLABLE PHIEUPH-YAE-RIEULHIEUH BC47 D370 # HANGUL SYLLABLE PHIEUPH-YAE-MIEUM BC48 D371 # HANGUL SYLLABLE PHIEUPH-YAE-PIEUP BC49 D372 # HANGUL SYLLABLE PHIEUPH-YAE-PIEUPSIOS BC4A D373 # HANGUL SYLLABLE PHIEUPH-YAE-SIOS BC4B D374 # HANGUL SYLLABLE PHIEUPH-YAE-SSANGSIOS BC4C D375 # HANGUL SYLLABLE PHIEUPH-YAE-IEUNG BC4D D376 # HANGUL SYLLABLE PHIEUPH-YAE-CIEUC BC4E D377 # HANGUL SYLLABLE PHIEUPH-YAE-CHIEUCH BC4F D378 # HANGUL SYLLABLE PHIEUPH-YAE-KHIEUKH BC50 D379 # HANGUL SYLLABLE PHIEUPH-YAE-THIEUTH BC51 D37A # HANGUL SYLLABLE PHIEUPH-YAE-PHIEUPH BC52 D37B # HANGUL SYLLABLE PHIEUPH-YAE-HIEUH BC53 D37E # HANGUL SYLLABLE PHIEUPH-EO-SSANGKIYEOK BC54 D37F # HANGUL SYLLABLE PHIEUPH-EO-KIYEOKSIOS BC55 D381 # HANGUL SYLLABLE PHIEUPH-EO-NIEUNCIEUC BC56 D382 # HANGUL SYLLABLE PHIEUPH-EO-NIEUNHIEUH BC57 D383 # HANGUL SYLLABLE PHIEUPH-EO-TIKEUT BC58 D385 # HANGUL SYLLABLE PHIEUPH-EO-RIEULKIYEOK BC59 D386 # HANGUL SYLLABLE PHIEUPH-EO-RIEULMIEUM BC5A D387 # HANGUL SYLLABLE PHIEUPH-EO-RIEULPIEUP BC61 D388 # HANGUL SYLLABLE PHIEUPH-EO-RIEULSIOS BC62 D389 # HANGUL SYLLABLE PHIEUPH-EO-RIEULTHIEUTH BC63 D38A # HANGUL SYLLABLE PHIEUPH-EO-RIEULPHIEUPH BC64 D38B # HANGUL SYLLABLE PHIEUPH-EO-RIEULHIEUH BC65 D38E # HANGUL SYLLABLE PHIEUPH-EO-PIEUPSIOS BC66 D392 # HANGUL SYLLABLE PHIEUPH-EO-CIEUC BC67 D393 # HANGUL SYLLABLE PHIEUPH-EO-CHIEUCH BC68 D394 # HANGUL SYLLABLE PHIEUPH-EO-KHIEUKH BC69 D395 # HANGUL SYLLABLE PHIEUPH-EO-THIEUTH BC6A D396 # HANGUL SYLLABLE PHIEUPH-EO-PHIEUPH BC6B D397 # HANGUL SYLLABLE PHIEUPH-EO-HIEUH BC6C D39A # HANGUL SYLLABLE PHIEUPH-E-SSANGKIYEOK BC6D D39B # HANGUL SYLLABLE PHIEUPH-E-KIYEOKSIOS BC6E D39D # HANGUL SYLLABLE PHIEUPH-E-NIEUNCIEUC BC6F D39E # HANGUL SYLLABLE PHIEUPH-E-NIEUNHIEUH BC70 D39F # HANGUL SYLLABLE PHIEUPH-E-TIKEUT BC71 D3A1 # HANGUL SYLLABLE PHIEUPH-E-RIEULKIYEOK BC72 D3A2 # HANGUL SYLLABLE PHIEUPH-E-RIEULMIEUM BC73 D3A3 # HANGUL SYLLABLE PHIEUPH-E-RIEULPIEUP BC74 D3A4 # HANGUL SYLLABLE PHIEUPH-E-RIEULSIOS BC75 D3A5 # HANGUL SYLLABLE PHIEUPH-E-RIEULTHIEUTH BC76 D3A6 # HANGUL SYLLABLE PHIEUPH-E-RIEULPHIEUPH BC77 D3A7 # HANGUL SYLLABLE PHIEUPH-E-RIEULHIEUH BC78 D3AA # HANGUL SYLLABLE PHIEUPH-E-PIEUPSIOS BC79 D3AC # HANGUL SYLLABLE PHIEUPH-E-SSANGSIOS BC7A D3AE # HANGUL SYLLABLE PHIEUPH-E-CIEUC BC81 D3AF # HANGUL SYLLABLE PHIEUPH-E-CHIEUCH BC82 D3B0 # HANGUL SYLLABLE PHIEUPH-E-KHIEUKH BC83 D3B1 # HANGUL SYLLABLE PHIEUPH-E-THIEUTH BC84 D3B2 # HANGUL SYLLABLE PHIEUPH-E-PHIEUPH BC85 D3B3 # HANGUL SYLLABLE PHIEUPH-E-HIEUH BC86 D3B5 # HANGUL SYLLABLE PHIEUPH-YEO-KIYEOK BC87 D3B6 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGKIYEOK BC88 D3B7 # HANGUL SYLLABLE PHIEUPH-YEO-KIYEOKSIOS BC89 D3B9 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUNCIEUC BC8A D3BA # HANGUL SYLLABLE PHIEUPH-YEO-NIEUNHIEUH BC8B D3BB # HANGUL SYLLABLE PHIEUPH-YEO-TIKEUT BC8C D3BD # HANGUL SYLLABLE PHIEUPH-YEO-RIEULKIYEOK BC8D D3BE # HANGUL SYLLABLE PHIEUPH-YEO-RIEULMIEUM BC8E D3BF # HANGUL SYLLABLE PHIEUPH-YEO-RIEULPIEUP BC8F D3C0 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULSIOS BC90 D3C1 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULTHIEUTH BC91 D3C2 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULPHIEUPH BC92 D3C3 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULHIEUH BC93 D3C6 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUPSIOS BC94 D3C7 # HANGUL SYLLABLE PHIEUPH-YEO-SIOS BC95 D3CA # HANGUL SYLLABLE PHIEUPH-YEO-CIEUC BC96 D3CB # HANGUL SYLLABLE PHIEUPH-YEO-CHIEUCH BC97 D3CC # HANGUL SYLLABLE PHIEUPH-YEO-KHIEUKH BC98 D3CD # HANGUL SYLLABLE PHIEUPH-YEO-THIEUTH BC99 D3CE # HANGUL SYLLABLE PHIEUPH-YEO-PHIEUPH BC9A D3CF # HANGUL SYLLABLE PHIEUPH-YEO-HIEUH BC9B D3D1 # HANGUL SYLLABLE PHIEUPH-YE-KIYEOK BC9C D3D2 # HANGUL SYLLABLE PHIEUPH-YE-SSANGKIYEOK BC9D D3D3 # HANGUL SYLLABLE PHIEUPH-YE-KIYEOKSIOS BC9E D3D4 # HANGUL SYLLABLE PHIEUPH-YE-NIEUN BC9F D3D5 # HANGUL SYLLABLE PHIEUPH-YE-NIEUNCIEUC BCA0 D3D6 # HANGUL SYLLABLE PHIEUPH-YE-NIEUNHIEUH BCA1 C0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK BCA2 C0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN BCA3 C0EC # HANGUL SYLLABLE SIOS-YA-RIEUL BCA4 C0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM BCA5 C0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP BCA6 C0F7 # HANGUL SYLLABLE SIOS-YA-SIOS BCA7 C0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG BCA8 C100 # HANGUL SYLLABLE SIOS-YAE BCA9 C104 # HANGUL SYLLABLE SIOS-YAE-NIEUN BCAA C108 # HANGUL SYLLABLE SIOS-YAE-RIEUL BCAB C110 # HANGUL SYLLABLE SIOS-YAE-MIEUM BCAC C115 # HANGUL SYLLABLE SIOS-YAE-IEUNG BCAD C11C # HANGUL SYLLABLE SIOS-EO BCAE C11D # HANGUL SYLLABLE SIOS-EO-KIYEOK BCAF C11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK BCB0 C11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS BCB1 C120 # HANGUL SYLLABLE SIOS-EO-NIEUN BCB2 C123 # HANGUL SYLLABLE SIOS-EO-TIKEUT BCB3 C124 # HANGUL SYLLABLE SIOS-EO-RIEUL BCB4 C126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM BCB5 C127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP BCB6 C12C # HANGUL SYLLABLE SIOS-EO-MIEUM BCB7 C12D # HANGUL SYLLABLE SIOS-EO-PIEUP BCB8 C12F # HANGUL SYLLABLE SIOS-EO-SIOS BCB9 C130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS BCBA C131 # HANGUL SYLLABLE SIOS-EO-IEUNG BCBB C136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH BCBC C138 # HANGUL SYLLABLE SIOS-E BCBD C139 # HANGUL SYLLABLE SIOS-E-KIYEOK BCBE C13C # HANGUL SYLLABLE SIOS-E-NIEUN BCBF C140 # HANGUL SYLLABLE SIOS-E-RIEUL BCC0 C148 # HANGUL SYLLABLE SIOS-E-MIEUM BCC1 C149 # HANGUL SYLLABLE SIOS-E-PIEUP BCC2 C14B # HANGUL SYLLABLE SIOS-E-SIOS BCC3 C14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS BCC4 C14D # HANGUL SYLLABLE SIOS-E-IEUNG BCC5 C154 # HANGUL SYLLABLE SIOS-YEO BCC6 C155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK BCC7 C158 # HANGUL SYLLABLE SIOS-YEO-NIEUN BCC8 C15C # HANGUL SYLLABLE SIOS-YEO-RIEUL BCC9 C164 # HANGUL SYLLABLE SIOS-YEO-MIEUM BCCA C165 # HANGUL SYLLABLE SIOS-YEO-PIEUP BCCB C167 # HANGUL SYLLABLE SIOS-YEO-SIOS BCCC C168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS BCCD C169 # HANGUL SYLLABLE SIOS-YEO-IEUNG BCCE C170 # HANGUL SYLLABLE SIOS-YE BCCF C174 # HANGUL SYLLABLE SIOS-YE-NIEUN BCD0 C178 # HANGUL SYLLABLE SIOS-YE-RIEUL BCD1 C185 # HANGUL SYLLABLE SIOS-YE-IEUNG BCD2 C18C # HANGUL SYLLABLE SIOS-O BCD3 C18D # HANGUL SYLLABLE SIOS-O-KIYEOK BCD4 C18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK BCD5 C190 # HANGUL SYLLABLE SIOS-O-NIEUN BCD6 C194 # HANGUL SYLLABLE SIOS-O-RIEUL BCD7 C196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM BCD8 C19C # HANGUL SYLLABLE SIOS-O-MIEUM BCD9 C19D # HANGUL SYLLABLE SIOS-O-PIEUP BCDA C19F # HANGUL SYLLABLE SIOS-O-SIOS BCDB C1A1 # HANGUL SYLLABLE SIOS-O-IEUNG BCDC C1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH BCDD C1A8 # HANGUL SYLLABLE SIOS-WA BCDE C1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK BCDF C1AC # HANGUL SYLLABLE SIOS-WA-NIEUN BCE0 C1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL BCE1 C1BD # HANGUL SYLLABLE SIOS-WA-IEUNG BCE2 C1C4 # HANGUL SYLLABLE SIOS-WAE BCE3 C1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN BCE4 C1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL BCE5 C1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM BCE6 C1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS BCE7 C1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS BCE8 C1E0 # HANGUL SYLLABLE SIOS-OE BCE9 C1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN BCEA C1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL BCEB C1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM BCEC C1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP BCED C1F3 # HANGUL SYLLABLE SIOS-OE-SIOS BCEE C1FC # HANGUL SYLLABLE SIOS-YO BCEF C1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK BCF0 C200 # HANGUL SYLLABLE SIOS-YO-NIEUN BCF1 C204 # HANGUL SYLLABLE SIOS-YO-RIEUL BCF2 C20C # HANGUL SYLLABLE SIOS-YO-MIEUM BCF3 C20D # HANGUL SYLLABLE SIOS-YO-PIEUP BCF4 C20F # HANGUL SYLLABLE SIOS-YO-SIOS BCF5 C211 # HANGUL SYLLABLE SIOS-YO-IEUNG BCF6 C218 # HANGUL SYLLABLE SIOS-U BCF7 C219 # HANGUL SYLLABLE SIOS-U-KIYEOK BCF8 C21C # HANGUL SYLLABLE SIOS-U-NIEUN BCF9 C21F # HANGUL SYLLABLE SIOS-U-TIKEUT BCFA C220 # HANGUL SYLLABLE SIOS-U-RIEUL BCFB C228 # HANGUL SYLLABLE SIOS-U-MIEUM BCFC C229 # HANGUL SYLLABLE SIOS-U-PIEUP BCFD C22B # HANGUL SYLLABLE SIOS-U-SIOS BCFE C22D # HANGUL SYLLABLE SIOS-U-IEUNG BD41 D3D7 # HANGUL SYLLABLE PHIEUPH-YE-TIKEUT BD42 D3D9 # HANGUL SYLLABLE PHIEUPH-YE-RIEULKIYEOK BD43 D3DA # HANGUL SYLLABLE PHIEUPH-YE-RIEULMIEUM BD44 D3DB # HANGUL SYLLABLE PHIEUPH-YE-RIEULPIEUP BD45 D3DC # HANGUL SYLLABLE PHIEUPH-YE-RIEULSIOS BD46 D3DD # HANGUL SYLLABLE PHIEUPH-YE-RIEULTHIEUTH BD47 D3DE # HANGUL SYLLABLE PHIEUPH-YE-RIEULPHIEUPH BD48 D3DF # HANGUL SYLLABLE PHIEUPH-YE-RIEULHIEUH BD49 D3E0 # HANGUL SYLLABLE PHIEUPH-YE-MIEUM BD4A D3E2 # HANGUL SYLLABLE PHIEUPH-YE-PIEUPSIOS BD4B D3E4 # HANGUL SYLLABLE PHIEUPH-YE-SSANGSIOS BD4C D3E5 # HANGUL SYLLABLE PHIEUPH-YE-IEUNG BD4D D3E6 # HANGUL SYLLABLE PHIEUPH-YE-CIEUC BD4E D3E7 # HANGUL SYLLABLE PHIEUPH-YE-CHIEUCH BD4F D3E8 # HANGUL SYLLABLE PHIEUPH-YE-KHIEUKH BD50 D3E9 # HANGUL SYLLABLE PHIEUPH-YE-THIEUTH BD51 D3EA # HANGUL SYLLABLE PHIEUPH-YE-PHIEUPH BD52 D3EB # HANGUL SYLLABLE PHIEUPH-YE-HIEUH BD53 D3EE # HANGUL SYLLABLE PHIEUPH-O-SSANGKIYEOK BD54 D3EF # HANGUL SYLLABLE PHIEUPH-O-KIYEOKSIOS BD55 D3F1 # HANGUL SYLLABLE PHIEUPH-O-NIEUNCIEUC BD56 D3F2 # HANGUL SYLLABLE PHIEUPH-O-NIEUNHIEUH BD57 D3F3 # HANGUL SYLLABLE PHIEUPH-O-TIKEUT BD58 D3F5 # HANGUL SYLLABLE PHIEUPH-O-RIEULKIYEOK BD59 D3F6 # HANGUL SYLLABLE PHIEUPH-O-RIEULMIEUM BD5A D3F7 # HANGUL SYLLABLE PHIEUPH-O-RIEULPIEUP BD61 D3F8 # HANGUL SYLLABLE PHIEUPH-O-RIEULSIOS BD62 D3F9 # HANGUL SYLLABLE PHIEUPH-O-RIEULTHIEUTH BD63 D3FA # HANGUL SYLLABLE PHIEUPH-O-RIEULPHIEUPH BD64 D3FB # HANGUL SYLLABLE PHIEUPH-O-RIEULHIEUH BD65 D3FE # HANGUL SYLLABLE PHIEUPH-O-PIEUPSIOS BD66 D400 # HANGUL SYLLABLE PHIEUPH-O-SSANGSIOS BD67 D402 # HANGUL SYLLABLE PHIEUPH-O-CIEUC BD68 D403 # HANGUL SYLLABLE PHIEUPH-O-CHIEUCH BD69 D404 # HANGUL SYLLABLE PHIEUPH-O-KHIEUKH BD6A D405 # HANGUL SYLLABLE PHIEUPH-O-THIEUTH BD6B D406 # HANGUL SYLLABLE PHIEUPH-O-PHIEUPH BD6C D407 # HANGUL SYLLABLE PHIEUPH-O-HIEUH BD6D D409 # HANGUL SYLLABLE PHIEUPH-WA-KIYEOK BD6E D40A # HANGUL SYLLABLE PHIEUPH-WA-SSANGKIYEOK BD6F D40B # HANGUL SYLLABLE PHIEUPH-WA-KIYEOKSIOS BD70 D40C # HANGUL SYLLABLE PHIEUPH-WA-NIEUN BD71 D40D # HANGUL SYLLABLE PHIEUPH-WA-NIEUNCIEUC BD72 D40E # HANGUL SYLLABLE PHIEUPH-WA-NIEUNHIEUH BD73 D40F # HANGUL SYLLABLE PHIEUPH-WA-TIKEUT BD74 D410 # HANGUL SYLLABLE PHIEUPH-WA-RIEUL BD75 D411 # HANGUL SYLLABLE PHIEUPH-WA-RIEULKIYEOK BD76 D412 # HANGUL SYLLABLE PHIEUPH-WA-RIEULMIEUM BD77 D413 # HANGUL SYLLABLE PHIEUPH-WA-RIEULPIEUP BD78 D414 # HANGUL SYLLABLE PHIEUPH-WA-RIEULSIOS BD79 D415 # HANGUL SYLLABLE PHIEUPH-WA-RIEULTHIEUTH BD7A D416 # HANGUL SYLLABLE PHIEUPH-WA-RIEULPHIEUPH BD81 D417 # HANGUL SYLLABLE PHIEUPH-WA-RIEULHIEUH BD82 D418 # HANGUL SYLLABLE PHIEUPH-WA-MIEUM BD83 D419 # HANGUL SYLLABLE PHIEUPH-WA-PIEUP BD84 D41A # HANGUL SYLLABLE PHIEUPH-WA-PIEUPSIOS BD85 D41B # HANGUL SYLLABLE PHIEUPH-WA-SIOS BD86 D41C # HANGUL SYLLABLE PHIEUPH-WA-SSANGSIOS BD87 D41E # HANGUL SYLLABLE PHIEUPH-WA-CIEUC BD88 D41F # HANGUL SYLLABLE PHIEUPH-WA-CHIEUCH BD89 D420 # HANGUL SYLLABLE PHIEUPH-WA-KHIEUKH BD8A D421 # HANGUL SYLLABLE PHIEUPH-WA-THIEUTH BD8B D422 # HANGUL SYLLABLE PHIEUPH-WA-PHIEUPH BD8C D423 # HANGUL SYLLABLE PHIEUPH-WA-HIEUH BD8D D424 # HANGUL SYLLABLE PHIEUPH-WAE BD8E D425 # HANGUL SYLLABLE PHIEUPH-WAE-KIYEOK BD8F D426 # HANGUL SYLLABLE PHIEUPH-WAE-SSANGKIYEOK BD90 D427 # HANGUL SYLLABLE PHIEUPH-WAE-KIYEOKSIOS BD91 D428 # HANGUL SYLLABLE PHIEUPH-WAE-NIEUN BD92 D429 # HANGUL SYLLABLE PHIEUPH-WAE-NIEUNCIEUC BD93 D42A # HANGUL SYLLABLE PHIEUPH-WAE-NIEUNHIEUH BD94 D42B # HANGUL SYLLABLE PHIEUPH-WAE-TIKEUT BD95 D42C # HANGUL SYLLABLE PHIEUPH-WAE-RIEUL BD96 D42D # HANGUL SYLLABLE PHIEUPH-WAE-RIEULKIYEOK BD97 D42E # HANGUL SYLLABLE PHIEUPH-WAE-RIEULMIEUM BD98 D42F # HANGUL SYLLABLE PHIEUPH-WAE-RIEULPIEUP BD99 D430 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULSIOS BD9A D431 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULTHIEUTH BD9B D432 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULPHIEUPH BD9C D433 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULHIEUH BD9D D434 # HANGUL SYLLABLE PHIEUPH-WAE-MIEUM BD9E D435 # HANGUL SYLLABLE PHIEUPH-WAE-PIEUP BD9F D436 # HANGUL SYLLABLE PHIEUPH-WAE-PIEUPSIOS BDA0 D437 # HANGUL SYLLABLE PHIEUPH-WAE-SIOS BDA1 C22F # HANGUL SYLLABLE SIOS-U-CHIEUCH BDA2 C231 # HANGUL SYLLABLE SIOS-U-THIEUTH BDA3 C232 # HANGUL SYLLABLE SIOS-U-PHIEUPH BDA4 C234 # HANGUL SYLLABLE SIOS-WEO BDA5 C248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS BDA6 C250 # HANGUL SYLLABLE SIOS-WE BDA7 C251 # HANGUL SYLLABLE SIOS-WE-KIYEOK BDA8 C254 # HANGUL SYLLABLE SIOS-WE-NIEUN BDA9 C258 # HANGUL SYLLABLE SIOS-WE-RIEUL BDAA C260 # HANGUL SYLLABLE SIOS-WE-MIEUM BDAB C265 # HANGUL SYLLABLE SIOS-WE-IEUNG BDAC C26C # HANGUL SYLLABLE SIOS-WI BDAD C26D # HANGUL SYLLABLE SIOS-WI-KIYEOK BDAE C270 # HANGUL SYLLABLE SIOS-WI-NIEUN BDAF C274 # HANGUL SYLLABLE SIOS-WI-RIEUL BDB0 C27C # HANGUL SYLLABLE SIOS-WI-MIEUM BDB1 C27D # HANGUL SYLLABLE SIOS-WI-PIEUP BDB2 C27F # HANGUL SYLLABLE SIOS-WI-SIOS BDB3 C281 # HANGUL SYLLABLE SIOS-WI-IEUNG BDB4 C288 # HANGUL SYLLABLE SIOS-YU BDB5 C289 # HANGUL SYLLABLE SIOS-YU-KIYEOK BDB6 C290 # HANGUL SYLLABLE SIOS-YU-RIEUL BDB7 C298 # HANGUL SYLLABLE SIOS-YU-MIEUM BDB8 C29B # HANGUL SYLLABLE SIOS-YU-SIOS BDB9 C29D # HANGUL SYLLABLE SIOS-YU-IEUNG BDBA C2A4 # HANGUL SYLLABLE SIOS-EU BDBB C2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK BDBC C2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN BDBD C2AC # HANGUL SYLLABLE SIOS-EU-RIEUL BDBE C2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK BDBF C2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM BDC0 C2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP BDC1 C2B7 # HANGUL SYLLABLE SIOS-EU-SIOS BDC2 C2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG BDC3 C2DC # HANGUL SYLLABLE SIOS-I BDC4 C2DD # HANGUL SYLLABLE SIOS-I-KIYEOK BDC5 C2E0 # HANGUL SYLLABLE SIOS-I-NIEUN BDC6 C2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT BDC7 C2E4 # HANGUL SYLLABLE SIOS-I-RIEUL BDC8 C2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH BDC9 C2EC # HANGUL SYLLABLE SIOS-I-MIEUM BDCA C2ED # HANGUL SYLLABLE SIOS-I-PIEUP BDCB C2EF # HANGUL SYLLABLE SIOS-I-SIOS BDCC C2F1 # HANGUL SYLLABLE SIOS-I-IEUNG BDCD C2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH BDCE C2F8 # HANGUL SYLLABLE SSANGSIOS-A BDCF C2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK BDD0 C2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS BDD1 C2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN BDD2 C300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL BDD3 C308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM BDD4 C309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP BDD5 C30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS BDD6 C30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG BDD7 C313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH BDD8 C314 # HANGUL SYLLABLE SSANGSIOS-AE BDD9 C315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK BDDA C318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN BDDB C31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL BDDC C324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM BDDD C325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP BDDE C328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS BDDF C329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG BDE0 C345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG BDE1 C368 # HANGUL SYLLABLE SSANGSIOS-EO BDE2 C369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK BDE3 C36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN BDE4 C370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL BDE5 C372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM BDE6 C378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM BDE7 C379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP BDE8 C37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS BDE9 C37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG BDEA C384 # HANGUL SYLLABLE SSANGSIOS-E BDEB C388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN BDEC C38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL BDED C3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN BDEE C3D8 # HANGUL SYLLABLE SSANGSIOS-O BDEF C3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK BDF0 C3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN BDF1 C3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT BDF2 C3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL BDF3 C3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM BDF4 C3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM BDF5 C3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP BDF6 C3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG BDF7 C3F4 # HANGUL SYLLABLE SSANGSIOS-WA BDF8 C3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK BDF9 C3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN BDFA C408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS BDFB C410 # HANGUL SYLLABLE SSANGSIOS-WAE BDFC C424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS BDFD C42C # HANGUL SYLLABLE SSANGSIOS-OE BDFE C430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN BE41 D438 # HANGUL SYLLABLE PHIEUPH-WAE-SSANGSIOS BE42 D439 # HANGUL SYLLABLE PHIEUPH-WAE-IEUNG BE43 D43A # HANGUL SYLLABLE PHIEUPH-WAE-CIEUC BE44 D43B # HANGUL SYLLABLE PHIEUPH-WAE-CHIEUCH BE45 D43C # HANGUL SYLLABLE PHIEUPH-WAE-KHIEUKH BE46 D43D # HANGUL SYLLABLE PHIEUPH-WAE-THIEUTH BE47 D43E # HANGUL SYLLABLE PHIEUPH-WAE-PHIEUPH BE48 D43F # HANGUL SYLLABLE PHIEUPH-WAE-HIEUH BE49 D441 # HANGUL SYLLABLE PHIEUPH-OE-KIYEOK BE4A D442 # HANGUL SYLLABLE PHIEUPH-OE-SSANGKIYEOK BE4B D443 # HANGUL SYLLABLE PHIEUPH-OE-KIYEOKSIOS BE4C D445 # HANGUL SYLLABLE PHIEUPH-OE-NIEUNCIEUC BE4D D446 # HANGUL SYLLABLE PHIEUPH-OE-NIEUNHIEUH BE4E D447 # HANGUL SYLLABLE PHIEUPH-OE-TIKEUT BE4F D448 # HANGUL SYLLABLE PHIEUPH-OE-RIEUL BE50 D449 # HANGUL SYLLABLE PHIEUPH-OE-RIEULKIYEOK BE51 D44A # HANGUL SYLLABLE PHIEUPH-OE-RIEULMIEUM BE52 D44B # HANGUL SYLLABLE PHIEUPH-OE-RIEULPIEUP BE53 D44C # HANGUL SYLLABLE PHIEUPH-OE-RIEULSIOS BE54 D44D # HANGUL SYLLABLE PHIEUPH-OE-RIEULTHIEUTH BE55 D44E # HANGUL SYLLABLE PHIEUPH-OE-RIEULPHIEUPH BE56 D44F # HANGUL SYLLABLE PHIEUPH-OE-RIEULHIEUH BE57 D450 # HANGUL SYLLABLE PHIEUPH-OE-MIEUM BE58 D451 # HANGUL SYLLABLE PHIEUPH-OE-PIEUP BE59 D452 # HANGUL SYLLABLE PHIEUPH-OE-PIEUPSIOS BE5A D453 # HANGUL SYLLABLE PHIEUPH-OE-SIOS BE61 D454 # HANGUL SYLLABLE PHIEUPH-OE-SSANGSIOS BE62 D455 # HANGUL SYLLABLE PHIEUPH-OE-IEUNG BE63 D456 # HANGUL SYLLABLE PHIEUPH-OE-CIEUC BE64 D457 # HANGUL SYLLABLE PHIEUPH-OE-CHIEUCH BE65 D458 # HANGUL SYLLABLE PHIEUPH-OE-KHIEUKH BE66 D459 # HANGUL SYLLABLE PHIEUPH-OE-THIEUTH BE67 D45A # HANGUL SYLLABLE PHIEUPH-OE-PHIEUPH BE68 D45B # HANGUL SYLLABLE PHIEUPH-OE-HIEUH BE69 D45D # HANGUL SYLLABLE PHIEUPH-YO-KIYEOK BE6A D45E # HANGUL SYLLABLE PHIEUPH-YO-SSANGKIYEOK BE6B D45F # HANGUL SYLLABLE PHIEUPH-YO-KIYEOKSIOS BE6C D461 # HANGUL SYLLABLE PHIEUPH-YO-NIEUNCIEUC BE6D D462 # HANGUL SYLLABLE PHIEUPH-YO-NIEUNHIEUH BE6E D463 # HANGUL SYLLABLE PHIEUPH-YO-TIKEUT BE6F D465 # HANGUL SYLLABLE PHIEUPH-YO-RIEULKIYEOK BE70 D466 # HANGUL SYLLABLE PHIEUPH-YO-RIEULMIEUM BE71 D467 # HANGUL SYLLABLE PHIEUPH-YO-RIEULPIEUP BE72 D468 # HANGUL SYLLABLE PHIEUPH-YO-RIEULSIOS BE73 D469 # HANGUL SYLLABLE PHIEUPH-YO-RIEULTHIEUTH BE74 D46A # HANGUL SYLLABLE PHIEUPH-YO-RIEULPHIEUPH BE75 D46B # HANGUL SYLLABLE PHIEUPH-YO-RIEULHIEUH BE76 D46C # HANGUL SYLLABLE PHIEUPH-YO-MIEUM BE77 D46E # HANGUL SYLLABLE PHIEUPH-YO-PIEUPSIOS BE78 D470 # HANGUL SYLLABLE PHIEUPH-YO-SSANGSIOS BE79 D471 # HANGUL SYLLABLE PHIEUPH-YO-IEUNG BE7A D472 # HANGUL SYLLABLE PHIEUPH-YO-CIEUC BE81 D473 # HANGUL SYLLABLE PHIEUPH-YO-CHIEUCH BE82 D474 # HANGUL SYLLABLE PHIEUPH-YO-KHIEUKH BE83 D475 # HANGUL SYLLABLE PHIEUPH-YO-THIEUTH BE84 D476 # HANGUL SYLLABLE PHIEUPH-YO-PHIEUPH BE85 D477 # HANGUL SYLLABLE PHIEUPH-YO-HIEUH BE86 D47A # HANGUL SYLLABLE PHIEUPH-U-SSANGKIYEOK BE87 D47B # HANGUL SYLLABLE PHIEUPH-U-KIYEOKSIOS BE88 D47D # HANGUL SYLLABLE PHIEUPH-U-NIEUNCIEUC BE89 D47E # HANGUL SYLLABLE PHIEUPH-U-NIEUNHIEUH BE8A D481 # HANGUL SYLLABLE PHIEUPH-U-RIEULKIYEOK BE8B D483 # HANGUL SYLLABLE PHIEUPH-U-RIEULPIEUP BE8C D484 # HANGUL SYLLABLE PHIEUPH-U-RIEULSIOS BE8D D485 # HANGUL SYLLABLE PHIEUPH-U-RIEULTHIEUTH BE8E D486 # HANGUL SYLLABLE PHIEUPH-U-RIEULPHIEUPH BE8F D487 # HANGUL SYLLABLE PHIEUPH-U-RIEULHIEUH BE90 D48A # HANGUL SYLLABLE PHIEUPH-U-PIEUPSIOS BE91 D48C # HANGUL SYLLABLE PHIEUPH-U-SSANGSIOS BE92 D48E # HANGUL SYLLABLE PHIEUPH-U-CIEUC BE93 D48F # HANGUL SYLLABLE PHIEUPH-U-CHIEUCH BE94 D490 # HANGUL SYLLABLE PHIEUPH-U-KHIEUKH BE95 D491 # HANGUL SYLLABLE PHIEUPH-U-THIEUTH BE96 D492 # HANGUL SYLLABLE PHIEUPH-U-PHIEUPH BE97 D493 # HANGUL SYLLABLE PHIEUPH-U-HIEUH BE98 D495 # HANGUL SYLLABLE PHIEUPH-WEO-KIYEOK BE99 D496 # HANGUL SYLLABLE PHIEUPH-WEO-SSANGKIYEOK BE9A D497 # HANGUL SYLLABLE PHIEUPH-WEO-KIYEOKSIOS BE9B D498 # HANGUL SYLLABLE PHIEUPH-WEO-NIEUN BE9C D499 # HANGUL SYLLABLE PHIEUPH-WEO-NIEUNCIEUC BE9D D49A # HANGUL SYLLABLE PHIEUPH-WEO-NIEUNHIEUH BE9E D49B # HANGUL SYLLABLE PHIEUPH-WEO-TIKEUT BE9F D49C # HANGUL SYLLABLE PHIEUPH-WEO-RIEUL BEA0 D49D # HANGUL SYLLABLE PHIEUPH-WEO-RIEULKIYEOK BEA1 C434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL BEA2 C43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM BEA3 C43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP BEA4 C448 # HANGUL SYLLABLE SSANGSIOS-YO BEA5 C464 # HANGUL SYLLABLE SSANGSIOS-U BEA6 C465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK BEA7 C468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN BEA8 C46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL BEA9 C474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM BEAA C475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP BEAB C479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG BEAC C480 # HANGUL SYLLABLE SSANGSIOS-WEO BEAD C494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS BEAE C49C # HANGUL SYLLABLE SSANGSIOS-WE BEAF C4B8 # HANGUL SYLLABLE SSANGSIOS-WI BEB0 C4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN BEB1 C4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG BEB2 C4F0 # HANGUL SYLLABLE SSANGSIOS-EU BEB3 C4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK BEB4 C4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN BEB5 C4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL BEB6 C4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM BEB7 C4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH BEB8 C500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM BEB9 C501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP BEBA C50C # HANGUL SYLLABLE SSANGSIOS-YI BEBB C510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN BEBC C514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL BEBD C51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM BEBE C528 # HANGUL SYLLABLE SSANGSIOS-I BEBF C529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK BEC0 C52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN BEC1 C530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL BEC2 C538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM BEC3 C539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP BEC4 C53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS BEC5 C53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG BEC6 C544 # HANGUL SYLLABLE IEUNG-A BEC7 C545 # HANGUL SYLLABLE IEUNG-A-KIYEOK BEC8 C548 # HANGUL SYLLABLE IEUNG-A-NIEUN BEC9 C549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC BECA C54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH BECB C54C # HANGUL SYLLABLE IEUNG-A-RIEUL BECC C54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK BECD C54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM BECE C553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH BECF C554 # HANGUL SYLLABLE IEUNG-A-MIEUM BED0 C555 # HANGUL SYLLABLE IEUNG-A-PIEUP BED1 C557 # HANGUL SYLLABLE IEUNG-A-SIOS BED2 C558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS BED3 C559 # HANGUL SYLLABLE IEUNG-A-IEUNG BED4 C55D # HANGUL SYLLABLE IEUNG-A-THIEUTH BED5 C55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH BED6 C560 # HANGUL SYLLABLE IEUNG-AE BED7 C561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK BED8 C564 # HANGUL SYLLABLE IEUNG-AE-NIEUN BED9 C568 # HANGUL SYLLABLE IEUNG-AE-RIEUL BEDA C570 # HANGUL SYLLABLE IEUNG-AE-MIEUM BEDB C571 # HANGUL SYLLABLE IEUNG-AE-PIEUP BEDC C573 # HANGUL SYLLABLE IEUNG-AE-SIOS BEDD C574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS BEDE C575 # HANGUL SYLLABLE IEUNG-AE-IEUNG BEDF C57C # HANGUL SYLLABLE IEUNG-YA BEE0 C57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK BEE1 C580 # HANGUL SYLLABLE IEUNG-YA-NIEUN BEE2 C584 # HANGUL SYLLABLE IEUNG-YA-RIEUL BEE3 C587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP BEE4 C58C # HANGUL SYLLABLE IEUNG-YA-MIEUM BEE5 C58D # HANGUL SYLLABLE IEUNG-YA-PIEUP BEE6 C58F # HANGUL SYLLABLE IEUNG-YA-SIOS BEE7 C591 # HANGUL SYLLABLE IEUNG-YA-IEUNG BEE8 C595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH BEE9 C597 # HANGUL SYLLABLE IEUNG-YA-HIEUH BEEA C598 # HANGUL SYLLABLE IEUNG-YAE BEEB C59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN BEEC C5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL BEED C5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP BEEE C5B4 # HANGUL SYLLABLE IEUNG-EO BEEF C5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK BEF0 C5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN BEF1 C5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC BEF2 C5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT BEF3 C5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL BEF4 C5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK BEF5 C5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM BEF6 C5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM BEF7 C5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP BEF8 C5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS BEF9 C5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS BEFA C5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS BEFB C5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG BEFC C5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC BEFD C5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH BEFE C5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH BF41 D49E # HANGUL SYLLABLE PHIEUPH-WEO-RIEULMIEUM BF42 D49F # HANGUL SYLLABLE PHIEUPH-WEO-RIEULPIEUP BF43 D4A0 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULSIOS BF44 D4A1 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULTHIEUTH BF45 D4A2 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULPHIEUPH BF46 D4A3 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULHIEUH BF47 D4A4 # HANGUL SYLLABLE PHIEUPH-WEO-MIEUM BF48 D4A5 # HANGUL SYLLABLE PHIEUPH-WEO-PIEUP BF49 D4A6 # HANGUL SYLLABLE PHIEUPH-WEO-PIEUPSIOS BF4A D4A7 # HANGUL SYLLABLE PHIEUPH-WEO-SIOS BF4B D4A8 # HANGUL SYLLABLE PHIEUPH-WEO-SSANGSIOS BF4C D4AA # HANGUL SYLLABLE PHIEUPH-WEO-CIEUC BF4D D4AB # HANGUL SYLLABLE PHIEUPH-WEO-CHIEUCH BF4E D4AC # HANGUL SYLLABLE PHIEUPH-WEO-KHIEUKH BF4F D4AD # HANGUL SYLLABLE PHIEUPH-WEO-THIEUTH BF50 D4AE # HANGUL SYLLABLE PHIEUPH-WEO-PHIEUPH BF51 D4AF # HANGUL SYLLABLE PHIEUPH-WEO-HIEUH BF52 D4B0 # HANGUL SYLLABLE PHIEUPH-WE BF53 D4B1 # HANGUL SYLLABLE PHIEUPH-WE-KIYEOK BF54 D4B2 # HANGUL SYLLABLE PHIEUPH-WE-SSANGKIYEOK BF55 D4B3 # HANGUL SYLLABLE PHIEUPH-WE-KIYEOKSIOS BF56 D4B4 # HANGUL SYLLABLE PHIEUPH-WE-NIEUN BF57 D4B5 # HANGUL SYLLABLE PHIEUPH-WE-NIEUNCIEUC BF58 D4B6 # HANGUL SYLLABLE PHIEUPH-WE-NIEUNHIEUH BF59 D4B7 # HANGUL SYLLABLE PHIEUPH-WE-TIKEUT BF5A D4B8 # HANGUL SYLLABLE PHIEUPH-WE-RIEUL BF61 D4B9 # HANGUL SYLLABLE PHIEUPH-WE-RIEULKIYEOK BF62 D4BA # HANGUL SYLLABLE PHIEUPH-WE-RIEULMIEUM BF63 D4BB # HANGUL SYLLABLE PHIEUPH-WE-RIEULPIEUP BF64 D4BC # HANGUL SYLLABLE PHIEUPH-WE-RIEULSIOS BF65 D4BD # HANGUL SYLLABLE PHIEUPH-WE-RIEULTHIEUTH BF66 D4BE # HANGUL SYLLABLE PHIEUPH-WE-RIEULPHIEUPH BF67 D4BF # HANGUL SYLLABLE PHIEUPH-WE-RIEULHIEUH BF68 D4C0 # HANGUL SYLLABLE PHIEUPH-WE-MIEUM BF69 D4C1 # HANGUL SYLLABLE PHIEUPH-WE-PIEUP BF6A D4C2 # HANGUL SYLLABLE PHIEUPH-WE-PIEUPSIOS BF6B D4C3 # HANGUL SYLLABLE PHIEUPH-WE-SIOS BF6C D4C4 # HANGUL SYLLABLE PHIEUPH-WE-SSANGSIOS BF6D D4C5 # HANGUL SYLLABLE PHIEUPH-WE-IEUNG BF6E D4C6 # HANGUL SYLLABLE PHIEUPH-WE-CIEUC BF6F D4C7 # HANGUL SYLLABLE PHIEUPH-WE-CHIEUCH BF70 D4C8 # HANGUL SYLLABLE PHIEUPH-WE-KHIEUKH BF71 D4C9 # HANGUL SYLLABLE PHIEUPH-WE-THIEUTH BF72 D4CA # HANGUL SYLLABLE PHIEUPH-WE-PHIEUPH BF73 D4CB # HANGUL SYLLABLE PHIEUPH-WE-HIEUH BF74 D4CD # HANGUL SYLLABLE PHIEUPH-WI-KIYEOK BF75 D4CE # HANGUL SYLLABLE PHIEUPH-WI-SSANGKIYEOK BF76 D4CF # HANGUL SYLLABLE PHIEUPH-WI-KIYEOKSIOS BF77 D4D1 # HANGUL SYLLABLE PHIEUPH-WI-NIEUNCIEUC BF78 D4D2 # HANGUL SYLLABLE PHIEUPH-WI-NIEUNHIEUH BF79 D4D3 # HANGUL SYLLABLE PHIEUPH-WI-TIKEUT BF7A D4D5 # HANGUL SYLLABLE PHIEUPH-WI-RIEULKIYEOK BF81 D4D6 # HANGUL SYLLABLE PHIEUPH-WI-RIEULMIEUM BF82 D4D7 # HANGUL SYLLABLE PHIEUPH-WI-RIEULPIEUP BF83 D4D8 # HANGUL SYLLABLE PHIEUPH-WI-RIEULSIOS BF84 D4D9 # HANGUL SYLLABLE PHIEUPH-WI-RIEULTHIEUTH BF85 D4DA # HANGUL SYLLABLE PHIEUPH-WI-RIEULPHIEUPH BF86 D4DB # HANGUL SYLLABLE PHIEUPH-WI-RIEULHIEUH BF87 D4DD # HANGUL SYLLABLE PHIEUPH-WI-PIEUP BF88 D4DE # HANGUL SYLLABLE PHIEUPH-WI-PIEUPSIOS BF89 D4E0 # HANGUL SYLLABLE PHIEUPH-WI-SSANGSIOS BF8A D4E1 # HANGUL SYLLABLE PHIEUPH-WI-IEUNG BF8B D4E2 # HANGUL SYLLABLE PHIEUPH-WI-CIEUC BF8C D4E3 # HANGUL SYLLABLE PHIEUPH-WI-CHIEUCH BF8D D4E4 # HANGUL SYLLABLE PHIEUPH-WI-KHIEUKH BF8E D4E5 # HANGUL SYLLABLE PHIEUPH-WI-THIEUTH BF8F D4E6 # HANGUL SYLLABLE PHIEUPH-WI-PHIEUPH BF90 D4E7 # HANGUL SYLLABLE PHIEUPH-WI-HIEUH BF91 D4E9 # HANGUL SYLLABLE PHIEUPH-YU-KIYEOK BF92 D4EA # HANGUL SYLLABLE PHIEUPH-YU-SSANGKIYEOK BF93 D4EB # HANGUL SYLLABLE PHIEUPH-YU-KIYEOKSIOS BF94 D4ED # HANGUL SYLLABLE PHIEUPH-YU-NIEUNCIEUC BF95 D4EE # HANGUL SYLLABLE PHIEUPH-YU-NIEUNHIEUH BF96 D4EF # HANGUL SYLLABLE PHIEUPH-YU-TIKEUT BF97 D4F1 # HANGUL SYLLABLE PHIEUPH-YU-RIEULKIYEOK BF98 D4F2 # HANGUL SYLLABLE PHIEUPH-YU-RIEULMIEUM BF99 D4F3 # HANGUL SYLLABLE PHIEUPH-YU-RIEULPIEUP BF9A D4F4 # HANGUL SYLLABLE PHIEUPH-YU-RIEULSIOS BF9B D4F5 # HANGUL SYLLABLE PHIEUPH-YU-RIEULTHIEUTH BF9C D4F6 # HANGUL SYLLABLE PHIEUPH-YU-RIEULPHIEUPH BF9D D4F7 # HANGUL SYLLABLE PHIEUPH-YU-RIEULHIEUH BF9E D4F9 # HANGUL SYLLABLE PHIEUPH-YU-PIEUP BF9F D4FA # HANGUL SYLLABLE PHIEUPH-YU-PIEUPSIOS BFA0 D4FC # HANGUL SYLLABLE PHIEUPH-YU-SSANGSIOS BFA1 C5D0 # HANGUL SYLLABLE IEUNG-E BFA2 C5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK BFA3 C5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN BFA4 C5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL BFA5 C5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM BFA6 C5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP BFA7 C5E3 # HANGUL SYLLABLE IEUNG-E-SIOS BFA8 C5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG BFA9 C5EC # HANGUL SYLLABLE IEUNG-YEO BFAA C5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK BFAB C5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK BFAC C5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN BFAD C5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL BFAE C5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM BFAF C5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP BFB0 C5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM BFB1 C5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP BFB2 C5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS BFB3 C5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS BFB4 C600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS BFB5 C601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG BFB6 C605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH BFB7 C606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH BFB8 C607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH BFB9 C608 # HANGUL SYLLABLE IEUNG-YE BFBA C60C # HANGUL SYLLABLE IEUNG-YE-NIEUN BFBB C610 # HANGUL SYLLABLE IEUNG-YE-RIEUL BFBC C618 # HANGUL SYLLABLE IEUNG-YE-MIEUM BFBD C619 # HANGUL SYLLABLE IEUNG-YE-PIEUP BFBE C61B # HANGUL SYLLABLE IEUNG-YE-SIOS BFBF C61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS BFC0 C624 # HANGUL SYLLABLE IEUNG-O BFC1 C625 # HANGUL SYLLABLE IEUNG-O-KIYEOK BFC2 C628 # HANGUL SYLLABLE IEUNG-O-NIEUN BFC3 C62C # HANGUL SYLLABLE IEUNG-O-RIEUL BFC4 C62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK BFC5 C62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM BFC6 C630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS BFC7 C633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH BFC8 C634 # HANGUL SYLLABLE IEUNG-O-MIEUM BFC9 C635 # HANGUL SYLLABLE IEUNG-O-PIEUP BFCA C637 # HANGUL SYLLABLE IEUNG-O-SIOS BFCB C639 # HANGUL SYLLABLE IEUNG-O-IEUNG BFCC C63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH BFCD C640 # HANGUL SYLLABLE IEUNG-WA BFCE C641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK BFCF C644 # HANGUL SYLLABLE IEUNG-WA-NIEUN BFD0 C648 # HANGUL SYLLABLE IEUNG-WA-RIEUL BFD1 C650 # HANGUL SYLLABLE IEUNG-WA-MIEUM BFD2 C651 # HANGUL SYLLABLE IEUNG-WA-PIEUP BFD3 C653 # HANGUL SYLLABLE IEUNG-WA-SIOS BFD4 C654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS BFD5 C655 # HANGUL SYLLABLE IEUNG-WA-IEUNG BFD6 C65C # HANGUL SYLLABLE IEUNG-WAE BFD7 C65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK BFD8 C660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN BFD9 C66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM BFDA C66F # HANGUL SYLLABLE IEUNG-WAE-SIOS BFDB C671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG BFDC C678 # HANGUL SYLLABLE IEUNG-OE BFDD C679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK BFDE C67C # HANGUL SYLLABLE IEUNG-OE-NIEUN BFDF C680 # HANGUL SYLLABLE IEUNG-OE-RIEUL BFE0 C688 # HANGUL SYLLABLE IEUNG-OE-MIEUM BFE1 C689 # HANGUL SYLLABLE IEUNG-OE-PIEUP BFE2 C68B # HANGUL SYLLABLE IEUNG-OE-SIOS BFE3 C68D # HANGUL SYLLABLE IEUNG-OE-IEUNG BFE4 C694 # HANGUL SYLLABLE IEUNG-YO BFE5 C695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK BFE6 C698 # HANGUL SYLLABLE IEUNG-YO-NIEUN BFE7 C69C # HANGUL SYLLABLE IEUNG-YO-RIEUL BFE8 C6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM BFE9 C6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP BFEA C6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS BFEB C6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG BFEC C6B0 # HANGUL SYLLABLE IEUNG-U BFED C6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK BFEE C6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN BFEF C6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL BFF0 C6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK BFF1 C6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM BFF2 C6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM BFF3 C6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP BFF4 C6C3 # HANGUL SYLLABLE IEUNG-U-SIOS BFF5 C6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG BFF6 C6CC # HANGUL SYLLABLE IEUNG-WEO BFF7 C6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK BFF8 C6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN BFF9 C6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL BFFA C6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM BFFB C6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP BFFC C6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS BFFD C6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG BFFE C6E8 # HANGUL SYLLABLE IEUNG-WE C041 D4FE # HANGUL SYLLABLE PHIEUPH-YU-CIEUC C042 D4FF # HANGUL SYLLABLE PHIEUPH-YU-CHIEUCH C043 D500 # HANGUL SYLLABLE PHIEUPH-YU-KHIEUKH C044 D501 # HANGUL SYLLABLE PHIEUPH-YU-THIEUTH C045 D502 # HANGUL SYLLABLE PHIEUPH-YU-PHIEUPH C046 D503 # HANGUL SYLLABLE PHIEUPH-YU-HIEUH C047 D505 # HANGUL SYLLABLE PHIEUPH-EU-KIYEOK C048 D506 # HANGUL SYLLABLE PHIEUPH-EU-SSANGKIYEOK C049 D507 # HANGUL SYLLABLE PHIEUPH-EU-KIYEOKSIOS C04A D509 # HANGUL SYLLABLE PHIEUPH-EU-NIEUNCIEUC C04B D50A # HANGUL SYLLABLE PHIEUPH-EU-NIEUNHIEUH C04C D50B # HANGUL SYLLABLE PHIEUPH-EU-TIKEUT C04D D50D # HANGUL SYLLABLE PHIEUPH-EU-RIEULKIYEOK C04E D50E # HANGUL SYLLABLE PHIEUPH-EU-RIEULMIEUM C04F D50F # HANGUL SYLLABLE PHIEUPH-EU-RIEULPIEUP C050 D510 # HANGUL SYLLABLE PHIEUPH-EU-RIEULSIOS C051 D511 # HANGUL SYLLABLE PHIEUPH-EU-RIEULTHIEUTH C052 D512 # HANGUL SYLLABLE PHIEUPH-EU-RIEULPHIEUPH C053 D513 # HANGUL SYLLABLE PHIEUPH-EU-RIEULHIEUH C054 D516 # HANGUL SYLLABLE PHIEUPH-EU-PIEUPSIOS C055 D518 # HANGUL SYLLABLE PHIEUPH-EU-SSANGSIOS C056 D519 # HANGUL SYLLABLE PHIEUPH-EU-IEUNG C057 D51A # HANGUL SYLLABLE PHIEUPH-EU-CIEUC C058 D51B # HANGUL SYLLABLE PHIEUPH-EU-CHIEUCH C059 D51C # HANGUL SYLLABLE PHIEUPH-EU-KHIEUKH C05A D51D # HANGUL SYLLABLE PHIEUPH-EU-THIEUTH C061 D51E # HANGUL SYLLABLE PHIEUPH-EU-PHIEUPH C062 D51F # HANGUL SYLLABLE PHIEUPH-EU-HIEUH C063 D520 # HANGUL SYLLABLE PHIEUPH-YI C064 D521 # HANGUL SYLLABLE PHIEUPH-YI-KIYEOK C065 D522 # HANGUL SYLLABLE PHIEUPH-YI-SSANGKIYEOK C066 D523 # HANGUL SYLLABLE PHIEUPH-YI-KIYEOKSIOS C067 D524 # HANGUL SYLLABLE PHIEUPH-YI-NIEUN C068 D525 # HANGUL SYLLABLE PHIEUPH-YI-NIEUNCIEUC C069 D526 # HANGUL SYLLABLE PHIEUPH-YI-NIEUNHIEUH C06A D527 # HANGUL SYLLABLE PHIEUPH-YI-TIKEUT C06B D528 # HANGUL SYLLABLE PHIEUPH-YI-RIEUL C06C D529 # HANGUL SYLLABLE PHIEUPH-YI-RIEULKIYEOK C06D D52A # HANGUL SYLLABLE PHIEUPH-YI-RIEULMIEUM C06E D52B # HANGUL SYLLABLE PHIEUPH-YI-RIEULPIEUP C06F D52C # HANGUL SYLLABLE PHIEUPH-YI-RIEULSIOS C070 D52D # HANGUL SYLLABLE PHIEUPH-YI-RIEULTHIEUTH C071 D52E # HANGUL SYLLABLE PHIEUPH-YI-RIEULPHIEUPH C072 D52F # HANGUL SYLLABLE PHIEUPH-YI-RIEULHIEUH C073 D530 # HANGUL SYLLABLE PHIEUPH-YI-MIEUM C074 D531 # HANGUL SYLLABLE PHIEUPH-YI-PIEUP C075 D532 # HANGUL SYLLABLE PHIEUPH-YI-PIEUPSIOS C076 D533 # HANGUL SYLLABLE PHIEUPH-YI-SIOS C077 D534 # HANGUL SYLLABLE PHIEUPH-YI-SSANGSIOS C078 D535 # HANGUL SYLLABLE PHIEUPH-YI-IEUNG C079 D536 # HANGUL SYLLABLE PHIEUPH-YI-CIEUC C07A D537 # HANGUL SYLLABLE PHIEUPH-YI-CHIEUCH C081 D538 # HANGUL SYLLABLE PHIEUPH-YI-KHIEUKH C082 D539 # HANGUL SYLLABLE PHIEUPH-YI-THIEUTH C083 D53A # HANGUL SYLLABLE PHIEUPH-YI-PHIEUPH C084 D53B # HANGUL SYLLABLE PHIEUPH-YI-HIEUH C085 D53E # HANGUL SYLLABLE PHIEUPH-I-SSANGKIYEOK C086 D53F # HANGUL SYLLABLE PHIEUPH-I-KIYEOKSIOS C087 D541 # HANGUL SYLLABLE PHIEUPH-I-NIEUNCIEUC C088 D542 # HANGUL SYLLABLE PHIEUPH-I-NIEUNHIEUH C089 D543 # HANGUL SYLLABLE PHIEUPH-I-TIKEUT C08A D545 # HANGUL SYLLABLE PHIEUPH-I-RIEULKIYEOK C08B D546 # HANGUL SYLLABLE PHIEUPH-I-RIEULMIEUM C08C D547 # HANGUL SYLLABLE PHIEUPH-I-RIEULPIEUP C08D D548 # HANGUL SYLLABLE PHIEUPH-I-RIEULSIOS C08E D549 # HANGUL SYLLABLE PHIEUPH-I-RIEULTHIEUTH C08F D54A # HANGUL SYLLABLE PHIEUPH-I-RIEULPHIEUPH C090 D54B # HANGUL SYLLABLE PHIEUPH-I-RIEULHIEUH C091 D54E # HANGUL SYLLABLE PHIEUPH-I-PIEUPSIOS C092 D550 # HANGUL SYLLABLE PHIEUPH-I-SSANGSIOS C093 D552 # HANGUL SYLLABLE PHIEUPH-I-CIEUC C094 D553 # HANGUL SYLLABLE PHIEUPH-I-CHIEUCH C095 D554 # HANGUL SYLLABLE PHIEUPH-I-KHIEUKH C096 D555 # HANGUL SYLLABLE PHIEUPH-I-THIEUTH C097 D556 # HANGUL SYLLABLE PHIEUPH-I-PHIEUPH C098 D557 # HANGUL SYLLABLE PHIEUPH-I-HIEUH C099 D55A # HANGUL SYLLABLE HIEUH-A-SSANGKIYEOK C09A D55B # HANGUL SYLLABLE HIEUH-A-KIYEOKSIOS C09B D55D # HANGUL SYLLABLE HIEUH-A-NIEUNCIEUC C09C D55E # HANGUL SYLLABLE HIEUH-A-NIEUNHIEUH C09D D55F # HANGUL SYLLABLE HIEUH-A-TIKEUT C09E D561 # HANGUL SYLLABLE HIEUH-A-RIEULKIYEOK C09F D562 # HANGUL SYLLABLE HIEUH-A-RIEULMIEUM C0A0 D563 # HANGUL SYLLABLE HIEUH-A-RIEULPIEUP C0A1 C6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK C0A2 C6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN C0A3 C6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL C0A4 C6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM C0A5 C6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP C0A6 C6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG C0A7 C704 # HANGUL SYLLABLE IEUNG-WI C0A8 C705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK C0A9 C708 # HANGUL SYLLABLE IEUNG-WI-NIEUN C0AA C70C # HANGUL SYLLABLE IEUNG-WI-RIEUL C0AB C714 # HANGUL SYLLABLE IEUNG-WI-MIEUM C0AC C715 # HANGUL SYLLABLE IEUNG-WI-PIEUP C0AD C717 # HANGUL SYLLABLE IEUNG-WI-SIOS C0AE C719 # HANGUL SYLLABLE IEUNG-WI-IEUNG C0AF C720 # HANGUL SYLLABLE IEUNG-YU C0B0 C721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK C0B1 C724 # HANGUL SYLLABLE IEUNG-YU-NIEUN C0B2 C728 # HANGUL SYLLABLE IEUNG-YU-RIEUL C0B3 C730 # HANGUL SYLLABLE IEUNG-YU-MIEUM C0B4 C731 # HANGUL SYLLABLE IEUNG-YU-PIEUP C0B5 C733 # HANGUL SYLLABLE IEUNG-YU-SIOS C0B6 C735 # HANGUL SYLLABLE IEUNG-YU-IEUNG C0B7 C737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH C0B8 C73C # HANGUL SYLLABLE IEUNG-EU C0B9 C73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK C0BA C740 # HANGUL SYLLABLE IEUNG-EU-NIEUN C0BB C744 # HANGUL SYLLABLE IEUNG-EU-RIEUL C0BC C74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH C0BD C74C # HANGUL SYLLABLE IEUNG-EU-MIEUM C0BE C74D # HANGUL SYLLABLE IEUNG-EU-PIEUP C0BF C74F # HANGUL SYLLABLE IEUNG-EU-SIOS C0C0 C751 # HANGUL SYLLABLE IEUNG-EU-IEUNG C0C1 C752 # HANGUL SYLLABLE IEUNG-EU-CIEUC C0C2 C753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH C0C3 C754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH C0C4 C755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH C0C5 C756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH C0C6 C757 # HANGUL SYLLABLE IEUNG-EU-HIEUH C0C7 C758 # HANGUL SYLLABLE IEUNG-YI C0C8 C75C # HANGUL SYLLABLE IEUNG-YI-NIEUN C0C9 C760 # HANGUL SYLLABLE IEUNG-YI-RIEUL C0CA C768 # HANGUL SYLLABLE IEUNG-YI-MIEUM C0CB C76B # HANGUL SYLLABLE IEUNG-YI-SIOS C0CC C774 # HANGUL SYLLABLE IEUNG-I C0CD C775 # HANGUL SYLLABLE IEUNG-I-KIYEOK C0CE C778 # HANGUL SYLLABLE IEUNG-I-NIEUN C0CF C77C # HANGUL SYLLABLE IEUNG-I-RIEUL C0D0 C77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK C0D1 C77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM C0D2 C783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH C0D3 C784 # HANGUL SYLLABLE IEUNG-I-MIEUM C0D4 C785 # HANGUL SYLLABLE IEUNG-I-PIEUP C0D5 C787 # HANGUL SYLLABLE IEUNG-I-SIOS C0D6 C788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS C0D7 C789 # HANGUL SYLLABLE IEUNG-I-IEUNG C0D8 C78A # HANGUL SYLLABLE IEUNG-I-CIEUC C0D9 C78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH C0DA C790 # HANGUL SYLLABLE CIEUC-A C0DB C791 # HANGUL SYLLABLE CIEUC-A-KIYEOK C0DC C794 # HANGUL SYLLABLE CIEUC-A-NIEUN C0DD C796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH C0DE C797 # HANGUL SYLLABLE CIEUC-A-TIKEUT C0DF C798 # HANGUL SYLLABLE CIEUC-A-RIEUL C0E0 C79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM C0E1 C7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM C0E2 C7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP C0E3 C7A3 # HANGUL SYLLABLE CIEUC-A-SIOS C0E4 C7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS C0E5 C7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG C0E6 C7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC C0E7 C7AC # HANGUL SYLLABLE CIEUC-AE C0E8 C7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK C0E9 C7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN C0EA C7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL C0EB C7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM C0EC C7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP C0ED C7BF # HANGUL SYLLABLE CIEUC-AE-SIOS C0EE C7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS C0EF C7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG C0F0 C7C8 # HANGUL SYLLABLE CIEUC-YA C0F1 C7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK C0F2 C7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN C0F3 C7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH C0F4 C7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL C0F5 C7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM C0F6 C7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG C0F7 C7E4 # HANGUL SYLLABLE CIEUC-YAE C0F8 C7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN C0F9 C7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL C0FA C800 # HANGUL SYLLABLE CIEUC-EO C0FB C801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK C0FC C804 # HANGUL SYLLABLE CIEUC-EO-NIEUN C0FD C808 # HANGUL SYLLABLE CIEUC-EO-RIEUL C0FE C80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM C141 D564 # HANGUL SYLLABLE HIEUH-A-RIEULSIOS C142 D566 # HANGUL SYLLABLE HIEUH-A-RIEULPHIEUPH C143 D567 # HANGUL SYLLABLE HIEUH-A-RIEULHIEUH C144 D56A # HANGUL SYLLABLE HIEUH-A-PIEUPSIOS C145 D56C # HANGUL SYLLABLE HIEUH-A-SSANGSIOS C146 D56E # HANGUL SYLLABLE HIEUH-A-CIEUC C147 D56F # HANGUL SYLLABLE HIEUH-A-CHIEUCH C148 D570 # HANGUL SYLLABLE HIEUH-A-KHIEUKH C149 D571 # HANGUL SYLLABLE HIEUH-A-THIEUTH C14A D572 # HANGUL SYLLABLE HIEUH-A-PHIEUPH C14B D573 # HANGUL SYLLABLE HIEUH-A-HIEUH C14C D576 # HANGUL SYLLABLE HIEUH-AE-SSANGKIYEOK C14D D577 # HANGUL SYLLABLE HIEUH-AE-KIYEOKSIOS C14E D579 # HANGUL SYLLABLE HIEUH-AE-NIEUNCIEUC C14F D57A # HANGUL SYLLABLE HIEUH-AE-NIEUNHIEUH C150 D57B # HANGUL SYLLABLE HIEUH-AE-TIKEUT C151 D57D # HANGUL SYLLABLE HIEUH-AE-RIEULKIYEOK C152 D57E # HANGUL SYLLABLE HIEUH-AE-RIEULMIEUM C153 D57F # HANGUL SYLLABLE HIEUH-AE-RIEULPIEUP C154 D580 # HANGUL SYLLABLE HIEUH-AE-RIEULSIOS C155 D581 # HANGUL SYLLABLE HIEUH-AE-RIEULTHIEUTH C156 D582 # HANGUL SYLLABLE HIEUH-AE-RIEULPHIEUPH C157 D583 # HANGUL SYLLABLE HIEUH-AE-RIEULHIEUH C158 D586 # HANGUL SYLLABLE HIEUH-AE-PIEUPSIOS C159 D58A # HANGUL SYLLABLE HIEUH-AE-CIEUC C15A D58B # HANGUL SYLLABLE HIEUH-AE-CHIEUCH C161 D58C # HANGUL SYLLABLE HIEUH-AE-KHIEUKH C162 D58D # HANGUL SYLLABLE HIEUH-AE-THIEUTH C163 D58E # HANGUL SYLLABLE HIEUH-AE-PHIEUPH C164 D58F # HANGUL SYLLABLE HIEUH-AE-HIEUH C165 D591 # HANGUL SYLLABLE HIEUH-YA-KIYEOK C166 D592 # HANGUL SYLLABLE HIEUH-YA-SSANGKIYEOK C167 D593 # HANGUL SYLLABLE HIEUH-YA-KIYEOKSIOS C168 D594 # HANGUL SYLLABLE HIEUH-YA-NIEUN C169 D595 # HANGUL SYLLABLE HIEUH-YA-NIEUNCIEUC C16A D596 # HANGUL SYLLABLE HIEUH-YA-NIEUNHIEUH C16B D597 # HANGUL SYLLABLE HIEUH-YA-TIKEUT C16C D598 # HANGUL SYLLABLE HIEUH-YA-RIEUL C16D D599 # HANGUL SYLLABLE HIEUH-YA-RIEULKIYEOK C16E D59A # HANGUL SYLLABLE HIEUH-YA-RIEULMIEUM C16F D59B # HANGUL SYLLABLE HIEUH-YA-RIEULPIEUP C170 D59C # HANGUL SYLLABLE HIEUH-YA-RIEULSIOS C171 D59D # HANGUL SYLLABLE HIEUH-YA-RIEULTHIEUTH C172 D59E # HANGUL SYLLABLE HIEUH-YA-RIEULPHIEUPH C173 D59F # HANGUL SYLLABLE HIEUH-YA-RIEULHIEUH C174 D5A0 # HANGUL SYLLABLE HIEUH-YA-MIEUM C175 D5A1 # HANGUL SYLLABLE HIEUH-YA-PIEUP C176 D5A2 # HANGUL SYLLABLE HIEUH-YA-PIEUPSIOS C177 D5A3 # HANGUL SYLLABLE HIEUH-YA-SIOS C178 D5A4 # HANGUL SYLLABLE HIEUH-YA-SSANGSIOS C179 D5A6 # HANGUL SYLLABLE HIEUH-YA-CIEUC C17A D5A7 # HANGUL SYLLABLE HIEUH-YA-CHIEUCH C181 D5A8 # HANGUL SYLLABLE HIEUH-YA-KHIEUKH C182 D5A9 # HANGUL SYLLABLE HIEUH-YA-THIEUTH C183 D5AA # HANGUL SYLLABLE HIEUH-YA-PHIEUPH C184 D5AB # HANGUL SYLLABLE HIEUH-YA-HIEUH C185 D5AC # HANGUL SYLLABLE HIEUH-YAE C186 D5AD # HANGUL SYLLABLE HIEUH-YAE-KIYEOK C187 D5AE # HANGUL SYLLABLE HIEUH-YAE-SSANGKIYEOK C188 D5AF # HANGUL SYLLABLE HIEUH-YAE-KIYEOKSIOS C189 D5B0 # HANGUL SYLLABLE HIEUH-YAE-NIEUN C18A D5B1 # HANGUL SYLLABLE HIEUH-YAE-NIEUNCIEUC C18B D5B2 # HANGUL SYLLABLE HIEUH-YAE-NIEUNHIEUH C18C D5B3 # HANGUL SYLLABLE HIEUH-YAE-TIKEUT C18D D5B4 # HANGUL SYLLABLE HIEUH-YAE-RIEUL C18E D5B5 # HANGUL SYLLABLE HIEUH-YAE-RIEULKIYEOK C18F D5B6 # HANGUL SYLLABLE HIEUH-YAE-RIEULMIEUM C190 D5B7 # HANGUL SYLLABLE HIEUH-YAE-RIEULPIEUP C191 D5B8 # HANGUL SYLLABLE HIEUH-YAE-RIEULSIOS C192 D5B9 # HANGUL SYLLABLE HIEUH-YAE-RIEULTHIEUTH C193 D5BA # HANGUL SYLLABLE HIEUH-YAE-RIEULPHIEUPH C194 D5BB # HANGUL SYLLABLE HIEUH-YAE-RIEULHIEUH C195 D5BC # HANGUL SYLLABLE HIEUH-YAE-MIEUM C196 D5BD # HANGUL SYLLABLE HIEUH-YAE-PIEUP C197 D5BE # HANGUL SYLLABLE HIEUH-YAE-PIEUPSIOS C198 D5BF # HANGUL SYLLABLE HIEUH-YAE-SIOS C199 D5C0 # HANGUL SYLLABLE HIEUH-YAE-SSANGSIOS C19A D5C1 # HANGUL SYLLABLE HIEUH-YAE-IEUNG C19B D5C2 # HANGUL SYLLABLE HIEUH-YAE-CIEUC C19C D5C3 # HANGUL SYLLABLE HIEUH-YAE-CHIEUCH C19D D5C4 # HANGUL SYLLABLE HIEUH-YAE-KHIEUKH C19E D5C5 # HANGUL SYLLABLE HIEUH-YAE-THIEUTH C19F D5C6 # HANGUL SYLLABLE HIEUH-YAE-PHIEUPH C1A0 D5C7 # HANGUL SYLLABLE HIEUH-YAE-HIEUH C1A1 C810 # HANGUL SYLLABLE CIEUC-EO-MIEUM C1A2 C811 # HANGUL SYLLABLE CIEUC-EO-PIEUP C1A3 C813 # HANGUL SYLLABLE CIEUC-EO-SIOS C1A4 C815 # HANGUL SYLLABLE CIEUC-EO-IEUNG C1A5 C816 # HANGUL SYLLABLE CIEUC-EO-CIEUC C1A6 C81C # HANGUL SYLLABLE CIEUC-E C1A7 C81D # HANGUL SYLLABLE CIEUC-E-KIYEOK C1A8 C820 # HANGUL SYLLABLE CIEUC-E-NIEUN C1A9 C824 # HANGUL SYLLABLE CIEUC-E-RIEUL C1AA C82C # HANGUL SYLLABLE CIEUC-E-MIEUM C1AB C82D # HANGUL SYLLABLE CIEUC-E-PIEUP C1AC C82F # HANGUL SYLLABLE CIEUC-E-SIOS C1AD C831 # HANGUL SYLLABLE CIEUC-E-IEUNG C1AE C838 # HANGUL SYLLABLE CIEUC-YEO C1AF C83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN C1B0 C840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL C1B1 C848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM C1B2 C849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP C1B3 C84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS C1B4 C84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG C1B5 C854 # HANGUL SYLLABLE CIEUC-YE C1B6 C870 # HANGUL SYLLABLE CIEUC-O C1B7 C871 # HANGUL SYLLABLE CIEUC-O-KIYEOK C1B8 C874 # HANGUL SYLLABLE CIEUC-O-NIEUN C1B9 C878 # HANGUL SYLLABLE CIEUC-O-RIEUL C1BA C87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM C1BB C880 # HANGUL SYLLABLE CIEUC-O-MIEUM C1BC C881 # HANGUL SYLLABLE CIEUC-O-PIEUP C1BD C883 # HANGUL SYLLABLE CIEUC-O-SIOS C1BE C885 # HANGUL SYLLABLE CIEUC-O-IEUNG C1BF C886 # HANGUL SYLLABLE CIEUC-O-CIEUC C1C0 C887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH C1C1 C88B # HANGUL SYLLABLE CIEUC-O-HIEUH C1C2 C88C # HANGUL SYLLABLE CIEUC-WA C1C3 C88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK C1C4 C894 # HANGUL SYLLABLE CIEUC-WA-RIEUL C1C5 C89D # HANGUL SYLLABLE CIEUC-WA-PIEUP C1C6 C89F # HANGUL SYLLABLE CIEUC-WA-SIOS C1C7 C8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG C1C8 C8A8 # HANGUL SYLLABLE CIEUC-WAE C1C9 C8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS C1CA C8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG C1CB C8C4 # HANGUL SYLLABLE CIEUC-OE C1CC C8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN C1CD C8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL C1CE C8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM C1CF C8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP C1D0 C8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS C1D1 C8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG C1D2 C8E0 # HANGUL SYLLABLE CIEUC-YO C1D3 C8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK C1D4 C8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN C1D5 C8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG C1D6 C8FC # HANGUL SYLLABLE CIEUC-U C1D7 C8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK C1D8 C900 # HANGUL SYLLABLE CIEUC-U-NIEUN C1D9 C904 # HANGUL SYLLABLE CIEUC-U-RIEUL C1DA C905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK C1DB C906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM C1DC C90C # HANGUL SYLLABLE CIEUC-U-MIEUM C1DD C90D # HANGUL SYLLABLE CIEUC-U-PIEUP C1DE C90F # HANGUL SYLLABLE CIEUC-U-SIOS C1DF C911 # HANGUL SYLLABLE CIEUC-U-IEUNG C1E0 C918 # HANGUL SYLLABLE CIEUC-WEO C1E1 C92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS C1E2 C934 # HANGUL SYLLABLE CIEUC-WE C1E3 C950 # HANGUL SYLLABLE CIEUC-WI C1E4 C951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK C1E5 C954 # HANGUL SYLLABLE CIEUC-WI-NIEUN C1E6 C958 # HANGUL SYLLABLE CIEUC-WI-RIEUL C1E7 C960 # HANGUL SYLLABLE CIEUC-WI-MIEUM C1E8 C961 # HANGUL SYLLABLE CIEUC-WI-PIEUP C1E9 C963 # HANGUL SYLLABLE CIEUC-WI-SIOS C1EA C96C # HANGUL SYLLABLE CIEUC-YU C1EB C970 # HANGUL SYLLABLE CIEUC-YU-NIEUN C1EC C974 # HANGUL SYLLABLE CIEUC-YU-RIEUL C1ED C97C # HANGUL SYLLABLE CIEUC-YU-MIEUM C1EE C988 # HANGUL SYLLABLE CIEUC-EU C1EF C989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK C1F0 C98C # HANGUL SYLLABLE CIEUC-EU-NIEUN C1F1 C990 # HANGUL SYLLABLE CIEUC-EU-RIEUL C1F2 C998 # HANGUL SYLLABLE CIEUC-EU-MIEUM C1F3 C999 # HANGUL SYLLABLE CIEUC-EU-PIEUP C1F4 C99B # HANGUL SYLLABLE CIEUC-EU-SIOS C1F5 C99D # HANGUL SYLLABLE CIEUC-EU-IEUNG C1F6 C9C0 # HANGUL SYLLABLE CIEUC-I C1F7 C9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK C1F8 C9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN C1F9 C9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT C1FA C9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL C1FB C9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM C1FC C9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM C1FD C9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP C1FE C9D3 # HANGUL SYLLABLE CIEUC-I-SIOS C241 D5CA # HANGUL SYLLABLE HIEUH-EO-SSANGKIYEOK C242 D5CB # HANGUL SYLLABLE HIEUH-EO-KIYEOKSIOS C243 D5CD # HANGUL SYLLABLE HIEUH-EO-NIEUNCIEUC C244 D5CE # HANGUL SYLLABLE HIEUH-EO-NIEUNHIEUH C245 D5CF # HANGUL SYLLABLE HIEUH-EO-TIKEUT C246 D5D1 # HANGUL SYLLABLE HIEUH-EO-RIEULKIYEOK C247 D5D3 # HANGUL SYLLABLE HIEUH-EO-RIEULPIEUP C248 D5D4 # HANGUL SYLLABLE HIEUH-EO-RIEULSIOS C249 D5D5 # HANGUL SYLLABLE HIEUH-EO-RIEULTHIEUTH C24A D5D6 # HANGUL SYLLABLE HIEUH-EO-RIEULPHIEUPH C24B D5D7 # HANGUL SYLLABLE HIEUH-EO-RIEULHIEUH C24C D5DA # HANGUL SYLLABLE HIEUH-EO-PIEUPSIOS C24D D5DC # HANGUL SYLLABLE HIEUH-EO-SSANGSIOS C24E D5DE # HANGUL SYLLABLE HIEUH-EO-CIEUC C24F D5DF # HANGUL SYLLABLE HIEUH-EO-CHIEUCH C250 D5E0 # HANGUL SYLLABLE HIEUH-EO-KHIEUKH C251 D5E1 # HANGUL SYLLABLE HIEUH-EO-THIEUTH C252 D5E2 # HANGUL SYLLABLE HIEUH-EO-PHIEUPH C253 D5E3 # HANGUL SYLLABLE HIEUH-EO-HIEUH C254 D5E6 # HANGUL SYLLABLE HIEUH-E-SSANGKIYEOK C255 D5E7 # HANGUL SYLLABLE HIEUH-E-KIYEOKSIOS C256 D5E9 # HANGUL SYLLABLE HIEUH-E-NIEUNCIEUC C257 D5EA # HANGUL SYLLABLE HIEUH-E-NIEUNHIEUH C258 D5EB # HANGUL SYLLABLE HIEUH-E-TIKEUT C259 D5ED # HANGUL SYLLABLE HIEUH-E-RIEULKIYEOK C25A D5EE # HANGUL SYLLABLE HIEUH-E-RIEULMIEUM C261 D5EF # HANGUL SYLLABLE HIEUH-E-RIEULPIEUP C262 D5F0 # HANGUL SYLLABLE HIEUH-E-RIEULSIOS C263 D5F1 # HANGUL SYLLABLE HIEUH-E-RIEULTHIEUTH C264 D5F2 # HANGUL SYLLABLE HIEUH-E-RIEULPHIEUPH C265 D5F3 # HANGUL SYLLABLE HIEUH-E-RIEULHIEUH C266 D5F6 # HANGUL SYLLABLE HIEUH-E-PIEUPSIOS C267 D5F8 # HANGUL SYLLABLE HIEUH-E-SSANGSIOS C268 D5FA # HANGUL SYLLABLE HIEUH-E-CIEUC C269 D5FB # HANGUL SYLLABLE HIEUH-E-CHIEUCH C26A D5FC # HANGUL SYLLABLE HIEUH-E-KHIEUKH C26B D5FD # HANGUL SYLLABLE HIEUH-E-THIEUTH C26C D5FE # HANGUL SYLLABLE HIEUH-E-PHIEUPH C26D D5FF # HANGUL SYLLABLE HIEUH-E-HIEUH C26E D602 # HANGUL SYLLABLE HIEUH-YEO-SSANGKIYEOK C26F D603 # HANGUL SYLLABLE HIEUH-YEO-KIYEOKSIOS C270 D605 # HANGUL SYLLABLE HIEUH-YEO-NIEUNCIEUC C271 D606 # HANGUL SYLLABLE HIEUH-YEO-NIEUNHIEUH C272 D607 # HANGUL SYLLABLE HIEUH-YEO-TIKEUT C273 D609 # HANGUL SYLLABLE HIEUH-YEO-RIEULKIYEOK C274 D60A # HANGUL SYLLABLE HIEUH-YEO-RIEULMIEUM C275 D60B # HANGUL SYLLABLE HIEUH-YEO-RIEULPIEUP C276 D60C # HANGUL SYLLABLE HIEUH-YEO-RIEULSIOS C277 D60D # HANGUL SYLLABLE HIEUH-YEO-RIEULTHIEUTH C278 D60E # HANGUL SYLLABLE HIEUH-YEO-RIEULPHIEUPH C279 D60F # HANGUL SYLLABLE HIEUH-YEO-RIEULHIEUH C27A D612 # HANGUL SYLLABLE HIEUH-YEO-PIEUPSIOS C281 D616 # HANGUL SYLLABLE HIEUH-YEO-CIEUC C282 D617 # HANGUL SYLLABLE HIEUH-YEO-CHIEUCH C283 D618 # HANGUL SYLLABLE HIEUH-YEO-KHIEUKH C284 D619 # HANGUL SYLLABLE HIEUH-YEO-THIEUTH C285 D61A # HANGUL SYLLABLE HIEUH-YEO-PHIEUPH C286 D61B # HANGUL SYLLABLE HIEUH-YEO-HIEUH C287 D61D # HANGUL SYLLABLE HIEUH-YE-KIYEOK C288 D61E # HANGUL SYLLABLE HIEUH-YE-SSANGKIYEOK C289 D61F # HANGUL SYLLABLE HIEUH-YE-KIYEOKSIOS C28A D621 # HANGUL SYLLABLE HIEUH-YE-NIEUNCIEUC C28B D622 # HANGUL SYLLABLE HIEUH-YE-NIEUNHIEUH C28C D623 # HANGUL SYLLABLE HIEUH-YE-TIKEUT C28D D625 # HANGUL SYLLABLE HIEUH-YE-RIEULKIYEOK C28E D626 # HANGUL SYLLABLE HIEUH-YE-RIEULMIEUM C28F D627 # HANGUL SYLLABLE HIEUH-YE-RIEULPIEUP C290 D628 # HANGUL SYLLABLE HIEUH-YE-RIEULSIOS C291 D629 # HANGUL SYLLABLE HIEUH-YE-RIEULTHIEUTH C292 D62A # HANGUL SYLLABLE HIEUH-YE-RIEULPHIEUPH C293 D62B # HANGUL SYLLABLE HIEUH-YE-RIEULHIEUH C294 D62C # HANGUL SYLLABLE HIEUH-YE-MIEUM C295 D62E # HANGUL SYLLABLE HIEUH-YE-PIEUPSIOS C296 D62F # HANGUL SYLLABLE HIEUH-YE-SIOS C297 D630 # HANGUL SYLLABLE HIEUH-YE-SSANGSIOS C298 D631 # HANGUL SYLLABLE HIEUH-YE-IEUNG C299 D632 # HANGUL SYLLABLE HIEUH-YE-CIEUC C29A D633 # HANGUL SYLLABLE HIEUH-YE-CHIEUCH C29B D634 # HANGUL SYLLABLE HIEUH-YE-KHIEUKH C29C D635 # HANGUL SYLLABLE HIEUH-YE-THIEUTH C29D D636 # HANGUL SYLLABLE HIEUH-YE-PHIEUPH C29E D637 # HANGUL SYLLABLE HIEUH-YE-HIEUH C29F D63A # HANGUL SYLLABLE HIEUH-O-SSANGKIYEOK C2A0 D63B # HANGUL SYLLABLE HIEUH-O-KIYEOKSIOS C2A1 C9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG C2A2 C9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC C2A3 C9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH C2A4 C9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH C2A5 C9DC # HANGUL SYLLABLE SSANGCIEUC-A C2A6 C9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK C2A7 C9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN C2A8 C9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH C2A9 C9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL C2AA C9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP C2AB C9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM C2AC C9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP C2AD C9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS C2AE C9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS C2AF C9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG C2B0 C9F8 # HANGUL SYLLABLE SSANGCIEUC-AE C2B1 C9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK C2B2 C9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN C2B3 CA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL C2B4 CA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM C2B5 CA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP C2B6 CA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS C2B7 CA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS C2B8 CA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG C2B9 CA14 # HANGUL SYLLABLE SSANGCIEUC-YA C2BA CA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN C2BB CA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG C2BC CA4C # HANGUL SYLLABLE SSANGCIEUC-EO C2BD CA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK C2BE CA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN C2BF CA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL C2C0 CA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM C2C1 CA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP C2C2 CA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS C2C3 CA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS C2C4 CA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG C2C5 CA68 # HANGUL SYLLABLE SSANGCIEUC-E C2C6 CA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG C2C7 CA84 # HANGUL SYLLABLE SSANGCIEUC-YEO C2C8 CA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS C2C9 CABC # HANGUL SYLLABLE SSANGCIEUC-O C2CA CABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK C2CB CAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN C2CC CAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL C2CD CACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM C2CE CACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP C2CF CACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS C2D0 CAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG C2D1 CAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH C2D2 CAD8 # HANGUL SYLLABLE SSANGCIEUC-WA C2D3 CAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK C2D4 CAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL C2D5 CAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS C2D6 CAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE C2D7 CB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS C2D8 CB10 # HANGUL SYLLABLE SSANGCIEUC-OE C2D9 CB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN C2DA CB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL C2DB CB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM C2DC CB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP C2DD CB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG C2DE CB48 # HANGUL SYLLABLE SSANGCIEUC-U C2DF CB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK C2E0 CB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN C2E1 CB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL C2E2 CB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM C2E3 CB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP C2E4 CB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG C2E5 CB64 # HANGUL SYLLABLE SSANGCIEUC-WEO C2E6 CB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS C2E7 CB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG C2E8 CB9C # HANGUL SYLLABLE SSANGCIEUC-WI C2E9 CBB8 # HANGUL SYLLABLE SSANGCIEUC-YU C2EA CBD4 # HANGUL SYLLABLE SSANGCIEUC-EU C2EB CBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM C2EC CBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS C2ED CBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG C2EE CC0C # HANGUL SYLLABLE SSANGCIEUC-I C2EF CC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK C2F0 CC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN C2F1 CC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL C2F2 CC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM C2F3 CC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP C2F4 CC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG C2F5 CC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC C2F6 CC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH C2F7 CC28 # HANGUL SYLLABLE CHIEUCH-A C2F8 CC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK C2F9 CC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN C2FA CC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH C2FB CC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL C2FC CC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM C2FD CC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP C2FE CC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS C341 D63D # HANGUL SYLLABLE HIEUH-O-NIEUNCIEUC C342 D63E # HANGUL SYLLABLE HIEUH-O-NIEUNHIEUH C343 D63F # HANGUL SYLLABLE HIEUH-O-TIKEUT C344 D641 # HANGUL SYLLABLE HIEUH-O-RIEULKIYEOK C345 D642 # HANGUL SYLLABLE HIEUH-O-RIEULMIEUM C346 D643 # HANGUL SYLLABLE HIEUH-O-RIEULPIEUP C347 D644 # HANGUL SYLLABLE HIEUH-O-RIEULSIOS C348 D646 # HANGUL SYLLABLE HIEUH-O-RIEULPHIEUPH C349 D647 # HANGUL SYLLABLE HIEUH-O-RIEULHIEUH C34A D64A # HANGUL SYLLABLE HIEUH-O-PIEUPSIOS C34B D64C # HANGUL SYLLABLE HIEUH-O-SSANGSIOS C34C D64E # HANGUL SYLLABLE HIEUH-O-CIEUC C34D D64F # HANGUL SYLLABLE HIEUH-O-CHIEUCH C34E D650 # HANGUL SYLLABLE HIEUH-O-KHIEUKH C34F D652 # HANGUL SYLLABLE HIEUH-O-PHIEUPH C350 D653 # HANGUL SYLLABLE HIEUH-O-HIEUH C351 D656 # HANGUL SYLLABLE HIEUH-WA-SSANGKIYEOK C352 D657 # HANGUL SYLLABLE HIEUH-WA-KIYEOKSIOS C353 D659 # HANGUL SYLLABLE HIEUH-WA-NIEUNCIEUC C354 D65A # HANGUL SYLLABLE HIEUH-WA-NIEUNHIEUH C355 D65B # HANGUL SYLLABLE HIEUH-WA-TIKEUT C356 D65D # HANGUL SYLLABLE HIEUH-WA-RIEULKIYEOK C357 D65E # HANGUL SYLLABLE HIEUH-WA-RIEULMIEUM C358 D65F # HANGUL SYLLABLE HIEUH-WA-RIEULPIEUP C359 D660 # HANGUL SYLLABLE HIEUH-WA-RIEULSIOS C35A D661 # HANGUL SYLLABLE HIEUH-WA-RIEULTHIEUTH C361 D662 # HANGUL SYLLABLE HIEUH-WA-RIEULPHIEUPH C362 D663 # HANGUL SYLLABLE HIEUH-WA-RIEULHIEUH C363 D664 # HANGUL SYLLABLE HIEUH-WA-MIEUM C364 D665 # HANGUL SYLLABLE HIEUH-WA-PIEUP C365 D666 # HANGUL SYLLABLE HIEUH-WA-PIEUPSIOS C366 D668 # HANGUL SYLLABLE HIEUH-WA-SSANGSIOS C367 D66A # HANGUL SYLLABLE HIEUH-WA-CIEUC C368 D66B # HANGUL SYLLABLE HIEUH-WA-CHIEUCH C369 D66C # HANGUL SYLLABLE HIEUH-WA-KHIEUKH C36A D66D # HANGUL SYLLABLE HIEUH-WA-THIEUTH C36B D66E # HANGUL SYLLABLE HIEUH-WA-PHIEUPH C36C D66F # HANGUL SYLLABLE HIEUH-WA-HIEUH C36D D672 # HANGUL SYLLABLE HIEUH-WAE-SSANGKIYEOK C36E D673 # HANGUL SYLLABLE HIEUH-WAE-KIYEOKSIOS C36F D675 # HANGUL SYLLABLE HIEUH-WAE-NIEUNCIEUC C370 D676 # HANGUL SYLLABLE HIEUH-WAE-NIEUNHIEUH C371 D677 # HANGUL SYLLABLE HIEUH-WAE-TIKEUT C372 D678 # HANGUL SYLLABLE HIEUH-WAE-RIEUL C373 D679 # HANGUL SYLLABLE HIEUH-WAE-RIEULKIYEOK C374 D67A # HANGUL SYLLABLE HIEUH-WAE-RIEULMIEUM C375 D67B # HANGUL SYLLABLE HIEUH-WAE-RIEULPIEUP C376 D67C # HANGUL SYLLABLE HIEUH-WAE-RIEULSIOS C377 D67D # HANGUL SYLLABLE HIEUH-WAE-RIEULTHIEUTH C378 D67E # HANGUL SYLLABLE HIEUH-WAE-RIEULPHIEUPH C379 D67F # HANGUL SYLLABLE HIEUH-WAE-RIEULHIEUH C37A D680 # HANGUL SYLLABLE HIEUH-WAE-MIEUM C381 D681 # HANGUL SYLLABLE HIEUH-WAE-PIEUP C382 D682 # HANGUL SYLLABLE HIEUH-WAE-PIEUPSIOS C383 D684 # HANGUL SYLLABLE HIEUH-WAE-SSANGSIOS C384 D686 # HANGUL SYLLABLE HIEUH-WAE-CIEUC C385 D687 # HANGUL SYLLABLE HIEUH-WAE-CHIEUCH C386 D688 # HANGUL SYLLABLE HIEUH-WAE-KHIEUKH C387 D689 # HANGUL SYLLABLE HIEUH-WAE-THIEUTH C388 D68A # HANGUL SYLLABLE HIEUH-WAE-PHIEUPH C389 D68B # HANGUL SYLLABLE HIEUH-WAE-HIEUH C38A D68E # HANGUL SYLLABLE HIEUH-OE-SSANGKIYEOK C38B D68F # HANGUL SYLLABLE HIEUH-OE-KIYEOKSIOS C38C D691 # HANGUL SYLLABLE HIEUH-OE-NIEUNCIEUC C38D D692 # HANGUL SYLLABLE HIEUH-OE-NIEUNHIEUH C38E D693 # HANGUL SYLLABLE HIEUH-OE-TIKEUT C38F D695 # HANGUL SYLLABLE HIEUH-OE-RIEULKIYEOK C390 D696 # HANGUL SYLLABLE HIEUH-OE-RIEULMIEUM C391 D697 # HANGUL SYLLABLE HIEUH-OE-RIEULPIEUP C392 D698 # HANGUL SYLLABLE HIEUH-OE-RIEULSIOS C393 D699 # HANGUL SYLLABLE HIEUH-OE-RIEULTHIEUTH C394 D69A # HANGUL SYLLABLE HIEUH-OE-RIEULPHIEUPH C395 D69B # HANGUL SYLLABLE HIEUH-OE-RIEULHIEUH C396 D69C # HANGUL SYLLABLE HIEUH-OE-MIEUM C397 D69E # HANGUL SYLLABLE HIEUH-OE-PIEUPSIOS C398 D6A0 # HANGUL SYLLABLE HIEUH-OE-SSANGSIOS C399 D6A2 # HANGUL SYLLABLE HIEUH-OE-CIEUC C39A D6A3 # HANGUL SYLLABLE HIEUH-OE-CHIEUCH C39B D6A4 # HANGUL SYLLABLE HIEUH-OE-KHIEUKH C39C D6A5 # HANGUL SYLLABLE HIEUH-OE-THIEUTH C39D D6A6 # HANGUL SYLLABLE HIEUH-OE-PHIEUPH C39E D6A7 # HANGUL SYLLABLE HIEUH-OE-HIEUH C39F D6A9 # HANGUL SYLLABLE HIEUH-YO-KIYEOK C3A0 D6AA # HANGUL SYLLABLE HIEUH-YO-SSANGKIYEOK C3A1 CC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS C3A2 CC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG C3A3 CC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC C3A4 CC44 # HANGUL SYLLABLE CHIEUCH-AE C3A5 CC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK C3A6 CC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN C3A7 CC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL C3A8 CC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM C3A9 CC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP C3AA CC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS C3AB CC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS C3AC CC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG C3AD CC60 # HANGUL SYLLABLE CHIEUCH-YA C3AE CC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN C3AF CC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH C3B0 CC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL C3B1 CC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM C3B2 CC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG C3B3 CC98 # HANGUL SYLLABLE CHIEUCH-EO C3B4 CC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK C3B5 CC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN C3B6 CCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL C3B7 CCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM C3B8 CCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP C3B9 CCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS C3BA CCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS C3BB CCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG C3BC CCB4 # HANGUL SYLLABLE CHIEUCH-E C3BD CCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK C3BE CCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN C3BF CCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL C3C0 CCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM C3C1 CCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP C3C2 CCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS C3C3 CCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG C3C4 CCD0 # HANGUL SYLLABLE CHIEUCH-YEO C3C5 CCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN C3C6 CCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS C3C7 CCEC # HANGUL SYLLABLE CHIEUCH-YE C3C8 CCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN C3C9 CD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG C3CA CD08 # HANGUL SYLLABLE CHIEUCH-O C3CB CD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK C3CC CD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN C3CD CD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL C3CE CD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM C3CF CD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP C3D0 CD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS C3D1 CD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG C3D2 CD24 # HANGUL SYLLABLE CHIEUCH-WA C3D3 CD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN C3D4 CD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL C3D5 CD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG C3D6 CD5C # HANGUL SYLLABLE CHIEUCH-OE C3D7 CD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN C3D8 CD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL C3D9 CD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM C3DA CD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP C3DB CD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS C3DC CD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG C3DD CD78 # HANGUL SYLLABLE CHIEUCH-YO C3DE CD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM C3DF CD94 # HANGUL SYLLABLE CHIEUCH-U C3E0 CD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK C3E1 CD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN C3E2 CD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL C3E3 CDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM C3E4 CDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP C3E5 CDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS C3E6 CDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG C3E7 CDB0 # HANGUL SYLLABLE CHIEUCH-WEO C3E8 CDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS C3E9 CDCC # HANGUL SYLLABLE CHIEUCH-WE C3EA CDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN C3EB CDE8 # HANGUL SYLLABLE CHIEUCH-WI C3EC CDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN C3ED CDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL C3EE CDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM C3EF CDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP C3F0 CDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS C3F1 CDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG C3F2 CE04 # HANGUL SYLLABLE CHIEUCH-YU C3F3 CE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN C3F4 CE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL C3F5 CE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM C3F6 CE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG C3F7 CE20 # HANGUL SYLLABLE CHIEUCH-EU C3F8 CE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK C3F9 CE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN C3FA CE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL C3FB CE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM C3FC CE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP C3FD CE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS C3FE CE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG C441 D6AB # HANGUL SYLLABLE HIEUH-YO-KIYEOKSIOS C442 D6AD # HANGUL SYLLABLE HIEUH-YO-NIEUNCIEUC C443 D6AE # HANGUL SYLLABLE HIEUH-YO-NIEUNHIEUH C444 D6AF # HANGUL SYLLABLE HIEUH-YO-TIKEUT C445 D6B1 # HANGUL SYLLABLE HIEUH-YO-RIEULKIYEOK C446 D6B2 # HANGUL SYLLABLE HIEUH-YO-RIEULMIEUM C447 D6B3 # HANGUL SYLLABLE HIEUH-YO-RIEULPIEUP C448 D6B4 # HANGUL SYLLABLE HIEUH-YO-RIEULSIOS C449 D6B5 # HANGUL SYLLABLE HIEUH-YO-RIEULTHIEUTH C44A D6B6 # HANGUL SYLLABLE HIEUH-YO-RIEULPHIEUPH C44B D6B7 # HANGUL SYLLABLE HIEUH-YO-RIEULHIEUH C44C D6B8 # HANGUL SYLLABLE HIEUH-YO-MIEUM C44D D6BA # HANGUL SYLLABLE HIEUH-YO-PIEUPSIOS C44E D6BC # HANGUL SYLLABLE HIEUH-YO-SSANGSIOS C44F D6BD # HANGUL SYLLABLE HIEUH-YO-IEUNG C450 D6BE # HANGUL SYLLABLE HIEUH-YO-CIEUC C451 D6BF # HANGUL SYLLABLE HIEUH-YO-CHIEUCH C452 D6C0 # HANGUL SYLLABLE HIEUH-YO-KHIEUKH C453 D6C1 # HANGUL SYLLABLE HIEUH-YO-THIEUTH C454 D6C2 # HANGUL SYLLABLE HIEUH-YO-PHIEUPH C455 D6C3 # HANGUL SYLLABLE HIEUH-YO-HIEUH C456 D6C6 # HANGUL SYLLABLE HIEUH-U-SSANGKIYEOK C457 D6C7 # HANGUL SYLLABLE HIEUH-U-KIYEOKSIOS C458 D6C9 # HANGUL SYLLABLE HIEUH-U-NIEUNCIEUC C459 D6CA # HANGUL SYLLABLE HIEUH-U-NIEUNHIEUH C45A D6CB # HANGUL SYLLABLE HIEUH-U-TIKEUT C461 D6CD # HANGUL SYLLABLE HIEUH-U-RIEULKIYEOK C462 D6CE # HANGUL SYLLABLE HIEUH-U-RIEULMIEUM C463 D6CF # HANGUL SYLLABLE HIEUH-U-RIEULPIEUP C464 D6D0 # HANGUL SYLLABLE HIEUH-U-RIEULSIOS C465 D6D2 # HANGUL SYLLABLE HIEUH-U-RIEULPHIEUPH C466 D6D3 # HANGUL SYLLABLE HIEUH-U-RIEULHIEUH C467 D6D5 # HANGUL SYLLABLE HIEUH-U-PIEUP C468 D6D6 # HANGUL SYLLABLE HIEUH-U-PIEUPSIOS C469 D6D8 # HANGUL SYLLABLE HIEUH-U-SSANGSIOS C46A D6DA # HANGUL SYLLABLE HIEUH-U-CIEUC C46B D6DB # HANGUL SYLLABLE HIEUH-U-CHIEUCH C46C D6DC # HANGUL SYLLABLE HIEUH-U-KHIEUKH C46D D6DD # HANGUL SYLLABLE HIEUH-U-THIEUTH C46E D6DE # HANGUL SYLLABLE HIEUH-U-PHIEUPH C46F D6DF # HANGUL SYLLABLE HIEUH-U-HIEUH C470 D6E1 # HANGUL SYLLABLE HIEUH-WEO-KIYEOK C471 D6E2 # HANGUL SYLLABLE HIEUH-WEO-SSANGKIYEOK C472 D6E3 # HANGUL SYLLABLE HIEUH-WEO-KIYEOKSIOS C473 D6E5 # HANGUL SYLLABLE HIEUH-WEO-NIEUNCIEUC C474 D6E6 # HANGUL SYLLABLE HIEUH-WEO-NIEUNHIEUH C475 D6E7 # HANGUL SYLLABLE HIEUH-WEO-TIKEUT C476 D6E9 # HANGUL SYLLABLE HIEUH-WEO-RIEULKIYEOK C477 D6EA # HANGUL SYLLABLE HIEUH-WEO-RIEULMIEUM C478 D6EB # HANGUL SYLLABLE HIEUH-WEO-RIEULPIEUP C479 D6EC # HANGUL SYLLABLE HIEUH-WEO-RIEULSIOS C47A D6ED # HANGUL SYLLABLE HIEUH-WEO-RIEULTHIEUTH C481 D6EE # HANGUL SYLLABLE HIEUH-WEO-RIEULPHIEUPH C482 D6EF # HANGUL SYLLABLE HIEUH-WEO-RIEULHIEUH C483 D6F1 # HANGUL SYLLABLE HIEUH-WEO-PIEUP C484 D6F2 # HANGUL SYLLABLE HIEUH-WEO-PIEUPSIOS C485 D6F3 # HANGUL SYLLABLE HIEUH-WEO-SIOS C486 D6F4 # HANGUL SYLLABLE HIEUH-WEO-SSANGSIOS C487 D6F6 # HANGUL SYLLABLE HIEUH-WEO-CIEUC C488 D6F7 # HANGUL SYLLABLE HIEUH-WEO-CHIEUCH C489 D6F8 # HANGUL SYLLABLE HIEUH-WEO-KHIEUKH C48A D6F9 # HANGUL SYLLABLE HIEUH-WEO-THIEUTH C48B D6FA # HANGUL SYLLABLE HIEUH-WEO-PHIEUPH C48C D6FB # HANGUL SYLLABLE HIEUH-WEO-HIEUH C48D D6FE # HANGUL SYLLABLE HIEUH-WE-SSANGKIYEOK C48E D6FF # HANGUL SYLLABLE HIEUH-WE-KIYEOKSIOS C48F D701 # HANGUL SYLLABLE HIEUH-WE-NIEUNCIEUC C490 D702 # HANGUL SYLLABLE HIEUH-WE-NIEUNHIEUH C491 D703 # HANGUL SYLLABLE HIEUH-WE-TIKEUT C492 D705 # HANGUL SYLLABLE HIEUH-WE-RIEULKIYEOK C493 D706 # HANGUL SYLLABLE HIEUH-WE-RIEULMIEUM C494 D707 # HANGUL SYLLABLE HIEUH-WE-RIEULPIEUP C495 D708 # HANGUL SYLLABLE HIEUH-WE-RIEULSIOS C496 D709 # HANGUL SYLLABLE HIEUH-WE-RIEULTHIEUTH C497 D70A # HANGUL SYLLABLE HIEUH-WE-RIEULPHIEUPH C498 D70B # HANGUL SYLLABLE HIEUH-WE-RIEULHIEUH C499 D70C # HANGUL SYLLABLE HIEUH-WE-MIEUM C49A D70D # HANGUL SYLLABLE HIEUH-WE-PIEUP C49B D70E # HANGUL SYLLABLE HIEUH-WE-PIEUPSIOS C49C D70F # HANGUL SYLLABLE HIEUH-WE-SIOS C49D D710 # HANGUL SYLLABLE HIEUH-WE-SSANGSIOS C49E D712 # HANGUL SYLLABLE HIEUH-WE-CIEUC C49F D713 # HANGUL SYLLABLE HIEUH-WE-CHIEUCH C4A0 D714 # HANGUL SYLLABLE HIEUH-WE-KHIEUKH C4A1 CE58 # HANGUL SYLLABLE CHIEUCH-I C4A2 CE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK C4A3 CE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN C4A4 CE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT C4A5 CE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL C4A6 CE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK C4A7 CE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM C4A8 CE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP C4A9 CE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS C4AA CE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG C4AB CE74 # HANGUL SYLLABLE KHIEUKH-A C4AC CE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK C4AD CE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN C4AE CE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL C4AF CE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM C4B0 CE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP C4B1 CE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS C4B2 CE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG C4B3 CE90 # HANGUL SYLLABLE KHIEUKH-AE C4B4 CE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK C4B5 CE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN C4B6 CE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL C4B7 CEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM C4B8 CEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP C4B9 CEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS C4BA CEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS C4BB CEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG C4BC CEAC # HANGUL SYLLABLE KHIEUKH-YA C4BD CEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK C4BE CEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG C4BF CEE4 # HANGUL SYLLABLE KHIEUKH-EO C4C0 CEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK C4C1 CEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN C4C2 CEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT C4C3 CEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL C4C4 CEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM C4C5 CEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP C4C6 CEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS C4C7 CEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS C4C8 CEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG C4C9 CF00 # HANGUL SYLLABLE KHIEUKH-E C4CA CF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK C4CB CF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN C4CC CF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL C4CD CF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM C4CE CF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP C4CF CF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS C4D0 CF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG C4D1 CF1C # HANGUL SYLLABLE KHIEUKH-YEO C4D2 CF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN C4D3 CF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL C4D4 CF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM C4D5 CF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP C4D6 CF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS C4D7 CF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS C4D8 CF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG C4D9 CF38 # HANGUL SYLLABLE KHIEUKH-YE C4DA CF54 # HANGUL SYLLABLE KHIEUKH-O C4DB CF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK C4DC CF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN C4DD CF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL C4DE CF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM C4DF CF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP C4E0 CF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS C4E1 CF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG C4E2 CF70 # HANGUL SYLLABLE KHIEUKH-WA C4E3 CF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK C4E4 CF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN C4E5 CF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL C4E6 CF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM C4E7 CF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG C4E8 CF8C # HANGUL SYLLABLE KHIEUKH-WAE C4E9 CFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG C4EA CFA8 # HANGUL SYLLABLE KHIEUKH-OE C4EB CFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL C4EC CFC4 # HANGUL SYLLABLE KHIEUKH-YO C4ED CFE0 # HANGUL SYLLABLE KHIEUKH-U C4EE CFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK C4EF CFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN C4F0 CFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL C4F1 CFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM C4F2 CFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP C4F3 CFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS C4F4 CFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG C4F5 CFFC # HANGUL SYLLABLE KHIEUKH-WEO C4F6 D000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN C4F7 D004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL C4F8 D011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG C4F9 D018 # HANGUL SYLLABLE KHIEUKH-WE C4FA D02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG C4FB D034 # HANGUL SYLLABLE KHIEUKH-WI C4FC D035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK C4FD D038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN C4FE D03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL C541 D715 # HANGUL SYLLABLE HIEUH-WE-THIEUTH C542 D716 # HANGUL SYLLABLE HIEUH-WE-PHIEUPH C543 D717 # HANGUL SYLLABLE HIEUH-WE-HIEUH C544 D71A # HANGUL SYLLABLE HIEUH-WI-SSANGKIYEOK C545 D71B # HANGUL SYLLABLE HIEUH-WI-KIYEOKSIOS C546 D71D # HANGUL SYLLABLE HIEUH-WI-NIEUNCIEUC C547 D71E # HANGUL SYLLABLE HIEUH-WI-NIEUNHIEUH C548 D71F # HANGUL SYLLABLE HIEUH-WI-TIKEUT C549 D721 # HANGUL SYLLABLE HIEUH-WI-RIEULKIYEOK C54A D722 # HANGUL SYLLABLE HIEUH-WI-RIEULMIEUM C54B D723 # HANGUL SYLLABLE HIEUH-WI-RIEULPIEUP C54C D724 # HANGUL SYLLABLE HIEUH-WI-RIEULSIOS C54D D725 # HANGUL SYLLABLE HIEUH-WI-RIEULTHIEUTH C54E D726 # HANGUL SYLLABLE HIEUH-WI-RIEULPHIEUPH C54F D727 # HANGUL SYLLABLE HIEUH-WI-RIEULHIEUH C550 D72A # HANGUL SYLLABLE HIEUH-WI-PIEUPSIOS C551 D72C # HANGUL SYLLABLE HIEUH-WI-SSANGSIOS C552 D72E # HANGUL SYLLABLE HIEUH-WI-CIEUC C553 D72F # HANGUL SYLLABLE HIEUH-WI-CHIEUCH C554 D730 # HANGUL SYLLABLE HIEUH-WI-KHIEUKH C555 D731 # HANGUL SYLLABLE HIEUH-WI-THIEUTH C556 D732 # HANGUL SYLLABLE HIEUH-WI-PHIEUPH C557 D733 # HANGUL SYLLABLE HIEUH-WI-HIEUH C558 D736 # HANGUL SYLLABLE HIEUH-YU-SSANGKIYEOK C559 D737 # HANGUL SYLLABLE HIEUH-YU-KIYEOKSIOS C55A D739 # HANGUL SYLLABLE HIEUH-YU-NIEUNCIEUC C561 D73A # HANGUL SYLLABLE HIEUH-YU-NIEUNHIEUH C562 D73B # HANGUL SYLLABLE HIEUH-YU-TIKEUT C563 D73D # HANGUL SYLLABLE HIEUH-YU-RIEULKIYEOK C564 D73E # HANGUL SYLLABLE HIEUH-YU-RIEULMIEUM C565 D73F # HANGUL SYLLABLE HIEUH-YU-RIEULPIEUP C566 D740 # HANGUL SYLLABLE HIEUH-YU-RIEULSIOS C567 D741 # HANGUL SYLLABLE HIEUH-YU-RIEULTHIEUTH C568 D742 # HANGUL SYLLABLE HIEUH-YU-RIEULPHIEUPH C569 D743 # HANGUL SYLLABLE HIEUH-YU-RIEULHIEUH C56A D745 # HANGUL SYLLABLE HIEUH-YU-PIEUP C56B D746 # HANGUL SYLLABLE HIEUH-YU-PIEUPSIOS C56C D748 # HANGUL SYLLABLE HIEUH-YU-SSANGSIOS C56D D74A # HANGUL SYLLABLE HIEUH-YU-CIEUC C56E D74B # HANGUL SYLLABLE HIEUH-YU-CHIEUCH C56F D74C # HANGUL SYLLABLE HIEUH-YU-KHIEUKH C570 D74D # HANGUL SYLLABLE HIEUH-YU-THIEUTH C571 D74E # HANGUL SYLLABLE HIEUH-YU-PHIEUPH C572 D74F # HANGUL SYLLABLE HIEUH-YU-HIEUH C573 D752 # HANGUL SYLLABLE HIEUH-EU-SSANGKIYEOK C574 D753 # HANGUL SYLLABLE HIEUH-EU-KIYEOKSIOS C575 D755 # HANGUL SYLLABLE HIEUH-EU-NIEUNCIEUC C576 D75A # HANGUL SYLLABLE HIEUH-EU-RIEULMIEUM C577 D75B # HANGUL SYLLABLE HIEUH-EU-RIEULPIEUP C578 D75C # HANGUL SYLLABLE HIEUH-EU-RIEULSIOS C579 D75D # HANGUL SYLLABLE HIEUH-EU-RIEULTHIEUTH C57A D75E # HANGUL SYLLABLE HIEUH-EU-RIEULPHIEUPH C581 D75F # HANGUL SYLLABLE HIEUH-EU-RIEULHIEUH C582 D762 # HANGUL SYLLABLE HIEUH-EU-PIEUPSIOS C583 D764 # HANGUL SYLLABLE HIEUH-EU-SSANGSIOS C584 D766 # HANGUL SYLLABLE HIEUH-EU-CIEUC C585 D767 # HANGUL SYLLABLE HIEUH-EU-CHIEUCH C586 D768 # HANGUL SYLLABLE HIEUH-EU-KHIEUKH C587 D76A # HANGUL SYLLABLE HIEUH-EU-PHIEUPH C588 D76B # HANGUL SYLLABLE HIEUH-EU-HIEUH C589 D76D # HANGUL SYLLABLE HIEUH-YI-KIYEOK C58A D76E # HANGUL SYLLABLE HIEUH-YI-SSANGKIYEOK C58B D76F # HANGUL SYLLABLE HIEUH-YI-KIYEOKSIOS C58C D771 # HANGUL SYLLABLE HIEUH-YI-NIEUNCIEUC C58D D772 # HANGUL SYLLABLE HIEUH-YI-NIEUNHIEUH C58E D773 # HANGUL SYLLABLE HIEUH-YI-TIKEUT C58F D775 # HANGUL SYLLABLE HIEUH-YI-RIEULKIYEOK C590 D776 # HANGUL SYLLABLE HIEUH-YI-RIEULMIEUM C591 D777 # HANGUL SYLLABLE HIEUH-YI-RIEULPIEUP C592 D778 # HANGUL SYLLABLE HIEUH-YI-RIEULSIOS C593 D779 # HANGUL SYLLABLE HIEUH-YI-RIEULTHIEUTH C594 D77A # HANGUL SYLLABLE HIEUH-YI-RIEULPHIEUPH C595 D77B # HANGUL SYLLABLE HIEUH-YI-RIEULHIEUH C596 D77E # HANGUL SYLLABLE HIEUH-YI-PIEUPSIOS C597 D77F # HANGUL SYLLABLE HIEUH-YI-SIOS C598 D780 # HANGUL SYLLABLE HIEUH-YI-SSANGSIOS C599 D782 # HANGUL SYLLABLE HIEUH-YI-CIEUC C59A D783 # HANGUL SYLLABLE HIEUH-YI-CHIEUCH C59B D784 # HANGUL SYLLABLE HIEUH-YI-KHIEUKH C59C D785 # HANGUL SYLLABLE HIEUH-YI-THIEUTH C59D D786 # HANGUL SYLLABLE HIEUH-YI-PHIEUPH C59E D787 # HANGUL SYLLABLE HIEUH-YI-HIEUH C59F D78A # HANGUL SYLLABLE HIEUH-I-SSANGKIYEOK C5A0 D78B # HANGUL SYLLABLE HIEUH-I-KIYEOKSIOS C5A1 D044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM C5A2 D045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP C5A3 D047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS C5A4 D049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG C5A5 D050 # HANGUL SYLLABLE KHIEUKH-YU C5A6 D054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN C5A7 D058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL C5A8 D060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM C5A9 D06C # HANGUL SYLLABLE KHIEUKH-EU C5AA D06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK C5AB D070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN C5AC D074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL C5AD D07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM C5AE D07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP C5AF D081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG C5B0 D0A4 # HANGUL SYLLABLE KHIEUKH-I C5B1 D0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK C5B2 D0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN C5B3 D0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL C5B4 D0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM C5B5 D0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP C5B6 D0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS C5B7 D0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG C5B8 D0C0 # HANGUL SYLLABLE THIEUTH-A C5B9 D0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK C5BA D0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN C5BB D0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL C5BC D0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK C5BD D0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM C5BE D0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP C5BF D0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS C5C0 D0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS C5C1 D0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG C5C2 D0DC # HANGUL SYLLABLE THIEUTH-AE C5C3 D0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK C5C4 D0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN C5C5 D0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL C5C6 D0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM C5C7 D0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP C5C8 D0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS C5C9 D0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS C5CA D0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG C5CB D0F8 # HANGUL SYLLABLE THIEUTH-YA C5CC D10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG C5CD D130 # HANGUL SYLLABLE THIEUTH-EO C5CE D131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK C5CF D134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN C5D0 D138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL C5D1 D13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM C5D2 D140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM C5D3 D141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP C5D4 D143 # HANGUL SYLLABLE THIEUTH-EO-SIOS C5D5 D144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS C5D6 D145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG C5D7 D14C # HANGUL SYLLABLE THIEUTH-E C5D8 D14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK C5D9 D150 # HANGUL SYLLABLE THIEUTH-E-NIEUN C5DA D154 # HANGUL SYLLABLE THIEUTH-E-RIEUL C5DB D15C # HANGUL SYLLABLE THIEUTH-E-MIEUM C5DC D15D # HANGUL SYLLABLE THIEUTH-E-PIEUP C5DD D15F # HANGUL SYLLABLE THIEUTH-E-SIOS C5DE D161 # HANGUL SYLLABLE THIEUTH-E-IEUNG C5DF D168 # HANGUL SYLLABLE THIEUTH-YEO C5E0 D16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN C5E1 D17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS C5E2 D184 # HANGUL SYLLABLE THIEUTH-YE C5E3 D188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN C5E4 D1A0 # HANGUL SYLLABLE THIEUTH-O C5E5 D1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK C5E6 D1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN C5E7 D1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL C5E8 D1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM C5E9 D1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP C5EA D1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS C5EB D1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG C5EC D1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH C5ED D1BC # HANGUL SYLLABLE THIEUTH-WA C5EE D1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN C5EF D1D8 # HANGUL SYLLABLE THIEUTH-WAE C5F0 D1F4 # HANGUL SYLLABLE THIEUTH-OE C5F1 D1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN C5F2 D207 # HANGUL SYLLABLE THIEUTH-OE-SIOS C5F3 D209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG C5F4 D210 # HANGUL SYLLABLE THIEUTH-YO C5F5 D22C # HANGUL SYLLABLE THIEUTH-U C5F6 D22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK C5F7 D230 # HANGUL SYLLABLE THIEUTH-U-NIEUN C5F8 D234 # HANGUL SYLLABLE THIEUTH-U-RIEUL C5F9 D23C # HANGUL SYLLABLE THIEUTH-U-MIEUM C5FA D23D # HANGUL SYLLABLE THIEUTH-U-PIEUP C5FB D23F # HANGUL SYLLABLE THIEUTH-U-SIOS C5FC D241 # HANGUL SYLLABLE THIEUTH-U-IEUNG C5FD D248 # HANGUL SYLLABLE THIEUTH-WEO C5FE D25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS C641 D78D # HANGUL SYLLABLE HIEUH-I-NIEUNCIEUC C642 D78E # HANGUL SYLLABLE HIEUH-I-NIEUNHIEUH C643 D78F # HANGUL SYLLABLE HIEUH-I-TIKEUT C644 D791 # HANGUL SYLLABLE HIEUH-I-RIEULKIYEOK C645 D792 # HANGUL SYLLABLE HIEUH-I-RIEULMIEUM C646 D793 # HANGUL SYLLABLE HIEUH-I-RIEULPIEUP C647 D794 # HANGUL SYLLABLE HIEUH-I-RIEULSIOS C648 D795 # HANGUL SYLLABLE HIEUH-I-RIEULTHIEUTH C649 D796 # HANGUL SYLLABLE HIEUH-I-RIEULPHIEUPH C64A D797 # HANGUL SYLLABLE HIEUH-I-RIEULHIEUH C64B D79A # HANGUL SYLLABLE HIEUH-I-PIEUPSIOS C64C D79C # HANGUL SYLLABLE HIEUH-I-SSANGSIOS C64D D79E # HANGUL SYLLABLE HIEUH-I-CIEUC C64E D79F # HANGUL SYLLABLE HIEUH-I-CHIEUCH C64F D7A0 # HANGUL SYLLABLE HIEUH-I-KHIEUKH C650 D7A1 # HANGUL SYLLABLE HIEUH-I-THIEUTH C651 D7A2 # HANGUL SYLLABLE HIEUH-I-PHIEUPH C652 D7A3 # HANGUL SYLLABLE HIEUH-I-HIEUH C6A1 D264 # HANGUL SYLLABLE THIEUTH-WE C6A2 D280 # HANGUL SYLLABLE THIEUTH-WI C6A3 D281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK C6A4 D284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN C6A5 D288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL C6A6 D290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM C6A7 D291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP C6A8 D295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG C6A9 D29C # HANGUL SYLLABLE THIEUTH-YU C6AA D2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN C6AB D2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL C6AC D2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM C6AD D2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG C6AE D2B8 # HANGUL SYLLABLE THIEUTH-EU C6AF D2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK C6B0 D2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN C6B1 D2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT C6B2 D2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL C6B3 D2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM C6B4 D2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM C6B5 D2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP C6B6 D2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS C6B7 D2D4 # HANGUL SYLLABLE THIEUTH-YI C6B8 D2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN C6B9 D2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL C6BA D2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM C6BB D2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP C6BC D2F0 # HANGUL SYLLABLE THIEUTH-I C6BD D2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK C6BE D2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN C6BF D2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL C6C0 D300 # HANGUL SYLLABLE THIEUTH-I-MIEUM C6C1 D301 # HANGUL SYLLABLE THIEUTH-I-PIEUP C6C2 D303 # HANGUL SYLLABLE THIEUTH-I-SIOS C6C3 D305 # HANGUL SYLLABLE THIEUTH-I-IEUNG C6C4 D30C # HANGUL SYLLABLE PHIEUPH-A C6C5 D30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK C6C6 D30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK C6C7 D310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN C6C8 D314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL C6C9 D316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM C6CA D31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM C6CB D31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP C6CC D31F # HANGUL SYLLABLE PHIEUPH-A-SIOS C6CD D320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS C6CE D321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG C6CF D325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH C6D0 D328 # HANGUL SYLLABLE PHIEUPH-AE C6D1 D329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK C6D2 D32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN C6D3 D330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL C6D4 D338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM C6D5 D339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP C6D6 D33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS C6D7 D33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS C6D8 D33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG C6D9 D344 # HANGUL SYLLABLE PHIEUPH-YA C6DA D345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK C6DB D37C # HANGUL SYLLABLE PHIEUPH-EO C6DC D37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK C6DD D380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN C6DE D384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL C6DF D38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM C6E0 D38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP C6E1 D38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS C6E2 D390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS C6E3 D391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG C6E4 D398 # HANGUL SYLLABLE PHIEUPH-E C6E5 D399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK C6E6 D39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN C6E7 D3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL C6E8 D3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM C6E9 D3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP C6EA D3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS C6EB D3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG C6EC D3B4 # HANGUL SYLLABLE PHIEUPH-YEO C6ED D3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN C6EE D3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL C6EF D3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM C6F0 D3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP C6F1 D3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS C6F2 D3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG C6F3 D3D0 # HANGUL SYLLABLE PHIEUPH-YE C6F4 D3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL C6F5 D3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP C6F6 D3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS C6F7 D3EC # HANGUL SYLLABLE PHIEUPH-O C6F8 D3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK C6F9 D3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN C6FA D3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL C6FB D3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM C6FC D3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP C6FD D3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS C6FE D401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG C7A1 D408 # HANGUL SYLLABLE PHIEUPH-WA C7A2 D41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG C7A3 D440 # HANGUL SYLLABLE PHIEUPH-OE C7A4 D444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN C7A5 D45C # HANGUL SYLLABLE PHIEUPH-YO C7A6 D460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN C7A7 D464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL C7A8 D46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP C7A9 D46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS C7AA D478 # HANGUL SYLLABLE PHIEUPH-U C7AB D479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK C7AC D47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN C7AD D47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT C7AE D480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL C7AF D482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM C7B0 D488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM C7B1 D489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP C7B2 D48B # HANGUL SYLLABLE PHIEUPH-U-SIOS C7B3 D48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG C7B4 D494 # HANGUL SYLLABLE PHIEUPH-WEO C7B5 D4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG C7B6 D4CC # HANGUL SYLLABLE PHIEUPH-WI C7B7 D4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN C7B8 D4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL C7B9 D4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM C7BA D4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS C7BB D4E8 # HANGUL SYLLABLE PHIEUPH-YU C7BC D4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN C7BD D4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL C7BE D4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM C7BF D4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS C7C0 D4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG C7C1 D504 # HANGUL SYLLABLE PHIEUPH-EU C7C2 D508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN C7C3 D50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL C7C4 D514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM C7C5 D515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP C7C6 D517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS C7C7 D53C # HANGUL SYLLABLE PHIEUPH-I C7C8 D53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK C7C9 D540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN C7CA D544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL C7CB D54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM C7CC D54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP C7CD D54F # HANGUL SYLLABLE PHIEUPH-I-SIOS C7CE D551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG C7CF D558 # HANGUL SYLLABLE HIEUH-A C7D0 D559 # HANGUL SYLLABLE HIEUH-A-KIYEOK C7D1 D55C # HANGUL SYLLABLE HIEUH-A-NIEUN C7D2 D560 # HANGUL SYLLABLE HIEUH-A-RIEUL C7D3 D565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH C7D4 D568 # HANGUL SYLLABLE HIEUH-A-MIEUM C7D5 D569 # HANGUL SYLLABLE HIEUH-A-PIEUP C7D6 D56B # HANGUL SYLLABLE HIEUH-A-SIOS C7D7 D56D # HANGUL SYLLABLE HIEUH-A-IEUNG C7D8 D574 # HANGUL SYLLABLE HIEUH-AE C7D9 D575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK C7DA D578 # HANGUL SYLLABLE HIEUH-AE-NIEUN C7DB D57C # HANGUL SYLLABLE HIEUH-AE-RIEUL C7DC D584 # HANGUL SYLLABLE HIEUH-AE-MIEUM C7DD D585 # HANGUL SYLLABLE HIEUH-AE-PIEUP C7DE D587 # HANGUL SYLLABLE HIEUH-AE-SIOS C7DF D588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS C7E0 D589 # HANGUL SYLLABLE HIEUH-AE-IEUNG C7E1 D590 # HANGUL SYLLABLE HIEUH-YA C7E2 D5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG C7E3 D5C8 # HANGUL SYLLABLE HIEUH-EO C7E4 D5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK C7E5 D5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN C7E6 D5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL C7E7 D5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM C7E8 D5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM C7E9 D5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP C7EA D5DB # HANGUL SYLLABLE HIEUH-EO-SIOS C7EB D5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG C7EC D5E4 # HANGUL SYLLABLE HIEUH-E C7ED D5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK C7EE D5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN C7EF D5EC # HANGUL SYLLABLE HIEUH-E-RIEUL C7F0 D5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM C7F1 D5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP C7F2 D5F7 # HANGUL SYLLABLE HIEUH-E-SIOS C7F3 D5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG C7F4 D600 # HANGUL SYLLABLE HIEUH-YEO C7F5 D601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK C7F6 D604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN C7F7 D608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL C7F8 D610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM C7F9 D611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP C7FA D613 # HANGUL SYLLABLE HIEUH-YEO-SIOS C7FB D614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS C7FC D615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG C7FD D61C # HANGUL SYLLABLE HIEUH-YE C7FE D620 # HANGUL SYLLABLE HIEUH-YE-NIEUN C8A1 D624 # HANGUL SYLLABLE HIEUH-YE-RIEUL C8A2 D62D # HANGUL SYLLABLE HIEUH-YE-PIEUP C8A3 D638 # HANGUL SYLLABLE HIEUH-O C8A4 D639 # HANGUL SYLLABLE HIEUH-O-KIYEOK C8A5 D63C # HANGUL SYLLABLE HIEUH-O-NIEUN C8A6 D640 # HANGUL SYLLABLE HIEUH-O-RIEUL C8A7 D645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH C8A8 D648 # HANGUL SYLLABLE HIEUH-O-MIEUM C8A9 D649 # HANGUL SYLLABLE HIEUH-O-PIEUP C8AA D64B # HANGUL SYLLABLE HIEUH-O-SIOS C8AB D64D # HANGUL SYLLABLE HIEUH-O-IEUNG C8AC D651 # HANGUL SYLLABLE HIEUH-O-THIEUTH C8AD D654 # HANGUL SYLLABLE HIEUH-WA C8AE D655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK C8AF D658 # HANGUL SYLLABLE HIEUH-WA-NIEUN C8B0 D65C # HANGUL SYLLABLE HIEUH-WA-RIEUL C8B1 D667 # HANGUL SYLLABLE HIEUH-WA-SIOS C8B2 D669 # HANGUL SYLLABLE HIEUH-WA-IEUNG C8B3 D670 # HANGUL SYLLABLE HIEUH-WAE C8B4 D671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK C8B5 D674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN C8B6 D683 # HANGUL SYLLABLE HIEUH-WAE-SIOS C8B7 D685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG C8B8 D68C # HANGUL SYLLABLE HIEUH-OE C8B9 D68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK C8BA D690 # HANGUL SYLLABLE HIEUH-OE-NIEUN C8BB D694 # HANGUL SYLLABLE HIEUH-OE-RIEUL C8BC D69D # HANGUL SYLLABLE HIEUH-OE-PIEUP C8BD D69F # HANGUL SYLLABLE HIEUH-OE-SIOS C8BE D6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG C8BF D6A8 # HANGUL SYLLABLE HIEUH-YO C8C0 D6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN C8C1 D6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL C8C2 D6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP C8C3 D6BB # HANGUL SYLLABLE HIEUH-YO-SIOS C8C4 D6C4 # HANGUL SYLLABLE HIEUH-U C8C5 D6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK C8C6 D6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN C8C7 D6CC # HANGUL SYLLABLE HIEUH-U-RIEUL C8C8 D6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH C8C9 D6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM C8CA D6D7 # HANGUL SYLLABLE HIEUH-U-SIOS C8CB D6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG C8CC D6E0 # HANGUL SYLLABLE HIEUH-WEO C8CD D6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN C8CE D6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL C8CF D6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM C8D0 D6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG C8D1 D6FC # HANGUL SYLLABLE HIEUH-WE C8D2 D6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK C8D3 D700 # HANGUL SYLLABLE HIEUH-WE-NIEUN C8D4 D704 # HANGUL SYLLABLE HIEUH-WE-RIEUL C8D5 D711 # HANGUL SYLLABLE HIEUH-WE-IEUNG C8D6 D718 # HANGUL SYLLABLE HIEUH-WI C8D7 D719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK C8D8 D71C # HANGUL SYLLABLE HIEUH-WI-NIEUN C8D9 D720 # HANGUL SYLLABLE HIEUH-WI-RIEUL C8DA D728 # HANGUL SYLLABLE HIEUH-WI-MIEUM C8DB D729 # HANGUL SYLLABLE HIEUH-WI-PIEUP C8DC D72B # HANGUL SYLLABLE HIEUH-WI-SIOS C8DD D72D # HANGUL SYLLABLE HIEUH-WI-IEUNG C8DE D734 # HANGUL SYLLABLE HIEUH-YU C8DF D735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK C8E0 D738 # HANGUL SYLLABLE HIEUH-YU-NIEUN C8E1 D73C # HANGUL SYLLABLE HIEUH-YU-RIEUL C8E2 D744 # HANGUL SYLLABLE HIEUH-YU-MIEUM C8E3 D747 # HANGUL SYLLABLE HIEUH-YU-SIOS C8E4 D749 # HANGUL SYLLABLE HIEUH-YU-IEUNG C8E5 D750 # HANGUL SYLLABLE HIEUH-EU C8E6 D751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK C8E7 D754 # HANGUL SYLLABLE HIEUH-EU-NIEUN C8E8 D756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH C8E9 D757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT C8EA D758 # HANGUL SYLLABLE HIEUH-EU-RIEUL C8EB D759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK C8EC D760 # HANGUL SYLLABLE HIEUH-EU-MIEUM C8ED D761 # HANGUL SYLLABLE HIEUH-EU-PIEUP C8EE D763 # HANGUL SYLLABLE HIEUH-EU-SIOS C8EF D765 # HANGUL SYLLABLE HIEUH-EU-IEUNG C8F0 D769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH C8F1 D76C # HANGUL SYLLABLE HIEUH-YI C8F2 D770 # HANGUL SYLLABLE HIEUH-YI-NIEUN C8F3 D774 # HANGUL SYLLABLE HIEUH-YI-RIEUL C8F4 D77C # HANGUL SYLLABLE HIEUH-YI-MIEUM C8F5 D77D # HANGUL SYLLABLE HIEUH-YI-PIEUP C8F6 D781 # HANGUL SYLLABLE HIEUH-YI-IEUNG C8F7 D788 # HANGUL SYLLABLE HIEUH-I C8F8 D789 # HANGUL SYLLABLE HIEUH-I-KIYEOK C8F9 D78C # HANGUL SYLLABLE HIEUH-I-NIEUN C8FA D790 # HANGUL SYLLABLE HIEUH-I-RIEUL C8FB D798 # HANGUL SYLLABLE HIEUH-I-MIEUM C8FC D799 # HANGUL SYLLABLE HIEUH-I-PIEUP C8FD D79B # HANGUL SYLLABLE HIEUH-I-SIOS C8FE D79D # HANGUL SYLLABLE HIEUH-I-IEUNG CAA1 4F3D # CAA2 4F73 # CAA3 5047 # CAA4 50F9 # CAA5 52A0 # CAA6 53EF # CAA7 5475 # CAA8 54E5 # CAA9 5609 # CAAA 5AC1 # CAAB 5BB6 # CAAC 6687 # CAAD 67B6 # CAAE 67B7 # CAAF 67EF # CAB0 6B4C # CAB1 73C2 # CAB2 75C2 # CAB3 7A3C # CAB4 82DB # CAB5 8304 # CAB6 8857 # CAB7 8888 # CAB8 8A36 # CAB9 8CC8 # CABA 8DCF # CABB 8EFB # CABC 8FE6 # CABD 99D5 # CABE 523B # CABF 5374 # CAC0 5404 # CAC1 606A # CAC2 6164 # CAC3 6BBC # CAC4 73CF # CAC5 811A # CAC6 89BA # CAC7 89D2 # CAC8 95A3 # CAC9 4F83 # CACA 520A # CACB 58BE # CACC 5978 # CACD 59E6 # CACE 5E72 # CACF 5E79 # CAD0 61C7 # CAD1 63C0 # CAD2 6746 # CAD3 67EC # CAD4 687F # CAD5 6F97 # CAD6 764E # CAD7 770B # CAD8 78F5 # CAD9 7A08 # CADA 7AFF # CADB 7C21 # CADC 809D # CADD 826E # CADE 8271 # CADF 8AEB # CAE0 9593 # CAE1 4E6B # CAE2 559D # CAE3 66F7 # CAE4 6E34 # CAE5 78A3 # CAE6 7AED # CAE7 845B # CAE8 8910 # CAE9 874E # CAEA 97A8 # CAEB 52D8 # CAEC 574E # CAED 582A # CAEE 5D4C # CAEF 611F # CAF0 61BE # CAF1 6221 # CAF2 6562 # CAF3 67D1 # CAF4 6A44 # CAF5 6E1B # CAF6 7518 # CAF7 75B3 # CAF8 76E3 # CAF9 77B0 # CAFA 7D3A # CAFB 90AF # CAFC 9451 # CAFD 9452 # CAFE 9F95 # CBA1 5323 # CBA2 5CAC # CBA3 7532 # CBA4 80DB # CBA5 9240 # CBA6 9598 # CBA7 525B # CBA8 5808 # CBA9 59DC # CBAA 5CA1 # CBAB 5D17 # CBAC 5EB7 # CBAD 5F3A # CBAE 5F4A # CBAF 6177 # CBB0 6C5F # CBB1 757A # CBB2 7586 # CBB3 7CE0 # CBB4 7D73 # CBB5 7DB1 # CBB6 7F8C # CBB7 8154 # CBB8 8221 # CBB9 8591 # CBBA 8941 # CBBB 8B1B # CBBC 92FC # CBBD 964D # CBBE 9C47 # CBBF 4ECB # CBC0 4EF7 # CBC1 500B # CBC2 51F1 # CBC3 584F # CBC4 6137 # CBC5 613E # CBC6 6168 # CBC7 6539 # CBC8 69EA # CBC9 6F11 # CBCA 75A5 # CBCB 7686 # CBCC 76D6 # CBCD 7B87 # CBCE 82A5 # CBCF 84CB # CBD0 F900 # CBD1 93A7 # CBD2 958B # CBD3 5580 # CBD4 5BA2 # CBD5 5751 # CBD6 F901 # CBD7 7CB3 # CBD8 7FB9 # CBD9 91B5 # CBDA 5028 # CBDB 53BB # CBDC 5C45 # CBDD 5DE8 # CBDE 62D2 # CBDF 636E # CBE0 64DA # CBE1 64E7 # CBE2 6E20 # CBE3 70AC # CBE4 795B # CBE5 8DDD # CBE6 8E1E # CBE7 F902 # CBE8 907D # CBE9 9245 # CBEA 92F8 # CBEB 4E7E # CBEC 4EF6 # CBED 5065 # CBEE 5DFE # CBEF 5EFA # CBF0 6106 # CBF1 6957 # CBF2 8171 # CBF3 8654 # CBF4 8E47 # CBF5 9375 # CBF6 9A2B # CBF7 4E5E # CBF8 5091 # CBF9 6770 # CBFA 6840 # CBFB 5109 # CBFC 528D # CBFD 5292 # CBFE 6AA2 # CCA1 77BC # CCA2 9210 # CCA3 9ED4 # CCA4 52AB # CCA5 602F # CCA6 8FF2 # CCA7 5048 # CCA8 61A9 # CCA9 63ED # CCAA 64CA # CCAB 683C # CCAC 6A84 # CCAD 6FC0 # CCAE 8188 # CCAF 89A1 # CCB0 9694 # CCB1 5805 # CCB2 727D # CCB3 72AC # CCB4 7504 # CCB5 7D79 # CCB6 7E6D # CCB7 80A9 # CCB8 898B # CCB9 8B74 # CCBA 9063 # CCBB 9D51 # CCBC 6289 # CCBD 6C7A # CCBE 6F54 # CCBF 7D50 # CCC0 7F3A # CCC1 8A23 # CCC2 517C # CCC3 614A # CCC4 7B9D # CCC5 8B19 # CCC6 9257 # CCC7 938C # CCC8 4EAC # CCC9 4FD3 # CCCA 501E # CCCB 50BE # CCCC 5106 # CCCD 52C1 # CCCE 52CD # CCCF 537F # CCD0 5770 # CCD1 5883 # CCD2 5E9A # CCD3 5F91 # CCD4 6176 # CCD5 61AC # CCD6 64CE # CCD7 656C # CCD8 666F # CCD9 66BB # CCDA 66F4 # CCDB 6897 # CCDC 6D87 # CCDD 7085 # CCDE 70F1 # CCDF 749F # CCE0 74A5 # CCE1 74CA # CCE2 75D9 # CCE3 786C # CCE4 78EC # CCE5 7ADF # CCE6 7AF6 # CCE7 7D45 # CCE8 7D93 # CCE9 8015 # CCEA 803F # CCEB 811B # CCEC 8396 # CCED 8B66 # CCEE 8F15 # CCEF 9015 # CCF0 93E1 # CCF1 9803 # CCF2 9838 # CCF3 9A5A # CCF4 9BE8 # CCF5 4FC2 # CCF6 5553 # CCF7 583A # CCF8 5951 # CCF9 5B63 # CCFA 5C46 # CCFB 60B8 # CCFC 6212 # CCFD 6842 # CCFE 68B0 # CDA1 68E8 # CDA2 6EAA # CDA3 754C # CDA4 7678 # CDA5 78CE # CDA6 7A3D # CDA7 7CFB # CDA8 7E6B # CDA9 7E7C # CDAA 8A08 # CDAB 8AA1 # CDAC 8C3F # CDAD 968E # CDAE 9DC4 # CDAF 53E4 # CDB0 53E9 # CDB1 544A # CDB2 5471 # CDB3 56FA # CDB4 59D1 # CDB5 5B64 # CDB6 5C3B # CDB7 5EAB # CDB8 62F7 # CDB9 6537 # CDBA 6545 # CDBB 6572 # CDBC 66A0 # CDBD 67AF # CDBE 69C1 # CDBF 6CBD # CDC0 75FC # CDC1 7690 # CDC2 777E # CDC3 7A3F # CDC4 7F94 # CDC5 8003 # CDC6 80A1 # CDC7 818F # CDC8 82E6 # CDC9 82FD # CDCA 83F0 # CDCB 85C1 # CDCC 8831 # CDCD 88B4 # CDCE 8AA5 # CDCF F903 # CDD0 8F9C # CDD1 932E # CDD2 96C7 # CDD3 9867 # CDD4 9AD8 # CDD5 9F13 # CDD6 54ED # CDD7 659B # CDD8 66F2 # CDD9 688F # CDDA 7A40 # CDDB 8C37 # CDDC 9D60 # CDDD 56F0 # CDDE 5764 # CDDF 5D11 # CDE0 6606 # CDE1 68B1 # CDE2 68CD # CDE3 6EFE # CDE4 7428 # CDE5 889E # CDE6 9BE4 # CDE7 6C68 # CDE8 F904 # CDE9 9AA8 # CDEA 4F9B # CDEB 516C # CDEC 5171 # CDED 529F # CDEE 5B54 # CDEF 5DE5 # CDF0 6050 # CDF1 606D # CDF2 62F1 # CDF3 63A7 # CDF4 653B # CDF5 73D9 # CDF6 7A7A # CDF7 86A3 # CDF8 8CA2 # CDF9 978F # CDFA 4E32 # CDFB 5BE1 # CDFC 6208 # CDFD 679C # CDFE 74DC # CEA1 79D1 # CEA2 83D3 # CEA3 8A87 # CEA4 8AB2 # CEA5 8DE8 # CEA6 904E # CEA7 934B # CEA8 9846 # CEA9 5ED3 # CEAA 69E8 # CEAB 85FF # CEAC 90ED # CEAD F905 # CEAE 51A0 # CEAF 5B98 # CEB0 5BEC # CEB1 6163 # CEB2 68FA # CEB3 6B3E # CEB4 704C # CEB5 742F # CEB6 74D8 # CEB7 7BA1 # CEB8 7F50 # CEB9 83C5 # CEBA 89C0 # CEBB 8CAB # CEBC 95DC # CEBD 9928 # CEBE 522E # CEBF 605D # CEC0 62EC # CEC1 9002 # CEC2 4F8A # CEC3 5149 # CEC4 5321 # CEC5 58D9 # CEC6 5EE3 # CEC7 66E0 # CEC8 6D38 # CEC9 709A # CECA 72C2 # CECB 73D6 # CECC 7B50 # CECD 80F1 # CECE 945B # CECF 5366 # CED0 639B # CED1 7F6B # CED2 4E56 # CED3 5080 # CED4 584A # CED5 58DE # CED6 602A # CED7 6127 # CED8 62D0 # CED9 69D0 # CEDA 9B41 # CEDB 5B8F # CEDC 7D18 # CEDD 80B1 # CEDE 8F5F # CEDF 4EA4 # CEE0 50D1 # CEE1 54AC # CEE2 55AC # CEE3 5B0C # CEE4 5DA0 # CEE5 5DE7 # CEE6 652A # CEE7 654E # CEE8 6821 # CEE9 6A4B # CEEA 72E1 # CEEB 768E # CEEC 77EF # CEED 7D5E # CEEE 7FF9 # CEEF 81A0 # CEF0 854E # CEF1 86DF # CEF2 8F03 # CEF3 8F4E # CEF4 90CA # CEF5 9903 # CEF6 9A55 # CEF7 9BAB # CEF8 4E18 # CEF9 4E45 # CEFA 4E5D # CEFB 4EC7 # CEFC 4FF1 # CEFD 5177 # CEFE 52FE # CFA1 5340 # CFA2 53E3 # CFA3 53E5 # CFA4 548E # CFA5 5614 # CFA6 5775 # CFA7 57A2 # CFA8 5BC7 # CFA9 5D87 # CFAA 5ED0 # CFAB 61FC # CFAC 62D8 # CFAD 6551 # CFAE 67B8 # CFAF 67E9 # CFB0 69CB # CFB1 6B50 # CFB2 6BC6 # CFB3 6BEC # CFB4 6C42 # CFB5 6E9D # CFB6 7078 # CFB7 72D7 # CFB8 7396 # CFB9 7403 # CFBA 77BF # CFBB 77E9 # CFBC 7A76 # CFBD 7D7F # CFBE 8009 # CFBF 81FC # CFC0 8205 # CFC1 820A # CFC2 82DF # CFC3 8862 # CFC4 8B33 # CFC5 8CFC # CFC6 8EC0 # CFC7 9011 # CFC8 90B1 # CFC9 9264 # CFCA 92B6 # CFCB 99D2 # CFCC 9A45 # CFCD 9CE9 # CFCE 9DD7 # CFCF 9F9C # CFD0 570B # CFD1 5C40 # CFD2 83CA # CFD3 97A0 # CFD4 97AB # CFD5 9EB4 # CFD6 541B # CFD7 7A98 # CFD8 7FA4 # CFD9 88D9 # CFDA 8ECD # CFDB 90E1 # CFDC 5800 # CFDD 5C48 # CFDE 6398 # CFDF 7A9F # CFE0 5BAE # CFE1 5F13 # CFE2 7A79 # CFE3 7AAE # CFE4 828E # CFE5 8EAC # CFE6 5026 # CFE7 5238 # CFE8 52F8 # CFE9 5377 # CFEA 5708 # CFEB 62F3 # CFEC 6372 # CFED 6B0A # CFEE 6DC3 # CFEF 7737 # CFF0 53A5 # CFF1 7357 # CFF2 8568 # CFF3 8E76 # CFF4 95D5 # CFF5 673A # CFF6 6AC3 # CFF7 6F70 # CFF8 8A6D # CFF9 8ECC # CFFA 994B # CFFB F906 # CFFC 6677 # CFFD 6B78 # CFFE 8CB4 # D0A1 9B3C # D0A2 F907 # D0A3 53EB # D0A4 572D # D0A5 594E # D0A6 63C6 # D0A7 69FB # D0A8 73EA # D0A9 7845 # D0AA 7ABA # D0AB 7AC5 # D0AC 7CFE # D0AD 8475 # D0AE 898F # D0AF 8D73 # D0B0 9035 # D0B1 95A8 # D0B2 52FB # D0B3 5747 # D0B4 7547 # D0B5 7B60 # D0B6 83CC # D0B7 921E # D0B8 F908 # D0B9 6A58 # D0BA 514B # D0BB 524B # D0BC 5287 # D0BD 621F # D0BE 68D8 # D0BF 6975 # D0C0 9699 # D0C1 50C5 # D0C2 52A4 # D0C3 52E4 # D0C4 61C3 # D0C5 65A4 # D0C6 6839 # D0C7 69FF # D0C8 747E # D0C9 7B4B # D0CA 82B9 # D0CB 83EB # D0CC 89B2 # D0CD 8B39 # D0CE 8FD1 # D0CF 9949 # D0D0 F909 # D0D1 4ECA # D0D2 5997 # D0D3 64D2 # D0D4 6611 # D0D5 6A8E # D0D6 7434 # D0D7 7981 # D0D8 79BD # D0D9 82A9 # D0DA 887E # D0DB 887F # D0DC 895F # D0DD F90A # D0DE 9326 # D0DF 4F0B # D0E0 53CA # D0E1 6025 # D0E2 6271 # D0E3 6C72 # D0E4 7D1A # D0E5 7D66 # D0E6 4E98 # D0E7 5162 # D0E8 77DC # D0E9 80AF # D0EA 4F01 # D0EB 4F0E # D0EC 5176 # D0ED 5180 # D0EE 55DC # D0EF 5668 # D0F0 573B # D0F1 57FA # D0F2 57FC # D0F3 5914 # D0F4 5947 # D0F5 5993 # D0F6 5BC4 # D0F7 5C90 # D0F8 5D0E # D0F9 5DF1 # D0FA 5E7E # D0FB 5FCC # D0FC 6280 # D0FD 65D7 # D0FE 65E3 # D1A1 671E # D1A2 671F # D1A3 675E # D1A4 68CB # D1A5 68C4 # D1A6 6A5F # D1A7 6B3A # D1A8 6C23 # D1A9 6C7D # D1AA 6C82 # D1AB 6DC7 # D1AC 7398 # D1AD 7426 # D1AE 742A # D1AF 7482 # D1B0 74A3 # D1B1 7578 # D1B2 757F # D1B3 7881 # D1B4 78EF # D1B5 7941 # D1B6 7947 # D1B7 7948 # D1B8 797A # D1B9 7B95 # D1BA 7D00 # D1BB 7DBA # D1BC 7F88 # D1BD 8006 # D1BE 802D # D1BF 808C # D1C0 8A18 # D1C1 8B4F # D1C2 8C48 # D1C3 8D77 # D1C4 9321 # D1C5 9324 # D1C6 98E2 # D1C7 9951 # D1C8 9A0E # D1C9 9A0F # D1CA 9A65 # D1CB 9E92 # D1CC 7DCA # D1CD 4F76 # D1CE 5409 # D1CF 62EE # D1D0 6854 # D1D1 91D1 # D1D2 55AB # D1D3 513A # D1D4 F90B # D1D5 F90C # D1D6 5A1C # D1D7 61E6 # D1D8 F90D # D1D9 62CF # D1DA 62FF # D1DB F90E # D1DC F90F # D1DD F910 # D1DE F911 # D1DF F912 # D1E0 F913 # D1E1 90A3 # D1E2 F914 # D1E3 F915 # D1E4 F916 # D1E5 F917 # D1E6 F918 # D1E7 8AFE # D1E8 F919 # D1E9 F91A # D1EA F91B # D1EB F91C # D1EC 6696 # D1ED F91D # D1EE 7156 # D1EF F91E # D1F0 F91F # D1F1 96E3 # D1F2 F920 # D1F3 634F # D1F4 637A # D1F5 5357 # D1F6 F921 # D1F7 678F # D1F8 6960 # D1F9 6E73 # D1FA F922 # D1FB 7537 # D1FC F923 # D1FD F924 # D1FE F925 # D2A1 7D0D # D2A2 F926 # D2A3 F927 # D2A4 8872 # D2A5 56CA # D2A6 5A18 # D2A7 F928 # D2A8 F929 # D2A9 F92A # D2AA F92B # D2AB F92C # D2AC 4E43 # D2AD F92D # D2AE 5167 # D2AF 5948 # D2B0 67F0 # D2B1 8010 # D2B2 F92E # D2B3 5973 # D2B4 5E74 # D2B5 649A # D2B6 79CA # D2B7 5FF5 # D2B8 606C # D2B9 62C8 # D2BA 637B # D2BB 5BE7 # D2BC 5BD7 # D2BD 52AA # D2BE F92F # D2BF 5974 # D2C0 5F29 # D2C1 6012 # D2C2 F930 # D2C3 F931 # D2C4 F932 # D2C5 7459 # D2C6 F933 # D2C7 F934 # D2C8 F935 # D2C9 F936 # D2CA F937 # D2CB F938 # D2CC 99D1 # D2CD F939 # D2CE F93A # D2CF F93B # D2D0 F93C # D2D1 F93D # D2D2 F93E # D2D3 F93F # D2D4 F940 # D2D5 F941 # D2D6 F942 # D2D7 F943 # D2D8 6FC3 # D2D9 F944 # D2DA F945 # D2DB 81BF # D2DC 8FB2 # D2DD 60F1 # D2DE F946 # D2DF F947 # D2E0 8166 # D2E1 F948 # D2E2 F949 # D2E3 5C3F # D2E4 F94A # D2E5 F94B # D2E6 F94C # D2E7 F94D # D2E8 F94E # D2E9 F94F # D2EA F950 # D2EB F951 # D2EC 5AE9 # D2ED 8A25 # D2EE 677B # D2EF 7D10 # D2F0 F952 # D2F1 F953 # D2F2 F954 # D2F3 F955 # D2F4 F956 # D2F5 F957 # D2F6 80FD # D2F7 F958 # D2F8 F959 # D2F9 5C3C # D2FA 6CE5 # D2FB 533F # D2FC 6EBA # D2FD 591A # D2FE 8336 # D3A1 4E39 # D3A2 4EB6 # D3A3 4F46 # D3A4 55AE # D3A5 5718 # D3A6 58C7 # D3A7 5F56 # D3A8 65B7 # D3A9 65E6 # D3AA 6A80 # D3AB 6BB5 # D3AC 6E4D # D3AD 77ED # D3AE 7AEF # D3AF 7C1E # D3B0 7DDE # D3B1 86CB # D3B2 8892 # D3B3 9132 # D3B4 935B # D3B5 64BB # D3B6 6FBE # D3B7 737A # D3B8 75B8 # D3B9 9054 # D3BA 5556 # D3BB 574D # D3BC 61BA # D3BD 64D4 # D3BE 66C7 # D3BF 6DE1 # D3C0 6E5B # D3C1 6F6D # D3C2 6FB9 # D3C3 75F0 # D3C4 8043 # D3C5 81BD # D3C6 8541 # D3C7 8983 # D3C8 8AC7 # D3C9 8B5A # D3CA 931F # D3CB 6C93 # D3CC 7553 # D3CD 7B54 # D3CE 8E0F # D3CF 905D # D3D0 5510 # D3D1 5802 # D3D2 5858 # D3D3 5E62 # D3D4 6207 # D3D5 649E # D3D6 68E0 # D3D7 7576 # D3D8 7CD6 # D3D9 87B3 # D3DA 9EE8 # D3DB 4EE3 # D3DC 5788 # D3DD 576E # D3DE 5927 # D3DF 5C0D # D3E0 5CB1 # D3E1 5E36 # D3E2 5F85 # D3E3 6234 # D3E4 64E1 # D3E5 73B3 # D3E6 81FA # D3E7 888B # D3E8 8CB8 # D3E9 968A # D3EA 9EDB # D3EB 5B85 # D3EC 5FB7 # D3ED 60B3 # D3EE 5012 # D3EF 5200 # D3F0 5230 # D3F1 5716 # D3F2 5835 # D3F3 5857 # D3F4 5C0E # D3F5 5C60 # D3F6 5CF6 # D3F7 5D8B # D3F8 5EA6 # D3F9 5F92 # D3FA 60BC # D3FB 6311 # D3FC 6389 # D3FD 6417 # D3FE 6843 # D4A1 68F9 # D4A2 6AC2 # D4A3 6DD8 # D4A4 6E21 # D4A5 6ED4 # D4A6 6FE4 # D4A7 71FE # D4A8 76DC # D4A9 7779 # D4AA 79B1 # D4AB 7A3B # D4AC 8404 # D4AD 89A9 # D4AE 8CED # D4AF 8DF3 # D4B0 8E48 # D4B1 9003 # D4B2 9014 # D4B3 9053 # D4B4 90FD # D4B5 934D # D4B6 9676 # D4B7 97DC # D4B8 6BD2 # D4B9 7006 # D4BA 7258 # D4BB 72A2 # D4BC 7368 # D4BD 7763 # D4BE 79BF # D4BF 7BE4 # D4C0 7E9B # D4C1 8B80 # D4C2 58A9 # D4C3 60C7 # D4C4 6566 # D4C5 65FD # D4C6 66BE # D4C7 6C8C # D4C8 711E # D4C9 71C9 # D4CA 8C5A # D4CB 9813 # D4CC 4E6D # D4CD 7A81 # D4CE 4EDD # D4CF 51AC # D4D0 51CD # D4D1 52D5 # D4D2 540C # D4D3 61A7 # D4D4 6771 # D4D5 6850 # D4D6 68DF # D4D7 6D1E # D4D8 6F7C # D4D9 75BC # D4DA 77B3 # D4DB 7AE5 # D4DC 80F4 # D4DD 8463 # D4DE 9285 # D4DF 515C # D4E0 6597 # D4E1 675C # D4E2 6793 # D4E3 75D8 # D4E4 7AC7 # D4E5 8373 # D4E6 F95A # D4E7 8C46 # D4E8 9017 # D4E9 982D # D4EA 5C6F # D4EB 81C0 # D4EC 829A # D4ED 9041 # D4EE 906F # D4EF 920D # D4F0 5F97 # D4F1 5D9D # D4F2 6A59 # D4F3 71C8 # D4F4 767B # D4F5 7B49 # D4F6 85E4 # D4F7 8B04 # D4F8 9127 # D4F9 9A30 # D4FA 5587 # D4FB 61F6 # D4FC F95B # D4FD 7669 # D4FE 7F85 # D5A1 863F # D5A2 87BA # D5A3 88F8 # D5A4 908F # D5A5 F95C # D5A6 6D1B # D5A7 70D9 # D5A8 73DE # D5A9 7D61 # D5AA 843D # D5AB F95D # D5AC 916A # D5AD 99F1 # D5AE F95E # D5AF 4E82 # D5B0 5375 # D5B1 6B04 # D5B2 6B12 # D5B3 703E # D5B4 721B # D5B5 862D # D5B6 9E1E # D5B7 524C # D5B8 8FA3 # D5B9 5D50 # D5BA 64E5 # D5BB 652C # D5BC 6B16 # D5BD 6FEB # D5BE 7C43 # D5BF 7E9C # D5C0 85CD # D5C1 8964 # D5C2 89BD # D5C3 62C9 # D5C4 81D8 # D5C5 881F # D5C6 5ECA # D5C7 6717 # D5C8 6D6A # D5C9 72FC # D5CA 7405 # D5CB 746F # D5CC 8782 # D5CD 90DE # D5CE 4F86 # D5CF 5D0D # D5D0 5FA0 # D5D1 840A # D5D2 51B7 # D5D3 63A0 # D5D4 7565 # D5D5 4EAE # D5D6 5006 # D5D7 5169 # D5D8 51C9 # D5D9 6881 # D5DA 6A11 # D5DB 7CAE # D5DC 7CB1 # D5DD 7CE7 # D5DE 826F # D5DF 8AD2 # D5E0 8F1B # D5E1 91CF # D5E2 4FB6 # D5E3 5137 # D5E4 52F5 # D5E5 5442 # D5E6 5EEC # D5E7 616E # D5E8 623E # D5E9 65C5 # D5EA 6ADA # D5EB 6FFE # D5EC 792A # D5ED 85DC # D5EE 8823 # D5EF 95AD # D5F0 9A62 # D5F1 9A6A # D5F2 9E97 # D5F3 9ECE # D5F4 529B # D5F5 66C6 # D5F6 6B77 # D5F7 701D # D5F8 792B # D5F9 8F62 # D5FA 9742 # D5FB 6190 # D5FC 6200 # D5FD 6523 # D5FE 6F23 # D6A1 7149 # D6A2 7489 # D6A3 7DF4 # D6A4 806F # D6A5 84EE # D6A6 8F26 # D6A7 9023 # D6A8 934A # D6A9 51BD # D6AA 5217 # D6AB 52A3 # D6AC 6D0C # D6AD 70C8 # D6AE 88C2 # D6AF 5EC9 # D6B0 6582 # D6B1 6BAE # D6B2 6FC2 # D6B3 7C3E # D6B4 7375 # D6B5 4EE4 # D6B6 4F36 # D6B7 56F9 # D6B8 F95F # D6B9 5CBA # D6BA 5DBA # D6BB 601C # D6BC 73B2 # D6BD 7B2D # D6BE 7F9A # D6BF 7FCE # D6C0 8046 # D6C1 901E # D6C2 9234 # D6C3 96F6 # D6C4 9748 # D6C5 9818 # D6C6 9F61 # D6C7 4F8B # D6C8 6FA7 # D6C9 79AE # D6CA 91B4 # D6CB 96B7 # D6CC 52DE # D6CD F960 # D6CE 6488 # D6CF 64C4 # D6D0 6AD3 # D6D1 6F5E # D6D2 7018 # D6D3 7210 # D6D4 76E7 # D6D5 8001 # D6D6 8606 # D6D7 865C # D6D8 8DEF # D6D9 8F05 # D6DA 9732 # D6DB 9B6F # D6DC 9DFA # D6DD 9E75 # D6DE 788C # D6DF 797F # D6E0 7DA0 # D6E1 83C9 # D6E2 9304 # D6E3 9E7F # D6E4 9E93 # D6E5 8AD6 # D6E6 58DF # D6E7 5F04 # D6E8 6727 # D6E9 7027 # D6EA 74CF # D6EB 7C60 # D6EC 807E # D6ED 5121 # D6EE 7028 # D6EF 7262 # D6F0 78CA # D6F1 8CC2 # D6F2 8CDA # D6F3 8CF4 # D6F4 96F7 # D6F5 4E86 # D6F6 50DA # D6F7 5BEE # D6F8 5ED6 # D6F9 6599 # D6FA 71CE # D6FB 7642 # D6FC 77AD # D6FD 804A # D6FE 84FC # D7A1 907C # D7A2 9B27 # D7A3 9F8D # D7A4 58D8 # D7A5 5A41 # D7A6 5C62 # D7A7 6A13 # D7A8 6DDA # D7A9 6F0F # D7AA 763B # D7AB 7D2F # D7AC 7E37 # D7AD 851E # D7AE 8938 # D7AF 93E4 # D7B0 964B # D7B1 5289 # D7B2 65D2 # D7B3 67F3 # D7B4 69B4 # D7B5 6D41 # D7B6 6E9C # D7B7 700F # D7B8 7409 # D7B9 7460 # D7BA 7559 # D7BB 7624 # D7BC 786B # D7BD 8B2C # D7BE 985E # D7BF 516D # D7C0 622E # D7C1 9678 # D7C2 4F96 # D7C3 502B # D7C4 5D19 # D7C5 6DEA # D7C6 7DB8 # D7C7 8F2A # D7C8 5F8B # D7C9 6144 # D7CA 6817 # D7CB F961 # D7CC 9686 # D7CD 52D2 # D7CE 808B # D7CF 51DC # D7D0 51CC # D7D1 695E # D7D2 7A1C # D7D3 7DBE # D7D4 83F1 # D7D5 9675 # D7D6 4FDA # D7D7 5229 # D7D8 5398 # D7D9 540F # D7DA 550E # D7DB 5C65 # D7DC 60A7 # D7DD 674E # D7DE 68A8 # D7DF 6D6C # D7E0 7281 # D7E1 72F8 # D7E2 7406 # D7E3 7483 # D7E4 F962 # D7E5 75E2 # D7E6 7C6C # D7E7 7F79 # D7E8 7FB8 # D7E9 8389 # D7EA 88CF # D7EB 88E1 # D7EC 91CC # D7ED 91D0 # D7EE 96E2 # D7EF 9BC9 # D7F0 541D # D7F1 6F7E # D7F2 71D0 # D7F3 7498 # D7F4 85FA # D7F5 8EAA # D7F6 96A3 # D7F7 9C57 # D7F8 9E9F # D7F9 6797 # D7FA 6DCB # D7FB 7433 # D7FC 81E8 # D7FD 9716 # D7FE 782C # D8A1 7ACB # D8A2 7B20 # D8A3 7C92 # D8A4 6469 # D8A5 746A # D8A6 75F2 # D8A7 78BC # D8A8 78E8 # D8A9 99AC # D8AA 9B54 # D8AB 9EBB # D8AC 5BDE # D8AD 5E55 # D8AE 6F20 # D8AF 819C # D8B0 83AB # D8B1 9088 # D8B2 4E07 # D8B3 534D # D8B4 5A29 # D8B5 5DD2 # D8B6 5F4E # D8B7 6162 # D8B8 633D # D8B9 6669 # D8BA 66FC # D8BB 6EFF # D8BC 6F2B # D8BD 7063 # D8BE 779E # D8BF 842C # D8C0 8513 # D8C1 883B # D8C2 8F13 # D8C3 9945 # D8C4 9C3B # D8C5 551C # D8C6 62B9 # D8C7 672B # D8C8 6CAB # D8C9 8309 # D8CA 896A # D8CB 977A # D8CC 4EA1 # D8CD 5984 # D8CE 5FD8 # D8CF 5FD9 # D8D0 671B # D8D1 7DB2 # D8D2 7F54 # D8D3 8292 # D8D4 832B # D8D5 83BD # D8D6 8F1E # D8D7 9099 # D8D8 57CB # D8D9 59B9 # D8DA 5A92 # D8DB 5BD0 # D8DC 6627 # D8DD 679A # D8DE 6885 # D8DF 6BCF # D8E0 7164 # D8E1 7F75 # D8E2 8CB7 # D8E3 8CE3 # D8E4 9081 # D8E5 9B45 # D8E6 8108 # D8E7 8C8A # D8E8 964C # D8E9 9A40 # D8EA 9EA5 # D8EB 5B5F # D8EC 6C13 # D8ED 731B # D8EE 76F2 # D8EF 76DF # D8F0 840C # D8F1 51AA # D8F2 8993 # D8F3 514D # D8F4 5195 # D8F5 52C9 # D8F6 68C9 # D8F7 6C94 # D8F8 7704 # D8F9 7720 # D8FA 7DBF # D8FB 7DEC # D8FC 9762 # D8FD 9EB5 # D8FE 6EC5 # D9A1 8511 # D9A2 51A5 # D9A3 540D # D9A4 547D # D9A5 660E # D9A6 669D # D9A7 6927 # D9A8 6E9F # D9A9 76BF # D9AA 7791 # D9AB 8317 # D9AC 84C2 # D9AD 879F # D9AE 9169 # D9AF 9298 # D9B0 9CF4 # D9B1 8882 # D9B2 4FAE # D9B3 5192 # D9B4 52DF # D9B5 59C6 # D9B6 5E3D # D9B7 6155 # D9B8 6478 # D9B9 6479 # D9BA 66AE # D9BB 67D0 # D9BC 6A21 # D9BD 6BCD # D9BE 6BDB # D9BF 725F # D9C0 7261 # D9C1 7441 # D9C2 7738 # D9C3 77DB # D9C4 8017 # D9C5 82BC # D9C6 8305 # D9C7 8B00 # D9C8 8B28 # D9C9 8C8C # D9CA 6728 # D9CB 6C90 # D9CC 7267 # D9CD 76EE # D9CE 7766 # D9CF 7A46 # D9D0 9DA9 # D9D1 6B7F # D9D2 6C92 # D9D3 5922 # D9D4 6726 # D9D5 8499 # D9D6 536F # D9D7 5893 # D9D8 5999 # D9D9 5EDF # D9DA 63CF # D9DB 6634 # D9DC 6773 # D9DD 6E3A # D9DE 732B # D9DF 7AD7 # D9E0 82D7 # D9E1 9328 # D9E2 52D9 # D9E3 5DEB # D9E4 61AE # D9E5 61CB # D9E6 620A # D9E7 62C7 # D9E8 64AB # D9E9 65E0 # D9EA 6959 # D9EB 6B66 # D9EC 6BCB # D9ED 7121 # D9EE 73F7 # D9EF 755D # D9F0 7E46 # D9F1 821E # D9F2 8302 # D9F3 856A # D9F4 8AA3 # D9F5 8CBF # D9F6 9727 # D9F7 9D61 # D9F8 58A8 # D9F9 9ED8 # D9FA 5011 # D9FB 520E # D9FC 543B # D9FD 554F # D9FE 6587 # DAA1 6C76 # DAA2 7D0A # DAA3 7D0B # DAA4 805E # DAA5 868A # DAA6 9580 # DAA7 96EF # DAA8 52FF # DAA9 6C95 # DAAA 7269 # DAAB 5473 # DAAC 5A9A # DAAD 5C3E # DAAE 5D4B # DAAF 5F4C # DAB0 5FAE # DAB1 672A # DAB2 68B6 # DAB3 6963 # DAB4 6E3C # DAB5 6E44 # DAB6 7709 # DAB7 7C73 # DAB8 7F8E # DAB9 8587 # DABA 8B0E # DABB 8FF7 # DABC 9761 # DABD 9EF4 # DABE 5CB7 # DABF 60B6 # DAC0 610D # DAC1 61AB # DAC2 654F # DAC3 65FB # DAC4 65FC # DAC5 6C11 # DAC6 6CEF # DAC7 739F # DAC8 73C9 # DAC9 7DE1 # DACA 9594 # DACB 5BC6 # DACC 871C # DACD 8B10 # DACE 525D # DACF 535A # DAD0 62CD # DAD1 640F # DAD2 64B2 # DAD3 6734 # DAD4 6A38 # DAD5 6CCA # DAD6 73C0 # DAD7 749E # DAD8 7B94 # DAD9 7C95 # DADA 7E1B # DADB 818A # DADC 8236 # DADD 8584 # DADE 8FEB # DADF 96F9 # DAE0 99C1 # DAE1 4F34 # DAE2 534A # DAE3 53CD # DAE4 53DB # DAE5 62CC # DAE6 642C # DAE7 6500 # DAE8 6591 # DAE9 69C3 # DAEA 6CEE # DAEB 6F58 # DAEC 73ED # DAED 7554 # DAEE 7622 # DAEF 76E4 # DAF0 76FC # DAF1 78D0 # DAF2 78FB # DAF3 792C # DAF4 7D46 # DAF5 822C # DAF6 87E0 # DAF7 8FD4 # DAF8 9812 # DAF9 98EF # DAFA 52C3 # DAFB 62D4 # DAFC 64A5 # DAFD 6E24 # DAFE 6F51 # DBA1 767C # DBA2 8DCB # DBA3 91B1 # DBA4 9262 # DBA5 9AEE # DBA6 9B43 # DBA7 5023 # DBA8 508D # DBA9 574A # DBAA 59A8 # DBAB 5C28 # DBAC 5E47 # DBAD 5F77 # DBAE 623F # DBAF 653E # DBB0 65B9 # DBB1 65C1 # DBB2 6609 # DBB3 678B # DBB4 699C # DBB5 6EC2 # DBB6 78C5 # DBB7 7D21 # DBB8 80AA # DBB9 8180 # DBBA 822B # DBBB 82B3 # DBBC 84A1 # DBBD 868C # DBBE 8A2A # DBBF 8B17 # DBC0 90A6 # DBC1 9632 # DBC2 9F90 # DBC3 500D # DBC4 4FF3 # DBC5 F963 # DBC6 57F9 # DBC7 5F98 # DBC8 62DC # DBC9 6392 # DBCA 676F # DBCB 6E43 # DBCC 7119 # DBCD 76C3 # DBCE 80CC # DBCF 80DA # DBD0 88F4 # DBD1 88F5 # DBD2 8919 # DBD3 8CE0 # DBD4 8F29 # DBD5 914D # DBD6 966A # DBD7 4F2F # DBD8 4F70 # DBD9 5E1B # DBDA 67CF # DBDB 6822 # DBDC 767D # DBDD 767E # DBDE 9B44 # DBDF 5E61 # DBE0 6A0A # DBE1 7169 # DBE2 71D4 # DBE3 756A # DBE4 F964 # DBE5 7E41 # DBE6 8543 # DBE7 85E9 # DBE8 98DC # DBE9 4F10 # DBEA 7B4F # DBEB 7F70 # DBEC 95A5 # DBED 51E1 # DBEE 5E06 # DBEF 68B5 # DBF0 6C3E # DBF1 6C4E # DBF2 6CDB # DBF3 72AF # DBF4 7BC4 # DBF5 8303 # DBF6 6CD5 # DBF7 743A # DBF8 50FB # DBF9 5288 # DBFA 58C1 # DBFB 64D8 # DBFC 6A97 # DBFD 74A7 # DBFE 7656 # DCA1 78A7 # DCA2 8617 # DCA3 95E2 # DCA4 9739 # DCA5 F965 # DCA6 535E # DCA7 5F01 # DCA8 8B8A # DCA9 8FA8 # DCAA 8FAF # DCAB 908A # DCAC 5225 # DCAD 77A5 # DCAE 9C49 # DCAF 9F08 # DCB0 4E19 # DCB1 5002 # DCB2 5175 # DCB3 5C5B # DCB4 5E77 # DCB5 661E # DCB6 663A # DCB7 67C4 # DCB8 68C5 # DCB9 70B3 # DCBA 7501 # DCBB 75C5 # DCBC 79C9 # DCBD 7ADD # DCBE 8F27 # DCBF 9920 # DCC0 9A08 # DCC1 4FDD # DCC2 5821 # DCC3 5831 # DCC4 5BF6 # DCC5 666E # DCC6 6B65 # DCC7 6D11 # DCC8 6E7A # DCC9 6F7D # DCCA 73E4 # DCCB 752B # DCCC 83E9 # DCCD 88DC # DCCE 8913 # DCCF 8B5C # DCD0 8F14 # DCD1 4F0F # DCD2 50D5 # DCD3 5310 # DCD4 535C # DCD5 5B93 # DCD6 5FA9 # DCD7 670D # DCD8 798F # DCD9 8179 # DCDA 832F # DCDB 8514 # DCDC 8907 # DCDD 8986 # DCDE 8F39 # DCDF 8F3B # DCE0 99A5 # DCE1 9C12 # DCE2 672C # DCE3 4E76 # DCE4 4FF8 # DCE5 5949 # DCE6 5C01 # DCE7 5CEF # DCE8 5CF0 # DCE9 6367 # DCEA 68D2 # DCEB 70FD # DCEC 71A2 # DCED 742B # DCEE 7E2B # DCEF 84EC # DCF0 8702 # DCF1 9022 # DCF2 92D2 # DCF3 9CF3 # DCF4 4E0D # DCF5 4ED8 # DCF6 4FEF # DCF7 5085 # DCF8 5256 # DCF9 526F # DCFA 5426 # DCFB 5490 # DCFC 57E0 # DCFD 592B # DCFE 5A66 # DDA1 5B5A # DDA2 5B75 # DDA3 5BCC # DDA4 5E9C # DDA5 F966 # DDA6 6276 # DDA7 6577 # DDA8 65A7 # DDA9 6D6E # DDAA 6EA5 # DDAB 7236 # DDAC 7B26 # DDAD 7C3F # DDAE 7F36 # DDAF 8150 # DDB0 8151 # DDB1 819A # DDB2 8240 # DDB3 8299 # DDB4 83A9 # DDB5 8A03 # DDB6 8CA0 # DDB7 8CE6 # DDB8 8CFB # DDB9 8D74 # DDBA 8DBA # DDBB 90E8 # DDBC 91DC # DDBD 961C # DDBE 9644 # DDBF 99D9 # DDC0 9CE7 # DDC1 5317 # DDC2 5206 # DDC3 5429 # DDC4 5674 # DDC5 58B3 # DDC6 5954 # DDC7 596E # DDC8 5FFF # DDC9 61A4 # DDCA 626E # DDCB 6610 # DDCC 6C7E # DDCD 711A # DDCE 76C6 # DDCF 7C89 # DDD0 7CDE # DDD1 7D1B # DDD2 82AC # DDD3 8CC1 # DDD4 96F0 # DDD5 F967 # DDD6 4F5B # DDD7 5F17 # DDD8 5F7F # DDD9 62C2 # DDDA 5D29 # DDDB 670B # DDDC 68DA # DDDD 787C # DDDE 7E43 # DDDF 9D6C # DDE0 4E15 # DDE1 5099 # DDE2 5315 # DDE3 532A # DDE4 5351 # DDE5 5983 # DDE6 5A62 # DDE7 5E87 # DDE8 60B2 # DDE9 618A # DDEA 6249 # DDEB 6279 # DDEC 6590 # DDED 6787 # DDEE 69A7 # DDEF 6BD4 # DDF0 6BD6 # DDF1 6BD7 # DDF2 6BD8 # DDF3 6CB8 # DDF4 F968 # DDF5 7435 # DDF6 75FA # DDF7 7812 # DDF8 7891 # DDF9 79D5 # DDFA 79D8 # DDFB 7C83 # DDFC 7DCB # DDFD 7FE1 # DDFE 80A5 # DEA1 813E # DEA2 81C2 # DEA3 83F2 # DEA4 871A # DEA5 88E8 # DEA6 8AB9 # DEA7 8B6C # DEA8 8CBB # DEA9 9119 # DEAA 975E # DEAB 98DB # DEAC 9F3B # DEAD 56AC # DEAE 5B2A # DEAF 5F6C # DEB0 658C # DEB1 6AB3 # DEB2 6BAF # DEB3 6D5C # DEB4 6FF1 # DEB5 7015 # DEB6 725D # DEB7 73AD # DEB8 8CA7 # DEB9 8CD3 # DEBA 983B # DEBB 6191 # DEBC 6C37 # DEBD 8058 # DEBE 9A01 # DEBF 4E4D # DEC0 4E8B # DEC1 4E9B # DEC2 4ED5 # DEC3 4F3A # DEC4 4F3C # DEC5 4F7F # DEC6 4FDF # DEC7 50FF # DEC8 53F2 # DEC9 53F8 # DECA 5506 # DECB 55E3 # DECC 56DB # DECD 58EB # DECE 5962 # DECF 5A11 # DED0 5BEB # DED1 5BFA # DED2 5C04 # DED3 5DF3 # DED4 5E2B # DED5 5F99 # DED6 601D # DED7 6368 # DED8 659C # DED9 65AF # DEDA 67F6 # DEDB 67FB # DEDC 68AD # DEDD 6B7B # DEDE 6C99 # DEDF 6CD7 # DEE0 6E23 # DEE1 7009 # DEE2 7345 # DEE3 7802 # DEE4 793E # DEE5 7940 # DEE6 7960 # DEE7 79C1 # DEE8 7BE9 # DEE9 7D17 # DEEA 7D72 # DEEB 8086 # DEEC 820D # DEED 838E # DEEE 84D1 # DEEF 86C7 # DEF0 88DF # DEF1 8A50 # DEF2 8A5E # DEF3 8B1D # DEF4 8CDC # DEF5 8D66 # DEF6 8FAD # DEF7 90AA # DEF8 98FC # DEF9 99DF # DEFA 9E9D # DEFB 524A # DEFC F969 # DEFD 6714 # DEFE F96A # DFA1 5098 # DFA2 522A # DFA3 5C71 # DFA4 6563 # DFA5 6C55 # DFA6 73CA # DFA7 7523 # DFA8 759D # DFA9 7B97 # DFAA 849C # DFAB 9178 # DFAC 9730 # DFAD 4E77 # DFAE 6492 # DFAF 6BBA # DFB0 715E # DFB1 85A9 # DFB2 4E09 # DFB3 F96B # DFB4 6749 # DFB5 68EE # DFB6 6E17 # DFB7 829F # DFB8 8518 # DFB9 886B # DFBA 63F7 # DFBB 6F81 # DFBC 9212 # DFBD 98AF # DFBE 4E0A # DFBF 50B7 # DFC0 50CF # DFC1 511F # DFC2 5546 # DFC3 55AA # DFC4 5617 # DFC5 5B40 # DFC6 5C19 # DFC7 5CE0 # DFC8 5E38 # DFC9 5E8A # DFCA 5EA0 # DFCB 5EC2 # DFCC 60F3 # DFCD 6851 # DFCE 6A61 # DFCF 6E58 # DFD0 723D # DFD1 7240 # DFD2 72C0 # DFD3 76F8 # DFD4 7965 # DFD5 7BB1 # DFD6 7FD4 # DFD7 88F3 # DFD8 89F4 # DFD9 8A73 # DFDA 8C61 # DFDB 8CDE # DFDC 971C # DFDD 585E # DFDE 74BD # DFDF 8CFD # DFE0 55C7 # DFE1 F96C # DFE2 7A61 # DFE3 7D22 # DFE4 8272 # DFE5 7272 # DFE6 751F # DFE7 7525 # DFE8 F96D # DFE9 7B19 # DFEA 5885 # DFEB 58FB # DFEC 5DBC # DFED 5E8F # DFEE 5EB6 # DFEF 5F90 # DFF0 6055 # DFF1 6292 # DFF2 637F # DFF3 654D # DFF4 6691 # DFF5 66D9 # DFF6 66F8 # DFF7 6816 # DFF8 68F2 # DFF9 7280 # DFFA 745E # DFFB 7B6E # DFFC 7D6E # DFFD 7DD6 # DFFE 7F72 # E0A1 80E5 # E0A2 8212 # E0A3 85AF # E0A4 897F # E0A5 8A93 # E0A6 901D # E0A7 92E4 # E0A8 9ECD # E0A9 9F20 # E0AA 5915 # E0AB 596D # E0AC 5E2D # E0AD 60DC # E0AE 6614 # E0AF 6673 # E0B0 6790 # E0B1 6C50 # E0B2 6DC5 # E0B3 6F5F # E0B4 77F3 # E0B5 78A9 # E0B6 84C6 # E0B7 91CB # E0B8 932B # E0B9 4ED9 # E0BA 50CA # E0BB 5148 # E0BC 5584 # E0BD 5B0B # E0BE 5BA3 # E0BF 6247 # E0C0 657E # E0C1 65CB # E0C2 6E32 # E0C3 717D # E0C4 7401 # E0C5 7444 # E0C6 7487 # E0C7 74BF # E0C8 766C # E0C9 79AA # E0CA 7DDA # E0CB 7E55 # E0CC 7FA8 # E0CD 817A # E0CE 81B3 # E0CF 8239 # E0D0 861A # E0D1 87EC # E0D2 8A75 # E0D3 8DE3 # E0D4 9078 # E0D5 9291 # E0D6 9425 # E0D7 994D # E0D8 9BAE # E0D9 5368 # E0DA 5C51 # E0DB 6954 # E0DC 6CC4 # E0DD 6D29 # E0DE 6E2B # E0DF 820C # E0E0 859B # E0E1 893B # E0E2 8A2D # E0E3 8AAA # E0E4 96EA # E0E5 9F67 # E0E6 5261 # E0E7 66B9 # E0E8 6BB2 # E0E9 7E96 # E0EA 87FE # E0EB 8D0D # E0EC 9583 # E0ED 965D # E0EE 651D # E0EF 6D89 # E0F0 71EE # E0F1 F96E # E0F2 57CE # E0F3 59D3 # E0F4 5BAC # E0F5 6027 # E0F6 60FA # E0F7 6210 # E0F8 661F # E0F9 665F # E0FA 7329 # E0FB 73F9 # E0FC 76DB # E0FD 7701 # E0FE 7B6C # E1A1 8056 # E1A2 8072 # E1A3 8165 # E1A4 8AA0 # E1A5 9192 # E1A6 4E16 # E1A7 52E2 # E1A8 6B72 # E1A9 6D17 # E1AA 7A05 # E1AB 7B39 # E1AC 7D30 # E1AD F96F # E1AE 8CB0 # E1AF 53EC # E1B0 562F # E1B1 5851 # E1B2 5BB5 # E1B3 5C0F # E1B4 5C11 # E1B5 5DE2 # E1B6 6240 # E1B7 6383 # E1B8 6414 # E1B9 662D # E1BA 68B3 # E1BB 6CBC # E1BC 6D88 # E1BD 6EAF # E1BE 701F # E1BF 70A4 # E1C0 71D2 # E1C1 7526 # E1C2 758F # E1C3 758E # E1C4 7619 # E1C5 7B11 # E1C6 7BE0 # E1C7 7C2B # E1C8 7D20 # E1C9 7D39 # E1CA 852C # E1CB 856D # E1CC 8607 # E1CD 8A34 # E1CE 900D # E1CF 9061 # E1D0 90B5 # E1D1 92B7 # E1D2 97F6 # E1D3 9A37 # E1D4 4FD7 # E1D5 5C6C # E1D6 675F # E1D7 6D91 # E1D8 7C9F # E1D9 7E8C # E1DA 8B16 # E1DB 8D16 # E1DC 901F # E1DD 5B6B # E1DE 5DFD # E1DF 640D # E1E0 84C0 # E1E1 905C # E1E2 98E1 # E1E3 7387 # E1E4 5B8B # E1E5 609A # E1E6 677E # E1E7 6DDE # E1E8 8A1F # E1E9 8AA6 # E1EA 9001 # E1EB 980C # E1EC 5237 # E1ED F970 # E1EE 7051 # E1EF 788E # E1F0 9396 # E1F1 8870 # E1F2 91D7 # E1F3 4FEE # E1F4 53D7 # E1F5 55FD # E1F6 56DA # E1F7 5782 # E1F8 58FD # E1F9 5AC2 # E1FA 5B88 # E1FB 5CAB # E1FC 5CC0 # E1FD 5E25 # E1FE 6101 # E2A1 620D # E2A2 624B # E2A3 6388 # E2A4 641C # E2A5 6536 # E2A6 6578 # E2A7 6A39 # E2A8 6B8A # E2A9 6C34 # E2AA 6D19 # E2AB 6F31 # E2AC 71E7 # E2AD 72E9 # E2AE 7378 # E2AF 7407 # E2B0 74B2 # E2B1 7626 # E2B2 7761 # E2B3 79C0 # E2B4 7A57 # E2B5 7AEA # E2B6 7CB9 # E2B7 7D8F # E2B8 7DAC # E2B9 7E61 # E2BA 7F9E # E2BB 8129 # E2BC 8331 # E2BD 8490 # E2BE 84DA # E2BF 85EA # E2C0 8896 # E2C1 8AB0 # E2C2 8B90 # E2C3 8F38 # E2C4 9042 # E2C5 9083 # E2C6 916C # E2C7 9296 # E2C8 92B9 # E2C9 968B # E2CA 96A7 # E2CB 96A8 # E2CC 96D6 # E2CD 9700 # E2CE 9808 # E2CF 9996 # E2D0 9AD3 # E2D1 9B1A # E2D2 53D4 # E2D3 587E # E2D4 5919 # E2D5 5B70 # E2D6 5BBF # E2D7 6DD1 # E2D8 6F5A # E2D9 719F # E2DA 7421 # E2DB 74B9 # E2DC 8085 # E2DD 83FD # E2DE 5DE1 # E2DF 5F87 # E2E0 5FAA # E2E1 6042 # E2E2 65EC # E2E3 6812 # E2E4 696F # E2E5 6A53 # E2E6 6B89 # E2E7 6D35 # E2E8 6DF3 # E2E9 73E3 # E2EA 76FE # E2EB 77AC # E2EC 7B4D # E2ED 7D14 # E2EE 8123 # E2EF 821C # E2F0 8340 # E2F1 84F4 # E2F2 8563 # E2F3 8A62 # E2F4 8AC4 # E2F5 9187 # E2F6 931E # E2F7 9806 # E2F8 99B4 # E2F9 620C # E2FA 8853 # E2FB 8FF0 # E2FC 9265 # E2FD 5D07 # E2FE 5D27 # E3A1 5D69 # E3A2 745F # E3A3 819D # E3A4 8768 # E3A5 6FD5 # E3A6 62FE # E3A7 7FD2 # E3A8 8936 # E3A9 8972 # E3AA 4E1E # E3AB 4E58 # E3AC 50E7 # E3AD 52DD # E3AE 5347 # E3AF 627F # E3B0 6607 # E3B1 7E69 # E3B2 8805 # E3B3 965E # E3B4 4F8D # E3B5 5319 # E3B6 5636 # E3B7 59CB # E3B8 5AA4 # E3B9 5C38 # E3BA 5C4E # E3BB 5C4D # E3BC 5E02 # E3BD 5F11 # E3BE 6043 # E3BF 65BD # E3C0 662F # E3C1 6642 # E3C2 67BE # E3C3 67F4 # E3C4 731C # E3C5 77E2 # E3C6 793A # E3C7 7FC5 # E3C8 8494 # E3C9 84CD # E3CA 8996 # E3CB 8A66 # E3CC 8A69 # E3CD 8AE1 # E3CE 8C55 # E3CF 8C7A # E3D0 57F4 # E3D1 5BD4 # E3D2 5F0F # E3D3 606F # E3D4 62ED # E3D5 690D # E3D6 6B96 # E3D7 6E5C # E3D8 7184 # E3D9 7BD2 # E3DA 8755 # E3DB 8B58 # E3DC 8EFE # E3DD 98DF # E3DE 98FE # E3DF 4F38 # E3E0 4F81 # E3E1 4FE1 # E3E2 547B # E3E3 5A20 # E3E4 5BB8 # E3E5 613C # E3E6 65B0 # E3E7 6668 # E3E8 71FC # E3E9 7533 # E3EA 795E # E3EB 7D33 # E3EC 814E # E3ED 81E3 # E3EE 8398 # E3EF 85AA # E3F0 85CE # E3F1 8703 # E3F2 8A0A # E3F3 8EAB # E3F4 8F9B # E3F5 F971 # E3F6 8FC5 # E3F7 5931 # E3F8 5BA4 # E3F9 5BE6 # E3FA 6089 # E3FB 5BE9 # E3FC 5C0B # E3FD 5FC3 # E3FE 6C81 # E4A1 F972 # E4A2 6DF1 # E4A3 700B # E4A4 751A # E4A5 82AF # E4A6 8AF6 # E4A7 4EC0 # E4A8 5341 # E4A9 F973 # E4AA 96D9 # E4AB 6C0F # E4AC 4E9E # E4AD 4FC4 # E4AE 5152 # E4AF 555E # E4B0 5A25 # E4B1 5CE8 # E4B2 6211 # E4B3 7259 # E4B4 82BD # E4B5 83AA # E4B6 86FE # E4B7 8859 # E4B8 8A1D # E4B9 963F # E4BA 96C5 # E4BB 9913 # E4BC 9D09 # E4BD 9D5D # E4BE 580A # E4BF 5CB3 # E4C0 5DBD # E4C1 5E44 # E4C2 60E1 # E4C3 6115 # E4C4 63E1 # E4C5 6A02 # E4C6 6E25 # E4C7 9102 # E4C8 9354 # E4C9 984E # E4CA 9C10 # E4CB 9F77 # E4CC 5B89 # E4CD 5CB8 # E4CE 6309 # E4CF 664F # E4D0 6848 # E4D1 773C # E4D2 96C1 # E4D3 978D # E4D4 9854 # E4D5 9B9F # E4D6 65A1 # E4D7 8B01 # E4D8 8ECB # E4D9 95BC # E4DA 5535 # E4DB 5CA9 # E4DC 5DD6 # E4DD 5EB5 # E4DE 6697 # E4DF 764C # E4E0 83F4 # E4E1 95C7 # E4E2 58D3 # E4E3 62BC # E4E4 72CE # E4E5 9D28 # E4E6 4EF0 # E4E7 592E # E4E8 600F # E4E9 663B # E4EA 6B83 # E4EB 79E7 # E4EC 9D26 # E4ED 5393 # E4EE 54C0 # E4EF 57C3 # E4F0 5D16 # E4F1 611B # E4F2 66D6 # E4F3 6DAF # E4F4 788D # E4F5 827E # E4F6 9698 # E4F7 9744 # E4F8 5384 # E4F9 627C # E4FA 6396 # E4FB 6DB2 # E4FC 7E0A # E4FD 814B # E4FE 984D # E5A1 6AFB # E5A2 7F4C # E5A3 9DAF # E5A4 9E1A # E5A5 4E5F # E5A6 503B # E5A7 51B6 # E5A8 591C # E5A9 60F9 # E5AA 63F6 # E5AB 6930 # E5AC 723A # E5AD 8036 # E5AE F974 # E5AF 91CE # E5B0 5F31 # E5B1 F975 # E5B2 F976 # E5B3 7D04 # E5B4 82E5 # E5B5 846F # E5B6 84BB # E5B7 85E5 # E5B8 8E8D # E5B9 F977 # E5BA 4F6F # E5BB F978 # E5BC F979 # E5BD 58E4 # E5BE 5B43 # E5BF 6059 # E5C0 63DA # E5C1 6518 # E5C2 656D # E5C3 6698 # E5C4 F97A # E5C5 694A # E5C6 6A23 # E5C7 6D0B # E5C8 7001 # E5C9 716C # E5CA 75D2 # E5CB 760D # E5CC 79B3 # E5CD 7A70 # E5CE F97B # E5CF 7F8A # E5D0 F97C # E5D1 8944 # E5D2 F97D # E5D3 8B93 # E5D4 91C0 # E5D5 967D # E5D6 F97E # E5D7 990A # E5D8 5704 # E5D9 5FA1 # E5DA 65BC # E5DB 6F01 # E5DC 7600 # E5DD 79A6 # E5DE 8A9E # E5DF 99AD # E5E0 9B5A # E5E1 9F6C # E5E2 5104 # E5E3 61B6 # E5E4 6291 # E5E5 6A8D # E5E6 81C6 # E5E7 5043 # E5E8 5830 # E5E9 5F66 # E5EA 7109 # E5EB 8A00 # E5EC 8AFA # E5ED 5B7C # E5EE 8616 # E5EF 4FFA # E5F0 513C # E5F1 56B4 # E5F2 5944 # E5F3 63A9 # E5F4 6DF9 # E5F5 5DAA # E5F6 696D # E5F7 5186 # E5F8 4E88 # E5F9 4F59 # E5FA F97F # E5FB F980 # E5FC F981 # E5FD 5982 # E5FE F982 # E6A1 F983 # E6A2 6B5F # E6A3 6C5D # E6A4 F984 # E6A5 74B5 # E6A6 7916 # E6A7 F985 # E6A8 8207 # E6A9 8245 # E6AA 8339 # E6AB 8F3F # E6AC 8F5D # E6AD F986 # E6AE 9918 # E6AF F987 # E6B0 F988 # E6B1 F989 # E6B2 4EA6 # E6B3 F98A # E6B4 57DF # E6B5 5F79 # E6B6 6613 # E6B7 F98B # E6B8 F98C # E6B9 75AB # E6BA 7E79 # E6BB 8B6F # E6BC F98D # E6BD 9006 # E6BE 9A5B # E6BF 56A5 # E6C0 5827 # E6C1 59F8 # E6C2 5A1F # E6C3 5BB4 # E6C4 F98E # E6C5 5EF6 # E6C6 F98F # E6C7 F990 # E6C8 6350 # E6C9 633B # E6CA F991 # E6CB 693D # E6CC 6C87 # E6CD 6CBF # E6CE 6D8E # E6CF 6D93 # E6D0 6DF5 # E6D1 6F14 # E6D2 F992 # E6D3 70DF # E6D4 7136 # E6D5 7159 # E6D6 F993 # E6D7 71C3 # E6D8 71D5 # E6D9 F994 # E6DA 784F # E6DB 786F # E6DC F995 # E6DD 7B75 # E6DE 7DE3 # E6DF F996 # E6E0 7E2F # E6E1 F997 # E6E2 884D # E6E3 8EDF # E6E4 F998 # E6E5 F999 # E6E6 F99A # E6E7 925B # E6E8 F99B # E6E9 9CF6 # E6EA F99C # E6EB F99D # E6EC F99E # E6ED 6085 # E6EE 6D85 # E6EF F99F # E6F0 71B1 # E6F1 F9A0 # E6F2 F9A1 # E6F3 95B1 # E6F4 53AD # E6F5 F9A2 # E6F6 F9A3 # E6F7 F9A4 # E6F8 67D3 # E6F9 F9A5 # E6FA 708E # E6FB 7130 # E6FC 7430 # E6FD 8276 # E6FE 82D2 # E7A1 F9A6 # E7A2 95BB # E7A3 9AE5 # E7A4 9E7D # E7A5 66C4 # E7A6 F9A7 # E7A7 71C1 # E7A8 8449 # E7A9 F9A8 # E7AA F9A9 # E7AB 584B # E7AC F9AA # E7AD F9AB # E7AE 5DB8 # E7AF 5F71 # E7B0 F9AC # E7B1 6620 # E7B2 668E # E7B3 6979 # E7B4 69AE # E7B5 6C38 # E7B6 6CF3 # E7B7 6E36 # E7B8 6F41 # E7B9 6FDA # E7BA 701B # E7BB 702F # E7BC 7150 # E7BD 71DF # E7BE 7370 # E7BF F9AD # E7C0 745B # E7C1 F9AE # E7C2 74D4 # E7C3 76C8 # E7C4 7A4E # E7C5 7E93 # E7C6 F9AF # E7C7 F9B0 # E7C8 82F1 # E7C9 8A60 # E7CA 8FCE # E7CB F9B1 # E7CC 9348 # E7CD F9B2 # E7CE 9719 # E7CF F9B3 # E7D0 F9B4 # E7D1 4E42 # E7D2 502A # E7D3 F9B5 # E7D4 5208 # E7D5 53E1 # E7D6 66F3 # E7D7 6C6D # E7D8 6FCA # E7D9 730A # E7DA 777F # E7DB 7A62 # E7DC 82AE # E7DD 85DD # E7DE 8602 # E7DF F9B6 # E7E0 88D4 # E7E1 8A63 # E7E2 8B7D # E7E3 8C6B # E7E4 F9B7 # E7E5 92B3 # E7E6 F9B8 # E7E7 9713 # E7E8 9810 # E7E9 4E94 # E7EA 4F0D # E7EB 4FC9 # E7EC 50B2 # E7ED 5348 # E7EE 543E # E7EF 5433 # E7F0 55DA # E7F1 5862 # E7F2 58BA # E7F3 5967 # E7F4 5A1B # E7F5 5BE4 # E7F6 609F # E7F7 F9B9 # E7F8 61CA # E7F9 6556 # E7FA 65FF # E7FB 6664 # E7FC 68A7 # E7FD 6C5A # E7FE 6FB3 # E8A1 70CF # E8A2 71AC # E8A3 7352 # E8A4 7B7D # E8A5 8708 # E8A6 8AA4 # E8A7 9C32 # E8A8 9F07 # E8A9 5C4B # E8AA 6C83 # E8AB 7344 # E8AC 7389 # E8AD 923A # E8AE 6EAB # E8AF 7465 # E8B0 761F # E8B1 7A69 # E8B2 7E15 # E8B3 860A # E8B4 5140 # E8B5 58C5 # E8B6 64C1 # E8B7 74EE # E8B8 7515 # E8B9 7670 # E8BA 7FC1 # E8BB 9095 # E8BC 96CD # E8BD 9954 # E8BE 6E26 # E8BF 74E6 # E8C0 7AA9 # E8C1 7AAA # E8C2 81E5 # E8C3 86D9 # E8C4 8778 # E8C5 8A1B # E8C6 5A49 # E8C7 5B8C # E8C8 5B9B # E8C9 68A1 # E8CA 6900 # E8CB 6D63 # E8CC 73A9 # E8CD 7413 # E8CE 742C # E8CF 7897 # E8D0 7DE9 # E8D1 7FEB # E8D2 8118 # E8D3 8155 # E8D4 839E # E8D5 8C4C # E8D6 962E # E8D7 9811 # E8D8 66F0 # E8D9 5F80 # E8DA 65FA # E8DB 6789 # E8DC 6C6A # E8DD 738B # E8DE 502D # E8DF 5A03 # E8E0 6B6A # E8E1 77EE # E8E2 5916 # E8E3 5D6C # E8E4 5DCD # E8E5 7325 # E8E6 754F # E8E7 F9BA # E8E8 F9BB # E8E9 50E5 # E8EA 51F9 # E8EB 582F # E8EC 592D # E8ED 5996 # E8EE 59DA # E8EF 5BE5 # E8F0 F9BC # E8F1 F9BD # E8F2 5DA2 # E8F3 62D7 # E8F4 6416 # E8F5 6493 # E8F6 64FE # E8F7 F9BE # E8F8 66DC # E8F9 F9BF # E8FA 6A48 # E8FB F9C0 # E8FC 71FF # E8FD 7464 # E8FE F9C1 # E9A1 7A88 # E9A2 7AAF # E9A3 7E47 # E9A4 7E5E # E9A5 8000 # E9A6 8170 # E9A7 F9C2 # E9A8 87EF # E9A9 8981 # E9AA 8B20 # E9AB 9059 # E9AC F9C3 # E9AD 9080 # E9AE 9952 # E9AF 617E # E9B0 6B32 # E9B1 6D74 # E9B2 7E1F # E9B3 8925 # E9B4 8FB1 # E9B5 4FD1 # E9B6 50AD # E9B7 5197 # E9B8 52C7 # E9B9 57C7 # E9BA 5889 # E9BB 5BB9 # E9BC 5EB8 # E9BD 6142 # E9BE 6995 # E9BF 6D8C # E9C0 6E67 # E9C1 6EB6 # E9C2 7194 # E9C3 7462 # E9C4 7528 # E9C5 752C # E9C6 8073 # E9C7 8338 # E9C8 84C9 # E9C9 8E0A # E9CA 9394 # E9CB 93DE # E9CC F9C4 # E9CD 4E8E # E9CE 4F51 # E9CF 5076 # E9D0 512A # E9D1 53C8 # E9D2 53CB # E9D3 53F3 # E9D4 5B87 # E9D5 5BD3 # E9D6 5C24 # E9D7 611A # E9D8 6182 # E9D9 65F4 # E9DA 725B # E9DB 7397 # E9DC 7440 # E9DD 76C2 # E9DE 7950 # E9DF 7991 # E9E0 79B9 # E9E1 7D06 # E9E2 7FBD # E9E3 828B # E9E4 85D5 # E9E5 865E # E9E6 8FC2 # E9E7 9047 # E9E8 90F5 # E9E9 91EA # E9EA 9685 # E9EB 96E8 # E9EC 96E9 # E9ED 52D6 # E9EE 5F67 # E9EF 65ED # E9F0 6631 # E9F1 682F # E9F2 715C # E9F3 7A36 # E9F4 90C1 # E9F5 980A # E9F6 4E91 # E9F7 F9C5 # E9F8 6A52 # E9F9 6B9E # E9FA 6F90 # E9FB 7189 # E9FC 8018 # E9FD 82B8 # E9FE 8553 # EAA1 904B # EAA2 9695 # EAA3 96F2 # EAA4 97FB # EAA5 851A # EAA6 9B31 # EAA7 4E90 # EAA8 718A # EAA9 96C4 # EAAA 5143 # EAAB 539F # EAAC 54E1 # EAAD 5713 # EAAE 5712 # EAAF 57A3 # EAB0 5A9B # EAB1 5AC4 # EAB2 5BC3 # EAB3 6028 # EAB4 613F # EAB5 63F4 # EAB6 6C85 # EAB7 6D39 # EAB8 6E72 # EAB9 6E90 # EABA 7230 # EABB 733F # EABC 7457 # EABD 82D1 # EABE 8881 # EABF 8F45 # EAC0 9060 # EAC1 F9C6 # EAC2 9662 # EAC3 9858 # EAC4 9D1B # EAC5 6708 # EAC6 8D8A # EAC7 925E # EAC8 4F4D # EAC9 5049 # EACA 50DE # EACB 5371 # EACC 570D # EACD 59D4 # EACE 5A01 # EACF 5C09 # EAD0 6170 # EAD1 6690 # EAD2 6E2D # EAD3 7232 # EAD4 744B # EAD5 7DEF # EAD6 80C3 # EAD7 840E # EAD8 8466 # EAD9 853F # EADA 875F # EADB 885B # EADC 8918 # EADD 8B02 # EADE 9055 # EADF 97CB # EAE0 9B4F # EAE1 4E73 # EAE2 4F91 # EAE3 5112 # EAE4 516A # EAE5 F9C7 # EAE6 552F # EAE7 55A9 # EAE8 5B7A # EAE9 5BA5 # EAEA 5E7C # EAEB 5E7D # EAEC 5EBE # EAED 60A0 # EAEE 60DF # EAEF 6108 # EAF0 6109 # EAF1 63C4 # EAF2 6538 # EAF3 6709 # EAF4 F9C8 # EAF5 67D4 # EAF6 67DA # EAF7 F9C9 # EAF8 6961 # EAF9 6962 # EAFA 6CB9 # EAFB 6D27 # EAFC F9CA # EAFD 6E38 # EAFE F9CB # EBA1 6FE1 # EBA2 7336 # EBA3 7337 # EBA4 F9CC # EBA5 745C # EBA6 7531 # EBA7 F9CD # EBA8 7652 # EBA9 F9CE # EBAA F9CF # EBAB 7DAD # EBAC 81FE # EBAD 8438 # EBAE 88D5 # EBAF 8A98 # EBB0 8ADB # EBB1 8AED # EBB2 8E30 # EBB3 8E42 # EBB4 904A # EBB5 903E # EBB6 907A # EBB7 9149 # EBB8 91C9 # EBB9 936E # EBBA F9D0 # EBBB F9D1 # EBBC 5809 # EBBD F9D2 # EBBE 6BD3 # EBBF 8089 # EBC0 80B2 # EBC1 F9D3 # EBC2 F9D4 # EBC3 5141 # EBC4 596B # EBC5 5C39 # EBC6 F9D5 # EBC7 F9D6 # EBC8 6F64 # EBC9 73A7 # EBCA 80E4 # EBCB 8D07 # EBCC F9D7 # EBCD 9217 # EBCE 958F # EBCF F9D8 # EBD0 F9D9 # EBD1 F9DA # EBD2 F9DB # EBD3 807F # EBD4 620E # EBD5 701C # EBD6 7D68 # EBD7 878D # EBD8 F9DC # EBD9 57A0 # EBDA 6069 # EBDB 6147 # EBDC 6BB7 # EBDD 8ABE # EBDE 9280 # EBDF 96B1 # EBE0 4E59 # EBE1 541F # EBE2 6DEB # EBE3 852D # EBE4 9670 # EBE5 97F3 # EBE6 98EE # EBE7 63D6 # EBE8 6CE3 # EBE9 9091 # EBEA 51DD # EBEB 61C9 # EBEC 81BA # EBED 9DF9 # EBEE 4F9D # EBEF 501A # EBF0 5100 # EBF1 5B9C # EBF2 610F # EBF3 61FF # EBF4 64EC # EBF5 6905 # EBF6 6BC5 # EBF7 7591 # EBF8 77E3 # EBF9 7FA9 # EBFA 8264 # EBFB 858F # EBFC 87FB # EBFD 8863 # EBFE 8ABC # ECA1 8B70 # ECA2 91AB # ECA3 4E8C # ECA4 4EE5 # ECA5 4F0A # ECA6 F9DD # ECA7 F9DE # ECA8 5937 # ECA9 59E8 # ECAA F9DF # ECAB 5DF2 # ECAC 5F1B # ECAD 5F5B # ECAE 6021 # ECAF F9E0 # ECB0 F9E1 # ECB1 F9E2 # ECB2 F9E3 # ECB3 723E # ECB4 73E5 # ECB5 F9E4 # ECB6 7570 # ECB7 75CD # ECB8 F9E5 # ECB9 79FB # ECBA F9E6 # ECBB 800C # ECBC 8033 # ECBD 8084 # ECBE 82E1 # ECBF 8351 # ECC0 F9E7 # ECC1 F9E8 # ECC2 8CBD # ECC3 8CB3 # ECC4 9087 # ECC5 F9E9 # ECC6 F9EA # ECC7 98F4 # ECC8 990C # ECC9 F9EB # ECCA F9EC # ECCB 7037 # ECCC 76CA # ECCD 7FCA # ECCE 7FCC # ECCF 7FFC # ECD0 8B1A # ECD1 4EBA # ECD2 4EC1 # ECD3 5203 # ECD4 5370 # ECD5 F9ED # ECD6 54BD # ECD7 56E0 # ECD8 59FB # ECD9 5BC5 # ECDA 5F15 # ECDB 5FCD # ECDC 6E6E # ECDD F9EE # ECDE F9EF # ECDF 7D6A # ECE0 8335 # ECE1 F9F0 # ECE2 8693 # ECE3 8A8D # ECE4 F9F1 # ECE5 976D # ECE6 9777 # ECE7 F9F2 # ECE8 F9F3 # ECE9 4E00 # ECEA 4F5A # ECEB 4F7E # ECEC 58F9 # ECED 65E5 # ECEE 6EA2 # ECEF 9038 # ECF0 93B0 # ECF1 99B9 # ECF2 4EFB # ECF3 58EC # ECF4 598A # ECF5 59D9 # ECF6 6041 # ECF7 F9F4 # ECF8 F9F5 # ECF9 7A14 # ECFA F9F6 # ECFB 834F # ECFC 8CC3 # ECFD 5165 # ECFE 5344 # EDA1 F9F7 # EDA2 F9F8 # EDA3 F9F9 # EDA4 4ECD # EDA5 5269 # EDA6 5B55 # EDA7 82BF # EDA8 4ED4 # EDA9 523A # EDAA 54A8 # EDAB 59C9 # EDAC 59FF # EDAD 5B50 # EDAE 5B57 # EDAF 5B5C # EDB0 6063 # EDB1 6148 # EDB2 6ECB # EDB3 7099 # EDB4 716E # EDB5 7386 # EDB6 74F7 # EDB7 75B5 # EDB8 78C1 # EDB9 7D2B # EDBA 8005 # EDBB 81EA # EDBC 8328 # EDBD 8517 # EDBE 85C9 # EDBF 8AEE # EDC0 8CC7 # EDC1 96CC # EDC2 4F5C # EDC3 52FA # EDC4 56BC # EDC5 65AB # EDC6 6628 # EDC7 707C # EDC8 70B8 # EDC9 7235 # EDCA 7DBD # EDCB 828D # EDCC 914C # EDCD 96C0 # EDCE 9D72 # EDCF 5B71 # EDD0 68E7 # EDD1 6B98 # EDD2 6F7A # EDD3 76DE # EDD4 5C91 # EDD5 66AB # EDD6 6F5B # EDD7 7BB4 # EDD8 7C2A # EDD9 8836 # EDDA 96DC # EDDB 4E08 # EDDC 4ED7 # EDDD 5320 # EDDE 5834 # EDDF 58BB # EDE0 58EF # EDE1 596C # EDE2 5C07 # EDE3 5E33 # EDE4 5E84 # EDE5 5F35 # EDE6 638C # EDE7 66B2 # EDE8 6756 # EDE9 6A1F # EDEA 6AA3 # EDEB 6B0C # EDEC 6F3F # EDED 7246 # EDEE F9FA # EDEF 7350 # EDF0 748B # EDF1 7AE0 # EDF2 7CA7 # EDF3 8178 # EDF4 81DF # EDF5 81E7 # EDF6 838A # EDF7 846C # EDF8 8523 # EDF9 8594 # EDFA 85CF # EDFB 88DD # EDFC 8D13 # EDFD 91AC # EDFE 9577 # EEA1 969C # EEA2 518D # EEA3 54C9 # EEA4 5728 # EEA5 5BB0 # EEA6 624D # EEA7 6750 # EEA8 683D # EEA9 6893 # EEAA 6E3D # EEAB 6ED3 # EEAC 707D # EEAD 7E21 # EEAE 88C1 # EEAF 8CA1 # EEB0 8F09 # EEB1 9F4B # EEB2 9F4E # EEB3 722D # EEB4 7B8F # EEB5 8ACD # EEB6 931A # EEB7 4F47 # EEB8 4F4E # EEB9 5132 # EEBA 5480 # EEBB 59D0 # EEBC 5E95 # EEBD 62B5 # EEBE 6775 # EEBF 696E # EEC0 6A17 # EEC1 6CAE # EEC2 6E1A # EEC3 72D9 # EEC4 732A # EEC5 75BD # EEC6 7BB8 # EEC7 7D35 # EEC8 82E7 # EEC9 83F9 # EECA 8457 # EECB 85F7 # EECC 8A5B # EECD 8CAF # EECE 8E87 # EECF 9019 # EED0 90B8 # EED1 96CE # EED2 9F5F # EED3 52E3 # EED4 540A # EED5 5AE1 # EED6 5BC2 # EED7 6458 # EED8 6575 # EED9 6EF4 # EEDA 72C4 # EEDB F9FB # EEDC 7684 # EEDD 7A4D # EEDE 7B1B # EEDF 7C4D # EEE0 7E3E # EEE1 7FDF # EEE2 837B # EEE3 8B2B # EEE4 8CCA # EEE5 8D64 # EEE6 8DE1 # EEE7 8E5F # EEE8 8FEA # EEE9 8FF9 # EEEA 9069 # EEEB 93D1 # EEEC 4F43 # EEED 4F7A # EEEE 50B3 # EEEF 5168 # EEF0 5178 # EEF1 524D # EEF2 526A # EEF3 5861 # EEF4 587C # EEF5 5960 # EEF6 5C08 # EEF7 5C55 # EEF8 5EDB # EEF9 609B # EEFA 6230 # EEFB 6813 # EEFC 6BBF # EEFD 6C08 # EEFE 6FB1 # EFA1 714E # EFA2 7420 # EFA3 7530 # EFA4 7538 # EFA5 7551 # EFA6 7672 # EFA7 7B4C # EFA8 7B8B # EFA9 7BAD # EFAA 7BC6 # EFAB 7E8F # EFAC 8A6E # EFAD 8F3E # EFAE 8F49 # EFAF 923F # EFB0 9293 # EFB1 9322 # EFB2 942B # EFB3 96FB # EFB4 985A # EFB5 986B # EFB6 991E # EFB7 5207 # EFB8 622A # EFB9 6298 # EFBA 6D59 # EFBB 7664 # EFBC 7ACA # EFBD 7BC0 # EFBE 7D76 # EFBF 5360 # EFC0 5CBE # EFC1 5E97 # EFC2 6F38 # EFC3 70B9 # EFC4 7C98 # EFC5 9711 # EFC6 9B8E # EFC7 9EDE # EFC8 63A5 # EFC9 647A # EFCA 8776 # EFCB 4E01 # EFCC 4E95 # EFCD 4EAD # EFCE 505C # EFCF 5075 # EFD0 5448 # EFD1 59C3 # EFD2 5B9A # EFD3 5E40 # EFD4 5EAD # EFD5 5EF7 # EFD6 5F81 # EFD7 60C5 # EFD8 633A # EFD9 653F # EFDA 6574 # EFDB 65CC # EFDC 6676 # EFDD 6678 # EFDE 67FE # EFDF 6968 # EFE0 6A89 # EFE1 6B63 # EFE2 6C40 # EFE3 6DC0 # EFE4 6DE8 # EFE5 6E1F # EFE6 6E5E # EFE7 701E # EFE8 70A1 # EFE9 738E # EFEA 73FD # EFEB 753A # EFEC 775B # EFED 7887 # EFEE 798E # EFEF 7A0B # EFF0 7A7D # EFF1 7CBE # EFF2 7D8E # EFF3 8247 # EFF4 8A02 # EFF5 8AEA # EFF6 8C9E # EFF7 912D # EFF8 914A # EFF9 91D8 # EFFA 9266 # EFFB 92CC # EFFC 9320 # EFFD 9706 # EFFE 9756 # F0A1 975C # F0A2 9802 # F0A3 9F0E # F0A4 5236 # F0A5 5291 # F0A6 557C # F0A7 5824 # F0A8 5E1D # F0A9 5F1F # F0AA 608C # F0AB 63D0 # F0AC 68AF # F0AD 6FDF # F0AE 796D # F0AF 7B2C # F0B0 81CD # F0B1 85BA # F0B2 88FD # F0B3 8AF8 # F0B4 8E44 # F0B5 918D # F0B6 9664 # F0B7 969B # F0B8 973D # F0B9 984C # F0BA 9F4A # F0BB 4FCE # F0BC 5146 # F0BD 51CB # F0BE 52A9 # F0BF 5632 # F0C0 5F14 # F0C1 5F6B # F0C2 63AA # F0C3 64CD # F0C4 65E9 # F0C5 6641 # F0C6 66FA # F0C7 66F9 # F0C8 671D # F0C9 689D # F0CA 68D7 # F0CB 69FD # F0CC 6F15 # F0CD 6F6E # F0CE 7167 # F0CF 71E5 # F0D0 722A # F0D1 74AA # F0D2 773A # F0D3 7956 # F0D4 795A # F0D5 79DF # F0D6 7A20 # F0D7 7A95 # F0D8 7C97 # F0D9 7CDF # F0DA 7D44 # F0DB 7E70 # F0DC 8087 # F0DD 85FB # F0DE 86A4 # F0DF 8A54 # F0E0 8ABF # F0E1 8D99 # F0E2 8E81 # F0E3 9020 # F0E4 906D # F0E5 91E3 # F0E6 963B # F0E7 96D5 # F0E8 9CE5 # F0E9 65CF # F0EA 7C07 # F0EB 8DB3 # F0EC 93C3 # F0ED 5B58 # F0EE 5C0A # F0EF 5352 # F0F0 62D9 # F0F1 731D # F0F2 5027 # F0F3 5B97 # F0F4 5F9E # F0F5 60B0 # F0F6 616B # F0F7 68D5 # F0F8 6DD9 # F0F9 742E # F0FA 7A2E # F0FB 7D42 # F0FC 7D9C # F0FD 7E31 # F0FE 816B # F1A1 8E2A # F1A2 8E35 # F1A3 937E # F1A4 9418 # F1A5 4F50 # F1A6 5750 # F1A7 5DE6 # F1A8 5EA7 # F1A9 632B # F1AA 7F6A # F1AB 4E3B # F1AC 4F4F # F1AD 4F8F # F1AE 505A # F1AF 59DD # F1B0 80C4 # F1B1 546A # F1B2 5468 # F1B3 55FE # F1B4 594F # F1B5 5B99 # F1B6 5DDE # F1B7 5EDA # F1B8 665D # F1B9 6731 # F1BA 67F1 # F1BB 682A # F1BC 6CE8 # F1BD 6D32 # F1BE 6E4A # F1BF 6F8D # F1C0 70B7 # F1C1 73E0 # F1C2 7587 # F1C3 7C4C # F1C4 7D02 # F1C5 7D2C # F1C6 7DA2 # F1C7 821F # F1C8 86DB # F1C9 8A3B # F1CA 8A85 # F1CB 8D70 # F1CC 8E8A # F1CD 8F33 # F1CE 9031 # F1CF 914E # F1D0 9152 # F1D1 9444 # F1D2 99D0 # F1D3 7AF9 # F1D4 7CA5 # F1D5 4FCA # F1D6 5101 # F1D7 51C6 # F1D8 57C8 # F1D9 5BEF # F1DA 5CFB # F1DB 6659 # F1DC 6A3D # F1DD 6D5A # F1DE 6E96 # F1DF 6FEC # F1E0 710C # F1E1 756F # F1E2 7AE3 # F1E3 8822 # F1E4 9021 # F1E5 9075 # F1E6 96CB # F1E7 99FF # F1E8 8301 # F1E9 4E2D # F1EA 4EF2 # F1EB 8846 # F1EC 91CD # F1ED 537D # F1EE 6ADB # F1EF 696B # F1F0 6C41 # F1F1 847A # F1F2 589E # F1F3 618E # F1F4 66FE # F1F5 62EF # F1F6 70DD # F1F7 7511 # F1F8 75C7 # F1F9 7E52 # F1FA 84B8 # F1FB 8B49 # F1FC 8D08 # F1FD 4E4B # F1FE 53EA # F2A1 54AB # F2A2 5730 # F2A3 5740 # F2A4 5FD7 # F2A5 6301 # F2A6 6307 # F2A7 646F # F2A8 652F # F2A9 65E8 # F2AA 667A # F2AB 679D # F2AC 67B3 # F2AD 6B62 # F2AE 6C60 # F2AF 6C9A # F2B0 6F2C # F2B1 77E5 # F2B2 7825 # F2B3 7949 # F2B4 7957 # F2B5 7D19 # F2B6 80A2 # F2B7 8102 # F2B8 81F3 # F2B9 829D # F2BA 82B7 # F2BB 8718 # F2BC 8A8C # F2BD F9FC # F2BE 8D04 # F2BF 8DBE # F2C0 9072 # F2C1 76F4 # F2C2 7A19 # F2C3 7A37 # F2C4 7E54 # F2C5 8077 # F2C6 5507 # F2C7 55D4 # F2C8 5875 # F2C9 632F # F2CA 6422 # F2CB 6649 # F2CC 664B # F2CD 686D # F2CE 699B # F2CF 6B84 # F2D0 6D25 # F2D1 6EB1 # F2D2 73CD # F2D3 7468 # F2D4 74A1 # F2D5 755B # F2D6 75B9 # F2D7 76E1 # F2D8 771E # F2D9 778B # F2DA 79E6 # F2DB 7E09 # F2DC 7E1D # F2DD 81FB # F2DE 852F # F2DF 8897 # F2E0 8A3A # F2E1 8CD1 # F2E2 8EEB # F2E3 8FB0 # F2E4 9032 # F2E5 93AD # F2E6 9663 # F2E7 9673 # F2E8 9707 # F2E9 4F84 # F2EA 53F1 # F2EB 59EA # F2EC 5AC9 # F2ED 5E19 # F2EE 684E # F2EF 74C6 # F2F0 75BE # F2F1 79E9 # F2F2 7A92 # F2F3 81A3 # F2F4 86ED # F2F5 8CEA # F2F6 8DCC # F2F7 8FED # F2F8 659F # F2F9 6715 # F2FA F9FD # F2FB 57F7 # F2FC 6F57 # F2FD 7DDD # F2FE 8F2F # F3A1 93F6 # F3A2 96C6 # F3A3 5FB5 # F3A4 61F2 # F3A5 6F84 # F3A6 4E14 # F3A7 4F98 # F3A8 501F # F3A9 53C9 # F3AA 55DF # F3AB 5D6F # F3AC 5DEE # F3AD 6B21 # F3AE 6B64 # F3AF 78CB # F3B0 7B9A # F3B1 F9FE # F3B2 8E49 # F3B3 8ECA # F3B4 906E # F3B5 6349 # F3B6 643E # F3B7 7740 # F3B8 7A84 # F3B9 932F # F3BA 947F # F3BB 9F6A # F3BC 64B0 # F3BD 6FAF # F3BE 71E6 # F3BF 74A8 # F3C0 74DA # F3C1 7AC4 # F3C2 7C12 # F3C3 7E82 # F3C4 7CB2 # F3C5 7E98 # F3C6 8B9A # F3C7 8D0A # F3C8 947D # F3C9 9910 # F3CA 994C # F3CB 5239 # F3CC 5BDF # F3CD 64E6 # F3CE 672D # F3CF 7D2E # F3D0 50ED # F3D1 53C3 # F3D2 5879 # F3D3 6158 # F3D4 6159 # F3D5 61FA # F3D6 65AC # F3D7 7AD9 # F3D8 8B92 # F3D9 8B96 # F3DA 5009 # F3DB 5021 # F3DC 5275 # F3DD 5531 # F3DE 5A3C # F3DF 5EE0 # F3E0 5F70 # F3E1 6134 # F3E2 655E # F3E3 660C # F3E4 6636 # F3E5 66A2 # F3E6 69CD # F3E7 6EC4 # F3E8 6F32 # F3E9 7316 # F3EA 7621 # F3EB 7A93 # F3EC 8139 # F3ED 8259 # F3EE 83D6 # F3EF 84BC # F3F0 50B5 # F3F1 57F0 # F3F2 5BC0 # F3F3 5BE8 # F3F4 5F69 # F3F5 63A1 # F3F6 7826 # F3F7 7DB5 # F3F8 83DC # F3F9 8521 # F3FA 91C7 # F3FB 91F5 # F3FC 518A # F3FD 67F5 # F3FE 7B56 # F4A1 8CAC # F4A2 51C4 # F4A3 59BB # F4A4 60BD # F4A5 8655 # F4A6 501C # F4A7 F9FF # F4A8 5254 # F4A9 5C3A # F4AA 617D # F4AB 621A # F4AC 62D3 # F4AD 64F2 # F4AE 65A5 # F4AF 6ECC # F4B0 7620 # F4B1 810A # F4B2 8E60 # F4B3 965F # F4B4 96BB # F4B5 4EDF # F4B6 5343 # F4B7 5598 # F4B8 5929 # F4B9 5DDD # F4BA 64C5 # F4BB 6CC9 # F4BC 6DFA # F4BD 7394 # F4BE 7A7F # F4BF 821B # F4C0 85A6 # F4C1 8CE4 # F4C2 8E10 # F4C3 9077 # F4C4 91E7 # F4C5 95E1 # F4C6 9621 # F4C7 97C6 # F4C8 51F8 # F4C9 54F2 # F4CA 5586 # F4CB 5FB9 # F4CC 64A4 # F4CD 6F88 # F4CE 7DB4 # F4CF 8F1F # F4D0 8F4D # F4D1 9435 # F4D2 50C9 # F4D3 5C16 # F4D4 6CBE # F4D5 6DFB # F4D6 751B # F4D7 77BB # F4D8 7C3D # F4D9 7C64 # F4DA 8A79 # F4DB 8AC2 # F4DC 581E # F4DD 59BE # F4DE 5E16 # F4DF 6377 # F4E0 7252 # F4E1 758A # F4E2 776B # F4E3 8ADC # F4E4 8CBC # F4E5 8F12 # F4E6 5EF3 # F4E7 6674 # F4E8 6DF8 # F4E9 807D # F4EA 83C1 # F4EB 8ACB # F4EC 9751 # F4ED 9BD6 # F4EE FA00 # F4EF 5243 # F4F0 66FF # F4F1 6D95 # F4F2 6EEF # F4F3 7DE0 # F4F4 8AE6 # F4F5 902E # F4F6 905E # F4F7 9AD4 # F4F8 521D # F4F9 527F # F4FA 54E8 # F4FB 6194 # F4FC 6284 # F4FD 62DB # F4FE 68A2 # F5A1 6912 # F5A2 695A # F5A3 6A35 # F5A4 7092 # F5A5 7126 # F5A6 785D # F5A7 7901 # F5A8 790E # F5A9 79D2 # F5AA 7A0D # F5AB 8096 # F5AC 8278 # F5AD 82D5 # F5AE 8349 # F5AF 8549 # F5B0 8C82 # F5B1 8D85 # F5B2 9162 # F5B3 918B # F5B4 91AE # F5B5 4FC3 # F5B6 56D1 # F5B7 71ED # F5B8 77D7 # F5B9 8700 # F5BA 89F8 # F5BB 5BF8 # F5BC 5FD6 # F5BD 6751 # F5BE 90A8 # F5BF 53E2 # F5C0 585A # F5C1 5BF5 # F5C2 60A4 # F5C3 6181 # F5C4 6460 # F5C5 7E3D # F5C6 8070 # F5C7 8525 # F5C8 9283 # F5C9 64AE # F5CA 50AC # F5CB 5D14 # F5CC 6700 # F5CD 589C # F5CE 62BD # F5CF 63A8 # F5D0 690E # F5D1 6978 # F5D2 6A1E # F5D3 6E6B # F5D4 76BA # F5D5 79CB # F5D6 82BB # F5D7 8429 # F5D8 8ACF # F5D9 8DA8 # F5DA 8FFD # F5DB 9112 # F5DC 914B # F5DD 919C # F5DE 9310 # F5DF 9318 # F5E0 939A # F5E1 96DB # F5E2 9A36 # F5E3 9C0D # F5E4 4E11 # F5E5 755C # F5E6 795D # F5E7 7AFA # F5E8 7B51 # F5E9 7BC9 # F5EA 7E2E # F5EB 84C4 # F5EC 8E59 # F5ED 8E74 # F5EE 8EF8 # F5EF 9010 # F5F0 6625 # F5F1 693F # F5F2 7443 # F5F3 51FA # F5F4 672E # F5F5 9EDC # F5F6 5145 # F5F7 5FE0 # F5F8 6C96 # F5F9 87F2 # F5FA 885D # F5FB 8877 # F5FC 60B4 # F5FD 81B5 # F5FE 8403 # F6A1 8D05 # F6A2 53D6 # F6A3 5439 # F6A4 5634 # F6A5 5A36 # F6A6 5C31 # F6A7 708A # F6A8 7FE0 # F6A9 805A # F6AA 8106 # F6AB 81ED # F6AC 8DA3 # F6AD 9189 # F6AE 9A5F # F6AF 9DF2 # F6B0 5074 # F6B1 4EC4 # F6B2 53A0 # F6B3 60FB # F6B4 6E2C # F6B5 5C64 # F6B6 4F88 # F6B7 5024 # F6B8 55E4 # F6B9 5CD9 # F6BA 5E5F # F6BB 6065 # F6BC 6894 # F6BD 6CBB # F6BE 6DC4 # F6BF 71BE # F6C0 75D4 # F6C1 75F4 # F6C2 7661 # F6C3 7A1A # F6C4 7A49 # F6C5 7DC7 # F6C6 7DFB # F6C7 7F6E # F6C8 81F4 # F6C9 86A9 # F6CA 8F1C # F6CB 96C9 # F6CC 99B3 # F6CD 9F52 # F6CE 5247 # F6CF 52C5 # F6D0 98ED # F6D1 89AA # F6D2 4E03 # F6D3 67D2 # F6D4 6F06 # F6D5 4FB5 # F6D6 5BE2 # F6D7 6795 # F6D8 6C88 # F6D9 6D78 # F6DA 741B # F6DB 7827 # F6DC 91DD # F6DD 937C # F6DE 87C4 # F6DF 79E4 # F6E0 7A31 # F6E1 5FEB # F6E2 4ED6 # F6E3 54A4 # F6E4 553E # F6E5 58AE # F6E6 59A5 # F6E7 60F0 # F6E8 6253 # F6E9 62D6 # F6EA 6736 # F6EB 6955 # F6EC 8235 # F6ED 9640 # F6EE 99B1 # F6EF 99DD # F6F0 502C # F6F1 5353 # F6F2 5544 # F6F3 577C # F6F4 FA01 # F6F5 6258 # F6F6 FA02 # F6F7 64E2 # F6F8 666B # F6F9 67DD # F6FA 6FC1 # F6FB 6FEF # F6FC 7422 # F6FD 7438 # F6FE 8A17 # F7A1 9438 # F7A2 5451 # F7A3 5606 # F7A4 5766 # F7A5 5F48 # F7A6 619A # F7A7 6B4E # F7A8 7058 # F7A9 70AD # F7AA 7DBB # F7AB 8A95 # F7AC 596A # F7AD 812B # F7AE 63A2 # F7AF 7708 # F7B0 803D # F7B1 8CAA # F7B2 5854 # F7B3 642D # F7B4 69BB # F7B5 5B95 # F7B6 5E11 # F7B7 6E6F # F7B8 FA03 # F7B9 8569 # F7BA 514C # F7BB 53F0 # F7BC 592A # F7BD 6020 # F7BE 614B # F7BF 6B86 # F7C0 6C70 # F7C1 6CF0 # F7C2 7B1E # F7C3 80CE # F7C4 82D4 # F7C5 8DC6 # F7C6 90B0 # F7C7 98B1 # F7C8 FA04 # F7C9 64C7 # F7CA 6FA4 # F7CB 6491 # F7CC 6504 # F7CD 514E # F7CE 5410 # F7CF 571F # F7D0 8A0E # F7D1 615F # F7D2 6876 # F7D3 FA05 # F7D4 75DB # F7D5 7B52 # F7D6 7D71 # F7D7 901A # F7D8 5806 # F7D9 69CC # F7DA 817F # F7DB 892A # F7DC 9000 # F7DD 9839 # F7DE 5078 # F7DF 5957 # F7E0 59AC # F7E1 6295 # F7E2 900F # F7E3 9B2A # F7E4 615D # F7E5 7279 # F7E6 95D6 # F7E7 5761 # F7E8 5A46 # F7E9 5DF4 # F7EA 628A # F7EB 64AD # F7EC 64FA # F7ED 6777 # F7EE 6CE2 # F7EF 6D3E # F7F0 722C # F7F1 7436 # F7F2 7834 # F7F3 7F77 # F7F4 82AD # F7F5 8DDB # F7F6 9817 # F7F7 5224 # F7F8 5742 # F7F9 677F # F7FA 7248 # F7FB 74E3 # F7FC 8CA9 # F7FD 8FA6 # F7FE 9211 # F8A1 962A # F8A2 516B # F8A3 53ED # F8A4 634C # F8A5 4F69 # F8A6 5504 # F8A7 6096 # F8A8 6557 # F8A9 6C9B # F8AA 6D7F # F8AB 724C # F8AC 72FD # F8AD 7A17 # F8AE 8987 # F8AF 8C9D # F8B0 5F6D # F8B1 6F8E # F8B2 70F9 # F8B3 81A8 # F8B4 610E # F8B5 4FBF # F8B6 504F # F8B7 6241 # F8B8 7247 # F8B9 7BC7 # F8BA 7DE8 # F8BB 7FE9 # F8BC 904D # F8BD 97AD # F8BE 9A19 # F8BF 8CB6 # F8C0 576A # F8C1 5E73 # F8C2 67B0 # F8C3 840D # F8C4 8A55 # F8C5 5420 # F8C6 5B16 # F8C7 5E63 # F8C8 5EE2 # F8C9 5F0A # F8CA 6583 # F8CB 80BA # F8CC 853D # F8CD 9589 # F8CE 965B # F8CF 4F48 # F8D0 5305 # F8D1 530D # F8D2 530F # F8D3 5486 # F8D4 54FA # F8D5 5703 # F8D6 5E03 # F8D7 6016 # F8D8 629B # F8D9 62B1 # F8DA 6355 # F8DB FA06 # F8DC 6CE1 # F8DD 6D66 # F8DE 75B1 # F8DF 7832 # F8E0 80DE # F8E1 812F # F8E2 82DE # F8E3 8461 # F8E4 84B2 # F8E5 888D # F8E6 8912 # F8E7 900B # F8E8 92EA # F8E9 98FD # F8EA 9B91 # F8EB 5E45 # F8EC 66B4 # F8ED 66DD # F8EE 7011 # F8EF 7206 # F8F0 FA07 # F8F1 4FF5 # F8F2 527D # F8F3 5F6A # F8F4 6153 # F8F5 6753 # F8F6 6A19 # F8F7 6F02 # F8F8 74E2 # F8F9 7968 # F8FA 8868 # F8FB 8C79 # F8FC 98C7 # F8FD 98C4 # F8FE 9A43 # F9A1 54C1 # F9A2 7A1F # F9A3 6953 # F9A4 8AF7 # F9A5 8C4A # F9A6 98A8 # F9A7 99AE # F9A8 5F7C # F9A9 62AB # F9AA 75B2 # F9AB 76AE # F9AC 88AB # F9AD 907F # F9AE 9642 # F9AF 5339 # F9B0 5F3C # F9B1 5FC5 # F9B2 6CCC # F9B3 73CC # F9B4 7562 # F9B5 758B # F9B6 7B46 # F9B7 82FE # F9B8 999D # F9B9 4E4F # F9BA 903C # F9BB 4E0B # F9BC 4F55 # F9BD 53A6 # F9BE 590F # F9BF 5EC8 # F9C0 6630 # F9C1 6CB3 # F9C2 7455 # F9C3 8377 # F9C4 8766 # F9C5 8CC0 # F9C6 9050 # F9C7 971E # F9C8 9C15 # F9C9 58D1 # F9CA 5B78 # F9CB 8650 # F9CC 8B14 # F9CD 9DB4 # F9CE 5BD2 # F9CF 6068 # F9D0 608D # F9D1 65F1 # F9D2 6C57 # F9D3 6F22 # F9D4 6FA3 # F9D5 701A # F9D6 7F55 # F9D7 7FF0 # F9D8 9591 # F9D9 9592 # F9DA 9650 # F9DB 97D3 # F9DC 5272 # F9DD 8F44 # F9DE 51FD # F9DF 542B # F9E0 54B8 # F9E1 5563 # F9E2 558A # F9E3 6ABB # F9E4 6DB5 # F9E5 7DD8 # F9E6 8266 # F9E7 929C # F9E8 9677 # F9E9 9E79 # F9EA 5408 # F9EB 54C8 # F9EC 76D2 # F9ED 86E4 # F9EE 95A4 # F9EF 95D4 # F9F0 965C # F9F1 4EA2 # F9F2 4F09 # F9F3 59EE # F9F4 5AE6 # F9F5 5DF7 # F9F6 6052 # F9F7 6297 # F9F8 676D # F9F9 6841 # F9FA 6C86 # F9FB 6E2F # F9FC 7F38 # F9FD 809B # F9FE 822A # FAA1 FA08 # FAA2 FA09 # FAA3 9805 # FAA4 4EA5 # FAA5 5055 # FAA6 54B3 # FAA7 5793 # FAA8 595A # FAA9 5B69 # FAAA 5BB3 # FAAB 61C8 # FAAC 6977 # FAAD 6D77 # FAAE 7023 # FAAF 87F9 # FAB0 89E3 # FAB1 8A72 # FAB2 8AE7 # FAB3 9082 # FAB4 99ED # FAB5 9AB8 # FAB6 52BE # FAB7 6838 # FAB8 5016 # FAB9 5E78 # FABA 674F # FABB 8347 # FABC 884C # FABD 4EAB # FABE 5411 # FABF 56AE # FAC0 73E6 # FAC1 9115 # FAC2 97FF # FAC3 9909 # FAC4 9957 # FAC5 9999 # FAC6 5653 # FAC7 589F # FAC8 865B # FAC9 8A31 # FACA 61B2 # FACB 6AF6 # FACC 737B # FACD 8ED2 # FACE 6B47 # FACF 96AA # FAD0 9A57 # FAD1 5955 # FAD2 7200 # FAD3 8D6B # FAD4 9769 # FAD5 4FD4 # FAD6 5CF4 # FAD7 5F26 # FAD8 61F8 # FAD9 665B # FADA 6CEB # FADB 70AB # FADC 7384 # FADD 73B9 # FADE 73FE # FADF 7729 # FAE0 774D # FAE1 7D43 # FAE2 7D62 # FAE3 7E23 # FAE4 8237 # FAE5 8852 # FAE6 FA0A # FAE7 8CE2 # FAE8 9249 # FAE9 986F # FAEA 5B51 # FAEB 7A74 # FAEC 8840 # FAED 9801 # FAEE 5ACC # FAEF 4FE0 # FAF0 5354 # FAF1 593E # FAF2 5CFD # FAF3 633E # FAF4 6D79 # FAF5 72F9 # FAF6 8105 # FAF7 8107 # FAF8 83A2 # FAF9 92CF # FAFA 9830 # FAFB 4EA8 # FAFC 5144 # FAFD 5211 # FAFE 578B # FBA1 5F62 # FBA2 6CC2 # FBA3 6ECE # FBA4 7005 # FBA5 7050 # FBA6 70AF # FBA7 7192 # FBA8 73E9 # FBA9 7469 # FBAA 834A # FBAB 87A2 # FBAC 8861 # FBAD 9008 # FBAE 90A2 # FBAF 93A3 # FBB0 99A8 # FBB1 516E # FBB2 5F57 # FBB3 60E0 # FBB4 6167 # FBB5 66B3 # FBB6 8559 # FBB7 8E4A # FBB8 91AF # FBB9 978B # FBBA 4E4E # FBBB 4E92 # FBBC 547C # FBBD 58D5 # FBBE 58FA # FBBF 597D # FBC0 5CB5 # FBC1 5F27 # FBC2 6236 # FBC3 6248 # FBC4 660A # FBC5 6667 # FBC6 6BEB # FBC7 6D69 # FBC8 6DCF # FBC9 6E56 # FBCA 6EF8 # FBCB 6F94 # FBCC 6FE0 # FBCD 6FE9 # FBCE 705D # FBCF 72D0 # FBD0 7425 # FBD1 745A # FBD2 74E0 # FBD3 7693 # FBD4 795C # FBD5 7CCA # FBD6 7E1E # FBD7 80E1 # FBD8 82A6 # FBD9 846B # FBDA 84BF # FBDB 864E # FBDC 865F # FBDD 8774 # FBDE 8B77 # FBDF 8C6A # FBE0 93AC # FBE1 9800 # FBE2 9865 # FBE3 60D1 # FBE4 6216 # FBE5 9177 # FBE6 5A5A # FBE7 660F # FBE8 6DF7 # FBE9 6E3E # FBEA 743F # FBEB 9B42 # FBEC 5FFD # FBED 60DA # FBEE 7B0F # FBEF 54C4 # FBF0 5F18 # FBF1 6C5E # FBF2 6CD3 # FBF3 6D2A # FBF4 70D8 # FBF5 7D05 # FBF6 8679 # FBF7 8A0C # FBF8 9D3B # FBF9 5316 # FBFA 548C # FBFB 5B05 # FBFC 6A3A # FBFD 706B # FBFE 7575 # FCA1 798D # FCA2 79BE # FCA3 82B1 # FCA4 83EF # FCA5 8A71 # FCA6 8B41 # FCA7 8CA8 # FCA8 9774 # FCA9 FA0B # FCAA 64F4 # FCAB 652B # FCAC 78BA # FCAD 78BB # FCAE 7A6B # FCAF 4E38 # FCB0 559A # FCB1 5950 # FCB2 5BA6 # FCB3 5E7B # FCB4 60A3 # FCB5 63DB # FCB6 6B61 # FCB7 6665 # FCB8 6853 # FCB9 6E19 # FCBA 7165 # FCBB 74B0 # FCBC 7D08 # FCBD 9084 # FCBE 9A69 # FCBF 9C25 # FCC0 6D3B # FCC1 6ED1 # FCC2 733E # FCC3 8C41 # FCC4 95CA # FCC5 51F0 # FCC6 5E4C # FCC7 5FA8 # FCC8 604D # FCC9 60F6 # FCCA 6130 # FCCB 614C # FCCC 6643 # FCCD 6644 # FCCE 69A5 # FCCF 6CC1 # FCD0 6E5F # FCD1 6EC9 # FCD2 6F62 # FCD3 714C # FCD4 749C # FCD5 7687 # FCD6 7BC1 # FCD7 7C27 # FCD8 8352 # FCD9 8757 # FCDA 9051 # FCDB 968D # FCDC 9EC3 # FCDD 532F # FCDE 56DE # FCDF 5EFB # FCE0 5F8A # FCE1 6062 # FCE2 6094 # FCE3 61F7 # FCE4 6666 # FCE5 6703 # FCE6 6A9C # FCE7 6DEE # FCE8 6FAE # FCE9 7070 # FCEA 736A # FCEB 7E6A # FCEC 81BE # FCED 8334 # FCEE 86D4 # FCEF 8AA8 # FCF0 8CC4 # FCF1 5283 # FCF2 7372 # FCF3 5B96 # FCF4 6A6B # FCF5 9404 # FCF6 54EE # FCF7 5686 # FCF8 5B5D # FCF9 6548 # FCFA 6585 # FCFB 66C9 # FCFC 689F # FCFD 6D8D # FCFE 6DC6 # FDA1 723B # FDA2 80B4 # FDA3 9175 # FDA4 9A4D # FDA5 4FAF # FDA6 5019 # FDA7 539A # FDA8 540E # FDA9 543C # FDAA 5589 # FDAB 55C5 # FDAC 5E3F # FDAD 5F8C # FDAE 673D # FDAF 7166 # FDB0 73DD # FDB1 9005 # FDB2 52DB # FDB3 52F3 # FDB4 5864 # FDB5 58CE # FDB6 7104 # FDB7 718F # FDB8 71FB # FDB9 85B0 # FDBA 8A13 # FDBB 6688 # FDBC 85A8 # FDBD 55A7 # FDBE 6684 # FDBF 714A # FDC0 8431 # FDC1 5349 # FDC2 5599 # FDC3 6BC1 # FDC4 5F59 # FDC5 5FBD # FDC6 63EE # FDC7 6689 # FDC8 7147 # FDC9 8AF1 # FDCA 8F1D # FDCB 9EBE # FDCC 4F11 # FDCD 643A # FDCE 70CB # FDCF 7566 # FDD0 8667 # FDD1 6064 # FDD2 8B4E # FDD3 9DF8 # FDD4 5147 # FDD5 51F6 # FDD6 5308 # FDD7 6D36 # FDD8 80F8 # FDD9 9ED1 # FDDA 6615 # FDDB 6B23 # FDDC 7098 # FDDD 75D5 # FDDE 5403 # FDDF 5C79 # FDE0 7D07 # FDE1 8A16 # FDE2 6B20 # FDE3 6B3D # FDE4 6B46 # FDE5 5438 # FDE6 6070 # FDE7 6D3D # FDE8 7FD5 # FDE9 8208 # FDEA 50D6 # FDEB 51DE # FDEC 559C # FDED 566B # FDEE 56CD # FDEF 59EC # FDF0 5B09 # FDF1 5E0C # FDF2 6199 # FDF3 6198 # FDF4 6231 # FDF5 665E # FDF6 66E6 # FDF7 7199 # FDF8 71B9 # FDF9 71BA # FDFA 72A7 # FDFB 79A7 # FDFC 7A00 # FDFD 7FB2 # FDFE 8A70 # cyrus-imspd-v1.8/lib/charset/iso-8859-1.t0100644004310100000120000002142707372056423017131 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 00a1 INVERTED EXCLAMATION MARK A2 00a2 CENT SIGN A3 00a3 POUND SIGN A4 00a4 CURRENCY SIGN A5 00a5 YEN SIGN A6 00a6 BROKEN BAR A7 00a7 SECTION SIGN A8 00a8 DIAERESIS A9 00a9 COPYRIGHT SIGN AA 00aa FEMININE ORDINAL INDICATOR AB 00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK AC 00ac NOT SIGN AD 00ad SOFT HYPHEN AE 00ae REGISTERED SIGN AF 00af MACRON B0 00b0 DEGREE SIGN B1 00b1 PLUS-MINUS SIGN B2 00b2 SUPERSCRIPT TWO B3 00b3 SUPERSCRIPT THREE B4 00b4 ACUTE ACCENT B5 00b5 MICRO SIGN B6 00b6 PILCROW SIGN B7 00b7 MIDDLE DOT B8 00b8 CEDILLA B9 00b9 SUPERSCRIPT ONE BA 00ba MASCULINE ORDINAL INDICATOR BB 00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK BC 00bc VULGAR FRACTION ONE QUARTER BD 00bd VULGAR FRACTION ONE HALF BE 00be VULGAR FRACTION THREE QUARTERS BF 00bf INVERTED QUESTION MARK C0 00c0 LATIN CAPITAL LETTER A WITH GRAVE C1 00c1 LATIN CAPITAL LETTER A WITH ACUTE C2 00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX C3 00c3 LATIN CAPITAL LETTER A WITH TILDE C4 00c4 LATIN CAPITAL LETTER A WITH DIAERESIS C5 00c5 LATIN CAPITAL LETTER A WITH RING ABOVE C6 00c6 LATIN CAPITAL LETTER AE C7 00c7 LATIN CAPITAL LETTER C WITH CEDILLA C8 00c8 LATIN CAPITAL LETTER E WITH GRAVE C9 00c9 LATIN CAPITAL LETTER E WITH ACUTE CA 00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX CB 00cb LATIN CAPITAL LETTER E WITH DIAERESIS CC 00cc LATIN CAPITAL LETTER I WITH GRAVE CD 00cd LATIN CAPITAL LETTER I WITH ACUTE CE 00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX CF 00cf LATIN CAPITAL LETTER I WITH DIAERESIS D0 00d0 LATIN CAPITAL LETTER ETH (Icelandic) D1 00d1 LATIN CAPITAL LETTER N WITH TILDE D2 00d2 LATIN CAPITAL LETTER O WITH GRAVE D3 00d3 LATIN CAPITAL LETTER O WITH ACUTE D4 00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX D5 00d5 LATIN CAPITAL LETTER O WITH TILDE D6 00d6 LATIN CAPITAL LETTER O WITH DIAERESIS D7 00d7 MULTIPLICATION SIGN D8 00d8 LATIN CAPITAL LETTER O WITH STROKE D9 00d9 LATIN CAPITAL LETTER U WITH GRAVE DA 00da LATIN CAPITAL LETTER U WITH ACUTE DB 00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX DC 00dc LATIN CAPITAL LETTER U WITH DIAERESIS DD 00dd LATIN CAPITAL LETTER Y WITH ACUTE DE 00de LATIN CAPITAL LETTER THORN (Icelandic) DF 00df LATIN SMALL LETTER SHARP S (German) E0 00e0 LATIN SMALL LETTER A WITH GRAVE E1 00e1 LATIN SMALL LETTER A WITH ACUTE E2 00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX E3 00e3 LATIN SMALL LETTER A WITH TILDE E4 00e4 LATIN SMALL LETTER A WITH DIAERESIS E5 00e5 LATIN SMALL LETTER A WITH RING ABOVE E6 00e6 LATIN SMALL LETTER AE E7 00e7 LATIN SMALL LETTER C WITH CEDILLA E8 00e8 LATIN SMALL LETTER E WITH GRAVE E9 00e9 LATIN SMALL LETTER E WITH ACUTE EA 00ea LATIN SMALL LETTER E WITH CIRCUMFLEX EB 00eb LATIN SMALL LETTER E WITH DIAERESIS EC 00ec LATIN SMALL LETTER I WITH GRAVE ED 00ed LATIN SMALL LETTER I WITH ACUTE EE 00ee LATIN SMALL LETTER I WITH CIRCUMFLEX EF 00ef LATIN SMALL LETTER I WITH DIAERESIS F0 00f0 LATIN SMALL LETTER ETH (Icelandic) F1 00f1 LATIN SMALL LETTER N WITH TILDE F2 00f2 LATIN SMALL LETTER O WITH GRAVE F3 00f3 LATIN SMALL LETTER O WITH ACUTE F4 00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX F5 00f5 LATIN SMALL LETTER O WITH TILDE F6 00f6 LATIN SMALL LETTER O WITH DIAERESIS F7 00f7 DIVISION SIGN F8 00f8 LATIN SMALL LETTER O WITH STROKE F9 00f9 LATIN SMALL LETTER U WITH GRAVE FA 00fa LATIN SMALL LETTER U WITH ACUTE FB 00fb LATIN SMALL LETTER U WITH CIRCUMFLEX FC 00fc LATIN SMALL LETTER U WITH DIAERESIS FD 00fd LATIN SMALL LETTER Y WITH ACUTE FE 00fe LATIN SMALL LETTER THORN (Icelandic) FF 00ff LATIN SMALL LETTER Y WITH DIAERESIS cyrus-imspd-v1.8/lib/charset/iso-8859-2.t0100644004310100000120000002200407372056423017122 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 0104 LATIN CAPITAL LETTER A WITH OGONEK A2 02d8 BREVE A3 0141 LATIN CAPITAL LETTER L WITH STROKE A4 00a4 CURRENCY SIGN A5 013d LATIN CAPITAL LETTER L WITH CARON A6 015a LATIN CAPITAL LETTER S WITH ACUTE A7 00a7 SECTION SIGN A8 00a8 DIAERESIS A9 0160 LATIN CAPITAL LETTER S WITH CARON AA 015e LATIN CAPITAL LETTER S WITH CEDILLA AB 0164 LATIN CAPITAL LETTER T WITH CARON AC 0179 LATIN CAPITAL LETTER Z WITH ACUTE AD 00ad SOFT HYPHEN AE 017d LATIN CAPITAL LETTER Z WITH CARON AF 017b LATIN CAPITAL LETTER Z WITH DOT ABOVE B0 00b0 DEGREE SIGN B1 0105 LATIN SMALL LETTER A WITH OGONEK B2 02db OGONEK B3 0142 LATIN SMALL LETTER L WITH STROKE B4 00b4 ACUTE ACCENT B5 013e LATIN SMALL LETTER L WITH CARON B6 015b LATIN SMALL LETTER S WITH ACUTE B7 02c7 CARON B8 00b8 CEDILLA B9 0161 LATIN SMALL LETTER S WITH CARON BA 015f LATIN SMALL LETTER S WITH CEDILLA BB 0165 LATIN SMALL LETTER T WITH CARON BC 017a LATIN SMALL LETTER Z WITH ACUTE BD 02dd DOUBLE ACUTE ACCENT BE 017e LATIN SMALL LETTER Z WITH CARON BF 017c LATIN SMALL LETTER Z WITH DOT ABOVE C0 0154 LATIN CAPITAL LETTER R WITH ACUTE C1 00c1 LATIN CAPITAL LETTER A WITH ACUTE C2 00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX C3 0102 LATIN CAPITAL LETTER A WITH BREVE C4 00c4 LATIN CAPITAL LETTER A WITH DIAERESIS C5 0139 LATIN CAPITAL LETTER L WITH ACUTE C6 0106 LATIN CAPITAL LETTER C WITH ACUTE C7 00c7 LATIN CAPITAL LETTER C WITH CEDILLA C8 010c LATIN CAPITAL LETTER C WITH CARON C9 00c9 LATIN CAPITAL LETTER E WITH ACUTE CA 0118 LATIN CAPITAL LETTER E WITH OGONEK CB 00cb LATIN CAPITAL LETTER E WITH DIAERESIS CC 011a LATIN CAPITAL LETTER E WITH CARON CD 00cd LATIN CAPITAL LETTER I WITH ACUTE CE 00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX CF 010e LATIN CAPITAL LETTER D WITH CARON D0 0110 LATIN CAPITAL LETTER D WITH STROKE D1 0143 LATIN CAPITAL LETTER N WITH ACUTE D2 0147 LATIN CAPITAL LETTER N WITH CARON D3 00d3 LATIN CAPITAL LETTER O WITH ACUTE D4 00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX D5 0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE D6 00d6 LATIN CAPITAL LETTER O WITH DIAERESIS D7 00d7 MULTIPLICATION SIGN D8 0158 LATIN CAPITAL LETTER R WITH CARON D9 016e LATIN CAPITAL LETTER U WITH RING ABOVE DA 00da LATIN CAPITAL LETTER U WITH ACUTE DB 0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE DC 00dc LATIN CAPITAL LETTER U WITH DIAERESIS DD 00dd LATIN CAPITAL LETTER Y WITH ACUTE DE 0162 LATIN CAPITAL LETTER T WITH CEDILLA DF 00df LATIN SMALL LETTER SHARP S (German) E0 0155 LATIN SMALL LETTER R WITH ACUTE E1 00e1 LATIN SMALL LETTER A WITH ACUTE E2 00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX E3 0103 LATIN SMALL LETTER A WITH BREVE E4 00e4 LATIN SMALL LETTER A WITH DIAERESIS E5 013a LATIN SMALL LETTER L WITH ACUTE E6 0107 LATIN SMALL LETTER C WITH ACUTE E7 00e7 LATIN SMALL LETTER C WITH CEDILLA E8 010d LATIN SMALL LETTER C WITH CARON E9 00e9 LATIN SMALL LETTER E WITH ACUTE EA 0119 LATIN SMALL LETTER E WITH OGONEK EB 00eb LATIN SMALL LETTER E WITH DIAERESIS EC 011b LATIN SMALL LETTER E WITH CARON ED 00ed LATIN SMALL LETTER I WITH ACUTE EE 00ee LATIN SMALL LETTER I WITH CIRCUMFLEX EF 010f LATIN SMALL LETTER D WITH CARON F0 0111 LATIN SMALL LETTER D WITH STROKE F1 0144 LATIN SMALL LETTER N WITH ACUTE F2 0148 LATIN SMALL LETTER N WITH CARON F3 00f3 LATIN SMALL LETTER O WITH ACUTE F4 00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX F5 0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE F6 00f6 LATIN SMALL LETTER O WITH DIAERESIS F7 00f7 DIVISION SIGN F8 0159 LATIN SMALL LETTER R WITH CARON F9 016f LATIN SMALL LETTER U WITH RING ABOVE FA 00fa LATIN SMALL LETTER U WITH ACUTE FB 0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE FC 00fc LATIN SMALL LETTER U WITH DIAERESIS FD 00fd LATIN SMALL LETTER Y WITH ACUTE FE 0163 LATIN SMALL LETTER T WITH CEDILLA FF 02d9 DOT ABOVE cyrus-imspd-v1.8/lib/charset/iso-8859-3.t0100644004310100000120000002151607372056423017132 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 0126 LATIN CAPITAL LETTER H WITH STROKE A2 02d8 BREVE A3 00a3 POUND SIGN A4 00a4 CURRENCY SIGN A5 ???? EMPTY A6 0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX A7 00a7 SECTION SIGN A8 00a8 DIAERESIS A9 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE AA 015e LATIN CAPITAL LETTER S WITH CEDILLA AB 011e LATIN CAPITAL LETTER G WITH BREVE AC 0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX AD 00ad SOFT HYPHEN AE ???? EMPTY AF 017b LATIN CAPITAL LETTER Z WITH DOT ABOVE B0 00b0 DEGREE SIGN B1 0127 LATIN SMALL LETTER H WITH STROKE B2 00b2 SUPERSCRIPT TWO B3 00b3 SUPERSCRIPT THREE B4 00b4 ACUTE ACCENT B5 00b5 MICRO SIGN B6 0125 LATIN SMALL LETTER H WITH CIRCUMFLEX B7 00b7 MIDDLE DOT B8 00b8 CEDILLA B9 0131 LATIN SMALL LETTER I DOTLESS BA 015f LATIN SMALL LETTER S WITH CEDILLA BB 011f LATIN SMALL LETTER G WITH BREVE BC 0135 LATIN SMALL LETTER J WITH CIRCUMFLEX BD 00bd VULGAR FRACTION ONE HALF BE ???? EMPTY BF 017c LATIN SMALL LETTER Z WITH DOT ABOVE C0 00c0 LATIN CAPITAL LETTER A WITH GRAVE C1 00c1 LATIN CAPITAL LETTER A WITH ACUTE C2 00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX C3 ???? EMPTY C4 00c4 LATIN CAPITAL LETTER A WITH DIAERESIS C5 010a LATIN CAPITAL LETTER C WITH DOT ABOVE C6 0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX C7 00c7 LATIN CAPITAL LETTER C WITH CEDILLA C8 00c8 LATIN CAPITAL LETTER E WITH GRAVE C9 00c9 LATIN CAPITAL LETTER E WITH ACUTE CA 00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX CB 00cb LATIN CAPITAL LETTER E WITH DIAERESIS CC 00cc LATIN CAPITAL LETTER I WITH GRAVE CD 00cd LATIN CAPITAL LETTER I WITH ACUTE CE 00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX CF 00cf LATIN CAPITAL LETTER I WITH DIAERESIS D0 ???? EMPTY D1 00d1 LATIN CAPITAL LETTER N WITH TILDE D2 00d2 LATIN CAPITAL LETTER O WITH GRAVE D3 00d3 LATIN CAPITAL LETTER O WITH ACUTE D4 00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX D5 0120 LATIN CAPITAL LETTER G WITH DOT ABOVE D6 00d6 LATIN CAPITAL LETTER O WITH DIAERESIS D7 00d7 MULTIPLICATION SIGN D8 011c LATIN CAPITAL LETTER G WITH CIRCUMFLEX D9 00d9 LATIN CAPITAL LETTER U WITH GRAVE DA 00da LATIN CAPITAL LETTER U WITH ACUTE DB 00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX DC 00dc LATIN CAPITAL LETTER U WITH DIAERESIS DD 016c LATIN CAPITAL LETTER U WITH BREVE DE 015c LATIN CAPITAL LETTER S WITH CIRCUMFLEX DF 00df LATIN SMALL LETTER SHARP S (German) E0 00e0 LATIN SMALL LETTER A WITH GRAVE E1 00e1 LATIN SMALL LETTER A WITH ACUTE E2 00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX E3 ???? EMPTY E4 00e4 LATIN SMALL LETTER A WITH DIAERESIS E5 010b LATIN SMALL LETTER C WITH DOT ABOVE E6 0109 LATIN SMALL LETTER C WITH CIRCUMFLEX E7 00e7 LATIN SMALL LETTER C WITH CEDILLA E8 00e8 LATIN SMALL LETTER E WITH GRAVE E9 00e9 LATIN SMALL LETTER E WITH ACUTE EA 00ea LATIN SMALL LETTER E WITH CIRCUMFLEX EB 00eb LATIN SMALL LETTER E WITH DIAERESIS EC 00ec LATIN SMALL LETTER I WITH GRAVE ED 00ed LATIN SMALL LETTER I WITH ACUTE EE 00ee LATIN SMALL LETTER I WITH CIRCUMFLEX EF 00ef LATIN SMALL LETTER I WITH DIAERESIS F0 ???? EMPTY F1 00f1 LATIN SMALL LETTER N WITH TILDE F2 00f2 LATIN SMALL LETTER O WITH GRAVE F3 00f3 LATIN SMALL LETTER O WITH ACUTE F4 00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX F5 0121 LATIN SMALL LETTER G WITH DOT ABOVE F6 00f6 LATIN SMALL LETTER O WITH DIAERESIS F7 00f7 DIVISION SIGN F8 011d LATIN SMALL LETTER G WITH CIRCUMFLEX F9 00f9 LATIN SMALL LETTER U WITH GRAVE FA 00fa LATIN SMALL LETTER U WITH ACUTE FB 00fb LATIN SMALL LETTER U WITH CIRCUMFLEX FC 00fc LATIN SMALL LETTER U WITH DIAERESIS FD 016d LATIN SMALL LETTER U WITH BREVE FE 015d LATIN SMALL LETTER S WITH CIRCUMFLEX FF 02d9 DOT ABOVE cyrus-imspd-v1.8/lib/charset/iso-8859-4.t0100644004310100000120000002201207372056423017123 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 0104 LATIN CAPITAL LETTER A WITH OGONEK A2 0138 LATIN SMALL LETTER KRA (Greenlandic) A3 0156 LATIN CAPITAL LETTER R WITH CEDILLA A4 00a4 CURRENCY SIGN A5 0128 LATIN CAPITAL LETTER I WITH TILDE A6 013b LATIN CAPITAL LETTER L WITH CEDILLA A7 00a7 SECTION SIGN A8 00a8 DIAERESIS A9 0160 LATIN CAPITAL LETTER S WITH CARON AA 0112 LATIN CAPITAL LETTER E WITH MACRON AB 0122 LATIN CAPITAL LETTER G WITH CEDILLA AC 0166 LATIN CAPITAL LETTER T WITH STROKE AD 00ad SOFT HYPHEN AE 017d LATIN CAPITAL LETTER Z WITH CARON AF 00af MACRON B0 00b0 DEGREE SIGN B1 0105 LATIN SMALL LETTER A WITH OGONEK B2 02db OGONEK B3 0157 LATIN SMALL LETTER R WITH CEDILLA B4 00b4 ACUTE ACCENT B5 0129 LATIN SMALL LETTER I WITH TILDE B6 013c LATIN SMALL LETTER L WITH CEDILLA B7 02c7 CARON B8 00b8 CEDILLA B9 0161 LATIN SMALL LETTER S WITH CARON BA 0113 LATIN SMALL LETTER E WITH MACRON BB 0123 LATIN SMALL LETTER G WITH CEDILLA BC 0167 LATIN SMALL LETTER T WITH STROKE BD 014a LATIN CAPITAL LETTER ENG (Lappish) BE 017e LATIN SMALL LETTER Z WITH CARON BF 014b LATIN SMALL LETTER ENG (Lappish) C0 0100 LATIN CAPITAL LETTER A WITH MACRON C1 00c1 LATIN CAPITAL LETTER A WITH ACUTE C2 00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX C3 00c3 LATIN CAPITAL LETTER A WITH TILDE C4 00c4 LATIN CAPITAL LETTER A WITH DIAERESIS C5 00c5 LATIN CAPITAL LETTER A WITH RING ABOVE C6 00c6 LATIN CAPITAL LETTER AE C7 012e LATIN CAPITAL LETTER I WITH OGONEK C8 010c LATIN CAPITAL LETTER C WITH CARON C9 00c9 LATIN CAPITAL LETTER E WITH ACUTE CA 0118 LATIN CAPITAL LETTER E WITH OGONEK CB 00cb LATIN CAPITAL LETTER E WITH DIAERESIS CC 0116 LATIN CAPITAL LETTER E WITH DOT ABOVE CD 00cd LATIN CAPITAL LETTER I WITH ACUTE CE 00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX CF 012a LATIN CAPITAL LETTER I WITH MACRON D0 0110 LATIN CAPITAL LETTER D WITH STROKE D1 0145 LATIN CAPITAL LETTER N WITH CEDILLA D2 014c LATIN CAPITAL LETTER O WITH MACRON D3 0136 LATIN CAPITAL LETTER K WITH CEDILLA D4 00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX D5 00d5 LATIN CAPITAL LETTER O WITH TILDE D6 00d6 LATIN CAPITAL LETTER O WITH DIAERESIS D7 00d7 MULTIPLICATION SIGN D8 00d8 LATIN CAPITAL LETTER O WITH STROKE D9 0172 LATIN CAPITAL LETTER U WITH OGONEK DA 00da LATIN CAPITAL LETTER U WITH ACUTE DB 00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX DC 00dc LATIN CAPITAL LETTER U WITH DIAERESIS DD 0168 LATIN CAPITAL LETTER U WITH TILDE DE 016a LATIN CAPITAL LETTER U WITH MACRON DF 00df LATIN SMALL LETTER SHARP S (German) E0 0101 LATIN SMALL LETTER A WITH MACRON E1 00e1 LATIN SMALL LETTER A WITH ACUTE E2 00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX E3 00e3 LATIN SMALL LETTER A WITH TILDE E4 00e4 LATIN SMALL LETTER A WITH DIAERESIS E5 00e5 LATIN SMALL LETTER A WITH RING ABOVE E6 00e6 LATIN SMALL LETTER AE E7 012f LATIN SMALL LETTER I WITH OGONEK E8 010d LATIN SMALL LETTER C WITH CARON E9 00e9 LATIN SMALL LETTER E WITH ACUTE EA 0119 LATIN SMALL LETTER E WITH OGONEK EB 00eb LATIN SMALL LETTER E WITH DIAERESIS EC 0117 LATIN SMALL LETTER E WITH DOT ABOVE ED 00ed LATIN SMALL LETTER I WITH ACUTE EE 00ee LATIN SMALL LETTER I WITH CIRCUMFLEX EF 012b LATIN SMALL LETTER I WITH MACRON F0 0111 LATIN SMALL LETTER D WITH STROKE F1 0146 LATIN SMALL LETTER N WITH CEDILLA F2 014d LATIN SMALL LETTER O WITH MACRON F3 0137 LATIN SMALL LETTER K WITH CEDILLA F4 00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX F5 00f5 LATIN SMALL LETTER O WITH TILDE F6 00f6 LATIN SMALL LETTER O WITH DIAERESIS F7 00f7 DIVISION SIGN F8 00f8 LATIN SMALL LETTER O WITH STROKE F9 0173 LATIN SMALL LETTER U WITH OGONEK FA 00fa LATIN SMALL LETTER U WITH ACUTE FB 00fb LATIN SMALL LETTER U WITH CIRCUMFLEX FC 00fc LATIN SMALL LETTER U WITH DIAERESIS FD 0169 LATIN SMALL LETTER U WITH TILDE FE 016b LATIN SMALL LETTER U WITH MACRON FF 02d9 DOT ABOVE cyrus-imspd-v1.8/lib/charset/iso-8859-5.t0100644004310100000120000002147207372056423017135 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 0401 CYRILLIC CAPITAL LETTER IO A2 0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian) A3 0403 CYRILLIC CAPITAL LETTER GJE (Macedonian) A4 0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE A5 0405 CYRILLIC CAPITAL LETTER DZE (Macedonian) A6 0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I A7 0407 CYRILLIC CAPITAL LETTER YI (Ukrainian) A8 0408 CYRILLIC CAPITAL LETTER JE A9 0409 CYRILLIC CAPITAL LETTER LJE AA 040a CYRILLIC CAPITAL LETTER NJE AB 040b CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) AC 040c CYRILLIC CAPITAL LETTER KJE (Macedonian) AD 00ad SOFT HYPHEN AE 040e CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) AF 040f CYRILLIC CAPITAL LETTER DZHE B0 0410 CYRILLIC CAPITAL LETTER A B1 0411 CYRILLIC CAPITAL LETTER BE B2 0412 CYRILLIC CAPITAL LETTER VE B3 0413 CYRILLIC CAPITAL LETTER GHE B4 0414 CYRILLIC CAPITAL LETTER DE B5 0415 CYRILLIC CAPITAL LETTER IE B6 0416 CYRILLIC CAPITAL LETTER ZHE B7 0417 CYRILLIC CAPITAL LETTER ZE B8 0418 CYRILLIC CAPITAL LETTER I B9 0419 CYRILLIC CAPITAL LETTER SHORT I BA 041a CYRILLIC CAPITAL LETTER KA BB 041b CYRILLIC CAPITAL LETTER EL BC 041c CYRILLIC CAPITAL LETTER EM BD 041d CYRILLIC CAPITAL LETTER EN BE 041e CYRILLIC CAPITAL LETTER O BF 041f CYRILLIC CAPITAL LETTER PE C0 0420 CYRILLIC CAPITAL LETTER ER C1 0421 CYRILLIC CAPITAL LETTER ES C2 0422 CYRILLIC CAPITAL LETTER TE C3 0423 CYRILLIC CAPITAL LETTER U C4 0424 CYRILLIC CAPITAL LETTER EF C5 0425 CYRILLIC CAPITAL LETTER HA C6 0426 CYRILLIC CAPITAL LETTER TSE C7 0427 CYRILLIC CAPITAL LETTER CHE C8 0428 CYRILLIC CAPITAL LETTER SHA C9 0429 CYRILLIC CAPITAL LETTER SHCHA CA 042a CYRILLIC CAPITAL LETTER HARD SIGN CB 042b CYRILLIC CAPITAL LETTER YERU CC 042c CYRILLIC CAPITAL LETTER SOFT SIGN CD 042d CYRILLIC CAPITAL LETTER E CE 042e CYRILLIC CAPITAL LETTER YU CF 042f CYRILLIC CAPITAL LETTER YA D0 0430 CYRILLIC SMALL LETTER A D1 0431 CYRILLIC SMALL LETTER BE D2 0432 CYRILLIC SMALL LETTER VE D3 0433 CYRILLIC SMALL LETTER GHE D4 0434 CYRILLIC SMALL LETTER DE D5 0435 CYRILLIC SMALL LETTER IE D6 0436 CYRILLIC SMALL LETTER ZHE D7 0437 CYRILLIC SMALL LETTER ZE D8 0438 CYRILLIC SMALL LETTER I D9 0439 CYRILLIC SMALL LETTER SHORT I DA 043a CYRILLIC SMALL LETTER KA DB 043b CYRILLIC SMALL LETTER EL DC 043c CYRILLIC SMALL LETTER EM DD 043d CYRILLIC SMALL LETTER EN DE 043e CYRILLIC SMALL LETTER O DF 043f CYRILLIC SMALL LETTER PE E0 0440 CYRILLIC SMALL LETTER ER E1 0441 CYRILLIC SMALL LETTER ES E2 0442 CYRILLIC SMALL LETTER TE E3 0443 CYRILLIC SMALL LETTER U E4 0444 CYRILLIC SMALL LETTER EF E5 0445 CYRILLIC SMALL LETTER HA E6 0446 CYRILLIC SMALL LETTER TSE E7 0447 CYRILLIC SMALL LETTER CHE E8 0448 CYRILLIC SMALL LETTER SHA E9 0449 CYRILLIC SMALL LETTER SHCHA EA 044a CYRILLIC SMALL LETTER HARD SIGN EB 044b CYRILLIC SMALL LETTER YERU EC 044c CYRILLIC SMALL LETTER SOFT SIGN ED 044d CYRILLIC SMALL LETTER E EE 044e CYRILLIC SMALL LETTER YU EF 044f CYRILLIC SMALL LETTER YA F0 2116 NUMERO SIGN F1 0451 CYRILLIC SMALL LETTER IO F2 0452 CYRILLIC SMALL LETTER DJE (Serbocroatian) F3 0453 CYRILLIC SMALL LETTER GJE (Macedonian) F4 0454 CYRILLIC SMALL LETTER UKRAINIAN IE F5 0455 CYRILLIC SMALL LETTER DZE (Macedonian) F6 0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I F7 0457 CYRILLIC SMALL LETTER YI (Ukrainian) F8 0458 CYRILLIC SMALL LETTER JE F9 0459 CYRILLIC SMALL LETTER LJE FA 045a CYRILLIC SMALL LETTER NJE FB 045b CYRILLIC SMALL LETTER TSHE (Serbocroatian) FC 045c CYRILLIC SMALL LETTER KJE (Macedonian) FD 00a7 SECTION SIGN FE 045e CYRILLIC SMALL LETTER SHORT U (Byelorussian) FF 045f CYRILLIC SMALL LETTER DZHE cyrus-imspd-v1.8/lib/charset/iso-8859-6.t0100644004310100000120000001671107372056423017136 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0660 ARABIC-INDIC DIGIT ZERO 31 0661 ARABIC-INDIC DIGIT ONE 32 0662 ARABIC-INDIC DIGIT TWO 33 0663 ARABIC-INDIC DIGIT THREE 34 0664 ARABIC-INDIC DIGIT FOUR 35 0665 ARABIC-INDIC DIGIT FIVE 36 0666 ARABIC-INDIC DIGIT SIX 37 0667 ARABIC-INDIC DIGIT SEVEN 38 0668 ARABIC-INDIC DIGIT EIGHT 39 0669 ARABIC-INDIC DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 ???? EMPTY A2 ???? EMPTY A3 ???? EMPTY A4 00a4 CURRENCY SIGN A5 ???? EMPTY A6 ???? EMPTY A7 ???? EMPTY A8 ???? EMPTY A9 ???? EMPTY AA ???? EMPTY AB ???? EMPTY AC 060c ARABIC COMMA AD 00ad SOFT HYPHEN AE ???? EMPTY AF ???? EMPTY B0 ???? EMPTY B1 ???? EMPTY B2 ???? EMPTY B3 ???? EMPTY B4 ???? EMPTY B5 ???? EMPTY B6 ???? EMPTY B7 ???? EMPTY B8 ???? EMPTY B9 ???? EMPTY BA ???? EMPTY BB 061b ARABIC SEMICOLON BC ???? EMPTY BD ???? EMPTY BE ???? EMPTY BF 061f ARABIC QUESTION MARK C0 ???? EMPTY C1 0621 ARABIC LETTER HAMZA C2 0622 ARABIC LETTER ALEF WITH MADDA ABOVE C3 0623 ARABIC LETTER ALEF WITH HAMZA ABOVE C4 0624 ARABIC LETTER WAW WITH HAMZA ABOVE C5 0625 ARABIC LETTER ALEF WITH HAMZA BELOW C6 0626 ARABIC LETTER YEH WITH HAMZA ABOVE C7 0627 ARABIC LETTER ALEF C8 0628 ARABIC LETTER BEH C9 0629 ARABIC LETTER TEH MARBUTA CA 062a ARABIC LETTER TEH CB 062b ARABIC LETTER THEH CC 062c ARABIC LETTER JEEM CD 062d ARABIC LETTER HAH CE 062e ARABIC LETTER KHAH CF 062f ARABIC LETTER DAL D0 0630 ARABIC LETTER THAL D1 0631 ARABIC LETTER REH D2 0632 ARABIC LETTER ZAIN D3 0633 ARABIC LETTER SEEN D4 0634 ARABIC LETTER SHEEN D5 0635 ARABIC LETTER SAD D6 0636 ARABIC LETTER DAD D7 0637 ARABIC LETTER TAH D8 0638 ARABIC LETTER ZAH D9 0639 ARABIC LETTER AIN DA 063a ARABIC LETTER GHAIN DB ???? EMPTY DC ???? EMPTY DD ???? EMPTY DE ???? EMPTY DF ???? EMPTY E0 0640 ARABIC TATWEEL E1 0641 ARABIC LETTER FEH E2 0642 ARABIC LETTER QAF E3 0643 ARABIC LETTER KAF E4 0644 ARABIC LETTER LAM E5 0645 ARABIC LETTER MEEM E6 0646 ARABIC LETTER NOON E7 0647 ARABIC LETTER HEH E8 0648 ARABIC LETTER WAW E9 0649 ARABIC LETTER ALEF MAKSURA EA 064a ARABIC LETTER YEH EB 064b ARABIC FATHATAN EC 064c ARABIC DAMMATAN ED 064d ARABIC KASRATAN EE 064e ARABIC FATHA EF 064f ARABIC DAMMA F0 0650 ARABIC KASRA F1 0651 ARABIC SHADDA F2 0652 ARABIC SUKUN F3 ???? EMPTY F4 ???? EMPTY F5 ???? EMPTY F6 ???? EMPTY F7 ???? EMPTY F8 ???? EMPTY F9 ???? EMPTY FA ???? EMPTY FB ???? EMPTY FC ???? EMPTY FD ???? EMPTY FE ???? EMPTY FF ???? EMPTY cyrus-imspd-v1.8/lib/charset/iso-8859-7.t0100644004310100000120000002075607372056423017143 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 02bd MODIFIER LETTER REVERSED COMMA A2 02bc MODIFIER LETTER APOSTROPHE A3 00a3 POUND SIGN A4 ???? EMPTY A5 ???? EMPTY A6 00a6 BROKEN BAR A7 00a7 SECTION SIGN A8 00a8 DIAERESIS A9 00a9 COPYRIGHT SIGN AA ???? EMPTY AB 00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK AC 00ac NOT SIGN AD 00ad SOFT HYPHEN AE ???? EMPTY AF 2015 HORIZONTAL BAR B0 00b0 DEGREE SIGN B1 00b1 PLUS-MINUS SIGN B2 00b2 SUPERSCRIPT TWO B3 00b3 SUPERSCRIPT THREE B4 0384 GREEK TONOS B5 0385 GREEK DIALYTIKA TONOS B6 0386 GREEK CAPITAL LETTER ALPHA WITH TONOS B7 00b7 MIDDLE DOT B8 0388 GREEK CAPITAL LETTER EPSILON WITH TONOS B9 0389 GREEK CAPITAL LETTER ETA WITH TONOS BA 038a GREEK CAPITAL LETTER IOTA WITH TONOS BB 00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK BC 038c GREEK CAPITAL LETTER OMICRON WITH TONOS BD 00bd VULGAR FRACTION ONE HALF BE 038e GREEK CAPITAL LETTER UPSILON WITH TONOS BF 038f GREEK CAPITAL LETTER OMEGA WITH TONOS C0 0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS C1 0391 GREEK CAPITAL LETTER ALPHA C2 0392 GREEK CAPITAL LETTER BETA C3 0393 GREEK CAPITAL LETTER GAMMA C4 0394 GREEK CAPITAL LETTER DELTA C5 0395 GREEK CAPITAL LETTER EPSILON C6 0396 GREEK CAPITAL LETTER ZETA C7 0397 GREEK CAPITAL LETTER ETA C8 0398 GREEK CAPITAL LETTER THETA C9 0399 GREEK CAPITAL LETTER IOTA CA 039a GREEK CAPITAL LETTER KAPPA CB 039b GREEK CAPITAL LETTER LAMDA CC 039c GREEK CAPITAL LETTER MU CD 039d GREEK CAPITAL LETTER NU CE 039e GREEK CAPITAL LETTER XI CF 039f GREEK CAPITAL LETTER OMICRON D0 03a0 GREEK CAPITAL LETTER PI D1 03a1 GREEK CAPITAL LETTER RHO D2 ???? EMPTY D3 03a3 GREEK CAPITAL LETTER SIGMA D4 03a4 GREEK CAPITAL LETTER TAU D5 03a5 GREEK CAPITAL LETTER UPSILON D6 03a6 GREEK CAPITAL LETTER PHI D7 03a7 GREEK CAPITAL LETTER CHI D8 03a8 GREEK CAPITAL LETTER PSI D9 03a9 GREEK CAPITAL LETTER OMEGA DA 03aa GREEK CAPITAL LETTER IOTA WITH DIALYTIKA DB 03ab GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA DC 03ac GREEK SMALL LETTER ALPHA WITH TONOS DD 03ad GREEK SMALL LETTER EPSILON WITH TONOS DE 03ae GREEK SMALL LETTER ETA WITH TONOS DF 03af GREEK SMALL LETTER IOTA WITH TONOS E0 03b0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS E1 03b1 GREEK SMALL LETTER ALPHA E2 03b2 GREEK SMALL LETTER BETA E3 03b3 GREEK SMALL LETTER GAMMA E4 03b4 GREEK SMALL LETTER DELTA E5 03b5 GREEK SMALL LETTER EPSILON E6 03b6 GREEK SMALL LETTER ZETA E7 03b7 GREEK SMALL LETTER ETA E8 03b8 GREEK SMALL LETTER THETA E9 03b9 GREEK SMALL LETTER IOTA EA 03ba GREEK SMALL LETTER KAPPA EB 03bb GREEK SMALL LETTER LAMDA EC 03bc GREEK SMALL LETTER MU ED 03bd GREEK SMALL LETTER NU EE 03be GREEK SMALL LETTER XI EF 03bf GREEK SMALL LETTER OMICRON F0 03c0 GREEK SMALL LETTER PI F1 03c1 GREEK SMALL LETTER RHO F2 03c2 GREEK SMALL LETTER FINAL SIGMA F3 03c3 GREEK SMALL LETTER SIGMA F4 03c4 GREEK SMALL LETTER TAU F5 03c5 GREEK SMALL LETTER UPSILON F6 03c6 GREEK SMALL LETTER PHI F7 03c7 GREEK SMALL LETTER CHI F8 03c8 GREEK SMALL LETTER PSI F9 03c9 GREEK SMALL LETTER OMEGA FA 03ca GREEK SMALL LETTER IOTA WITH DIALYTIKA FB 03cb GREEK SMALL LETTER UPSILON WITH DIALYTIKA FC 03cc GREEK SMALL LETTER OMICRON WITH TONOS FD 03cd GREEK SMALL LETTER UPSILON WITH TONOS FE 03ce GREEK SMALL LETTER OMEGA WITH TONOS FF ???? EMPTY cyrus-imspd-v1.8/lib/charset/iso-8859-8.t0100644004310100000120000001651707372056423017144 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 ???? EMPTY A2 00a2 CENT SIGN A3 00a3 POUND SIGN A4 00a4 CURRENCY SIGN A5 00a5 YEN SIGN A6 00a6 BROKEN BAR A7 00a7 SECTION SIGN A8 00a8 DIAERESIS A9 00a9 COPYRIGHT SIGN AA 00d7 MULTIPLICATION SIGN AB 00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK AC 00ac NOT SIGN AD 00ad SOFT HYPHEN AE 00ae REGISTERED SIGN AF 203e OVERLINE B0 00b0 DEGREE SIGN B1 00b1 PLUS-MINUS SIGN B2 00b2 SUPERSCRIPT TWO B3 00b3 SUPERSCRIPT THREE B4 00b4 ACUTE ACCENT B5 00b5 MICRO SIGN B6 00b6 PILCROW SIGN B7 00b7 MIDDLE DOT B8 00b8 CEDILLA B9 00b9 SUPERSCRIPT ONE BA 00f7 DIVISION SIGN BB 00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK BC 00bc VULGAR FRACTION ONE QUARTER BD 00bd VULGAR FRACTION ONE HALF BE 00be VULGAR FRACTION THREE QUARTERS BF ???? EMPTY C0 ???? EMPTY C1 ???? EMPTY C2 ???? EMPTY C3 ???? EMPTY C4 ???? EMPTY C5 ???? EMPTY C6 ???? EMPTY C7 ???? EMPTY C8 ???? EMPTY C9 ???? EMPTY CA ???? EMPTY CB ???? EMPTY CC ???? EMPTY CD ???? EMPTY CE ???? EMPTY CF ???? EMPTY D0 ???? EMPTY D1 ???? EMPTY D2 ???? EMPTY D3 ???? EMPTY D4 ???? EMPTY D5 ???? EMPTY D6 ???? EMPTY D7 ???? EMPTY D8 ???? EMPTY D9 ???? EMPTY DA ???? EMPTY DB ???? EMPTY DC ???? EMPTY DD ???? EMPTY DE ???? EMPTY DF 2017 DOUBLE LOW LINE E0 05d0 HEBREW LETTER ALEF E1 05d1 HEBREW LETTER BET E2 05d2 HEBREW LETTER GIMEL E3 05d3 HEBREW LETTER DALET E4 05d4 HEBREW LETTER HE E5 05d5 HEBREW LETTER VAV E6 05d6 HEBREW LETTER ZAYIN E7 05d7 HEBREW LETTER HET E8 05d8 HEBREW LETTER TET E9 05d9 HEBREW LETTER YOD EA 05da HEBREW LETTER FINAL KAF EB 05db HEBREW LETTER KAF EC 05dc HEBREW LETTER LAMED ED 05dd HEBREW LETTER FINAL MEM EE 05de HEBREW LETTER MEM EF 05df HEBREW LETTER FINAL NUN F0 05e0 HEBREW LETTER NUN F1 05e1 HEBREW LETTER SAMEKH F2 05e2 HEBREW LETTER AYIN F3 05e3 HEBREW LETTER FINAL PE F4 05e4 HEBREW LETTER PE F5 05e5 HEBREW LETTER FINAL TSADI F6 05e6 HEBREW LETTER TSADI F7 05e7 HEBREW LETTER QOF F8 05e8 HEBREW LETTER RESH F9 05e9 HEBREW LETTER SHIN FA 05ea HEBREW LETTER TAV FB ???? EMPTY FC ???? EMPTY FD ???? EMPTY FE ???? EMPTY FF ???? EMPTY cyrus-imspd-v1.8/lib/charset/iso-8859-9.t0100644004310100000120000002141407372056423017135 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 0080 PADDING CHARACTER (PAD) 81 0081 HIGH OCTET PRESET (HOP) 82 0082 BREAK PERMITTED HERE (BPH) 83 0083 NO BREAK HERE (NBH) 84 0084 INDEX (IND) 85 0085 NEXT LINE (NEL) 86 0086 START OF SELECTED AREA (SSA) 87 0087 END OF SELECTED AREA (ESA) 88 0088 CHARACTER TABULATION SET (HTS) 89 0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) 8A 008a LINE TABULATION SET (VTS) 8B 008b PARTIAL LINE FORWARD (PLD) 8C 008c PARTIAL LINE BACKWARD (PLU) 8D 008d REVERSE LINE FEED (RI) 8E 008e SINGLE-SHIFT TWO (SS2) 8F 008f SINGLE-SHIFT THREE (SS3) 90 0090 DEVICE CONTROL STRING (DCS) 91 0091 PRIVATE USE ONE (PU1) 92 0092 PRIVATE USE TWO (PU2) 93 0093 SET TRANSMIT STATE (STS) 94 0094 CANCEL CHARACTER (CCH) 95 0095 MESSAGE WAITING (MW) 96 0096 START OF GUARDED AREA (SPA) 97 0097 END OF GUARDED AREA (EPA) 98 0098 START OF STRING (SOS) 99 0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) 9A 009a SINGLE CHARACTER INTRODUCER (SCI) 9B 009b CONTROL SEQUENCE INTRODUCER (CSI) 9C 009c STRING TERMINATOR (ST) 9D 009d OPERATING SYSTEM COMMAND (OSC) 9E 009e PRIVACY MESSAGE (PM) 9F 009f APPLICATION PROGRAM COMMAND (APC) A0 00a0 NO-BREAK SPACE A1 00a1 INVERTED EXCLAMATION MARK A2 00a2 CENT SIGN A3 00a3 POUND SIGN A4 00a4 CURRENCY SIGN A5 00a5 YEN SIGN A6 00a6 BROKEN BAR A7 00a7 SECTION SIGN A8 00a8 DIAERESIS A9 00a9 COPYRIGHT SIGN AA 00aa FEMININE ORDINAL INDICATOR AB 00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK AC 00ac NOT SIGN AD 00ad SOFT HYPHEN AE 00ae REGISTERED SIGN AF 00af MACRON B0 00b0 DEGREE SIGN B1 00b1 PLUS-MINUS SIGN B2 00b2 SUPERSCRIPT TWO B3 00b3 SUPERSCRIPT THREE B4 00b4 ACUTE ACCENT B5 00b5 MICRO SIGN B6 00b6 PILCROW SIGN B7 00b7 MIDDLE DOT B8 00b8 CEDILLA B9 00b9 SUPERSCRIPT ONE BA 00ba MASCULINE ORDINAL INDICATOR BB 00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK BC 00bc VULGAR FRACTION ONE QUARTER BD 00bd VULGAR FRACTION ONE HALF BE 00be VULGAR FRACTION THREE QUARTERS BF 00bf INVERTED QUESTION MARK C0 00c0 LATIN CAPITAL LETTER A WITH GRAVE C1 00c1 LATIN CAPITAL LETTER A WITH ACUTE C2 00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX C3 00c3 LATIN CAPITAL LETTER A WITH TILDE C4 00c4 LATIN CAPITAL LETTER A WITH DIAERESIS C5 00c5 LATIN CAPITAL LETTER A WITH RING ABOVE C6 00c6 LATIN CAPITAL LETTER AE C7 00c7 LATIN CAPITAL LETTER C WITH CEDILLA C8 00c8 LATIN CAPITAL LETTER E WITH GRAVE C9 00c9 LATIN CAPITAL LETTER E WITH ACUTE CA 00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX CB 00cb LATIN CAPITAL LETTER E WITH DIAERESIS CC 00cc LATIN CAPITAL LETTER I WITH GRAVE CD 00cd LATIN CAPITAL LETTER I WITH ACUTE CE 00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX CF 00cf LATIN CAPITAL LETTER I WITH DIAERESIS D0 011e LATIN CAPITAL LETTER G WITH BREVE D1 00d1 LATIN CAPITAL LETTER N WITH TILDE D2 00d2 LATIN CAPITAL LETTER O WITH GRAVE D3 00d3 LATIN CAPITAL LETTER O WITH ACUTE D4 00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX D5 00d5 LATIN CAPITAL LETTER O WITH TILDE D6 00d6 LATIN CAPITAL LETTER O WITH DIAERESIS D7 00d7 MULTIPLICATION SIGN D8 00d8 LATIN CAPITAL LETTER O WITH STROKE D9 00d9 LATIN CAPITAL LETTER U WITH GRAVE DA 00da LATIN CAPITAL LETTER U WITH ACUTE DB 00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX DC 00dc LATIN CAPITAL LETTER U WITH DIAERESIS DD 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE DE 015e LATIN CAPITAL LETTER S WITH CEDILLA DF 00df LATIN SMALL LETTER SHARP S (German) E0 00e0 LATIN SMALL LETTER A WITH GRAVE E1 00e1 LATIN SMALL LETTER A WITH ACUTE E2 00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX E3 00e3 LATIN SMALL LETTER A WITH TILDE E4 00e4 LATIN SMALL LETTER A WITH DIAERESIS E5 00e5 LATIN SMALL LETTER A WITH RING ABOVE E6 00e6 LATIN SMALL LETTER AE E7 00e7 LATIN SMALL LETTER C WITH CEDILLA E8 00e8 LATIN SMALL LETTER E WITH GRAVE E9 00e9 LATIN SMALL LETTER E WITH ACUTE EA 00ea LATIN SMALL LETTER E WITH CIRCUMFLEX EB 00eb LATIN SMALL LETTER E WITH DIAERESIS EC 00ec LATIN SMALL LETTER I WITH GRAVE ED 00ed LATIN SMALL LETTER I WITH ACUTE EE 00ee LATIN SMALL LETTER I WITH CIRCUMFLEX EF 00ef LATIN SMALL LETTER I WITH DIAERESIS F0 011f LATIN SMALL LETTER G WITH BREVE F1 00f1 LATIN SMALL LETTER N WITH TILDE F2 00f2 LATIN SMALL LETTER O WITH GRAVE F3 00f3 LATIN SMALL LETTER O WITH ACUTE F4 00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX F5 00f5 LATIN SMALL LETTER O WITH TILDE F6 00f6 LATIN SMALL LETTER O WITH DIAERESIS F7 00f7 DIVISION SIGN F8 00f8 LATIN SMALL LETTER O WITH STROKE F9 00f9 LATIN SMALL LETTER U WITH GRAVE FA 00fa LATIN SMALL LETTER U WITH ACUTE FB 00fb LATIN SMALL LETTER U WITH CIRCUMFLEX FC 00fc LATIN SMALL LETTER U WITH DIAERESIS FD 0131 LATIN SMALL LETTER I DOTLESS FE 015f LATIN SMALL LETTER S WITH CEDILLA FF 00ff LATIN SMALL LETTER Y WITH DIAERESIS cyrus-imspd-v1.8/lib/charset/koi8-r.t0100644004310100000120000002115207372056423016672 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 2500 FORMS LIGHT HORIZONTAL 81 2502 FORMS LIGHT VERTICAL 82 250c FORMS LIGHT DOWN AND RIGHT 83 2510 FORMS LIGHT DOWN AND LEFT 84 2514 FORMS LIGHT UP 85 2518 FORMS LIGHT UP AND LEFT 86 251c FORMS LIGHT VERTICAL AND RIGHT 87 2524 FORMS LIGHT VERTICAL AND LEFT 88 252c FORMS LIGHT DOWN AND HORIZONTAL 89 2534 FORMS LIGHT UP AND HORIZONTAL 8A 253c FORMS LIGHT VERTICAL AND HORIZONTAL 8B 2580 UPPER HALF BLOCK 8C 2584 LOWER HALF BLOCK 8D 2588 FULL BLOCK 8E 258c LEFT HALF BLOCK 8F 2590 RIGHT HALF BLOCK 90 2591 LIGHT SHADE 91 2592 MEDIUM SHADE 92 2593 DARK SHADE 93 2320 TOP HALF INTEGRAL 94 25a0 BLACK SMALL SQUARE 95 2219 BULLET OPERATOR 96 221a SQUARE ROOT 97 2248 ALMOST EQUAL TO 98 2264 LESS THAN OR EQUAL TO 99 2265 GREATER THAN OR EQUAL TO 9A 00a0 NON-BREAKING SPACE 9B 2321 BOTTOM HALF INTEGRAL 9C 00b0 DEGREE SIGN 9D 00b2 SUPERSCRIPT DIGIT TWO 9E 00b7 MIDDLE DOT 9F 00f7 DIVISION SIGN A0 2550 FORMS DOUBLE HORIZONTAL A1 2551 FORMS DOUBLE VERTICAL A2 2552 FORMS DOWN SINGLE AND RIGHT DOUBLE A3 0451 CYRILLIC SMALL LETTER IO A4 2553 FORMS DOWN DOUBLE AND RIGHT SINGLE A5 2554 FORMS DOUBLE DOWN AND RIGHT A6 2555 FORMS DOWN SINGLE AND LEFT DOUBLE A7 2556 FORMS DOWN DOUBLE AND LEFT SINGLE A8 2557 FORMS DOUBLE DOWN AND LEFT A9 2558 FORMS UP SINGLE AND RIGHT DOUBLE AA 2559 FORMS UP DOUBLE AND RIGHT SINGLE AB 255a FORMS DOUBLE UP AND RIGHT AC 255b FORMS UP SINGLE AND LEFT DOUBLE AD 255c FORMS UP DOUBLE AND LEFT SINGLE AE 255d FORMS DOUBLE UP AND LEFT AF 255e FORMS VERTICAL SINGLE AND RIGHT DOUBLE B0 255f FORMS VERTICAL DOUBLE AND RIGHT SINGLE B1 2560 FORMS DOUBLE VERTICAL AND RIGHT B2 2561 FORMS VERTICAL SINGLE AND LEFT DOUBLE B3 0401 CYRILLIC CAPITAL LETTER IO B4 2562 FORMS VERTICAL DOUBLE AND LEFT SINGLE B5 2563 FORMS DOUBLE VERTICAL AND LEFT B6 2564 FORMS DOWN SINGLE AND HORIZONTAL DOUBLE B7 2565 FORMS DOWN DOUBLE AND HORIZONTAL SINGLE B8 2566 FORMS DOUBLE DOWN AND HORIZONTAL B9 2567 FORMS UP SINGLE AND HORIZONTAL DOUBLE BA 2568 FORMS UP DOUBLE AND HORIZONTAL SINGLE BB 2569 FORMS DOUBLE UP AND HORIZONTAL BC 256a FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE BD 256b FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE BE 256c FORMS DOUBLE VERTICAL AND HORIZONTAL BF 00a9 COPYRIGHT SIGN C0 044e CYRILLIC SMALL LETTER IU C1 0430 CYRILLIC SMALL LETTER A C2 0431 CYRILLIC SMALL LETTER BE C3 0446 CYRILLIC SMALL LETTER TSE C4 0434 CYRILLIC SMALL LETTER DE C5 0435 CYRILLIC SMALL LETTER IE C6 0444 CYRILLIC SMALL LETTER EF C7 0433 CYRILLIC SMALL LETTER GE C8 0445 CYRILLIC SMALL LETTER KHA C9 0438 CYRILLIC SMALL LETTER II CA 0439 CYRILLIC SMALL LETTER SHORT II CB 043a CYRILLIC SMALL LETTER KA CC 043b CYRILLIC SMALL LETTER EL CD 043c CYRILLIC SMALL LETTER EM CE 043d CYRILLIC SMALL LETTER EN CF 043e CYRILLIC SMALL LETTER O D0 043f CYRILLIC SMALL LETTER PE D1 044f CYRILLIC SMALL LETTER IA D2 0440 CYRILLIC SMALL LETTER ER D3 0441 CYRILLIC SMALL LETTER ES D4 0442 CYRILLIC SMALL LETTER TE D5 0443 CYRILLIC SMALL LETTER U D6 0436 CYRILLIC SMALL LETTER ZHE D7 0432 CYRILLIC SMALL LETTER VE D8 044c CYRILLIC SMALL LETTER SOFT SIGN D9 044b CYRILLIC SMALL LETTER YERI DA 0437 CYRILLIC SMALL LETTER ZE DB 0448 CYRILLIC SMALL LETTER SHA DC 044d CYRILLIC SMALL LETTER REVERSED E DD 0449 CYRILLIC SMALL LETTER SHCHA DE 0447 CYRILLIC SMALL LETTER CHE DF 044a CYRILLIC SMALL LETTER HARD SIGN E0 042e CYRILLIC CAPITAL LETTER IU E1 0410 CYRILLIC CAPITAL LETTER A E2 0411 CYRILLIC CAPITAL LETTER BE E3 0426 CYRILLIC CAPITAL LETTER TSE E4 0414 CYRILLIC CAPITAL LETTER DE E5 0415 CYRILLIC CAPITAL LETTER IE E6 0424 CYRILLIC CAPITAL LETTER EF E7 0413 CYRILLIC CAPITAL LETTER GE E8 0425 CYRILLIC CAPITAL LETTER KHA E9 0418 CYRILLIC CAPITAL LETTER II EA 0419 CYRILLIC CAPITAL LETTER SHORT II EB 041a CYRILLIC CAPITAL LETTER KA EC 041b CYRILLIC CAPITAL LETTER EL ED 041c CYRILLIC CAPITAL LETTER EM EE 041d CYRILLIC CAPITAL LETTER EN EF 041e CYRILLIC CAPITAL LETTER O F0 041f CYRILLIC CAPITAL LETTER PE F1 042f CYRILLIC CAPITAL LETTER IA F2 0420 CYRILLIC CAPITAL LETTER ER F3 0421 CYRILLIC CAPITAL LETTER ES F4 0422 CYRILLIC CAPITAL LETTER TE F5 0423 CYRILLIC CAPITAL LETTER U F6 0416 CYRILLIC CAPITAL LETTER ZHE F7 0412 CYRILLIC CAPITAL LETTER VE F8 042c CYRILLIC CAPITAL LETTER SOFT SIGN F9 042b CYRILLIC CAPITAL LETTER YERI FA 0417 CYRILLIC CAPITAL LETTER ZE FB 0428 CYRILLIC CAPITAL LETTER SHA FC 042d CYRILLIC CAPITAL LETTER REVERSED E FD 0429 CYRILLIC CAPITAL LETTER SHCHA FE 0427 CYRILLIC CAPITAL LETTER CHE FF 042a CYRILLIC CAPITAL LETTER HARD SIGN cyrus-imspd-v1.8/lib/charset/unidata2.txt0100644004310100000120000154377107372056423017665 0ustar shadowstaff0000;;Cc;0;ON;;;;;N;NULL;;;; 0001;;Cc;0;ON;;;;;N;START OF HEADING;;;; 0002;;Cc;0;ON;;;;;N;START OF TEXT;;;; 0003;;Cc;0;ON;;;;;N;END OF TEXT;;;; 0004;;Cc;0;ON;;;;;N;END OF TRANSMISSION;;;; 0005;;Cc;0;ON;;;;;N;ENQUIRY;;;; 0006;;Cc;0;ON;;;;;N;ACKNOWLEDGE;;;; 0007;;Cc;0;ON;;;;;N;BELL;;;; 0008;;Cc;0;ON;;;;;N;BACKSPACE;;;; 0009;;Cc;0;ON;;;;;N;HORIZONTAL TABULATION;;;; 000A;;Cc;0;ON;;;;;N;LINE FEED;;;; 000B;;Cc;0;ON;;;;;N;VERTICAL TABULATION;;;; 000C;;Cc;0;ON;;;;;N;FORM FEED;;;; 000D;;Cc;0;ON;;;;;N;CARRIAGE RETURN;;;; 000E;;Cc;0;ON;;;;;N;SHIFT OUT;;;; 000F;;Cc;0;ON;;;;;N;SHIFT IN;;;; 0010;;Cc;0;ON;;;;;N;DATA LINK ESCAPE;;;; 0011;;Cc;0;ON;;;;;N;DEVICE CONTROL ONE;;;; 0012;;Cc;0;ON;;;;;N;DEVICE CONTROL TWO;;;; 0013;;Cc;0;ON;;;;;N;DEVICE CONTROL THREE;;;; 0014;;Cc;0;ON;;;;;N;DEVICE CONTROL FOUR;;;; 0015;;Cc;0;ON;;;;;N;NEGATIVE ACKNOWLEDGE;;;; 0016;;Cc;0;ON;;;;;N;SYNCHRONOUS IDLE;;;; 0017;;Cc;0;ON;;;;;N;END OF TRANSMISSION BLOCK;;;; 0018;;Cc;0;ON;;;;;N;CANCEL;;;; 0019;;Cc;0;ON;;;;;N;END OF MEDIUM;;;; 001A;;Cc;0;ON;;;;;N;SUBSTITUTE;;;; 001B;;Cc;0;ON;;;;;N;ESCAPE;;;; 001C;;Cc;0;ON;;;;;N;FILE SEPARATOR;;;; 001D;;Cc;0;ON;;;;;N;GROUP SEPARATOR;;;; 001E;;Cc;0;ON;;;;;N;RECORD SEPARATOR;;;; 001F;;Cc;0;ON;;;;;N;UNIT SEPARATOR;;;; 0020;SPACE;Zs;0;WS;;;;;N;;;;; 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; 0023;NUMBER SIGN;So;0;ET;;;;;N;;;;; 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; 0026;AMPERSAND;So;0;L;;;;;N;;;;; 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; 002A;ASTERISK;So;0;ON;;;;;N;;;;; 002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;; 002C;COMMA;Po;0;CS;;;;;N;;;;; 002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;; 002E;FULL STOP;Po;0;ES;;;;;N;PERIOD;;;; 002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;; 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; 003A;COLON;Po;0;CS;;;;;N;;;;; 003B;SEMICOLON;Po;0;ON;;;;;N;;;;; 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; 0040;COMMERCIAL AT;So;0;L;;;;;N;;;;; 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; 005E;CIRCUMFLEX ACCENT;Lm;0;ON; 0020 0302;;;;N;SPACING CIRCUMFLEX;;;; 005F;LOW LINE;So;0;ON; 0020 0332;;;;N;SPACING UNDERSCORE;;;; 0060;GRAVE ACCENT;Lm;0;ON; 0020 0300;;;;N;SPACING GRAVE;;;; 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; 007C;VERTICAL LINE;So;0;ON;;;;;N;VERTICAL BAR;;;; 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; 007E;TILDE;So;0;ON;;;;;N;;;;; 007F;;Cc;0;ON;;;;;N;DELETE;;;; 0080;;Cc;0;ON;;;;;N;;;;; 0081;;Cc;0;ON;;;;;N;;;;; 0082;;Cc;0;ON;;;;;N;;;;; 0083;;Cc;0;ON;;;;;N;;;;; 0084;;Cc;0;ON;;;;;N;;;;; 0085;;Cc;0;ON;;;;;N;;;;; 0086;;Cc;0;ON;;;;;N;;;;; 0087;;Cc;0;ON;;;;;N;;;;; 0088;;Cc;0;ON;;;;;N;;;;; 0089;;Cc;0;ON;;;;;N;;;;; 008A;;Cc;0;ON;;;;;N;;;;; 008B;;Cc;0;ON;;;;;N;;;;; 008C;;Cc;0;ON;;;;;N;;;;; 008D;;Cc;0;ON;;;;;N;;;;; 008E;;Cc;0;ON;;;;;N;;;;; 008F;;Cc;0;ON;;;;;N;;;;; 0090;;Cc;0;ON;;;;;N;;;;; 0091;;Cc;0;ON;;;;;N;;;;; 0092;;Cc;0;ON;;;;;N;;;;; 0093;;Cc;0;ON;;;;;N;;;;; 0094;;Cc;0;ON;;;;;N;;;;; 0095;;Cc;0;ON;;;;;N;;;;; 0096;;Cc;0;ON;;;;;N;;;;; 0097;;Cc;0;ON;;;;;N;;;;; 0098;;Cc;0;ON;;;;;N;;;;; 0099;;Cc;0;ON;;;;;N;;;;; 009A;;Cc;0;ON;;;;;N;;;;; 009B;;Cc;0;ON;;;;;N;;;;; 009C;;Cc;0;ON;;;;;N;;;;; 009D;;Cc;0;ON;;;;;N;;;;; 009E;;Cc;0;ON;;;;;N;;;;; 009F;;Cc;0;ON;;;;;N;;;;; 00A0;NO-BREAK SPACE;Zs;0;WS; 0020;;;;N;NON-BREAKING SPACE;;;; 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; 00A7;SECTION SIGN;So;0;ON;;;;;N;;;;; 00A8;DIAERESIS;Lm;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;; 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; 00AA;FEMININE ORDINAL INDICATOR;Ll;0;ON; 0061;;;;N;;;;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING GUILLEMET;;;; 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; 00AD;SOFT HYPHEN;Po;0;ON;;;;;N;;;;; 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; 00AF;MACRON;Lm;0;ON; 0020 0304;;;;N;SPACING MACRON;;;; 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; 00B2;SUPERSCRIPT TWO;Nd;0;EN; 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;; 00B3;SUPERSCRIPT THREE;Nd;0;EN; 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;; 00B4;ACUTE ACCENT;Lm;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;; 00B5;MICRO SIGN;Ll;0;ON; 03BC;;;;N;;;;; 00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; 00B8;CEDILLA;Lm;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;; 00B9;SUPERSCRIPT ONE;Nd;0;EN; 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;; 00BA;MASCULINE ORDINAL INDICATOR;Ll;0;ON; 006F;;;;N;;;;; 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING GUILLEMET;;;; 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; 00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON; 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6; 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0; 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE; 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;; 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L; 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; 0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;; 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L; 006C 00B7;;;;N;;;013F;;013F 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L; 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B; 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F; 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163; 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L; 0073;;;;N;;;0053;;0053 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;; 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256; 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;0258; 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;;; 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;; 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;; 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;; 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3; 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;; 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; 01AA;LATIN LETTER REVERSED ESH LOOP;Lo;0;L;;;;;N;;;;; 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; 01BF;LATIN LETTER WYNN;Lo;0;L;;;;;N;;;;; 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L; 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L; 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6; 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L; 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L; 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L; 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9; 01C9;LATIN SMALL LETTER LJ;Ll;0;L; 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L; 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L; 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC; 01CC;LATIN SMALL LETTER NJ;Ll;0;L; 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;;; 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0041 0307 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0061 0307 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3; 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L; 0044 005A;;;;N;;;;01F3;01F2 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L; 0044 007A;;;;N;;;01F1;01F3; 01F3;LATIN SMALL LETTER DZ;Ll;0;L; 0064 007A;;;;N;;;01F1;;01F2 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD; 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;; 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;; 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;; 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;018E;;018E 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;; 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;; 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;; 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;; 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;; 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;;; 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;; 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;;; 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;; 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;; 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;; 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;; 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; 02B0;MODIFIER LETTER SMALL H;Lm;0;L; 0068;;;;N;;;;; 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L; 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; 02B2;MODIFIER LETTER SMALL J;Lm;0;L; 006A;;;;N;;;;; 02B3;MODIFIER LETTER SMALL R;Lm;0;L; 0072;;;;N;;;;; 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L; 0279;;;;N;;;;; 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L; 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L; 0281;;;;N;;;;; 02B7;MODIFIER LETTER SMALL W;Lm;0;L; 0077;;;;N;;;;; 02B8;MODIFIER LETTER SMALL Y;Lm;0;L; 0079;;;;N;;;;; 02B9;MODIFIER LETTER PRIME;Lm;0;L;;;;;N;;;;; 02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;L;;;;;N;;;;; 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C2;MODIFIER LETTER LEFT ARROWHEAD;Lm;0;L;;;;;N;;;;; 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Lm;0;L;;;;;N;;;;; 02C4;MODIFIER LETTER UP ARROWHEAD;Lm;0;L;;;;;N;;;;; 02C5;MODIFIER LETTER DOWN ARROWHEAD;Lm;0;L;;;;;N;;;;; 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;L;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; 02C7;CARON;Lm;0;L;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;; 02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;L;;;;;N;;;;; 02C9;MODIFIER LETTER MACRON;Lm;0;L;;;;;N;;Mandarin Chinese first tone;;; 02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;L;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;; 02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;L;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;; 02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;L;;;;;N;;;;; 02CD;MODIFIER LETTER LOW MACRON;Lm;0;L;;;;;N;;;;; 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;L;;;;;N;MODIFIER LETTER LOW GRAVE;;;; 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;L;;;;;N;MODIFIER LETTER LOW ACUTE;;;; 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Lm;0;L;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Lm;0;L;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; 02D4;MODIFIER LETTER UP TACK;Lm;0;L;;;;;N;;;;; 02D5;MODIFIER LETTER DOWN TACK;Lm;0;L;;;;;N;;;;; 02D6;MODIFIER LETTER PLUS SIGN;Lm;0;L;;;;;N;;;;; 02D7;MODIFIER LETTER MINUS SIGN;Lm;0;L;;;;;N;;;;; 02D8;BREVE;Lm;0;L; 0020 0306;;;;N;SPACING BREVE;;;; 02D9;DOT ABOVE;Lm;0;L; 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;; 02DA;RING ABOVE;Lm;0;L; 0020 030A;;;;N;SPACING RING ABOVE;;;; 02DB;OGONEK;Lm;0;L; 0020 0328;;;;N;SPACING OGONEK;;;; 02DC;SMALL TILDE;Lm;0;L; 0020 0303;;;;N;SPACING TILDE;;;; 02DD;DOUBLE ACUTE ACCENT;Lm;0;L; 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; 02DE;MODIFIER LETTER RHOTIC HOOK;Lm;0;L;;;;;N;;;;; 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L; 0263;;;;N;;;;; 02E1;MODIFIER LETTER SMALL L;Lm;0;L; 006C;;;;N;;;;; 02E2;MODIFIER LETTER SMALL S;Lm;0;L; 0073;;;;N;;;;; 02E3;MODIFIER LETTER SMALL X;Lm;0;L; 0078;;;;N;;;;; 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L; 0295;;;;N;;;;; 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Lm;0;L;;;;;N;;;;; 02E6;MODIFIER LETTER HIGH TONE BAR;Lm;0;L;;;;;N;;;;; 02E7;MODIFIER LETTER MID TONE BAR;Lm;0;L;;;;;N;;;;; 02E8;MODIFIER LETTER LOW TONE BAR;Lm;0;L;;;;;N;;;;; 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Lm;0;L;;;;;N;;;;; 0300;COMBINING GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING GRAVE;Varia;;; 0301;COMBINING ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING ACUTE;Oxia;;; 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;L;;;;;N;NON-SPACING CIRCUMFLEX;;;; 0303;COMBINING TILDE;Mn;230;L;;;;;N;NON-SPACING TILDE;;;; 0304;COMBINING MACRON;Mn;230;L;;;;;N;NON-SPACING MACRON;;;; 0305;COMBINING OVERLINE;Mn;230;L;;;;;N;NON-SPACING OVERSCORE;;;; 0306;COMBINING BREVE;Mn;230;L;;;;;N;NON-SPACING BREVE;Vrachy;;; 0307;COMBINING DOT ABOVE;Mn;230;L;;;;;N;NON-SPACING DOT ABOVE;;;; 0308;COMBINING DIAERESIS;Mn;230;L;;;;;N;NON-SPACING DIAERESIS;Dialytika;;; 0309;COMBINING HOOK ABOVE;Mn;230;L;;;;;N;NON-SPACING HOOK ABOVE;;;; 030A;COMBINING RING ABOVE;Mn;230;L;;;;;N;NON-SPACING RING ABOVE;;;; 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE ACUTE;;;; 030C;COMBINING CARON;Mn;230;L;;;;;N;NON-SPACING HACEK;;;; 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;; 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE GRAVE;;;; 0310;COMBINING CANDRABINDU;Mn;230;L;0306 0307;;;;N;NON-SPACING CANDRABINDU;;;; 0311;COMBINING INVERTED BREVE;Mn;230;L;;;;;N;NON-SPACING INVERTED BREVE;;;; 0312;COMBINING TURNED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; 0313;COMBINING COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING COMMA ABOVE;Psili;;; 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;; 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;L;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING GRAVE BELOW;;;; 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING ACUTE BELOW;;;; 0318;COMBINING LEFT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT TACK BELOW;;;; 0319;COMBINING RIGHT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;L;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; 031B;COMBINING HORN;Mn;216;L;;;;;N;NON-SPACING HORN;;;; 031C;COMBINING LEFT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; 031D;COMBINING UP TACK BELOW;Mn;220;L;;;;;N;NON-SPACING UP TACK BELOW;;;; 031E;COMBINING DOWN TACK BELOW;Mn;220;L;;;;;N;NON-SPACING DOWN TACK BELOW;;;; 031F;COMBINING PLUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; 0320;COMBINING MINUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; 0323;COMBINING DOT BELOW;Mn;220;L;;;;;N;NON-SPACING DOT BELOW;;;; 0324;COMBINING DIAERESIS BELOW;Mn;220;L;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; 0325;COMBINING RING BELOW;Mn;220;L;;;;;N;NON-SPACING RING BELOW;;;; 0326;COMBINING COMMA BELOW;Mn;220;L;;;;;N;NON-SPACING COMMA BELOW;;;; 0327;COMBINING CEDILLA;Mn;202;L;;;;;N;NON-SPACING CEDILLA;;;; 0328;COMBINING OGONEK;Mn;202;L;;;;;N;NON-SPACING OGONEK;;;; 0329;COMBINING VERTICAL LINE BELOW;Mn;220;L;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; 032A;COMBINING BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING BRIDGE BELOW;;;; 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; 032C;COMBINING CARON BELOW;Mn;220;L;;;;;N;NON-SPACING HACEK BELOW;;;; 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; 032E;COMBINING BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING BREVE BELOW;;;; 032F;COMBINING INVERTED BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; 0330;COMBINING TILDE BELOW;Mn;220;L;;;;;N;NON-SPACING TILDE BELOW;;;; 0331;COMBINING MACRON BELOW;Mn;220;L;;;;;N;NON-SPACING MACRON BELOW;;;; 0332;COMBINING LOW LINE;Mn;220;L;;;;;N;NON-SPACING UNDERSCORE;;;; 0333;COMBINING DOUBLE LOW LINE;Mn;220;L;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; 0334;COMBINING TILDE OVERLAY;Mn;1;L;;;;;N;NON-SPACING TILDE OVERLAY;;;; 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; 0336;COMBINING LONG STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; 033B;COMBINING SQUARE BELOW;Mn;220;L;;;;;N;NON-SPACING SQUARE BELOW;;;; 033C;COMBINING SEAGULL BELOW;Mn;220;L;;;;;N;NON-SPACING SEAGULL BELOW;;;; 033D;COMBINING X ABOVE;Mn;230;L;;;;;N;NON-SPACING X ABOVE;;;; 033E;COMBINING VERTICAL TILDE;Mn;230;L;;;;;N;NON-SPACING VERTICAL TILDE;;;; 033F;COMBINING DOUBLE OVERLINE;Mn;230;L;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; 0340;COMBINING GRAVE TONE MARK;Mn;230;L;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;; 0341;COMBINING ACUTE TONE MARK;Mn;230;L;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;; 0342;COMBINING GREEK PERISPOMENI;Mn;230;L;;;;;N;;;;; 0343;COMBINING GREEK KORONIS;Mn;230;L;0313;;;;N;;;;; 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;L;0308 030D;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;220;L;;;;;N;GREEK NON-SPACING IOTA BELOW;;;; 0360;COMBINING DOUBLE TILDE;Mn;234;L;;;;;N;;;;; 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;L;;;;;N;;;;; 0374;GREEK NUMERAL SIGN;Lm;0;L;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; 0375;GREEK LOWER NUMERAL SIGN;So;0;L;;;;;N;;Aristeri keraia;;; 037A;GREEK YPOGEGRAMMENI;Lm;0;L; 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; 037E;GREEK QUESTION MARK;Po;0;L;003B;;;;N;;Erotimatiko;;; 0384;GREEK TONOS;Lm;0;L; 0020 030D;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Lm;0;L;00A8 030D;;;;N;GREEK SPACING DIAERESIS TONOS;;;; 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 030D;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; 0387;GREEK ANO TELEIA;Po;0;L;00B7;;;;N;;;;; 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 030D;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 030D;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 030D;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 030D;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 030D;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 030D;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03B9 0344;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 030D;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 030D;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 030D;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 030D;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03C5 0344;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;;; 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 030D;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 030D;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 030D;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F 03D0;GREEK BETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;; 03D1;GREEK THETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;; 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 030D;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;; 03D6;GREEK PI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;; 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;; 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;; 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;; 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;; 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE 03F0;GREEK KAPPA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;; 03F1;GREEK RHO SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;; 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;;; 03F3;GREEK LETTER YOT;Lo;0;L;;;;;N;;;;; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452; 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457; 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B; 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E; 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; 0483;COMBINING CYRILLIC TITLO;Mn;230;L;;;;;N;CYRILLIC NON-SPACING TITLO;;;; 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7; 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5; 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE 04C0;CYRILLIC LETTER PALOCHKA;Lo;0;L;;;;;N;CYRILLIC LETTER I;;;; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;00C6;;;;N;;;;04D5; 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;00E6;;;;N;;;04D4;;04D4 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;018F;;;;N;;;;04D9; 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;0259;;;;N;;;04D8;;04D8 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;018F 0308;;;;N;;;;04DB; 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;0259 0308;;;;N;;;04DA;;04DA 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;01B7;;;;N;;;;04E1; 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;0292;;;;N;;;04E0;;04E0 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;019F;;;;N;;;;04E9; 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;0275;;;;N;;;04E8;;04E8 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;019F 0308;;;;N;;;;04EB; 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;0275 0308;;;;N;;;04EA;;04EA 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;; 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; 0591;HEBREW ACCENT ETNAHTA;Mn;220;R;;;;;N;;;;; 0592;HEBREW ACCENT SEGOL;Mn;230;R;;;;;N;;;;; 0593;HEBREW ACCENT SHALSHELET;Mn;230;R;;;;;N;;;;; 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;R;;;;;N;;;;; 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;R;;;;;N;;;;; 0596;HEBREW ACCENT TIPEHA;Mn;220;R;;;;;N;;;;; 0597;HEBREW ACCENT REVIA;Mn;230;R;;;;;N;;;;; 0598;HEBREW ACCENT ZARQA;Mn;230;R;;;;;N;;;;; 0599;HEBREW ACCENT PASHTA;Mn;230;R;;;;;N;;;;; 059A;HEBREW ACCENT YETIV;Mn;222;R;;;;;N;;;;; 059B;HEBREW ACCENT TEVIR;Mn;220;R;;;;;N;;;;; 059C;HEBREW ACCENT GERESH;Mn;230;R;;;;;N;;;;; 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;R;;;;;N;;;;; 059E;HEBREW ACCENT GERSHAYIM;Mn;230;R;;;;;N;;;;; 059F;HEBREW ACCENT QARNEY PARA;Mn;230;R;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;R;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;R;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;R;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;R;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;R;;;;;N;;;;; 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;R;;;;;N;;;;; 05A7;HEBREW ACCENT DARGA;Mn;220;R;;;;;N;;;;; 05A8;HEBREW ACCENT QADMA;Mn;230;R;;;;;N;;;;; 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;R;;;;;N;;;;; 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;R;;;;;N;;;;; 05AB;HEBREW ACCENT OLE;Mn;230;R;;;;;N;;;;; 05AC;HEBREW ACCENT ILUY;Mn;230;R;;;;;N;;;;; 05AD;HEBREW ACCENT DEHI;Mn;222;R;;;;;N;;;;; 05AE;HEBREW ACCENT ZINOR;Mn;230;R;;;;;N;;;;; 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;R;;;;;N;;;;; 05B0;HEBREW POINT SHEVA;Mn;10;R;;;;;N;;;;; 05B1;HEBREW POINT HATAF SEGOL;Mn;11;R;;;;;N;;;;; 05B2;HEBREW POINT HATAF PATAH;Mn;12;R;;;;;N;;;;; 05B3;HEBREW POINT HATAF QAMATS;Mn;13;R;;;;;N;;;;; 05B4;HEBREW POINT HIRIQ;Mn;14;R;;;;;N;;;;; 05B5;HEBREW POINT TSERE;Mn;15;R;;;;;N;;;;; 05B6;HEBREW POINT SEGOL;Mn;16;R;;;;;N;;;;; 05B7;HEBREW POINT PATAH;Mn;17;R;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;R;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;R;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;R;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;R;;;;;N;HEBREW POINT DAGESH;;;; 05BD;HEBREW POINT METEG;Mn;22;R;;;;;N;;;;; 05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;; 05BF;HEBREW POINT RAFE;Mn;23;R;;;;;N;;;;; 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;; 05C1;HEBREW POINT SHIN DOT;Mn;24;R;;;;;N;;;;; 05C2;HEBREW POINT SIN DOT;Mn;25;R;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;R;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;R;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA;;;; 0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;; 0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;; 0629;ARABIC LETTER TEH MARBUTA;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; 062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;; 062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;; 062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;; 062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;; 062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;; 062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;; 0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;; 0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;; 0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;; 0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;; 0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;; 0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;; 0636;ARABIC LETTER DAD;Lo;0;R;;;;;N;;;;; 0637;ARABIC LETTER TAH;Lo;0;R;;;;;N;;;;; 0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;; 0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;; 063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;; 0640;ARABIC TATWEEL;Lo;0;R;;;;;N;;;;; 0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;; 0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;; 0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;; 0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;; 0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;; 0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;; 0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;; 0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;; 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;R;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; 064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;; 064B;ARABIC FATHATAN;Mn;27;R;;;;;N;;;;; 064C;ARABIC DAMMATAN;Mn;28;R;;;;;N;;;;; 064D;ARABIC KASRATAN;Mn;29;R;;;;;N;;;;; 064E;ARABIC FATHA;Mn;30;R;;;;;N;ARABIC FATHAH;;;; 064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;; 0650;ARABIC KASRA;Mn;32;R;;;;;N;ARABIC KASRAH;;;; 0651;ARABIC SHADDA;Mn;33;R;;;;;N;ARABIC SHADDAH;;;; 0652;ARABIC SUKUN;Mn;34;R;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 066A;ARABIC PERCENT SIGN;So;0;ET;;;;;N;;;;; 066B;ARABIC DECIMAL SEPARATOR;So;0;AN;;;;;N;;;;; 066C;ARABIC THOUSANDS SEPARATOR;So;0;AN;;;;;N;;;;; 066D;ARABIC FIVE POINTED STAR;So;0;R;;;;;N;;;;; 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;R;;;;;N;ARABIC ALEF ABOVE;;;; 0671;ARABIC LETTER ALEF WASLA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; 0674;ARABIC LETTER HIGH HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; 0679;ARABIC LETTER TTEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; 067A;ARABIC LETTER TTEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; 067B;ARABIC LETTER BEEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; 067C;ARABIC LETTER TEH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH RING;;;; 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; 067E;ARABIC LETTER PEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; 067F;ARABIC LETTER TEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; 0680;ARABIC LETTER BEHEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; 0683;ARABIC LETTER NYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; 0684;ARABIC LETTER DYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; 0686;ARABIC LETTER TCHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; 0687;ARABIC LETTER TCHEHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; 0688;ARABIC LETTER DDAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; 0689;ARABIC LETTER DAL WITH RING;Lo;0;R;;;;;N;;;;; 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;R;;;;;N;;;;; 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;R;;;;;N;;;;; 068C;ARABIC LETTER DAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; 068D;ARABIC LETTER DDAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; 068E;ARABIC LETTER DUL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;;;;; 0691;ARABIC LETTER RREH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; 0693;ARABIC LETTER REH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER RA WITH RING;;;; 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; 0698;ARABIC LETTER JEH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;;;;; 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;R;;;;;N;;;;; 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;; 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS FA;;;; 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; 06A4;ARABIC LETTER VEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; 06A6;ARABIC LETTER PEHEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;R;;;;;N;;;;; 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 06A9;ARABIC LETTER KEHEH;Lo;0;R;;;;;N;ARABIC LETTER OPEN CAF;;;; 06AA;ARABIC LETTER SWASH KAF;Lo;0;R;;;;;N;ARABIC LETTER SWASH CAF;;;; 06AB;ARABIC LETTER KAF WITH RING;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH RING;;;; 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; 06AD;ARABIC LETTER NG;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; 06AF;ARABIC LETTER GAF;Lo;0;R;;;;;N;;;;; 06B0;ARABIC LETTER GAF WITH RING;Lo;0;R;;;;;N;;;;; 06B1;ARABIC LETTER NGOEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;; 06B3;ARABIC LETTER GUEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;R;;;;;N;;;;; 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;; 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON;;;; 06BB;ARABIC LETTER RNOON;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; 06BC;ARABIC LETTER NOON WITH RING;Lo;0;R;;;;;N;;;;; 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;; 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;R;;;;;N;ARABIC LETTER KNOTTED HA;;;; 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA;;;; 06C1;ARABIC LETTER HEH GOAL;Lo;0;R;;;;;N;ARABIC LETTER HA GOAL;;;; 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; 06C4;ARABIC LETTER WAW WITH RING;Lo;0;R;;;;;N;;;;; 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH BAR;;;; 06C6;ARABIC LETTER OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; 06C7;ARABIC LETTER U;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; 06C8;ARABIC LETTER YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;;;;; 06CB;ARABIC LETTER VE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; 06CC;ARABIC LETTER FARSI YEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS YA;;;; 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TAIL;;;; 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; 06D0;ARABIC LETTER E;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;; 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; 06D2;ARABIC LETTER YEH BARREE;Lo;0;R;;;;;N;ARABIC LETTER YA BARREE;;;; 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; 06D4;ARABIC FULL STOP;Po;0;R;;;;;N;ARABIC PERIOD;;;; 06D5;ARABIC LETTER AE;Lo;0;R;;;;;N;;;;; 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;; 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;; 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;R;;;;;N;;;;; 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;R;;;;;N;;;;; 06DA;ARABIC SMALL HIGH JEEM;Mn;230;R;;;;;N;;;;; 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;R;;;;;N;;;;; 06DC;ARABIC SMALL HIGH SEEN;Mn;230;R;;;;;N;;;;; 06DD;ARABIC END OF AYAH;Mn;0;R;;;;;N;;;;; 06DE;ARABIC START OF RUB EL HIZB;Mn;0;R;;;;;N;;;;; 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;R;;;;;N;;;;; 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;R;;;;;N;;;;; 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;R;;;;;N;;;;; 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;R;;;;;N;;;;; 06E3;ARABIC SMALL LOW SEEN;Mn;220;R;;;;;N;;;;; 06E4;ARABIC SMALL HIGH MADDA;Mn;230;R;;;;;N;;;;; 06E5;ARABIC SMALL WAW;Lm;0;R;;;;;N;;;;; 06E6;ARABIC SMALL YEH;Lm;0;R;;;;;N;;;;; 06E7;ARABIC SMALL HIGH YEH;Mn;230;R;;;;;N;;;;; 06E8;ARABIC SMALL HIGH NOON;Mn;230;R;;;;;N;;;;; 06E9;ARABIC PLACE OF SAJDAH;So;0;R;;;;;N;;;;; 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;R;;;;;N;;;;; 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;R;;;;;N;;;;; 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;R;;;;;N;;;;; 06ED;ARABIC SMALL LOW MEEM;Mn;220;R;;;;;N;;;;; 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;37;L;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;36;L;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 093C;DEVANAGARI SIGN NUKTA;Mn;7;L;;;;;N;;;;; 093D;DEVANAGARI SIGN AVAGRAHA;Po;0;L;;;;;N;;;;; 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0941;DEVANAGARI VOWEL SIGN U;Mn;38;L;;;;;N;;;;; 0942;DEVANAGARI VOWEL SIGN UU;Mn;39;L;;;;;N;;;;; 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;40;L;;;;;N;;;;; 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;41;L;;;;;N;;;;; 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;42;L;;;;;N;;;;; 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;43;L;;;;;N;;;;; 0947;DEVANAGARI VOWEL SIGN E;Mn;44;L;;;;;N;;;;; 0948;DEVANAGARI VOWEL SIGN AI;Mn;45;L;;;;;N;;;;; 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 094D;DEVANAGARI SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0950;DEVANAGARI OM;So;0;L;;;;;N;;;;; 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;46;L;;;;;N;;;;; 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;47;L;;;;;N;;;;; 0953;DEVANAGARI GRAVE ACCENT;Mn;230;L;;;;;N;;;;; 0954;DEVANAGARI ACUTE ACCENT;Mn;230;L;;;;;N;;;;; 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;48;L;;;;;N;;;;; 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;49;L;;;;;N;;;;; 0964;DEVANAGARI DANDA;So;0;L;;;;;N;;;;; 0965;DEVANAGARI DOUBLE DANDA;So;0;L;;;;;N;;;;; 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;50;L;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; 09B0;BENGALI LETTER RA;Lo;0;L;09AC 09BC;;;;N;;;;; 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; 09BC;BENGALI SIGN NUKTA;Mn;7;L;;;;;N;;;;; 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 09C1;BENGALI VOWEL SIGN U;Mn;51;L;;;;;N;;;;; 09C2;BENGALI VOWEL SIGN UU;Mn;52;L;;;;;N;;;;; 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;53;L;;;;;N;;;;; 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;54;L;;;;;N;;;;; 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;55;L;;;;;N;;;;; 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;56;L;;;;;N;;;;; 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;; 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;; 09F2;BENGALI RUPEE MARK;So;0;L;;;;;N;;;;; 09F3;BENGALI RUPEE SIGN;So;0;L;;;;;N;;;;; 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;; 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;; 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;; 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;; 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;-1;N;;;;; 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; 0A02;GURMUKHI SIGN BINDI;Mn;57;L;;;;;N;;;;; 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; 0A33;GURMUKHI LETTER LLA;Lo;0;L;;;;;N;;;;; 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; 0A36;GURMUKHI LETTER SHA;Lo;0;L;;;;;N;;;;; 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; 0A3C;GURMUKHI SIGN NUKTA;Mn;7;L;;;;;N;;;;; 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0A41;GURMUKHI VOWEL SIGN U;Mn;58;L;;;;;N;;;;; 0A42;GURMUKHI VOWEL SIGN UU;Mn;59;L;;;;;N;;;;; 0A47;GURMUKHI VOWEL SIGN EE;Mn;60;L;;;;;N;;;;; 0A48;GURMUKHI VOWEL SIGN AI;Mn;61;L;;;;;N;;;;; 0A4B;GURMUKHI VOWEL SIGN OO;Mn;62;L;;;;;N;;;;; 0A4C;GURMUKHI VOWEL SIGN AU;Mn;63;L;;;;;N;;;;; 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; 0A5C;GURMUKHI LETTER RRA;Lo;0;L;0A21 0A3C;;;;N;;;;; 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0A70;GURMUKHI TIPPI;Mn;64;L;;;;;N;;;;; 0A71;GURMUKHI ADDAK;Mn;65;L;;;;;N;;;;; 0A72;GURMUKHI IRI;So;0;L;;;;;N;;;;; 0A73;GURMUKHI URA;So;0;L;;;;;N;;;;; 0A74;GURMUKHI EK ONKAR;So;0;L;;;;;N;;;;; 0A81;GUJARATI SIGN CANDRABINDU;Mn;67;L;;;;;N;;;;; 0A82;GUJARATI SIGN ANUSVARA;Mn;66;L;;;;;N;;;;; 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; 0ABC;GUJARATI SIGN NUKTA;Mn;7;L;;;;;N;;;;; 0ABD;GUJARATI SIGN AVAGRAHA;Po;0;L;;;;;N;;;;; 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0AC1;GUJARATI VOWEL SIGN U;Mn;68;L;;;;;N;;;;; 0AC2;GUJARATI VOWEL SIGN UU;Mn;69;L;;;;;N;;;;; 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;70;L;;;;;N;;;;; 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;71;L;;;;;N;;;;; 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;72;L;;;;;N;;;;; 0AC7;GUJARATI VOWEL SIGN E;Mn;73;L;;;;;N;;;;; 0AC8;GUJARATI VOWEL SIGN AI;Mn;74;L;;;;;N;;;;; 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 0ACD;GUJARATI SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0AD0;GUJARATI OM;So;0;L;;;;;N;;;;; 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B01;ORIYA SIGN CANDRABINDU;Mn;75;L;;;;;N;;;;; 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; 0B3C;ORIYA SIGN NUKTA;Mn;7;L;;;;;N;;;;; 0B3D;ORIYA SIGN AVAGRAHA;Po;0;L;;;;;N;;;;; 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0B3F;ORIYA VOWEL SIGN I;Mn;76;L;;;;;N;;;;; 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0B41;ORIYA VOWEL SIGN U;Mn;77;L;;;;;N;;;;; 0B42;ORIYA VOWEL SIGN UU;Mn;78;L;;;;;N;;;;; 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;79;L;;;;;N;;;;; 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; 0B4D;ORIYA SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0B56;ORIYA AI LENGTH MARK;Mn;230;L;;;;;N;;;;; 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; 0B5F;ORIYA LETTER YYA;Lo;0;L;0B2F 0B3C;;;;N;;;;; 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; 0B82;TAMIL SIGN ANUSVARA;Mn;0;L;;;;;N;;;;; 0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0BC0;TAMIL VOWEL SIGN II;Mn;80;L;;;;;N;;;;; 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;81;L;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;82;L;;;;;N;;;;; 0C40;TELUGU VOWEL SIGN II;Mn;83;L;;;;;N;;;;; 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0C46;TELUGU VOWEL SIGN E;Mn;84;L;;;;;N;;;;; 0C47;TELUGU VOWEL SIGN EE;Mn;85;L;;;;;N;;;;; 0C48;TELUGU VOWEL SIGN AI;Mn;86;L;0C46 0C56;;;;N;;;;; 0C4A;TELUGU VOWEL SIGN O;Mn;87;L;;;;;N;;;;; 0C4B;TELUGU VOWEL SIGN OO;Mn;88;L;;;;;N;;;;; 0C4C;TELUGU VOWEL SIGN AU;Mn;89;L;;;;;N;;;;; 0C4D;TELUGU SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0C55;TELUGU LENGTH MARK;Mn;90;L;;;;;N;;;;; 0C56;TELUGU AI LENGTH MARK;Mn;91;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0CBF;KANNADA VOWEL SIGN I;Mn;92;L;;;;;N;;;;; 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0CC6;KANNADA VOWEL SIGN E;Mn;93;L;;;;;N;;;;; 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CC6 0CC2 0CD5;;;;N;;;;; 0CCC;KANNADA VOWEL SIGN AU;Mn;94;L;;;;;N;;;;; 0CCD;KANNADA SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0D41;MALAYALAM VOWEL SIGN U;Mn;95;L;;;;;N;;;;; 0D42;MALAYALAM VOWEL SIGN UU;Mn;96;L;;;;;N;;;;; 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;97;L;;;;;N;;;;; 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; 0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;; 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;98;L;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; 0E33;THAI CHARACTER SARA AM;Lo;0;L;0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; 0E34;THAI CHARACTER SARA I;Mn;99;L;;;;;N;THAI VOWEL SIGN SARA I;;;; 0E35;THAI CHARACTER SARA II;Mn;100;L;;;;;N;THAI VOWEL SIGN SARA II;;;; 0E36;THAI CHARACTER SARA UE;Mn;101;L;;;;;N;THAI VOWEL SIGN SARA UE;;;; 0E37;THAI CHARACTER SARA UEE;Mn;102;L;;;;;N;THAI VOWEL SIGN SARA UEE;;;; 0E38;THAI CHARACTER SARA U;Mn;103;L;;;;;N;THAI VOWEL SIGN SARA U;;;; 0E39;THAI CHARACTER SARA UU;Mn;104;L;;;;;N;THAI VOWEL SIGN SARA UU;;;; 0E3A;THAI CHARACTER PHINTHU;Mn;105;L;;;;;N;THAI VOWEL SIGN PHINTHU;;;; 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;L;;;;;N;THAI BAHT SIGN;;;; 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;; 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;; 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;; 0E46;THAI CHARACTER MAIYAMOK;Lo;0;L;;;;;N;THAI MAI YAMOK;;;; 0E47;THAI CHARACTER MAITAIKHU;Mn;106;L;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;; 0E48;THAI CHARACTER MAI EK;Mn;107;L;;;;;N;THAI TONE MAI EK;;;; 0E49;THAI CHARACTER MAI THO;Mn;108;L;;;;;N;THAI TONE MAI THO;;;; 0E4A;THAI CHARACTER MAI TRI;Mn;109;L;;;;;N;THAI TONE MAI TRI;;;; 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;110;L;;;;;N;THAI TONE MAI CHATTAWA;;;; 0E4C;THAI CHARACTER THANTHAKHAT;Mn;111;L;;;;;N;THAI THANTHAKHAT;;;; 0E4D;THAI CHARACTER NIKHAHIT;Mn;112;L;;;;;N;THAI NIKKHAHIT;;;; 0E4E;THAI CHARACTER YAMAKKAN;Mn;128;L;;;;;N;THAI YAMAKKAN;;;; 0E4F;THAI CHARACTER FONGMAN;Lo;0;L;;;;;N;THAI FONGMAN;;;; 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0E5A;THAI CHARACTER ANGKHANKHU;Lo;0;L;;;;;N;THAI ANGKHANKHU;;;; 0E5B;THAI CHARACTER KHOMUT;Lo;0;L;;;;;N;THAI KHOMUT;;;; 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; 0EAF;LAO ELLIPSIS;Po;0;L;;;;;N;;;;; 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; 0EB1;LAO VOWEL SIGN MAI KAN;Mn;113;L;;;;;N;;;;; 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 0EB3;LAO VOWEL SIGN AM;Lo;0;L;0ECD 0EB2;;;;N;;;;; 0EB4;LAO VOWEL SIGN I;Mn;114;L;;;;;N;;;;; 0EB5;LAO VOWEL SIGN II;Mn;115;L;;;;;N;;;;; 0EB6;LAO VOWEL SIGN Y;Mn;116;L;;;;;N;;;;; 0EB7;LAO VOWEL SIGN YY;Mn;117;L;;;;;N;;;;; 0EB8;LAO VOWEL SIGN U;Mn;118;L;;;;;N;;;;; 0EB9;LAO VOWEL SIGN UU;Mn;119;L;;;;;N;;;;; 0EBB;LAO VOWEL SIGN MAI KON;Mn;120;L;;;;;N;;;;; 0EBC;LAO SEMIVOWEL SIGN LO;Mn;121;L;;;;;N;;;;; 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; 0EC6;LAO KO LA;So;0;L;;;;;N;;;;; 0EC8;LAO TONE MAI EK;Mn;122;L;;;;;N;;;;; 0EC9;LAO TONE MAI THO;Mn;123;L;;;;;N;;;;; 0ECA;LAO TONE MAI TI;Mn;124;L;;;;;N;;;;; 0ECB;LAO TONE MAI CATAWA;Mn;125;L;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;126;L;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;127;L;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;; 0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;; 0F00;TIBETAN SYLLABLE OM;So;0;L;;;;;N;;;;; 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;; 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;; 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;; 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;;yik go dun ma;;; 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;; 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;; 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;; 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;;drul shey;;; 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;; 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;; 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;;tsek;;; 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;;;;;N;;tsek tar;;; 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;;shey;;; 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;;nyi shey;;; 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;; 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;; 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;;rinchen pung shey;;; 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;; 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;; 0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;;ter tsek;;; 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;; 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;; 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;; 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Lo;220;L;;;;;N;;kyu pa;;; 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Lo;220;L;;;;;N;;dong tsu;;; 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;; 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;; 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;; 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;; 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;; 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;; 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;; 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;; 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;; 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;; 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;; 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;; 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;; 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;; 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;; 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;; 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;; 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mc;230;L;;;;;N;;nge zung nyi da;;; 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;; 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;230;L;;;;;N;;nge zung gor ta;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; 0F39;TIBETAN MARK TSA -PHRU;Mc;216;L;;;;;N;;tsa tru;;; 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;L;;;;;N;;gug ta yun;;; 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;L;;;;;N;;gug ta ye;;; 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;L;;;;;N;;ang kang yun;;; 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;L;;;;;N;;ang kang ye;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;220;L;;;;;N;;yar tse;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;220;L;;;;;N;;mar tse;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;;;;; 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;;;;; 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;;;;; 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;;;;; 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;;;;; 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;; 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;;;;; 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; 0F71;TIBETAN VOWEL SIGN AA;Mn;129;L;;;;;N;;;;; 0F72;TIBETAN VOWEL SIGN I;Mn;130;L;;;;;N;;;;; 0F73;TIBETAN VOWEL SIGN II;Mn;131;L;0F71 0F72;;;;N;;;;; 0F74;TIBETAN VOWEL SIGN U;Mn;132;L;;;;;N;;;;; 0F75;TIBETAN VOWEL SIGN UU;Mn;133;L;0F74 0F71;;;;N;;;;; 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;134;L;0FB2 0F80;;;;N;;;;; 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;135;L;0F76 0F71;;;;N;;;;; 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;136;L;0FB3 0F80;;;;N;;;;; 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;137;L;0F78 0F71;;;;N;;;;; 0F7A;TIBETAN VOWEL SIGN E;Mn;138;L;;;;;N;;;;; 0F7B;TIBETAN VOWEL SIGN EE;Mn;139;L;;;;;N;;;;; 0F7C;TIBETAN VOWEL SIGN O;Mn;140;L;;;;;N;;;;; 0F7D;TIBETAN VOWEL SIGN OO;Mn;141;L;;;;;N;;;;; 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;142;L;;;;;N;;je su nga ro;;; 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;;nam chey;;; 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;143;L;;;;;N;;;;; 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;144;L;0F80 0F71;;;;N;;;;; 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;L;;;;;N;;nyi da na da;;; 0F83;TIBETAN SIGN SNA LDAN;Mn;230;L;;;;;N;;nan de;;; 0F84;TIBETAN MARK HALANTA;Mn;9;L;;;;;N;;;;; 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;;;;; 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;L;;;;;N;;ji ta;;; 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;L;;;;;N;;yang ta;;; 0F88;TIBETAN SIGN LCE TSA CAN;Mn;230;L;;;;;N;;che tsa chen;;; 0F89;TIBETAN SIGN MCHU CAN;Mn;230;L;;;;;N;;chu chen;;; 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Mn;230;L;;;;;N;;tru chen ging;;; 0F8B;TIBETAN SIGN GRU MED RGYINGS;Mn;230;L;;;;;N;;tru me ging;;; 0F90;TIBETAN SUBJOINED LETTER KA;Mn;6;L;;;;;N;;;;; 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;6;L;;;;;N;;;;; 0F92;TIBETAN SUBJOINED LETTER GA;Mn;6;L;;;;;N;;;;; 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;6;L;0F92 0FB7;;;;N;;;;; 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;6;L;;;;;N;;;;; 0F95;TIBETAN SUBJOINED LETTER CA;Mn;6;L;;;;;N;;;;; 0F97;TIBETAN SUBJOINED LETTER JA;Mn;6;L;;;;;N;;;;; 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;6;L;;;;;N;;;;; 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;6;L;;;;;N;;;;; 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;6;L;;;;;N;;;;; 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;6;L;;;;;N;;;;; 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;6;L;0F9C 0FB7;;;;N;;;;; 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;6;L;;;;;N;;;;; 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;6;L;;;;;N;;;;; 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;6;L;;;;;N;;;;; 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;6;L;;;;;N;;;;; 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;6;L;0FA1 0FB7;;;;N;;;;; 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;6;L;;;;;N;;;;; 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;6;L;;;;;N;;;;; 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;6;L;;;;;N;;;;; 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;6;L;;;;;N;;;;; 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;6;L;0FA6 0FB7;;;;N;;;;; 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;6;L;;;;;N;;;;; 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;6;L;;;;;N;;;;; 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;6;L;;;;;N;;;;; 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;6;L;;;;;N;;;;; 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;6;L;0FAB 0FB7;;;;N;;;;; 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;6;L;;;;;N;;;;; 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;6;L;;;;;N;;;;; 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;6;L;;;;;N;;;;; 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;6;L;;;;;N;;;;; 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;6;L;;;;;N;;;;; 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;6;L;;;;;N;;;;; 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;6;L;;;;;N;;;;; 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;6;L;;;;;N;;;;; 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;6;L;0F90 0FB5;;;;N;;;;; 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;10D0; 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;10D1; 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;10D2; 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;10D3; 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;10D4; 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;10D5; 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;10D6; 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;10D7; 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;10D8; 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;10D9; 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;10DA; 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;10DB; 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;10DC; 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;10DD; 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;10DE; 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;10DF; 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;10E0; 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;10E1; 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;10E2; 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;10E3; 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;10E4; 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;10E5; 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;10E6; 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;10E7; 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;10E8; 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;10E9; 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;10EA; 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;10EB; 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;10EC; 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;10ED; 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;10EE; 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;10EF; 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;10F0; 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;10F1; 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;10F2; 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;10F3; 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;10F4; 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;10F5; 10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; 10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; 10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; 10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;; 10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;; 10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;; 10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;; 10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; 10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;; 10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;; 10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;; 10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;; 10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;; 10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;; 10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;; 10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;; 10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;; 10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;; 10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;; 10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;; 10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;; 10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;; 10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;; 10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;; 10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;; 10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;; 10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;; 10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;; 10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;; 10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;; 10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;; 10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;; 10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;; 10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;; 10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;; 10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;; 10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;; 10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;; 10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L; 1100 1100;;;;N;;;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;; 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L; 1103 1103;;;;N;;;;; 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;; 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;; 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;; 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L; 1107 1107;;;;N;;;;; 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;; 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L; 1109 1109;;;;N;;;;; 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;; 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L; 110C 110C;;;;N;;;;; 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;; 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L; 1102 1100;;;;N;;;;; 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L; 1102 1102;;;;N;;;;; 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L; 1102 1103;;;;N;;;;; 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L; 1102 1107;;;;N;;;;; 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L; 1103 1100;;;;N;;;;; 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L; 1105 1102;;;;N;;;;; 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L; 1105 1105;;;;N;;;;; 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L; 1105 1112;;;;N;;;;; 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L; 1105 110B;;;;N;;;;; 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L; 1106 1107;;;;N;;;;; 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L; 1106 110B;;;;N;;;;; 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L; 1107 1100;;;;N;;;;; 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L; 1107 1102;;;;N;;;;; 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L; 1107 1103;;;;N;;;;; 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L; 1107 1109;;;;N;;;;; 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L; 1107 1109 1100;;;;N;;;;; 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L; 1107 1109 1103;;;;N;;;;; 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L; 1107 1109 1107;;;;N;;;;; 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L; 1107 1109 1109;;;;N;;;;; 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L; 1107 1109 110C;;;;N;;;;; 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L; 1107 110C;;;;N;;;;; 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L; 1107 110E;;;;N;;;;; 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L; 1107 1110;;;;N;;;;; 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L; 1107 1111;;;;N;;;;; 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L; 1107 110B;;;;N;;;;; 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L; 1107 1107 110B;;;;N;;;;; 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L; 1109 1100;;;;N;;;;; 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L; 1109 1102;;;;N;;;;; 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L; 1109 1103;;;;N;;;;; 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L; 1109 1105;;;;N;;;;; 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L; 1109 1106;;;;N;;;;; 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L; 1109 1107;;;;N;;;;; 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L; 1109 1107 1100;;;;N;;;;; 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L; 1109 1109 1109;;;;N;;;;; 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L; 1109 110B;;;;N;;;;; 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L; 1109 110C;;;;N;;;;; 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L; 1109 110E;;;;N;;;;; 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L; 1109 110F;;;;N;;;;; 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L; 1109 1110;;;;N;;;;; 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L; 1109 1111;;;;N;;;;; 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L; 1109 1112;;;;N;;;;; 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L; 113C 113C;;;;N;;;;; 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L; 113E 113E;;;;N;;;;; 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L; 110B 1100;;;;N;;;;; 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L; 110B 1103;;;;N;;;;; 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L; 110B 1106;;;;N;;;;; 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L; 110B 1107;;;;N;;;;; 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L; 110B 1109;;;;N;;;;; 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L; 110B 1140;;;;N;;;;; 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L; 110B 110B;;;;N;;;;; 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L; 110B 110C;;;;N;;;;; 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L; 110B 110E;;;;N;;;;; 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L; 110B 1110;;;;N;;;;; 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L; 110B 1111;;;;N;;;;; 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L; 110C 110B;;;;N;;;;; 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L; 114E 114E;;;;N;;;;; 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L; 1150 1150;;;;N;;;;; 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L; 110E 110F;;;;N;;;;; 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L; 110E 1112;;;;N;;;;; 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L; 1111 1107;;;;N;;;;; 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L; 1111 110B;;;;N;;;;; 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L; 1112 1112;;;;N;;;;; 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; 1162;HANGUL JUNGSEONG AE;Lo;0;L; 1161 1175;;;;N;;;;; 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; 1164;HANGUL JUNGSEONG YAE;Lo;0;L; 1163 1175;;;;N;;;;; 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; 1166;HANGUL JUNGSEONG E;Lo;0;L; 1165 1175;;;;N;;;;; 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; 1168;HANGUL JUNGSEONG YE;Lo;0;L; 1167 1175;;;;N;;;;; 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; 116A;HANGUL JUNGSEONG WA;Lo;0;L; 1169 1161;;;;N;;;;; 116B;HANGUL JUNGSEONG WAE;Lo;0;L; 1169 1161 1175;;;;N;;;;; 116C;HANGUL JUNGSEONG OE;Lo;0;L; 1169 1175;;;;N;;;;; 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; 116F;HANGUL JUNGSEONG WEO;Lo;0;L; 116E 1165;;;;N;;;;; 1170;HANGUL JUNGSEONG WE;Lo;0;L; 116E 1165 1175;;;;N;;;;; 1171;HANGUL JUNGSEONG WI;Lo;0;L; 116E 1175;;;;N;;;;; 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; 1174;HANGUL JUNGSEONG YI;Lo;0;L; 1173 1175;;;;N;;;;; 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; 1176;HANGUL JUNGSEONG A-O;Lo;0;L; 1161 1169;;;;N;;;;; 1177;HANGUL JUNGSEONG A-U;Lo;0;L; 1161 116E;;;;N;;;;; 1178;HANGUL JUNGSEONG YA-O;Lo;0;L; 1163 1169;;;;N;;;;; 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L; 1163 116D;;;;N;;;;; 117A;HANGUL JUNGSEONG EO-O;Lo;0;L; 1165 1169;;;;N;;;;; 117B;HANGUL JUNGSEONG EO-U;Lo;0;L; 1165 116E;;;;N;;;;; 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L; 1165 1173;;;;N;;;;; 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L; 1167 1169;;;;N;;;;; 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L; 1167 116E;;;;N;;;;; 117F;HANGUL JUNGSEONG O-EO;Lo;0;L; 1169 1165;;;;N;;;;; 1180;HANGUL JUNGSEONG O-E;Lo;0;L; 1169 1166;;;;N;;;;; 1181;HANGUL JUNGSEONG O-YE;Lo;0;L; 1169 1168;;;;N;;;;; 1182;HANGUL JUNGSEONG O-O;Lo;0;L; 1169 1169;;;;N;;;;; 1183;HANGUL JUNGSEONG O-U;Lo;0;L; 1169 116E;;;;N;;;;; 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L; 116D 1163;;;;N;;;;; 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L; 116D 1164;;;;N;;;;; 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L; 116D 1167;;;;N;;;;; 1187;HANGUL JUNGSEONG YO-O;Lo;0;L; 116D 1169;;;;N;;;;; 1188;HANGUL JUNGSEONG YO-I;Lo;0;L; 116D 1175;;;;N;;;;; 1189;HANGUL JUNGSEONG U-A;Lo;0;L; 116E 1161;;;;N;;;;; 118A;HANGUL JUNGSEONG U-AE;Lo;0;L; 116E 1162;;;;N;;;;; 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L; 116E 1165 1173;;;;N;;;;; 118C;HANGUL JUNGSEONG U-YE;Lo;0;L; 116E 1168;;;;N;;;;; 118D;HANGUL JUNGSEONG U-U;Lo;0;L; 116E 116E;;;;N;;;;; 118E;HANGUL JUNGSEONG YU-A;Lo;0;L; 1172 1161;;;;N;;;;; 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L; 1172 1165;;;;N;;;;; 1190;HANGUL JUNGSEONG YU-E;Lo;0;L; 1172 1166;;;;N;;;;; 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L; 1172 1167;;;;N;;;;; 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L; 1172 1168;;;;N;;;;; 1193;HANGUL JUNGSEONG YU-U;Lo;0;L; 1172 116E;;;;N;;;;; 1194;HANGUL JUNGSEONG YU-I;Lo;0;L; 1172 1175;;;;N;;;;; 1195;HANGUL JUNGSEONG EU-U;Lo;0;L; 1173 116E;;;;N;;;;; 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L; 1173 1173;;;;N;;;;; 1197;HANGUL JUNGSEONG YI-U;Lo;0;L; 1174 116E;;;;N;;;;; 1198;HANGUL JUNGSEONG I-A;Lo;0;L; 1175 1161;;;;N;;;;; 1199;HANGUL JUNGSEONG I-YA;Lo;0;L; 1175 1163;;;;N;;;;; 119A;HANGUL JUNGSEONG I-O;Lo;0;L; 1175 1169;;;;N;;;;; 119B;HANGUL JUNGSEONG I-U;Lo;0;L; 1175 116E;;;;N;;;;; 119C;HANGUL JUNGSEONG I-EU;Lo;0;L; 1175 1173;;;;N;;;;; 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L; 1175 119E;;;;N;;;;; 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L; 119E 1165;;;;N;;;;; 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L; 119E 116E;;;;N;;;;; 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L; 119E 1175;;;;N;;;;; 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L; 119E 119E;;;;N;;;;; 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L; 11A8 11A8;;;;N;;;;; 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L; 11A8 11BA;;;;N;;;;; 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;; 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L; 11AB 11BD;;;;N;;;;; 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L; 11AB 11C2;;;;N;;;;; 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;; 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L; 11AF 11A8;;;;N;;;;; 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L; 11AF 11B7;;;;N;;;;; 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L; 11AF 11B8;;;;N;;;;; 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L; 11AF 11BA;;;;N;;;;; 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L; 11AF 11C0;;;;N;;;;; 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L; 11AF 11C1;;;;N;;;;; 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L; 11AF 11C2;;;;N;;;;; 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;; 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;; 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L; 11B8 11BA;;;;N;;;;; 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;; 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L; 11BA 11BA;;;;N;;;;; 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;; 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;; 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;; 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L; 11A8 11AF;;;;N;;;;; 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L; 11A8 11BA 11A8;;;;N;;;;; 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L; 11AB 11A8;;;;N;;;;; 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L; 11AB 11AE;;;;N;;;;; 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L; 11AB 11BA;;;;N;;;;; 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L; 11AB 11EB;;;;N;;;;; 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L; 11AB 11C0;;;;N;;;;; 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L; 11AE 11A8;;;;N;;;;; 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L; 11AE 11AF;;;;N;;;;; 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L; 11AF 11A8 11BA;;;;N;;;;; 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L; 11AF 11AB;;;;N;;;;; 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L; 11AF 11AE;;;;N;;;;; 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L; 11AF 11AE 11C2;;;;N;;;;; 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L; 11AF 11AF;;;;N;;;;; 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L; 11AF 11B7 11A8;;;;N;;;;; 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L; 11AF 11B7 11BA;;;;N;;;;; 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L; 11AF 11B8 11BA;;;;N;;;;; 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L; 11AF 11B8 11C2;;;;N;;;;; 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L; 11AF 11B8 11BC;;;;N;;;;; 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L; 11AF 11BA 11BA;;;;N;;;;; 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L; 11AF 11EB;;;;N;;;;; 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L; 11AF 11BF;;;;N;;;;; 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L; 11AF 11F9;;;;N;;;;; 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L; 11B7 11A8;;;;N;;;;; 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L; 11B7 11AF;;;;N;;;;; 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L; 11B7 11B8;;;;N;;;;; 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L; 11B7 11BA;;;;N;;;;; 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L; 11B7 11BA 11BA;;;;N;;;;; 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L; 11B7 11EB;;;;N;;;;; 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L; 11B7 11BE;;;;N;;;;; 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L; 11B7 11C2;;;;N;;;;; 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L; 11B7 11BC;;;;N;;;;; 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L; 11B8 11AF;;;;N;;;;; 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L; 11B8 11C1;;;;N;;;;; 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L; 11B8 11C2;;;;N;;;;; 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L; 11B8 11BC;;;;N;;;;; 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L; 11BA 11A8;;;;N;;;;; 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L; 11BA 11AE;;;;N;;;;; 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L; 11BA 11AF;;;;N;;;;; 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L; 11BA 11B8;;;;N;;;;; 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L; 11BC 11A8;;;;N;;;;; 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L; 11BC 11A8 11A8;;;;N;;;;; 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L; 11BC 11BC;;;;N;;;;; 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L; 11BC 11BF;;;;N;;;;; 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L; 11F0 11BA;;;;N;;;;; 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L; 11F0 11EB;;;;N;;;;; 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L; 11C1 11B8;;;;N;;;;; 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L; 11C1 11BC;;;;N;;;;; 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L; 11C2 11AB;;;;N;;;;; 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L; 11C2 11AF;;;;N;;;;; 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L; 11C2 11B7;;;;N;;;;; 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L; 11C2 11B8;;;;N;;;;; 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0114 0327;;;;N;;;;1E1D; 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0115 0327;;;;N;;;1E1C;;1E1C 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;;;;;N;;;;; 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;;; 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00C2 0323;;;;N;;;;1EAD; 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00E2 0323;;;;N;;;1EAC;;1EAC 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;0102 0323;;;;N;;;;1EB7; 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;0103 0323;;;;N;;;1EB6;;1EB6 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00CA 0323;;;;N;;;;1EC7; 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00EA 0323;;;;N;;;1EC6;;1EC6 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00D4 0323;;;;N;;;;1ED9; 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00F4 0323;;;;N;;;1ED8;;1ED8 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03B1 0301;;;;N;;;1FBB;;1FBB 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03B5 0301;;;;N;;;1FC9;;1FC9 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03B7 0301;;;;N;;;1FCB;;1FCB 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03B9 0301;;;;N;;;1FDB;;1FDB 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03BF 0301;;;;N;;;1FF9;;1FF9 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03C5 0301;;;;N;;;1FEB;;1FEB 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03C9 0301;;;;N;;;1FFB;;1FFB 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F08 0345;;;;N;;;;1F80; 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F09 0345;;;;N;;;;1F81; 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0A 0345;;;;N;;;;1F82; 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0B 0345;;;;N;;;;1F83; 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0C 0345;;;;N;;;;1F84; 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0D 0345;;;;N;;;;1F85; 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0E 0345;;;;N;;;;1F86; 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0F 0345;;;;N;;;;1F87; 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F28 0345;;;;N;;;;1F90; 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F29 0345;;;;N;;;;1F91; 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2A 0345;;;;N;;;;1F92; 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2B 0345;;;;N;;;;1F93; 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2C 0345;;;;N;;;;1F94; 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2D 0345;;;;N;;;;1F95; 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2E 0345;;;;N;;;;1F96; 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2F 0345;;;;N;;;;1F97; 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F68 0345;;;;N;;;;1FA0; 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F69 0345;;;;N;;;;1FA1; 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6A 0345;;;;N;;;;1FA2; 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6B 0345;;;;N;;;;1FA3; 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6C 0345;;;;N;;;;1FA4; 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6D 0345;;;;N;;;;1FA5; 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6E 0345;;;;N;;;;1FA6; 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6F 0345;;;;N;;;;1FA7; 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F71 0345;;;;N;;;;; 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0391 0301;;;;N;;;;1F71; 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lu;0;L;0391 0345;;;;N;;;;1FB3; 1FBD;GREEK KORONIS;Lm;0;L; 0020 0313;;;;N;;;;; 1FBE;GREEK PROSGEGRAMMENI;Lu;0;L;0399;;;;N;;;;; 1FBF;GREEK PSILI;Lm;0;L; 0020 0313;;;;N;;;;; 1FC0;GREEK PERISPOMENI;Lm;0;L; 0020 0342;;;;N;;;;; 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Lm;0;L;00A8 0342;;;;N;;;;; 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F75 0345;;;;N;;;;; 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0395 0301;;;;N;;;;1F73; 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0397 0301;;;;N;;;;1F75; 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lu;0;L;0397 0345;;;;N;;;;1FC3; 1FCD;GREEK PSILI AND VARIA;Lm;0;L;1FBF 0300;;;;N;;;;; 1FCE;GREEK PSILI AND OXIA;Lm;0;L;1FBF 0301;;;;N;;;;; 1FCF;GREEK PSILI AND PERISPOMENI;Lm;0;L;1FBF 0342;;;;N;;;;; 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;03CA 0301;;;;N;;;;; 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;0399 0301;;;;N;;;;1F77; 1FDD;GREEK DASIA AND VARIA;Lm;0;L;1FFE 0300;;;;N;;;;; 1FDE;GREEK DASIA AND OXIA;Lm;0;L;1FFE 0301;;;;N;;;;; 1FDF;GREEK DASIA AND PERISPOMENI;Lm;0;L;1FFE 0342;;;;N;;;;; 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03CB 0301;;;;N;;;;; 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;03A5 0301;;;;N;;;;1F7B; 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; 1FED;GREEK DIALYTIKA AND VARIA;Lm;0;L;00A8 0300;;;;N;;;;; 1FEE;GREEK DIALYTIKA AND OXIA;Lm;0;L;00A8 0301;;;;N;;;;; 1FEF;GREEK VARIA;Lm;0;L;0060;;;;N;;;;; 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F79 0345;;;;N;;;;; 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;039F 0301;;;;N;;;;1F79; 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;03A9 0301;;;;N;;;;1F7D; 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lu;0;L;03A9 0345;;;;N;;;;1FF3; 1FFD;GREEK OXIA;Lm;0;L;00B4;;;;N;;;;; 1FFE;GREEK DASIA;Lm;0;L; 0020 0314;;;;N;;;;; 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; 2002;EN SPACE;Zs;0;WS; 0020;;;;N;;;;; 2003;EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2004;THREE-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2005;FOUR-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2006;SIX-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2007;FIGURE SPACE;Zs;0;ES; 0020;;;;N;;;;; 2008;PUNCTUATION SPACE;Zs;0;WS; 0020;;;;N;;;;; 2009;THIN SPACE;Zs;0;WS; 0020;;;;N;;;;; 200A;HAIR SPACE;Zs;0;WS; 0020;;;;N;;;;; 200B;ZERO WIDTH SPACE;Zs;0;WS;;;;;N;;;;; 200C;ZERO WIDTH NON-JOINER;Cc;0;ON;;;;;N;;;;; 200D;ZERO WIDTH JOINER;Cc;0;ON;;;;;N;;;;; 200E;LEFT-TO-RIGHT MARK;Cc;0;L;;;;;N;;;;; 200F;RIGHT-TO-LEFT MARK;Cc;0;R;;;;;N;;;;; 2010;HYPHEN;Pd;0;ON;;;;;N;;;;; 2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; 2013;EN DASH;Pd;0;ON;;;;;N;;;;; 2014;EM DASH;Pd;0;ON;;;;;N;;;;; 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; 2017;DOUBLE LOW LINE;Po;0;ON; 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; 2018;LEFT SINGLE QUOTATION MARK;Ps;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; 2019;RIGHT SINGLE QUOTATION MARK;Pe;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; 201A;SINGLE LOW-9 QUOTATION MARK;Po;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Po;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; 201C;LEFT DOUBLE QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; 201D;RIGHT DOUBLE QUOTATION MARK;Pe;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; 201E;DOUBLE LOW-9 QUOTATION MARK;Po;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Po;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; 2020;DAGGER;Po;0;ON;;;;;N;;;;; 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; 2022;BULLET;Po;0;ON;;;;;N;;;;; 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; 2024;ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;; 2025;TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; 2026;HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; 2028;LINE SEPARATOR;Zl;0;B;;;;;N;;;;; 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; 202A;LEFT-TO-RIGHT EMBEDDING;Cc;0;ON;;;;;N;;;;; 202B;RIGHT-TO-LEFT EMBEDDING;Cc;0;ON;;;;;N;;;;; 202C;POP DIRECTIONAL FORMATTING;Cc;0;ON;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cc;0;ON;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cc;0;ON;;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; 2033;DOUBLE PRIME;Po;0;ET; 2032 2032;;;;N;;;;; 2034;TRIPLE PRIME;Po;0;ET; 2032 2032 2032;;;;N;;;;; 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; 2036;REVERSED DOUBLE PRIME;Po;0;ON; 2035 2035;;;;N;;;;; 2037;REVERSED TRIPLE PRIME;Po;0;ON; 2035 2035 2035;;;;N;;;;; 2038;CARET;Po;0;ON;;;;;N;;;;; 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING SINGLE GUILLEMET;;;; 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING SINGLE GUILLEMET;;;; 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; 203C;DOUBLE EXCLAMATION MARK;Po;0;ON; 0021 0021;;;;N;;;;; 203D;INTERROBANG;So;0;ON;;;;;N;;;;; 203E;OVERLINE;So;0;ON; 0020 0305;;;;N;SPACING OVERSCORE;;;; 203F;UNDERTIE;So;0;ON;;;;;N;;Enotikon;;; 2040;CHARACTER TIE;So;0;ON;;;;;N;;;;; 2041;CARET INSERTION POINT;So;0;ON;;;;;N;;;;; 2042;ASTERISM;So;0;ON;;;;;N;;;;; 2043;HYPHEN BULLET;So;0;ON;;;;;N;;;;; 2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;; 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; 206A;INHIBIT SYMMETRIC SWAPPING;Cc;0;ON;;;;;N;;;;; 206B;ACTIVATE SYMMETRIC SWAPPING;Cc;0;ON;;;;;N;;;;; 206C;INHIBIT ARABIC FORM SHAPING;Cc;0;ON;;;;;N;;;;; 206D;ACTIVATE ARABIC FORM SHAPING;Cc;0;ON;;;;;N;;;;; 206E;NATIONAL DIGIT SHAPES;Cc;0;ON;;;;;N;;;;; 206F;NOMINAL DIGIT SHAPES;Cc;0;ON;;;;;N;;;;; 2070;SUPERSCRIPT ZERO;Nd;0;EN; 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; 2074;SUPERSCRIPT FOUR;Nd;0;EN; 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; 2075;SUPERSCRIPT FIVE;Nd;0;EN; 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; 2076;SUPERSCRIPT SIX;Nd;0;EN; 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;; 2077;SUPERSCRIPT SEVEN;Nd;0;EN; 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;Nd;0;EN; 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;Nd;0;EN; 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;; 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; 207B;SUPERSCRIPT MINUS;Sm;0;ET; 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; 207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;ON; 006E;;;;N;;;;; 2080;SUBSCRIPT ZERO;Nd;0;EN; 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;; 2081;SUBSCRIPT ONE;Nd;0;EN; 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;; 2082;SUBSCRIPT TWO;Nd;0;EN; 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;; 2083;SUBSCRIPT THREE;Nd;0;EN; 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;; 2084;SUBSCRIPT FOUR;Nd;0;EN; 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;; 2085;SUBSCRIPT FIVE;Nd;0;EN; 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;; 2086;SUBSCRIPT SIX;Nd;0;EN; 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;; 2087;SUBSCRIPT SEVEN;Nd;0;EN; 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;Nd;0;EN; 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;Nd;0;EN; 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;; 208A;SUBSCRIPT PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; 208B;SUBSCRIPT MINUS;Sm;0;ET; 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; 20A8;RUPEE SIGN;Lt;0;ET; 0052 0073;;;;N;;;;; 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; 20D8;COMBINING RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING RING OVERLAY;;;; 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; 20DB;COMBINING THREE DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; 20DD;COMBINING ENCLOSING CIRCLE;Mn;0;L;;;;;N;ENCLOSING CIRCLE;;;; 20DE;COMBINING ENCLOSING SQUARE;Mn;0;L;;;;;N;ENCLOSING SQUARE;;;; 20DF;COMBINING ENCLOSING DIAMOND;Mn;0;L;;;;;N;ENCLOSING DIAMOND;;;; 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Mn;0;L;;;;;N;ENCLOSING CIRCLE SLASH;;;; 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;1;L;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; 2100;ACCOUNT OF;So;0;ON;;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON;;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;ON; 0043;;;;N;DOUBLE-STRUCK C;;;; 2103;DEGREE CELSIUS;So;0;ON; 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; 2105;CARE OF;So;0;ON;;;;;N;;;;; 2106;CADA UNA;So;0;ON;;;;;N;;;;; 2107;EULER CONSTANT;Lu;0;ON; 0190;;;;N;EULERS;;;; 2108;SCRUPLE;So;0;ON;;;;;N;;;;; 2109;DEGREE FAHRENHEIT;So;0;ON; 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; 210A;SCRIPT SMALL G;Ll;0;ON; 0067;;;;N;;;;; 210B;SCRIPT CAPITAL H;Lu;0;ON; 0048;;;;N;SCRIPT H;;;; 210C;BLACK-LETTER CAPITAL H;Lu;0;ON; 0048;;;;N;BLACK-LETTER H;;;; 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;ON; 0048;;;;N;DOUBLE-STRUCK H;;;; 210E;PLANCK CONSTANT;Ll;0;ON; 0068;;;;N;;;;; 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;ON; 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; 2110;SCRIPT CAPITAL I;Lu;0;ON; 0049;;;;N;SCRIPT I;;;; 2111;BLACK-LETTER CAPITAL I;Lu;0;ON; 0049;;;;N;BLACK-LETTER I;;;; 2112;SCRIPT CAPITAL L;Lu;0;ON; 004C;;;;N;SCRIPT L;;;; 2113;SCRIPT SMALL L;Ll;0;ON; 006C;;;;N;;;;; 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;ON; 004E;;;;N;DOUBLE-STRUCK N;;;; 2116;NUMERO SIGN;Lt;0;ON; 004E 006F;;;;N;NUMERO;;;; 2117;SOUND RECORDING COPYRIGHT;Lu;0;ON;;;;;N;;;;; 2118;SCRIPT CAPITAL P;Lu;0;ON; 0050;;;;N;SCRIPT P;;;; 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;ON; 0050;;;;N;DOUBLE-STRUCK P;;;; 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;ON; 0051;;;;N;DOUBLE-STRUCK Q;;;; 211B;SCRIPT CAPITAL R;Lu;0;ON; 0052;;;;N;SCRIPT R;;;; 211C;BLACK-LETTER CAPITAL R;Lu;0;ON; 0052;;;;N;BLACK-LETTER R;;;; 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;ON; 0052;;;;N;DOUBLE-STRUCK R;;;; 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; 211F;RESPONSE;So;0;ON;;;;;N;;;;; 2120;SERVICE MARK;Lu;0;ON; 0053 004D;;;;N;;;;; 2121;TELEPHONE SIGN;Lu;0;ON; 0054 0045 004C;;;;N;T E L SYMBOL;;;; 2122;TRADE MARK SIGN;Lu;0;ON; 0054 004D;;;;N;TRADEMARK;;;; 2123;VERSICLE;So;0;ON;;;;;N;;;;; 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;ON; 005A;;;;N;DOUBLE-STRUCK Z;;;; 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; 2126;OHM SIGN;Lu;0;ON;03A9;;;;N;OHM;;;; 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; 2128;BLACK-LETTER CAPITAL Z;Lu;0;ON; 005A;;;;N;BLACK-LETTER Z;;;; 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; 212A;KELVIN SIGN;Lu;0;ON;004B;;;;N;DEGREES KELVIN;;;; 212B;ANGSTROM SIGN;Lu;0;ON;00C5;;;;N;ANGSTROM UNIT;;;; 212C;SCRIPT CAPITAL B;Lu;0;ON; 0042;;;;N;SCRIPT B;;;; 212D;BLACK-LETTER CAPITAL C;Lu;0;ON; 0043;;;;N;BLACK-LETTER C;;;; 212E;ESTIMATED SYMBOL;Ll;0;ON;;;;;N;;;;; 212F;SCRIPT SMALL E;Ll;0;ON; 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;ON; 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;ON; 0046;;;;N;SCRIPT F;;;; 2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;; 2133;SCRIPT CAPITAL M;Lu;0;ON; 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;ON; 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;ON; 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; 2136;BET SYMBOL;Lo;0;ON; 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; 2137;GIMEL SYMBOL;Lo;0;ON; 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; 2138;DALET SYMBOL;Lo;0;ON; 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; 2153;VULGAR FRACTION ONE THIRD;No;0;ON; 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON; 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON; 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON; 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON; 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON; 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; 2159;VULGAR FRACTION ONE SIXTH;No;0;ON; 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON; 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON; 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON; 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON; 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON; 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; 215F;FRACTION NUMERATOR ONE;No;0;ON; 0031 2044;;;1;N;;;;; 2160;ROMAN NUMERAL ONE;No;0;L; 0049;;;1;N;;;;2170; 2161;ROMAN NUMERAL TWO;No;0;L; 0049 0049;;;2;N;;;;2171; 2162;ROMAN NUMERAL THREE;No;0;L; 0049 0049 0049;;;3;N;;;;2172; 2163;ROMAN NUMERAL FOUR;No;0;L; 0049 0056;;;4;N;;;;2173; 2164;ROMAN NUMERAL FIVE;No;0;L; 0056;;;5;N;;;;2174; 2165;ROMAN NUMERAL SIX;No;0;L; 0056 0049;;;6;N;;;;2175; 2166;ROMAN NUMERAL SEVEN;No;0;L; 0056 0049 0049;;;7;N;;;;2176; 2167;ROMAN NUMERAL EIGHT;No;0;L; 0056 0049 0049 0049;;;8;N;;;;2177; 2168;ROMAN NUMERAL NINE;No;0;L; 0049 0058;;;9;N;;;;2178; 2169;ROMAN NUMERAL TEN;No;0;L; 0058;;;10;N;;;;2179; 216A;ROMAN NUMERAL ELEVEN;No;0;L; 0058 0049;;;11;N;;;;217A; 216B;ROMAN NUMERAL TWELVE;No;0;L; 0058 0049 0049;;;12;N;;;;217B; 216C;ROMAN NUMERAL FIFTY;No;0;L; 004C;;;50;N;;;;217C; 216D;ROMAN NUMERAL ONE HUNDRED;No;0;L; 0043;;;100;N;;;;217D; 216E;ROMAN NUMERAL FIVE HUNDRED;No;0;L; 0044;;;500;N;;;;217E; 216F;ROMAN NUMERAL ONE THOUSAND;No;0;L; 004D;;;1000;N;;;;217F; 2170;SMALL ROMAN NUMERAL ONE;No;0;L; 0069;;;1;N;;;2160;;2160 2171;SMALL ROMAN NUMERAL TWO;No;0;L; 0069 0069;;;2;N;;;2161;;2161 2172;SMALL ROMAN NUMERAL THREE;No;0;L; 0069 0069 0069;;;3;N;;;2162;;2162 2173;SMALL ROMAN NUMERAL FOUR;No;0;L; 0069 0076;;;4;N;;;2163;;2163 2174;SMALL ROMAN NUMERAL FIVE;No;0;L; 0076;;;5;N;;;2164;;2164 2175;SMALL ROMAN NUMERAL SIX;No;0;L; 0076 0069;;;6;N;;;2165;;2165 2176;SMALL ROMAN NUMERAL SEVEN;No;0;L; 0076 0069 0069;;;7;N;;;2166;;2166 2177;SMALL ROMAN NUMERAL EIGHT;No;0;L; 0076 0069 0069 0069;;;8;N;;;2167;;2167 2178;SMALL ROMAN NUMERAL NINE;No;0;L; 0069 0078;;;9;N;;;2168;;2168 2179;SMALL ROMAN NUMERAL TEN;No;0;L; 0078;;;10;N;;;2169;;2169 217A;SMALL ROMAN NUMERAL ELEVEN;No;0;L; 0078 0069;;;11;N;;;216A;;216A 217B;SMALL ROMAN NUMERAL TWELVE;No;0;L; 0078 0069 0069;;;12;N;;;216B;;216B 217C;SMALL ROMAN NUMERAL FIFTY;No;0;L; 006C;;;50;N;;;216C;;216C 217D;SMALL ROMAN NUMERAL ONE HUNDRED;No;0;L; 0063;;;100;N;;;216D;;216D 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;No;0;L; 0064;;;500;N;;;216E;;216E 217F;SMALL ROMAN NUMERAL ONE THOUSAND;No;0;L; 006D;;;1000;N;;;216F;;216F 2180;ROMAN NUMERAL ONE THOUSAND C D;No;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;No;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;No;0;L;;;;10000;N;;;;; 2190;LEFTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;So;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW;;;; 2193;DOWNWARDS ARROW;So;0;ON;;;;;N;DOWN ARROW;;;; 2194;LEFT RIGHT ARROW;So;0;ON;;;;;N;;;;; 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; 219A;LEFTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;LEFT ARROW WITH STROKE;;;; 219B;RIGHTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT ARROW WITH STROKE;;;; 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; 21A0;RIGHTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; 21A3;RIGHTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; 21A6;RIGHTWARDS ARROW FROM BAR;So;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; 21AE;LEFT RIGHT ARROW WITH STROKE;So;0;ON;;;;;N;;;;; 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;;;;; 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; 21D2;RIGHTWARDS DOUBLE ARROW;So;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; 21D4;LEFT RIGHT DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; 2200;FOR ALL;Sm;0;ON;;;;;N;;;;; 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; 2206;INCREMENT;Sm;0;ON;;;;;N;;;;; 2207;NABLA;Sm;0;ON;;;;;N;;;;; 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; 2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; 221E;INFINITY;Sm;0;ON;;;;;N;;;;; 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; 2220;ANGLE;Sm;0;ON;;;;;Y;;;;; 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; 2223;DIVIDES;Sm;0;ON;;;;;N;;;;; 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; 222A;UNION;Sm;0;ON;;;;;N;;;;; 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222C;DOUBLE INTEGRAL;Sm;0;ON; 222B 222B;;;;Y;;;;; 222D;TRIPLE INTEGRAL;Sm;0;ON; 222B 222B 222B;;;;Y;;;;; 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222F;SURFACE INTEGRAL;Sm;0;ON; 222E 222E;;;;Y;;;;; 2230;VOLUME INTEGRAL;Sm;0;ON; 222E 222E 222E;;;;Y;;;;; 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2234;THEREFORE;Sm;0;ON;;;;;N;;;;; 2235;BECAUSE;Sm;0;ON;;;;;N;;;;; 2236;RATIO;Sm;0;ON;;;;;N;;;;; 2237;PROPORTION;Sm;0;ON;;;;;N;;;;; 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; 2239;EXCESS;Sm;0;ON;;;;;Y;;;;; 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;; 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; 2241;NOT TILDE;Sm;0;ON;007E 0338;;;;Y;;;;; 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; 228C;MULTISET;Sm;0;ON;;;;;Y;;;;; 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; 22A5;UP TACK;Sm;0;ON;;;;;N;;;;; 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; 22A7;MODELS;Sm;0;ON;;;;;Y;;;;; 22A8;TRUE;Sm;0;ON;;;;;Y;;;;; 22A9;FORCES;Sm;0;ON;;;;;Y;;;;; 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; 22BB;XOR;Sm;0;ON;;;;;N;;;;; 22BC;NAND;Sm;0;ON;;;;;N;;;;; 22BD;NOR;Sm;0;ON;;;;;N;;;;; 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; 2302;HOUSE;So;0;ON;;;;;N;;;;; 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; 2305;PROJECTIVE;So;0;ON;;;;;N;;;;; 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; 2307;WAVY LINE;So;0;ON;;;;;N;;;;; 2308;LEFT CEILING;So;0;ON;;;;;Y;;;;; 2309;RIGHT CEILING;So;0;ON;;;;;Y;;;;; 230A;LEFT FLOOR;So;0;ON;;;;;Y;;;;; 230B;RIGHT FLOOR;So;0;ON;;;;;Y;;;;; 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; 2312;ARC;So;0;ON;;;;;N;;;;; 2313;SEGMENT;So;0;ON;;;;;N;;;;; 2314;SECTOR;So;0;ON;;;;;N;;;;; 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; 231A;WATCH;So;0;ON;;;;;N;;;;; 231B;HOURGLASS;So;0;ON;;;;;N;;;;; 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; 2320;TOP HALF INTEGRAL;So;0;ON;;;;;Y;;;;; 2321;BOTTOM HALF INTEGRAL;So;0;ON;;;;;Y;;;;; 2322;FROWN;So;0;ON;;;;;N;;;;; 2323;SMILE;So;0;ON;;;;;N;;;;; 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; 2325;OPTION KEY;So;0;ON;;;;;N;;;;; 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; 2328;KEYBOARD;So;0;ON;;;;;N;;;;; 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; 232C;BENZENE RING;So;0;ON;;;;;N;;;;; 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; 232F;SYMMETRY;So;0;ON;;;;;N;;;;; 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; 2333;SLOPE;So;0;ON;;;;;N;;;;; 2334;COUNTERBORE;So;0;ON;;;;;N;;;;; 2335;COUNTERSINK;So;0;ON;;;;;N;;;;; 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;; 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;; 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;; 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;; 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;; 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; 2423;OPEN BOX;So;0;ON;;;;;N;;;;; 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; 2448;OCR DASH;So;0;ON;;;;;N;;;;; 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; 2460;CIRCLED DIGIT ONE;No;0;ON; 0031;;1;1;N;;;;; 2461;CIRCLED DIGIT TWO;No;0;ON; 0032;;2;2;N;;;;; 2462;CIRCLED DIGIT THREE;No;0;ON; 0033;;3;3;N;;;;; 2463;CIRCLED DIGIT FOUR;No;0;ON; 0034;;4;4;N;;;;; 2464;CIRCLED DIGIT FIVE;No;0;ON; 0035;;5;5;N;;;;; 2465;CIRCLED DIGIT SIX;No;0;ON; 0036;;6;6;N;;;;; 2466;CIRCLED DIGIT SEVEN;No;0;ON; 0037;;7;7;N;;;;; 2467;CIRCLED DIGIT EIGHT;No;0;ON; 0038;;8;8;N;;;;; 2468;CIRCLED DIGIT NINE;No;0;ON; 0039;;9;9;N;;;;; 2469;CIRCLED NUMBER TEN;No;0;ON; 0031;;;10;N;;;;; 246A;CIRCLED NUMBER ELEVEN;No;0;ON; 0031 0030;;;11;N;;;;; 246B;CIRCLED NUMBER TWELVE;No;0;ON; 0031 0032;;;12;N;;;;; 246C;CIRCLED NUMBER THIRTEEN;No;0;ON; 0031 0033;;;13;N;;;;; 246D;CIRCLED NUMBER FOURTEEN;No;0;ON; 0031 0034;;;14;N;;;;; 246E;CIRCLED NUMBER FIFTEEN;No;0;ON; 0031 0035;;;15;N;;;;; 246F;CIRCLED NUMBER SIXTEEN;No;0;ON; 0031 0036;;;16;N;;;;; 2470;CIRCLED NUMBER SEVENTEEN;No;0;ON; 0031 0037;;;17;N;;;;; 2471;CIRCLED NUMBER EIGHTEEN;No;0;ON; 0031 0038;;;18;N;;;;; 2472;CIRCLED NUMBER NINETEEN;No;0;ON; 0031 0039;;;19;N;;;;; 2473;CIRCLED NUMBER TWENTY;No;0;ON; 0032 0030;;;20;N;;;;; 2474;PARENTHESIZED DIGIT ONE;No;0;ON;0028 0031 0029;;1;1;N;;;;; 2475;PARENTHESIZED DIGIT TWO;No;0;ON;0028 0032 0029;;2;2;N;;;;; 2476;PARENTHESIZED DIGIT THREE;No;0;ON;0028 0033 0029;;3;3;N;;;;; 2477;PARENTHESIZED DIGIT FOUR;No;0;ON;0028 0034 0029;;4;4;N;;;;; 2478;PARENTHESIZED DIGIT FIVE;No;0;ON;0028 0035 0029;;5;5;N;;;;; 2479;PARENTHESIZED DIGIT SIX;No;0;ON;0028 0036 0029;;6;6;N;;;;; 247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;0028 0037 0029;;7;7;N;;;;; 247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;0028 0038 0029;;8;8;N;;;;; 247C;PARENTHESIZED DIGIT NINE;No;0;ON;0028 0039 0029;;9;9;N;;;;; 247D;PARENTHESIZED NUMBER TEN;No;0;ON;0028 0031 0030 0029;;;10;N;;;;; 247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;0028 0031 0031 0029;;;11;N;;;;; 247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;0028 0031 0032 0029;;;12;N;;;;; 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;0028 0031 0033 0029;;;13;N;;;;; 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;0028 0031 0034 0029;;;14;N;;;;; 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;0028 0031 0035 0029;;;15;N;;;;; 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;0028 0031 0036 0029;;;16;N;;;;; 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;0028 0031 0037 0029;;;17;N;;;;; 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;0028 0031 0038 0029;;;18;N;;;;; 2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;0028 0031 0039 0029;;;19;N;;;;; 2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;0028 0032 0030 0029;;;20;N;;;;; 2488;DIGIT ONE FULL STOP;No;0;ON;0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; 2489;DIGIT TWO FULL STOP;No;0;ON;0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; 248A;DIGIT THREE FULL STOP;No;0;ON;0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; 248B;DIGIT FOUR FULL STOP;No;0;ON;0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; 248C;DIGIT FIVE FULL STOP;No;0;ON;0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; 248D;DIGIT SIX FULL STOP;No;0;ON;0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; 248E;DIGIT SEVEN FULL STOP;No;0;ON;0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; 248F;DIGIT EIGHT FULL STOP;No;0;ON;0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; 2490;DIGIT NINE FULL STOP;No;0;ON;0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; 2491;NUMBER TEN FULL STOP;No;0;ON;0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; 2492;NUMBER ELEVEN FULL STOP;No;0;ON;0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; 2493;NUMBER TWELVE FULL STOP;No;0;ON;0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; 2494;NUMBER THIRTEEN FULL STOP;No;0;ON;0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; 2495;NUMBER FOURTEEN FULL STOP;No;0;ON;0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; 2496;NUMBER FIFTEEN FULL STOP;No;0;ON;0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; 2497;NUMBER SIXTEEN FULL STOP;No;0;ON;0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; 2498;NUMBER SEVENTEEN FULL STOP;No;0;ON;0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; 2499;NUMBER EIGHTEEN FULL STOP;No;0;ON;0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; 249A;NUMBER NINETEEN FULL STOP;No;0;ON;0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; 249B;NUMBER TWENTY FULL STOP;No;0;ON;0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;ON;0028 0061 0029;;;;N;;;;; 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;ON;0028 0062 0029;;;;N;;;;; 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;ON;0028 0063 0029;;;;N;;;;; 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;ON;0028 0064 0029;;;;N;;;;; 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;ON;0028 0065 0029;;;;N;;;;; 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;ON;0028 0066 0029;;;;N;;;;; 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;ON;0028 0067 0029;;;;N;;;;; 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;ON;0028 0068 0029;;;;N;;;;; 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;ON;0028 0069 0029;;;;N;;;;; 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;ON;0028 006A 0029;;;;N;;;;; 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;ON;0028 006B 0029;;;;N;;;;; 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;ON;0028 006C 0029;;;;N;;;;; 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;ON;0028 006D 0029;;;;N;;;;; 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;ON;0028 006E 0029;;;;N;;;;; 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;ON;0028 006F 0029;;;;N;;;;; 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;ON;0028 0070 0029;;;;N;;;;; 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;ON;0028 0071 0029;;;;N;;;;; 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;ON;0028 0072 0029;;;;N;;;;; 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;ON;0028 0073 0029;;;;N;;;;; 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;ON;0028 0074 0029;;;;N;;;;; 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;ON;0028 0075 0029;;;;N;;;;; 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;ON;0028 0076 0029;;;;N;;;;; 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;ON;0028 0077 0029;;;;N;;;;; 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;ON;0028 0078 0029;;;;N;;;;; 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;ON;0028 0079 0029;;;;N;;;;; 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;ON;0028 007A 0029;;;;N;;;;; 24B6;CIRCLED LATIN CAPITAL LETTER A;Lu;0;ON; 0041;;;;N;;;;24D0; 24B7;CIRCLED LATIN CAPITAL LETTER B;Lu;0;ON; 0042;;;;N;;;;24D1; 24B8;CIRCLED LATIN CAPITAL LETTER C;Lu;0;ON; 0043;;;;N;;;;24D2; 24B9;CIRCLED LATIN CAPITAL LETTER D;Lu;0;ON; 0044;;;;N;;;;24D3; 24BA;CIRCLED LATIN CAPITAL LETTER E;Lu;0;ON; 0045;;;;N;;;;24D4; 24BB;CIRCLED LATIN CAPITAL LETTER F;Lu;0;ON; 0046;;;;N;;;;24D5; 24BC;CIRCLED LATIN CAPITAL LETTER G;Lu;0;ON; 0047;;;;N;;;;24D6; 24BD;CIRCLED LATIN CAPITAL LETTER H;Lu;0;ON; 0048;;;;N;;;;24D7; 24BE;CIRCLED LATIN CAPITAL LETTER I;Lu;0;ON; 0049;;;;N;;;;24D8; 24BF;CIRCLED LATIN CAPITAL LETTER J;Lu;0;ON; 004A;;;;N;;;;24D9; 24C0;CIRCLED LATIN CAPITAL LETTER K;Lu;0;ON; 004B;;;;N;;;;24DA; 24C1;CIRCLED LATIN CAPITAL LETTER L;Lu;0;ON; 004C;;;;N;;;;24DB; 24C2;CIRCLED LATIN CAPITAL LETTER M;Lu;0;ON; 004D;;;;N;;;;24DC; 24C3;CIRCLED LATIN CAPITAL LETTER N;Lu;0;ON; 004E;;;;N;;;;24DD; 24C4;CIRCLED LATIN CAPITAL LETTER O;Lu;0;ON; 004F;;;;N;;;;24DE; 24C5;CIRCLED LATIN CAPITAL LETTER P;Lu;0;ON; 0050;;;;N;;;;24DF; 24C6;CIRCLED LATIN CAPITAL LETTER Q;Lu;0;ON; 0051;;;;N;;;;24E0; 24C7;CIRCLED LATIN CAPITAL LETTER R;Lu;0;ON; 0052;;;;N;;;;24E1; 24C8;CIRCLED LATIN CAPITAL LETTER S;Lu;0;ON; 0053;;;;N;;;;24E2; 24C9;CIRCLED LATIN CAPITAL LETTER T;Lu;0;ON; 0054;;;;N;;;;24E3; 24CA;CIRCLED LATIN CAPITAL LETTER U;Lu;0;ON; 0055;;;;N;;;;24E4; 24CB;CIRCLED LATIN CAPITAL LETTER V;Lu;0;ON; 0056;;;;N;;;;24E5; 24CC;CIRCLED LATIN CAPITAL LETTER W;Lu;0;ON; 0057;;;;N;;;;24E6; 24CD;CIRCLED LATIN CAPITAL LETTER X;Lu;0;ON; 0058;;;;N;;;;24E7; 24CE;CIRCLED LATIN CAPITAL LETTER Y;Lu;0;ON; 0059;;;;N;;;;24E8; 24CF;CIRCLED LATIN CAPITAL LETTER Z;Lu;0;ON; 005A;;;;N;;;;24E9; 24D0;CIRCLED LATIN SMALL LETTER A;Ll;0;ON; 0061;;;;N;;;24B6;;24B6 24D1;CIRCLED LATIN SMALL LETTER B;Ll;0;ON; 0062;;;;N;;;24B7;;24B7 24D2;CIRCLED LATIN SMALL LETTER C;Ll;0;ON; 0063;;;;N;;;24B8;;24B8 24D3;CIRCLED LATIN SMALL LETTER D;Ll;0;ON; 0064;;;;N;;;24B9;;24B9 24D4;CIRCLED LATIN SMALL LETTER E;Ll;0;ON; 0065;;;;N;;;24BA;;24BA 24D5;CIRCLED LATIN SMALL LETTER F;Ll;0;ON; 0066;;;;N;;;24BB;;24BB 24D6;CIRCLED LATIN SMALL LETTER G;Ll;0;ON; 0067;;;;N;;;24BC;;24BC 24D7;CIRCLED LATIN SMALL LETTER H;Ll;0;ON; 0068;;;;N;;;24BD;;24BD 24D8;CIRCLED LATIN SMALL LETTER I;Ll;0;ON; 0069;;;;N;;;24BE;;24BE 24D9;CIRCLED LATIN SMALL LETTER J;Ll;0;ON; 006A;;;;N;;;24BF;;24BF 24DA;CIRCLED LATIN SMALL LETTER K;Ll;0;ON; 006B;;;;N;;;24C0;;24C0 24DB;CIRCLED LATIN SMALL LETTER L;Ll;0;ON; 006C;;;;N;;;24C1;;24C1 24DC;CIRCLED LATIN SMALL LETTER M;Ll;0;ON; 006D;;;;N;;;24C2;;24C2 24DD;CIRCLED LATIN SMALL LETTER N;Ll;0;ON; 006E;;;;N;;;24C3;;24C3 24DE;CIRCLED LATIN SMALL LETTER O;Ll;0;ON; 006F;;;;N;;;24C4;;24C4 24DF;CIRCLED LATIN SMALL LETTER P;Ll;0;ON; 0070;;;;N;;;24C5;;24C5 24E0;CIRCLED LATIN SMALL LETTER Q;Ll;0;ON; 0071;;;;N;;;24C6;;24C6 24E1;CIRCLED LATIN SMALL LETTER R;Ll;0;ON; 0072;;;;N;;;24C7;;24C7 24E2;CIRCLED LATIN SMALL LETTER S;Ll;0;ON; 0073;;;;N;;;24C8;;24C8 24E3;CIRCLED LATIN SMALL LETTER T;Ll;0;ON; 0074;;;;N;;;24C9;;24C9 24E4;CIRCLED LATIN SMALL LETTER U;Ll;0;ON; 0075;;;;N;;;24CA;;24CA 24E5;CIRCLED LATIN SMALL LETTER V;Ll;0;ON; 0076;;;;N;;;24CB;;24CB 24E6;CIRCLED LATIN SMALL LETTER W;Ll;0;ON; 0077;;;;N;;;24CC;;24CC 24E7;CIRCLED LATIN SMALL LETTER X;Ll;0;ON; 0078;;;;N;;;24CD;;24CD 24E8;CIRCLED LATIN SMALL LETTER Y;Ll;0;ON; 0079;;;;N;;;24CE;;24CE 24E9;CIRCLED LATIN SMALL LETTER Z;Ll;0;ON; 007A;;;;N;;;24CF;;24CF 24EA;CIRCLED DIGIT ZERO;No;0;ON; 0030;;0;0;N;;;;; 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2588;FULL BLOCK;So;0;ON;;;;;N;;;;; 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; 2593;DARK SHADE;So;0;ON;;;;;N;;;;; 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; 25B7;WHITE RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; 25C1;WHITE LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 25C9;FISHEYE;So;0;ON;;;;;N;;;;; 25CA;LOZENGE;So;0;ON;;;;;N;;;;; 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25CE;BULLSEYE;So;0;ON;;;;;N;;;;; 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; 2601;CLOUD;So;0;ON;;;;;N;;;;; 2602;UMBRELLA;So;0;ON;;;;;N;;;;; 2603;SNOWMAN;So;0;ON;;;;;N;;;;; 2604;COMET;So;0;ON;;;;;N;;;;; 2605;BLACK STAR;So;0;ON;;;;;N;;;;; 2606;WHITE STAR;So;0;ON;;;;;N;;;;; 2607;LIGHTNING;So;0;ON;;;;;N;;;;; 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; 2609;SUN;So;0;ON;;;;;N;;;;; 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; 260C;CONJUNCTION;So;0;ON;;;;;N;;;;; 260D;OPPOSITION;So;0;ON;;;;;N;;;;; 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; 2610;BALLOT BOX;So;0;ON;;;;;N;;;;; 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; 2613;SALTIRE;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; 2624;CADUCEUS;So;0;ON;;;;;N;;;;; 2625;ANKH;So;0;ON;;;;;N;;;;; 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; 2627;CHI RHO;So;0;ON;;;;;N;;;;; 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; 262F;YIN YANG;So;0;ON;;;;;N;;;;; 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; 263F;MERCURY;So;0;ON;;;;;N;;;;; 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; 2641;EARTH;So;0;ON;;;;;N;;;;; 2642;MALE SIGN;So;0;ON;;;;;N;;;;; 2643;JUPITER;So;0;ON;;;;;N;;;;; 2644;SATURN;So;0;ON;;;;;N;;;;; 2645;URANUS;So;0;ON;;;;;N;;;;; 2646;NEPTUNE;So;0;ON;;;;;N;;;;; 2647;PLUTO;So;0;ON;;;;;N;;;;; 2648;ARIES;So;0;ON;;;;;N;;;;; 2649;TAURUS;So;0;ON;;;;;N;;;;; 264A;GEMINI;So;0;ON;;;;;N;;;;; 264B;CANCER;So;0;ON;;;;;N;;;;; 264C;LEO;So;0;ON;;;;;N;;;;; 264D;VIRGO;So;0;ON;;;;;N;;;;; 264E;LIBRA;So;0;ON;;;;;N;;;;; 264F;SCORPIUS;So;0;ON;;;;;N;;;;; 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; 2651;CAPRICORN;So;0;ON;;;;;N;;;;; 2652;AQUARIUS;So;0;ON;;;;;N;;;;; 2653;PISCES;So;0;ON;;;;;N;;;;; 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; 266F;MUSIC SHARP SIGN;So;0;ON;;;;;N;SHARP;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; 2708;AIRPLANE;So;0;ON;;;;;N;;;;; 2709;ENVELOPE;So;0;ON;;;;;N;;;;; 270C;VICTORY HAND;So;0;ON;;;;;N;;;;; 270D;WRITING HAND;So;0;ON;;;;;N;;;;; 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 270F;PENCIL;So;0;ON;;;;;N;;;;; 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 2711;WHITE NIB;So;0;ON;;;;;N;;;;; 2712;BLACK NIB;So;0;ON;;;;;N;;;;; 2713;CHECK MARK;So;0;ON;;;;;N;;;;; 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2717;BALLOT X;So;0;ON;;;;;N;;;;; 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; 271D;LATIN CROSS;So;0;ON;;;;;N;;;;; 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; 2747;SPARKLE;So;0;ON;;;;;N;;;;; 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; 2766;FLORAL HEART;So;0;ON;;;;;N;;;;; 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; 3003;DITTO MARK;Po;0;ON;;;;;N;;;;; 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; 3005;IDEOGRAPHIC ITERATION MARK;Po;0;ON;;;;;N;;;;; 3006;IDEOGRAPHIC CLOSING MARK;Po;0;ON;;;;;N;;;;; 3007;IDEOGRAPHIC NUMBER ZERO;No;0;ON;;;;0;N;;;;; 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; 3012;POSTAL MARK;So;0;ON;;;;;N;;;;; 3013;GETA MARK;So;0;ON;;;;;N;;;;; 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; 301D;REVERSED DOUBLE PRIME QUOTATION MARK;So;0;ON;;;;;N;;;;; 301E;DOUBLE PRIME QUOTATION MARK;So;0;ON;;;;;N;;;;; 301F;LOW DOUBLE PRIME QUOTATION MARK;So;0;ON;;;;;N;;;;; 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; 3021;HANGZHOU NUMERAL ONE;No;0;L;;;;1;N;;;;; 3022;HANGZHOU NUMERAL TWO;No;0;L;;;;2;N;;;;; 3023;HANGZHOU NUMERAL THREE;No;0;L;;;;3;N;;;;; 3024;HANGZHOU NUMERAL FOUR;No;0;L;;;;4;N;;;;; 3025;HANGZHOU NUMERAL FIVE;No;0;L;;;;5;N;;;;; 3026;HANGZHOU NUMERAL SIX;No;0;L;;;;6;N;;;;; 3027;HANGZHOU NUMERAL SEVEN;No;0;L;;;;7;N;;;;; 3028;HANGZHOU NUMERAL EIGHT;No;0;L;;;;8;N;;;;; 3029;HANGZHOU NUMERAL NINE;No;0;L;;;;9;N;;;;; 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;L;;;;;N;;;;; 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;L;;;;;N;;;;; 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;L;;;;;N;;;;; 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;L;;;;;N;;;;; 302E;HANGUL SINGLE DOT TONE MARK;Mn;224;L;;;;;N;;;;; 302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;L;;;;;N;;;;; 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; 3031;VERTICAL KANA REPEAT MARK;So;0;ON;;;;;N;;;;; 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;So;0;ON;;;;;N;;;;; 3033;VERTICAL KANA REPEAT MARK UPPER HALF;So;0;ON;;;;;N;;;;; 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;So;0;ON;;;;;N;;;;; 3035;VERTICAL KANA REPEAT MARK LOWER HALF;So;0;ON;;;;;N;;;;; 3036;CIRCLED POSTAL MARK;So;0;ON; 3012;;;;N;;;;; 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Lm;0;L; 0020 3099;;;;N;;;;; 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Lm;0;L; 0020 309A;;;;N;;;;; 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; 30FB;KATAKANA MIDDLE DOT;Po;0;L;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; 3131;HANGUL LETTER KIYEOK;Lo;0;L; 1100;;;;N;HANGUL LETTER GIYEOG;;;; 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L; 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; 3134;HANGUL LETTER NIEUN;Lo;0;L; 1102;;;;N;;;;; 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; 3137;HANGUL LETTER TIKEUT;Lo;0;L; 1103;;;;N;HANGUL LETTER DIGEUD;;;; 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L; 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; 3139;HANGUL LETTER RIEUL;Lo;0;L; 1105;;;;N;HANGUL LETTER LIEUL;;;; 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L; 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; 3141;HANGUL LETTER MIEUM;Lo;0;L; 1106;;;;N;;;;; 3142;HANGUL LETTER PIEUP;Lo;0;L; 1107;;;;N;HANGUL LETTER BIEUB;;;; 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L; 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L; 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; 3145;HANGUL LETTER SIOS;Lo;0;L; 1109;;;;N;;;;; 3146;HANGUL LETTER SSANGSIOS;Lo;0;L; 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; 3147;HANGUL LETTER IEUNG;Lo;0;L; 110B;;;;N;;;;; 3148;HANGUL LETTER CIEUC;Lo;0;L; 110C;;;;N;HANGUL LETTER JIEUJ;;;; 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L; 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; 314A;HANGUL LETTER CHIEUCH;Lo;0;L; 110E;;;;N;HANGUL LETTER CIEUC;;;; 314B;HANGUL LETTER KHIEUKH;Lo;0;L; 110F;;;;N;HANGUL LETTER KIYEOK;;;; 314C;HANGUL LETTER THIEUTH;Lo;0;L; 1110;;;;N;HANGUL LETTER TIEUT;;;; 314D;HANGUL LETTER PHIEUPH;Lo;0;L; 1111;;;;N;HANGUL LETTER PIEUP;;;; 314E;HANGUL LETTER HIEUH;Lo;0;L; 1112;;;;N;;;;; 314F;HANGUL LETTER A;Lo;0;L; 1161;;;;N;;;;; 3150;HANGUL LETTER AE;Lo;0;L; 1162;;;;N;;;;; 3151;HANGUL LETTER YA;Lo;0;L; 1163;;;;N;;;;; 3152;HANGUL LETTER YAE;Lo;0;L; 1164;;;;N;;;;; 3153;HANGUL LETTER EO;Lo;0;L; 1165;;;;N;;;;; 3154;HANGUL LETTER E;Lo;0;L; 1166;;;;N;;;;; 3155;HANGUL LETTER YEO;Lo;0;L; 1167;;;;N;;;;; 3156;HANGUL LETTER YE;Lo;0;L; 1168;;;;N;;;;; 3157;HANGUL LETTER O;Lo;0;L; 1169;;;;N;;;;; 3158;HANGUL LETTER WA;Lo;0;L; 116A;;;;N;;;;; 3159;HANGUL LETTER WAE;Lo;0;L; 116B;;;;N;;;;; 315A;HANGUL LETTER OE;Lo;0;L; 116C;;;;N;;;;; 315B;HANGUL LETTER YO;Lo;0;L; 116D;;;;N;;;;; 315C;HANGUL LETTER U;Lo;0;L; 116E;;;;N;;;;; 315D;HANGUL LETTER WEO;Lo;0;L; 116F;;;;N;;;;; 315E;HANGUL LETTER WE;Lo;0;L; 1170;;;;N;;;;; 315F;HANGUL LETTER WI;Lo;0;L; 1171;;;;N;;;;; 3160;HANGUL LETTER YU;Lo;0;L; 1172;;;;N;;;;; 3161;HANGUL LETTER EU;Lo;0;L; 1173;;;;N;;;;; 3162;HANGUL LETTER YI;Lo;0;L; 1174;;;;N;;;;; 3163;HANGUL LETTER I;Lo;0;L; 1175;;;;N;;;;; 3164;HANGUL FILLER;Lo;0;L; 1160;;;;N;HANGUL CAE OM;;;; 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L; 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L; 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L; 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L; 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L; 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L; 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L; 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L; 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L; 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L; 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L; 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L; 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L; 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L; 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L; 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L; 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L; 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L; 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L; 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L; 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L; 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L; 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L; 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L; 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L; 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L; 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; 317F;HANGUL LETTER PANSIOS;Lo;0;L; 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L; 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; 3181;HANGUL LETTER YESIEUNG;Lo;0;L; 114C;;;;N;HANGUL LETTER NGIEUNG;;;; 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L; 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L; 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L; 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L; 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L; 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; 3187;HANGUL LETTER YO-YA;Lo;0;L; 1184;;;;N;HANGUL LETTER YOYA;;;; 3188;HANGUL LETTER YO-YAE;Lo;0;L; 1185;;;;N;HANGUL LETTER YOYAE;;;; 3189;HANGUL LETTER YO-I;Lo;0;L; 1188;;;;N;HANGUL LETTER YOI;;;; 318A;HANGUL LETTER YU-YEO;Lo;0;L; 1191;;;;N;HANGUL LETTER YUYEO;;;; 318B;HANGUL LETTER YU-YE;Lo;0;L; 1192;;;;N;HANGUL LETTER YUYE;;;; 318C;HANGUL LETTER YU-I;Lo;0;L; 1194;;;;N;HANGUL LETTER YUI;;;; 318D;HANGUL LETTER ARAEA;Lo;0;L; 119E;;;;N;HANGUL LETTER ALAE A;;;; 318E;HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;; 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;; 3192;IDEOGRAPHIC ANNOTATION ONE MARK;Lo;0;L; 4E00;;;;N;KAERITEN ITI;Kaeriten;;; 3193;IDEOGRAPHIC ANNOTATION TWO MARK;Lo;0;L; 4E8C;;;;N;KAERITEN NI;Kaeriten;;; 3194;IDEOGRAPHIC ANNOTATION THREE MARK;Lo;0;L; 4E09;;;;N;KAERITEN SAN;Kaeriten;;; 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;Lo;0;L; 56DB;;;;N;KAERITEN SI;Kaeriten;;; 3196;IDEOGRAPHIC ANNOTATION TOP MARK;Lo;0;L; 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;; 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;Lo;0;L; 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;; 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;Lo;0;L; 4E0B;;;;N;KAERITEN GE;Kaeriten;;; 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;Lo;0;L; 7532;;;;N;KAERITEN KOU;Kaeriten;;; 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;Lo;0;L; 4E59;;;;N;KAERITEN OTU;Kaeriten;;; 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;Lo;0;L; 4E19;;;;N;KAERITEN HEI;Kaeriten;;; 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;Lo;0;L; 4E01;;;;N;KAERITEN TEI;Kaeriten;;; 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;Lo;0;L; 5929;;;;N;KAERITEN TEN;Kaeriten;;; 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;Lo;0;L; 5730;;;;N;KAERITEN TI;Kaeriten;;; 319F;IDEOGRAPHIC ANNOTATION MAN MARK;Lo;0;L; 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;; 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L; 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; 3201;PARENTHESIZED HANGUL NIEUN;So;0;L; 0028 1102 0029;;;;N;;;;; 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L; 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; 3203;PARENTHESIZED HANGUL RIEUL;So;0;L; 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; 3204;PARENTHESIZED HANGUL MIEUM;So;0;L; 0028 1106 0029;;;;N;;;;; 3205;PARENTHESIZED HANGUL PIEUP;So;0;L; 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; 3206;PARENTHESIZED HANGUL SIOS;So;0;L; 0028 1109 0029;;;;N;;;;; 3207;PARENTHESIZED HANGUL IEUNG;So;0;L; 0028 110B 0029;;;;N;;;;; 3208;PARENTHESIZED HANGUL CIEUC;So;0;L; 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L; 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L; 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L; 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L; 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; 320D;PARENTHESIZED HANGUL HIEUH;So;0;L; 0028 1112 0029;;;;N;;;;; 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L; 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L; 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L; 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L; 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L; 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L; 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; 3214;PARENTHESIZED HANGUL SIOS A;So;0;L; 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L; 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L; 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L; 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L; 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L; 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L; 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L; 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L; 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; 3220;PARENTHESIZED IDEOGRAPH ONE;So;0;L; 0028 4E00 0029;;;;N;;;;; 3221;PARENTHESIZED IDEOGRAPH TWO;So;0;L; 0028 4E8C 0029;;;;N;;;;; 3222;PARENTHESIZED IDEOGRAPH THREE;So;0;L; 0028 4E09 0029;;;;N;;;;; 3223;PARENTHESIZED IDEOGRAPH FOUR;So;0;L; 0028 56DB 0029;;;;N;;;;; 3224;PARENTHESIZED IDEOGRAPH FIVE;So;0;L; 0028 4E94 0029;;;;N;;;;; 3225;PARENTHESIZED IDEOGRAPH SIX;So;0;L; 0028 516D 0029;;;;N;;;;; 3226;PARENTHESIZED IDEOGRAPH SEVEN;So;0;L; 0028 4E03 0029;;;;N;;;;; 3227;PARENTHESIZED IDEOGRAPH EIGHT;So;0;L; 0028 516B 0029;;;;N;;;;; 3228;PARENTHESIZED IDEOGRAPH NINE;So;0;L; 0028 4E5D 0029;;;;N;;;;; 3229;PARENTHESIZED IDEOGRAPH TEN;So;0;L; 0028 5341 0029;;;;N;;;;; 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L; 0028 6708 0029;;;;N;;;;; 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L; 0028 706B 0029;;;;N;;;;; 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L; 0028 6C34 0029;;;;N;;;;; 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L; 0028 6728 0029;;;;N;;;;; 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L; 0028 91D1 0029;;;;N;;;;; 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L; 0028 571F 0029;;;;N;;;;; 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L; 0028 65E5 0029;;;;N;;;;; 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L; 0028 682A 0029;;;;N;;;;; 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L; 0028 6709 0029;;;;N;;;;; 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L; 0028 793E 0029;;;;N;;;;; 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L; 0028 540D 0029;;;;N;;;;; 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L; 0028 7279 0029;;;;N;;;;; 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L; 0028 8CA1 0029;;;;N;;;;; 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L; 0028 795D 0029;;;;N;;;;; 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L; 0028 52B4 0029;;;;N;;;;; 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L; 0028 4EE3 0029;;;;N;;;;; 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L; 0028 547C 0029;;;;N;;;;; 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L; 0028 5B66 0029;;;;N;;;;; 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L; 0028 76E3 0029;;;;N;;;;; 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L; 0028 4F01 0029;;;;N;;;;; 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L; 0028 8CC7 0029;;;;N;;;;; 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L; 0028 5354 0029;;;;N;;;;; 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L; 0028 796D 0029;;;;N;;;;; 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L; 0028 4F11 0029;;;;N;;;;; 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L; 0028 81EA 0029;;;;N;;;;; 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L; 0028 81F3 0029;;;;N;;;;; 3260;CIRCLED HANGUL KIYEOK;Lo;0;L; 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; 3261;CIRCLED HANGUL NIEUN;Lo;0;L; 1102;;;;N;;;;; 3262;CIRCLED HANGUL TIKEUT;Lo;0;L; 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; 3263;CIRCLED HANGUL RIEUL;Lo;0;L; 1105;;;;N;CIRCLED HANGUL LIEUL;;;; 3264;CIRCLED HANGUL MIEUM;Lo;0;L; 1106;;;;N;;;;; 3265;CIRCLED HANGUL PIEUP;Lo;0;L; 1107;;;;N;CIRCLED HANGUL BIEUB;;;; 3266;CIRCLED HANGUL SIOS;Lo;0;L; 1109;;;;N;;;;; 3267;CIRCLED HANGUL IEUNG;Lo;0;L; 110B;;;;N;;;;; 3268;CIRCLED HANGUL CIEUC;Lo;0;L; 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; 3269;CIRCLED HANGUL CHIEUCH;Lo;0;L; 110E;;;;N;CIRCLED HANGUL CIEUC;;;; 326A;CIRCLED HANGUL KHIEUKH;Lo;0;L; 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; 326B;CIRCLED HANGUL THIEUTH;Lo;0;L; 1110;;;;N;CIRCLED HANGUL TIEUT;;;; 326C;CIRCLED HANGUL PHIEUPH;Lo;0;L; 1111;;;;N;CIRCLED HANGUL PIEUP;;;; 326D;CIRCLED HANGUL HIEUH;Lo;0;L; 1112;;;;N;;;;; 326E;CIRCLED HANGUL KIYEOK A;Lo;0;L; 1100 1161;;;;N;CIRCLED HANGUL GA;;;; 326F;CIRCLED HANGUL NIEUN A;Lo;0;L; 1102 1161;;;;N;CIRCLED HANGUL NA;;;; 3270;CIRCLED HANGUL TIKEUT A;Lo;0;L; 1103 1161;;;;N;CIRCLED HANGUL DA;;;; 3271;CIRCLED HANGUL RIEUL A;Lo;0;L; 1105 1161;;;;N;CIRCLED HANGUL LA;;;; 3272;CIRCLED HANGUL MIEUM A;Lo;0;L; 1106 1161;;;;N;CIRCLED HANGUL MA;;;; 3273;CIRCLED HANGUL PIEUP A;Lo;0;L; 1107 1161;;;;N;CIRCLED HANGUL BA;;;; 3274;CIRCLED HANGUL SIOS A;Lo;0;L; 1109 1161;;;;N;CIRCLED HANGUL SA;;;; 3275;CIRCLED HANGUL IEUNG A;Lo;0;L; 110B 1161;;;;N;CIRCLED HANGUL A;;;; 3276;CIRCLED HANGUL CIEUC A;Lo;0;L; 110C 1161;;;;N;CIRCLED HANGUL JA;;;; 3277;CIRCLED HANGUL CHIEUCH A;Lo;0;L; 110E 1161;;;;N;CIRCLED HANGUL CA;;;; 3278;CIRCLED HANGUL KHIEUKH A;Lo;0;L; 110F 1161;;;;N;CIRCLED HANGUL KA;;;; 3279;CIRCLED HANGUL THIEUTH A;Lo;0;L; 1110 1161;;;;N;CIRCLED HANGUL TA;;;; 327A;CIRCLED HANGUL PHIEUPH A;Lo;0;L; 1111 1161;;;;N;CIRCLED HANGUL PA;;;; 327B;CIRCLED HANGUL HIEUH A;Lo;0;L; 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L; 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L; 4E8C;;;2;N;;;;; 3282;CIRCLED IDEOGRAPH THREE;No;0;L; 4E09;;;3;N;;;;; 3283;CIRCLED IDEOGRAPH FOUR;No;0;L; 56DB;;;4;N;;;;; 3284;CIRCLED IDEOGRAPH FIVE;No;0;L; 4E94;;;5;N;;;;; 3285;CIRCLED IDEOGRAPH SIX;No;0;L; 516D;;;6;N;;;;; 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L; 4E03;;;7;N;;;;; 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L; 516B;;;8;N;;;;; 3288;CIRCLED IDEOGRAPH NINE;No;0;L; 4E5D;;;9;N;;;;; 3289;CIRCLED IDEOGRAPH TEN;No;0;L; 5341;;;10;N;;;;; 328A;CIRCLED IDEOGRAPH MOON;Lo;0;L; 6708;;;;N;;;;; 328B;CIRCLED IDEOGRAPH FIRE;Lo;0;L; 706B;;;;N;;;;; 328C;CIRCLED IDEOGRAPH WATER;Lo;0;L; 6C34;;;;N;;;;; 328D;CIRCLED IDEOGRAPH WOOD;Lo;0;L; 6728;;;;N;;;;; 328E;CIRCLED IDEOGRAPH METAL;Lo;0;L; 91D1;;;;N;;;;; 328F;CIRCLED IDEOGRAPH EARTH;Lo;0;L; 571F;;;;N;;;;; 3290;CIRCLED IDEOGRAPH SUN;Lo;0;L; 65E5;;;;N;;;;; 3291;CIRCLED IDEOGRAPH STOCK;Lo;0;L; 682A;;;;N;;;;; 3292;CIRCLED IDEOGRAPH HAVE;Lo;0;L; 6709;;;;N;;;;; 3293;CIRCLED IDEOGRAPH SOCIETY;Lo;0;L; 793E;;;;N;;;;; 3294;CIRCLED IDEOGRAPH NAME;Lo;0;L; 540D;;;;N;;;;; 3295;CIRCLED IDEOGRAPH SPECIAL;Lo;0;L; 7279;;;;N;;;;; 3296;CIRCLED IDEOGRAPH FINANCIAL;Lo;0;L; 8CA1;;;;N;;;;; 3297;CIRCLED IDEOGRAPH CONGRATULATION;Lo;0;L; 795D;;;;N;;;;; 3298;CIRCLED IDEOGRAPH LABOR;Lo;0;L; 52B4;;;;N;;;;; 3299;CIRCLED IDEOGRAPH SECRET;Lo;0;L; 79D8;;;;N;;;;; 329A;CIRCLED IDEOGRAPH MALE;Lo;0;L; 7537;;;;N;;;;; 329B;CIRCLED IDEOGRAPH FEMALE;Lo;0;L; 5973;;;;N;;;;; 329C;CIRCLED IDEOGRAPH SUITABLE;Lo;0;L; 9069;;;;N;;;;; 329D;CIRCLED IDEOGRAPH EXCELLENT;Lo;0;L; 512A;;;;N;;;;; 329E;CIRCLED IDEOGRAPH PRINT;Lo;0;L; 5370;;;;N;;;;; 329F;CIRCLED IDEOGRAPH ATTENTION;Lo;0;L; 6CE8;;;;N;;;;; 32A0;CIRCLED IDEOGRAPH ITEM;Lo;0;L; 9805;;;;N;;;;; 32A1;CIRCLED IDEOGRAPH REST;Lo;0;L; 4F11;;;;N;;;;; 32A2;CIRCLED IDEOGRAPH COPY;Lo;0;L; 5199;;;;N;;;;; 32A3;CIRCLED IDEOGRAPH CORRECT;Lo;0;L; 6B63;;;;N;;;;; 32A4;CIRCLED IDEOGRAPH HIGH;Lo;0;L; 4E0A;;;;N;;;;; 32A5;CIRCLED IDEOGRAPH CENTRE;Lo;0;L; 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; 32A6;CIRCLED IDEOGRAPH LOW;Lo;0;L; 4E0B;;;;N;;;;; 32A7;CIRCLED IDEOGRAPH LEFT;Lo;0;L; 5DE6;;;;N;;;;; 32A8;CIRCLED IDEOGRAPH RIGHT;Lo;0;L; 53F3;;;;N;;;;; 32A9;CIRCLED IDEOGRAPH MEDICINE;Lo;0;L; 533B;;;;N;;;;; 32AA;CIRCLED IDEOGRAPH RELIGION;Lo;0;L; 5B97;;;;N;;;;; 32AB;CIRCLED IDEOGRAPH STUDY;Lo;0;L; 5B66;;;;N;;;;; 32AC;CIRCLED IDEOGRAPH SUPERVISE;Lo;0;L; 76E3;;;;N;;;;; 32AD;CIRCLED IDEOGRAPH ENTERPRISE;Lo;0;L; 4F01;;;;N;;;;; 32AE;CIRCLED IDEOGRAPH RESOURCE;Lo;0;L; 8CC7;;;;N;;;;; 32AF;CIRCLED IDEOGRAPH ALLIANCE;Lo;0;L; 5354;;;;N;;;;; 32B0;CIRCLED IDEOGRAPH NIGHT;Lo;0;L; 591C;;;;N;;;;; 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L; 0031 6708;;;;N;;;;; 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L; 0032 6708;;;;N;;;;; 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L; 0033 6708;;;;N;;;;; 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L; 0034 6708;;;;N;;;;; 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L; 0035 6708;;;;N;;;;; 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L; 0036 6708;;;;N;;;;; 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L; 0037 6708;;;;N;;;;; 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L; 0038 6708;;;;N;;;;; 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L; 0039 6708;;;;N;;;;; 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L; 0031 0030 6708;;;;N;;;;; 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L; 0031 0031 6708;;;;N;;;;; 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L; 0031 0032 6708;;;;N;;;;; 32D0;CIRCLED KATAKANA A;Lo;0;L; 30A2;;;;N;;;;; 32D1;CIRCLED KATAKANA I;Lo;0;L; 30A4;;;;N;;;;; 32D2;CIRCLED KATAKANA U;Lo;0;L; 30A6;;;;N;;;;; 32D3;CIRCLED KATAKANA E;Lo;0;L; 30A8;;;;N;;;;; 32D4;CIRCLED KATAKANA O;Lo;0;L; 30AA;;;;N;;;;; 32D5;CIRCLED KATAKANA KA;Lo;0;L; 30AB;;;;N;;;;; 32D6;CIRCLED KATAKANA KI;Lo;0;L; 30AD;;;;N;;;;; 32D7;CIRCLED KATAKANA KU;Lo;0;L; 30AF;;;;N;;;;; 32D8;CIRCLED KATAKANA KE;Lo;0;L; 30B1;;;;N;;;;; 32D9;CIRCLED KATAKANA KO;Lo;0;L; 30B3;;;;N;;;;; 32DA;CIRCLED KATAKANA SA;Lo;0;L; 30B5;;;;N;;;;; 32DB;CIRCLED KATAKANA SI;Lo;0;L; 30B7;;;;N;;;;; 32DC;CIRCLED KATAKANA SU;Lo;0;L; 30B9;;;;N;;;;; 32DD;CIRCLED KATAKANA SE;Lo;0;L; 30BB;;;;N;;;;; 32DE;CIRCLED KATAKANA SO;Lo;0;L; 30BD;;;;N;;;;; 32DF;CIRCLED KATAKANA TA;Lo;0;L; 30BF;;;;N;;;;; 32E0;CIRCLED KATAKANA TI;Lo;0;L; 30C1;;;;N;;;;; 32E1;CIRCLED KATAKANA TU;Lo;0;L; 30C4;;;;N;;;;; 32E2;CIRCLED KATAKANA TE;Lo;0;L; 30C6;;;;N;;;;; 32E3;CIRCLED KATAKANA TO;Lo;0;L; 30C8;;;;N;;;;; 32E4;CIRCLED KATAKANA NA;Lo;0;L; 30CA;;;;N;;;;; 32E5;CIRCLED KATAKANA NI;Lo;0;L; 30CB;;;;N;;;;; 32E6;CIRCLED KATAKANA NU;Lo;0;L; 30CC;;;;N;;;;; 32E7;CIRCLED KATAKANA NE;Lo;0;L; 30CD;;;;N;;;;; 32E8;CIRCLED KATAKANA NO;Lo;0;L; 30CE;;;;N;;;;; 32E9;CIRCLED KATAKANA HA;Lo;0;L; 30CF;;;;N;;;;; 32EA;CIRCLED KATAKANA HI;Lo;0;L; 30D2;;;;N;;;;; 32EB;CIRCLED KATAKANA HU;Lo;0;L; 30D5;;;;N;;;;; 32EC;CIRCLED KATAKANA HE;Lo;0;L; 30D8;;;;N;;;;; 32ED;CIRCLED KATAKANA HO;Lo;0;L; 30DB;;;;N;;;;; 32EE;CIRCLED KATAKANA MA;Lo;0;L; 30DE;;;;N;;;;; 32EF;CIRCLED KATAKANA MI;Lo;0;L; 30DF;;;;N;;;;; 32F0;CIRCLED KATAKANA MU;Lo;0;L; 30E0;;;;N;;;;; 32F1;CIRCLED KATAKANA ME;Lo;0;L; 30E1;;;;N;;;;; 32F2;CIRCLED KATAKANA MO;Lo;0;L; 30E2;;;;N;;;;; 32F3;CIRCLED KATAKANA YA;Lo;0;L; 30E4;;;;N;;;;; 32F4;CIRCLED KATAKANA YU;Lo;0;L; 30E6;;;;N;;;;; 32F5;CIRCLED KATAKANA YO;Lo;0;L; 30E8;;;;N;;;;; 32F6;CIRCLED KATAKANA RA;Lo;0;L; 30E9;;;;N;;;;; 32F7;CIRCLED KATAKANA RI;Lo;0;L; 30EA;;;;N;;;;; 32F8;CIRCLED KATAKANA RU;Lo;0;L; 30EB;;;;N;;;;; 32F9;CIRCLED KATAKANA RE;Lo;0;L; 30EC;;;;N;;;;; 32FA;CIRCLED KATAKANA RO;Lo;0;L; 30ED;;;;N;;;;; 32FB;CIRCLED KATAKANA WA;Lo;0;L; 30EF;;;;N;;;;; 32FC;CIRCLED KATAKANA WI;Lo;0;L; 30F0;;;;N;;;;; 32FD;CIRCLED KATAKANA WE;Lo;0;L; 30F1;;;;N;;;;; 32FE;CIRCLED KATAKANA WO;Lo;0;L; 30F2;;;;N;;;;; 3300;SQUARE APAATO;Lo;0;L; 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; 3301;SQUARE ARUHUA;Lo;0;L; 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; 3302;SQUARE ANPEA;Lo;0;L; 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; 3303;SQUARE AARU;Lo;0;L; 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; 3304;SQUARE ININGU;Lo;0;L; 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; 3305;SQUARE INTI;Lo;0;L; 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; 3306;SQUARE UON;Lo;0;L; 30A6 30A9 30F3;;;;N;SQUARED UON;;;; 3307;SQUARE ESUKUUDO;Lo;0;L; 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; 3308;SQUARE EEKAA;Lo;0;L; 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; 3309;SQUARE ONSU;Lo;0;L; 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; 330A;SQUARE OOMU;Lo;0;L; 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; 330B;SQUARE KAIRI;Lo;0;L; 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; 330C;SQUARE KARATTO;Lo;0;L; 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; 330D;SQUARE KARORII;Lo;0;L; 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; 330E;SQUARE GARON;Lo;0;L; 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; 330F;SQUARE GANMA;Lo;0;L; 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; 3310;SQUARE GIGA;Lo;0;L; 30AE 30AC;;;;N;SQUARED GIGA;;;; 3311;SQUARE GINII;Lo;0;L; 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; 3312;SQUARE KYURII;Lo;0;L; 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; 3313;SQUARE GIRUDAA;Lo;0;L; 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; 3314;SQUARE KIRO;Lo;0;L; 30AD 30ED;;;;N;SQUARED KIRO;;;; 3315;SQUARE KIROGURAMU;Lo;0;L; 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; 3316;SQUARE KIROMEETORU;Lo;0;L; 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; 3317;SQUARE KIROWATTO;Lo;0;L; 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; 3318;SQUARE GURAMU;Lo;0;L; 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; 3319;SQUARE GURAMUTON;Lo;0;L; 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; 331A;SQUARE KURUZEIRO;Lo;0;L; 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; 331B;SQUARE KUROONE;Lo;0;L; 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; 331C;SQUARE KEESU;Lo;0;L; 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; 331D;SQUARE KORUNA;Lo;0;L; 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; 331E;SQUARE KOOPO;Lo;0;L; 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; 331F;SQUARE SAIKURU;Lo;0;L; 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; 3320;SQUARE SANTIIMU;Lo;0;L; 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; 3321;SQUARE SIRINGU;Lo;0;L; 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; 3322;SQUARE SENTI;Lo;0;L; 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; 3323;SQUARE SENTO;Lo;0;L; 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; 3324;SQUARE DAASU;Lo;0;L; 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; 3325;SQUARE DESI;Lo;0;L; 30C7 30B7;;;;N;SQUARED DESI;;;; 3326;SQUARE DORU;Lo;0;L; 30C9 30EB;;;;N;SQUARED DORU;;;; 3327;SQUARE TON;Lo;0;L; 30C8 30F3;;;;N;SQUARED TON;;;; 3328;SQUARE NANO;Lo;0;L; 30CA 30CE;;;;N;SQUARED NANO;;;; 3329;SQUARE NOTTO;Lo;0;L; 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; 332A;SQUARE HAITU;Lo;0;L; 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; 332B;SQUARE PAASENTO;Lo;0;L; 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; 332C;SQUARE PAATU;Lo;0;L; 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; 332D;SQUARE BAARERU;Lo;0;L; 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; 332E;SQUARE PIASUTORU;Lo;0;L; 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; 332F;SQUARE PIKURU;Lo;0;L; 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; 3330;SQUARE PIKO;Lo;0;L; 30D4 30B3;;;;N;SQUARED PIKO;;;; 3331;SQUARE BIRU;Lo;0;L; 30D3 30EB;;;;N;SQUARED BIRU;;;; 3332;SQUARE HUARADDO;Lo;0;L; 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; 3333;SQUARE HUIITO;Lo;0;L; 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; 3334;SQUARE BUSSYERU;Lo;0;L; 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; 3335;SQUARE HURAN;Lo;0;L; 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; 3336;SQUARE HEKUTAARU;Lo;0;L; 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; 3337;SQUARE PESO;Lo;0;L; 30DA 30BD;;;;N;SQUARED PESO;;;; 3338;SQUARE PENIHI;Lo;0;L; 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; 3339;SQUARE HERUTU;Lo;0;L; 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; 333A;SQUARE PENSU;Lo;0;L; 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; 333B;SQUARE PEEZI;Lo;0;L; 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; 333C;SQUARE BEETA;Lo;0;L; 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; 333D;SQUARE POINTO;Lo;0;L; 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; 333E;SQUARE BORUTO;Lo;0;L; 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; 333F;SQUARE HON;Lo;0;L; 30DB 30F3;;;;N;SQUARED HON;;;; 3340;SQUARE PONDO;Lo;0;L; 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; 3341;SQUARE HOORU;Lo;0;L; 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; 3342;SQUARE HOON;Lo;0;L; 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; 3343;SQUARE MAIKURO;Lo;0;L; 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; 3344;SQUARE MAIRU;Lo;0;L; 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; 3345;SQUARE MAHHA;Lo;0;L; 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; 3346;SQUARE MARUKU;Lo;0;L; 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; 3347;SQUARE MANSYON;Lo;0;L; 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; 3348;SQUARE MIKURON;Lo;0;L; 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; 3349;SQUARE MIRI;Lo;0;L; 30DF 30EA;;;;N;SQUARED MIRI;;;; 334A;SQUARE MIRIBAARU;Lo;0;L; 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; 334B;SQUARE MEGA;Lo;0;L; 30E1 30AC;;;;N;SQUARED MEGA;;;; 334C;SQUARE MEGATON;Lo;0;L; 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; 334D;SQUARE MEETORU;Lo;0;L; 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; 334E;SQUARE YAADO;Lo;0;L; 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; 334F;SQUARE YAARU;Lo;0;L; 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; 3350;SQUARE YUAN;Lo;0;L; 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; 3351;SQUARE RITTORU;Lo;0;L; 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; 3352;SQUARE RIRA;Lo;0;L; 30EA 30E9;;;;N;SQUARED RIRA;;;; 3353;SQUARE RUPII;Lo;0;L; 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; 3354;SQUARE RUUBURU;Lo;0;L; 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; 3355;SQUARE REMU;Lo;0;L; 30EC 30E0;;;;N;SQUARED REMU;;;; 3356;SQUARE RENTOGEN;Lo;0;L; 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; 3357;SQUARE WATTO;Lo;0;L; 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L; 0030 70B9;;;;N;;;;; 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L; 0031 70B9;;;;N;;;;; 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L; 0032 70B9;;;;N;;;;; 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L; 0033 70B9;;;;N;;;;; 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L; 0034 70B9;;;;N;;;;; 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L; 0035 70B9;;;;N;;;;; 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L; 0036 70B9;;;;N;;;;; 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L; 0037 70B9;;;;N;;;;; 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L; 0038 70B9;;;;N;;;;; 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L; 0039 70B9;;;;N;;;;; 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L; 0031 0030 70B9;;;;N;;;;; 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L; 0031 0031 70B9;;;;N;;;;; 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L; 0031 0032 70B9;;;;N;;;;; 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L; 0031 0033 70B9;;;;N;;;;; 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L; 0031 0034 70B9;;;;N;;;;; 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L; 0031 0035 70B9;;;;N;;;;; 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L; 0031 0036 70B9;;;;N;;;;; 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L; 0031 0037 70B9;;;;N;;;;; 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L; 0031 0038 70B9;;;;N;;;;; 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L; 0031 0039 70B9;;;;N;;;;; 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L; 0032 0030 70B9;;;;N;;;;; 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L; 0032 0031 70B9;;;;N;;;;; 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L; 0032 0032 70B9;;;;N;;;;; 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L; 0032 0033 70B9;;;;N;;;;; 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L; 0032 0034 70B9;;;;N;;;;; 3371;SQUARE HPA;Lo;0;L; 0068 0050 0061;;;;N;;;;; 3372;SQUARE DA;Ll;0;L; 0064 0061;;;;N;;;;; 3373;SQUARE AU;Lu;0;L; 0041 0055;;;;N;;;;; 3374;SQUARE BAR;Ll;0;L; 0062 0061 0072;;;;N;;;;; 3375;SQUARE OV;Lo;0;L; 006F 0056;;;;N;;;;; 3376;SQUARE PC;Ll;0;L; 0070 0063;;;;N;;;;; 337B;SQUARE ERA NAME HEISEI;Lo;0;L; 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; 337C;SQUARE ERA NAME SYOUWA;Lo;0;L; 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; 337D;SQUARE ERA NAME TAISYOU;Lo;0;L; 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; 337E;SQUARE ERA NAME MEIZI;Lo;0;L; 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; 337F;SQUARE CORPORATION;Lo;0;L; 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; 3380;SQUARE PA AMPS;Lo;0;L; 0070 0041;;;;N;SQUARED PA AMPS;;;; 3381;SQUARE NA;Lo;0;L; 006E 0041;;;;N;SQUARED NA;;;; 3382;SQUARE MU A;Lo;0;L; 03BC 0041;;;;N;SQUARED MU A;;;; 3383;SQUARE MA;Lo;0;L; 006D 0041;;;;N;SQUARED MA;;;; 3384;SQUARE KA;Lo;0;L; 006B 0041;;;;N;SQUARED KA;;;; 3385;SQUARE KB;Lu;0;L; 004B 0042;;;;N;SQUARED KB;;;; 3386;SQUARE MB;Lu;0;L; 004D 0042;;;;N;SQUARED MB;;;; 3387;SQUARE GB;Lu;0;L; 0047 0042;;;;N;SQUARED GB;;;; 3388;SQUARE CAL;Ll;0;L; 0063 0061 006C;;;;N;SQUARED CAL;;;; 3389;SQUARE KCAL;Ll;0;L; 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; 338A;SQUARE PF;Lo;0;L; 0070 0046;;;;N;SQUARED PF;;;; 338B;SQUARE NF;Lo;0;L; 006E 0046;;;;N;SQUARED NF;;;; 338C;SQUARE MU F;Lo;0;L; 03BC 0046;;;;N;SQUARED MU F;;;; 338D;SQUARE MU G;Ll;0;L; 03BC 0067;;;;N;SQUARED MU G;;;; 338E;SQUARE MG;Ll;0;L; 006D 0067;;;;N;SQUARED MG;;;; 338F;SQUARE KG;Ll;0;L; 006B 0067;;;;N;SQUARED KG;;;; 3390;SQUARE HZ;Lt;0;L; 0048 007A;;;;N;SQUARED HZ;;;; 3391;SQUARE KHZ;Lo;0;L; 006B 0048 007A;;;;N;SQUARED KHZ;;;; 3392;SQUARE MHZ;Lo;0;L; 004D 0048 007A;;;;N;SQUARED MHZ;;;; 3393;SQUARE GHZ;Lo;0;L; 0047 0048 007A;;;;N;SQUARED GHZ;;;; 3394;SQUARE THZ;Lo;0;L; 0054 0048 007A;;;;N;SQUARED THZ;;;; 3395;SQUARE MU L;So;0;L; 03BC 2113;;;;N;SQUARED MU L;;;; 3396;SQUARE ML;So;0;L; 006D 2113;;;;N;SQUARED ML;;;; 3397;SQUARE DL;So;0;L; 0064 2113;;;;N;SQUARED DL;;;; 3398;SQUARE KL;So;0;L; 006B 2113;;;;N;SQUARED KL;;;; 3399;SQUARE FM;Ll;0;L; 0066 006D;;;;N;SQUARED FM;;;; 339A;SQUARE NM;Ll;0;L; 006E 006D;;;;N;SQUARED NM;;;; 339B;SQUARE MU M;Ll;0;L; 03BC 006D;;;;N;SQUARED MU M;;;; 339C;SQUARE MM;Ll;0;L; 006D 006D;;;;N;SQUARED MM;;;; 339D;SQUARE CM;Ll;0;L; 0063 006D;;;;N;SQUARED CM;;;; 339E;SQUARE KM;Ll;0;L; 006B 006D;;;;N;SQUARED KM;;;; 339F;SQUARE MM SQUARED;So;0;L; 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; 33A0;SQUARE CM SQUARED;So;0;L; 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; 33A1;SQUARE M SQUARED;So;0;L; 006D 00B2;;;;N;SQUARED M SQUARED;;;; 33A2;SQUARE KM SQUARED;So;0;L; 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; 33A3;SQUARE MM CUBED;So;0;L; 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; 33A4;SQUARE CM CUBED;So;0;L; 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; 33A5;SQUARE M CUBED;So;0;L; 006D 00B3;;;;N;SQUARED M CUBED;;;; 33A6;SQUARE KM CUBED;So;0;L; 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; 33A7;SQUARE M OVER S;So;0;L; 006D 2215 0073;;;;N;SQUARED M OVER S;;;; 33A8;SQUARE M OVER S SQUARED;So;0;L; 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; 33A9;SQUARE PA;Lt;0;L; 0050 0061;;;;N;SQUARED PA;;;; 33AA;SQUARE KPA;Lo;0;L; 006B 0050 0061;;;;N;SQUARED KPA;;;; 33AB;SQUARE MPA;Lo;0;L; 004D 0050 0061;;;;N;SQUARED MPA;;;; 33AC;SQUARE GPA;Lo;0;L; 0047 0050 0061;;;;N;SQUARED GPA;;;; 33AD;SQUARE RAD;Ll;0;L; 0072 0061 0064;;;;N;SQUARED RAD;;;; 33AE;SQUARE RAD OVER S;So;0;L; 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; 33AF;SQUARE RAD OVER S SQUARED;So;0;L; 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; 33B0;SQUARE PS;Ll;0;L; 0070 0073;;;;N;SQUARED PS;;;; 33B1;SQUARE NS;Ll;0;L; 006E 0073;;;;N;SQUARED NS;;;; 33B2;SQUARE MU S;Ll;0;L; 03BC 0073;;;;N;SQUARED MU S;;;; 33B3;SQUARE MS;Ll;0;L; 006D 0073;;;;N;SQUARED MS;;;; 33B4;SQUARE PV;Lo;0;L; 0070 0056;;;;N;SQUARED PV;;;; 33B5;SQUARE NV;Lo;0;L; 006E 0056;;;;N;SQUARED NV;;;; 33B6;SQUARE MU V;Lo;0;L; 03BC 0056;;;;N;SQUARED MU V;;;; 33B7;SQUARE MV;Lo;0;L; 006D 0056;;;;N;SQUARED MV;;;; 33B8;SQUARE KV;Lo;0;L; 006B 0056;;;;N;SQUARED KV;;;; 33B9;SQUARE MV MEGA;Lu;0;L; 004D 0056;;;;N;SQUARED MV MEGA;;;; 33BA;SQUARE PW;Lo;0;L; 0070 0057;;;;N;SQUARED PW;;;; 33BB;SQUARE NW;Lo;0;L; 006E 0057;;;;N;SQUARED NW;;;; 33BC;SQUARE MU W;Lo;0;L; 03BC 0057;;;;N;SQUARED MU W;;;; 33BD;SQUARE MW;Lo;0;L; 006D 0057;;;;N;SQUARED MW;;;; 33BE;SQUARE KW;Lo;0;L; 006B 0057;;;;N;SQUARED KW;;;; 33BF;SQUARE MW MEGA;Lu;0;L; 004D 0057;;;;N;SQUARED MW MEGA;;;; 33C0;SQUARE K OHM;Lo;0;L; 006B 03A9;;;;N;SQUARED K OHM;;;; 33C1;SQUARE M OHM;Lu;0;L; 004D 03A9;;;;N;SQUARED M OHM;;;; 33C2;SQUARE AM;So;0;L; 0061 002E 006D 002E;;;;N;SQUARED AM;;;; 33C3;SQUARE BQ;Lt;0;L; 0042 0071;;;;N;SQUARED BQ;;;; 33C4;SQUARE CC;Ll;0;L; 0063 0063;;;;N;SQUARED CC;;;; 33C5;SQUARE CD;Ll;0;L; 0063 0064;;;;N;SQUARED CD;;;; 33C6;SQUARE C OVER KG;So;0;L; 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; 33C7;SQUARE CO;Lt;0;L; 0043 006F 002E;;;;N;SQUARED CO;;;; 33C8;SQUARE DB;Lo;0;L; 0064 0042;;;;N;SQUARED DB;;;; 33C9;SQUARE GY;Lt;0;L; 0047 0079;;;;N;SQUARED GY;;;; 33CA;SQUARE HA;Ll;0;L; 0068 0061;;;;N;SQUARED HA;;;; 33CB;SQUARE HP;Lu;0;L; 0048 0050;;;;N;SQUARED HP;;;; 33CC;SQUARE IN;Ll;0;L; 0069 006E;;;;N;SQUARED IN;;;; 33CD;SQUARE KK;Lu;0;L; 004B 004B;;;;N;SQUARED KK;;;; 33CE;SQUARE KM CAPITAL;Lu;0;L; 004B 004D;;;;N;SQUARED KM CAPITAL;;;; 33CF;SQUARE KT;Ll;0;L; 006B 0074;;;;N;SQUARED KT;;;; 33D0;SQUARE LM;Ll;0;L; 006C 006D;;;;N;SQUARED LM;;;; 33D1;SQUARE LN;Ll;0;L; 006C 006E;;;;N;SQUARED LN;;;; 33D2;SQUARE LOG;Ll;0;L; 006C 006F 0067;;;;N;SQUARED LOG;;;; 33D3;SQUARE LX;Ll;0;L; 006C 0078;;;;N;SQUARED LX;;;; 33D4;SQUARE MB SMALL;Ll;0;L; 006D 0062;;;;N;SQUARED MB SMALL;;;; 33D5;SQUARE MIL;Ll;0;L; 006D 0069 006C;;;;N;SQUARED MIL;;;; 33D6;SQUARE MOL;Ll;0;L; 006D 006F 006C;;;;N;SQUARED MOL;;;; 33D7;SQUARE PH;Lu;0;L; 0050 0048;;;;N;SQUARED PH;;;; 33D8;SQUARE PM;So;0;L; 0070 002E 006D 002E;;;;N;SQUARED PM;;;; 33D9;SQUARE PPM;Lu;0;L; 0050 0050 004D;;;;N;SQUARED PPM;;;; 33DA;SQUARE PR;Lu;0;L; 0050 0052;;;;N;SQUARED PR;;;; 33DB;SQUARE SR;Ll;0;L; 0073 0072;;;;N;SQUARED SR;;;; 33DC;SQUARE SV;Lt;0;L; 0053 0076;;;;N;SQUARED SV;;;; 33DD;SQUARE WB;Lt;0;L; 0057 0062;;;;N;SQUARED WB;;;; 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L; 0031 65E5;;;;N;;;;; 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L; 0032 65E5;;;;N;;;;; 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L; 0033 65E5;;;;N;;;;; 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L; 0034 65E5;;;;N;;;;; 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L; 0035 65E5;;;;N;;;;; 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L; 0036 65E5;;;;N;;;;; 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L; 0037 65E5;;;;N;;;;; 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L; 0038 65E5;;;;N;;;;; 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L; 0039 65E5;;;;N;;;;; 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L; 0031 0030 65E5;;;;N;;;;; 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L; 0031 0031 65E5;;;;N;;;;; 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L; 0031 0032 65E5;;;;N;;;;; 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L; 0031 0033 65E5;;;;N;;;;; 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L; 0031 0034 65E5;;;;N;;;;; 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L; 0031 0035 65E5;;;;N;;;;; 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L; 0031 0036 65E5;;;;N;;;;; 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L; 0031 0037 65E5;;;;N;;;;; 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L; 0031 0038 65E5;;;;N;;;;; 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L; 0031 0039 65E5;;;;N;;;;; 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L; 0032 0030 65E5;;;;N;;;;; 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L; 0032 0031 65E5;;;;N;;;;; 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L; 0032 0032 65E5;;;;N;;;;; 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L; 0032 0033 65E5;;;;N;;;;; 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L; 0032 0034 65E5;;;;N;;;;; 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L; 0032 0035 65E5;;;;N;;;;; 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L; 0032 0036 65E5;;;;N;;;;; 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L; 0032 0037 65E5;;;;N;;;;; 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L; 0032 0038 65E5;;;;N;;;;; 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L; 0032 0039 65E5;;;;N;;;;; 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L; 0033 0030 65E5;;;;N;;;;; 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L; 0033 0031 65E5;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; 9FA5;;Lo;0;L;;;;;N;;;;; AC00;;Lo;0;L;;;;;N;;;;; D7A3;;Lo;0;L;;;;;N;;;;; D800;;Cn;0;L;;;;;N;;;;; DB7F;;Cn;0;L;;;;;N;;;;; DB80;;Co;0;L;;;;;N;;;;; DBFF;;Co;0;L;;;;;N;;;;; DC00;;Cn;0;L;;;;;N;;;;; DFFF;;Cn;0;L;;;;;N;;;;; E000;;Cn;0;L;;;;;N;;;;; F8FF;;Cn;0;L;;;;;N;;;;; F900;;Lo;0;L;;;;;N;;;;; FA2D;;Lo;0;L;;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L; 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L; 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L; 0066 006C;;;;N;;;;; FB03;LATIN SMALL LIGATURE FFI;Ll;0;L; 0066 0066 0069;;;;N;;;;; FB04;LATIN SMALL LIGATURE FFL;Ll;0;L; 0066 0066 006C;;;;N;;;;; FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L; 017F 0074;;;;N;;;;; FB06;LATIN SMALL LIGATURE ST;Ll;0;L; 0073 0074;;;;N;;;;; FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L; 0574 0576;;;;N;;;;; FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L; 0574 0565;;;;N;;;;; FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L; 0574 056B;;;;N;;;;; FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L; 057E 0576;;;;N;;;;; FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L; 0574 056D;;;;N;;;;; FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;R;;;;;N;HEBREW POINT VARIKA;;;; FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R; 05F2 05B7;;;;N;;;;; FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R; 05E2;;;;N;;;;; FB21;HEBREW LETTER WIDE ALEF;Lo;0;R; 05D0;;;;N;;;;; FB22;HEBREW LETTER WIDE DALET;Lo;0;R; 05D3;;;;N;;;;; FB23;HEBREW LETTER WIDE HE;Lo;0;R; 05D4;;;;N;;;;; FB24;HEBREW LETTER WIDE KAF;Lo;0;R; 05DB;;;;N;;;;; FB25;HEBREW LETTER WIDE LAMED;Lo;0;R; 05DC;;;;N;;;;; FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R; 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R; 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R; 05EA;;;;N;;;;; FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;R; 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;05E9 05BC 05C1;;;;N;;;;; FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;05E9 05BC 05C2;;;;N;;;;; FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R; 05D0 05DC;;;;N;;;;; FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;R; 0671;;;;N;;;;; FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;R; 0671;;;;N;;;;; FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;R; 067B;;;;N;;;;; FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;R; 067B;;;;N;;;;; FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;R; 067B;;;;N;;;;; FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;R; 067B;;;;N;;;;; FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;R; 067E;;;;N;;;;; FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;R; 067E;;;;N;;;;; FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;R; 067E;;;;N;;;;; FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;R; 067E;;;;N;;;;; FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;R; 0680;;;;N;;;;; FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;R; 0680;;;;N;;;;; FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;R; 0680;;;;N;;;;; FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;R; 0680;;;;N;;;;; FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;R; 067A;;;;N;;;;; FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;R; 067A;;;;N;;;;; FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;R; 067A;;;;N;;;;; FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;R; 067A;;;;N;;;;; FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;R; 067F;;;;N;;;;; FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;R; 067F;;;;N;;;;; FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;R; 067F;;;;N;;;;; FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;R; 067F;;;;N;;;;; FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;R; 0679;;;;N;;;;; FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;R; 0679;;;;N;;;;; FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;R; 0679;;;;N;;;;; FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;R; 0679;;;;N;;;;; FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;R; 06A4;;;;N;;;;; FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;R; 06A4;;;;N;;;;; FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;R; 06A4;;;;N;;;;; FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;R; 06A4;;;;N;;;;; FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;R; 06A6;;;;N;;;;; FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;R; 06A6;;;;N;;;;; FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;R; 06A6;;;;N;;;;; FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;R; 06A6;;;;N;;;;; FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;R; 0684;;;;N;;;;; FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;R; 0684;;;;N;;;;; FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;R; 0684;;;;N;;;;; FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;R; 0684;;;;N;;;;; FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;R; 0683;;;;N;;;;; FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;R; 0683;;;;N;;;;; FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;R; 0683;;;;N;;;;; FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;R; 0683;;;;N;;;;; FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;R; 0686;;;;N;;;;; FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;R; 0686;;;;N;;;;; FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;R; 0686;;;;N;;;;; FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;R; 0686;;;;N;;;;; FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;R; 0687;;;;N;;;;; FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;R; 0687;;;;N;;;;; FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;R; 0687;;;;N;;;;; FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;R; 0687;;;;N;;;;; FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;R; 068D;;;;N;;;;; FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;R; 068D;;;;N;;;;; FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;R; 068C;;;;N;;;;; FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;R; 068C;;;;N;;;;; FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;R; 068E;;;;N;;;;; FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;R; 068E;;;;N;;;;; FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;R; 0688;;;;N;;;;; FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;R; 0688;;;;N;;;;; FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;R; 0698;;;;N;;;;; FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;R; 0698;;;;N;;;;; FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;R; 0691;;;;N;;;;; FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;R; 0691;;;;N;;;;; FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;R; 06A9;;;;N;;;;; FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;R; 06A9;;;;N;;;;; FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;R; 06A9;;;;N;;;;; FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;R; 06A9;;;;N;;;;; FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;R; 06AF;;;;N;;;;; FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;R; 06AF;;;;N;;;;; FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;R; 06AF;;;;N;;;;; FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;R; 06AF;;;;N;;;;; FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;R; 06B3;;;;N;;;;; FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;R; 06B3;;;;N;;;;; FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;R; 06B3;;;;N;;;;; FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;R; 06B3;;;;N;;;;; FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;R; 06B1;;;;N;;;;; FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;R; 06B1;;;;N;;;;; FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;R; 06B1;;;;N;;;;; FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;R; 06B1;;;;N;;;;; FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;R; 06BA;;;;N;;;;; FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;R; 06BA;;;;N;;;;; FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;R; 06BB;;;;N;;;;; FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;R; 06BB;;;;N;;;;; FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;R; 06BB;;;;N;;;;; FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;R; 06BB;;;;N;;;;; FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;R; 06C0;;;;N;;;;; FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;R; 06C0;;;;N;;;;; FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;R; 06C1;;;;N;;;;; FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;R; 06C1;;;;N;;;;; FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;R; 06C1;;;;N;;;;; FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;R; 06C1;;;;N;;;;; FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;R; 06BE;;;;N;;;;; FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;R; 06BE;;;;N;;;;; FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;R; 06BE;;;;N;;;;; FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;R; 06BE;;;;N;;;;; FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;R; 06D2;;;;N;;;;; FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;R; 06D2;;;;N;;;;; FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R; 06D3;;;;N;;;;; FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;R; 06D3;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;R; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;R; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;R; 06AD;;;;N;;;;; FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;R; 06AD;;;;N;;;;; FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;R; 06C7;;;;N;;;;; FBD8;ARABIC LETTER U FINAL FORM;Lo;0;R; 06C7;;;;N;;;;; FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;R; 06C6;;;;N;;;;; FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;R; 06C6;;;;N;;;;; FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;R; 06C8;;;;N;;;;; FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;R; 06C8;;;;N;;;;; FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R; 0677;;;;N;;;;; FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;R; 06CB;;;;N;;;;; FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;R; 06CB;;;;N;;;;; FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;R; 06C5;;;;N;;;;; FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;R; 06C5;;;;N;;;;; FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;R; 06C9;;;;N;;;;; FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;R; 06C9;;;;N;;;;; FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;R; 06D0;;;;N;;;;; FBE5;ARABIC LETTER E FINAL FORM;Lo;0;R; 06D0;;;;N;;;;; FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;R; 06D0;;;;N;;;;; FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;R; 06D0;;;;N;;;;; FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;R;;;;;N;;;;; FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;R;;;;;N;;;;; FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;R; 0626 0627;;;;N;;;;; FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;R; 0626 0627;;;;N;;;;; FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;R; 0626 06D5;;;;N;;;;; FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;R; 0626 06D5;;;;N;;;;; FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;R; 0626 0648;;;;N;;;;; FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;R; 0626 0648;;;;N;;;;; FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;R; 0626 06C7;;;;N;;;;; FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;R; 0626 06C7;;;;N;;;;; FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;R; 0626 06C6;;;;N;;;;; FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;R; 0626 06C6;;;;N;;;;; FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;R; 0626 06C8;;;;N;;;;; FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;R; 0626 06C8;;;;N;;;;; FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;R; 0626 06D0;;;;N;;;;; FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;R; 0626 06D0;;;;N;;;;; FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;R; 0626 06D0;;;;N;;;;; FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;;;;;N;;;;; FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;;;;;N;;;;; FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;R;;;;;N;;;;; FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;R; 06CC;;;;N;;;;; FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;R; 06CC;;;;N;;;;; FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;R; 06CC;;;;N;;;;; FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;R; 06CC;;;;N;;;;; FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;R; 0626 062C;;;;N;;;;; FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;R; 0626 062D;;;;N;;;;; FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;R; 0626 0645;;;;N;;;;; FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0626 0649;;;;N;;;;; FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;R; 0626 064A;;;;N;;;;; FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;R; 0628 062C;;;;N;;;;; FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;R; 0628 062D;;;;N;;;;; FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;R; 0628 062E;;;;N;;;;; FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;R; 0628 0645;;;;N;;;;; FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0628 0649;;;;N;;;;; FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;R; 0628 064A;;;;N;;;;; FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;R; 062A 062C;;;;N;;;;; FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;R; 062A 062D;;;;N;;;;; FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;R; 062A 062E;;;;N;;;;; FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;R; 062A 0645;;;;N;;;;; FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 062A 0649;;;;N;;;;; FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;R; 062A 064A;;;;N;;;;; FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;R; 062B 062C;;;;N;;;;; FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;R; 062B 0645;;;;N;;;;; FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 062B 0649;;;;N;;;;; FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;R; 062B 064A;;;;N;;;;; FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;R; 062C 062D;;;;N;;;;; FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;R; 062C 0645;;;;N;;;;; FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;R; 062D 062C;;;;N;;;;; FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;R; 062D 0645;;;;N;;;;; FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;R; 062E 062C;;;;N;;;;; FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;R; 062E 062D;;;;N;;;;; FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;R; 062E 0645;;;;N;;;;; FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;R; 0633 062C;;;;N;;;;; FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;R; 0633 062D;;;;N;;;;; FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;R; 0633 062E;;;;N;;;;; FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;R; 0633 0645;;;;N;;;;; FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;R; 0635 062D;;;;N;;;;; FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;R; 0635 0645;;;;N;;;;; FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;R; 0636 062C;;;;N;;;;; FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;R; 0636 062D;;;;N;;;;; FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;R; 0636 062E;;;;N;;;;; FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;R; 0636 0645;;;;N;;;;; FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;R; 0637 062D;;;;N;;;;; FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;R; 0637 0645;;;;N;;;;; FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;R; 0638 0645;;;;N;;;;; FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;R; 0639 062C;;;;N;;;;; FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;R; 0639 0645;;;;N;;;;; FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;R; 063A 062C;;;;N;;;;; FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;R; 063A 0645;;;;N;;;;; FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;R; 0641 062C;;;;N;;;;; FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;R; 0641 062D;;;;N;;;;; FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;R; 0641 062E;;;;N;;;;; FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;R; 0641 0645;;;;N;;;;; FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0641 0649;;;;N;;;;; FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;R; 0641 064A;;;;N;;;;; FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;R; 0642 062D;;;;N;;;;; FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;R; 0642 0645;;;;N;;;;; FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0642 0649;;;;N;;;;; FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;R; 0642 064A;;;;N;;;;; FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;R; 0643 0627;;;;N;;;;; FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;R; 0643 062C;;;;N;;;;; FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;R; 0643 062D;;;;N;;;;; FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;R; 0643 062E;;;;N;;;;; FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;R; 0643 0644;;;;N;;;;; FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;R; 0643 0645;;;;N;;;;; FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0643 0649;;;;N;;;;; FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;R; 0643 064A;;;;N;;;;; FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;R; 0644 062C;;;;N;;;;; FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;R; 0644 062D;;;;N;;;;; FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;R; 0644 062E;;;;N;;;;; FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;R; 0644 0645;;;;N;;;;; FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0644 0649;;;;N;;;;; FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;R; 0644 064A;;;;N;;;;; FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;R; 0645 062C;;;;N;;;;; FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;R; 0645 062D;;;;N;;;;; FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;R; 0645 062E;;;;N;;;;; FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;R; 0645 0645;;;;N;;;;; FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0645 0649;;;;N;;;;; FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;R; 0645 064A;;;;N;;;;; FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;R; 0646 062C;;;;N;;;;; FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;R; 0646 062D;;;;N;;;;; FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;R; 0646 062E;;;;N;;;;; FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;R; 0646 0645;;;;N;;;;; FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0646 0649;;;;N;;;;; FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;R; 0646 064A;;;;N;;;;; FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;R; 0647 062C;;;;N;;;;; FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;R; 0647 0645;;;;N;;;;; FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0647 0649;;;;N;;;;; FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;R; 0647 064A;;;;N;;;;; FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;R; 064A 062C;;;;N;;;;; FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;R; 064A 062D;;;;N;;;;; FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;R; 064A 062E;;;;N;;;;; FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;R; 064A 0645;;;;N;;;;; FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 064A 0649;;;;N;;;;; FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;R; 064A 064A;;;;N;;;;; FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R; 0630 0670;;;;N;;;;; FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R; 0631 0670;;;;N;;;;; FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R; 0649 0670;;;;N;;;;; FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;R; 0020 0651 064C;;;;N;;;;; FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;R; 0020 0651 064D;;;;N;;;;; FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;R; 0020 0651 064E;;;;N;;;;; FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;R; 0020 0651 064F;;;;N;;;;; FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;R; 0020 0651 0650;;;;N;;;;; FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R; 0020 0651 0670;;;;N;;;;; FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;R; 0626 0631;;;;N;;;;; FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;R; 0626 0632;;;;N;;;;; FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;R; 0626 0645;;;;N;;;;; FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;R; 0626 0646;;;;N;;;;; FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0626 0649;;;;N;;;;; FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;R; 0626 064A;;;;N;;;;; FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;R; 0628 0631;;;;N;;;;; FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;R; 0628 0632;;;;N;;;;; FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;R; 0628 0645;;;;N;;;;; FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;R; 0628 0646;;;;N;;;;; FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0628 0649;;;;N;;;;; FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;R; 0628 064A;;;;N;;;;; FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;R; 062A 0631;;;;N;;;;; FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;R; 062A 0632;;;;N;;;;; FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;R; 062A 0645;;;;N;;;;; FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;R; 062A 0646;;;;N;;;;; FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062A 0649;;;;N;;;;; FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;R; 062A 064A;;;;N;;;;; FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;R; 062B 0631;;;;N;;;;; FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;R; 062B 0632;;;;N;;;;; FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;R; 062B 0645;;;;N;;;;; FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;R; 062B 0646;;;;N;;;;; FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062B 0649;;;;N;;;;; FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;R; 062B 064A;;;;N;;;;; FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0641 0649;;;;N;;;;; FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;R; 0641 064A;;;;N;;;;; FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0642 0649;;;;N;;;;; FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;R; 0642 064A;;;;N;;;;; FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;R; 0643 0627;;;;N;;;;; FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;R; 0643 0644;;;;N;;;;; FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;R; 0643 0645;;;;N;;;;; FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0643 0649;;;;N;;;;; FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;R; 0643 064A;;;;N;;;;; FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;R; 0644 0645;;;;N;;;;; FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0644 0649;;;;N;;;;; FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;R; 0644 064A;;;;N;;;;; FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;R; 0645 0627;;;;N;;;;; FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;R; 0645 0645;;;;N;;;;; FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;R; 0646 0631;;;;N;;;;; FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;R; 0646 0632;;;;N;;;;; FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;R; 0646 0645;;;;N;;;;; FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;R; 0646 0646;;;;N;;;;; FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0646 0649;;;;N;;;;; FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;R; 0646 064A;;;;N;;;;; FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;R; 0649 0670;;;;N;;;;; FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;R; 064A 0631;;;;N;;;;; FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;R; 064A 0632;;;;N;;;;; FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;R; 064A 0645;;;;N;;;;; FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;R; 064A 0646;;;;N;;;;; FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 064A 0649;;;;N;;;;; FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;R; 064A 064A;;;;N;;;;; FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;R; 0626 062C;;;;N;;;;; FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;R; 0626 062D;;;;N;;;;; FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;R; 0626 062E;;;;N;;;;; FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;R; 0626 0645;;;;N;;;;; FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;R; 0626 0647;;;;N;;;;; FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;R; 0628 062C;;;;N;;;;; FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;R; 0628 062D;;;;N;;;;; FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;R; 0628 062E;;;;N;;;;; FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;R; 0628 0645;;;;N;;;;; FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;R; 0628 0647;;;;N;;;;; FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;R; 062A 062C;;;;N;;;;; FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;R; 062A 062D;;;;N;;;;; FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;R; 062A 062E;;;;N;;;;; FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;R; 062A 0645;;;;N;;;;; FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;R; 062A 0647;;;;N;;;;; FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;R; 062B 0645;;;;N;;;;; FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;R; 062C 062D;;;;N;;;;; FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;R; 062C 0645;;;;N;;;;; FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;R; 062D 062C;;;;N;;;;; FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;R; 062D 0645;;;;N;;;;; FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;R; 062E 062C;;;;N;;;;; FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;R; 062E 0645;;;;N;;;;; FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;R; 0633 062C;;;;N;;;;; FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;R; 0633 062D;;;;N;;;;; FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;R; 0633 062E;;;;N;;;;; FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;R; 0633 0645;;;;N;;;;; FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;R; 0635 062D;;;;N;;;;; FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;R; 0635 062E;;;;N;;;;; FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;R; 0635 0645;;;;N;;;;; FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;R; 0636 062C;;;;N;;;;; FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;R; 0636 062D;;;;N;;;;; FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;R; 0636 062E;;;;N;;;;; FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;R; 0636 0645;;;;N;;;;; FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;R; 0637 062D;;;;N;;;;; FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;R; 0638 0645;;;;N;;;;; FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;R; 0639 062C;;;;N;;;;; FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;R; 0639 0645;;;;N;;;;; FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;R; 063A 062C;;;;N;;;;; FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;R; 063A 0645;;;;N;;;;; FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;R; 0641 062C;;;;N;;;;; FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;R; 0641 062D;;;;N;;;;; FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;R; 0641 062E;;;;N;;;;; FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;R; 0641 0645;;;;N;;;;; FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;R; 0642 062D;;;;N;;;;; FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;R; 0642 0645;;;;N;;;;; FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;R; 0643 062C;;;;N;;;;; FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;R; 0643 062D;;;;N;;;;; FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;R; 0643 062E;;;;N;;;;; FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;R; 0643 0644;;;;N;;;;; FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;R; 0643 0645;;;;N;;;;; FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;R; 0644 062C;;;;N;;;;; FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;R; 0644 062D;;;;N;;;;; FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;R; 0644 062E;;;;N;;;;; FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;R; 0644 0645;;;;N;;;;; FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;R; 0644 0647;;;;N;;;;; FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;R; 0645 062C;;;;N;;;;; FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;R; 0645 062D;;;;N;;;;; FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;R; 0645 062E;;;;N;;;;; FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0645 0645;;;;N;;;;; FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;R; 0646 062C;;;;N;;;;; FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;R; 0646 062D;;;;N;;;;; FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;R; 0646 062E;;;;N;;;;; FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;R; 0646 0645;;;;N;;;;; FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;R; 0646 0647;;;;N;;;;; FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;R; 0647 062C;;;;N;;;;; FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;R; 0647 0645;;;;N;;;;; FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;R; 0647 0670;;;;N;;;;; FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;R; 064A 062C;;;;N;;;;; FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;R; 064A 062D;;;;N;;;;; FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;R; 064A 062E;;;;N;;;;; FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;R; 064A 0645;;;;N;;;;; FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;R; 064A 0647;;;;N;;;;; FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;R; 0626 0645;;;;N;;;;; FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;R; 0626 0647;;;;N;;;;; FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;R; 0628 0645;;;;N;;;;; FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;R; 0628 0647;;;;N;;;;; FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;R; 062A 0645;;;;N;;;;; FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;R; 062A 0647;;;;N;;;;; FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;R; 062B 0645;;;;N;;;;; FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;R; 062B 0647;;;;N;;;;; FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;R; 0633 0645;;;;N;;;;; FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;R; 0633 0647;;;;N;;;;; FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;R; 0634 0645;;;;N;;;;; FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;R; 0634 0647;;;;N;;;;; FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;R; 0643 0644;;;;N;;;;; FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;R; 0643 0645;;;;N;;;;; FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;R; 0644 0645;;;;N;;;;; FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;R; 0646 0645;;;;N;;;;; FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;R; 0646 0647;;;;N;;;;; FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;R; 064A 0645;;;;N;;;;; FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;R; 064A 0647;;;;N;;;;; FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;R; 0020 0651 064E;;;;N;;;;; FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;R; 0020 0651 064F;;;;N;;;;; FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;R; 0020 0651 0650;;;;N;;;;; FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0637 0649;;;;N;;;;; FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;R; 0637 064A;;;;N;;;;; FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0639 0649;;;;N;;;;; FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;R; 0639 064A;;;;N;;;;; FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 063A 0649;;;;N;;;;; FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;R; 063A 064A;;;;N;;;;; FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0633 0649;;;;N;;;;; FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;R; 0633 064A;;;;N;;;;; FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0634 0649;;;;N;;;;; FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;R; 0634 064A;;;;N;;;;; FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 062D 0649;;;;N;;;;; FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;R; 062D 064A;;;;N;;;;; FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 062C 0649;;;;N;;;;; FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;R; 062C 064A;;;;N;;;;; FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 062E 0649;;;;N;;;;; FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;R; 062E 064A;;;;N;;;;; FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0635 0649;;;;N;;;;; FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;R; 0635 064A;;;;N;;;;; FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0636 0649;;;;N;;;;; FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;R; 0636 064A;;;;N;;;;; FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;R; 0634 062C;;;;N;;;;; FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;R; 0634 062D;;;;N;;;;; FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;R; 0634 062E;;;;N;;;;; FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;R; 0634 0645;;;;N;;;;; FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;R; 0634 0631;;;;N;;;;; FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;R; 0633 0631;;;;N;;;;; FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;R; 0635 0631;;;;N;;;;; FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;R; 0636 0631;;;;N;;;;; FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0637 0649;;;;N;;;;; FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;R; 0637 064A;;;;N;;;;; FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0639 0649;;;;N;;;;; FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;R; 0639 064A;;;;N;;;;; FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 063A 0649;;;;N;;;;; FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;R; 063A 064A;;;;N;;;;; FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0633 0649;;;;N;;;;; FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;R; 0633 064A;;;;N;;;;; FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0634 0649;;;;N;;;;; FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;R; 0634 064A;;;;N;;;;; FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062D 0649;;;;N;;;;; FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;R; 062D 064A;;;;N;;;;; FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062C 0649;;;;N;;;;; FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;R; 062C 064A;;;;N;;;;; FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062E 0649;;;;N;;;;; FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;R; 062E 064A;;;;N;;;;; FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0635 0649;;;;N;;;;; FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;R; 0635 064A;;;;N;;;;; FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0636 0649;;;;N;;;;; FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;R; 0636 064A;;;;N;;;;; FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;R; 0634 062C;;;;N;;;;; FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;R; 0634 062D;;;;N;;;;; FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;R; 0634 062E;;;;N;;;;; FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;R; 0634 0645;;;;N;;;;; FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;R; 0634 0631;;;;N;;;;; FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;R; 0633 0631;;;;N;;;;; FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;R; 0635 0631;;;;N;;;;; FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;R; 0636 0631;;;;N;;;;; FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;R; 0634 062C;;;;N;;;;; FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;R; 0634 062D;;;;N;;;;; FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;R; 0634 062E;;;;N;;;;; FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;R; 0634 0645;;;;N;;;;; FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;R; 0633 0647;;;;N;;;;; FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;R; 0634 0647;;;;N;;;;; FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;R; 0637 0645;;;;N;;;;; FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;R; 0633 062C;;;;N;;;;; FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;R; 0633 062D;;;;N;;;;; FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;R; 0633 062E;;;;N;;;;; FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;R; 0634 062C;;;;N;;;;; FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;R; 0634 062D;;;;N;;;;; FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;R; 0634 062E;;;;N;;;;; FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;R; 0637 0645;;;;N;;;;; FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;R; 0638 0645;;;;N;;;;; FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;R; 0627 064B;;;;N;;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;R; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;R; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;R; 062A 062D 062C;;;;N;;;;; FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;R; 062A 062D 0645;;;;N;;;;; FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R; 062A 062E 0645;;;;N;;;;; FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R; 062A 0645 062C;;;;N;;;;; FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R; 062A 0645 062D;;;;N;;;;; FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R; 062A 0645 062E;;;;N;;;;; FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;R; 062C 0645 062D;;;;N;;;;; FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R; 062C 0645 062D;;;;N;;;;; FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 062D 0645 064A;;;;N;;;;; FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062D 0645 0649;;;;N;;;;; FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;R; 0633 062D 062C;;;;N;;;;; FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;R; 0633 062C 062D;;;;N;;;;; FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0633 062C 0649;;;;N;;;;; FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;R; 0633 0645 062D;;;;N;;;;; FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;R; 0633 0645 062D;;;;N;;;;; FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R; 0633 0645 062C;;;;N;;;;; FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 0633 0645 0645;;;;N;;;;; FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0633 0645 0645;;;;N;;;;; FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;R; 0635 062D 062D;;;;N;;;;; FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;R; 0635 062D 062D;;;;N;;;;; FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 0635 0645 0645;;;;N;;;;; FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;R; 0634 062D 0645;;;;N;;;;; FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;R; 0634 062D 0645;;;;N;;;;; FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;R; 0634 062C 064A;;;;N;;;;; FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;R; 0634 0645 062E;;;;N;;;;; FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R; 0634 0645 062E;;;;N;;;;; FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 0634 0645 0645;;;;N;;;;; FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0634 0645 0645;;;;N;;;;; FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0636 062D 0649;;;;N;;;;; FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;R; 0636 062E 0645;;;;N;;;;; FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R; 0636 062E 0645;;;;N;;;;; FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;R; 0637 0645 062D;;;;N;;;;; FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R; 0637 0645 062D;;;;N;;;;; FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0637 0645 0645;;;;N;;;;; FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0637 0645 064A;;;;N;;;;; FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;R; 0639 062C 0645;;;;N;;;;; FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 0639 0645 0645;;;;N;;;;; FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0639 0645 0645;;;;N;;;;; FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0639 0645 0649;;;;N;;;;; FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 063A 0645 0645;;;;N;;;;; FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 063A 0645 064A;;;;N;;;;; FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 063A 0645 0649;;;;N;;;;; FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;R; 0641 062E 0645;;;;N;;;;; FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R; 0641 062E 0645;;;;N;;;;; FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;R; 0642 0645 062D;;;;N;;;;; FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 0642 0645 0645;;;;N;;;;; FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;R; 0644 062D 0645;;;;N;;;;; FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;R; 0644 062D 064A;;;;N;;;;; FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0644 062D 0649;;;;N;;;;; FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;R; 0644 062C 062C;;;;N;;;;; FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;R; 0644 062C 062C;;;;N;;;;; FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;R; 0644 062E 0645;;;;N;;;;; FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R; 0644 062E 0645;;;;N;;;;; FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;R; 0644 0645 062D;;;;N;;;;; FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R; 0644 0645 062D;;;;N;;;;; FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;R; 0645 062D 062C;;;;N;;;;; FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R; 0645 062D 0645;;;;N;;;;; FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R; 0645 062D 064A;;;;N;;;;; FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;R; 0645 062C 062D;;;;N;;;;; FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;R; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R; 0645 062E 0645;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;R; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0647 0645 0645;;;;N;;;;; FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;R; 0646 062D 0645;;;;N;;;;; FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0646 062D 0649;;;;N;;;;; FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;R; 0646 062C 0645;;;;N;;;;; FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R; 0646 062C 0645;;;;N;;;;; FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0646 062C 0649;;;;N;;;;; FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0646 0645 064A;;;;N;;;;; FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0646 0645 0649;;;;N;;;;; FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 064A 0645 0645;;;;N;;;;; FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 064A 0645 0645;;;;N;;;;; FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R; 0628 062E 064A;;;;N;;;;; FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R; 062A 062C 064A;;;;N;;;;; FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062A 062C 0649;;;;N;;;;; FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R; 062A 062E 064A;;;;N;;;;; FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062A 062E 0649;;;;N;;;;; FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 062A 0645 064A;;;;N;;;;; FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062A 0645 0649;;;;N;;;;; FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 062C 0645 064A;;;;N;;;;; FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062C 062D 0649;;;;N;;;;; FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 062C 0645 0649;;;;N;;;;; FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R; 0633 062E 0649;;;;N;;;;; FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;R; 0635 062D 064A;;;;N;;;;; FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;R; 0634 062D 064A;;;;N;;;;; FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;R; 0636 062D 064A;;;;N;;;;; FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;R; 0644 062C 064A;;;;N;;;;; FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0644 0645 064A;;;;N;;;;; FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;R; 064A 062D 064A;;;;N;;;;; FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R; 064A 062C 064A;;;;N;;;;; FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 064A 0645 064A;;;;N;;;;; FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0645 0645 064A;;;;N;;;;; FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0642 0645 064A;;;;N;;;;; FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;R; 0646 062D 064A;;;;N;;;;; FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;R; 0642 0645 062D;;;;N;;;;; FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R; 0644 062D 0645;;;;N;;;;; FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0639 0645 064A;;;;N;;;;; FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0643 0645 064A;;;;N;;;;; FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;R; 0646 062C 062D;;;;N;;;;; FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;R; 0645 062E 064A;;;;N;;;;; FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R; 0644 062C 0645;;;;N;;;;; FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R; 0643 0645 0645;;;;N;;;;; FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;R; 0644 062C 0645;;;;N;;;;; FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;R; 0646 062C 062D;;;;N;;;;; FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R; 062C 062D 064A;;;;N;;;;; FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;R; 062D 062C 064A;;;;N;;;;; FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;R; 0645 062C 064A;;;;N;;;;; FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R; 0641 0645 064A;;;;N;;;;; FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;R; 0628 062D 064A;;;;N;;;;; FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0643 0645 0645;;;;N;;;;; FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R; 0639 062C 0645;;;;N;;;;; FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;R; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;R; 0646 062C 064A;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;R; 0627 0644 0644 0647;;;;N;;;;; FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;R; 0627 0643 0628 0631;;;;N;;;;; FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;R; 0645 062D 0645 062F;;;;N;;;;; FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;R; 0635 0644 0639 0645;;;;N;;;;; FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;R; 0631 0633 0648 0644;;;;N;;;;; FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;R; 0639 0644 064A 0647;;;;N;;;;; FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;R; 0648 0633 0644 0645;;;;N;;;;; FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;R; 0635 0644 0649;;;;N;;;;; FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;So;0;R; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; FDFB;ARABIC LIGATURE JALLAJALALOUHOU;So;0;R; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;ON;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;ON;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;ON;;;;;N;;;;; FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;ON;;;;;N;;;;; FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON; 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON; 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON; 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;So;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;So;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON; 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON; 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON; 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON; 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON; 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON; 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON; 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON; 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; FE49;DASHED OVERLINE;So;0;ON; 203E;;;;N;SPACING DASHED OVERSCORE;;;; FE4A;CENTRELINE OVERLINE;So;0;ON; 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; FE4B;WAVY OVERLINE;So;0;ON; 203E;;;;N;SPACING WAVY OVERSCORE;;;; FE4C;DOUBLE WAVY OVERLINE;So;0;ON; 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; FE4D;DASHED LOW LINE;So;0;ON; 005F;;;;N;SPACING DASHED UNDERSCORE;;;; FE4E;CENTRELINE LOW LINE;So;0;ON; 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; FE4F;WAVY LOW LINE;So;0;ON; 005F;;;;N;SPACING WAVY UNDERSCORE;;;; FE50;SMALL COMMA;Po;0;ON; 002C;;;;N;;;;; FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FE52;SMALL FULL STOP;Po;0;ON; 002E;;;;N;SMALL PERIOD;;;; FE54;SMALL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FE55;SMALL COLON;Po;0;ON; 003A;;;;N;;;;; FE56;SMALL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON; 2014;;;;N;;;;; FE59;SMALL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;SMALL OPENING PARENTHESIS;;;; FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;SMALL CLOSING PARENTHESIS;;;; FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;SMALL OPENING CURLY BRACKET;;;; FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;; FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;; FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;So;0;ON; 0023;;;;N;;;;; FE60;SMALL AMPERSAND;So;0;ON; 0026;;;;N;;;;; FE61;SMALL ASTERISK;So;0;ON; 002A;;;;N;;;;; FE62;SMALL PLUS SIGN;Sm;0;ON; 002B;;;;N;;;;; FE63;SMALL HYPHEN-MINUS;Pd;0;ON; 002D;;;;N;;;;; FE64;SMALL LESS-THAN SIGN;Sm;0;ON; 003C;;;;N;;;;; FE65;SMALL GREATER-THAN SIGN;Sm;0;ON; 003E;;;;N;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ON; 0024;;;;N;;;;; FE6A;SMALL PERCENT SIGN;Po;0;ON; 0025;;;;N;;;;; FE6B;SMALL COMMERCIAL AT;So;0;ON; 0040;;;;N;;;;; FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;R; 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;R; 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;R; 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;R; 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; FE76;ARABIC FATHA ISOLATED FORM;Lo;0;R; 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; FE77;ARABIC FATHA MEDIAL FORM;Lo;0;R; 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;R; 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;R; 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;R; 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;R; 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;R; 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;R; 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;R; 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;R; 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;R; 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R; 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R; 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R; 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R; 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R; 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;R; 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R; 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R; 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R; 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;R; 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;R; 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;R; 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;R; 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;R; 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;R; 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;R; 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;R; 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;R; 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;R; 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;R; 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;R; 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;R; 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;R; 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;R; 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;R; 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;R; 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;R; 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;R; 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;R; 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;R; 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;R; 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;R; 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;R; 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;R; 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;R; 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;R; 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;R; 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;R; 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;R; 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;R; 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;R; 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;R; 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;R; 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;R; 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;R; 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;R; 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;R; 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;R; 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;R; 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;R; 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;R; 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;R; 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;R; 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;R; 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;R; 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;R; 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;R; 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;R; 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;R; 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;R; 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;R; 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;R; 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;R; 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;R; 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;R; 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;R; 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;R; 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;R; 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;R; 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;R; 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;R; 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;R; 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;R; 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;R; 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;R; 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;R; 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;R; 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;R; 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;R; 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;R; 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;R; 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;R; 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;R; 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;R; 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;R; 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;R; 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;R; 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;R; 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;R; 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;R; 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;R; 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;R; 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;R; 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;R; 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;R; 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;R; 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;R; 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;R; 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;R; 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;R; 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;R; 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;R; 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;R; 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;R; 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;R; 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;R; 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;R; 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;R; 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;R; 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;R; 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;R; 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;R; 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;R; 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;R; 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;R; 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;R; 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R; 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R; 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R; 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R; 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R; 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R; 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;R; 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;R; 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; FEFF;ZERO WIDTH NO-BREAK SPACE;Zs;0;ON;;;;;N;BYTE ORDER MARK;;;; FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FF02;FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; FF03;FULLWIDTH NUMBER SIGN;So;0;ON; 0023;;;;N;;;;; FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ON; 0024;;;;N;;;;; FF05;FULLWIDTH PERCENT SIGN;Po;0;ON; 0025;;;;N;;;;; FF06;FULLWIDTH AMPERSAND;So;0;ON; 0026;;;;N;;;;; FF07;FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;So;0;ON; 002A;;;;N;;;;; FF0B;FULLWIDTH PLUS SIGN;Sm;0;ON; 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;ON; 002C;;;;N;;;;; FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ON; 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;ON; 002E;;;;N;FULLWIDTH PERIOD;;;; FF0F;FULLWIDTH SOLIDUS;Po;0;ON; 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; FF13;FULLWIDTH DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; FF16;FULLWIDTH DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; FF19;FULLWIDTH DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; FF1A;FULLWIDTH COLON;Po;0;ON; 003A;;;;N;;;;; FF1B;FULLWIDTH SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON; 003C;;;;N;;;;; FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON; 003E;;;;N;;;;; FF1F;FULLWIDTH QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FF20;FULLWIDTH COMMERCIAL AT;So;0;ON; 0040;;;;N;;;;; FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L; 0041;;;;N;;;;FF41; FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L; 0042;;;;N;;;;FF42; FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L; 0043;;;;N;;;;FF43; FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L; 0044;;;;N;;;;FF44; FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L; 0045;;;;N;;;;FF45; FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L; 0046;;;;N;;;;FF46; FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L; 0047;;;;N;;;;FF47; FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L; 0048;;;;N;;;;FF48; FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L; 0049;;;;N;;;;FF49; FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L; 004A;;;;N;;;;FF4A; FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L; 004B;;;;N;;;;FF4B; FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L; 004C;;;;N;;;;FF4C; FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L; 004D;;;;N;;;;FF4D; FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L; 004E;;;;N;;;;FF4E; FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L; 004F;;;;N;;;;FF4F; FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L; 0050;;;;N;;;;FF50; FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L; 0051;;;;N;;;;FF51; FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L; 0052;;;;N;;;;FF52; FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L; 0053;;;;N;;;;FF53; FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L; 0054;;;;N;;;;FF54; FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L; 0055;;;;N;;;;FF55; FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L; 0056;;;;N;;;;FF56; FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L; 0057;;;;N;;;;FF57; FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L; 0058;;;;N;;;;FF58; FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L; 0059;;;;N;;;;FF59; FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L; 005A;;;;N;;;;FF5A; FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;; FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;FULLWIDTH BACKSLASH;;;; FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;; FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Lm;0;ON; 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; FF3F;FULLWIDTH LOW LINE;So;0;ON; 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; FF40;FULLWIDTH GRAVE ACCENT;Lm;0;ON; 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L; 0061;;;;N;;;FF21;;FF21 FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L; 0062;;;;N;;;FF22;;FF22 FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L; 0063;;;;N;;;FF23;;FF23 FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L; 0064;;;;N;;;FF24;;FF24 FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L; 0065;;;;N;;;FF25;;FF25 FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L; 0066;;;;N;;;FF26;;FF26 FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L; 0067;;;;N;;;FF27;;FF27 FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L; 0068;;;;N;;;FF28;;FF28 FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;FF29;;FF29 FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L; 006A;;;;N;;;FF2A;;FF2A FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L; 006B;;;;N;;;FF2B;;FF2B FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L; 006C;;;;N;;;FF2C;;FF2C FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L; 006D;;;;N;;;FF2D;;FF2D FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;FF2E;;FF2E FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L; 006F;;;;N;;;FF2F;;FF2F FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L; 0070;;;;N;;;FF30;;FF30 FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L; 0071;;;;N;;;FF31;;FF31 FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L; 0072;;;;N;;;FF32;;FF32 FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L; 0073;;;;N;;;FF33;;FF33 FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L; 0074;;;;N;;;FF34;;FF34 FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L; 0075;;;;N;;;FF35;;FF35 FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L; 0076;;;;N;;;FF36;;FF36 FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L; 0077;;;;N;;;FF37;;FF37 FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L; 0078;;;;N;;;FF38;;FF38 FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L; 0079;;;;N;;;FF39;;FF39 FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L; 007A;;;;N;;;FF3A;;FF3A FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;; FF5C;FULLWIDTH VERTICAL LINE;So;0;ON; 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;; FF5E;FULLWIDTH TILDE;So;0;ON; 007E;;;;N;FULLWIDTH SPACING TILDE;;;; FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;L; 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L; 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L; 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L; 30A3;;;;N;;;;; FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L; 30A5;;;;N;;;;; FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L; 30A7;;;;N;;;;; FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L; 30A9;;;;N;;;;; FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L; 30E3;;;;N;;;;; FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L; 30E5;;;;N;;;;; FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L; 30E7;;;;N;;;;; FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L; 30C3;;;;N;;;;; FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L; 30FC;;;;N;;;;; FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L; 30A2;;;;N;;;;; FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L; 30A4;;;;N;;;;; FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L; 30A6;;;;N;;;;; FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L; 30A8;;;;N;;;;; FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L; 30AA;;;;N;;;;; FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L; 30AB;;;;N;;;;; FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L; 30AD;;;;N;;;;; FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L; 30AF;;;;N;;;;; FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L; 30B1;;;;N;;;;; FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L; 30B3;;;;N;;;;; FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L; 30B5;;;;N;;;;; FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L; 30B7;;;;N;;;;; FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L; 30B9;;;;N;;;;; FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L; 30BB;;;;N;;;;; FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L; 30BD;;;;N;;;;; FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L; 30BF;;;;N;;;;; FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L; 30C1;;;;N;;;;; FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L; 30C4;;;;N;;;;; FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L; 30C6;;;;N;;;;; FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L; 30C8;;;;N;;;;; FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L; 30CA;;;;N;;;;; FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L; 30CB;;;;N;;;;; FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L; 30CC;;;;N;;;;; FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L; 30CD;;;;N;;;;; FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L; 30CE;;;;N;;;;; FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L; 30CF;;;;N;;;;; FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L; 30D2;;;;N;;;;; FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L; 30D5;;;;N;;;;; FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L; 30D8;;;;N;;;;; FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L; 30DB;;;;N;;;;; FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L; 30DE;;;;N;;;;; FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L; 30DF;;;;N;;;;; FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L; 30E0;;;;N;;;;; FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L; 30E1;;;;N;;;;; FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L; 30E2;;;;N;;;;; FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L; 30E4;;;;N;;;;; FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L; 30E6;;;;N;;;;; FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L; 30E8;;;;N;;;;; FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L; 30E9;;;;N;;;;; FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L; 30EA;;;;N;;;;; FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L; 30EB;;;;N;;;;; FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L; 30EC;;;;N;;;;; FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L; 30ED;;;;N;;;;; FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L; 30EF;;;;N;;;;; FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L; 30F3;;;;N;;;;; FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L; 309B;;;;N;;;;; FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309C;;;;N;;;;; FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L; 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L; 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L; 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L; 3134;;;;N;;;;; FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L; 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L; 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L; 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L; 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L; 3141;;;;N;;;;; FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L; 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L; 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L; 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L; 3145;;;;N;;;;; FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L; 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L; 3147;;;;N;;;;; FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L; 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L; 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L; 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L; 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L; 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L; 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L; 314E;;;;N;;;;; FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L; 314F;;;;N;;;;; FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L; 3150;;;;N;;;;; FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L; 3151;;;;N;;;;; FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L; 3152;;;;N;;;;; FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L; 3153;;;;N;;;;; FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L; 3154;;;;N;;;;; FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L; 3155;;;;N;;;;; FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L; 3156;;;;N;;;;; FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L; 3157;;;;N;;;;; FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L; 3158;;;;N;;;;; FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L; 3159;;;;N;;;;; FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L; 315A;;;;N;;;;; FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L; 315B;;;;N;;;;; FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L; 315C;;;;N;;;;; FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L; 315D;;;;N;;;;; FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L; 315E;;;;N;;;;; FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L; 315F;;;;N;;;;; FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L; 3160;;;;N;;;;; FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L; 3161;;;;N;;;;; FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L; 3162;;;;N;;;;; FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L; 3163;;;;N;;;;; FFE0;FULLWIDTH CENT SIGN;Sc;0;ON; 00A2;;;;N;;;;; FFE1;FULLWIDTH POUND SIGN;Sc;0;ON; 00A3;;;;N;;;;; FFE2;FULLWIDTH NOT SIGN;Sm;0;ON; 00AC;;;;N;;;;; FFE3;FULLWIDTH MACRON;Lm;0;ON; 00AF;;;;N;FULLWIDTH SPACING MACRON;;;; FFE4;FULLWIDTH BROKEN BAR;So;0;ON; 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; FFE5;FULLWIDTH YEN SIGN;Sc;0;ON; 00A5;;;;N;;;;; FFE6;FULLWIDTH WON SIGN;Sc;0;ON; 20A9;;;;N;;;;; FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON; 2502;;;;N;;;;; FFE9;HALFWIDTH LEFTWARDS ARROW;So;0;ON; 2190;;;;N;;;;; FFEA;HALFWIDTH UPWARDS ARROW;So;0;ON; 2191;;;;N;;;;; FFEB;HALFWIDTH RIGHTWARDS ARROW;So;0;ON; 2192;;;;N;;;;; FFEC;HALFWIDTH DOWNWARDS ARROW;So;0;ON; 2193;;;;N;;;;; FFED;HALFWIDTH BLACK SQUARE;So;0;ON; 25A0;;;;N;;;;; FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON; 25CB;;;;N;;;;; FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; cyrus-imspd-v1.8/lib/charset/unifix.txt0100644004310100000120000002544307372056424017447 0ustar shadowstaff# Modifications to Unicode data for better case-insensitive searching # Make these whitespace, so they're ignored 0009;;Zs;0;ON;;;;;N;HORIZONTAL TABULATION;;;; 000A;;Zs;0;ON;;;;;N;LINE FEED;;;; 000B;;Zs;0;ON;;;;;N;VERTICAL TABULATION;;;; 000C;;Zs;0;ON;;;;;N;FORM FEED;;;; 000D;;Zs;0;ON;;;;;N;CARRIAGE RETURN;;;; # Map s-zet to "ss" 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;0073 0073;;;;N;;German;;; # Map ae to "ae" 00E6;LATIN SMALL LETTER AE;Ll;0;L;0061 0065;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6 # Map Eth and Thorn to "th" 00F0;LATIN SMALL LETTER ETH;Ll;0;L;0074 0068;;;;N;;Icelandic;00D0;;00D0 00FE;LATIN SMALL LETTER THORN;Ll;0;L;0074 0068;;;;N;;Icelandic;00DE;;00DE # Map oe ligature to "oe" 0153;LATIN SMALL LIGATURE OE;Ll;0;L;006F 0065;;;;N;LATIN SMALL LETTER O E;;0152;;0152 # Ignore combining diacritical marks 0300;Combining Diacritical Mark;Zs; 0301;Combining Diacritical Mark;Zs; 0302;Combining Diacritical Mark;Zs; 0303;Combining Diacritical Mark;Zs; 0304;Combining Diacritical Mark;Zs; 0305;Combining Diacritical Mark;Zs; 0306;Combining Diacritical Mark;Zs; 0307;Combining Diacritical Mark;Zs; 0308;Combining Diacritical Mark;Zs; 0309;Combining Diacritical Mark;Zs; 030a;Combining Diacritical Mark;Zs; 030b;Combining Diacritical Mark;Zs; 030c;Combining Diacritical Mark;Zs; 030d;Combining Diacritical Mark;Zs; 030e;Combining Diacritical Mark;Zs; 030f;Combining Diacritical Mark;Zs; 0310;Combining Diacritical Mark;Zs; 0311;Combining Diacritical Mark;Zs; 0312;Combining Diacritical Mark;Zs; 0313;Combining Diacritical Mark;Zs; 0314;Combining Diacritical Mark;Zs; 0315;Combining Diacritical Mark;Zs; 0316;Combining Diacritical Mark;Zs; 0317;Combining Diacritical Mark;Zs; 0318;Combining Diacritical Mark;Zs; 0319;Combining Diacritical Mark;Zs; 031a;Combining Diacritical Mark;Zs; 031b;Combining Diacritical Mark;Zs; 031c;Combining Diacritical Mark;Zs; 031d;Combining Diacritical Mark;Zs; 031e;Combining Diacritical Mark;Zs; 031f;Combining Diacritical Mark;Zs; 0320;Combining Diacritical Mark;Zs; 0321;Combining Diacritical Mark;Zs; 0322;Combining Diacritical Mark;Zs; 0323;Combining Diacritical Mark;Zs; 0324;Combining Diacritical Mark;Zs; 0325;Combining Diacritical Mark;Zs; 0326;Combining Diacritical Mark;Zs; 0327;Combining Diacritical Mark;Zs; 0328;Combining Diacritical Mark;Zs; 0329;Combining Diacritical Mark;Zs; 032a;Combining Diacritical Mark;Zs; 032b;Combining Diacritical Mark;Zs; 032c;Combining Diacritical Mark;Zs; 032d;Combining Diacritical Mark;Zs; 032e;Combining Diacritical Mark;Zs; 032f;Combining Diacritical Mark;Zs; 0330;Combining Diacritical Mark;Zs; 0331;Combining Diacritical Mark;Zs; 0332;Combining Diacritical Mark;Zs; 0333;Combining Diacritical Mark;Zs; 0334;Combining Diacritical Mark;Zs; 0335;Combining Diacritical Mark;Zs; 0336;Combining Diacritical Mark;Zs; 0337;Combining Diacritical Mark;Zs; 0338;Combining Diacritical Mark;Zs; 0339;Combining Diacritical Mark;Zs; 033a;Combining Diacritical Mark;Zs; 033b;Combining Diacritical Mark;Zs; 033c;Combining Diacritical Mark;Zs; 033d;Combining Diacritical Mark;Zs; 033e;Combining Diacritical Mark;Zs; 033f;Combining Diacritical Mark;Zs; 0340;Combining Diacritical Mark;Zs; 0341;Combining Diacritical Mark;Zs; 0342;Combining Diacritical Mark;Zs; 0343;Combining Diacritical Mark;Zs; 0344;Combining Diacritical Mark;Zs; 0345;Combining Diacritical Mark;Zs; 0346;Combining Diacritical Mark;Zs; 0347;Combining Diacritical Mark;Zs; 0348;Combining Diacritical Mark;Zs; 0349;Combining Diacritical Mark;Zs; 034a;Combining Diacritical Mark;Zs; 034b;Combining Diacritical Mark;Zs; 034c;Combining Diacritical Mark;Zs; 034d;Combining Diacritical Mark;Zs; 034e;Combining Diacritical Mark;Zs; 034f;Combining Diacritical Mark;Zs; 0350;Combining Diacritical Mark;Zs; 0351;Combining Diacritical Mark;Zs; 0352;Combining Diacritical Mark;Zs; 0353;Combining Diacritical Mark;Zs; 0354;Combining Diacritical Mark;Zs; 0355;Combining Diacritical Mark;Zs; 0356;Combining Diacritical Mark;Zs; 0357;Combining Diacritical Mark;Zs; 0358;Combining Diacritical Mark;Zs; 0359;Combining Diacritical Mark;Zs; 035a;Combining Diacritical Mark;Zs; 035b;Combining Diacritical Mark;Zs; 035c;Combining Diacritical Mark;Zs; 035d;Combining Diacritical Mark;Zs; 035e;Combining Diacritical Mark;Zs; 035f;Combining Diacritical Mark;Zs; 0360;Combining Diacritical Mark;Zs; 0361;Combining Diacritical Mark;Zs; 0362;Combining Diacritical Mark;Zs; 0363;Combining Diacritical Mark;Zs; 0364;Combining Diacritical Mark;Zs; 0365;Combining Diacritical Mark;Zs; 0366;Combining Diacritical Mark;Zs; 0367;Combining Diacritical Mark;Zs; 0368;Combining Diacritical Mark;Zs; 0369;Combining Diacritical Mark;Zs; 036a;Combining Diacritical Mark;Zs; 036b;Combining Diacritical Mark;Zs; 036c;Combining Diacritical Mark;Zs; 036d;Combining Diacritical Mark;Zs; 036e;Combining Diacritical Mark;Zs; 036f;Combining Diacritical Mark;Zs; 0370;Combining Diacritical Mark;Zs; 0371;Combining Diacritical Mark;Zs; 0372;Combining Diacritical Mark;Zs; 0373;Combining Diacritical Mark;Zs; 0374;Combining Diacritical Mark;Zs; 0375;Combining Diacritical Mark;Zs; 0376;Combining Diacritical Mark;Zs; 0377;Combining Diacritical Mark;Zs; 0378;Combining Diacritical Mark;Zs; 0379;Combining Diacritical Mark;Zs; 037a;Combining Diacritical Mark;Zs; 037b;Combining Diacritical Mark;Zs; 037c;Combining Diacritical Mark;Zs; 037d;Combining Diacritical Mark;Zs; 037e;Combining Diacritical Mark;Zs; 037f;Combining Diacritical Mark;Zs; 0380;Combining Diacritical Mark;Zs; 0381;Combining Diacritical Mark;Zs; 0382;Combining Diacritical Mark;Zs; 0383;Combining Diacritical Mark;Zs; 0384;Combining Diacritical Mark;Zs; 0385;Combining Diacritical Mark;Zs; 0386;Combining Diacritical Mark;Zs; 0387;Combining Diacritical Mark;Zs; 0388;Combining Diacritical Mark;Zs; 0389;Combining Diacritical Mark;Zs; 038a;Combining Diacritical Mark;Zs; 038b;Combining Diacritical Mark;Zs; 038c;Combining Diacritical Mark;Zs; 038d;Combining Diacritical Mark;Zs; 038e;Combining Diacritical Mark;Zs; 038f;Combining Diacritical Mark;Zs; 0390;Combining Diacritical Mark;Zs; 0391;Combining Diacritical Mark;Zs; 0392;Combining Diacritical Mark;Zs; 0393;Combining Diacritical Mark;Zs; 0394;Combining Diacritical Mark;Zs; 0395;Combining Diacritical Mark;Zs; 0396;Combining Diacritical Mark;Zs; 0397;Combining Diacritical Mark;Zs; 0398;Combining Diacritical Mark;Zs; 0399;Combining Diacritical Mark;Zs; 039a;Combining Diacritical Mark;Zs; 039b;Combining Diacritical Mark;Zs; 039c;Combining Diacritical Mark;Zs; 039d;Combining Diacritical Mark;Zs; 039e;Combining Diacritical Mark;Zs; 039f;Combining Diacritical Mark;Zs; 03a0;Combining Diacritical Mark;Zs; 03a1;Combining Diacritical Mark;Zs; 03a2;Combining Diacritical Mark;Zs; 03a3;Combining Diacritical Mark;Zs; 03a4;Combining Diacritical Mark;Zs; 03a5;Combining Diacritical Mark;Zs; 03a6;Combining Diacritical Mark;Zs; 03a7;Combining Diacritical Mark;Zs; 03a8;Combining Diacritical Mark;Zs; 03a9;Combining Diacritical Mark;Zs; 03aa;Combining Diacritical Mark;Zs; 03ab;Combining Diacritical Mark;Zs; 03ac;Combining Diacritical Mark;Zs; 03ad;Combining Diacritical Mark;Zs; 03ae;Combining Diacritical Mark;Zs; 03af;Combining Diacritical Mark;Zs; 03b0;Combining Diacritical Mark;Zs; 03b1;Combining Diacritical Mark;Zs; 03b2;Combining Diacritical Mark;Zs; 03b3;Combining Diacritical Mark;Zs; 03b4;Combining Diacritical Mark;Zs; 03b5;Combining Diacritical Mark;Zs; 03b6;Combining Diacritical Mark;Zs; 03b7;Combining Diacritical Mark;Zs; 03b8;Combining Diacritical Mark;Zs; 03b9;Combining Diacritical Mark;Zs; 03ba;Combining Diacritical Mark;Zs; 03bb;Combining Diacritical Mark;Zs; 03bc;Combining Diacritical Mark;Zs; 03bd;Combining Diacritical Mark;Zs; 03be;Combining Diacritical Mark;Zs; 03bf;Combining Diacritical Mark;Zs; 03c0;Combining Diacritical Mark;Zs; 03c1;Combining Diacritical Mark;Zs; 03c2;Combining Diacritical Mark;Zs; 03c3;Combining Diacritical Mark;Zs; 03c4;Combining Diacritical Mark;Zs; 03c5;Combining Diacritical Mark;Zs; 03c6;Combining Diacritical Mark;Zs; 03c7;Combining Diacritical Mark;Zs; 03c8;Combining Diacritical Mark;Zs; 03c9;Combining Diacritical Mark;Zs; 03ca;Combining Diacritical Mark;Zs; 03cb;Combining Diacritical Mark;Zs; 03cc;Combining Diacritical Mark;Zs; 03cd;Combining Diacritical Mark;Zs; 03ce;Combining Diacritical Mark;Zs; 03cf;Combining Diacritical Mark;Zs; 03d0;Combining Diacritical Mark;Zs; 03d1;Combining Diacritical Mark;Zs; 03d2;Combining Diacritical Mark;Zs; 03d3;Combining Diacritical Mark;Zs; 03d4;Combining Diacritical Mark;Zs; 03d5;Combining Diacritical Mark;Zs; 03d6;Combining Diacritical Mark;Zs; 03d7;Combining Diacritical Mark;Zs; 03d8;Combining Diacritical Mark;Zs; 03d9;Combining Diacritical Mark;Zs; 03da;Combining Diacritical Mark;Zs; 03db;Combining Diacritical Mark;Zs; 03dc;Combining Diacritical Mark;Zs; 03dd;Combining Diacritical Mark;Zs; 03de;Combining Diacritical Mark;Zs; 03df;Combining Diacritical Mark;Zs; 03e0;Combining Diacritical Mark;Zs; 03e1;Combining Diacritical Mark;Zs; 03e2;Combining Diacritical Mark;Zs; 03e3;Combining Diacritical Mark;Zs; 03e4;Combining Diacritical Mark;Zs; 03e5;Combining Diacritical Mark;Zs; 03e6;Combining Diacritical Mark;Zs; 03e7;Combining Diacritical Mark;Zs; 03e8;Combining Diacritical Mark;Zs; 03e9;Combining Diacritical Mark;Zs; 03ea;Combining Diacritical Mark;Zs; 03eb;Combining Diacritical Mark;Zs; 03ec;Combining Diacritical Mark;Zs; 03ed;Combining Diacritical Mark;Zs; 03ee;Combining Diacritical Mark;Zs; 03ef;Combining Diacritical Mark;Zs; 03f0;Combining Diacritical Mark;Zs; 03f1;Combining Diacritical Mark;Zs; 03f2;Combining Diacritical Mark;Zs; 03f3;Combining Diacritical Mark;Zs; 03f4;Combining Diacritical Mark;Zs; 03f5;Combining Diacritical Mark;Zs; 03f6;Combining Diacritical Mark;Zs; 03f7;Combining Diacritical Mark;Zs; 03f8;Combining Diacritical Mark;Zs; 03f9;Combining Diacritical Mark;Zs; 03fa;Combining Diacritical Mark;Zs; 03fb;Combining Diacritical Mark;Zs; 03fc;Combining Diacritical Mark;Zs; 03fd;Combining Diacritical Mark;Zs; 03fe;Combining Diacritical Mark;Zs; 03ff;Combining Diacritical Mark;Zs; # Map Cyrillic ligatures 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;041D 0413;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;0422 0426;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4 # Don't bother expanding Hebrew ligatures #05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; #05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; #05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; # Map fraction slash to "/" 2044;FRACTION SLASH;Sm;0;ON;002F;;;;N;;;;; # Don't bother expanding Arabic ligatures #FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;;;;;N;;;;; #FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;;;;;N;;;;; #FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;R;;;;;N;;;;; cyrus-imspd-v1.8/lib/charset/us-ascii.t0100644004310100000120000001401707372056424017301 0ustar shadowstaff# Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. 0 0000 NULL (NUL) 1 0001 START OF HEADING (SOH) 2 0002 START OF TEXT (STX) 3 0003 END OF TEXT (ETX) 4 0004 END OF TRANSMISSION (EOT) 5 0005 ENQUIRY (ENQ) 6 0006 ACKNOWLEDGE (ACK) 7 0007 BELL (BEL) 8 0008 BACKSPACE (BS) 9 0009 CHARACTER TABULATION (HT) A 000a LINE FEED (LF) B 000b LINE TABULATION (VT) C 000c FORM FEED (FF) D 000d CARRIAGE RETURN (CR) E 000e SHIFT OUT (SO) F 000f SHIFT IN (SI) 10 0010 DATALINK ESCAPE (DLE) 11 0011 DEVICE CONTROL ONE (DC1) 12 0012 DEVICE CONTROL TWO (DC2) 13 0013 DEVICE CONTROL THREE (DC3) 14 0014 DEVICE CONTROL FOUR (DC4) 15 0015 NEGATIVE ACKNOWLEDGE (NAK) 16 0016 SYNCRONOUS IDLE (SYN) 17 0017 END OF TRANSMISSION BLOCK (ETB) 18 0018 CANCEL (CAN) 19 0019 END OF MEDIUM (EM) 1A 001a SUBSTITUTE (SUB) 1B 001b ESCAPE (ESC) 1C 001c FILE SEPARATOR (IS4) 1D 001d GROUP SEPARATOR (IS3) 1E 001e RECORD SEPARATOR (IS2) 1F 001f UNIT SEPARATOR (IS1) 20 0020 SPACE 21 0021 EXCLAMATION MARK 22 0022 QUOTATION MARK 23 0023 NUMBER SIGN 24 0024 DOLLAR SIGN 25 0025 PERCENT SIGN 26 0026 AMPERSAND 27 0027 APOSTROPHE 28 0028 LEFT PARENTHESIS 29 0029 RIGHT PARENTHESIS 2A 002a ASTERISK 2B 002b PLUS SIGN 2C 002c COMMA 2D 002d HYPHEN-MINUS 2E 002e FULL STOP 2F 002f SOLIDUS 30 0030 DIGIT ZERO 31 0031 DIGIT ONE 32 0032 DIGIT TWO 33 0033 DIGIT THREE 34 0034 DIGIT FOUR 35 0035 DIGIT FIVE 36 0036 DIGIT SIX 37 0037 DIGIT SEVEN 38 0038 DIGIT EIGHT 39 0039 DIGIT NINE 3A 003a COLON 3B 003b SEMICOLON 3C 003c LESS-THAN SIGN 3D 003d EQUALS SIGN 3E 003e GREATER-THAN SIGN 3F 003f QUESTION MARK 40 0040 COMMERCIAL AT 41 0041 LATIN CAPITAL LETTER A 42 0042 LATIN CAPITAL LETTER B 43 0043 LATIN CAPITAL LETTER C 44 0044 LATIN CAPITAL LETTER D 45 0045 LATIN CAPITAL LETTER E 46 0046 LATIN CAPITAL LETTER F 47 0047 LATIN CAPITAL LETTER G 48 0048 LATIN CAPITAL LETTER H 49 0049 LATIN CAPITAL LETTER I 4A 004a LATIN CAPITAL LETTER J 4B 004b LATIN CAPITAL LETTER K 4C 004c LATIN CAPITAL LETTER L 4D 004d LATIN CAPITAL LETTER M 4E 004e LATIN CAPITAL LETTER N 4F 004f LATIN CAPITAL LETTER O 50 0050 LATIN CAPITAL LETTER P 51 0051 LATIN CAPITAL LETTER Q 52 0052 LATIN CAPITAL LETTER R 53 0053 LATIN CAPITAL LETTER S 54 0054 LATIN CAPITAL LETTER T 55 0055 LATIN CAPITAL LETTER U 56 0056 LATIN CAPITAL LETTER V 57 0057 LATIN CAPITAL LETTER W 58 0058 LATIN CAPITAL LETTER X 59 0059 LATIN CAPITAL LETTER Y 5A 005a LATIN CAPITAL LETTER Z 5B 005b LEFT SQUARE BRACKET 5C 005c REVERSE SOLIDUS 5D 005d RIGHT SQUARE BRACKET 5E 005e CIRCUMFLEX ACCENT 5F 005f LOW LINE 60 0060 GRAVE ACCENT 61 0061 LATIN SMALL LETTER A 62 0062 LATIN SMALL LETTER B 63 0063 LATIN SMALL LETTER C 64 0064 LATIN SMALL LETTER D 65 0065 LATIN SMALL LETTER E 66 0066 LATIN SMALL LETTER F 67 0067 LATIN SMALL LETTER G 68 0068 LATIN SMALL LETTER H 69 0069 LATIN SMALL LETTER I 6A 006a LATIN SMALL LETTER J 6B 006b LATIN SMALL LETTER K 6C 006c LATIN SMALL LETTER L 6D 006d LATIN SMALL LETTER M 6E 006e LATIN SMALL LETTER N 6F 006f LATIN SMALL LETTER O 70 0070 LATIN SMALL LETTER P 71 0071 LATIN SMALL LETTER Q 72 0072 LATIN SMALL LETTER R 73 0073 LATIN SMALL LETTER S 74 0074 LATIN SMALL LETTER T 75 0075 LATIN SMALL LETTER U 76 0076 LATIN SMALL LETTER V 77 0077 LATIN SMALL LETTER W 78 0078 LATIN SMALL LETTER X 79 0079 LATIN SMALL LETTER Y 7A 007a LATIN SMALL LETTER Z 7B 007b LEFT CURLY BRACKET 7C 007c VERTICAL LINE 7D 007d RIGHT CURLY BRACKET 7E 007e TILDE 7F 007f DELETE (DEL) 80 ???? EMPTY 81 ???? EMPTY 82 ???? EMPTY 83 ???? EMPTY 84 ???? EMPTY 85 ???? EMPTY 86 ???? EMPTY 87 ???? EMPTY 88 ???? EMPTY 89 ???? EMPTY 8A ???? EMPTY 8B ???? EMPTY 8C ???? EMPTY 8D ???? EMPTY 8E ???? EMPTY 8F ???? EMPTY 90 ???? EMPTY 91 ???? EMPTY 92 ???? EMPTY 93 ???? EMPTY 94 ???? EMPTY 95 ???? EMPTY 96 ???? EMPTY 97 ???? EMPTY 98 ???? EMPTY 99 ???? EMPTY 9A ???? EMPTY 9B ???? EMPTY 9C ???? EMPTY 9D ???? EMPTY 9E ???? EMPTY 9F ???? EMPTY A0 ???? EMPTY A1 ???? EMPTY A2 ???? EMPTY A3 ???? EMPTY A4 ???? EMPTY A5 ???? EMPTY A6 ???? EMPTY A7 ???? EMPTY A8 ???? EMPTY A9 ???? EMPTY AA ???? EMPTY AB ???? EMPTY AC ???? EMPTY AD ???? EMPTY AE ???? EMPTY AF ???? EMPTY B0 ???? EMPTY B1 ???? EMPTY B2 ???? EMPTY B3 ???? EMPTY B4 ???? EMPTY B5 ???? EMPTY B6 ???? EMPTY B7 ???? EMPTY B8 ???? EMPTY B9 ???? EMPTY BA ???? EMPTY BB ???? EMPTY BC ???? EMPTY BD ???? EMPTY BE ???? EMPTY BF ???? EMPTY C0 ???? EMPTY C1 ???? EMPTY C2 ???? EMPTY C3 ???? EMPTY C4 ???? EMPTY C5 ???? EMPTY C6 ???? EMPTY C7 ???? EMPTY C8 ???? EMPTY C9 ???? EMPTY CA ???? EMPTY CB ???? EMPTY CC ???? EMPTY CD ???? EMPTY CE ???? EMPTY CF ???? EMPTY D0 ???? EMPTY D1 ???? EMPTY D2 ???? EMPTY D3 ???? EMPTY D4 ???? EMPTY D5 ???? EMPTY D6 ???? EMPTY D7 ???? EMPTY D8 ???? EMPTY D9 ???? EMPTY DA ???? EMPTY DB ???? EMPTY DC ???? EMPTY DD ???? EMPTY DE ???? EMPTY DF ???? EMPTY E0 ???? EMPTY E1 ???? EMPTY E2 ???? EMPTY E3 ???? EMPTY E4 ???? EMPTY E5 ???? EMPTY E6 ???? EMPTY E7 ???? EMPTY E8 ???? EMPTY E9 ???? EMPTY EA ???? EMPTY EB ???? EMPTY EC ???? EMPTY ED ???? EMPTY EE ???? EMPTY EF ???? EMPTY F0 ???? EMPTY F1 ???? EMPTY F2 ???? EMPTY F3 ???? EMPTY F4 ???? EMPTY F5 ???? EMPTY F6 ???? EMPTY F7 ???? EMPTY F8 ???? EMPTY F9 ???? EMPTY FA ???? EMPTY FB ???? EMPTY FC ???? EMPTY FD ???? EMPTY FE ???? EMPTY FF ???? EMPTY cyrus-imspd-v1.8/lib/Makefile.in0100644004310100000120000001107310035060404015771 0ustar shadowstaff# Makefile for cyrus library # # @configure_input@ # # Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # 3. The name "Carnegie Mellon University" must not be used to # endorse or promote products derived from this software without # prior written permission. For permission or any other legal # details, please contact # Office of Technology Transfer # Carnegie Mellon University # 5000 Forbes Avenue # Pittsburgh, PA 15213-3890 # (412) 268-4387, fax: (412) 268-7395 # tech-transfer@andrew.cmu.edu # # 4. Redistributions of any form whatsoever must retain the following # acknowledgment: # "This product includes software developed by Computing Services # at Carnegie Mellon University (http://www.cmu.edu/computing/)." # # CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO # THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE # FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN # AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING # OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # Authorization namespace. AUTH=auth_@WITH_AUTH@.o # ACL interpretation. Only one choice for now: ACL=acl_afs.o srcdir = @srcdir@ VPATH = @srcdir@ CC = @CC@ INSTALL = @INSTALL@ RANLIB = @RANLIB@ DEFS = @DEFS@ CPPFLAGS = -I.. @CPPFLAGS@ @SASLFLAGS@ LIBS = @LIBS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ SHELL = /bin/sh MAKEDEPEND = @MAKEDEPEND@ prefix = @prefix@ exec_prefix = @exec_prefix@ HDRS = $(srcdir)/acl.h $(srcdir)/assert.h $(srcdir)/auth.h \ $(srcdir)/bsearch.h $(srcdir)/charset.h $(srcdir)/glob.h \ $(srcdir)/gmtoff.h $(srcdir)/imclient.h $(srcdir)/imparse.h \ $(srcdir)/lock.h $(srcdir)/map.h $(srcdir)/mkgmtime.h \ $(srcdir)/nonblock.h $(srcdir)/parseaddr.h $(srcdir)/prot.h \ $(srcdir)/retry.h $(srcdir)/sysexits.h \ $(srcdir)/lsort.h $(srcdir)/stristr.h $(srcdir)/hash.h \ $(srcdir)/util.h $(srcdir)/xmalloc.h $(srcdir)/imapurl.h \ $(srcdir)/cyrusdb.h # Trim out some of the stuff we don't need for IMSP # OBJS = acl.o assert.o bsearch.o charset.o glob.o retry.o util.o \ # mkgmtime.o prot.o parseaddr.o imclient.o imparse.o xmalloc.o \ # lsort.o stristr.o hash.o \ # chartable.o imapurl.o nonblock_@WITH_NONBLOCK@.o lock_@WITH_LOCK@.o \ # gmtoff_@WITH_GMTOFF@.o map_@WITH_MAP@.o $(ACL) $(AUTH) \ # @LIBOBJS@ cyrusdb_db3.o cyrusdb_flat.o OBJS = acl.o assert.o bsearch.o charset.o glob.o retry.o util.o \ mkgmtime.o prot.o parseaddr.o imclient.o imparse.o xmalloc.o \ chartable.o nonblock_@WITH_NONBLOCK@.o lock_@WITH_LOCK@.o \ gmtoff_@WITH_GMTOFF@.o hash.o $(ACL) $(AUTH) iptostring.o \ @LIBOBJS@ all: libcyrus.a install: # Don't install any parts of libcyrus from the IMSP collection! # $(srcdir)/../install-sh -d $(DESTDIR)$(exec_prefix)/lib # $(INSTALL) -m 644 libcyrus.a $(DESTDIR)$(exec_prefix)/lib # $(RANLIB) $(DESTDIR)$(exec_prefix)/lib/libcyrus.a # for file in $(HDRS); \ # do \ # $(INSTALL) -m 644 $$file $(DESTDIR)$(prefix)/include/cyrus || exit 1; \ # done .c.o: $(CC) -c $(CPPFLAGS) $(DEFS) -I$(srcdir) -I. $(CFLAGS) \ $< libcyrus.a: $(OBJS) rm -f libcyrus.a ar cr libcyrus.a $(OBJS) $(RANLIB) libcyrus.a chartable.c: mkchartable @echo "### Building chartables..." rm -f chartable.c ./mkchartable \ -m $(srcdir)/charset/unifix.txt \ -m $(srcdir)/charset/unidata2.txt \ $(srcdir)/charset/*.t \ > chartable.c \ || (rm -f chartable.c && exit 1) @echo "### Done building chartables." # ./mkchartable -m $(srcdir)/charset/unicode.map $(srcdir)/charset/*.t >x-chartables.h # mv x-chartables.h chartables.h mkchartable: mkchartable.o xmalloc.o assert.o $(CC) $(LDFLAGS) -o mkchartable mkchartable.o xmalloc.o assert.o clean: rm -f *.o *.a chartable.c Makefile.bak mkchartable makedepend.log distclean: clean rm -f Makefile depend: ${MAKEDEPEND} $(CPPFLAGS) $(DEFS) -I$(srcdir) $(CFLAGS) *.c $(srcdir)/*.c 1>makedepend.log 2>&1 # DO NOT DELETE THIS LINE -- make depend depends on it. cyrus-imspd-v1.8/lib/acl.c0100644004310100000120000000747107214044430014644 0ustar shadowstaff/* acl.c -- routines for access control lists $Id: acl.c,v 1.3 2000/12/08 02:36:08 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 6/28/93 */ #include #include #include "acl.h" /* convert a string to an acl bit vector */ int acl_strtomask(str) const char *str; { long result = 0; while (*str) { switch (*str++) { case 'l': result |= ACL_LOOKUP; break; case 'r': result |= ACL_READ; break; case 's': result |= ACL_SEEN; break; case 'w': result |= ACL_WRITE; break; case 'i': result |= ACL_INSERT; break; case 'p': result |= ACL_POST; break; case 'c': result |= ACL_CREATE; break; case 'd': result |= ACL_DELETE; break; case 'a': result |= ACL_ADMIN; break; case '0': result |= ACL_USER0; break; case '1': result |= ACL_USER1; break; case '2': result |= ACL_USER2; break; case '3': result |= ACL_USER3; break; case '4': result |= ACL_USER4; break; case '5': result |= ACL_USER5; break; case '6': result |= ACL_USER6; break; case '7': result |= ACL_USER7; break; case '8': result |= ACL_USER8; break; case '9': result |= ACL_USER9; break; } } return (result); } /* convert an acl bit vector to a string */ char *acl_masktostr(acl, str) int acl; char *str; { char *pos = str; if (acl & ACL_LOOKUP) *pos++ = 'l'; if (acl & ACL_READ) *pos++ = 'r'; if (acl & ACL_SEEN) *pos++ = 's'; if (acl & ACL_WRITE) *pos++ = 'w'; if (acl & ACL_INSERT) *pos++ = 'i'; if (acl & ACL_POST) *pos++ = 'p'; if (acl & ACL_CREATE) *pos++ = 'c'; if (acl & ACL_DELETE) *pos++ = 'd'; if (acl & ACL_ADMIN) *pos++ = 'a'; if (acl & ACL_USER0) *pos++ = '0'; if (acl & ACL_USER1) *pos++ = '1'; if (acl & ACL_USER2) *pos++ = '2'; if (acl & ACL_USER3) *pos++ = '3'; if (acl & ACL_USER4) *pos++ = '4'; if (acl & ACL_USER5) *pos++ = '5'; if (acl & ACL_USER6) *pos++ = '6'; if (acl & ACL_USER7) *pos++ = '7'; if (acl & ACL_USER8) *pos++ = '8'; if (acl & ACL_USER9) *pos++ = '9'; *pos = '\0'; return (str); } cyrus-imspd-v1.8/lib/acl.h0100644004310100000120000001020107214044675014645 0ustar shadowstaff/* acl.h -- definitions for access control lists * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * * Author: Chris Newman * Start Date: 6/28/93 */ #ifndef INCLUDED_ACL_H #define INCLUDED_ACL_H #include "auth.h" /* max length of an acl string */ #define ACL_MAXSTR 32 /* ACL bits */ #define ACL_LOOKUP 0x00001L #define ACL_READ 0x00002L #define ACL_SEEN 0x00004L #define ACL_WRITE 0x00008L #define ACL_INSERT 0x00010L #define ACL_POST 0x00020L #define ACL_CREATE 0x00040L #define ACL_DELETE 0x00080L #define ACL_ADMIN 0x00100L #define ACL_ALL 0x001FFL #define ACL_USER0 0x00200L #define ACL_USER1 0x00400L #define ACL_USER2 0x00800L #define ACL_USER3 0x01000L #define ACL_USER4 0x02000L #define ACL_USER5 0x04000L #define ACL_USER6 0x08000L #define ACL_USER7 0x10000L #define ACL_USER8 0x20000L #define ACL_USER9 0x40000L #define ACL_FULL 0xFFFFFL #define ACL_MODE_SET 0 #define ACL_MODE_ADD 1 #define ACL_MODE_REMOVE 2 typedef int acl_canonproc_t(void *rock, const char *identifier, int rights); /* convert a string to an acl bit vector */ extern int acl_strtomask(const char *str); /* acl_masktostr(acl, dst) * convert an acl bit vector to a string * dst must have room for 32 characters (only 20 used currently) * returns dst */ extern char *acl_masktostr(int acl, char *str); /* acl_myrights(acl) * Calculate the set of rights the user in 'auth_state' has in the ACL 'acl'. * 'acl' must be writable, but is restored to its original condition. */ extern int acl_myrights(struct auth_state *auth_state, char *acl); /* acl_set(acl, identifier, mode, access, canonproc, canonrock) Modify the * ACL pointed to by 'acl' to modify the rights granted to * 'identifier' as specified by 'mode' and the set specified in the * mask 'access'. 'mode' is one of ACL_MODE_SET, ACL_MODE_ADD, or * ACL_MODE_REMOVE. The pointer pointed to by 'acl' must have been * obtained from malloc(). returns -1 on error, 0 on success */ extern int acl_set(char **acl, const char *identifier, int mode, int access, acl_canonproc_t *canonproc, void *canonrock); /* acl_remove(acl, identifier, canonproc, canonrock) * Remove any entry for 'identifier' in the ACL pointed to by 'acl'. * The pointer pointed to by 'acl' must have been obtained from malloc(). * returns -1 on error, 0 on success */ extern int acl_remove(char **acl, const char *identifier, acl_canonproc_t *canonproc, void *canonrock); #endif /* INCLUDED_ACL_H */ cyrus-imspd-v1.8/lib/acl_afs.c0100644004310100000120000001341307214044746015500 0ustar shadowstaff/* * AFS-style ACL interpretation * * The user gets the cumulative set of rights granted to identifiers * of which they are a member. Then, the cumulative set of negative * rights (rights granted to identifiers with '-' prepended to an * identifier of which they are a member) are removed. * */ /* $Id: acl_afs.c,v 1.3 2000/12/08 02:39:34 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #include "acl.h" #include "auth.h" #include "xmalloc.h" /* * Calculate the set of rights the user in 'auth_state' has in the ACL 'acl'. * 'acl' must be writable, but is restored to its original condition. */ int acl_myrights(auth_state, acl) struct auth_state *auth_state; char *acl; { char *thisid, *rights, *nextid; long acl_positive = 0, acl_negative = 0; long *acl_ptr; for (thisid = acl; *thisid; thisid = nextid) { acl_ptr = &acl_positive; rights = strchr(thisid, '\t'); if (!rights) { break; } *rights++ = '\0'; nextid = strchr(rights, '\t'); if (!nextid) { rights[-1] = '\t'; break; } *nextid++ = '\0'; if (*thisid == '-') { acl_ptr = &acl_negative; thisid++; } if (auth_memberof(auth_state, thisid)) { *acl_ptr |= acl_strtomask(rights); } /* Put the delimiters back */ rights[-1] = '\t'; nextid[-1] = '\t'; } return acl_positive & ~acl_negative; } /* * Modify the ACL pointed to by 'acl' to make the rights granted to * 'identifier' the set specified in the mask 'access'. The pointer * pointed to by 'acl' must have been obtained from malloc(). */ int acl_set(acl, identifier, mode, access, canonproc, canonrock) char **acl; const char *identifier; int mode; int access; acl_canonproc_t *canonproc; void *canonrock; { char *newidentifier = 0; char *newacl; char *thisid, *nextid; int oldaccess = 0; char *rights; /* Convert 'identifier' into canonical form */ if (*identifier == '-') { char *canonid = auth_canonifyid(identifier+1); if (!canonid) { return -1; } newidentifier = xmalloc(strlen(canonid)+2); newidentifier[0] = '-'; strcpy(newidentifier+1, canonid); identifier = newidentifier; if (canonproc) { access = ~(canonproc(canonrock, canonid, ~access)); } } else { identifier = auth_canonifyid(identifier); if (!identifier) { return -1; } if (canonproc) { access = canonproc(canonrock, identifier, access); } } /* Find any existing entry for 'identifier' in 'acl' */ for (thisid = nextid = *acl; *thisid; thisid = nextid) { rights = strchr(thisid, '\t'); if (!rights) { /* ACK, nuke trailing garbage */ *thisid = '\0'; nextid = thisid; break; } *rights++ = '\0'; nextid = strchr(rights, '\t'); if (!nextid) { /* ACK, nuke trailing garbage */ *thisid = '\0'; nextid = thisid; break; } *nextid++ = '\0'; if (strcmp(identifier, thisid) == 0) { oldaccess = acl_strtomask(rights); break; } rights[-1] = '\t'; nextid[-1] = '\t'; } switch (mode) { case ACL_MODE_SET: break; case ACL_MODE_ADD: access |= oldaccess; break; case ACL_MODE_REMOVE: access = oldaccess & ~access; break; } if (access == 0L) { /* Remove any existing entry for 'identifier' */ strcpy(thisid, nextid); } else { /* Replace any existing entry for 'identifier' */ newacl = xmalloc((thisid - *acl) + strlen(identifier) + 40 + strlen(nextid)); strncpy(newacl, *acl, (thisid - *acl)); strcpy(newacl + (thisid - *acl), identifier); strcat(newacl, "\t"); (void) acl_masktostr(access, newacl + strlen(newacl)); strcat(newacl, "\t"); strcat(newacl, nextid); free(*acl); *acl = newacl; } if (newidentifier) free(newidentifier); return 0; } /* * Remove any entry for 'identifier' in the ACL pointed to by 'acl'. * The pointer pointed to by 'acl' must have been obtained from malloc(). */ int acl_remove(char **acl, const char *identifier, acl_canonproc_t canonproc, void *canonrock) { return acl_set(acl, identifier, ACL_MODE_SET, 0, canonproc, canonrock); } cyrus-imspd-v1.8/lib/acte.c0100644004310100000120000000316106425166260015022 0ustar shadowstaff/* acte.c -- Common functions for SASL mechanisms * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without * fee, provided that the above copyright notice appear in all copies * and that both that copyright notice and this permission notice * appear in supporting documentation, and that the name of Carnegie * Mellon University not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. Carnegie Mellon University makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include "acte.h" char *acte_prottostring(protlevel) int protlevel; { switch (protlevel) { case ACTE_PROT_NONE: return "no protection"; case ACTE_PROT_INTEGRITY: return "integrity protection"; case ACTE_PROT_PRIVACY: return "privacy protection"; default: return "unknown"; } } cyrus-imspd-v1.8/lib/acte.h0100644004310100000120000000507106425166260015031 0ustar shadowstaff/* acte.h -- Interface for IMAP AUTHENTICATE mechanisms * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without * fee, provided that the above copyright notice appear in all copies * and that both that copyright notice and this permission notice * appear in supporting documentation, and that the name of Carnegie * Mellon University not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. Carnegie Mellon University makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ /* Client-side authentication mechanism */ struct acte_client { char *auth_type; /* Name of authentication mechanism */ int (*start)(); /* Start a client->server authentication */ int (*auth)(); /* Do an authentication protocol exchange */ void (*query_state)(); /* Query an authentication state */ void (*free_state)(); /* Free an authentication state */ char *(*new_cred)(); /* Acquire daemon's credentials */ void (*free_cred)(); /* Free daemon's credentials */ }; /* Server-side authentication mechanism */ struct acte_server { char *auth_type; /* Name of authentication mechanism */ int (*start)(); /* Start an incoming authentication */ int (*auth)(); /* Do an authentication protocol exchange */ void (*query_state)(); /* Query an authentication state */ void (*free_state)(); /* Free an authentication state */ char *(*get_cacheid)(); /* Get a cacheid, if available */ }; /* Protection mechanisms */ #define ACTE_PROT_NONE 1 #define ACTE_PROT_INTEGRITY 2 #define ACTE_PROT_PRIVACY 4 #define ACTE_PROT_ANY (ACTE_PROT_NONE|ACTE_PROT_INTEGRITY|ACTE_PROT_PRIVACY) #define ACTE_FAIL 1 /* Authentication failed */ #define ACTE_DONE 3 /* Server has authenticated user */ extern char *acte_prottostring(); cyrus-imspd-v1.8/lib/acte_krb.c0100644004310100000120000006375207765430153015677 0ustar shadowstaff/* acte_krb.c -- KERBEROS_V4 authentication routines for IMAP. * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without * fee, provided that the above copyright notice appear in all copies * and that both that copyright notice and this permission notice * appear in supporting documentation, and that the name of Carnegie * Mellon University not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. Carnegie Mellon University makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include #include #include #include #include #include #include #include "acte.h" extern char *malloc(); extern char *lcase(); extern char *krb_get_phost(), *krb_realmofhost(); static char *srvtab = ""; /* Srvtab filename */ /* Maximum number of bytes of overhead the protection mechanisms use */ #define PROTECTION_OVERHEAD 31 /* Private state used by this mechanism */ struct krb_state { /* common */ char service[MAX_K_NAME_SZ+1]; int authstepno; des_cblock session; /* Our session key */ des_key_schedule schedule; /* Schedule for our session key */ long challenge; char user[MAX_K_NAME_SZ+1]; int protallowed; int maxbufsize; struct sockaddr_in localaddr, remoteaddr; long prot_time_sec; char prot_time_5ms; /* client */ char instance[INST_SZ]; char realm[REALM_SZ]; /* server */ int (*authproc)(); AUTH_DAT kdata; }; /* * Free the space used by an opaque state pointer */ static void krb_free_state(state) void *state; { memset((char *)state, 0, sizeof(struct krb_state)); free((char *) state); } static char *krb_en_integrity(), *krb_de_integrity(); #ifndef NOPRIVACY static char *krb_en_privacy(), *krb_de_privacy(); #endif /* * Query public values of the state pointer after authentiation * complete. Fills in buffers pointed to by the following arguments: * * user -- IMAP userid authenticated as * protlevel -- bitmask for selected protection mechanism * encodefunc -- if nonzero, protection mechanism function to encode * outgoing data with. * decodefunc -- if nonzero, protection mechanism function to decode * incoming data with. * maxplain -- The maximum number of bytes that may be encoded by * the encodefunc at one time */ static void krb_query_state(state, user, protlevel, encodefunc, decodefunc, maxplain) void *state; char **user; int *protlevel; char *(**encodefunc)(); char *(**decodefunc)(); int *maxplain; { struct krb_state *kstate = (struct krb_state *)state; *user = kstate->user; *protlevel = kstate->protallowed; switch (kstate->protallowed) { case ACTE_PROT_NONE: *encodefunc = *decodefunc = 0; *maxplain = 0; return; case ACTE_PROT_INTEGRITY: *encodefunc = krb_en_integrity; *decodefunc = krb_de_integrity; *maxplain = kstate->maxbufsize - PROTECTION_OVERHEAD; return; #ifndef NOPRIVACY case ACTE_PROT_PRIVACY: *encodefunc = krb_en_privacy; *decodefunc = krb_de_privacy; *maxplain = kstate->maxbufsize - PROTECTION_OVERHEAD; return; #endif default: abort(); } } /* * Get the cacheid for 'state' */ static char * krb_get_cacheid(state) void *state; { char *cacheid; struct krb_state *kstate = (struct krb_state *)state; cacheid = malloc(16); if (!cacheid) return 0; memset(cacheid, 0, sizeof(cacheid)); memcpy(cacheid, kstate->session, sizeof(kstate->session)); return cacheid; } /* * Start the client side of an authentication exchange. */ static int krb_client_start(service, host, user, protallowed, maxbufsize, localaddr, remoteaddr, state) char *service; /* Name of service */ char *host; /* Name of server host */ char *user; /* (optional) user to log in as */ int protallowed; /* Protection mechanisms allowed */ int maxbufsize; /* Maximum ciphertext input buffer size */ struct sockaddr *localaddr; /* Network address of local side */ struct sockaddr *remoteaddr; /* Network address of remote side */ void **state; /* On success, filled in with state ptr */ { struct hostent *host_name; char userbuf[MAX_K_NAME_SZ+1]; char instance[INST_SZ]; char realm[REALM_SZ]; char uinst[INST_SZ]; char urealm[INST_SZ]; KTEXT_ST authent; CREDENTIALS cr; struct krb_state *kstate; char *p; protallowed &= ACTE_PROT_NONE|ACTE_PROT_INTEGRITY #ifndef NOPRIVACY |ACTE_PROT_PRIVACY #endif ; if (!localaddr || !remoteaddr) { protallowed &= ACTE_PROT_NONE; } if (!protallowed) { return ACTE_FAIL; } if (maxbufsize > 0xffffff) maxbufsize = 0xffffff; /* Canonicalize hostname */ host_name = gethostbyname(host); if (!host_name) { return ACTE_FAIL; } strncpy(instance, host_name->h_name, sizeof(instance)-1); instance[sizeof(instance)-1] = '\0'; if (p = strchr(instance, '.')) *p = '\0'; strcpy(realm, krb_realmofhost(host_name->h_name)); /* Fetch imap.hostname service key */ (void) krb_mk_req(&authent, service, instance, realm, 0); memset(&authent, 0, sizeof(authent)); if (krb_get_cred(service, instance, realm, &cr)) { return ACTE_FAIL; } if (!user || !user[0]) { user = userbuf; if (krb_get_tf_fullname(TKT_FILE, user, uinst, urealm)) { memset(&cr, 0, sizeof(cr)); return ACTE_FAIL; } if (uinst[0]) { strcat(user, "."); strcat(user, uinst); } if (strcmp(urealm, realm) != 0) { strcat(user, "@"); strcat(user, urealm); } } else if (strlen(user) > MAX_K_NAME_SZ) { return ACTE_FAIL; } kstate = (struct krb_state *)malloc(sizeof(struct krb_state)); if (!kstate) return ACTE_FAIL; memset((char *)kstate, 0, sizeof(*kstate)); strcpy(kstate->service, service); kstate->authstepno = 0; memcpy(kstate->session, cr.session, sizeof(des_cblock)); des_key_sched(kstate->session, kstate->schedule); strcpy(kstate->user, user); kstate->protallowed = protallowed; kstate->maxbufsize = maxbufsize; if (localaddr && remoteaddr) { kstate->localaddr = *(struct sockaddr_in *)localaddr; kstate->remoteaddr = *(struct sockaddr_in *)remoteaddr; } strcpy(kstate->instance, instance); strcpy(kstate->realm, realm); memset(&cr, 0, sizeof(cr)); *state = (void *)kstate; return 0; } /* * Perform client-side authentication protocol exchange * Returns ACTE_DONE if authentication can be complete after * sending our client reply. */ static int krb_client_auth(state, inputlen, input, outputlen, output) void *state; /* State of exchange */ int inputlen; /* Length of server response */ char *input; /* Server response data */ int *outputlen; /* Set to length of client reply */ char **output; /* Set to point to client reply data */ { static KTEXT_ST authent; struct krb_state *kstate = (struct krb_state *)state; char tmp[4]; int code; int maxbufsize; switch (kstate->authstepno++) { case 0: /* Server gave us challenge, respond with ticket+authenticator */ if (inputlen < 4) { kstate->authstepno = -1; return ACTE_FAIL; } memcpy(tmp, input, 4); kstate->challenge = ntohl(*(int *)tmp); code = krb_mk_req(&authent, kstate->service, kstate->instance, kstate->realm, kstate->challenge); if (code) { kstate->authstepno = -1; return ACTE_FAIL; } *outputlen = authent.length; *output = authent.dat; return 0; case 1: /* * Server gave us mutual auth reply+available protection mechanisms. * Respond with challenge, desired protection mechanism, userid */ if (inputlen < 8) { kstate->authstepno = -1; return ACTE_FAIL; } des_ecb_encrypt(input, input, kstate->schedule, 0); memcpy(tmp, input, 4); if (ntohl(*(int *)tmp) != kstate->challenge + 1) { /* Server failed to mutually authenticte */ kstate->authstepno = -1; return ACTE_FAIL; } memcpy(tmp, input+4, 4); maxbufsize = ntohl(*(int *)tmp) & 0xfffff; kstate->protallowed &= input[4]; if (maxbufsize <= PROTECTION_OVERHEAD) { /* Protection buffer too small */ kstate->protallowed &= ACTE_PROT_NONE; } #ifndef NOPRIVACY if (kstate->protallowed & ACTE_PROT_PRIVACY) { kstate->protallowed = ACTE_PROT_PRIVACY; } else #endif if (kstate->protallowed & ACTE_PROT_INTEGRITY) { kstate->protallowed = ACTE_PROT_INTEGRITY; } else if (kstate->protallowed & ACTE_PROT_NONE) { kstate->protallowed = ACTE_PROT_NONE; } else { /* No mutually agreeable protection mechanism */ kstate->authstepno = -1; return ACTE_FAIL; } *(int *)authent.dat = htonl(kstate->challenge); *(int *)(authent.dat+4) = htonl(kstate->maxbufsize); authent.dat[4] = kstate->protallowed; strcpy(&authent.dat[8], kstate->user); authent.length = 8+strlen(kstate->user); do { authent.dat[authent.length++] = '\0'; } while (authent.length & 7); des_pcbc_encrypt(authent.dat, authent.dat, authent.length, kstate->schedule, kstate->session, 1); *output = authent.dat; *outputlen = authent.length; if (maxbufsize < kstate->maxbufsize) kstate->maxbufsize = maxbufsize; return ACTE_DONE; default: kstate->authstepno = -1; return ACTE_FAIL; } } /* * Acquire daemon client credentials for 'service'. Places lifetime * of credentials in seconds in the buffer pointed to by 'lifetime' * Returns error message on failure, NULL on success. */ static char * krb_new_cred(service, lifetime) char *service; time_t *lifetime; { static int inited = 0; char hostname[MAXHOSTNAMELEN+1]; char instance[MAXHOSTNAMELEN+1]; char realm[REALM_SZ]; char tktstring[256]; int r; CREDENTIALS cr; if (!inited++) { snprintf(tktstring, sizeof(tktstring), "/tmp/tkt_pid_%d", getpid()); krb_set_tkt_string(tktstring); } if (krb_get_lrealm(realm,1) != KSUCCESS) { return "cannot get local Kerberos realm"; } gethostname(hostname, sizeof(hostname)); strcpy(instance, krb_get_phost(hostname)); r = krb_get_svc_in_tkt(service, instance, realm, "krbtgt", realm, 127, srvtab); if (!r) { r = krb_get_cred("krbtgt", realm, realm, &cr); if (!r) *lifetime = cr.lifetime*5*60; memset((char *)&cr, 0, sizeof(cr)); } if (r) return krb_err_txt[r]; return 0; } static void krb_free_cred() { dest_tkt(); } /* Exported definition of client-side authentication mechanism */ struct acte_client krb_acte_client = { "KERBEROS_V4", krb_client_start, krb_client_auth, krb_query_state, krb_free_state, krb_new_cred, krb_free_cred, }; /* * Start the server side of an authentication exchange */ static int krb_server_start(service, authproc, protallowed, maxbufsize, localaddr, remoteaddr, outputlen, output, state, reply) char *service; int (*authproc)(); /* (optional) function to decide * authoriztion to log in as given user */ int protallowed; /* Protection mechanisms allowed */ int maxbufsize; /* Maximum ciphertext input buffer size */ struct sockaddr *localaddr; /* Network address of local side */ struct sockaddr *remoteaddr; /* Network address of remote side */ int *outputlen; /* Set to length of initial reply */ char **output; /* Set to point to initial reply data */ void **state; /* On success, filled in with state ptr */ char **reply; /* On failure, filled in with ptr to reason */ { static char outputbuf[4]; struct krb_state *kstate; protallowed &= ACTE_PROT_NONE|ACTE_PROT_INTEGRITY #ifndef NOPRIVACY |ACTE_PROT_PRIVACY #endif ; if (!localaddr || !remoteaddr) { protallowed &= ACTE_PROT_NONE; } if (!protallowed) { *reply = "No suitable protection mechanism"; return ACTE_FAIL; } if (maxbufsize > 0xffffff) maxbufsize = 0xffffff; kstate = (struct krb_state *)malloc(sizeof(struct krb_state)); if (!kstate) { *reply = "Out of memory"; return ACTE_FAIL; } memset((char *)kstate, 0, sizeof(*kstate)); strcpy(kstate->service, service); kstate->authstepno = 0; kstate->challenge = time(0) ^ getpid(); kstate->protallowed = protallowed; kstate->maxbufsize = maxbufsize; if (localaddr && remoteaddr) { kstate->localaddr = *(struct sockaddr_in *)localaddr; kstate->remoteaddr = *(struct sockaddr_in *)remoteaddr; } kstate->authproc = authproc; *(int *)outputbuf = htonl(kstate->challenge); *output = outputbuf; *outputlen = 4; *state = (void *)kstate; return 0; } /* * Perform server-side authentication protocol exchange. * Returns 0 to continue exchange, ACTE_FAIL on failure, and ACTE_DONE * if user is now successfully authenticated */ static int krb_server_auth(state, inputlen, input, outputlen, output, reply) void *state; /* State of exchange */ int inputlen; /* Length of client response */ char *input; /* Client response data */ int *outputlen; /* Set to length of server reply */ char **output; /* Set to point to server reply data */ char **reply; /* On failure, filled in with ptr to reason */ { struct krb_state *kstate = (struct krb_state *)state; static char outputbuf[8]; KTEXT_ST authent; int code; char tmp[4]; char instance[INST_SZ]; char realm[REALM_SZ]; int protallowed; int maxbufsize; char clientname[MAX_K_NAME_SZ+1]; switch (kstate->authstepno++) { case 0: /* * Client gave us ticket+authenticator * reply with mutual auth + supported protection mechanisms */ if (inputlen > MAX_KTXT_LEN) { kstate->authstepno = -1; *reply = "Kerberos authenticator too long"; return ACTE_FAIL; } authent.length = inputlen; memcpy(authent.dat, input, inputlen); authent.mbz = 0; strcpy(instance, "*"); code = krb_rd_req(&authent, kstate->service, instance, 0L, &kstate->kdata, srvtab); if (code) { kstate->authstepno = -1; *reply = krb_err_txt[code]; return ACTE_FAIL; } if (kstate->kdata.checksum != kstate->challenge) { kstate->authstepno = -1; *reply = "Incorrect checksum in Kerberos authenticator"; return ACTE_FAIL; } memcpy(kstate->session, kstate->kdata.session, sizeof(des_cblock)); des_key_sched(kstate->session, kstate->schedule); *(int *)outputbuf = htonl(kstate->challenge+1); *(int *)(outputbuf+4) = htonl(kstate->maxbufsize); outputbuf[4] = kstate->protallowed; des_ecb_encrypt(outputbuf, outputbuf, kstate->schedule, 1); *output = outputbuf; *outputlen = 8; return 0; case 1: /* Client gave us selected protection mechanism + userid, we're done */ if (inputlen < 16 || inputlen & 7) { kstate->authstepno = -1; *reply = "Kerberos authenticator has incorrect length"; return ACTE_FAIL; } des_pcbc_encrypt(input, input, inputlen, kstate->schedule, kstate->session, 0); memcpy(tmp, input, 4); if (ntohl(*(int *)tmp) != kstate->challenge) { kstate->authstepno = -1; *reply = "Incorrect checksum in Kerberos authenticator"; return ACTE_FAIL; } memcpy(tmp, input+4, 4); maxbufsize = ntohl(*(int *)tmp) & 0xfffff; if (maxbufsize < kstate->maxbufsize) kstate->maxbufsize = maxbufsize; protallowed = input[4]; if (!(protallowed & kstate->protallowed)) { kstate->authstepno = -1; *reply = "No suitable protection mechanism selected"; return ACTE_FAIL; } if ( #ifndef NOPRIVACY protallowed != ACTE_PROT_PRIVACY && #endif protallowed != ACTE_PROT_INTEGRITY && protallowed != ACTE_PROT_NONE) { kstate->authstepno = -1; *reply = "Multiple protection mechanisms selected"; return ACTE_FAIL; } if (protallowed != ACTE_PROT_NONE && kstate->maxbufsize <= PROTECTION_OVERHEAD) { /* Protection buffer too small */ kstate->authstepno = -1; *reply = "Protection buffer size too small"; return ACTE_FAIL; } kstate->protallowed = protallowed; if (input[inputlen-1] != '\0') { *reply = "User name not nul-terminated"; return ACTE_FAIL; } strcpy(kstate->user, input+8); /* Check kerberos identity can log in as user */ if (krb_get_lrealm(realm,1)) { *reply = "Can't find local Kerberos realm"; return ACTE_FAIL; } if (kstate->authproc) { strcpy(clientname, kstate->kdata.pname); if (kstate->kdata.pinst[0]) { strcat(clientname, "."); strcat(clientname, kstate->kdata.pinst); } if (kstate->kdata.prealm[0]) { strcat(clientname, "@"); strcat(clientname, kstate->kdata.prealm); } if (kstate->authproc(kstate->user, clientname, reply) != 0) { return ACTE_FAIL; } } else { if (strcmp(kstate->kdata.pname, kstate->user) != 0 || kstate->kdata.pinst[0] || strcmp(kstate->kdata.prealm, realm) != 0) { *reply = "Kerberos ID does not match user name"; return ACTE_FAIL; } } return ACTE_DONE; default: *reply = "Internal error: invalid state in krb_server_auth"; return ACTE_FAIL; } } /* Exported definition of server-side authentication mechanism */ struct acte_server krb_acte_server = { "KERBEROS_V4", krb_server_start, krb_server_auth, krb_query_state, krb_free_state, krb_get_cacheid, }; /* * Apply integrity protection to the 'inputlen' bytes of data at 'input', * using the state in 'state', placing the output data and length in the * buffers pointed to by 'output' and 'outputlen' respectively. */ static char *krb_en_integrity(state, input, inputlen, output, outputlen) void *state; char *input; int inputlen; char *output; int *outputlen; { struct krb_state *kstate = (struct krb_state *)state; *outputlen = krb_mk_safe(input, output, inputlen, kstate->session, &kstate->localaddr, &kstate->remoteaddr); return 0; } /* * Decode integrity protection on the 'inputlen' bytes of data at * 'input', using the state in 'state', placing a pointer to the * output data and length in the buffers pointed to by 'output' and * 'outputlen' respectively. */ static char *krb_de_integrity(state, input, inputlen, output, outputlen) void *state; char *input; int inputlen; char **output; int *outputlen; { struct krb_state *kstate = (struct krb_state *)state; int code; MSG_DAT m_data; code = krb_rd_safe(input, inputlen, kstate->session, &kstate->remoteaddr, &kstate->localaddr, &m_data); if (code) return krb_err_txt[code]; if (m_data.time_sec < kstate->prot_time_sec || (m_data.time_sec == kstate->prot_time_sec && m_data.time_5ms < kstate->prot_time_5ms)) { return krb_err_txt[RD_AP_TIME]; } kstate->prot_time_sec = m_data.time_sec; kstate->prot_time_5ms = m_data.time_5ms; *output = m_data.app_data; *outputlen = m_data.app_length; return 0; } #ifndef NOPRIVACY /* * Apply privacy protection to the 'inputlen' bytes of data at 'input', * using the state in 'state', placing the output data and length in the * buffers pointed to by 'output' and 'outputlen' respectively. */ static char *krb_en_privacy(state, input, inputlen, output, outputlen) void *state; char *input; int inputlen; char *output; int *outputlen; { struct krb_state *kstate = (struct krb_state *)state; *outputlen = krb_mk_priv(input, output, inputlen, kstate->schedule, kstate->session, &kstate->localaddr, &kstate->remoteaddr); return 0; } /* * Decode privacy protection on the 'inputlen' bytes of data at * 'input', using the state in 'state', placing a pointer to the * output data and length in the buffers pointed to by 'output' and * 'outputlen' respectively. */ static char *krb_de_privacy(state, input, inputlen, output, outputlen) void *state; char *input; int inputlen; char **output; int *outputlen; { struct krb_state *kstate = (struct krb_state *)state; int code; MSG_DAT m_data; code = krb_rd_priv(input, inputlen, kstate->schedule, kstate->session, &kstate->remoteaddr, &kstate->localaddr, &m_data); if (code) return krb_err_txt[code]; if (m_data.time_sec < kstate->prot_time_sec || (m_data.time_sec == kstate->prot_time_sec && m_data.time_5ms < kstate->prot_time_5ms)) { return krb_err_txt[RD_AP_TIME]; } kstate->prot_time_sec = m_data.time_sec; kstate->prot_time_5ms = m_data.time_5ms; *output = m_data.app_data; *outputlen = m_data.app_length; return 0; } #endif /* !NOPRIVACY */ /* * Kerberos set srvtab filename * Accepts: name of srvtab file to use in reading authenticators */ int kerberos_set_srvtab(fname) char *fname; { srvtab = fname; return 0; } /* * Kerberos get srvtab filename * Returns: name of srvtab file to use in reading authenticators */ char *kerberos_get_srvtab() { return srvtab; } static use_key(user, instance, realm, key, returned_key) char *user; char *instance; char *realm; des_cblock key; des_cblock returned_key; { memcpy (returned_key, key, sizeof(des_cblock)); return 0; } /* * Securely verify the plaintext password 'passwd' for user 'user' * against the Kerberos database. "service" is the name of a service * we can verify the returned ticket against. Returns 1 for success, * 0 for failure. On failure, 'reply' is filled in with a pointer to * the reason. */ int kerberos_verify_password(user, passwd, service, reply) char *user; char *passwd; char *service; char **reply; { int result; des_cblock key; char tfname[40]; char realm[REALM_SZ]; char cell[REALM_SZ]; char hostname[MAXHOSTNAMELEN+1]; char phost[MAXHOSTNAMELEN+1]; KTEXT_ST authent; char instance[INST_SZ]; AUTH_DAT kdata; if (krb_get_lrealm(realm,1)) return 0; snprintf(tfname, sizeof(tfname),"/tmp/tkt_imapd_%d", getpid()); krb_set_tkt_string(tfname); /* First try Kerberos string-to-key */ des_string_to_key(passwd, key); result = krb_get_in_tkt(user, "", realm, "krbtgt", realm, 1, use_key, NULL, key); if (result == INTK_BADPW) { /* Now try andrew string-to-key */ strcpy(cell, realm); lcase(cell); afs_string_to_key(passwd, cell, key); result = krb_get_in_tkt(user, "", realm, "krbtgt", realm, 1, use_key, NULL, key); } memset(key, 0, sizeof(key)); if (result != 0) { dest_tkt(); *reply = krb_err_txt[result]; return 0; } /* Check validity of returned ticket */ gethostname(hostname, sizeof(hostname)); strcpy(phost, krb_get_phost(hostname)); result = krb_mk_req(&authent, service, phost, realm, 0); if (result != 0) { memset(&authent, 0, sizeof(authent)); dest_tkt(); *reply = krb_err_txt[result]; return 0; } strcpy(instance, "*"); result = krb_rd_req(&authent, service, instance, 0L, &kdata, srvtab); memset(&authent, 0, sizeof(authent)); memset(kdata.session, 0, sizeof(kdata.session)); if (result != 0 || strcmp(kdata.pname, user) != 0 || kdata.pinst[0] || strcmp(kdata.prealm, realm) != 0) { if (result != 0) { *reply = krb_err_txt[result]; } else { *reply = "Kerberos ID does not match user name"; } result = 0; } else result = 1; dest_tkt(); return result; } /* andrewstk.c -- afs string to key function * * Code taken from AuthMan from University of Michigan */ /* forward declarations */ static afs_transarc_StringToKey(); static afs_cmu_StringToKey(); extern char *crypt(); /* This defines the Andrew string_to_key function. It accepts a password * string as input and converts its via a one-way encryption algorithm to a DES * encryption key. It is compatible with the original Andrew authentication * service password database. */ static afs_cmu_StringToKey (str, cell, key) char *str; char *cell; /* cell for password */ des_cblock key; { char password[8+1]; /* crypt is limited to 8 chars anyway */ int i; int passlen; memset(key, 0, sizeof(des_cblock)); memset((void *)password, 0, sizeof(password)); strncpy (password, cell, 8); passlen = strlen (str); if (passlen > 8) passlen = 8; for (i=0; i sizeof(password)) passlen = sizeof(password); memcpy (ivec, "kerberos", 8); memcpy (temp_key, "kerberos", 8); des_fixup_key_parity ((void *)temp_key); des_key_sched (temp_key, schedule); des_cbc_cksum (password, ivec, passlen, schedule, ivec); memcpy (temp_key, ivec, 8); des_fixup_key_parity ((void *)temp_key); des_key_sched (temp_key, schedule); des_cbc_cksum (password, (void *)key, passlen, schedule, ivec); des_fixup_key_parity (key); } cyrus-imspd-v1.8/lib/assert.c0100644004310100000120000000433607765430153015417 0ustar shadowstaff/* assert.c -- handle assertion failures $Id: assert.c,v 1.4 2003/12/09 20:28:27 cdaboo Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include "xmalloc.h" #include "exitcodes.h" #include "assert.h" int assertionfailed(file, line, expr) const char *file; int line; const char *expr; { char buf[1024]; snprintf(buf, sizeof(buf), "Internal error: assertion failed: %s: %d%s%s", file, line, expr ? ": " : "", expr ? expr : ""); fatal(buf, EC_SOFTWARE); } cyrus-imspd-v1.8/lib/assert.h0100644004310100000120000000427307214045057015416 0ustar shadowstaff/* assert.h -- assert() macro that can exit cleanly $Id: assert.h,v 1.3 2000/12/08 02:40:47 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_ASSERT_H #define INCLUDED_ASSERT_H #ifdef __STDC__ #define assert(ex) {if (!(ex))assertionfailed(__FILE__, __LINE__, #ex);} int assertionfailed(const char *file, int line, const char *expr); #else #define assert(ex) {if (!(ex))assertionfailed(__FILE__, __LINE__, (char*)0);} #endif #endif /* INCLUDED_ASSERT_H */ cyrus-imspd-v1.8/lib/auth.h0100644004310100000120000000434507214045203015047 0ustar shadowstaff/* auth.h -- Site authorization module $Id: auth.h,v 1.3 2000/12/08 02:42:11 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_AUTH_H #define INCLUDED_AUTH_H struct auth_state; extern int auth_memberof(struct auth_state *auth_state, const char *identifier); extern char *auth_canonifyid(const char *identifier); extern struct auth_state *auth_newstate(const char *identifier, const char *cacheid); extern void auth_freestate(struct auth_state *auth_state); #endif /* INCLUDED_AUTH_H */ cyrus-imspd-v1.8/lib/auth_krb.c0100644004310100000120000002074207214045302015677 0ustar shadowstaff/* auth_krb.c -- Kerberos authorization $Id: auth_krb.c,v 1.3 2000/12/08 02:43:14 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #include #include #include #include #include #include #include #include #ifdef HAVE_LIBDB #ifdef HAVE_DB_185_H #include #else #include #endif #else #include #endif #include #include "xmalloc.h" #include "auth.h" #ifndef KRB_MAPNAME #define KRB_MAPNAME "/etc/krb.equiv" #endif struct auth_state { char userid[MAX_K_NAME_SZ+1]; char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; }; static struct auth_state auth_anonymous = { "anonymous", "anonymous", "", "" }; static int parse_krbequiv_line (const char *src, char *principal, char *localuser); char *auth_map_krbid (const char *real_aname, const char *real_inst, const char *real_realm); /* * Determine if the user is a member of 'identifier' * Returns one of: * 0 User does not match identifier * 1 identifier matches everybody * 2 User is in the group that is identifier * 3 User is identifer */ int auth_memberof(auth_state, identifier) struct auth_state *auth_state; const char *identifier; { char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; if (!auth_state) auth_state = &auth_anonymous; if (strcmp(identifier, "anyone") == 0) return 1; if (strcmp(identifier, auth_state->userid) == 0) return 3; /* "anonymous" is not a member of any group */ if (strcmp(auth_state->userid, "anonymous") == 0) return 0; aname[0] = inst[0] = realm[0] = '\0'; if (kname_parse(aname, inst, realm, (char *) identifier) != 0) { return 0; } if (strcmp(aname, auth_state->aname) != 0 && strcmp(aname, "*") != 0) { return 0; } if (strcmp(inst, auth_state->inst) != 0 && strcmp(inst, "*") != 0) { return 0; } if (strcmp(realm, auth_state->realm) != 0 && strcmp(realm, "*") != 0) { return 0; } return 2; } /* * Parse a line 'src' from an /etc/krb.equiv file. * Sets the buffer pointed to by 'principal' to be the kerberos * identity and sets the buffer pointed to by 'localuser' to * be the local user. Both buffers must be of size one larger than * MAX_K_NAME_SZ. Returns 1 on success, 0 on failure. */ static int parse_krbequiv_line(src, principal, localuser) const char *src; char *principal; char *localuser; { int i; while (isspace(*src)) src++; if (!*src) return 0; for (i = 0; *src && !isspace(*src); i++) { if (i >= MAX_K_NAME_SZ) return 0; *principal++ = *src++; } *principal = 0; if (!isspace(*src)) return 0; /* Need at least one separator */ while (isspace(*src)) src++; if (!*src) return 0; for (i = 0; *src && !isspace(*src); i++) { if (i >= MAX_K_NAME_SZ) return 0; *localuser++ = *src++; } *localuser = 0; return 1; } /* * Map a remote kerberos principal to a local username. If a mapping * is found, a pointer to the local username is returned. Otherwise, * a NULL pointer is returned. * Eventually, this may be more sophisticated than a simple file scan. */ char *auth_map_krbid(real_aname, real_inst, real_realm) const char *real_aname; const char *real_inst; const char *real_realm; { static char localuser[MAX_K_NAME_SZ + 1]; char principal[MAX_K_NAME_SZ + 1]; char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; char lrealm[REALM_SZ]; char krbhst[256]; char *p; char buf[1024]; FILE *mapfile; if (!(mapfile = fopen(KRB_MAPNAME, "r"))) { /* If the file can't be opened, don't do mappings */ return 0; } for (;;) { if (!fgets(buf, sizeof(buf), mapfile)) break; if (parse_krbequiv_line(buf, principal, localuser) == 0 || kname_parse(aname, inst, realm, principal) != 0) { /* Ignore badly formed lines */ continue; } if (!strcmp(aname, real_aname) && !strcmp(inst, real_inst) && !strcmp(realm, real_realm)) { fclose(mapfile); aname[0] = inst[0] = realm[0] = '\0'; if (kname_parse(aname, inst, realm, localuser) != 0) { return 0; } /* Upcase realm name */ for (p = realm; *p; p++) { if (islower(*p)) *p = toupper(*p); } if (*realm) { if (krb_get_lrealm(lrealm,1) == 0 && strcmp(lrealm, realm) == 0) { *realm = 0; } else if (krb_get_krbhst(krbhst, realm, 1)) { return 0; /* Unknown realm */ } } strcpy(localuser, aname); if (*inst) { strcat(localuser, "."); strcat(localuser, inst); } if (*realm) { strcat(localuser, "@"); strcat(localuser, realm); } return localuser; } } fclose(mapfile); return 0; } /* * Convert 'identifier' into canonical form. * Returns a pointer to a static buffer containing the canonical form * or NULL if 'identifier' is invalid. */ char *auth_canonifyid(identifier) const char *identifier; { static char retbuf[MAX_K_NAME_SZ+1]; char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; char lrealm[REALM_SZ]; char krbhst[256]; char *p; if (strcasecmp(identifier, "anonymous") == 0) { return "anonymous"; } if (strcasecmp(identifier, "anybody") == 0 || strcasecmp(identifier, "anyone") == 0) { return "anyone"; } aname[0] = inst[0] = realm[0] = '\0'; if (kname_parse(aname, inst, realm, (char *) identifier) != 0) { return 0; } /* Upcase realm name */ for (p = realm; *p; p++) { if (islower(*p)) *p = toupper(*p); } if (*realm) { if (krb_get_lrealm(lrealm,1) == 0 && strcmp(lrealm, realm) == 0) { *realm = 0; } else if (krb_get_krbhst(krbhst, realm, 1)) { return 0; /* Unknown realm */ } } /* Check for krb.equiv remappings. */ if ((p = auth_map_krbid(aname, inst, realm)) ) { strcpy(retbuf, p); return retbuf; } strcpy(retbuf, aname); if (*inst) { strcat(retbuf, "."); strcat(retbuf, inst); } if (*realm) { strcat(retbuf, "@"); strcat(retbuf, realm); } return retbuf; } /* * Set the current user to 'identifier'. 'cacheid', if non-null, * points to a 16-byte binary key to cache identifier's information * with. */ struct auth_state * auth_newstate(identifier, cacheid) const char *identifier; const char *cacheid; { struct auth_state *newstate; identifier = auth_canonifyid(identifier); if (!identifier) return 0; newstate = (struct auth_state *)xmalloc(sizeof(struct auth_state)); strcpy(newstate->userid, identifier); newstate->aname[0] = newstate->inst[0] = newstate->realm[0] = '\0'; kname_parse(newstate->aname, newstate->inst, newstate->realm, (char *) identifier); return newstate; } void auth_freestate(auth_state) struct auth_state *auth_state; { free((char *)auth_state); } cyrus-imspd-v1.8/lib/auth_krb_pts.c0100644004310100000120000004015310073007630016562 0ustar shadowstaff/* auth_krb_pts.c -- Kerberos authorization with AFS PTServer groups * $Id: auth_krb_pts.c,v 1.9 2004/07/07 14:58:32 rjs3 Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "auth_krb_pts.h" #include "auth.h" #include "lock.h" #include "retry.h" #include "xmalloc.h" #include "hash.h" const char *auth_method_desc = "krb_pts"; #ifndef KRB_MAPNAME #define KRB_MAPNAME "/etc/krb.equiv" #endif static int parse_krbequiv_line(const char *src, char *principal, char *localuser); char *auth_map_krbid(const char *real_aname, const char *real_inst, const char *real_realm); /* * Determine if the user is a member of 'identifier' * Returns one of: * 0 User does not match identifier * 1 identifier matches everybody * 2 User is in the group that is identifier * 3 User is identifer */ int auth_memberof(struct auth_state *auth_state, const char *identifier) { int i; unsigned idhash = hash(identifier); static unsigned anyonehash = 0; anyonehash = !anyonehash ? hash("anyone") : anyonehash; if (!auth_state) { /* special case anonymous */ if (!strcmp(identifier, "anyone")) return 1; else if (!strcmp(identifier, "anonymous")) return 3; /* "anonymous" is not a member of any group */ else return 0; } /* is 'identifier' "anyone"? */ if (idhash == anyonehash && !strcmp(identifier, "anyone")) return 1; /* is 'identifier' me? */ if (idhash == auth_state->userid.hash && !strcmp(identifier, auth_state->userid.id)) return 3; /* is it a group i'm a member of ? */ for (i=0; i < auth_state->ngroups; i++) if (idhash == auth_state->groups[i].hash && !strcmp(identifier, auth_state->groups[i].id)) return 2; return 0; } /* * Parse a line 'src' from an /etc/krb.equiv file. * Sets the buffer pointed to by 'principal' to be the kerberos * identity and sets the buffer pointed to by 'localuser' to * be the local user. Both buffers must be of size one larger than * MAX_K_NAME_SZ. Returns 1 on success, 0 on failure. */ static int parse_krbequiv_line(const char *src, char *principal, char *localuser) { int i; while (isspace(*src)) src++; if (!*src) return 0; for (i = 0; *src && !isspace(*src); i++) { if (i >= MAX_K_NAME_SZ) return 0; *principal++ = *src++; } *principal = 0; if (!isspace(*src)) return 0; /* Need at least one separator */ while (isspace(*src)) src++; if (!*src) return 0; for (i = 0; *src && !isspace(*src); i++) { if (i >= MAX_K_NAME_SZ) return 0; *localuser++ = *src++; } *localuser = 0; return 1; } /* * Map a remote kerberos principal to a local username. If a mapping * is found, a pointer to the local username is returned. Otherwise, * a NULL pointer is returned. * Eventually, this may be more sophisticated than a simple file scan. */ char *auth_map_krbid(const char *real_aname, const char *real_inst, const char *real_realm) { static char localuser[MAX_K_NAME_SZ + 1]; char principal[MAX_K_NAME_SZ + 1]; char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; char lrealm[REALM_SZ]; char krbhst[MAX_HSTNM]; char *p; char buf[1024]; FILE *mapfile; if (!(mapfile = fopen(KRB_MAPNAME, "r"))) { /* If the file can't be opened, don't do mappings */ return 0; } for (;;) { if (!fgets(buf, sizeof(buf), mapfile)) break; if (parse_krbequiv_line(buf, principal, localuser) == 0 || kname_parse(aname, inst, realm, principal) != 0) { /* Ignore badly formed lines */ continue; } if (!strcmp(aname, real_aname) && !strcmp(inst, real_inst) && !strcmp(realm, real_realm)) { fclose(mapfile); aname[0] = inst[0] = realm[0] = '\0'; if (kname_parse(aname, inst, realm, localuser) != 0) { return 0; } /* Upcase realm name */ for (p = realm; *p; p++) { if (islower(*p)) *p = toupper(*p); } if (*realm) { if (krb_get_lrealm(lrealm,1) == 0 && strcmp(lrealm, realm) == 0) { *realm = 0; } else if (krb_get_krbhst(krbhst, realm, 1)) { return 0; /* Unknown realm */ } } strcpy(localuser, aname); if (*inst) { strcat(localuser, "."); strcat(localuser, inst); } if (*realm) { strcat(localuser, "@"); strcat(localuser, realm); } return localuser; } } fclose(mapfile); return 0; } /* * Convert 'identifier' into canonical form. * Returns a pointer to a static buffer containing the canonical form * or NULL if 'identifier' is invalid. */ char *auth_canonifyid(const char *identifier) { static char retbuf[MAX_K_NAME_SZ+1]; char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; char lrealm[REALM_SZ]; char krbhst[MAX_HSTNM]; char *canon_buf; char *p; int len; len = strlen(identifier); canon_buf = malloc(len + 1); if(!canon_buf) return 0; memcpy(canon_buf, identifier, len); canon_buf[len] = '\0'; if (strcasecmp(canon_buf, "anonymous") == 0) { free(canon_buf); return "anonymous"; } if (strcasecmp(canon_buf, "anybody") == 0 || strcasecmp(canon_buf, "anyone") == 0) { free(canon_buf); return "anyone"; } aname[0] = inst[0] = realm[0] = '\0'; if (kname_parse(aname, inst, realm, canon_buf) != 0) { free(canon_buf); return 0; } free(canon_buf); /* Upcase realm name */ for (p = realm; *p; p++) { if (islower(*p)) *p = toupper(*p); } if (*realm) { if (krb_get_lrealm(lrealm,1) == 0 && strcmp(lrealm, realm) == 0) { *realm = 0; } else if (krb_get_krbhst(krbhst, realm, 1)) { return 0; /* Unknown realm */ } } /* Check for krb.equiv remappings. */ p = auth_map_krbid(aname, inst, realm); if (p) { strcpy(retbuf, p); return retbuf; } strcpy(retbuf, aname); if (*inst) { strcat(retbuf, "."); strcat(retbuf, inst); } if (*realm) { strcat(retbuf, "@"); strcat(retbuf, realm); } return retbuf; } /* * Set the current user to 'identifier' * * This function also fetches the list of groups the user is a member of and * stores them in a static array. The system uses a berkely DB database as a * means of communication between this library and the external program that * contacts the PTS server. The database also caches this information using an * optional fixed length cache key provided by the caller (assuming the calling * program uses the session's encryption key, this allows users to force the * cache to be updated by re-authenticating themselves.) For programs that do * not have access to a useful object to use as an identifier, the userid is * used instead (with up to 3 nulls at the end to round the length up to a * multiple of 4). * Two different kinds of objects are stored in the database. One is a "header" * containing the userid (for verification), the time the record was last * updated, and the number of groups the user is a member of. The database key * for this entry is formed by appending an 'H' and 3 nulls to the base * key. The other object in the database is the actual list of groups. This is * stored in a contigous array of fixed (maximum) length strings. The key for * this object is formed by appending a 'D' and 3 nulls to the base key. */ struct auth_state *auth_newstate(const char *identifier, const char *cacheid) { struct auth_state *newstate; struct auth_state *fetched; DBT key, data; char keydata[PTS_DB_KEYSIZE]; char fnamebuf[1024]; DB *ptdb; int s; struct sockaddr_un srvaddr; int r; int fd; static char response[1024]; struct iovec iov[10]; int start, n; identifier = auth_canonifyid(identifier); if (!identifier) return 0; newstate = (struct auth_state *)xmalloc(sizeof(struct auth_state)); memset(newstate, 0, sizeof(struct auth_state)); kname_parse(newstate->aname, newstate->inst, newstate->realm, (char *) identifier); strcpy(newstate->userid.id, identifier); newstate->userid.hash = hash(identifier); if (!strcmp(identifier, "anyone")) return newstate; if (!strcmp(identifier, "anonymous")) return newstate; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); key.data = keydata; key.size = PTS_DB_KEYSIZE; if (cacheid) { /* this should be the session key + the userid */ memset(keydata, 0, key.size); memcpy(keydata, cacheid, 16); /* why 16? see sasl_krb_server.c */ /* toss on userid to further uniquify */ if ((strlen(identifier) + 16) < PTS_DB_KEYSIZE) { memcpy(keydata+16, identifier, strlen(identifier)); } else { memcpy(keydata+16, identifier, PTS_DB_KEYSIZE-16); } } else { /* this is just the userid */ memset(keydata, 0, key.size); strncpy(keydata, identifier, PR_MAXNAMELEN); } #ifdef RUNNING_QUANTIFY return newstate; #endif strcpy(fnamebuf, STATEDIR); strcat(fnamebuf, PTS_DBLOCK); fd = open(fnamebuf, O_RDWR, 0664); if (fd == -1) { syslog(LOG_ERR, "IOERROR: creating lock file %s: %m", fnamebuf); return newstate; } if (lock_shared(fd) < 0) { syslog(LOG_ERR, "IOERROR: locking lock file %s: %m", fnamebuf); return newstate; } strcpy(fnamebuf, STATEDIR); strcat(fnamebuf, PTS_DBFIL); /* open PTS database */ r = db_create(&ptdb, NULL, 0); if (r != 0) { syslog(LOG_ERR, "auth_newstate: db_create: %s", db_strerror(r)); return newstate; } #if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1 r = ptdb->open(ptdb, NULL, fnamebuf, NULL, DB_HASH, DB_RDONLY, 0664); #else r = ptdb->open(ptdb, fnamebuf, NULL, DB_HASH, DB_RDONLY, 0664); #endif /* no database. load it */ if (r == ENOENT) goto load; if (r != 0) { syslog(LOG_ERR, "auth_newstate: opening %s: %s", fnamebuf, db_strerror(r)); return newstate; } /* fetch the current record for the user */ r = ptdb->get(ptdb, NULL, &key, &data, 0); if (r != 0 && r != DB_NOTFOUND) { /* close and unlock the database */ ptdb->close(ptdb, 0); close(fd); syslog(LOG_ERR, "auth_newstate: error fetching record: %s", db_strerror(r)); return newstate; } load: /* if it's expired, ask the ptloader to reload it and reread it */ if (!r) { fetched = (struct auth_state *) data.data; if (fetched->mark > time(0) - EXPIRE_TIME) { /* not expired; let's return it */ newstate = (struct auth_state *) xrealloc(newstate, data.size); memcpy(newstate, fetched, data.size); /* Close the database before we return */ ptdb->close(ptdb,0); close(fd); return newstate; } } /* close and unlock the database */ ptdb->close(ptdb, 0); close(fd); s = socket(AF_UNIX, SOCK_STREAM, 0); if (s == -1) { syslog(LOG_ERR, "auth_newstate: unable to create socket for ptloader: %m"); return newstate; } strcpy(fnamebuf, STATEDIR); strcat(fnamebuf, PTS_DBSOCKET); memset((char *)&srvaddr, 0, sizeof(srvaddr)); srvaddr.sun_family = AF_UNIX; strcpy(srvaddr.sun_path, fnamebuf); r = connect(s, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); if (r == -1) { syslog(LOG_ERR, "auth_newstate: can't connect to ptloader server: %m"); close(s); return newstate; } iov[0].iov_base = (char *)&key.size; iov[0].iov_len = sizeof(key.size); iov[1].iov_base = key.data; iov[1].iov_len = key.size; iov[2].iov_base = (char *)identifier; iov[2].iov_len = PR_MAXNAMELEN; retry_writev(s, iov, 3); start = 0; while (start < sizeof(response) - 1) { n = read(s, response+start, sizeof(response) - 1 - start); if (n < 1) break; start += n; } close(s); if (start <= 1 || strncmp(response, "OK", 2)) return newstate; /* re-opened database after external modifications; it would be significantly faster to use the berkeley db routines here, but then we'd have to create an environment */ strcpy(fnamebuf, STATEDIR); strcat(fnamebuf, PTS_DBLOCK); fd = open(fnamebuf, O_CREAT|O_TRUNC|O_RDWR, 0664); if (fd == -1) { syslog(LOG_ERR, "IOERROR: creating lock file %s: %m", fnamebuf); return newstate; } if (lock_shared(fd) < 0) { syslog(LOG_ERR, "IOERROR: locking lock file %s: %m", fnamebuf); return newstate; } strcpy(fnamebuf, STATEDIR); strcat(fnamebuf, PTS_DBFIL); r = db_create(&ptdb, NULL, 0); if (r != 0) { syslog(LOG_ERR, "auth_newstate: db_create: %s", db_strerror(r)); return newstate; } #if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1 r = ptdb->open(ptdb, NULL, fnamebuf, NULL, DB_HASH, DB_RDONLY, 0664); #else r = ptdb->open(ptdb, fnamebuf, NULL, DB_HASH, DB_RDONLY, 0664); #endif if (r != 0) { syslog(LOG_ERR, "auth_newstate: opening %s: %s", fnamebuf, db_strerror(r)); return newstate; } /* fetch the current record for the user */ r = ptdb->get(ptdb, NULL, &key, &data, 0); if (r != 0) { /* The record still isn't there, even though the child claimed success */ syslog(LOG_ERR, "auth_newstate: error fetching record: %s " "(did ptloader add the record?)", db_strerror(r)); /* close and unlock the database */ ptdb->close(ptdb, 0); close(fd); return newstate; } fetched = (struct auth_state *) data.data; /* copy it into our structure */ newstate = (struct auth_state *) xrealloc(newstate, data.size); memcpy(newstate, fetched, data.size); /* close and unlock the database */ ptdb->close(ptdb, 0); close(fd); return newstate; } void auth_freestate(struct auth_state *auth_state) { free(auth_state); } cyrus-imspd-v1.8/lib/auth_krb_pts.h0100644004310100000120000000571007731506270016602 0ustar shadowstaff/* auth_krb_pts.h -- Kerberos authorization with AFS PTServer groups $Id: auth_krb_pts.h,v 1.9 2003/09/16 04:08:24 rjs3 Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #ifndef INCLUDED_AUTH_KRB_PTS_H #define INCLUDED_AUTH_KRB_PTS_H #ifdef HAVE_UNISTD_H #include #endif #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #include #include #include #include /* for int32, necessary for the AFS includes below */ #include #include #include #define PTS_DBFIL "/ptclient/ptscache.db" #define PTS_DBLOCK "/ptclient/ptscache.lock" #define PTS_DBSOCKET "/ptclient/ptsock" #define PTS_DB_HOFFSET PR_MAXNAMELEN /* index to the header character 'H' or 'D' */ #define PTS_DB_KEYSIZE (PR_MAXNAMELEN+4) /* full key size; header char + 3 NULL */ #define PTCLIENT "ptloader" #define EXPIRE_TIME (3 * 60 * 60) /* 3 hours */ struct auth_ident { unsigned hash; char id[PR_MAXNAMELEN]; }; struct auth_state { struct auth_ident userid; char aname[ANAME_SZ]; char inst[INST_SZ]; char realm[REALM_SZ]; time_t mark; int ngroups; struct auth_ident groups[1]; }; #endif /* INCLUDED_AUTH_KRB_PTS_H */ cyrus-imspd-v1.8/lib/auth_trivial.c0100644004310100000120000000405206425166260016601 0ustar shadowstaff/* auth_trivial.c -- Trivial authorization * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without * fee, provided that the above copyright notice appear in all copies * and that both that copyright notice and this permission notice * appear in supporting documentation, and that the name of Carnegie * Mellon University not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. Carnegie Mellon University makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ /* * Determine if the user is a member of 'identifier' * Returns one of: * 0 User does not match identifier * 1 identifier matches everybody * 2 User is in the group that is identifier * 3 User is identifer */ auth_memberof(identifier) char *identifier; { return 3; } /* * Convert 'identifier' into canonical form. * Returns a pointer to a static buffer containing the canonical form * or NULL if 'identifier' is invalid. */ char *auth_canonifyid(identifier) char *identifier; { return "anonymous"; } /* * Set the current user to 'identifier'. 'cacheid', if non-null, * points to a 16-byte binary key to cache identifier's information * with. */ auth_setid(identifier, cacheid) char *identifier; char *cacheid; { return 0; } cyrus-imspd-v1.8/lib/auth_unix.c0100644004310100000120000002007207214045601016102 0ustar shadowstaff/* auth_unix.c -- Unix passwd file authorization * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ /* * $Id: auth_unix.c,v 1.3 2000/12/08 02:46:25 jackson Exp $ */ #include #include #include #include #include #include "auth.h" #include "xmalloc.h" struct auth_state { char userid[81]; char **group; int ngroups; }; static struct auth_state auth_anonymous = { "anonymous", 0, 0 }; /* * Determine if the user is a member of 'identifier' * Returns one of: * 0 User does not match identifier * 1 identifier matches everybody * 2 User is in the group that is identifier * 3 User is identifer */ auth_memberof(auth_state, identifier) struct auth_state *auth_state; const char *identifier; { int i; if (!auth_state) auth_state = &auth_anonymous; if (strcmp(identifier, "anyone") == 0) return 1; if (strcmp(identifier, auth_state->userid) == 0) return 3; if (strncmp(identifier, "group:", 6) != 0) return 0; for (i=0; ingroups; i++) { if (strcmp(identifier+6, auth_state->group[i]) == 0) return 2; } return 0; } /* Map of which characters are allowed by auth_canonifyid. * Key: 0 -> not allowed (special, ctrl, or would confuse Unix or imapd) * 1 -> allowed, but requires an alpha somewhere else in the string * 2 -> allowed, and is an alpha * * At least one character must be an alpha. * * This may not be restrictive enough. * Here are the reasons for the restrictions: * * & forbidden because of MUTF-7. (This could be fixed.) * : forbidden because it's special in /etc/passwd * / forbidden because it can't be used in a mailbox name * * % forbidden because they're IMAP magic in the LIST/LSUB commands * ? it just scares me * ctrl chars, DEL * can't send them as IMAP characters in plain folder names, I think * 80-FF forbidden because you can't send them in IMAP anyway * (and they're forbidden as folder names). (This could be fixed.) * * + and - are *allowed* although '+' is probably used for userid+detail * subaddressing and qmail users use '-' for subaddressing. * * Identifiers don't require a digit, really, so that should probably be * relaxed, too. */ static char allowedchars[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 00-0F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10-1F */ 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, /* 20-2F */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, /* 30-3F */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 40-4F */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, /* 50-5F */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 60-6F */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, /* 70-7F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* * Convert 'identifier' into canonical form. * Returns a pointer to a static buffer containing the canonical form * or NULL if 'identifier' is invalid. * * XXX If any of the characters marked with 0 are valid and are cropping up, * the right thing to do is probably to canonicalize the identifier to two * representations: one for getpwent calls and one for folder names. The * latter canonicalizes to a MUTF7 representation. */ char *auth_canonifyid(identifier) const char *identifier; { static char retbuf[81]; struct group *grp; char sawalpha; char *p; if (strcasecmp(identifier, "anonymous") == 0) { return "anonymous"; } if (strcasecmp(identifier, "anybody") == 0 || strcasecmp(identifier, "anyone") == 0) { return "anyone"; } if (strlen(identifier) >= sizeof(retbuf)) return 0; strcpy(retbuf, identifier); /* This used to be far more restrictive, but many sites seem to ignore the * ye olde Unix conventions of username. Specifically, we used to * - drop case on the buffer * - disallow lots of non-alpha characters ('-', '_', others) * Now we do neither of these, but impose a very different policy based on * the character map above. */ if (!strncmp(retbuf, "group:", 6)) { grp = getgrnam(retbuf+6); if (!grp) return 0; strcpy(retbuf+6, grp->gr_name); return retbuf; } if (strlen(identifier) >= sizeof(retbuf)) return 0; /* Copy the string and look up values in the allowedchars array above. * If we see any we don't like, reject the string. */ p = retbuf; sawalpha = 0; while (*identifier) { *p = *identifier++; switch (allowedchars[*(unsigned char*) p]) { case 0: return NULL; case 2: sawalpha = 1; /* FALL THROUGH */ default: ; } p++; } *p = 0; if (!sawalpha) return NULL; /* has to be one alpha char */ return retbuf; } /* * Set the current user to 'identifier'. 'cacheid', if non-null, * points to a 16-byte binary key to cache identifier's information * with. */ struct auth_state * auth_newstate(identifier, cacheid) const char *identifier; const char *cacheid; { struct auth_state *newstate; struct passwd *pwd; struct group *grp; char **mem; identifier = auth_canonifyid(identifier); if (!identifier) return 0; if (!strncmp(identifier, "group:", 6)) return 0; pwd = getpwnam(identifier); newstate = (struct auth_state *)xmalloc(sizeof(struct auth_state)); strcpy(newstate->userid, identifier); newstate->ngroups = 0; newstate->group = (char **) 0; setgrent(); while (grp = getgrent()) { for (mem = grp->gr_mem; *mem; mem++) { if (!strcmp(*mem, identifier)) break; } if (*mem || (pwd && pwd->pw_gid == grp->gr_gid)) { newstate->ngroups++; newstate->group = (char **)xrealloc((char *)newstate->group, newstate->ngroups * sizeof(char *)); newstate->group[newstate->ngroups-1] = xstrdup(grp->gr_name); } } endgrent(); return newstate; } void auth_freestate(auth_state) struct auth_state *auth_state; { if (auth_state->group) free((char *)auth_state->group); free((char *)auth_state); } cyrus-imspd-v1.8/lib/bsearch.c0100644004310100000120000001465007214045665015524 0ustar shadowstaff/* bsearch.c -- binary search newline-separated fields in memory $Id: bsearch.c,v 1.4 2000/12/08 02:47:17 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include "bsearch.h" #include "util.h" /* TOLOWER and convert_to_lowercase */ /* Case-dependent comparison converter. * Treats \r and \t as end-of-string and treats '.' lower than * everything else. */ #define TOCOMPARE(c) (convert_to_compare[(unsigned char)(c)]) static unsigned char convert_to_compare[256] = { 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x01, 0x01, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x02, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; /* * Search for a line starting with 'word'. The search ignores case if * 'caseSensitive' is nonzero. The search is performed in 'base', * which is of length 'len'. 'hint' gives a idea of where to start * looking. * * On success, the offset in 'base' of the found line is returned and * the length of the found line is put in the unsigned long pointed to * by 'linelenp'. On failure, the offset in 'base' of where a new line should * be inserted is returned and zero is put in the unsigned long pointed to * by 'linelenp'. */ int bsearch_mem(const char *word, int caseSensitive, const char *base, unsigned long len, unsigned long hint, unsigned long *linelenp) { int firstsearch = 1; unsigned long start = 0, end = len - 1, mid, offset; unsigned long linelen; long n; int cmp = 0; const char *wordp, *p; while (start < end + 1) { if (firstsearch) { /* Use hint supplied by caller */ firstsearch = 0; mid = offset = hint; if (mid <= start || mid > end) mid = offset = start; } else { /* Calculate position of middle of this range */ offset = mid = (start + end)/2; } if (mid) { p = memchr(base+mid, '\n', (end + 1) - mid); if (!p) { end = mid - 1; continue; } offset = p - base + 1; } p = memchr(base+offset, '\n', len-offset); if (p) { linelen = p - (base+offset) + 1; } else { end = mid - 1; continue; } n = linelen; wordp = word; p = base+offset; if (caseSensitive) { while (n-- > 0 && (cmp = TOCOMPARE(*wordp) - TOCOMPARE(*p)) == 0) { wordp++; p++; } if (n >= 0 && !*wordp) { cmp = TOCOMPARE('\t') - TOCOMPARE(*p); } else if (!cmp) { cmp = 1; } } else { while (n-- > 0 && (cmp = TOLOWER(*wordp) - TOLOWER(*p)) == 0) { wordp++; p++; } if (n >= 0 && !*wordp) { cmp = TOLOWER('\t') - TOLOWER(*p); } else if (!cmp) { cmp = 1; } } if (!cmp) { if (linelenp) *linelenp = linelen; return offset; } if (cmp < 0) { if (mid == 0) break; end = mid - 1; } else { start = offset + 1; } } /* Word was not found. Return offset where word should be inserted */ if (linelenp) *linelenp = 0; if (start > len) return len; if (!start) return 0; p = memchr(base+start, '\n', len-start); return p - base + 1; } int bsearch_compare(const char *s1, const char *s2) { int cmp; char c2; for (;;) { if ((c2 = *s2) == 0) { return (unsigned char)*s1; } cmp = TOCOMPARE(*s1) - TOCOMPARE(c2); if (cmp) return cmp; if (TOCOMPARE(c2) == TOCOMPARE('\t')) { return 0; } s1++; s2++; } } cyrus-imspd-v1.8/lib/bsearch.h0100644004310100000120000000423207214045731015516 0ustar shadowstaff/* bsearch.h -- binary search $Id: bsearch.h,v 1.2 2000/12/08 02:47:53 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_BSEARCH_H #define INCLUDED_BSEARCH_H extern int bsearch_mem(const char *word, int caseSensitive, const char *base, unsigned long len, unsigned long hint, unsigned long *linelenp); extern int bsearch_compare(const char *s1, const char *s2); #endif /* INCLUDED_BSEARCH_H */ cyrus-imspd-v1.8/lib/charset.c0100644004310100000120000006377407214046046015553 0ustar shadowstaff/* charset.c -- International character set support * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* $Id: charset.c,v 1.3 2000/12/08 02:49:10 jackson Exp $ */ #include #include #include #include #include "charset.h" #include "xmalloc.h" #include "chartable.h" #include "util.h" extern const unsigned char chartables_long_translations[]; extern const int charset_max_translation; extern const unsigned char chartables_unicode_block[256]; extern const unsigned char chartables_unicode[][256][4]; extern const unsigned char chartables_us_ascii[][256][4]; extern const struct charset chartables_charset_table[]; extern const int chartables_num_charsets; struct decode_state { const unsigned char (*curtable)[256][4]; const unsigned char (*lasttable)[256][4]; const unsigned char (*initialtable)[256][4]; unsigned utfcode; unsigned num_bits; unsigned b64_value; }; #define START(state,table) \ ((state).curtable = (state.initialtable) = (table)); \ ((state).lasttable = NULL); \ ((state).utfcode = 0); \ ((state).num_bits = 0); \ ((state).b64_value = 0); static int xlate(int index, char *to); static int writeutf8(unsigned utfcode, char *to); #define TRANSLATE(state,c,ptr,idx) \ { \ unsigned char _ch; \ const unsigned char *_translation = (state).curtable[0][(unsigned char)(c)]; \ for (;;) { \ switch (_ch = *_translation++) { \ case JSR: \ (state).lasttable = (state).curtable; \ /* FALL THROUGH */ \ case JMP: \ (state).curtable = ((state).initialtable + \ (_translation[0]<<8) + (_translation[1])); \ break; \ \ case RET: \ (state).curtable = (state).lasttable; \ /* FALL THROUGH */ \ case END: \ break; \ \ case U7F: \ (state).b64_value = 0; \ (state).num_bits = 0; \ (state).curtable = ((state).initialtable + 1); \ /* FALL THROUGH */ \ case U7N: \ (state).b64_value <<= 6; \ (state).b64_value += index_64[c]; \ (state).num_bits += 6; \ if ((state).num_bits >= 16) { \ (state).num_bits -= 16; \ (state).utfcode = \ ((state).b64_value >> (state).num_bits) & 0x7fff; \ idx += writeutf8((state).utfcode, ptr+idx); \ } \ break; \ \ case U83: \ (state).lasttable = (state).curtable; \ (state).utfcode = (c & 0x0f) << 12; \ (state).curtable = ((state).initialtable + 1); \ break; \ \ case U83_2: \ (state).utfcode += (c & 0x3f) << 6; \ (state).curtable = ((state).initialtable + 2); \ break; \ \ case U83_3: \ (state).utfcode += (c & 0x03f); \ (state).curtable = (state).initialtable; \ idx += writeutf8((state).utfcode, ptr+idx); \ break; \ \ case XLT: \ idx += xlate((_translation[0]<<8) + (_translation[1]), ptr+idx); \ _translation += 2; \ continue; \ \ default: \ (ptr)[(idx)++] = _ch; \ continue; \ } \ break; \ } \ } #define PATASCII(pat) (pat+256) #define PATLEN(pat) ((pat)[512]) #define PATLASTCHAR(pat) ((pat)[513]) #define PATOTHERLASTCHAR(pat) ((pat)[514]) #define PATSIZE 515 #define GROWSIZE 100 #define XX 127 /* * Table for decoding hexadecimal in quoted-printable */ static const char index_hex[256] = { XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,XX,XX, XX,XX,XX,XX, XX,10,11,12, 13,14,15,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,10,11,12, 13,14,15,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, }; #define HEXCHAR(c) (index_hex[(unsigned char)(c)]) /* * Table for decoding base64 */ static const char index_64[256] = { XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,62, XX,XX,XX,63, 52,53,54,55, 56,57,58,59, 60,61,XX,XX, XX,XX,XX,XX, XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,XX, XX,XX,XX,XX, XX,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 45,46,47,48, 49,50,51,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, }; #define CHAR64(c) (index_64[(unsigned char)(c)]) #define USASCII(c) (chartables_us_ascii[0][(unsigned char)(c)][0]) /* * Lookup the character set 'name'. Returns the character set number * or -1 if there is no matching character set. */ int charset_lookupname(const char *name) { int i; for (i=0; i= chartables_num_charsets) return xstrdup(EMPTY_STRING); START(state,chartables_charset_table[charset].table); if (!alloced) { alloced = GROWSIZE; retval = xmalloc(alloced); } *retval = '\0'; while (*s) { if (pos + charset_max_translation >= alloced) { alloced += GROWSIZE; retval = xrealloc(retval, alloced); } TRANSLATE(state, *s, retval, pos); s++; } retval[pos] = '\0'; return retval; } /* * Decode 1522-strings in 's'. Returns a pointer to a static buffer * contining 's' in canonical searching form. */ char *charset_decode1522(const char *s, char *retval, int alloced) { int eatspace = 0; const char *start, *endcharset, *encoding, *end; const char *p; int i, c, c1, c2, c3, c4; struct decode_state state; int pos = 0; int len; if (!s) return 0; START(state,chartables_charset_table[0].table); /* just for msvc lint */ start = s; while ((start = (const char*) strchr(start, '=')) != 0) { start++; if (*start != '?') continue; encoding = (const char*) strchr(start+1, '?'); if (!encoding) continue; endcharset = (const char*) strchr(start+1, '*'); /* Language code delimiter */ if (!endcharset || endcharset > encoding) endcharset = encoding; if (encoding[1] != 'b' && encoding[1] != 'B' && encoding[1] != 'q' && encoding[1] != 'Q') continue; if (encoding[2] != '?') continue; end = (const char*) strchr(encoding+3, '?'); if (!end || end[1] != '=') continue; /* * We have recognized a valid 1522-word. * Copy over leading text, unless it consists entirely of * whitespace and is between two 1522-words. */ if (eatspace) { for (p = s; p < (start-1) && isspace(*p); p++); if (p < (start-1)) eatspace = 0; } if (!eatspace) { len = start - s - 1; if (pos + len >= alloced) { alloced += len + GROWSIZE; retval = xrealloc(retval, alloced); } while (len--) { c = USASCII(*s); if (c != END) retval[pos++] = (char)c; s++; } } /* * Get the 1522-word's character set */ start++; for (i=0; i= alloced) { alloced += 2 + GROWSIZE; retval = xrealloc(retval, alloced); } strcpy(retval+pos, EMPTY_STRING); pos += 1; } else if (encoding[1] == 'q' || encoding[1] == 'Q') { /* Decode 'Q' encoding */ p = encoding+3; while (p < end) { c = *p++; if (c == '=') { c = HEXCHAR(*p); p++; i = HEXCHAR(*p); p++; if (c == XX || i == XX) { c = '\0'; } else { c = (char)((c << 4) + i); } } else if (c == '_') c = ' '; if (pos + charset_max_translation >= alloced) { alloced += GROWSIZE; retval = xrealloc(retval, alloced); } TRANSLATE(state, c, retval, pos); } } else { /* Decode 'B' encoding */ p = encoding+3; while (p < end) { if (pos + charset_max_translation*3 >= alloced) { alloced += GROWSIZE; retval = xrealloc(retval, alloced); } c1 = CHAR64(p[0]); if (c1 == XX) break; c2 = CHAR64(p[1]); if (c2 == XX) break; TRANSLATE(state,((c1<<2) | ((c2&0x30)>>4)), retval, pos); c3 = CHAR64(p[2]); if (c3 == XX) break; TRANSLATE(state,(((c2&0XF)<<4) | ((c3&0x3C)>>2)), retval, pos); c4 = CHAR64(p[3]); if (c4 == XX) break; TRANSLATE(state,(((c3&0x03) <<6) | c4), retval, pos); p += 4; } } /* Prepare for the next iteration */ s = start = end+2; eatspace = 1; } /* Copy over the tail part of the input string */ len = strlen(s); if (pos + len >= alloced) { alloced += len + 1; retval = xrealloc(retval, alloced); } while (len--) { c = USASCII(*s); if (c != END) retval[pos++] = (char)c; s++; } retval[pos] = '\0'; return retval; } /* * Compile the pattern 's' and return a pointer to the compiled form */ comp_pat *charset_compilepat(const char *s) { comp_pat *pat; int i, c, len; pat = (comp_pat *)xmalloc(PATSIZE * sizeof(comp_pat)); PATLEN(pat) = len = strlen(s); if (len) { PATLASTCHAR(pat) = c = (unsigned char)s[len-1]; if (isupper(c)) PATOTHERLASTCHAR(pat) = TOLOWER(c); else if (islower(c)) PATOTHERLASTCHAR(pat) = TOUPPER(c); else PATOTHERLASTCHAR(pat) = c; } for (i=0; i<512; i++) pat[i] = len; for (i=0; i= 0 && s[i] == substr[j]) { i--; j--; } if (j < 0) return 1; /* Found match */ if (pat[(unsigned char)s[i]] == large || pat[(unsigned char)s[i]] < PATLEN(pat)-j) { i += PATLEN(pat) - j; } else { i += pat[(unsigned char)s[i]]; } } } static int xlate(int index, char *to) { const unsigned char *from = chartables_long_translations + index; int i = 0; while ((*to++ = *from++) != END) i++; return i; } static int writeutf8(unsigned utfcode, char *to) { int table = chartables_unicode_block[utfcode>>8]; int idx = 0; struct decode_state state; if (table == 255) { /* No translations in this block */ if (utfcode > 0x7ff) { to[0] = (char)(0xE0 + (utfcode >> 12)); to[1] = (char)(0x80 + ((utfcode >> 6) & 0x3f)); to[2] = (char)(0x80 + (utfcode & 0x3f)); return 3; } if (utfcode > 0x7f) { to[0] = (char)(0xC0 + (utfcode >> 6)); to[1] = (char)(0x80 + (utfcode & 0x3f)); return 2; } to[0] = (char)utfcode; return 1; } START(state, chartables_unicode + table); TRANSLATE(state, (utfcode & 0xff), to, idx); return idx; } /* * The various charset_searchfile() helper functions */ struct input_state; typedef int rawproc_t(struct input_state *state, char *buf, int size); static int charset_readconvert(struct input_state *state, char *buf, int size); static rawproc_t charset_readplain; static rawproc_t charset_readmapnl; static rawproc_t charset_readqp; static rawproc_t charset_readqpmapnl; static rawproc_t charset_readbase64; /* * State for the various charset_searchfile() helper functions */ struct input_state { rawproc_t *rawproc; /* Function to read and transfer-decode data */ const char *rawbase; /* Location in mapped file of raw data */ int rawlen; /* # bytes raw data left to read from file */ char decodebuf[2048]; /* Buffer of data deocded, but not converted * into canonical searching form */ int decodestart, decodeleft; /* Location/count of decoded data */ struct decode_state decodestate; /* Charset state to convert decoded data * into canonical searching form */ }; /* * Search for the string 'substr' in the next 'len' bytes of * 'msg_base'. If 'mapnl' is nonzero, then LF characters in the file * map to CR LF and count as 2 bytes w.r.t. the value of 'len'. * 'charset' and 'encoding' specify the character set and * content transfer encoding of the data, respectively. * Returns nonzero iff the string was found. */ int charset_searchfile(const char *substr, comp_pat *pat, const char *msg_base, int mapnl, int len, int charset, int encoding) { int substrlen = PATLEN(pat); char *buf, smallbuf[2048]; int bufsize; int n; int i, j, large; struct input_state state; /* Initialize character set mapping */ if (charset < 0 || charset >= chartables_num_charsets) return 0; START(state.decodestate, chartables_charset_table[charset].table); state.decodeleft = 0; /* Initialize transfer-decoding */ state.rawbase = msg_base; state.rawlen = len; switch (encoding) { case ENCODING_NONE: state.rawproc = mapnl ? charset_readmapnl : charset_readplain; break; case ENCODING_QP: state.rawproc = mapnl ? charset_readqpmapnl : charset_readqp; break; case ENCODING_BASE64: state.rawproc = charset_readbase64; /* XXX have to have nl-mapping base64 in order to * properly count \n as 2 raw characters */ break; default: /* Don't know encoding--nothing can match */ return 0; } if (substrlen == 0) return 1; /* * Select buffer to hold canonical searching fomat data to * search */ if (substrlen < sizeof(smallbuf)/2) { bufsize = sizeof(smallbuf); buf = smallbuf; } else { bufsize = substrlen+sizeof(smallbuf); buf = xmalloc(bufsize); } /* Optimized searching of us-ascii */ if (charset == 0) { if (PATASCII(pat)[0x80] == 0) { /* 8-bit chars in pattern--search must fail */ if (buf != smallbuf) free(buf); return 0; } n = (*state.rawproc)(&state, buf, bufsize); if (n < substrlen) { if (buf != smallbuf) free(buf); return 0; } i = substrlen - 1; PATASCII(pat)[PATLASTCHAR(pat)] = PATASCII(pat)[PATOTHERLASTCHAR(pat)] = large = bufsize + i + 2; for (;;) { /* Inner loop -- scan until last char match or end of buffer */ while (i < n) { i += PATASCII(pat)[(unsigned char)buf[i]]; } /* End of buffer */ if (i < large) { /* Read in more stuff */ j = i-n; strncpy(buf, buf+i-(substrlen-1), substrlen-1-j); n = (*state.rawproc)(&state, buf+substrlen-1-j, bufsize-substrlen+1+j); i = substrlen-1; if (n > 0) { n += i-j; continue; } if (buf != smallbuf) free(buf); return 0; } /* Last char match--back up and do compare */ i -= large + 1; j = PATLEN(pat) - 2; while (j >= 0 && TOLOWER(buf[i]) == TOLOWER(substr[j])) { i--; j--; } if (j < 0) { /* Found match */ if (buf != smallbuf) free(buf); return 1; } if (PATASCII(pat)[(unsigned char)buf[i]] == large || PATASCII(pat)[(unsigned char)buf[i]] < PATLEN(pat)-j) { i += PATLEN(pat) - j; } else { i += PATASCII(pat)[(unsigned char)buf[i]]; } } /* NOTREACHED */ } /* Do the (generalized) search */ n = charset_readconvert(&state, buf, bufsize); if (n < substrlen) { if (buf != smallbuf) free(buf); return 0; } i = substrlen - 1; pat[PATLASTCHAR(pat)] = large = bufsize + i + 2; for (;;) { /* Inner loop -- scan until last char match or end of buffer */ while (i < n) { i += pat[(unsigned char)buf[i]]; } /* End of buffer */ if (i < large) { /* Read in more stuff */ j = i-n; strncpy(buf, buf+i-(substrlen-1), substrlen-1-j); n = charset_readconvert(&state, buf+substrlen-1-j, bufsize-substrlen+1+j); i = substrlen-1; if (n > 0) { n += i-j; continue; } if (buf != smallbuf) free(buf); return 0; } /* Last char match--back up and do compare */ i -= large + 1; j = PATLEN(pat) - 2; while (j >= 0 && buf[i] == substr[j]) { i--; j--; } if (j < 0) { /* Found match */ if (buf != smallbuf) free(buf); return 1; } if (pat[(unsigned char)buf[i]] == large || pat[(unsigned char)buf[i]] < PATLEN(pat)-j) { i += PATLEN(pat) - j; } else { i += pat[(unsigned char)buf[i]]; } } } /* * Helper function to read at most 'size' bytes of converted * (into canonical searching format) data into 'buf'. Returns * the number of converted bytes, or 0 for end-of-data. */ static int charset_readconvert(struct input_state *state, char *buf, int size) { int retval = 0; if (state->decodeleft && state->decodestart != 0) { memmove(state->decodebuf, state->decodebuf+state->decodestart, state->decodeleft); } state->decodestart = 0; state->decodeleft += (*state->rawproc)(state, state->decodebuf+state->decodeleft, sizeof(state->decodebuf)-state->decodeleft); while (state->decodeleft) { if (retval + charset_max_translation > size) { return retval; } TRANSLATE(state->decodestate, state->decodebuf[state->decodestart], buf, retval); state->decodestart++; state->decodeleft--; } return retval; } /* * Helper function to read at most 'size' bytes of trivial * transfer-decoded data into 'buf'. Returns the number of decoded * bytes, or 0 for end-of-data. */ static int charset_readplain(struct input_state *state, char *buf, int size) { if (size > state->rawlen) size = state->rawlen; if (!size) return 0; memcpy(buf, state->rawbase, size); state->rawlen -= size; state->rawbase += size; return size; } /* * Helper function to read at most 'size' bytes of trivial newline-mapped * transfer-decoded data into 'buf'. Returns the number of decoded * bytes, or 0 for end-of-data. */ static int charset_readmapnl(struct input_state *state, char *buf, int size) { int retval = 0; char c; while (size && state->rawlen > 0) { c = *state->rawbase; if (c == '\n') { if (size < 2) { return retval; } *buf++ = '\r'; retval++; size--; state->rawlen--; } *buf++ = c; state->rawbase++; state->rawlen--; retval++; size--; } return retval; } /* * Helper function to read at most 'size' bytes of quoted-printable * transfer-decoded data into 'buf'. Returns the number of decoded * bytes, or 0 for end-of-data. */ static int charset_readqp(struct input_state *state, char *buf, int size) { int retval = 0; int c, c1, c2; const char *nextline, *endline; nextline = endline = state->rawbase; while (size && state->rawlen) { if (state->rawbase >= nextline) { /* Ignore trailing whitespace at end of line */ nextline = (const char*) memchr(state->rawbase+1, '\r', state->rawlen-1); if (!nextline) nextline = state->rawbase + state->rawlen; endline = nextline; while (endline > state->rawbase && (endline[-1] == ' ' || endline[-1] == '\t')) { endline--; } } if (state->rawbase >= endline) { state->rawbase += nextline - endline; state->rawlen -= nextline - endline; continue; } c = state->rawbase[0]; if (c == '=') { if (state->rawlen < 3) { return retval; } c1 = state->rawbase[1]; c2 = state->rawbase[2]; state->rawbase += 3; state->rawlen -= 3; c1 = HEXCHAR(c1); c2 = HEXCHAR(c2); /* Following line also takes care of soft line breaks */ if (c1 == XX && c2 == XX) continue; *buf++ = (char)((c1 << 4) + c2); retval++; size--; } else { state->rawbase++; state->rawlen--; *buf++ = (char)c; retval++; size--; } } return retval; } /* * Helper function to read at most 'size' bytes of QP newline-mapped * transfer-decoded data into 'buf'. Returns the number of decoded * bytes, or 0 for end-of-data. */ static int charset_readqpmapnl(struct input_state *state, char *buf, int size) { int retval = 0; int c, c1, c2; const char *nextline, *endline; nextline = endline = state->rawbase; while (size && state->rawlen > 0) { if (state->rawbase >= nextline) { /* Ignore trailing whitespace at end of line */ nextline = (const char*) memchr(state->rawbase+1, '\n', state->rawlen - 1); if (!nextline) nextline = state->rawbase + state->rawlen; endline = nextline; while (endline > state->rawbase && (endline[-1] == ' ' || endline[-1] == '\t')) { endline--; } } if (state->rawbase >= endline) { state->rawbase += nextline - endline; state->rawlen -= nextline - endline; continue; } c = state->rawbase[0]; if (c == '=') { if (state->rawbase+1 == endline) { state->rawbase = nextline + 1; state->rawlen -= 3 + (nextline - endline); continue; } if (state->rawlen < 3) { return retval; } c1 = state->rawbase[1]; c2 = state->rawbase[2]; state->rawbase += 3; state->rawlen -= 3; if (c2 == '\n') state->rawlen--; c1 = HEXCHAR(c1); c2 = HEXCHAR(c2); if (c1 == XX && c2 == XX) continue; *buf++ = (char)((c1 << 4) + c2); retval++; size--; } else if (c == '\n') { if (size < 2) { return retval; } state->rawbase++; state->rawlen -= 2; *buf++ = '\r'; *buf++ = '\n'; retval += 2; size -= 2; } else { state->rawbase++; state->rawlen--; *buf++ = (char)c; retval++; size--; } } return retval; } /* * Helper function to read at most 'size' bytes of base64 * transfer-decoded data into 'buf'. Returns the number of decoded * bytes, or 0 for end-of-data. */ static int charset_readbase64(struct input_state *state, char *buf, int size) { int retval = 0; int c1, c2, c3, c4; while (size >= 3 && state->rawlen) { do { c1 = *state->rawbase++; state->rawlen--; if (c1 == '=') { state->rawlen = 0; return retval; } } while (state->rawlen && CHAR64(c1) == XX); if (!state->rawlen) { return retval; } do { c2 = *state->rawbase++; state->rawlen--; if (c2 == '=') { state->rawlen = 0; return retval; } } while (state->rawlen && CHAR64(c2) == XX); if (!state->rawlen) { return retval; } do { c3 = *state->rawbase++; state->rawlen--; if (c3 == '=') { *buf++ = (char)((CHAR64(c1)<<2) | ((CHAR64(c2)&0x30)>>4)); retval++; state->rawlen = 0; return retval; } } while (state->rawlen && CHAR64(c3) == XX); if (!state->rawlen) { return retval; } do { c4 = *state->rawbase++; state->rawlen--; if (c4 == '=') { *buf++ = (char)((CHAR64(c1)<<2) | ((CHAR64(c2)&0x30)>>4)); *buf++ = (char)(((CHAR64(c2)&0xf)<<4) | ((CHAR64(c3)&0x3c)>>2)); retval += 2; state->rawlen = 0; return retval; } } while (state->rawlen && CHAR64(c4) == XX); if (CHAR64(c4) == XX) { return retval; } *buf++ = (char)((CHAR64(c1)<<2) | ((CHAR64(c2)&0x30)>>4)); *buf++ = (char)(((CHAR64(c2)&0xf)<<4) | ((CHAR64(c3)&0x3c)>>2)); *buf++ = (char)(((CHAR64(c3)&0x3)<<6) | CHAR64(c4)); retval += 3; size -= 3; } return retval; } cyrus-imspd-v1.8/lib/charset.h0100644004310100000120000000533107214046070015536 0ustar shadowstaff/* * Copyright (c) 1996-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ /* * $Id: charset.h,v 1.3 2000/12/08 02:49:28 jackson Exp $ */ #ifndef INCLUDED_CHARSET_H #define INCLUDED_CHARSET_H /* Marker to indicate characters that don't map to anything */ #define EMPTY 'X' #define EMPTY_STRING "X" #define ENCODING_NONE 0 #define ENCODING_QP 1 #define ENCODING_BASE64 2 #define ENCODING_UNKNOWN 255 typedef int comp_pat; /* ensure up to MAXTRANSLATION times expansion into buf */ extern char *charset_convert(const char *s, int charset, char *buf, int bufsz); extern char *charset_decode1522(const char *s, char *buf, int bufsz); extern int charset_lookupname(const char *name); extern comp_pat *charset_compilepat(const char *s); extern void charset_freepat(comp_pat *pat); extern int charset_searchstring(const char *substr, comp_pat *pat, const char *s, int len); extern int charset_searchfile(const char *substr, comp_pat *pat, const char *msg_base, int mapnl, int len, int charset, int encoding); #endif /* INCLUDED_CHARSET_H */ cyrus-imspd-v1.8/lib/chartable.h0100644004310100000120000000435107214046235016036 0ustar shadowstaff/* Definitions internal to charset.c and chartable.c */ /* * Copyright (c) 2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #define XLT 'N' /* Long translation */ #define U7F 'O' /* UTF-7 first base64 character */ #define U7N 'P' /* UTF-7 subsquent base64 character */ #define U83 'Q' /* UTF-8 3-char sequence */ #define U83_2 'R' /* second char of same */ #define U83_3 'S' /* third char of same */ #define JSR 'T' #define JMP 'U' #define RET 'V' #define END 'W' struct charset { char *name; const unsigned char (*table)[256][4]; }; cyrus-imspd-v1.8/lib/exitcodes.h0100644004310100000120000000765407214046267016116 0ustar shadowstaff/* exitcodes.h -- wrapper around sysextis.h * $Id: exitcodes.h,v 1.2 2000/12/08 02:51:35 jackson Exp $ * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ /* Sendmail has some weird ideas on what constitutes permenant failure. On more than one occasion, we have gotten burned by this moving users around through various inadvisable means, screwing up the mailboxes file, whatever. We don't want to fail out permenantly on things like EX_USAGE, EX_SOFTWARE, etc., because that generally means someone was just screwing with the mail store and we don't want to lose mail. Instead, we map these EC_* codes to EX_* codes, thereby lying to Sendmail, since we don't derive any benefit from Sendmail knowing what the error was. We just want it to retry all the time anyway. This way, should sendmail's behavior be different and we start deriving benefit from Sendmail knowing stuff, we can easily change it back. So other code uses the EC_* error, then we maybe change it to TEMPFAIL if we don't agree on whether the error should be permenant or not. Comments below stolen from sysexits.h. */ #ifndef INCLUDED_EXITCODES_H #define INCLUDED_EXITCODES_H #include #define EC_OK 0 /* successful termination */ #define EC_USAGE EX_TEMPFAIL /* command line usage error */ #define EC_DATAERR EX_DATAERR /* data format error */ #define EC_NOINPUT EX_TEMPFAIL /* cannot open input */ #define EC_NOUSER EX_NOUSER /* addressee unknown */ #define EC_NOHOST EX_TEMPFAIL /* host name unknown */ #define EC_UNAVAILABLE EX_TEMPFAIL /* service unavailable */ #define EC_SOFTWARE EX_TEMPFAIL /* internal software error */ #define EC_OSERR EX_TEMPFAIL /* system error (e.g., can't fork) */ #define EC_OSFILE EX_TEMPFAIL /* critical OS file missing */ #define EC_CANTCREAT EX_TEMPFAIL /* can't create (user) output file */ #define EC_IOERR EX_TEMPFAIL /* input/output error */ #define EC_TEMPFAIL EX_TEMPFAIL /* user is invited to retry */ #define EC_PROTOCOL EX_TEMPFAIL /* remote error in protocol */ #define EC_NOPERM EX_TEMPFAIL /* permission denied */ #define EC_CONFIG EX_TEMPFAIL /* configuration error */ #endif /* INCLUDED_EXITCODES_H */ cyrus-imspd-v1.8/lib/ftruncate.c0100644004310100000120000000401507214046454016077 0ustar shadowstaff/* ftruncate -- Replacement ftruncate() function * Does nothing $Id: ftruncate.c,v 1.3 2000/12/08 02:53:32 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include extern int errno; int ftruncate(fd, length) int fd; int length; { errno = EINVAL; return -1; } cyrus-imspd-v1.8/lib/gai.h0100644004310100000120000000642207613045524014655 0ustar shadowstaff/* * Mar 8, 2000 by Hajimu UMEMOTO * $Id: gai.h,v 1.1 2003/01/20 19:17:40 rjs3 Exp $ * * This module is besed on ssh-1.2.27-IPv6-1.5 written by * KIKUCHI Takahiro */ /* * Copyright (c) 2001 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * fake library for ssh * * This file is included in getaddrinfo.c and getnameinfo.c. * See getaddrinfo.c and getnameinfo.c. */ #ifndef _GAI_H_ #define _GAI_H_ #ifndef NI_MAXHOST #define NI_MAXHOST 1025 #endif #ifndef NI_MAXSERV #define NI_MAXSERV 32 #endif /* for old netdb.h */ #ifndef EAI_NODATA #define EAI_NODATA 1 #define EAI_MEMORY 2 #define EAI_FAMILY 5 /* ai_family not supported */ #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ #endif /* dummy value for old netdb.h */ #ifndef AI_PASSIVE #define AI_PASSIVE 1 #define AI_CANONNAME 2 #define AI_NUMERICHOST 4 #define NI_NUMERICHOST 2 #define NI_NAMEREQD 4 #define NI_NUMERICSERV 8 struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* PF_xxx */ int ai_socktype; /* SOCK_xxx */ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ size_t ai_addrlen; /* length of ai_addr */ char *ai_canonname; /* canonical name for hostname */ struct sockaddr *ai_addr; /* binary address */ struct addrinfo *ai_next; /* next structure in linked list */ }; #endif int getaddrinfo(const char *, const char *, const struct addrinfo *, struct addrinfo **); int getnameinfo(const struct sockaddr *, socklen_t, char *, size_t, char *, size_t, int); void freeaddrinfo(struct addrinfo *); char *gai_strerror(int); #endif cyrus-imspd-v1.8/lib/getaddrinfo.c0100644004310100000120000001430707613045525016400 0ustar shadowstaff/* * Mar 8, 2000 by Hajimu UMEMOTO * $Id: getaddrinfo.c,v 1.1 2003/01/20 19:17:41 rjs3 Exp $ * * This module is besed on ssh-1.2.27-IPv6-1.5 written by * KIKUCHI Takahiro */ /* * Copyright (c) 2001 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * fake library for ssh * * This file includes getaddrinfo(), freeaddrinfo() and gai_strerror(). * These funtions are defined in rfc2133. * * But these functions are not implemented correctly. The minimum subset * is implemented for ssh use only. For exapmle, this routine assumes * that ai_family is AF_INET. Don't use it for another purpose. * * In the case not using 'configure --enable-ipv6', this getaddrinfo.c * will be used if you have broken getaddrinfo or no getaddrinfo. */ #include #ifndef macintosh #include #include #endif #include #include #include static struct addrinfo * malloc_ai(int port, u_long addr, int socktype, int proto) { struct addrinfo *ai; ai = (struct addrinfo *)malloc(sizeof(struct addrinfo) + sizeof(struct sockaddr_in)); if (ai) { memset(ai, 0, sizeof(struct addrinfo) + sizeof(struct sockaddr_in)); ai->ai_addr = (struct sockaddr *)(ai + 1); /* XXX -- ssh doesn't use sa_len */ ai->ai_addrlen = sizeof(struct sockaddr_in); #ifdef HAVE_SOCKADDR_SA_LEN ai->ai_addr->sa_len = sizeof(struct sockaddr_in); #endif ai->ai_addr->sa_family = ai->ai_family = AF_INET; ((struct sockaddr_in *)(ai)->ai_addr)->sin_port = port; ((struct sockaddr_in *)(ai)->ai_addr)->sin_addr.s_addr = addr; ai->ai_socktype = socktype; ai->ai_protocol = proto; return ai; } else { return NULL; } } char * gai_strerror(int ecode) { switch (ecode) { case EAI_NODATA: return "no address associated with hostname."; case EAI_MEMORY: return "memory allocation failure."; case EAI_FAMILY: return "ai_family not supported."; case EAI_SERVICE: return "servname not supported for ai_socktype."; default: return "unknown error."; } } void freeaddrinfo(struct addrinfo *ai) { struct addrinfo *next; if (ai->ai_canonname) free(ai->ai_canonname); do { next = ai->ai_next; free(ai); } while ((ai = next) != NULL); } int getaddrinfo(const char *hostname, const char *servname, const struct addrinfo *hints, struct addrinfo **res) { struct addrinfo *cur, *prev = NULL; struct hostent *hp; struct in_addr in; int i, port = 0, socktype, proto; if (hints && hints->ai_family != PF_INET && hints->ai_family != PF_UNSPEC) return EAI_FAMILY; socktype = (hints && hints->ai_socktype) ? hints->ai_socktype : SOCK_STREAM; if (hints && hints->ai_protocol) proto = hints->ai_protocol; else { switch (socktype) { case SOCK_DGRAM: proto = IPPROTO_UDP; break; case SOCK_STREAM: proto = IPPROTO_TCP; break; default: proto = 0; break; } } if (servname) { if (isdigit((int)*servname)) port = htons(atoi(servname)); else { struct servent *se; char *pe_proto; switch (socktype) { case SOCK_DGRAM: pe_proto = "udp"; break; case SOCK_STREAM: pe_proto = "tcp"; break; default: pe_proto = NULL; break; } if ((se = getservbyname(servname, pe_proto)) == NULL) return EAI_SERVICE; port = se->s_port; } } if (!hostname) { if (hints && hints->ai_flags & AI_PASSIVE) *res = malloc_ai(port, htonl(0x00000000), socktype, proto); else *res = malloc_ai(port, htonl(0x7f000001), socktype, proto); if (*res) return 0; else return EAI_MEMORY; } if (inet_aton(hostname, &in)) { *res = malloc_ai(port, in.s_addr, socktype, proto); if (*res) return 0; else return EAI_MEMORY; } if (hints && hints->ai_flags & AI_NUMERICHOST) return EAI_NODATA; #ifndef macintosh if ((hp = gethostbyname(hostname)) && hp->h_name && hp->h_name[0] && hp->h_addr_list[0]) { for (i = 0; hp->h_addr_list[i]; i++) { if ((cur = malloc_ai(port, ((struct in_addr *)hp->h_addr_list[i])->s_addr, socktype, proto)) == NULL) { if (*res) freeaddrinfo(*res); return EAI_MEMORY; } if (prev) prev->ai_next = cur; else *res = cur; prev = cur; } if (hints && hints->ai_flags & AI_CANONNAME && *res) { /* NOT sasl_strdup for compatibility */ if (((*res)->ai_canonname = strdup(hp->h_name)) == NULL) { freeaddrinfo(*res); return EAI_MEMORY; } } return 0; } #endif return EAI_NODATA; } cyrus-imspd-v1.8/lib/getdtablesize.c0100644004310100000120000000377207214046527016744 0ustar shadowstaff/* getdtablesize.c -- Returns the maximum number of file descriptors allowed. $Id: getdtablesize.c,v 1.3 2000/12/08 02:54:15 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #include #include int getdtablesize () { return(sysconf(_SC_OPEN_MAX)); } cyrus-imspd-v1.8/lib/getnameinfo.c0100644004310100000120000000665007613045525016410 0ustar shadowstaff/* * Mar 8, 2000 by Hajimu UMEMOTO * $Id: getnameinfo.c,v 1.1 2003/01/20 19:17:41 rjs3 Exp $ * * This module is besed on ssh-1.2.27-IPv6-1.5 written by * KIKUCHI Takahiro */ /* * Copyright (c) 2001 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * fake library for ssh * * This file includes getnameinfo(). * These funtions are defined in rfc2133. * * But these functions are not implemented correctly. The minimum subset * is implemented for ssh use only. For exapmle, this routine assumes * that ai_family is AF_INET. Don't use it for another purpose. * * In the case not using 'configure --enable-ipv6', this getnameinfo.c * will be used if you have broken getnameinfo or no getnameinfo. */ #include #include #include #include int getnameinfo(const struct sockaddr *sa, socklen_t salen __attribute__((unused)), char *host, size_t hostlen, char *serv, size_t servlen, int flags) { struct sockaddr_in *sin = (struct sockaddr_in *)sa; struct hostent *hp; char tmpserv[16]; if (serv) { snprintf(tmpserv, sizeof(tmpserv), "%d", ntohs(sin->sin_port)); if (strlen(tmpserv) > servlen) return EAI_MEMORY; else strcpy(serv, tmpserv); } if (host) { if (flags & NI_NUMERICHOST) { if (strlen(inet_ntoa(sin->sin_addr)) >= hostlen) return EAI_MEMORY; else { strcpy(host, inet_ntoa(sin->sin_addr)); return 0; } } else { hp = gethostbyaddr((char *)&sin->sin_addr, sizeof(struct in_addr), AF_INET); if (hp) if (strlen(hp->h_name) >= hostlen) return EAI_MEMORY; else { strcpy(host, hp->h_name); return 0; } else return EAI_NODATA; } } return 0; } cyrus-imspd-v1.8/lib/glob.c0100644004310100000120000002713207740332711015032 0ustar shadowstaff/* glob.c -- fast globbing routine using '*', '%', and '?' * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 4/5/93 */ /* * $Id: glob.c,v 1.8 2003/10/06 18:34:49 rjs3 Exp $ */ #include #include #include #include #include "util.h" #include "glob.h" #include "xmalloc.h" #define SEPCHAR '.' /* name of "INBOX" -- must have no repeated substrings */ static char inbox[] = "INBOX"; #define INBOXLEN (sizeof (inbox) - 1) /* initialize globbing structure * This makes the following changes to the input string: * 1) '*' added to each end if GLOB_SUBSTRING * 2) '%' converted to '?' if no GLOB_HIERARCHIAL * 3) '?'s moved to left of '*' * 4) '*' eats all '*'s and '%'s connected by any wildcard * 5) '%' eats all adjacent '%'s */ glob *glob_init_suppress (str, flags, suppress) const char *str; int flags; const char *suppress; { glob *g; char *dst; int slen = 0, newglob; newglob = flags & GLOB_HIERARCHY; if (suppress) slen = strlen(suppress); g = (glob *) xzmalloc(sizeof (glob) + slen + strlen(str) + 1); if (g != 0) { strcpy(g->inbox, inbox); g->sep_char = '.'; dst = g->str; /* if we're doing a substring match, put a '*' prefix (1) */ if (flags & GLOB_SUBSTRING) { /* skip over unneeded glob prefixes (3,4) */ if (newglob) { while (*str == '*' || (*str == '%' && str[1])) ++str; } else { while (*str == '%' || *str == '*' || *str == '?') { if (*str++ != '*') *dst++ = '?'; } } *dst++ = '*'; } if (!newglob) { while (*str) { if (*str == '*') { /* move '?' to left of '*' (3) */ while (*str == '*' || *str == '%' || *str == '?') { if (*str++ != '*') *dst++ = '?'; } *dst++ = '*'; } else { *dst++ = (char)((*str == '%') ? '?' : *str); ++str; } } } else { while (*str) { if (*str == '*' || *str == '%') { /* remove duplicate hierarchy match (5) */ while (*str == '%') ++str; /* If we found a '*', treat '%' as '*' (4) */ if (*str == '*') { /* remove duplicate wildcards (4) */ while (*str == '*' || (*str == '%' && str[1])) ++str; *dst++ = '*'; } else { *dst++ = '%'; } } else { *dst++ = *str++; } } } /* put a '*' suffix (1) */ if (flags & GLOB_SUBSTRING && dst[-1] != '*') { /* remove duplicate wildcards (4) */ if (newglob) while (dst[-1] == '%') --dst; *dst++ = '*'; } *dst++ = '\0'; if (flags & GLOB_ICASE) lcase(g->str); g->flags = flags; /* pre-match "INBOX" to the pattern case insensitively and save state * also keep track of the matching case for "INBOX" * NOTE: this only works because "INBOX" has no repeated substrings */ if (flags & GLOB_INBOXCASE) { str = g->str; dst = g->inbox; g->gstar = g->ghier = NULL; do { while (*dst && TOLOWER(*str) == TOLOWER(*dst)) { *dst++ = *str++; } if (*str == '*') g->gstar = ++str, g->ghier = 0; else if (*str == '%') g->ghier = ++str; else break; if (*str != '%') { while (*dst && TOLOWER(*str) != TOLOWER(*dst)) ++dst; } } while (*str && *dst); g->gptr = str; if (*dst) g->flags &= ~GLOB_INBOXCASE; } /* set suppress string if: * 1) the suppress string isn't a prefix of the glob pattern and * 2) the suppress string prefix matches the glob pattern * or GLOB_INBOXCASE is set */ g->suppress = 0; if (suppress) { dst = g->str + strlen(g->str) + 1; strcpy(dst, suppress); str = g->str; if (strncmp(suppress, str, slen) || (str[slen] != '\0' && str[slen] != g->sep_char && str[slen] != '*' && str[slen] != '%')) { while (*str && *str == *suppress) ++str, ++suppress; if ((g->flags & GLOB_INBOXCASE) || *str == '*' || *str == '%' || *suppress == '\0') { g->suppress = dst; g->slen = slen; } } } } return (g); } /* free a glob structure */ void glob_free (g) glob **g; { if(*g) free((void *) *g); *g = NULL; } /* returns -1 if no match, otherwise length of match or partial-match * g pre-processed glob string * ptr string to perform glob on * len length of ptr string * min pointer to minimum length of a valid partial-match * set to return value + 1 on partial match, otherwise -1 * if NULL, partial matches not allowed */ int glob_test (g, ptr, len, min) glob* g; const char* ptr; long int len; long int *min; { const char *gptr, *pend; /* glob pointer, end of ptr string */ const char *gstar, *pstar; /* pointers for '*' patterns */ const char *ghier, *phier; /* pointers for '%' patterns */ const char *start; /* start of input string */ int newglob; /* check for remaining partial matches */ if (min && *min < 0) return (-1); /* get length */ if (!len) len = strlen(ptr); /* initialize globbing */ gptr = g->str; start = ptr; pend = ptr + len; gstar = ghier = NULL; newglob = g->flags & GLOB_HIERARCHY; phier = pstar = NULL; /* initialize to eliminate warnings */ /* check for INBOX prefix */ if ((g->flags & GLOB_INBOXCASE) && !strncmp(ptr, inbox, INBOXLEN)) { pstar = phier = ptr += INBOXLEN; gstar = g->gstar; ghier = g->ghier; gptr = g->gptr; } /* check for suppress string */ if (g->suppress && !strncmp(g->suppress, ptr, g->slen) && (ptr[g->slen] == '\0' || ptr[g->slen] == g->sep_char)) { if (!(g->flags & GLOB_INBOXCASE)) { if (min) *min = -1; return (-1); } pstar = phier = ptr += g->slen; gstar = g->gstar; ghier = g->ghier; gptr = g->gptr; } /* main globbing loops */ if (!(g->flags & GLOB_ICASE)) { /* case sensitive version */ /* loop to manage wildcards */ do { /* see if we match to the next '%' or '*' wildcard */ while (*gptr != '*' && *gptr != '%' && ptr != pend && (*gptr == *ptr || (!newglob && *gptr == '?'))) { ++ptr, ++gptr; } if (*gptr == '\0' && ptr == pend) break; if (*gptr == '*') { ghier = NULL; gstar = ++gptr; pstar = ptr; } if (*gptr == '%') { ghier = ++gptr; phier = ptr; } if (ghier) { /* look for a match with first char following '%', * stop at a sep_char unless we're doing "*%" */ ptr = phier; while (ptr != pend && *ghier != *ptr && (*ptr != g->sep_char || (!*ghier && gstar && *gstar == '%' && min && ptr - start < *min))) { ++ptr; } if (ptr == pend) { gptr = ghier; break; } if (*ptr == g->sep_char && *ptr != *ghier) { if (!*ghier && min && *min < ptr - start && ptr != pend && *ptr == g->sep_char ) { *min = gstar ? ptr - start + 1 : -1; return (ptr - start); } gptr = ghier; ghier = NULL; } else { phier = ++ptr; gptr = ghier + 1; } } if (gstar && !ghier) { if (!*gstar) { ptr = pend; break; } /* look for a match with first char following '*' */ while (pstar != pend && *gstar != *pstar) ++pstar; if (pstar == pend) { gptr = gstar; break; } ptr = ++pstar; gptr = gstar + 1; } if (*gptr == '\0' && min && *min < ptr - start && ptr != pend && *ptr == g->sep_char) { /* The pattern ended on a hierarchy separator * return a partial match */ *min = ptr - start + 1; return ptr - start; } /* continue if at wildcard or we passed an asterisk */ } while (*gptr == '*' || *gptr == '%' || ((gstar || ghier) && (*gptr || ptr != pend))); } else { /* case insensitive version (same as above, but with TOLOWER()) */ /* loop to manage wildcards */ do { /* see if we match to the next '%' or '*' wildcard */ while (*gptr != '*' && *gptr != '%' && ptr != pend && (TOLOWER(*gptr) == TOLOWER(*ptr) || (!newglob && *gptr == '?'))) { ++ptr, ++gptr; } if (*gptr == '\0' && ptr == pend) break; if (*gptr == '*') { ghier = NULL; gstar = ++gptr; pstar = ptr; } if (*gptr == '%') { ghier = ++gptr; phier = ptr; } if (ghier) { /* look for a match with first char following '%', * stop at a sep_char unless we're doing "*%" */ ptr = phier; while (ptr != pend && TOLOWER(*ghier) != TOLOWER(*ptr) && (*ptr != g->sep_char || (!*ghier && gstar && *gstar == '%' && min && ptr - start < *min))) { ++ptr; } if (ptr == pend) { gptr = ghier; break; } if (*ptr == g->sep_char) { if (!*ghier && min && *min < ptr - start && ptr != pend && *ptr == g->sep_char ) { *min = gstar ? ptr - start + 1 : -1; return (ptr - start); } ghier = NULL; } else { phier = ++ptr; gptr = ghier + 1; } } if (gstar && !ghier) { if (!*gstar) { ptr = pend; break; } /* look for a match with first char following '*' */ while (pstar != pend && TOLOWER(*gstar) != TOLOWER(*pstar)) ++pstar; if (pstar == pend) { gptr = gstar; break; } ptr = ++pstar; gptr = gstar + 1; } if (*gptr == '\0' && min && *min < ptr - start && ptr != pend && *ptr == g->sep_char) { /* The pattern ended on a hierarchy separator * return a partial match */ *min = ptr - start + 1; return ptr - start; } /* continue if at wildcard or we passed an asterisk */ } while (*gptr == '*' || *gptr == '%' || ((gstar || ghier) && (*gptr || ptr != pend))); } if (min) *min = -1; return (*gptr == '\0' && ptr == pend ? ptr - start : -1); } #ifdef TEST_GLOB int main (argc, argv) int argc; char* argv[]; { glob *g = glob_init_suppress(argv[1], GLOB_INBOXCASE|GLOB_HIERARCHY, "user.nifty"); char text[1024]; int len; long min; if (g) { printf("%d/%s/%s\n", g->flags, g->inbox, g->str); while (fgets(text, sizeof (text), stdin) != NULL) { len = strlen(text) - 1; text[len] = '\0'; min = 0; while (min >= 0) { printf("%d\n", glob_test(g, text, len, &min)); } } } } #endif /* TEST_GLOB */ cyrus-imspd-v1.8/lib/glob.h0100644004310100000120000000750407214050660015034 0ustar shadowstaff/* glob.h -- fast globbing routine using '*', '%', and '?' $Id: glob.h,v 1.3 2000/12/08 03:12:48 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * * Author: Chris Newman * Start Date: 4/5/93 */ #ifndef INCLUDED_GLOB_H #define INCLUDED_GLOB_H #ifndef P #ifdef __STDC__ #define P(x) x #else #define P(x) () #endif #endif /* "compiled" glob structure: may change */ typedef struct glob { int flags; /* glob flags, see below */ int slen; /* suppress string length */ char *suppress; /* suppress string pointer */ const char *gstar, *ghier, *gptr; /* INBOX prefix comparison state */ char sep_char; /* separator character */ char inbox[6]; /* INBOX in the correct case */ char str[3]; /* glob string & suppress string */ } glob; /* glob_init flags: */ #define GLOB_ICASE 0x01 /* case insensitive */ #define GLOB_SUBSTRING 0x02 /* match a substring */ #define GLOB_HIERARCHY 0x04 /* use '%' as hierarchy matching and no '?' */ #define GLOB_INBOXCASE 0x08 /* match "inbox" prefix case insensitive */ /* initialize globbing structure * str -- globbing string * flags -- see flag values above * suppress -- prefix to suppress */ extern glob *glob_init_suppress P((const char *str, int flags, const char *suppress)); /* free a glob structure */ extern void glob_free P((glob **g)); /* returns -1 if no match, otherwise length of match or partial-match * g pre-processed glob string * ptr string to perform glob on * len length of ptr string (if 0, strlen() is used) * min pointer to minimum length of a valid partial-match. * Set to -1 if no more matches. Set to return value + 1 * if another match is possible. If NULL, no partial-matches * are returned. */ extern int glob_test P((glob *g, const char *str, long len, long *min)); /* macros */ #define glob_init(str, flags) glob_init_suppress((str), (flags), NULL) #define glob_inboxcase(g) ((g)->inbox) #define GLOB_TEST(g, str) glob_test((g), (str), 0, NULL) #define GLOB_SET_SEPARATOR(g, c) ((g)->sep_char = (c)) #endif /* INCLUDED_GLOB_H */ cyrus-imspd-v1.8/lib/gmtoff.h0100644004310100000120000000410507214050756015373 0ustar shadowstaff/* gmtoff.h -- Get GMT offset $Id: gmtoff.h,v 1.2 2000/12/08 03:13:50 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_GMTOFF_H #define INCLUDED_GMTOFF_H #ifndef P #ifdef __STDC__ #define P(x) x #else #define P(x) () #endif #endif #include extern int gmtoff_of P((struct tm *tm, time_t time)); #endif /* INCLUDED_GMTOFF_H */ cyrus-imspd-v1.8/lib/gmtoff_gmtime.c0100644004310100000120000000521307214051030016713 0ustar shadowstaff/* gmtoff_tm.c - Get offset from GMT by calling gmtime and subtracting $Id: gmtoff_gmtime.c,v 1.3 2000/12/08 03:14:32 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include /* * Returns the GMT offset of the struct tm 'tm', obtained from 'time'. */ int gmtoff_of(tm, time) struct tm *tm; time_t time; { struct tm local, gmt; struct tm *gtm; long offset; local = *tm; gtm = gmtime(&time); gmt = *gtm; /* Assume we are never more than 24 hours away. */ offset = local.tm_yday - gmt.tm_yday; if (offset > 1) { offset = -24; } else if (offset < -1) { offset = 24; } else { offset *= 24; } /* Scale in the hours and minutes; ignore seconds. */ offset += local.tm_hour - gmt.tm_hour; offset *= 60; offset += local.tm_min - gmt.tm_min; /* Restore the data in the struct 'tm' points to */ *tm = local; return offset * 60; } cyrus-imspd-v1.8/lib/gmtoff_tm.c0100644004310100000120000000411607214051053016057 0ustar shadowstaff/* gmtoff_tm.c - Get offset from GMT from the tm_gmtoff struct member $Id: gmtoff_tm.c,v 1.3 2000/12/08 03:14:51 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include /* * Returns the GMT offset of the struct tm 'tm', obtained from 'time'. */ int gmtoff_of(tm, time) struct tm *tm; time_t time; { return tm->tm_gmtoff; } cyrus-imspd-v1.8/lib/hash.c0100644004310100000120000002142207731506270015031 0ustar shadowstaff/* +++Date last modified: 05-Jul-1997 */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "hash.h" #include "xmalloc.h" /* ** public domain code by Jerry Coffin, with improvements by HenkJan Wolthuis. ** ** Tested with Visual C 1.0 and Borland C 3.1. ** Compiles without warnings, and seems like it should be pretty ** portable. ** ** Modified for use with libcyrus by Ken Murchison. ** - prefixed functions with 'hash_' to avoid symbol clashing ** - make hash() a public function ** - use xmalloc() and xstrdup() ** - cleaned up free_hash_table(), doesn't use enumerate anymore ** - added 'rock' to hash_enumerate() */ /* Initialize the hash_table to the size asked for. Allocates space ** for the correct number of pointers and sets them to NULL. If it ** can't allocate sufficient memory, signals error by setting the size ** of the table to 0. */ hash_table *construct_hash_table(hash_table *table, size_t size) { size_t i; bucket **temp; table -> size = size; table -> table = (bucket * *)xmalloc(sizeof(bucket *) * size); temp = table -> table; if ( temp == NULL ) { table -> size = 0; return table; } for (i=0;isize; bucket *ptr; /* ** NULL means this bucket hasn't been used yet. We'll simply ** allocate space for our new bucket and put our data there, with ** the table pointing at it. */ if (NULL == (table->table)[val]) { (table->table)[val] = (bucket *)xmalloc(sizeof(bucket)); if (NULL==(table->table)[val]) return NULL; (table->table)[val] -> key = xstrdup(key); (table->table)[val] -> next = NULL; (table->table)[val] -> data = data; return (table->table)[val] -> data; } /* ** This spot in the table is already in use. See if the current string ** has already been inserted, and if so, increment its count. */ for (ptr = (table->table)[val];NULL != ptr; ptr = ptr -> next) if (0 == strcmp(key, ptr->key)) { void *old_data; old_data = ptr->data; ptr -> data = data; return old_data; } /* ** This key must not be in the table yet. We'll add it to the head of ** the list at this spot in the hash table. Speed would be ** slightly improved if the list was kept sorted instead. In this case, ** this code would be moved into the loop above, and the insertion would ** take place as soon as it was determined that the present key in the ** list was larger than this one. */ ptr = (bucket *)xmalloc(sizeof(bucket)); if (NULL==ptr) return 0; ptr -> key = xstrdup(key); ptr -> data = data; ptr -> next = (table->table)[val]; (table->table)[val] = ptr; return data; } /* ** Look up a key and return the associated data. Returns NULL if ** the key is not in the table. */ void *hash_lookup(char *key, hash_table *table) { unsigned val = hash(key) % table->size; bucket *ptr; if (NULL == (table->table)[val]) return NULL; for ( ptr = (table->table)[val];NULL != ptr; ptr = ptr->next ) { if (0 == strcmp(key, ptr -> key ) ) return ptr->data; } return NULL; } /* ** Delete a key from the hash table and return associated ** data, or NULL if not present. */ void *hash_del(char *key, hash_table *table) { unsigned val = hash(key) % table->size; void *data; bucket *ptr, *last = NULL; if (NULL == (table->table)[val]) return NULL; /* ** Traverse the list, keeping track of the previous node in the list. ** When we find the node to delete, we set the previous node's next ** pointer to point to the node after ourself instead. We then delete ** the key from the present node, and return a pointer to the data it ** contains. */ for (last = NULL, ptr = (table->table)[val]; NULL != ptr; last = ptr, ptr = ptr->next) { if (0 == strcmp(key, ptr -> key)) { if (last != NULL ) { data = ptr -> data; last -> next = ptr -> next; free(ptr->key); free(ptr); return data; } /* ** If 'last' still equals NULL, it means that we need to ** delete the first node in the list. This simply consists ** of putting our own 'next' pointer in the array holding ** the head of the list. We then dispose of the current ** node as above. */ else { data = ptr->data; (table->table)[val] = ptr->next; free(ptr->key); free(ptr); return data; } } } /* ** If we get here, it means we didn't find the item in the table. ** Signal this by returning NULL. */ return NULL; } /* ** Frees a complete table by iterating over it and freeing each node. ** the second parameter is the address of a function it will call with a ** pointer to the data associated with each node. This function is ** responsible for freeing the data, or doing whatever is needed with ** it. */ void free_hash_table(hash_table *table, void (*func)(void *)) { unsigned i; bucket *ptr, *temp; for (i=0;isize; i++) { ptr = (table->table)[i]; while (ptr) { temp = ptr; ptr = ptr->next; free(temp->key); if (func) func(temp->data); free(temp); } } free(table->table); table->table = NULL; table->size = 0; } /* ** Simply invokes the function given as the second parameter for each ** node in the table, passing it the key, the associated data and 'rock'. */ void hash_enumerate(hash_table *table, void (*func)(char *, void *, void *), void *rock) { unsigned i; bucket *temp; for (i=0;isize; i++) { if ((table->table)[i] != NULL) { for (temp = (table->table)[i]; NULL != temp; temp = temp -> next) { func(temp -> key, temp->data, rock); } } } } #ifdef TEST #include void fatal(const char* s, int code) { fprintf(stderr, "hash: %s\r\n", s); exit(code); } void printer(char *string, void *data) { printf("%s: %s\n", string, (char *)data); } int main(void) { hash_table table; char *strings[] = { "The first string", "The second string", "The third string", "The fourth string", "A much longer string than the rest in this example.", "The last string", NULL }; char *junk[] = { "The first data", "The second data", "The third data", "The fourth data", "The fifth datum", "The sixth piece of data" }; int i; void *j; construct_hash_table(&table,200); for (i = 0; NULL != strings[i]; i++ ) hash_insert(strings[i], junk[i], &table); for (i=0;NULL != strings[i];i++) { printf("\n"); hash_enumerate(&table, printer); hash_del(strings[i],&table); } for (i=0;NULL != strings[i];i++) { j = hash_lookup(strings[i], &table); if (NULL == j) printf("\n'%s' is not in table",strings[i]); else printf("\nERROR: %s was deleted but is still in table.", strings[i]); } free_hash_table(&table, NULL); return 0; } #endif /* TEST */ cyrus-imspd-v1.8/lib/hash.h0100644004310100000120000000536007731506270015041 0ustar shadowstaff/* +++Date last modified: 05-Jul-1997 */ #ifndef HASH__H #define HASH__H #include /* For size_t */ /* ** A hash table consists of an array of these buckets. Each bucket ** holds a copy of the key, a pointer to the data associated with the ** key, and a pointer to the next bucket that collided with this one, ** if there was one. */ typedef struct bucket { char *key; void *data; struct bucket *next; } bucket; /* ** This is what you actually declare an instance of to create a table. ** You then call 'construct_table' with the address of this structure, ** and a guess at the size of the table. Note that more nodes than this ** can be inserted in the table, but performance degrades as this ** happens. Performance should still be quite adequate until 2 or 3 ** times as many nodes have been inserted as the table was created with. */ typedef struct hash_table { size_t size; bucket **table; } hash_table; /* ** Hashes a string to produce an unsigned short, which should be ** sufficient for most purposes. */ unsigned hash(const char *string); /* ** This is used to construct the table. If it doesn't succeed, it sets ** the table's size to 0, and the pointer to the table to NULL. */ hash_table *construct_hash_table(hash_table *table,size_t size); /* ** Inserts a pointer to 'data' in the table, with a copy of 'key' as its ** key. Note that this makes a copy of the key, but NOT of the ** associated data. */ void *hash_insert(char *key,void *data,hash_table *table); /* ** Returns a pointer to the data associated with a key. If the key has ** not been inserted in the table, returns NULL. */ void *hash_lookup(char *key,hash_table *table); /* ** Deletes an entry from the table. Returns a pointer to the data that ** was associated with the key so the calling code can dispose of it ** properly. */ void *hash_del(char *key,hash_table *table); /* ** Goes through a hash table and calls the function passed to it ** for each node that has been inserted. The function is passed ** a pointer to the key, a pointer to the data associated ** with it and 'rock'. */ void hash_enumerate(hash_table *table,void (*func)(char *,void *,void *), void *rock); /* ** Frees a hash table. For each node that was inserted in the table, ** it calls the function whose address it was passed, with a pointer ** to the data that was in the table. The function is expected to ** free the data. Typical usage would be: ** free_table(&table, free); ** if the data placed in the table was dynamically allocated, or: ** free_table(&table, NULL); ** if not. ( If the parameter passed is NULL, it knows not to call ** any function with the data. ) */ void free_hash_table(hash_table *table, void (*func)(void *)); #endif /* HASH__H */ cyrus-imspd-v1.8/lib/imclient.c0100644004310100000120000015174010004007770015705 0ustar shadowstaff/* imclient.c -- Streaming IMxP client library * * $Id: imclient.c,v 1.6 2004/01/22 18:01:28 rjs3 Exp $ * * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDARG_H #include #else #include #endif #include #include #include #include #ifdef HAVE_SYS_SELECT_H #include #endif #include #ifdef HAVE_SSL #include #include #include #include #include #include #endif /* HAVE_SSL */ #include "exitcodes.h" #include "xmalloc.h" #include "imparse.h" #include "imclient.h" #include "nonblock.h" #include "util.h" #include "iptostring.h" /* I/O buffer size */ #define IMCLIENT_BUFSIZE 4096 /* Command completion callback record */ struct imclient_cmdcallback { struct imclient_cmdcallback *next; unsigned long tag; /* Command tag # */ imclient_proc_t *proc; /* Callback function */ void *rock; /* Callback rock */ }; /* Untagged data callback record */ struct imclient_callback { int flags; /* Information about untagged data */ char *keyword; /* Untagged data protocol keyword */ imclient_proc_t *proc; /* Callback function */ void *rock; /* Callback rock */ }; struct stringlist { char *str; struct stringlist *next; }; /* Connection data */ struct imclient { /* TCP stream */ int fd; char *servername; int flags; /* Data to be output to server */ char outbuf[IMCLIENT_BUFSIZE]; char *outptr; size_t outleft; char *outstart; /* Replies being received from server */ char *replybuf; char *replystart; size_t replyliteralleft; size_t replylen; size_t alloc_replybuf; /* Protection mechanism data */ /* struct sasl_client *mech; sasl_encodefunc_t *encodefunc; sasl_decodefunc_t *decodefunc;*/ void *state; int maxplain; unsigned long gensym; /* Tag value for previous command */ unsigned long readytag; /* Tag of command waiting for ready response */ /* 0 if wait over or not pending */ char *readytxt; /* Text of ready response, NULL if got tagged reply for command */ /* Command callbacks */ struct imclient_cmdcallback *cmdcallback; /* Untagged data callbacks */ int callback_num; int callback_alloc; struct imclient_callback *callback; struct stringlist *interact_results; sasl_conn_t *saslconn; int saslcompleted; #ifdef HAVE_SSL SSL_CTX *tls_ctx; SSL *tls_conn; int tls_on; /* wheather we are under a layer or not */ #endif /* HAVE_SSL */ }; /* * Syntactic class of a character * 0 - literal, 1 - quoted-string, 2 - atom */ static const char charclass[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, /* 00 - 0f */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 10 - 1f */ 1, 2, 0, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, /* ' ' - '/' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* '0' - '?' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* '@' - 'O' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, /* 'P' - '_' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* '`' - 'o' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, /* 'p' - DEL */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* a0 - af */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* b0 - bf */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* c0 - cf */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* d0 - df */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* e0 - ef */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* f0 - ff */ }; /* Free list of command callback records */ static struct imclient_cmdcallback *cmdcallback_freelist; /* Forward declarations */ void imclient_write(struct imclient *imclient, const char *s, size_t len); static int imclient_writeastring P((struct imclient *imclient, const char *str)); static void imclient_writebase64 P((struct imclient *imclient, const char *output, size_t len)); static void imclient_eof P((struct imclient *imclient)); static int imclient_decodebase64 P((char *input)); /* callbacks we support */ static const sasl_callback_t callbacks[] = { { SASL_CB_USER, NULL, NULL }, { SASL_CB_GETREALM, NULL, NULL }, { SASL_CB_AUTHNAME, NULL, NULL }, { SASL_CB_PASS, NULL, NULL }, { SASL_CB_LIST_END, NULL, NULL } }; /* * Connect to server on 'host'. Optional 'port' specifies the service * to use. On success, returns zero and fills in the pointer pointed * to by 'imclient' with a newly allocated connection pointer. On * failure, returns errno if a system call failed, -1 if the hostname * was not found, or -2 if the service name was not found. * use sasl callbacks 'cbs' */ int imclient_connect(struct imclient **imclient, const char *host, const char *port, sasl_callback_t *cbs) { int s = -1; struct addrinfo hints, *res0 = NULL, *res; int saslresult; static int didinit; assert(imclient); assert(host); if (!port) port = "143"; memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_CANONNAME; if (getaddrinfo(host, port, &hints, &res0)) return -1; for (res = res0; res; res = res->ai_next) { s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (s < 0) continue; if (connect(s, res->ai_addr, res->ai_addrlen) >= 0) break; close(s); s = -1; } if (s < 0) return errno; /* nonblock(s, 1); */ *imclient = (struct imclient *)xzmalloc(sizeof(struct imclient)); (*imclient)->fd = s; (*imclient)->saslconn = NULL; (*imclient)->saslcompleted = 0; (*imclient)->servername = xstrdup(res0->ai_canonname ? res0->ai_canonname : host); freeaddrinfo(res0); (*imclient)->outptr = (*imclient)->outstart = (*imclient)->outbuf; (*imclient)->outleft = (*imclient)->maxplain = sizeof((*imclient)->outbuf); (*imclient)->interact_results = NULL; imclient_addcallback(*imclient, "", 0, (imclient_proc_t *) 0, (void *)0, "OK", CALLBACK_NOLITERAL, (imclient_proc_t *)0, (void *)0, "NO", CALLBACK_NOLITERAL, (imclient_proc_t *)0, (void *)0, "BAD", CALLBACK_NOLITERAL, (imclient_proc_t *)0, (void *)0, "BYE", CALLBACK_NOLITERAL, (imclient_proc_t *)0, (void *)0, (char *)0); #ifdef HAVE_SSL (*imclient)->tls_ctx=NULL; (*imclient)->tls_conn=NULL; (*imclient)->tls_on=0; #endif /* HAVE_SSL */ if (!didinit) { /* attempt to start sasl */ saslresult = sasl_client_init(NULL); if (saslresult!=SASL_OK) return 1; didinit = 1; } /* client new connection */ saslresult=sasl_client_new("imap", /* xxx ideally this should be configurable */ (*imclient)->servername, NULL, NULL, cbs ? cbs : callbacks, 0, &((*imclient)->saslconn)); if (saslresult!=SASL_OK) return 1; return 0; } /* * Close and free the connection 'imclient' */ void imclient_close(struct imclient *imclient) { int i; struct stringlist *cur, *cur_next; assert(imclient); imclient_eof(imclient); close(imclient->fd); free(imclient->servername); if (imclient->replybuf) free(imclient->replybuf); /* if (imclient->state) imclient->mech->free_state(imclient->state);*/ sasl_dispose(&(imclient->saslconn)); for (i = 0; i < imclient->callback_num; i++) { free(imclient->callback[i].keyword); } if (imclient->callback) free((char *)imclient->callback); for(cur=imclient->interact_results; cur; cur=cur_next) { cur_next = cur->next; free(cur->str); free(cur); } free((char *)imclient); } void imclient_setflags(struct imclient *imclient, int flags) { assert(imclient); imclient->flags |= flags; } void imclient_clearflags(struct imclient *imclient, int flags) { assert(imclient); imclient->flags &= ~flags; } char * imclient_servername(struct imclient *imclient) { assert(imclient); return imclient->servername; } #define CALLBACKGROW 5 /* * Add untagged data callbacks to a connection. * After the first argument 'imclient', there can be zero or more * 4-tuples of 'keyword', 'flags', 'proc', 'rock', each adding or changing * a single callback. The last 4-tuple is terminated by a single null pointer. * * Each 4-tuple adds or changes the callback for 'keyword'. 'flags' specifies * information about the parsing of the untagged data. 'proc' and 'rock' * specify the callback function and rock to invoke when the untagged data * is received. 'proc' may be a null pointer, in which case no function is * invoked. * * The callback function may not call the functions imclient_close(), * imclient_send(), imclient_eof(), imclient_processoneevent(), or * imclient_authenticate() on the connection. The callback function * may scribble on the text of the untagged data. * */ #ifdef __STDC__ void imclient_addcallback(struct imclient *imclient, ...) #else void imclient_addcallback(va_alist) va_dcl #endif { va_list pvar; char *keyword; int flags; imclient_proc_t *proc; void *rock; int i; #ifdef __STDC__ va_start(pvar, imclient); #else struct imclient *imclient; va_start(pvar); imclient = va_arg(pvar, struct imclient *); #endif assert(imclient); while ((keyword = va_arg(pvar, char *))) { flags = va_arg(pvar, int); proc = va_arg(pvar, imclient_proc_t *); rock = va_arg(pvar, void *); /* Search for existing callback matching keyword and flags */ for (i = 0; i < imclient->callback_num; i++) { if (imclient->callback[i].flags == flags && !strcmp(imclient->callback[i].keyword, keyword)) break; } /* If not found, allocate new callback entry */ if (i == imclient->callback_num) { if (imclient->callback_num == imclient->callback_alloc) { imclient->callback_alloc += CALLBACKGROW; imclient->callback = (struct imclient_callback *) xrealloc((char *)imclient->callback, imclient->callback_alloc*sizeof (struct imclient_callback)); } imclient->callback_num++; imclient->callback[i].keyword = xstrdup(keyword); imclient->callback[i].flags = flags; } imclient->callback[i].proc = proc; imclient->callback[i].rock = rock; } va_end(pvar); } /* * Send a new command on the connection 'imclient'. * * 'finishproc' and 'finishrock' are the function and rock called when * the command completes. 'functionproc' may be a null pointer, in * which case no callback is made. The callback function may not call * the functions imclient_close(), imclient_send(), imclient_eof(), * imclient_processoneevent(), or imclient_authenticate() on the * connection. The callback function is guaranteed to be invoked, the * special result type "EOF" is used in the case where the connection * dies before a result is received from the server. * * 'fmt' is a printf-like specification of the command. It must not * include the tag--that is automatically added by imclient_send(). * The defined %-sequences are as follows: * * %% -- % * %a -- atom * %s -- astring (will be quoted or literalized as needed) * %d -- decimal * %u -- unsigned decimal * %v -- #astring (arg is an null-terminated array of (char *) * which are written as space separated astrings) * %B -- (internal use only) base64-encoded data at end of command line */ #ifdef __STDC__ void imclient_send(struct imclient *imclient, void (*finishproc)(), void *finishrock, const char *fmt, ...) #else void imclient_send(va_alist) va_dcl #endif { va_list pvar; struct imclient_cmdcallback *newcmdcallback; char buf[30]; char *percent, *str, **v; int num; unsigned unum; int abortcommand = 0; #ifdef __STDC__ va_start(pvar, fmt); #else struct imclient *imclient; imclient_proc_t *finishproc; void *finishrock; char *fmt; va_start(pvar); imclient = va_arg(pvar, struct imclient *); finishproc = va_arg(pvar, imclient_proc_t *); finishrock = va_arg(pvar, void *); fmt = va_arg(pvar, char *); #endif assert(imclient); imclient->gensym++; if (imclient->gensym <= 0) imclient->gensym = 1; /* * If there is a command completion callback, add it to the * command callback list of the imclient struct. */ if (finishproc) { if (cmdcallback_freelist) { newcmdcallback = cmdcallback_freelist; cmdcallback_freelist = newcmdcallback->next; } else { newcmdcallback = (struct imclient_cmdcallback *) xmalloc(sizeof (struct imclient_cmdcallback)); } newcmdcallback->next = imclient->cmdcallback; newcmdcallback->tag = imclient->gensym; newcmdcallback->proc = finishproc; newcmdcallback->rock = finishrock; imclient->cmdcallback = newcmdcallback; } /* Write the tag */ snprintf(buf, sizeof(buf), "%lu ", imclient->gensym); imclient_write(imclient, buf, strlen(buf)); /* Process the command format */ while ((percent = strchr(fmt, '%'))) { imclient_write(imclient, fmt, percent-fmt); switch (*++percent) { case '%': imclient_write(imclient, percent, 1); break; case 'a': str = va_arg(pvar, char *); imclient_write(imclient, str, strlen(str)); break; case 's': str = va_arg(pvar, char *); abortcommand = imclient_writeastring(imclient, str); if (abortcommand) goto fail; break; case 'd': num = va_arg(pvar, int); snprintf(buf, sizeof(buf), "%d", num); imclient_write(imclient, buf, strlen(buf)); break; case 'u': unum = va_arg(pvar, unsigned); snprintf(buf, sizeof(buf), "%lu", (unsigned long)unum); imclient_write(imclient, buf, strlen(buf)); break; case 'v': v = va_arg(pvar, char **); for (num = 0; v[num]; num++) { if (num) imclient_write(imclient, " ", 1); abortcommand = imclient_writeastring(imclient, v[num]); if (abortcommand) goto fail; } break; case 'B': num = va_arg(pvar, int); str = va_arg(pvar, char *); imclient_writebase64(imclient, str, num); /* KLUDGE ALERT: imclientwritebase64() spit out a CRLF * so fake things up to prevent our spitting out a second CRLF. */ abortcommand = 1; goto fail; default: fatal("internal error: invalid format specifier in imclient_send", EC_SOFTWARE); } fmt = percent + 1; } fail: va_end(pvar); if (!abortcommand) { imclient_write(imclient, fmt, strlen(fmt)); imclient_write(imclient, "\r\n", 2); } } static int imclient_writeastring(struct imclient *imclient, const char *str) { const char *p; unsigned len = 0; int class = 2; char buf[30]; assert(imclient); assert(str); for (p = str; *p; p++) { len++; if (class > charclass[(unsigned char)*p]) { class = charclass[(unsigned char)*p]; } } if (len >= 1024) class = 0; if (len && class == 2) { /* Atom */ imclient_write(imclient, str, len); } else if (class) { /* Quoted-string */ imclient_write(imclient, "\"", 1); imclient_write(imclient, str, len); imclient_write(imclient, "\"", 1); } else { /* Literal */ if (imclient->flags & IMCLIENT_CONN_NONSYNCLITERAL) { snprintf(buf, sizeof(buf), "{%u+}\r\n", len); imclient_write(imclient, buf, strlen(buf)); } else { imclient->readytag = imclient->gensym; snprintf(buf, sizeof(buf), "{%u}\r\n", len); imclient_write(imclient, buf, strlen(buf)); while (imclient->readytag) { imclient_processoneevent(imclient); } if (!imclient->readytxt) return 1; } imclient_write(imclient, str, len); } return 0; } /* * Write to the connection 'imclient' the data 's', of length 'len' */ void imclient_write(struct imclient *imclient, const char *s, size_t len) { assert(imclient); assert(s); /* If no data pending for output, reset the buffer */ if (imclient->outptr == imclient->outstart) { imclient->outstart = imclient->outptr = imclient->outbuf; imclient->outleft = imclient->maxplain; } /* While we don't have room to buffer all the output */ while (len > imclient->outleft) { /* Copy as much data as will fit in output buffer */ memcpy(imclient->outptr, s, imclient->outleft); imclient->outptr += imclient->outleft; s += imclient->outleft; len -= imclient->outleft; imclient->outleft = 0; /* Process events until output buffer is flushed */ while (imclient->outptr != imclient->outstart) { imclient_processoneevent(imclient); } /* Reset the buffer */ imclient->outstart = imclient->outptr = imclient->outbuf; imclient->outleft = imclient->maxplain; } /* Copy remaining data to output buffer */ memcpy(imclient->outptr, s, len); imclient->outptr += len; imclient->outleft -= len; } /* * On the connection 'imclient', handle the input 'buf' of size 'len' * from the server. Invoke callbacks as appropriate. */ #define REPLYSLACK 80 /* When growing, allocate this extra slack */ #define REPLYSHRINK (4096+500) /* If more than this free, shrink buffer */ static void imclient_input(struct imclient *imclient, char *buf, int len) { unsigned long replytag; struct imclient_reply reply; char *endreply; char *p; size_t parsed; size_t literallen; size_t keywordlen; int keywordindex; struct imclient_cmdcallback **cmdcb, *cmdcbtemp; const char *plainbuf; unsigned plainlen; int result; assert(imclient); assert(buf); if (imclient->saslcompleted == 1) { /* decrypt what we have */ if ((result = sasl_decode(imclient->saslconn, buf, len, &plainbuf, &plainlen)) != SASL_OK) { (void) shutdown(imclient->fd, 0); } if (plainlen == 0) return; } else { plainbuf = buf; plainlen = len; } /* Ensure replybuf has enough space to take the input */ if (imclient->replylen + plainlen >= imclient->alloc_replybuf) { /* If there is unused space at the front, move the plaintext there */ if (imclient->replystart != imclient->replybuf) { imclient->replylen -= imclient->replystart - imclient->replybuf; memmove(imclient->replybuf, imclient->replystart, imclient->replylen); imclient->replystart = imclient->replybuf; } /* Shrink the reply buffer if it's too large */ if (imclient->replylen + plainlen + REPLYSHRINK < imclient->alloc_replybuf) { imclient->alloc_replybuf = imclient->replylen + plainlen + REPLYSHRINK; imclient->replybuf = xrealloc(imclient->replybuf, imclient->alloc_replybuf); imclient->replystart = imclient->replybuf; } /* If there still isn't enough room, grow the buffer */ if (imclient->replylen + plainlen >= imclient->alloc_replybuf) { imclient->alloc_replybuf = imclient->replylen + plainlen + REPLYSLACK; imclient->replybuf = xrealloc(imclient->replybuf, imclient->alloc_replybuf); imclient->replystart = imclient->replybuf; } } /* Remember where new data starts */ parsed = imclient->replylen; /* Copy the data to the buffer and NUL-terminate it */ memcpy(imclient->replybuf + imclient->replylen, plainbuf, plainlen); imclient->replylen += plainlen; imclient->replybuf[imclient->replylen] = '\0'; /* Process the new data (of length 'plainlen') */ while (parsed < imclient->replylen) { /* If we're reading a literal, skip over it. */ if (imclient->replyliteralleft) { size_t avail; avail = imclient->replylen - parsed; if (avail > imclient->replyliteralleft) { parsed += imclient->replyliteralleft; imclient->replyliteralleft = 0; continue; } else { parsed += avail; imclient->replyliteralleft -= avail; return; } } /* Look for the end of the line and skip over to it. */ endreply = (char *)memchr(imclient->replybuf + parsed, '\n', imclient->replylen - parsed); /* Don't have a complete line */ if (!endreply) return; parsed = endreply - imclient->replybuf + 1; /* parse tag */ p = imclient->replystart; if (*p == '+' && p[1] == ' ') { /* Ready response */ if (imclient->readytag) { imclient->readytag = 0; imclient->readytxt = p+2; *(endreply-1) = '\0'; } else { /* XXX Got junk from the server */ } /* Start parsing the next reply */ imclient->replystart = endreply + 1; continue; } else if (*p == '*' && p[1] == ' ') { replytag = 0; p += 2; } else { replytag = 0; while (isdigit((unsigned char) *p)) { replytag = replytag * 10 + *p++ - '0'; } if (*p++ != ' ') { /* XXX Got junk from the server */ /* Start parsing the next reply */ imclient->replystart = endreply + 1; continue; } } /* parse num, if there */ if (replytag == 0 && isdigit((unsigned char) *p)) { reply.msgno = 0; while (isdigit((unsigned char) *p)) { reply.msgno = reply.msgno * 10 + *p++ - '0'; } if (*p++ != ' ') { /* XXX Got junk from the server */ /* Start parsing the next reply */ imclient->replystart = endreply + 1; continue; } } else { reply.msgno = -1; } /* parse keyword */ reply.keyword = p; while (*p && *p != ' ' && *p != '\n') p++; keywordlen = p - reply.keyword; reply.text = p + 1; if (*p == '\n') { if (keywordlen && p[-1] == '\r') { keywordlen--; reply.text--; } reply.text--; } /* Handle tagged replies */ if (replytag != 0) { int iscompletion = ((keywordlen == 3 && reply.keyword[0] == 'B' && reply.keyword[1] == 'A' && reply.keyword[2] == 'D') || (keywordlen == 2 && ((reply.keyword[0] == 'O' && reply.keyword[1] == 'K') || (reply.keyword[0] == 'N' && reply.keyword[1] == 'O')))); /* Scan back and see if the end of the line introduces a literal */ if (!iscompletion && endreply > imclient->replystart+2 && endreply[-1] == '\r' && endreply[-2] == '}' && isdigit((unsigned char) endreply[-3])) { p = endreply - 4; while (p > imclient->replystart && isdigit((unsigned char) *p)) { p--; } if (p > imclient->replystart + 2 && *p == '{' && charclass[(unsigned char)p[-1]] != 2) { /* Parse the size of the literal */ literallen = 0; p++; while (isdigit((unsigned char) *p)) { literallen = literallen*10 + *p++ -'0'; } /* Do a continue to read literal & following line */ imclient->replyliteralleft = literallen; continue; } } /* Start parsing the next reply */ imclient->replystart = endreply + 1; if (replytag == imclient->readytag) { imclient->readytag = 0; imclient->readytxt = 0; } cmdcb = &imclient->cmdcallback; while (*cmdcb && (*cmdcb)->tag != replytag) { cmdcb = &(*cmdcb)->next; } if ((cmdcbtemp = *cmdcb)) { if (iscompletion) { /* Move callback struct to the freelist */ *cmdcb = cmdcbtemp->next; cmdcbtemp->next = cmdcallback_freelist; cmdcallback_freelist = cmdcbtemp; } /* Do the callback */ endreply[-1] = '\0'; reply.keyword[keywordlen] = '\0'; (*cmdcbtemp->proc)(imclient, cmdcbtemp->rock, &reply); } continue; } /* Must be an untagged reply, look up the keyword */ for (keywordindex = 1; keywordindex < imclient->callback_num; keywordindex++) { if (imclient->callback[keywordindex].flags & CALLBACK_NUMBERED) { if (reply.msgno == -1) continue; } else { if (reply.msgno != -1) continue; } if (!strncmp(imclient->callback[keywordindex].keyword, reply.keyword, keywordlen) && imclient->callback[keywordindex].keyword[keywordlen] == '\0' && imclient->callback[keywordindex].proc) break; } /* Keyword index 0 is the default callback */ if (keywordindex == imclient->callback_num) keywordindex = 0; /* Scan back and see if the end of the line introduces a literal */ if (!(imclient->callback[keywordindex].flags & CALLBACK_NOLITERAL)) { if (endreply > imclient->replystart+2 && endreply[-1] == '\r' && endreply[-2] == '}' && isdigit((unsigned char) endreply[-3])) { p = endreply - 4; while (p > imclient->replystart && isdigit((unsigned char) *p)) { p--; } if (p > imclient->replystart + 2 && *p == '{' && charclass[(unsigned char)p[-1]] != 2) { /* Parse the size of the literal */ literallen = 0; p++; while (isdigit((unsigned char) *p)) { literallen = literallen*10 + *p++ -'0'; } /* Do a continue to read literal & following line */ imclient->replyliteralleft = literallen; continue; } } } /* Do the callback, if the proc is non-null */ if (imclient->callback[keywordindex].proc) { endreply[-1] = '\0'; reply.keyword[keywordlen] = '\0'; (imclient->callback[keywordindex].proc) (imclient, imclient->callback[keywordindex].rock, &reply); } /* Start parsing the next reply */ imclient->replystart = endreply + 1; } } /* * Received an EOF on the connection 'imclient' * Issue appropriate callbacks. */ static void imclient_eof(struct imclient *imclient) { struct imclient_cmdcallback *cmdcb; struct imclient_reply reply; assert(imclient); imclient->readytag = 0; imclient->readytxt = 0; for (cmdcb = imclient->cmdcallback; cmdcb; cmdcb = cmdcb->next) { reply.keyword = "EOF"; reply.msgno = -1; reply.text = ""; (*cmdcb->proc)(imclient, cmdcb->rock, &reply); if (!cmdcb->next) { cmdcb->next = cmdcallback_freelist; cmdcallback_freelist = imclient->cmdcallback; break; } } imclient->cmdcallback = 0; /* XXX make an untagged "EOF" callback? */ } /* * Get information for calling select * 'fd' is filled in with file descriptor to select() for read * 'wanttowrite' is filled in with nonzero value iff should * select() for write as well. */ void imclient_getselectinfo(struct imclient *imclient, int *fd, int *wanttowrite) { assert(imclient); assert(fd); assert(wanttowrite); *fd = imclient->fd; *wanttowrite = imclient->outptr - imclient->outstart; } /* * Process one input or output event on the connection 'imclient'. */ void imclient_processoneevent(struct imclient *imclient) { char buf[IMCLIENT_BUFSIZE]; int n; int writelen; fd_set rfds, wfds; FD_ZERO(&rfds); FD_ZERO(&wfds); assert(imclient); for (;;) { writelen = imclient->outptr - imclient->outstart; if ((imclient->saslcompleted==1) && (writelen>0)) { unsigned int cryptlen=0; const char *cryptptr=NULL; if (sasl_encode(imclient->saslconn, imclient->outstart, writelen, &cryptptr,&cryptlen)!=SASL_OK) { /* XXX encoding error */ n=0; } #ifdef HAVE_SSL if (imclient->tls_on==1) { n = SSL_write(imclient->tls_conn, cryptptr, cryptlen); } else { n = write(imclient->fd, cryptptr, cryptlen); } #else /* HAVE_SSL */ n = write(imclient->fd, cryptptr, cryptlen); #endif /* HAVE_SSL */ if (n > 0) { imclient->outstart += writelen; return; } /* XXX Also EPIPE & the like? */ /* Make sure we select() for writing */ } else if (writelen) { /* No protection mechanism, just write the plaintext */ #ifdef HAVE_SSL if (imclient->tls_on==1) { n = SSL_write(imclient->tls_conn, imclient->outstart, writelen); } else { n = write(imclient->fd, imclient->outstart, writelen); } #else /* HAVE_SSL */ n = write(imclient->fd, imclient->outstart, writelen); #endif /* HAVE_SSL */ if (n > 0) { imclient->outstart += n; return; } /* XXX Also EPIPE & the like? */ } if (FD_ISSET(imclient->fd, &rfds)) { #ifdef HAVE_SSL /* just do a SSL read instead if we're under a tls layer */ if (imclient->tls_on==1) { n = SSL_read(imclient->tls_conn, buf, sizeof(buf)); } else { n = read(imclient->fd, buf, sizeof(buf)); } #else /* HAVE_SSL */ n = read(imclient->fd, buf, sizeof(buf)); #endif /* HAVE_SSL */ if (n >= 0) { if (n == 0) { imclient_eof(imclient); } else { imclient_input(imclient, buf, n); } return; } } FD_ZERO(&rfds); FD_ZERO(&wfds); FD_SET(imclient->fd, &rfds); if (writelen) FD_SET(imclient->fd, &wfds); (void) select(imclient->fd + 1, &rfds, &wfds, (fd_set *)0, 0); } } enum replytype {replytype_inprogress, replytype_ok, replytype_no, replytype_bad, replytype_prematureok}; struct authresult { enum replytype replytype; int r; }; /* Command completion callback for imclient_authenticate */ static void authresult(struct imclient *imclient __attribute__((unused)), void *rock, struct imclient_reply *reply) { struct authresult *result = (struct authresult *)rock; assert(result); assert(reply); if (!strcmp(reply->keyword, "OK")) { result->replytype = replytype_ok; } else if (!strcmp(reply->keyword, "NO")) { result->replytype = replytype_no; } else result->replytype = replytype_bad; } /* Command completion for starttls */ static void tlsresult(struct imclient *imclient __attribute__((unused)), void *rock, struct imclient_reply *reply) { struct authresult *result = (struct authresult *)rock; assert(result); assert(reply); if (!strcmp(reply->keyword, "OK")) { result->replytype = replytype_ok; } else if (!strcmp(reply->keyword, "NO")) { result->replytype = replytype_no; } else result->replytype = replytype_bad; } static sasl_security_properties_t *make_secprops(int min,int max) { sasl_security_properties_t *ret= (sasl_security_properties_t *)xzmalloc(sizeof(sasl_security_properties_t)); ret->maxbufsize = IMCLIENT_BUFSIZE; ret->min_ssf = min; ret->max_ssf = max; return ret; } void interaction (struct imclient *context, sasl_interact_t *t, char *user) { char result[1024]; struct stringlist *cur; assert(context); assert(t); cur = malloc(sizeof(struct stringlist)); if(!cur) { t->len=0; t->result=NULL; return; } cur->str = NULL; cur->next = context->interact_results; context->interact_results = cur; if ((t->id == SASL_CB_USER || t->id == SASL_CB_AUTHNAME) && user && user[0]) { t->len = strlen(user); cur->str = xstrdup(user); } else { printf("%s: ", t->prompt); if (t->id == SASL_CB_PASS) { char *ptr = getpass(""); strlcpy(result, ptr, sizeof(result)); } else { fgets(result, sizeof(result)-1, stdin); result[strlen(result) - 1] = '\0'; } t->len = strlen(result); cur->str = (char *) xmalloc(t->len+1); memset(cur->str, 0, t->len+1); memcpy(cur->str, result, t->len); } t->result = cur->str; } void fillin_interactions(struct imclient *context, sasl_interact_t *tlist, char *user) { assert(context); assert(tlist); while (tlist->id!=SASL_CB_LIST_END) { interaction(context, tlist, user); tlist++; } } /* * Params: * mechlist: list of mechanisms seperated by spaces * * Returns: * 0 - sucess * 1 - failure * 2 - severe failure? */ static int imclient_authenticate_sub(struct imclient *imclient, char *mechlist, char *user, int minssf, int maxssf, const char **mechusing) { int saslresult; sasl_security_properties_t *secprops=NULL; socklen_t addrsize; struct sockaddr_storage saddr_l; struct sockaddr_storage saddr_r; char localip[60], remoteip[60]; sasl_interact_t *client_interact=NULL; const char *out; unsigned int outlen; int inlen; struct authresult result; assert(imclient); assert(mechlist); /******* * Now set the SASL properties *******/ secprops=make_secprops(minssf,maxssf); if (secprops==NULL) return 1; saslresult=sasl_setprop(imclient->saslconn, SASL_SEC_PROPS, secprops); if (saslresult!=SASL_OK) return 1; free(secprops); addrsize=sizeof(struct sockaddr_storage); if (getpeername(imclient->fd,(struct sockaddr *)&saddr_r,&addrsize)!=0) return 1; addrsize=sizeof(struct sockaddr_storage); if (getsockname(imclient->fd,(struct sockaddr *)&saddr_l,&addrsize)!=0) return 1; if(iptostring((const struct sockaddr *)&saddr_l, addrsize, localip, sizeof(localip)) != 0) return 1; if(iptostring((const struct sockaddr *)&saddr_r, addrsize, remoteip, sizeof(remoteip)) != 0) return 1; saslresult=sasl_setprop(imclient->saslconn, SASL_IPREMOTEPORT, remoteip); if (saslresult!=SASL_OK) return 1; saslresult=sasl_setprop(imclient->saslconn, SASL_IPLOCALPORT, localip); if (saslresult!=SASL_OK) return 1; /******** * SASL is setup. Now try the actual authentication ********/ saslresult=SASL_INTERACT; /* call sasl client start */ while (saslresult==SASL_INTERACT) { saslresult=sasl_client_start(imclient->saslconn, mechlist, &client_interact, &out, &outlen, mechusing); if (saslresult==SASL_INTERACT) { fillin_interactions(imclient, client_interact, user); /* fill in prompts */ } } if ((saslresult!=SASL_OK) && (saslresult!=SASL_CONTINUE)) return saslresult; imclient_send(imclient, authresult, (void *)&result, "AUTHENTICATE %a", *mechusing); while (1) { /* Wait for ready response or command completion */ imclient->readytag = imclient->gensym; while (imclient->readytag) { imclient_processoneevent(imclient); } /* stop looping on command completion */ if (!imclient->readytxt) break; if (isspace((unsigned char) *imclient->readytxt)) { inlen = 0; } else { inlen = imclient_decodebase64(imclient->readytxt); } if (inlen == -1) { /* bad base64 string */ return replytype_bad; } if (inlen == 0 && outlen > 0) { /* we have something from the initial thing to send */ } else { /* perform a step */ saslresult = SASL_INTERACT; while (saslresult == SASL_INTERACT) { saslresult=sasl_client_step(imclient->saslconn, imclient->readytxt, inlen, &client_interact, &out, &outlen); if (saslresult == SASL_INTERACT) { /* fill in prompts */ fillin_interactions(imclient, client_interact, user); } } } /* send our reply to the server */ if ((saslresult==SASL_OK) || (saslresult==SASL_CONTINUE)) { if (out == NULL || outlen == 0) { imclient_write(imclient, "\r\n", 2); } else { imclient_writebase64(imclient, out, outlen); } } else { imclient_write(imclient,"*\r\n", 3); return saslresult; } outlen = 0; } if(result.replytype == replytype_ok) imclient->saslcompleted = 1; return (result.replytype != replytype_ok); } /* xxx service is not needed here */ int imclient_authenticate(struct imclient *imclient, char *mechlist, char *service __attribute__((unused)), char *user, int minssf, int maxssf) { int r; char *mlist; const char *mtried; assert(imclient); assert(mechlist); mlist = xstrdup(mechlist); ucase(mlist); do { mtried = NULL; r = imclient_authenticate_sub(imclient, mlist, user, minssf, maxssf, &mtried); /* eliminate mtried (mechanism tried) from mlist */ if (r != 0 && mtried) { char *newlist = xmalloc(strlen(mlist)+1); char *mtr = xstrdup(mtried); char *tmp; ucase(mtr); tmp = strstr(mlist,mtr); if(!tmp) { free(mtr); free(mlist); break; } *tmp = '\0'; strcpy(newlist,mlist); /* Use tmp+1 here to skip the \0 we just put in. * this is safe because even if the mechs are one character * long there would still be another trailing \0 */ tmp = strchr(tmp+1,' '); if (tmp) { tmp++; /* skip the space */ strcat(newlist,tmp); } free(mtr); free(mlist); mlist = newlist; } } while ((r != 0) && (mtried)); if (r == 0) { const int *ptr; sasl_getprop(imclient->saslconn, SASL_MAXOUTBUF, (const void **) &ptr); imclient->maxplain = *ptr < IMCLIENT_BUFSIZE ? *ptr : IMCLIENT_BUFSIZE; } free(mlist); return r; } #define XX 127 /* * Tables for encoding/decoding base64 */ static const char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static const char index_64[256] = { XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,62, XX,XX,XX,63, 52,53,54,55, 56,57,58,59, 60,61,XX,XX, XX,XX,XX,XX, XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,XX, XX,XX,XX,XX, XX,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 45,46,47,48, 49,50,51,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, }; #define CHAR64(c) (index_64[(unsigned char)(c)]) /* * Decode in-place the base64 data in 'input'. Returns the length * of the decoded data, or -1 if there was an error. */ static int imclient_decodebase64(char *input) { int len = 0; unsigned char *output = (unsigned char *)input; int c1, c2, c3, c4; assert(input); while (*input) { c1 = *input++; if (CHAR64(c1) == XX) return -1; c2 = *input++; if (CHAR64(c2) == XX) return -1; c3 = *input++; if (c3 != '=' && CHAR64(c3) == XX) return -1; c4 = *input++; if (c4 != '=' && CHAR64(c4) == XX) return -1; *output++ = (CHAR64(c1) << 2) | (CHAR64(c2) >> 4); ++len; if (c3 == '=') break; *output++ = ((CHAR64(c2) << 4) & 0xf0) | (CHAR64(c3) >> 2); ++len; if (c4 == '=') break; *output++ = ((CHAR64(c3) << 6) & 0xc0) | CHAR64(c4); ++len; } return len; } /* * Write to the connection 'imclient' the base-64 encoded data * 'output', of (unencoded) length 'len'. */ static void imclient_writebase64(struct imclient *imclient, const char *output, size_t len) { char buf[1024]; size_t buflen = 0; int c1, c2, c3; assert(imclient); assert(output); while (len) { if (buflen >= (size_t)(sizeof(buf)-4)) { imclient_write(imclient, buf, buflen); buflen = 0; } c1 = (unsigned char)*output++; buf[buflen++] = basis_64[c1>>2]; if (--len == 0) c2 = 0; else c2 = (unsigned char)*output++; buf[buflen++] = basis_64[((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)]; if (len == 0) { buf[buflen++] = '='; buf[buflen++] = '='; break; } if (--len == 0) c3 = 0; else c3 = (unsigned char)*output++; buf[buflen++] = basis_64[((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)]; if (len == 0) { buf[buflen++] = '='; break; } --len; buf[buflen++] = basis_64[c3 & 0x3F]; } if (buflen >= sizeof(buf)-2) { imclient_write(imclient, buf, buflen); buflen = 0; } buf[buflen++] = '\r'; buf[buflen++] = '\n'; imclient_write(imclient, buf, buflen); } /*************** All these functions help do the starttls; these are copied from imtest.c ********/ #ifdef HAVE_SSL static int verify_depth; static int verify_error = X509_V_OK; #define CCERT_BUFSIZ 256 static char peer_CN[CCERT_BUFSIZ]; static char issuer_CN[CCERT_BUFSIZ]; /* * Set up the cert things on the server side. We do need both the * private key (in key_file) and the cert (in cert_file). * Both files may be identical. * * This function is taken from OpenSSL apps/s_cb.c */ static int set_cert_stuff(SSL_CTX * ctx, char *cert_file, char *key_file) { if (cert_file != NULL) { if (SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM) <= 0) { printf("[ unable to get certificate from '%s' ]\n", cert_file); return (0); } if (key_file == NULL) key_file = cert_file; if (SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM) <= 0) { printf("[ unable to get private key from '%s' ]\n", key_file); return (0); } /* Now we know that a key and cert have been set against * the SSL context */ if (!SSL_CTX_check_private_key(ctx)) { printf("[ Private key does not match the certificate public key ]\n"); return (0); } } return (1); } /* taken from OpenSSL apps/s_cb.c */ static int verify_callback(int ok, X509_STORE_CTX * ctx) { char buf[256]; X509 *err_cert; int err; int depth; err_cert = X509_STORE_CTX_get_current_cert(ctx); err = X509_STORE_CTX_get_error(ctx); depth = X509_STORE_CTX_get_error_depth(ctx); X509_NAME_oneline(X509_get_subject_name(err_cert), buf, sizeof(buf)); /* if (verbose==1) printf("Peer cert verify depth=%d %s\n", depth, buf);*/ if (!ok) { printf("verify error:num=%d:%s\n", err, X509_verify_cert_error_string(err)); if (verify_depth >= depth) { ok = 1; verify_error = X509_V_OK; } else { ok = 0; verify_error = X509_V_ERR_CERT_CHAIN_TOO_LONG; } } switch (ctx->error) { case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert), buf, sizeof(buf)); printf("issuer= %s\n", buf); break; case X509_V_ERR_CERT_NOT_YET_VALID: case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: printf("cert not yet valid\n"); break; case X509_V_ERR_CERT_HAS_EXPIRED: case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: printf("cert has expired\n"); break; } /* if (verbose==1) printf("verify return:%d\n", ok);*/ return (ok); } /* taken from OpenSSL apps/s_cb.c */ static RSA *tmp_rsa_cb(SSL *s __attribute__((unused)), int export __attribute__((unused)), int keylength) { static RSA *rsa_tmp = NULL; if (rsa_tmp == NULL) { rsa_tmp = RSA_generate_key(keylength, RSA_F4, NULL, NULL); } return (rsa_tmp); } /* * Seed the random number generator. */ static int tls_rand_init(void) { #ifdef EGD_SOCKET return (RAND_egd(EGD_SOCKET)); #else /* otherwise let OpenSSL do it internally */ return 0; #endif } char *var_tls_CAfile=""; char *var_tls_CApath=""; /* * This is the setup routine for the SSL client. * * The skeleton of this function is taken from OpenSSL apps/s_client.c. */ static int tls_init_clientengine(struct imclient *imclient, int verifydepth, char *var_tls_cert_file, char *var_tls_key_file) { int off = 0; int verify_flags = SSL_VERIFY_NONE; char *CApath; char *CAfile; char *c_cert_file; char *c_key_file; assert(imclient); SSL_load_error_strings(); SSLeay_add_ssl_algorithms(); if (tls_rand_init() == -1) { printf("[ TLS engine: cannot seed PRNG ]\n"); return -1; } imclient->tls_ctx = SSL_CTX_new(TLSv1_client_method()); if (imclient->tls_ctx == NULL) { return -1; }; off |= SSL_OP_ALL; /* Work around all known bugs */ SSL_CTX_set_options(imclient->tls_ctx, off); /* debugging SSL_CTX_set_info_callback(imclient->tls_ctx, apps_ssl_info_callback); */ if (strlen(var_tls_CAfile) == 0) CAfile = NULL; else CAfile = var_tls_CAfile; if (strlen(var_tls_CApath) == 0) CApath = NULL; else CApath = var_tls_CApath; if (CAfile || CApath) if ((!SSL_CTX_load_verify_locations(imclient->tls_ctx, CAfile, CApath)) || (!SSL_CTX_set_default_verify_paths(imclient->tls_ctx))) { printf("[ TLS engine: cannot load CA data ]\n"); return -1; } if (strlen(var_tls_cert_file) == 0) c_cert_file = NULL; else c_cert_file = var_tls_cert_file; if (strlen(var_tls_key_file) == 0) c_key_file = NULL; else c_key_file = var_tls_key_file; if (c_cert_file || c_key_file) if (!set_cert_stuff(imclient->tls_ctx, c_cert_file, c_key_file)) { printf("[ TLS engine: cannot load cert/key data ]\n"); return -1; } SSL_CTX_set_tmp_rsa_callback(imclient->tls_ctx, tmp_rsa_cb); verify_depth = verifydepth; SSL_CTX_set_verify(imclient->tls_ctx, verify_flags, verify_callback); return 0; } #if 0 /* Dead code only for debugging */ static int do_dump = 1; /* * taken from OpenSSL crypto/bio/b_dump.c, modified to save a lot of strcpy * and strcat by Matti Aarnio. */ #define TRUNCATE #define DUMP_WIDTH 16 static int tls_dump(const char *s, int len) { int ret = 0; char buf[160 + 1]; char *ss; int i; int j; int rows; int trunc; unsigned char ch; trunc = 0; #ifdef TRUNCATE for (; (len > 0) && ((s[len - 1] == ' ') || (s[len - 1] == '\0')); len--) trunc++; #endif rows = (len / DUMP_WIDTH); if ((rows * DUMP_WIDTH) < len) rows++; for (i = 0; i < rows; i++) { buf[0] = '\0'; /* start with empty string */ ss = buf; sprintf(ss, "%04x ", i * DUMP_WIDTH); ss += strlen(ss); for (j = 0; j < DUMP_WIDTH; j++) { if (((i * DUMP_WIDTH) + j) >= len) { strcpy(ss, " "); } else { ch = ((unsigned char) *((char *) (s) + i * DUMP_WIDTH + j)) & 0xff; sprintf(ss, "%02x[%c]%c", ch, ch, j == 7 ? '|' : ' '); ss += 6; } } ss += strlen(ss); *ss+= ' '; for (j = 0; j < DUMP_WIDTH; j++) { if (((i * DUMP_WIDTH) + j) >= len) break; ch = ((unsigned char) *((char *) (s) + i * DUMP_WIDTH + j)) & 0xff; *ss+= (((ch >= ' ') && (ch <= '~')) ? ch : '.'); if (j == 7) *ss+= ' '; } *ss = 0; /* * if this is the last call then update the ddt_dump thing so that * we will move the selection point in the debug window */ printf("%s\n", buf); ret += strlen(buf); } #ifdef TRUNCATE if (trunc > 0) { sprintf(buf, "%04x - \n", len+ trunc); printf("%s\n", buf); ret += strlen(buf); } #endif return (ret); } /* these next two taken from OpenSSL apps/s_cb.c */ static long bio_dump_cb(BIO * bio, int cmd, const char *argp, int argi, long argl __attribute__((unused)), long ret) { if (!do_dump) return (ret); if (cmd == (BIO_CB_READ | BIO_CB_RETURN)) { printf("read from %08X [%08lX] (%d bytes => %ld (0x%X))\n", (unsigned int) bio, (unsigned long) argp, argi, ret, (unsigned int) ret); tls_dump(argp, (int) ret); return (ret); } else if (cmd == (BIO_CB_WRITE | BIO_CB_RETURN)) { printf("write to %08X [%08lX] (%d bytes => %ld (0x%X))\n", (unsigned int) bio, (unsigned long) argp, argi, ret, (unsigned int) ret); tls_dump(argp, (int) ret); } return (ret); } static void apps_ssl_info_callback(SSL * s, int where, int ret) { char *str; int w; w = where & ~SSL_ST_MASK; if (w & SSL_ST_CONNECT) str = "SSL_connect"; else if (w & SSL_ST_ACCEPT) str = "SSL_accept"; else str = "undefined"; if (where & SSL_CB_LOOP) { printf("%s:%s\n", str, SSL_state_string_long(s)); } else if (where & SSL_CB_ALERT) { str = (where & SSL_CB_READ) ? "read" : "write"; if ((ret & 0xff) != SSL3_AD_CLOSE_NOTIFY) printf("SSL3 alert %s:%s:%s\n", str, SSL_alert_type_string_long(ret), SSL_alert_desc_string_long(ret)); } else if (where & SSL_CB_EXIT) { if (ret == 0) printf("%s:failed in %s\n", str, SSL_state_string_long(s)); else if (ret < 0) { printf("%s:error in %s %i\n", str, SSL_state_string_long(s),ret); } } } #endif int tls_start_clienttls(struct imclient *imclient, unsigned *layer, char **authid, int fd) { int sts; SSL_SESSION *session; SSL_CIPHER *cipher; X509 *peer; const char *tls_protocol = NULL; const char *tls_cipher_name = NULL; int tls_cipher_usebits = 0; int tls_cipher_algbits = 0; char *tls_peer_CN = ""; char *tls_issuer_CN = NULL; if (imclient->tls_conn == NULL) { imclient->tls_conn = (SSL *) SSL_new(imclient->tls_ctx); } if (imclient->tls_conn == NULL) { printf("Could not allocate 'con' with SSL_new()\n"); return -1; } SSL_clear(imclient->tls_conn); if (!SSL_set_fd(imclient->tls_conn, fd)) { printf("SSL_set_fd failed\n"); return -1; } /*SSL_set_read_ahead(imclient->tls_conn, 1);*/ /* * This is the actual handshake routine. It will do all the negotiations * and will check the client cert etc. */ SSL_set_connect_state(imclient->tls_conn); /* * We do have an SSL_set_fd() and now suddenly a BIO_ routine is called? * Well there is a BIO below the SSL routines that is automatically * created for us, so we can use it for debugging purposes. */ /* if (verbose==1) */ /* BIO_set_callback(SSL_get_rbio(imclient->tls_conn), bio_dump_cb);*/ /* Dump the negotiation for loglevels 3 and 4 */ if ((sts = SSL_connect(imclient->tls_conn)) <= 0) { printf("[ SSL_connect error %d ]\n", sts); /* xxx get string error? */ session = SSL_get_session(imclient->tls_conn); if (session) { SSL_CTX_remove_session(imclient->tls_ctx, session); printf("[ SSL session removed ]\n"); } if (imclient->tls_conn!=NULL) SSL_free(imclient->tls_conn); imclient->tls_conn = NULL; return -1; } /* * Lets see, whether a peer certificate is availabe and what is * the actual information. We want to save it for later use. */ peer = SSL_get_peer_certificate(imclient->tls_conn); if (peer != NULL) { X509_NAME_get_text_by_NID(X509_get_subject_name(peer), NID_commonName, peer_CN, CCERT_BUFSIZ); tls_peer_CN = peer_CN; X509_NAME_get_text_by_NID(X509_get_issuer_name(peer), NID_commonName, issuer_CN, CCERT_BUFSIZ); /* if (verbose==1) printf("subject_CN=%s, issuer_CN=%s\n", peer_CN, issuer_CN);*/ tls_issuer_CN = issuer_CN; } tls_protocol = SSL_get_version(imclient->tls_conn); cipher = SSL_get_current_cipher(imclient->tls_conn); tls_cipher_name = SSL_CIPHER_get_name(cipher); tls_cipher_usebits = SSL_CIPHER_get_bits(cipher, &tls_cipher_algbits); if (layer!=NULL) *layer = tls_cipher_usebits; if (authid!=NULL) *authid = tls_peer_CN; /* printf("TLS connection established: %s with cipher %s (%d/%d bits)\n", tls_protocol, tls_cipher_name, tls_cipher_usebits, tls_cipher_algbits);*/ return 0; } int imclient_starttls(struct imclient *imclient, int verifydepth __attribute__((unused)), char *var_tls_cert_file, char *var_tls_key_file, int *layer __attribute__((unused))) { int result; struct authresult theresult; unsigned ssf; char *auth_id; imclient_send(imclient, tlsresult, (void *)&theresult, "STARTTLS"); /* Wait for ready response or command completion */ imclient->readytag = imclient->gensym; while (imclient->readytag) { imclient_processoneevent(imclient); } result=tls_init_clientengine(imclient, 10, var_tls_cert_file, var_tls_key_file); if (result!=0) { printf("[ TLS engine failed ]\n"); return 1; } else { result=tls_start_clienttls(imclient, &ssf, &auth_id, imclient->fd); if (result!=0) { printf("[ TLS negotiation did not succeed ]\n"); return 1; } } /* turn non-blocking i/o back on */ /* TLS negotiation succeeded */ imclient->tls_on = 1; auth_id=""; /* xxx this really should be peer_CN or issuer_CN but I can't figure out which is which at the moment */ /* tell SASL about the negotiated layer */ result=sasl_setprop(imclient->saslconn, SASL_SSF_EXTERNAL, &ssf); if (result!=SASL_OK) return 1; result=sasl_setprop(imclient->saslconn, SASL_AUTH_EXTERNAL, auth_id); if (result!=SASL_OK) return 1; return 0; } #endif /* HAVE_SSL */ cyrus-imspd-v1.8/lib/imclient.h0100644004310100000120000000754210004007770015712 0ustar shadowstaff/* imclient.h -- Streaming IMxP client library * $Id: imclient.h,v 1.4 2004/01/22 18:01:28 rjs3 Exp $ * * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #ifndef INCLUDED_IMCLIENT_H #define INCLUDED_IMCLIENT_H #include struct imclient; struct sasl_client; /* to avoid having to include sasl sometimes */ struct imclient_reply { char *keyword; /* reply keyword */ long msgno; /* message number (-1 = no message number) */ char *text; /* subsequent text */ }; /* Flags for untagged-reply callbacks */ #define CALLBACK_NUMBERED 1 /* Has a message sequence number */ #define CALLBACK_NOLITERAL 2 /* Data cannot contain a literal */ /* Connection flags */ #define IMCLIENT_CONN_NONSYNCLITERAL 1 /* Server supports non-synchronizing literals */ #define IMCLIENT_CONN_INITIALRESPONSE 1 /* Server supports SASL initial response */ typedef void imclient_proc_t(struct imclient *imclient, void *rock, struct imclient_reply *reply); extern int imclient_connect(struct imclient **imclient, const char *host, const char *port, sasl_callback_t *cbs); extern void imclient_close(struct imclient *imclient); extern void imclient_setflags(struct imclient *imclient, int flags); extern void imclient_clearflags(struct imclient *imclient, int flags); extern char *imclient_servername(struct imclient *imclient); extern void imclient_addcallback(struct imclient *imclient, ...); extern void imclient_send(struct imclient *imclient, imclient_proc_t *proc, void *rock, const char *fmt, ...); extern void imclient_processoneevent(struct imclient *imclient); extern void imclient_getselectinfo(struct imclient *imclient, int *fd, int *wanttowrite); extern int imclient_authenticate(struct imclient *imclient, char *mechlist, char *service, char *user, int minssf, int maxssf); #ifdef HAVE_SSL extern int imclient_starttls(struct imclient *imclient, int verifydepth, char *var_tls_cert_file, char *var_tls_key_file, int *layer); #endif /* HAVE_SSL */ extern void imclient_write (struct imclient *imclient, const char *s, size_t len); #endif /* INCLUDED_IMCLIENT_H */ cyrus-imspd-v1.8/lib/imparse.c0100644004310100000120000001273607214051347015552 0ustar shadowstaff/* imparse.c -- IMxP client-side parsing routines $Id: imparse.c,v 1.3 2000/12/08 03:17:59 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include "imparse.h" /* * Parse a word from the string starting at the pointer pointed to by 's'. * Places a pointer to the parsed word in the pointer at 'retval', * returns the character following the word, and modifies the pointer at * 's' to point after the returned character. Modifies the input buffer. */ int imparse_word(s, retval) char **s; char **retval; { int c; *retval = *s; for (;;) { c = *(*s)++; if (!c || isspace(c) || c == '(' || c == ')' || c == '\"') { (*s)[-1] = '\0'; return c; } } } /* * Parse an astring from the string starting at the pointer pointed to * by 's'. On success, places a pointer to the parsed word in the * pointer at 'retval', returns the character following the word, and * modifies the pointer at 's' to point after the returned character. * On failure, returns EOF, modifies the pointer at 'retval' to point * at the empty string, and modifies 's' to point around the syntax error. * Modifies the input buffer. */ int imparse_astring(s, retval) char **s; char **retval; { int c; char *d; int len = 0; int sawdigit = 0; switch (**s) { case '\0': case ' ': case '(': case ')': case '\r': case '\n': /* Invalid starting character */ *retval = ""; return EOF; default: /* * Atom -- parser is liberal in accepting specials other * than whitespace, parens, or double quotes */ return imparse_word(s, retval); case '\"': /* * Quoted-string. Parser is liberal in accepting qspecials * other than double-quote, CR, and LF. */ *retval = d = ++(*s); for (;;) { c = *(*s)++; if (c == '\\') { c = *(*s)++; } else if (c == '\"') { *d = '\0'; return *(*s)++; } else if (c == '\0' || c == '\r' || c == '\n') { *retval = ""; return EOF; } *d++ = c; } case '{': /* Literal */ (*s)++; while (isdigit(c = *(*s)++)) { sawdigit = 1; len = len*10 + c - '0'; } if (!sawdigit || c != '}' || *(*s)++ != '\r' || *(*s)++ != '\n') { *retval = ""; return EOF; } *retval = *s; *s += len; c = **s; *(*s)++ = '\0'; /* Note that 0 and '\0' mean the same thing */ return c; } } /* * Return nonzero if 's' matches the grammar for an atom */ int imparse_isatom(s) const char *s; { int len = 0; if (!*s) return 0; for (; *s; s++) { len++; if (*s & 0x80 || *s < 0x1f || *s == 0x7f || *s == ' ' || *s == '{' || *s == '(' || *s == ')' || *s == '\"' || *s == '%' || *s == '*' || *s == '\\') return 0; } if (len >= 1024) return 0; return 1; } /* * Return nonzero if 's' matches the grammar for a sequence */ int imparse_issequence(const char* s) { int c; int len = 0; int sawcolon = 0; while ((c = *s)) { if (c == ',') { if (!len) return 0; if (!isdigit((int) s[-1]) && s[-1] != '*') return 0; sawcolon = 0; } else if (c == ':') { if (sawcolon || !len) return 0; if (!isdigit((int) s[-1]) && s[-1] != '*') return 0; sawcolon = 1; } else if (c == '*') { if (len && s[-1] != ',' && s[-1] != ':') return 0; if (isdigit((int) s[1])) return 0; } else if (!isdigit(c)) { return 0; } s++; len++; } if (len == 0) return 0; if (!isdigit((int) s[-1]) && s[-1] != '*') return 0; return 1; } /* * Return nonzero if 's' matches the grammar for a number */ int imparse_isnumber(const char *s) { if (!*s) return 0; for (; *s; s++) { if (!isdigit((int) *s)) return 0; } return 1; } cyrus-imspd-v1.8/lib/imparse.h0100644004310100000120000000426707214051401015546 0ustar shadowstaff/* imparse.h -- IMxP client-side parsing routines * $Id: imparse.h,v 1.2 2000/12/08 03:18:25 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_IMPARSE_H #define INCLUDED_IMPARSE_H extern int imparse_word (char **s, char **retval); extern int imparse_astring (char **s, char **retval); extern int imparse_isatom (const char *s); extern int imparse_issequence (const char *s); extern int imparse_isnumber (const char *s); #endif /* INCLUDED_IMPARSE_H */ cyrus-imspd-v1.8/lib/iptostring.c0100644004310100000120000000477707613045525016326 0ustar shadowstaff/* * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* $Id: iptostring.c,v 1.1 2003/01/20 19:17:41 rjs3 Exp $ */ #include #include #include #include #include #include #include #include #include #include "iptostring.h" int iptostring(const struct sockaddr *addr, socklen_t addrlen, char *out, unsigned outlen) { char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV]; if(!addr || !out) { errno = EINVAL; return -1; } getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_WITHSCOPEID | NI_NUMERICSERV); if(outlen < strlen(hbuf) + strlen(pbuf) + 2) { errno = ENOMEM; return -1; } snprintf(out, outlen, "%s;%s", hbuf, pbuf); return 0; } cyrus-imspd-v1.8/lib/iptostring.h0100644004310100000120000000413307613045525016315 0ustar shadowstaff/* * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* $Id: iptostring.h,v 1.1 2003/01/20 19:17:41 rjs3 Exp $ */ #ifndef IPTOSTRING_H #define IPTOSTRING_H #include #include #include #include #include int iptostring(const struct sockaddr *addr, socklen_t addrlen, char *out, unsigned outlen); #endif /* IPTOSTRING_H */ cyrus-imspd-v1.8/lib/is.c0100644004310100000120000000507006425166260014522 0ustar shadowstaff/* is.c -- IMAP grammar validity checking * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without * fee, provided that the above copyright notice appear in all copies * and that both that copyright notice and this permission notice * appear in supporting documentation, and that the name of Carnegie * Mellon University not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. Carnegie Mellon University makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #include /* * Return nonzero if 's' matches the grammar for an atom */ int is_atom(s) char *s; { int len = 0; if (!*s) return 0; for (; *s; s++) { len++; if (*s & 0x80 || *s < 0x1f || *s == 0x7f || *s == ' ' || *s == '{' || *s == '(' || *s == ')' || *s == '\"' || *s == '%' || *s == '*' || *s == '\\') return 0; } if (len >= 1024) return 0; return 1; } /* * Return nonzero if 's' matches the grammar for a sequence */ int is_sequence(s) char *s; { int c; int len = 0; int sawcolon = 0; while (c = *s) { if (c == ',') { if (!len) return 0; if (!isdigit(s[-1]) && s[-1] != '*') return 0; sawcolon = 0; } else if (c == ':') { if (sawcolon || !len) return 0; if (!isdigit(s[-1]) && s[-1] != '*') return 0; sawcolon = 1; } else if (c == '*') { if (len && s[-1] != ',' && s[-1] != ':') return 0; if (isdigit(s[1])) return 0; } else if (!isdigit(c)) { return 0; } s++; len++; } if (len == 0) return 0; if (!isdigit(s[-1]) && s[-1] != '*') return 0; return 1; } /* * Return nonzero if 's' matches the grammar for a number */ int is_number(s) char *s; { if (!*s) return 0; for (; *s; s++) { if (!isdigit(*s)) return 0; } return 1; } cyrus-imspd-v1.8/lib/lock.h0100644004310100000120000000442507214051433015037 0ustar shadowstaff/* lock.h -- file locking primitives $Id: lock.h,v 1.2 2000/12/08 03:18:51 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_LOCK_H #define INCLUDED_LOCK_H #ifndef P #ifdef __STDC__ #define P(x) x #else #define P(x) () #endif #endif #include extern int lock_reopen P((int fd, const char *filename, struct stat *sbuf, const char **failaction)); extern int lock_blocking P((int fd)); extern int lock_shared P((int fd)); extern int lock_nonblocking P((int fd)); extern int lock_unlock P((int fd)); #endif /* INCLUDED_LOCK_H */ cyrus-imspd-v1.8/lib/lock_fcntl.c0100644004310100000120000001200707214051472016216 0ustar shadowstaff/* lock_fcntl.c -- Lock files using fcntl() $Id: lock_fcntl.c,v 1.3 2000/12/08 03:19:22 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #include #include #include "lock.h" extern int errno; /* * Block until we obtain an exclusive lock on the file descriptor 'fd', * opened for reading and writing on the file named 'filename'. If * 'filename' is replaced, will re-open it as 'fd' and acquire a lock * on the new file. * * On success, returns 0. If a pointer to a struct stat is given as * 'sbuf', it is filled in. * * On failure, returns -1 with an error code in errno. If * 'failaction' is provided, it is filled in with a pointer to a fixed * string naming the action that failed. * */ int lock_reopen(fd, filename, sbuf, failaction) int fd; const char *filename; struct stat *sbuf; const char **failaction; { int r; struct flock fl; struct stat sbuffile, sbufspare; int newfd; if (!sbuf) sbuf = &sbufspare; for (;;) { fl.l_type= F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; r = fcntl(fd, F_SETLKW, &fl); if (r == -1) { if (errno == EINTR) continue; if (failaction) *failaction = "locking"; return -1; } fstat(fd, sbuf); r = stat(filename, &sbuffile); if (r == -1) { if (failaction) *failaction = "stating"; fl.l_type= F_UNLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; r = fcntl(fd, F_SETLKW, &fl); return -1; } if (sbuf->st_ino == sbuffile.st_ino) return 0; newfd = open(filename, O_RDWR); if (newfd == -1) { if (failaction) *failaction = "opening"; fl.l_type= F_UNLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; r = fcntl(fd, F_SETLKW, &fl); return -1; } dup2(newfd, fd); close(newfd); } } /* * Obtain an exclusive lock on 'fd'. * Returns 0 for success, -1 for failure, with errno set to an * appropriate error code. */ int lock_blocking(fd) int fd; { int r; struct flock fl; for (;;) { fl.l_type= F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; r = fcntl(fd, F_SETLKW, &fl); if (r != -1) return 0; if (errno == EINTR) continue; return -1; } } /* * Obtain a shared lock on 'fd'. * Returns 0 for success, -1 for failure, with errno set to an * appropriate error code. */ int lock_shared(fd) int fd; { int r; struct flock fl; for (;;) { fl.l_type= F_RDLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; r = fcntl(fd, F_SETLKW, &fl); if (r != -1) return 0; if (errno == EINTR) continue; return -1; } } /* * Attempt to get an exclusive lock on 'fd' without blocking. * Returns 0 for success, -1 for failure, with errno set to an * appropriate error code. */ int lock_nonblocking(fd) int fd; { int r; struct flock fl; for (;;) { fl.l_type= F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; r = fcntl(fd, F_SETLK, &fl); if (r != -1) return 0; if (errno == EINTR) continue; return -1; } } /* * Release any lock on 'fd'. Always returns success. */ int lock_unlock(int fd) { struct flock fl; fl.l_type= F_UNLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fcntl(fd, F_SETLKW, &fl); return 0; } cyrus-imspd-v1.8/lib/lock_flock.c0100644004310100000120000001050007214051544016202 0ustar shadowstaff/* lock_flock.c -- Lock files using flock() $Id: lock_flock.c,v 1.3 2000/12/08 03:20:04 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include "lock.h" extern int errno; /* * Block until we obtain an exclusive lock on the file descriptor 'fd', * opened for reading and writing on the file named 'filename'. If * 'filename' is replaced, will re-open it as 'fd' and acquire a lock * on the new file. * * On success, returns 0. If a pointer to a struct stat is given as * 'sbuf', it is filled in. * * On failure, returns -1 with an error code in errno. If * 'failaction' is provided, it is filled in with a pointer to a fixed * string naming the action that failed. * */ int lock_reopen(fd, filename, sbuf, failaction) int fd; const char *filename; struct stat *sbuf; const char **failaction; { int r; struct stat sbuffile, sbufspare; int newfd; if (!sbuf) sbuf = &sbufspare; for (;;) { r = flock(fd, LOCK_EX); if (r == -1) { if (errno == EINTR) continue; if (failaction) *failaction = "locking"; return -1; } fstat(fd, sbuf); r = stat(filename, &sbuffile); if (r == -1) { if (failaction) *failaction = "stating"; flock(fd, LOCK_UN); return -1; } if (sbuf->st_ino == sbuffile.st_ino) return 0; newfd = open(filename, O_RDWR); if (newfd == -1) { if (failaction) *failaction = "opening"; flock(fd, LOCK_UN); return -1; } dup2(newfd, fd); close(newfd); } } /* * Obtain an exclusive lock on 'fd'. * Returns 0 for success, -1 for failure, with errno set to an * appropriate error code. */ int lock_blocking(fd) int fd; { int r; for (;;) { r = flock(fd, LOCK_EX); if (r != -1) return 0; if (errno == EINTR) continue; return -1; } } /* * Obtain a shared lock on 'fd'. * Returns 0 for success, -1 for failure, with errno set to an * appropriate error code. */ int lock_shared(fd) int fd; { int r; for (;;) { r = flock(fd, LOCK_SH); if (r != -1) return 0; if (errno == EINTR) continue; return -1; } } /* * Attempt to get an exclusive lock on 'fd' without blocking. * Returns 0 for success, -1 for failure, with errno set to an * appropriate error code. */ int lock_nonblocking(fd) int fd; { int r; for (;;) { r = flock(fd, LOCK_EX|LOCK_NB); if (r != -1) return 0; if (errno == EINTR) continue; return -1; } } /* * Release any lock on 'fd'. Always returns success. */ int lock_unlock(int fd) { flock(fd, LOCK_UN); return 0; } cyrus-imspd-v1.8/lib/map.h0100644004310100000120000000425707214051623014670 0ustar shadowstaff/* map.h -- memory mapping functions $Id: map.h,v 1.2 2000/12/08 03:20:51 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_MAP_H #define INCLUDED_MAP_H #define MAP_UNKNOWN_LEN ((unsigned long)-1) extern void map_refresh(int fd, int onceonly, const char **base, unsigned long *len, unsigned long newlen, const char *name, const char *mboxname); extern void map_free(const char **base, unsigned long *len); #endif /* INCLUDED_MAP_H */ cyrus-imspd-v1.8/lib/map_nommap.c0100644004310100000120000000702107765430153016234 0ustar shadowstaff/* map_nommap.c -- dummy memory-mapping routines. $Id: map_nommap.c,v 1.4 2003/12/09 20:28:27 cdaboo Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #include #include "xmalloc.h" #include "map.h" #include "exitcodes.h" #define SLOP (4*1024) /* * Create/refresh mapping of file */ void map_refresh(fd, onceonly, base, len, newlen, name, mboxname) int fd; int onceonly; const char **base; unsigned long *len; unsigned long newlen; const char *name; const char *mboxname; { char *p; int n, left; struct stat sbuf; char buf[80]; if (newlen == MAP_UNKNOWN_LEN) { if (fstat(fd, &sbuf) == -1) { syslog(LOG_ERR, "IOERROR: fstating %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); snprintf(buf, sizeof(buf), "failed to fstat %s file", name); fatal(buf, EC_IOERR); } newlen = sbuf.st_size; } /* Need a larger buffer */ if (*len < newlen) { if (*len) free((char *)*base); *len = newlen + (onceonly ? 0 : SLOP); *base = xmalloc(*len); } lseek(fd, 0L, 0); left = newlen; p = *base; while (left) { n = read(fd, p, left); if (n <= 0) { if (n == 0) { syslog(LOG_ERR, "IOERROR: reading %s file%s%s: end of file", name, mboxname ? " for " : "", mboxname ? mboxname : ""); } else { syslog(LOG_ERR, "IOERROR: reading %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); } snprintf(buf, sizeof(buf), "failed to read %s file", name); fatal(buf, EC_IOERR); } p += n; left -= n; } } /* * Destroy mapping of file */ void map_free(base, len) const char **base; unsigned long *len; { if (*len) free((char *)*base); *base = 0; *len = 0; } cyrus-imspd-v1.8/lib/map_private.c0100644004310100000120000000542307765430153016423 0ustar shadowstaff/* map_private.c -- memory-mapping routines using MAP_PRIVATE. $Id: map_private.c,v 1.3 2003/12/09 20:28:27 cdaboo Exp $ # Copyright 1998 by Carnegie Mellon University # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that copyright notice and this permission notice appear in # supporting documentation, and that the name of CMU not be # used in advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # # CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL # CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. * */ #include #include #include #include #include #include "map.h" #include "exitcodes.h" /* * Create/refresh mapping of file * Always removes old mapping and creates a new one. */ void map_refresh(fd, onceonly, base, len, newlen, name, mboxname) int fd; int onceonly; const char **base; unsigned long *len; unsigned long newlen; const char *name; const char *mboxname; { struct stat sbuf; char buf[80]; if (newlen == MAP_UNKNOWN_LEN) { if (fstat(fd, &sbuf) == -1) { syslog(LOG_ERR, "IOERROR: fstating %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); snprintf(buf, sizeof(buf), "failed to fstat %s file", name); fatal(buf, EC_IOERR); } newlen = sbuf.st_size; } if (*len) munmap((char *)*base, *len); if (newlen == 0) { *base = 0; *len = 0; return; } *base = (char *)mmap((caddr_t)0, newlen, PROT_READ, (onceonly ? MAP_SHARED : MAP_PRIVATE) #ifdef MAP_FILE | MAP_FILE #endif #ifdef MAP_VARIABLE | MAP_VARIABLE #endif , fd, 0L); if (*base == (char *)-1) { if (onceonly) { /* Try again without using MAP_SHARED */ *len = 0; map_refresh(fd, 0, base, len, newlen, name, mboxname); return; } syslog(LOG_ERR, "IOERROR: mapping %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); snprintf(buf, sizeof(buf), "failed to mmap %s file", name); fatal(buf, EC_IOERR); } *len = newlen; } /* * Destroy mapping of file */ void map_free(base, len) const char **base; unsigned long *len; { if (*len) munmap((char *)*base, *len); *base = 0; *len = 0; } cyrus-imspd-v1.8/lib/map_shared.c0100644004310100000120000000662507765430153016224 0ustar shadowstaff/* map_shared.c -- memory-mapping routines. $Id: map_shared.c,v 1.4 2003/12/09 20:28:27 cdaboo Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #include #include #include #include #include #include #include "map.h" #include "exitcodes.h" #include "xmalloc.h" #define SLOP (8*1024) /* * Create/refresh mapping of file */ void map_refresh(fd, onceonly, base, len, newlen, name, mboxname) int fd; int onceonly; const char **base; unsigned long *len; unsigned long newlen; const char *name; const char *mboxname; { struct stat sbuf; char buf[80]; if (newlen == MAP_UNKNOWN_LEN) { if (fstat(fd, &sbuf) == -1) { syslog(LOG_ERR, "IOERROR: fstating %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); snprintf(buf, sizeof(buf), "failed to fstat %s file", name); fatal(buf, EC_IOERR); } newlen = sbuf.st_size; } /* Already mapped in */ if (*len >= newlen) return; if (*len) munmap((char *)*base, *len); if (!onceonly) { newlen = (newlen + 2*SLOP - 1) & ~(SLOP-1); } *base = (char *)mmap((caddr_t)0, newlen, PROT_READ, MAP_SHARED #ifdef MAP_FILE | MAP_FILE #endif #ifdef MAP_VARIABLE | MAP_VARIABLE #endif , fd, 0L); if (*base == (char *)-1) { syslog(LOG_ERR, "IOERROR: mapping %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); snprintf(buf, sizeof(buf), "failed to mmap %s file", name); fatal(buf, EC_IOERR); } *len = newlen; } /* * Destroy mapping of file */ void map_free(base, len) const char **base; unsigned long *len; { if (*len) munmap((char *)*base, *len); *base = 0; *len = 0; } cyrus-imspd-v1.8/lib/map_stupidshared.c0100644004310100000120000000673507765430153017457 0ustar shadowstaff/* map_stupidshared.c -- memory-mapping routines working around DEC stupidity. * * This file is like map_shared.c, but doesn't use any "SLOP", since * "Digital Unix" doesn't permit mapping a region past the end of a file. $Id: map_stupidshared.c,v 1.3 2003/12/09 20:28:27 cdaboo Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #include #include #include #include #include #include #include "map.h" #include "exitcodes.h" /* * Create/refresh mapping of file */ void map_refresh(fd, onceonly, base, len, newlen, name, mboxname) int fd; int onceonly; const char **base; unsigned long *len; unsigned long newlen; const char *name; const char *mboxname; { struct stat sbuf; char buf[80]; if (newlen == MAP_UNKNOWN_LEN) { if (fstat(fd, &sbuf) == -1) { syslog(LOG_ERR, "IOERROR: fstating %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); snprintf(buf, sizeof(buf), "failed to fstat %s file", name); fatal(buf, EC_IOERR); } newlen = sbuf.st_size; } /* Already mapped in */ if (*len >= newlen) return; if (*len) munmap((char *)*base, *len); *base = (char *)mmap((caddr_t)0, newlen, PROT_READ, MAP_SHARED #ifdef MAP_FILE | MAP_FILE #endif #ifdef MAP_VARIABLE | MAP_VARIABLE #endif , fd, 0L); if (*base == (char *)-1) { syslog(LOG_ERR, "IOERROR: mapping %s file%s%s: %m", name, mboxname ? " for " : "", mboxname ? mboxname : ""); snprintf(buf, sizeof(buf), "failed to mmap %s file", name); fatal(buf, EC_IOERR); } *len = newlen; } /* * Destroy mapping of file */ void map_free(base, len) const char **base; unsigned long *len; { if (*len) munmap((char *)*base, *len); *base = 0; *len = 0; } cyrus-imspd-v1.8/lib/memmove.c0100644004310100000120000000425307214052212015542 0ustar shadowstaff/* memmove.c -- replacement memmove() routine * Only handles overlapping strings when moving data upwards $Id: memmove.c,v 1.3 2000/12/08 03:24:58 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ void *memmove(s, ct, n) void *s; const void *ct; unsigned int n; { char *c_s = s; const char *c_ct = ct; if (c_s <= c_ct) { while (n--) { *c_s++ = *c_ct++; } } else { while (n--) { c_s[n] = c_ct[n]; } } return s; } cyrus-imspd-v1.8/lib/mkchartable.c0100644004310100000120000006125207765430153016373 0ustar shadowstaff/* mkchartable.c -- Generate character set mapping table * * $Id: mkchartable.c,v 1.4 2003/12/09 20:28:27 cdaboo Exp $ * * Copyright (c) 1996-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #include #include #include #include #include #include #include "xmalloc.h" #define XX 127 /* * Table for decoding hexadecimal */ static const char index_hex[256] = { XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,XX,XX, XX,XX,XX,XX, XX,10,11,12, 13,14,15,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,10,11,12, 13,14,15,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, }; #define HEXCHAR(c) (index_hex[(unsigned char)(c)]) #define MAX_MAPCODE 20 struct cmap { int code; int num_mapcode; int mapcode[MAX_MAPCODE]; char *translation; int trans_offset; }; struct cmap *map=NULL; int map_num=0; int map_alloc=0; #define MAPGROW 200 struct tablechar { int code; char *translation; int trans_offset; char *action; char *comment; }; #define EMPTYTCHAR(tc) ((tc).code == -1 && !(tc).translation && !(tc).action) struct table { char *name; char *endaction; struct tablechar ch[256]; }; struct table *table=NULL; int table_num=0; int table_alloc=0; #define TABLEGROW 200 static void readmapfile(char *name); static void mungemappings(void); static void readcharfile(char *name); static void printtable(char *name); static void freetabledata(void); static void freetable(void); static void freemap(void); static void usage(void); static int newstate(char *args); static int findstate(char *name); static void mkunicodetable(void); static void mkutf8table(void); static void mkutf7table(void); int main(int argc, char **argv) { int opt; while ((opt = getopt(argc, argv, "m:")) != EOF) { switch (opt) { case 'm': readmapfile(optarg); break; default: usage(); } } if (map_num == 0 || argc == optind) usage(); printf("#include \"charset.h\"\n"); printf("#include \"chartable.h\"\n"); mungemappings(); fprintf(stderr, "mkchartable: mapping unicode...\n"); mkunicodetable(); printtable("unicode"); fprintf(stderr, "mkchartable: mapping UTF-8...\n"); mkutf8table(); printtable("utf-8"); fprintf(stderr, "mkchartable: mapping UTF-7...\n"); mkutf7table(); printtable("utf-7"); while (argv[optind]) { fprintf(stderr, "mkchartable: mapping %s...\n", argv[optind]); readcharfile(argv[optind]); printtable(argv[optind]); freetabledata(); optind++; } printf("/*\n"); printf(" * Mapping of character sets to tables\n"); printf(" */\n"); printf("const struct charset chartables_charset_table[] = {\n"); printf(" { \"us-ascii\", chartables_us_ascii }, /* US-ASCII must be charset number 0 */\n"); printf(" { \"utf-8\", chartables_utf_8 },\n"); printf(" { \"utf-7\", chartables_utf_7 },\n"); printf(" { \"iso-8859-1\", chartables_iso_8859_1 },\n"); printf(" { \"iso-8859-2\", chartables_iso_8859_2 },\n"); printf(" { \"iso-8859-3\", chartables_iso_8859_3 },\n"); printf(" { \"iso-8859-4\", chartables_iso_8859_4 },\n"); printf(" { \"iso-8859-5\", chartables_iso_8859_5 },\n"); printf(" { \"iso-8859-6\", chartables_iso_8859_6 },\n"); printf(" { \"iso-8859-7\", chartables_iso_8859_7 },\n"); printf(" { \"iso-8859-8\", chartables_iso_8859_8 },\n"); printf(" { \"iso-8859-9\", chartables_iso_8859_9 },\n"); printf(" { \"koi8-r\", chartables_koi8_r },\n"); printf(" { \"iso-2022-jp\", chartables_iso_2022_jp },\n"); printf(" { \"iso-2022-kr\", chartables_iso_2022_kr },\n"); printf(" { \"gb2312\", chartables_gb2312 },\n"); printf(" { \"big5\", chartables_big5 },\n"); printf(" /* Compatiblilty names */\n"); printf(" { \"unicode-1-1-utf-7\", chartables_utf_7 },\n"); printf(" { \"unicode-2-0-utf-7\", chartables_utf_7 },\n"); printf(" { \"x-unicode-2-0-utf-7\", chartables_utf_7 },\n"); printf("};\n"); printf("const int chartables_num_charsets = (sizeof(chartables_charset_table)/sizeof(*chartables_charset_table));\n"); freetable(); freemap(); return 0; } static void usage(void) { fprintf(stderr, "usage: mkchartable -m mapfile charsetfile...\r\n"); exit(1); } /* Read a Unicode table, deriving useful mappings from it */ static void readmapfile(char *name) { FILE *mapfile; char buf[1024]; char *p; int line = 0; int n, code, i, c; static struct cmap zeromap; mapfile = fopen(name, "r"); if (!mapfile) { perror(name); exit(1); } while (fgets(buf, sizeof(buf), mapfile)) { line++; p = buf; while (*p && isspace(*(unsigned char*)p)) p++; if (!*p || *p == '#') continue; /* Unicode character */ code = 0; for (i=0; i<4; i++) { c = HEXCHAR(*p); p++; if (c == XX) goto syntaxerr; code = code*16 + c; } if (*p++ != ';') goto syntaxerr; /* Character name */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; if (map_num == map_alloc) { map_alloc += MAPGROW; map = (struct cmap *) xrealloc((char *)map, map_alloc * sizeof(struct cmap)); } map[map_num] = zeromap; map[map_num].code = code; /* General Category */ if (*p == 'Z') { /* Is whitespace, map to empty string */ map[map_num].num_mapcode = 0; map_num++; continue; } while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Canonical Combining Class */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Bidirectional category */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Character decomposition */ n = 0; while (*p && *p != ';') { if (n + 1 == MAX_MAPCODE) goto syntaxerr; if (*p == '<') { /* Compatability mapping, skip over the */ p = strchr(p, '>'); if (!p || p[1] != ' ') goto syntaxerr; p += 2; /* Ignore compat mappings to SP followed by combining char */ if (!strncmp(p, "0020 ", 5)) { p = strchr(p, ';'); break; } } code = 0; for (i=0; i<4; i++) { c = HEXCHAR(*p); p++; if (c == XX) goto syntaxerr; code = code*16 + c; } if (*p == ' ') p++; map[map_num].mapcode[n++] = code; } if (*p++ != ';') goto syntaxerr; /* Decimal digit value */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Digit value */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Numeric value */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Mirrored character */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Unicode 1.0 name */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Comment */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Upper case equivalent mapping */ while (*p && *p != ';') p++; if (*p++ != ';') goto syntaxerr; /* Lower case equivalent mapping */ if (*p == ';') { /* No case mapping, use any decomposition we found above */ if (n) { map[map_num].num_mapcode = n; map_num++; } continue; } code = 0; for (i=0; i<4; i++) { c = HEXCHAR(*p); p++; if (c == XX) goto syntaxerr; code = code*16 + c; } if (*p != ';') goto syntaxerr; map[map_num].mapcode[0] = code; map[map_num].num_mapcode = 1; map_num++; } fclose(mapfile); return; syntaxerr: fprintf(stderr, "%s: line %d: syntax error\n", name, line); exit(1); } /* Perform the transitive closure on the unicode mapping table * Calculate translations for mappings */ static void mungemappings(void) { int didchange; int n, newn, n_mapcode, i; int new_mapcode[MAX_MAPCODE]; int num_new_mapcode; int last_translation = 1; int max_len = 3; /* Keep scanning the table until no changes are made */ do { didchange = 0; fprintf(stderr, "mkchartable: expanding unicode mappings...\n"); for (n = 0; n < map_num; n++) { /* Build new map code sequence by iterating over existing * mapcode sequence */ num_new_mapcode = 0; for (n_mapcode = 0; n_mapcode < map[n].num_mapcode; n_mapcode++) { /* Search for a translation of this particular code */ for (newn = 0; newn < map_num; newn++) { if (map[newn].code == map[n].mapcode[n_mapcode]) break; } if (newn != map_num) { /* We have a translation */ didchange++; for (i = 0; i < map[newn].num_mapcode; i++) { new_mapcode[num_new_mapcode++] = map[newn].mapcode[i]; } } else { /* Keep the old mapping for this code */ new_mapcode[num_new_mapcode++] = map[n].mapcode[n_mapcode]; } } /* Copy in the new translation */ map[n].num_mapcode = num_new_mapcode; memcpy(map[n].mapcode, new_mapcode, sizeof(new_mapcode)); } } while (didchange); printf("/* The following unicode mapping table is in effect\n"); printf("From To\n"); for (n = 0; n < map_num; n++) { printf("\n%04x", map[n].code); for (i = 0; i < map[n].num_mapcode; i++) { printf(" %04x", map[n].mapcode[i]); } } printf("\n*/\n"); fprintf(stderr, "mkchartable: building expansion table...\n"); printf("/* Table of traslations longer than three octets.\n"); printf(" * The XLT code in other tables is followed by an 2-octet\n"); printf(" * index into this table.\n"); printf(" * The index of 0 is reserved to mean 'no translation'\n"); printf(" */\n"); printf("const unsigned char chartables_long_translations[] = { 0, \n"); for (n = 0; n < map_num; n++) { int n_mapcode, code; unsigned char translation[256]; int n_t; /* Build translation strings for mappings to 0 or multiple codes */ if (map[n].num_mapcode == 0) { map[n].translation = xstrdup(""); } else if (map[n].num_mapcode > 1) { n_t = 0; for (n_mapcode = 0; n_mapcode < map[n].num_mapcode; n_mapcode++) { code = map[n].mapcode[n_mapcode]; /* Convert code to UTF-8 */ if (code && code <= 0x7f) { translation[n_t++] = (unsigned char)code; } else if (code <= 0x7FF) { translation[n_t++] = (unsigned char) (0xc0 + (code>>6)); translation[n_t++] = (unsigned char) (0x80+(code&0x3f)); } else { translation[n_t++] = (unsigned char) (0xe0 + (code>>12)); translation[n_t++] = (unsigned char) (0x80+((code>>6)&0x3f)); translation[n_t++] = (unsigned char) (0x80+(code&0x3f)); } } if (n_t <= 3) { map[n].translation = xmalloc(4); memcpy(map[n].translation, translation, n_t); map[n].translation[n_t] = '\0'; } else { if (n_t > max_len) max_len = n_t; for (i = 0; i < n_t; i++) { code = translation[i]; if (isprint(code) && code != '\\' && code != '\"' && code != '\'') { printf(" '%c',", code); } else { printf(" %3d,", code); } } printf(" END, /* Translation for %04x (offset %04x) */\n", map[n].code, last_translation); map[n].trans_offset = last_translation; last_translation += n_t; } } } printf("};\n\n const int charset_max_translation = %d;\n\n", max_len); } static void setcode(int state, int character, int code) { int i = 0; for (i = 0; i < map_num; i++) { if (map[i].code == code) break; } if (i == map_num) { table[state].ch[character].code = code; } else if (map[i].translation) { table[state].ch[character].translation = map[i].translation; } else if (map[i].trans_offset) { table[state].ch[character].trans_offset = map[i].trans_offset; } else { table[state].ch[character].code = map[i].mapcode[0]; } } static void readcharfile(char *name) { FILE *charfile; char buf[1024]; char *p; int line = 0; int curstate = -1; int thischar, thisstate; int code, i, c; charfile = fopen(name, "r"); if (!charfile) { perror(name); exit(1); } table_num = 0; while (fgets(buf, sizeof(buf), charfile)) { line++; p = buf + strlen(buf); if (p > buf && p[-1] == '\n') p[-1] = '\0'; p = buf; while (*p && isspace(*(unsigned char*)p)) p++; if (!*p || *p == '#') continue; if (*p == ':') { /* New state */ curstate = newstate(p+1); continue; } if (curstate == -1) { curstate = newstate(""); } thisstate = curstate; thischar = i = 0; while (!isspace(*(unsigned char*)p)) { c = HEXCHAR(*p); i++; p++; if (c == XX) goto syntaxerr; thischar = thischar*16 + c; } while (*p && isspace(*(unsigned char*)p)) p++; if (i > 4) goto syntaxerr; if (i > 2) { if (EMPTYTCHAR(table[thisstate].ch[thischar>>8])) { char action[1024]; snprintf(action, sizeof(action), ">%s_%02x <", table[thisstate].name, thischar>>8); table[thisstate].ch[thischar>>8].action = xstrdup(action); *(strchr(table[thisstate].ch[thischar>>8].action, ' ')) = '\0'; table[thisstate].ch[thischar>>8].comment = xstrdup("multi-byte"); thisstate = newstate(action+1); } else if (!table[thisstate].ch[thischar>>8].action || table[thisstate].ch[thischar>>8].action[0] != '>') { fprintf(stderr, "%s: line %d: multibyte/single-byte conflict\n", name, line); exit(1); } else { thisstate = findstate(table[thisstate].ch[thischar>>8].action+1); if (thisstate == -1) { fprintf(stderr, "%s: line %d: can't find multibyte state\n", name, line); exit(1); } } thischar &= 0xff; } if (!EMPTYTCHAR(table[thisstate].ch[thischar])) { fprintf(stderr, "%s: line %d: duplicate defs for %x\n", name, line, thischar); exit(1); } table[thisstate].ch[thischar].comment = xstrdup(buf); if (*p == '?') { continue; } if (*p == ':' || *p == '>' || *p == '<') { p = table[thisstate].ch[thischar].action = xstrdup(p); while (*p && !isspace(*(unsigned char*)p)) p++; *p = '\0'; continue; } code = 0; for (i=0; i<4; i++) { c = HEXCHAR(*p); p++; if (c == XX) goto syntaxerr; code = code*16 + c; } setcode(thisstate, thischar, code); } fclose(charfile); return; syntaxerr: fprintf(stderr, "%s: line %d: syntax error\n", name, line); exit(1); } /* Generate the table used for mapping raw unicode values */ static void mkunicodetable(void) { int i; int thisstate; unsigned char need_block[256]; int block; char buf[80]; /* Record which blocks we need mappings for */ for (i = 0; i < 256; i++) { need_block[i] = 0; } for (i = 0; i < map_num; i++) { need_block[map[i].code>>8] = 1; } table_num = 0; printf("/* The next two tables are used for doing translations on\n"); printf(" * 16-bit unicode values. First look up the Unicode block\n"); printf(" * (high-order byte) in the chartables_unicode_block table\n"); printf(" * to find the index into chartables_unicode for that block.\n"); printf(" * If the index is 255, there are no translations for that\n"); printf(" * block, so characters can be encoded in UTF-8 algorithmically\n"); printf(" * Otherwise, look up the low-order byte in the chartables_unicode\n"); printf(" * using the index to select the state.\n"); printf(" */\n"); printf("const unsigned char chartables_unicode_block[256] = {"); for (block = 0; block < 256; block++) { if (!(block & 0x7)) printf("\n"); if (!need_block[block]) { printf(" 255,"); continue; } snprintf(buf, sizeof(buf), "BLOCK-%02x-INDEX-%d", block, table_num); thisstate = newstate(buf); printf(" %3d,", thisstate); for (i = 0; i < 256; i++) { setcode(thisstate, i, (block << 8) + i); } } printf("\n};\n\n"); printf("/* NOTE: Unlike other charset translation tables, the \n"); printf(" * chartables_unicode table is NOT used to directly parse\n"); printf(" * a charset. See the comment on chartables_unicode_block\n"); printf(" * for a descripton of how this table is used.\n"); printf(" */\n"); } static void mkutf8table(void) { int start_state, thisstate; int thischar, prefix; char buf[80]; table_num = 0; start_state = newstate("START"); /* Populate the ascii section */ for (thischar = 0; thischar <= 0x7f; thischar++) { setcode(start_state, thischar, thischar); } /* 3-char sequence tables must be numbered 1 and 2 */ thisstate = newstate("STATE-3-2 <"); for (thischar = 0x80; thischar <= 0xbf; thischar++) { table[thisstate].ch[thischar].action = "U83_2"; } thisstate = newstate("STATE-3-3 <"); for (thischar = 0x80; thischar <= 0xbf; thischar++) { table[thisstate].ch[thischar].action = "U83_3"; } /* Populate 2-char sequences */ for (prefix = 2; prefix <= 0x1f; prefix++) { snprintf(buf, sizeof(buf), ">STATE-2-%02x", prefix); table[start_state].ch[prefix+0xc0].action = xstrdup(buf); strcat(buf, " <"); thisstate = newstate(xstrdup(buf+1)); for (thischar = 0; thischar <= 0x3f; thischar++) { setcode(thisstate, thischar+0x80, thischar+(prefix<<6)); } } /* Populate 3-char sequences */ for (thischar = 0xe0; thischar <= 0xef; thischar++) { table[start_state].ch[thischar].action = "U83"; } } static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static void mkutf7table(void) { int start_state, thisstate; int thischar; char *p; table_num = 0; start_state = newstate("START"); /* Populate the ascii section */ table[start_state].ch['+'].action = ">GOTSHIFT"; for (thischar = 0; thischar <= 0x7f; thischar++) { if (!table[start_state].ch[thischar].action) { setcode(start_state, thischar, thischar); } } /* Normal base64 decoding table must be numbered 1 */ thisstate = newstate("B64NORMAL <"); table[thisstate].ch['-'].action = "<"; for (p = basis_64; *p; p++) { table[thisstate].ch[*(unsigned char*)p].action = "U7N"; } for (thischar = 0; thischar <= 0x7f; thischar++) { if (!table[thisstate].ch[thischar].action) { setcode(thisstate, thischar, thischar); } } /* Populate initial base64 decoding table */ thisstate = newstate("GOTSHIFT <"); setcode(thisstate, '-', '+'); for (p = basis_64; *p; p++) { table[thisstate].ch[*(unsigned char*)p].action = "U7F"; } } static int newstate(char *args) { char *p; int i; if (table_num == table_alloc) { table_alloc += TABLEGROW; table = (struct table *)xrealloc((char *)table, table_alloc * sizeof(struct table)); } table[table_num].name = xstrdup(args); table[table_num].endaction = "END"; for (i = 0; i < 256; i++) { table[table_num].ch[i].code = -1; table[table_num].ch[i].translation = 0; table[table_num].ch[i].trans_offset = 0; table[table_num].ch[i].action = 0; table[table_num].ch[i].comment = 0; } p = table[table_num].name; while (*p && !isspace(*(unsigned char*)p)) p++; if (*p) *p++ = '\0'; while (*p) { if (*p == '<') table[table_num].endaction = "RET"; p++; } return table_num++; } static int findstate(char *name) { int i; for (i = 0; i < table_num; i++) { if (!strcmp(name, table[i].name)) return i; } return -1; } static void printtable(char *name) { char buf[1024]; char *p; int curstate, thischar; int code; char *end; int i; p = strrchr(name, '/'); if (!p) p = strrchr(name, '\\'); if (p) p++; else p = name; strcpy(buf, p); if ((p = strchr(buf, '.')) != NULL) *p = '\0'; while ((p = strchr(buf, '-')) != NULL) *p = '_'; printf("const unsigned char chartables_%s[%d][256][4] = {\n", buf, table_num); for (curstate = 0; curstate < table_num; curstate++) { printf(" {"); if (table[curstate].name[0]) { printf(" /* %s */", table[curstate].name); } printf("\n"); for (thischar = 0; thischar < 256; thischar++) { printf(" {"); if ((code = table[curstate].ch[thischar].code) != -1) { if (code && code <= 0x7f) { if (isprint(code) && code != '\\' && code != '\"' && code != '\'') { printf(" '%c', %s, 0, 0,", code, table[curstate].endaction); } else { printf(" %3d, %s, 0, 0,", code, table[curstate].endaction); } } else if (code <= 0x7FF) { printf(" %3d, %3d, %s, 0,", 0xc0 + (code>>6), 0x80+(code&0x3f), table[curstate].endaction); } else { printf(" %3d, %3d, %3d, %s,", 0xe0 + (code>>12), 0x80+((code>>6)&0x3f), 0x80+(code&0x3f), table[curstate].endaction); } } else if ((code = table[curstate].ch[thischar].trans_offset) != 0) { printf(" XLT, %3d, %3d, %s,", code >> 8, code & 0xff, table[curstate].endaction); } else if ((p = table[curstate].ch[thischar].translation) != 0) { end = table[curstate].endaction; for (i = 0; i < 4; i++) { if (isprint((unsigned char)*p) && *p != '\\' && *p != '\"' && *p != '\'') { printf(" '%c',", *p); } else if (!*p) { printf(" %s,", end); end = " 0"; } else { printf(" %3d,", (unsigned char)*p); } if (*p) p++; } } else if ((p = table[curstate].ch[thischar].action) == 0) { printf(" EMPTY, %s, 0, 0,", table[curstate].endaction); } else if (*p == '<') { printf(" RET, 0, 0, 0,"); } else if (*p == 'U') { printf(" %s, 0, 0, 0,", p); } else { code = findstate(p+1); if (code == -1) { fprintf(stderr, "%s: unknown state %s\n", name, p+1); } printf(" %s, %3d, %3d, 0,", *p == '>' ? "JSR" : "JMP", (code>>8), (code&0xff)); } printf(" },"); if (table[curstate].ch[thischar].comment) { printf(" /* %s */", table[curstate].ch[thischar].comment); } printf("\n"); } printf(" },\n"); } printf("};\n\n"); } static void freetabledata(void) { int curstate, thischar; /* char *cp; */ for (curstate = 0; curstate < table_num; curstate++) { for (thischar = 0; thischar < 256; thischar++) { if (table[curstate].ch[thischar].comment != NULL) { free(table[curstate].ch[thischar].comment); } if (table[curstate].ch[thischar].action != NULL) { free(table[curstate].ch[thischar].action); } } if (table[curstate].name != NULL) { free(table[curstate].name); } } } static void freetable(void) { if (table_alloc) { free(table); table_alloc=0; } } static void freemap(void) { int n; /* int n_mapcode; */ for (n = 0; n < map_num; n++) { if (map[n].translation != NULL) { free(map[n].translation); } } if (map_alloc) { free(map); map_alloc=0; } } void fatal(const char* s, int c) { fprintf(stderr, "Error while building charset table: %s\n", s); exit(c); } cyrus-imspd-v1.8/lib/mkgmtime.c0100644004310100000120000001307307214052263015715 0ustar shadowstaff/* mkgmtime.c - make time corresponding to a GMT timeval struct $Id: mkgmtime.c,v 1.2 2000/12/08 03:25:39 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ /* * Copyright (c) 1987, 1989, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Arthur David Olson of the National Cancer Institute. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* ** Adapted from code provided by Robert Elz, who writes: ** The "best" way to do mktime I think is based on an idea of Bob ** Kridle's (so its said...) from a long time ago. (mtxinu!kridle now). ** It does a binary search of the time_t space. Since time_t's are ** just 32 bits, its a max of 32 iterations (even at 64 bits it ** would still be very reasonable). */ #include #ifndef WRONG #define WRONG (-1) #endif /* !defined WRONG */ static int tmcomp(atmp, btmp) register const struct tm * const atmp; register const struct tm * const btmp; { register int result; if ((result = (atmp->tm_year - btmp->tm_year)) == 0 && (result = (atmp->tm_mon - btmp->tm_mon)) == 0 && (result = (atmp->tm_mday - btmp->tm_mday)) == 0 && (result = (atmp->tm_hour - btmp->tm_hour)) == 0 && (result = (atmp->tm_min - btmp->tm_min)) == 0) result = atmp->tm_sec - btmp->tm_sec; return result; } time_t mkgmtime(tmp) struct tm * const tmp; { register int dir; register int bits; register int saved_seconds; time_t t; struct tm yourtm, *mytm; yourtm = *tmp; saved_seconds = yourtm.tm_sec; yourtm.tm_sec = 0; /* ** Calculate the number of magnitude bits in a time_t ** (this works regardless of whether time_t is ** signed or unsigned, though lint complains if unsigned). */ for (bits = 0, t = 1; t > 0; ++bits, t <<= 1) ; /* ** If time_t is signed, then 0 is the median value, ** if time_t is unsigned, then 1 << bits is median. */ t = (t < 0) ? 0 : ((time_t) 1 << bits); for ( ; ; ) { mytm = gmtime(&t); dir = tmcomp(mytm, &yourtm); if (dir != 0) { if (bits-- < 0) return WRONG; if (bits < 0) --t; else if (dir > 0) t -= (time_t) 1 << bits; else t += (time_t) 1 << bits; continue; } break; } t += saved_seconds; return t; } cyrus-imspd-v1.8/lib/mkgmtime.h0100644004310100000120000000414407214052301015712 0ustar shadowstaff/* mkgmtime.h -- make a time_t from a gmtime struct tm $Id: mkgmtime.h,v 1.2 2000/12/08 03:25:53 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_MKGMTIME_H #define INCLUDED_MKGMTIME_H #ifndef P #ifdef __STDC__ #define P(x) x #else #define P(x) () #endif #endif #include extern time_t mkgmtime P((struct tm * const tmp)); #endif /* INCLUDED_MKGMTIME_H */ cyrus-imspd-v1.8/lib/mpool.c0100644004310100000120000001132607731506270015236 0ustar shadowstaff/* mpool.c memory pool management * * $Id: mpool.c,v 1.1 2003/09/16 04:08:24 rjs3 Exp $ * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include #include #include #include #include #include "mpool.h" #include "xmalloc.h" #include "exitcodes.h" struct mpool { struct mpool_blob *blob; }; struct mpool_blob { size_t size; unsigned char *base; /* Base of allocated section */ unsigned char *ptr; /* End of allocated section */ struct mpool_blob *next; /* Next Pool */ }; static struct mpool_blob *new_mpool_blob(size_t size) { struct mpool_blob *blob = xmalloc(sizeof(struct mpool_blob)); if(!size) size = DEFAULT_MPOOL_SIZE; blob->base = blob->ptr = xmalloc(size); blob->size = size; blob->next = NULL; return blob; } /* Create a new pool */ struct mpool *new_mpool(size_t size) { struct mpool *ret = xmalloc(sizeof(struct mpool)); ret->blob = new_mpool_blob(size); return ret; } /* Free a pool */ void free_mpool(struct mpool *pool) { struct mpool_blob *p, *p_next; if (!pool) return; if (!pool->blob) { fatal("memory pool without a blob", EC_TEMPFAIL); return; } p = pool->blob; while(p) { p_next = p->next; free(p->base); free(p); p = p_next; } free(pool); } #ifdef ROUNDUP #undef ROUNDUP #endif /* round up to the next multiple of 16 bytes if necessary */ /* 0xFF...FFF0 = ~0 ^ 0xF */ #define ROUNDUP(num) (((num) + 15) & (~((unsigned long) 0x0) ^ 0xF)) /* Allocate from a pool */ void *mpool_malloc(struct mpool *pool, size_t size) { void *ret = NULL; struct mpool_blob *p; size_t remain; if(!pool || !pool->blob) { fatal("mpool_malloc called without a valid pool", EC_TEMPFAIL); } if(!size) { /* This is legal under ANSI C, so we should allow it too */ size = 1; } p = pool->blob; /* This is a bit tricky, not only do we have to make sure that the current * pool has enough room, we need to be sure that we haven't rounded p->ptr * outside of the current pool anyway */ remain = p->size - ((char *)p->ptr - (char *)p->base); if (remain < size || (char *) p->ptr > (p->size + (char *) p->base)) { /* Need a new pool */ struct mpool_blob *new_pool; size_t new_pool_size = 2 * ((size > p->size) ? size : p->size); new_pool = new_mpool_blob(new_pool_size); new_pool->next = p; p = pool->blob = new_pool; } ret = p->ptr; /* make sure that the next thing we allocate is align on a ROUNDUP boundary */ p->ptr = p->base + ROUNDUP(p->ptr - p->base + size); return ret; } char *mpool_strdup(struct mpool *pool, const char *str) { char *ret; size_t len; if(!str) return NULL; len = strlen(str); ret = mpool_malloc(pool, len+1); strcpy(ret, str); return ret; } cyrus-imspd-v1.8/lib/mpool.h0100644004310100000120000000505407731506270015244 0ustar shadowstaff/* mpool.h memory pool management * * $Id: mpool.h,v 1.1 2003/09/16 04:08:24 rjs3 Exp $ * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _MPOOL_H_ #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include #include #include #include #include /* Opaque mpool handle */ struct mpool; #define DEFAULT_MPOOL_SIZE 32768 /* Create a new pool -- pass zero for default */ /* 'size' is the size of the first blob of memory that will be allocated */ struct mpool *new_mpool(size_t size); /* Free a pool */ void free_mpool(struct mpool *pool); /* Allocate from a pool */ void *mpool_malloc(struct mpool *pool, size_t size); char *mpool_strdup(struct mpool *pool, const char *str); #endif /* _MPOOL_H_ */ cyrus-imspd-v1.8/lib/n_binsearch.c0100644004310100000120000002261106425166260016362 0ustar shadowstaff/* n_binsearch.c -- Binary search in newline-separated file * * (C) Copyright 1994 by Carnegie Mellon University * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of CMU not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ /* n_binsearch.c -- Routines for libnsearch.a * Libraries for searching through files * Written by Douglas DeCarlo * * (C) Copyright 1990 by Douglas DeCarlo. * All Rights Reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Douglas DeCarlo not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Douglas DeCarlo makes no * representations about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. * * DOUGLAS DECARLO DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT * SHALL DOUGLAS DECARLO BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #define NS_BUFFSIZE 512 /* Static buffer used for default buffer */ static unsigned char n_searchBuff[NS_BUFFSIZE]; /* Case-independent comparison converter. * Treats \r and \t as end-of-string and treats '.' lower than * everything else. */ #define TOLOWER(c) (convert_to_lowercase[(unsigned char)(c)]) static char convert_to_lowercase[256] = { 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x01, 0x01, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x02, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; /* Given file descriptor fd, and buffer of size buffSize, search ahead so that the buffer contains text after a separator, with file offset directly after the separator. Return the number of bytes read into the buffer, or negative if an error occurs */ static int n_scanSeparator(fd, offset, buffer, buffSize) int fd; /* File descriptor for file */ off_t *offset; /* offset info file to search at */ unsigned char *buffer; /* buffer to read into */ unsigned long buffSize; /* size of buffer provided */ { register int len, diff; register unsigned char *ptr, *endBuff; /* Seek to offset position in file */ if (lseek(fd, *offset, SEEK_SET) != *offset) return -1; do { /* Read in a buffer full */ if ((len = read(fd, buffer, buffSize)) < 0) return -1; /* Check if at end of file */ if (!len) { *buffer = 0; return 0; } endBuff = buffer + len; ptr = buffer; /* Search for separator if not at start of search block */ if (*offset) { /* Scan ahead for separator */ for (; ptr < endBuff && *ptr != '\n'; ptr++, (*offset)++); /* If not at the end of the buffer (separator found) */ if (ptr != endBuff) { /* Skip over newline */ ptr++; (*offset)++; /* Move read in material back so stuff after newline is at front of buffer */ bcopy(ptr, buffer, diff = endBuff - ptr); /* Fill up rest of buffer */ if ((len = read(fd, buffer + diff, buffSize - diff)) < 0) return -1; len += diff; ptr = buffer; } } } while (ptr == endBuff); /* Null terminate buffer if it doesn't fill the whole buffer */ if (len < buffSize) buffer[len] = '\0'; return len; } /* Returns seek index of position in file were word was found or should be inserted. If found, buff contains contents at the word. */ int n_binarySearchFD(fd, word, caseSensitive, buffer, buffSize, hint, end) int fd; /* File descriptor for search file */ unsigned char *word; /* Word to search for */ int caseSensitive; /* Nonzero if case sensitive search */ unsigned char **buffer; /* Buffer to use to search in */ unsigned long *buffSize; /* Size of buffer */ off_t hint; /* Start searching here */ off_t end; /* if nonzero, size of file */ { register unsigned char *ptr, *wordPtr; register unsigned char *buff; register int len, n, cmp; unsigned long buffSizeOrig; struct stat fInfo; int firstsearch = 1; off_t orig, start = 0, mid, offset; /* If passed in a NULL buffSize, use static buffer since size unknown */ if (buffSize == NULL) { buffSize = &buffSizeOrig; if (buffer != NULL) { *buffer = NULL; } } /* If passed in a NULL (or pointer to a NULL), set buff to be the static library buffer */ if (buffer == NULL) { buff = n_searchBuff; *buffSize = NS_BUFFSIZE; } else if (*buffer == NULL) { buff = n_searchBuff; *buffSize = NS_BUFFSIZE; *buffer = buff; } else buff = *buffer; buffSizeOrig = *buffSize; /* If end file position is zero, set it to be the end of file */ if (!end) { /* Get file length */ if (fstat(fd, &fInfo) < 0) { return -1; } end = fInfo.st_size; } orig = lseek(fd, 0, SEEK_CUR); /* Scan through the file */ while (start <= end) { if (firstsearch) { /* Use hint supplied by caller */ firstsearch = 0; mid = offset = hint; if (mid <= start || mid > end) mid = offset = start; } else { /* Calc position of middle of this range */ mid = offset = (off_t)((start + end)/2); } /* Scan forward until after a separator character (or at start) */ if ((len = n_scanSeparator(fd, &offset, buff, buffSizeOrig)) < 0) { lseek(fd, orig, SEEK_SET); return len; } /* Check to see if word at current location */ if (!len) { /* If at EOF, search back */ cmp = -1; } else { /* Perform comparison */ n = len; wordPtr = word; ptr = buff; if (caseSensitive) { /* Case sensitive compare */ while (--n>=0 && (cmp = *wordPtr - *ptr) == 0) { wordPtr++; ptr++; } if (n >= 0 && !*wordPtr) { cmp = '\t' - *ptr; } else if (!cmp) { cmp = 1; } } else { /* Case insensitive compare */ while (--n>=0 && (cmp = TOLOWER(*wordPtr) - TOLOWER(*ptr)) == 0) { wordPtr++; ptr++; } if (n >= 0 && !*wordPtr) { cmp = TOLOWER('\t') - TOLOWER(*ptr); } else if (!cmp) { cmp = 1; } } } /* Buffer compares with word */ if (!cmp) { *buffSize = len; lseek(fd, orig, SEEK_SET); return offset; } /* Split search range in half */ if (cmp < 0) /* Word smaller than buff, so search back */ end = mid - 1; else /* Word larger than buff, so search ahead */ start = offset + 1; } /* Word was not found. Scan to location where word should be inserted and return that. */ len = n_scanSeparator(fd, &start, buff, buffSizeOrig); lseek(fd, orig, SEEK_SET); if (len < 0) return len; *buffSize = 0; return start; } cyrus-imspd-v1.8/lib/nonblock.h0100644004310100000120000000411507214052320015704 0ustar shadowstaff/* nonblock.h -- Set nonbolocking mode on file descriptor $Id: nonblock.h,v 1.2 2000/12/08 03:26:08 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_NONBLOCK_H #define INCLUDED_NONBLOCK_H #ifndef P #ifdef __STDC__ #define P(x) x #else #define P(x) () #endif #endif extern void nonblock P((int fd, int mode)); #endif /* INCLUDED_NONBLOCK_H */ cyrus-imspd-v1.8/lib/nonblock_fcntl.c0100644004310100000120000000520607214052337017077 0ustar shadowstaff/* nonblock_fcntl.c -- Set nonblocking mode using fcntl() $Id: nonblock_fcntl.c,v 1.3 2000/12/08 03:26:23 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #include "xmalloc.h" #include "exitcodes.h" #include "nonblock.h" #ifndef FNDELAY #define FNDELAY O_NDELAY #endif #ifdef O_NONBLOCK #define NON_BLOCKING_MODE O_NONBLOCK #else #define NON_BLOCKING_MODE FNDELAY #endif /* * Modifies the non-blocking mode on the file descriptor 'fd'. If * 'mode' is nonzero, sets non-blocking mode, if 'mode' is zero * clears non-blocking mode. */ void nonblock(fd, mode) int fd; int mode; { int flags; flags = fcntl(fd, F_GETFL, 0); if (flags < 0) fatal("Internal error: fcntl F_GETFL failed", EC_IOERR); if (mode) { flags |= NON_BLOCKING_MODE; } else { flags &= ~NON_BLOCKING_MODE; } fcntl(fd, F_SETFL, flags); } cyrus-imspd-v1.8/lib/nonblock_ioctl.c0100644004310100000120000000443107214052416017100 0ustar shadowstaff/* nonblock_fcntl.c -- Set nonblocking mode using ioctl() $Id: nonblock_ioctl.c,v 1.3 2000/12/08 03:27:10 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include "nonblock.h" /* * Modifies the non-blocking mode on the file descriptor 'fd'. If * 'mode' is nonzero, sets non-blocking mode, if 'mode' is zero * clears non-blocking mode. */ void nonblock(fd, mode) int fd; int mode; { mode = mode ? 1 : 0; if (ioctl(fd, FIONBIO, (char *)&mode) < 0) { fatal("Internal error: ioctl FIONBIO failed"); } } cyrus-imspd-v1.8/lib/parseaddr.c0100644004310100000120000002024107214052447016047 0ustar shadowstaff/* parseaddr.c -- RFC 822 address parser * $Id: parseaddr.c,v 1.2 2000/12/08 03:27:35 jackson Exp $ * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #include #include #include #include #include #include "parseaddr.h" #include "xmalloc.h" static char parseaddr_unspecified_domain[] = "unspecified-domain"; static void parseaddr_append (struct address ***addrpp, char *name, char *route, char *mailbox, char *domain, char **freemep); static int parseaddr_phrase (char **inp, char **phrasep, char *specials); static int parseaddr_domain (char **inp, char **domainp, char **commmentp); static int parseaddr_route (char **inp, char **routep); /* * Parse an address list in 's', appending address structures to * the list pointed to by 'addrp'. */ void parseaddr_list(str, addrp) const char *str; struct address **addrp; { char *s; int ingroup = 0; char *freeme; int tok = ' '; char *phrase, *route, *mailbox, *domain, *comment; /* Skip down to the tail */ while (*addrp) { addrp = &(*addrp)->next; } s = freeme = xstrdup(str); while (tok) { tok = parseaddr_phrase(&s, &phrase, ingroup ? ",@<;" : ",@<:"); switch (tok) { case ',': case '\0': case ';': if (*phrase) { parseaddr_append(&addrp, 0, 0, phrase, "", &freeme); } if (tok == ';') { parseaddr_append(&addrp, 0, 0, 0, 0, &freeme); ingroup = 0; } continue; case ':': parseaddr_append(&addrp, 0, 0, phrase, 0, &freeme); ingroup++; continue; case '@': tok = parseaddr_domain(&s, &domain, &comment); parseaddr_append(&addrp, comment, 0, phrase, domain, &freeme); continue; case '<': tok = parseaddr_phrase(&s, &mailbox, "@>"); if (tok == '@') { route = 0; if (!*mailbox) { *--s = '@'; tok = parseaddr_route(&s, &route); if (tok != ':') { parseaddr_append(&addrp, phrase, route, "", "", &freeme); while (tok && tok != '>') tok = *s++; continue; } tok = parseaddr_phrase(&s, &mailbox, "@>"); if (tok != '@') { parseaddr_append(&addrp, phrase, route, mailbox, "", &freeme); continue; } } tok = parseaddr_domain(&s, &domain, 0); parseaddr_append(&addrp, phrase, route, mailbox, domain, &freeme); while (tok && tok != '>') tok = *s++; continue; /* effectively auto-inserts a comma */ } else { parseaddr_append(&addrp, phrase, 0, mailbox, "", &freeme); } } } if (ingroup) parseaddr_append(&addrp, 0, 0, 0, 0, &freeme); if (freeme) free(freeme); } /* * Free the address list 'addr' */ void parseaddr_free(addr) struct address *addr; { struct address *next; while (addr) { if (addr->freeme) free(addr->freeme); next = addr->next; free((char *)addr); addr = next; } } /* * Helper function to append a new address structure to and address list. */ static void parseaddr_append(addrpp, name, route, mailbox, domain, freemep) struct address ***addrpp; char *name; char *route; char *mailbox; char *domain; char **freemep; { struct address *newaddr; newaddr = (struct address *)xmalloc(sizeof(struct address)); if (name && *name) { newaddr->name = name; } else { newaddr->name = 0; } if (route && *route) { newaddr->route = route; } else { newaddr->route = 0; } newaddr->mailbox = mailbox; if (domain && !*domain) { domain = parseaddr_unspecified_domain; } newaddr->domain = domain; newaddr->next = 0; newaddr->freeme = *freemep; *freemep = 0; **addrpp = newaddr; *addrpp = &newaddr->next; } /* Macro to skip white space and rfc822 comments */ #define SKIPWHITESPACE(s) \ { \ int _c, _comment = 0; \ \ while ((_c = *(s))) { \ if (_c == '(') { \ _comment = 1; \ (s)++; \ while ((_comment && (_c = *(s)))) { \ (s)++; \ if (_c == '\\' && *(s)) (s)++; \ else if (_c == '(') _comment++; \ else if (_c == ')') _comment--; \ } \ (s)--; \ } \ else if (!isspace(_c)) break; \ (s)++; \ } \ } /* * Parse an RFC 822 "phrase", stopping at 'specials' */ static int parseaddr_phrase(inp, phrasep, specials) char **inp; char **phrasep; char *specials; { int c; char *src = *inp; char *dst; SKIPWHITESPACE(src); *phrasep = dst = src; for (;;) { c = *src++; if (c == '\"') { while ((c = *src)) { src++; if (c == '\"') break; if (c == '\\') { if (!(c = *src)) break; src++; } *dst++ = c; } } else if (isspace(c) || c == '(') { src--; SKIPWHITESPACE(src); *dst++ = ' '; } else if (!c || strchr(specials, c)) { if (dst > *phrasep && dst[-1] == ' ') dst--; *dst = '\0'; *inp = src; return c; } else { *dst++ = c; } } } /* * Parse a domain. If 'commentp' is non-nil, parses any trailing comment */ static int parseaddr_domain(inp, domainp, commentp) char **inp; char **domainp; char **commentp; { int c; char *src = *inp; char *dst; char *cdst; int comment; if (commentp) *commentp = 0; SKIPWHITESPACE(src); *domainp = dst = src; for (;;) { c = *src++; if (isalnum(c) || c == '-' || c == '[' || c == ']') { *dst++ = c; if (commentp) *commentp = 0; } else if (c == '.') { if (dst > *domainp && dst[-1] != '.') *dst++ = c; if (commentp) *commentp = 0; } else if (c == '(') { if (commentp) { *commentp = cdst = src; comment = 1; while (comment && (c = *src)) { src++; if (c == '(') comment++; else if (c == ')') comment--; else if (c == '\\' && (c = *src)) src++; if (comment) *cdst++ = c; } *cdst = '\0'; } else { src--; SKIPWHITESPACE(src); } } else if (!isspace(c)) { if (dst > *domainp && dst[-1] == '.') dst--; *dst = '\0'; *inp = src; return c; } } } /* * Parse a source route (at-domain-list) */ static int parseaddr_route(inp, routep) char **inp; char **routep; { int c; char *src = *inp; char *dst; SKIPWHITESPACE(src); *routep = dst = src; for (;;) { c = *src++; if (isalnum(c) || c == '-' || c == '[' || c == ']' || c == ',' || c == '@') { *dst++ = c; } else if (c == '.') { if (dst > *routep && dst[-1] != '.') *dst++ = c; } else if (isspace(c) || c == '(') { src--; SKIPWHITESPACE(src); } else { while (dst > *routep && (dst[-1] == '.' || dst[-1] == ',' || dst[-1] == '@')) dst--; *dst = '\0'; *inp = src; return c; } } } cyrus-imspd-v1.8/lib/parseaddr.h0100644004310100000120000000446407214052457016066 0ustar shadowstaff/* parseaddr.h -- RFC 822 address parser $Id: parseaddr.h,v 1.2 2000/12/08 03:27:43 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #ifndef INCLUDED_PARSEADDR_H #define INCLUDED_PARSEADDR_H #ifndef P #ifdef __STDC__ #define P(x) x #else #define P(x) () #endif #endif struct address { char *name; char *route; char *mailbox; char *domain; struct address *next; char *freeme; /* If non-nil, free */ }; extern void parseaddr_list P((const char *s, struct address **addrp)); extern void parseaddr_free P((struct address *addr)); #endif /* INCLUDED_PARSEADDR_H */ cyrus-imspd-v1.8/lib/prot.c0100644004310100000120000004015407765430153015100 0ustar shadowstaff/* prot.c -- stdio-like module that handles SASL protection mechanisms * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ /* * $Id: prot.c,v 1.6 2003/12/09 20:28:27 cdaboo Exp $ */ #include #include #include #include #include #ifdef __STDC__ #include #else #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #include #include #ifdef HAVE_SYS_SELECT_H #include #endif #include "prot.h" #include "xmalloc.h" #include "assert.h" /* * Create a new protection stream for file descriptor 'fd'. Stream * will be used for writing iff 'write' is nonzero. */ struct protstream *prot_new(fd, write) int fd; int write; { struct protstream *newstream; newstream = (struct protstream *) xmalloc(sizeof(struct protstream)); newstream->buf = (unsigned char *) xmalloc(sizeof(char) * (PROT_BUFSIZE + 4)); newstream->buf_size = PROT_BUFSIZE; newstream->ptr = newstream->buf; newstream->cnt = write ? PROT_BUFSIZE : 0; newstream->maxplain = PROT_BUFSIZE; newstream->fd = fd; newstream->write = write; newstream->logfd = -1; newstream->log_timeptr = 0; newstream->error = 0; newstream->eof = 0; newstream->read_timeout = 0; newstream->dontblock = 0; newstream->flushonread = 0; newstream->readcallback_proc = 0; newstream->readcallback_rock = 0; newstream->waitevent = 0; newstream->conn = NULL; newstream->saslssf=0; #ifdef HAVE_SSL newstream->tls_conn=NULL; #endif /* HAVE_SSL */ return newstream; } /* * Free a protection stream */ int prot_free(struct protstream *s) { free(s->buf); free((char*)s); return 0; } /* * Set the logging file descriptor for stream 's' to be 'fd'. */ int prot_setlog(s, fd) struct protstream *s; int fd; { s->logfd = fd; return 0; } /* * Start logging timing information for stream 's'. */ int prot_setlogtime(struct protstream *s, time_t *ptr) { s->log_timeptr = ptr; time(s->log_timeptr); return 0; } #ifdef HAVE_SSL /* * Turn on TLS for this connection */ int prot_settls(struct protstream *s, SSL *tlsconn) { s->tls_conn = tlsconn; return 0; } #endif /* HAVE_SSL */ /* * Turn on SASL for this connection */ int prot_setsasl(s, conn) struct protstream *s; sasl_conn_t *conn; { const int *ssfp; int result; /* flush first if need be */ if (s->write && s->ptr != s->buf) prot_flush(s); s->conn=conn; result = sasl_getprop(conn, SASL_SSF, (const void **) &ssfp); if (result != SASL_OK) return 1; s->saslssf = *ssfp; if (s->write) { int result; const int *maxp; int max; /* ask SASL for layer max */ result = sasl_getprop(conn, SASL_MAXOUTBUF, (const void **) &maxp); max = *maxp; if (result != SASL_OK) return 1; if (max == 0 || max > PROT_BUFSIZE) { /* max = 0 means unlimited, and we can't go bigger */ max = PROT_BUFSIZE; } max-=50; /* account for extra foo incurred from layers */ s->maxplain=max; s->cnt=max; } else if (s->cnt) { /* XXX what does this do? */ s->cnt = 0; } return 0; } /* * Set the read timeout for the stream 's' to 'timeout' seconds. * 's' must have been created for reading. */ int prot_settimeout(struct protstream *s, int timeout) { assert(!s->write); s->read_timeout = timeout; return 0; } /* * Set the stream 's' to flush the stream 'flushs' before * blocking for reading. 's' must have been created for reading, * 'flushs' for writing. */ int prot_setflushonread(struct protstream *s, struct protstream *flushs) { assert(!s->write); s->flushonread = flushs; return 0; } /* * Set on stream 's' the callback 'proc' and 'rock' * to make the next time we have to wait for input. */ int prot_setreadcallback(struct protstream *s, prot_readcallback_t *proc, void *rock) { assert(!s->write); s->readcallback_proc = proc; s->readcallback_rock = rock; return 0; } /* * Add an event on stream 's' so that the callback 'proc' taking * argument 'rock' will be called at 'mark' (in seconds) while * waiting for input. */ struct prot_waitevent *prot_addwaitevent(struct protstream *s, time_t mark, prot_waiteventcallback_t *proc, void *rock) { struct prot_waitevent *new, *cur; /* if we aren't passed a callback function, don't bother */ if (!proc) return s->waitevent; /* create new timer struct */ new = (struct prot_waitevent *) xmalloc(sizeof(struct prot_waitevent)); new->mark = mark; new->proc = proc; new->rock = rock; new->next = NULL; /* add the new event to the end of the list */ if (!s->waitevent) s->waitevent = new; else { cur = s->waitevent; while (cur && cur->next) cur = cur->next; cur->next = new; } return new; } /* * Remove 'event' from stream 's'. */ void prot_removewaitevent(struct protstream *s, struct prot_waitevent *event) { struct prot_waitevent *prev, *cur; prev = NULL; cur = s->waitevent; while (cur && cur != event) { prev = cur; cur = cur->next; } if (!cur) return; if (!prev) s->waitevent = cur->next; else prev->next = cur->next; free(cur); } /* * Return a pointer to a statically-allocated string describing the * error encountered on 's'. If there is no error condition, return a * null pointer. */ const char *prot_error(struct protstream *s) { return s->error; } /* * Rewind the stream 's'. 's' must have been created for reading. */ int prot_rewind(struct protstream *s) { assert(!s->write); if (lseek(s->fd, 0L, 0) == -1) { s->error = strerror(errno); return EOF; } s->cnt = 0; s->error = 0; s->eof = 0; return 0; } /* * Read data into the empty buffer for the stream 's' and return the * first character. Returns EOF on EOF or error. */ int prot_fill(struct protstream *s) { int n; unsigned char *ptr; int left; int r; struct timeval timeout; fd_set rfds; int haveinput; time_t read_timeout; struct prot_waitevent *event; assert(!s->write); if (s->eof || s->error) return EOF; do { /* wait until get input */ haveinput = 0; if (s->readcallback_proc || (s->flushonread && s->flushonread->ptr != s->flushonread->buf)) { timeout.tv_sec = timeout.tv_usec = 0; FD_ZERO(&rfds); FD_SET(s->fd, &rfds); if (select(s->fd + 1, &rfds, (fd_set *)0, (fd_set *)0, &timeout) <= 0) { if (s->readcallback_proc) { (*s->readcallback_proc)(s, s->readcallback_rock); s->readcallback_proc = 0; s->readcallback_rock = 0; } if (s->flushonread) prot_flush(s->flushonread); } else { haveinput = 1; } } if (!haveinput && (s->read_timeout || s->dontblock)) { time_t now = time(NULL); time_t sleepfor; read_timeout = now + s->read_timeout; do { sleepfor = read_timeout - now; /* execute each callback that has timed out */ for (event = s->waitevent; event != NULL; event = event->next) { if (now >= event->mark) { event = (*event->proc)(s, event, event->rock); } if (event && sleepfor > (event->mark - now)) { sleepfor = event->mark - now; } } /* check for input */ timeout.tv_sec = sleepfor; timeout.tv_usec = 0; FD_ZERO(&rfds); FD_SET(s->fd, &rfds); r = select(s->fd + 1, &rfds, (fd_set *)0, (fd_set *)0, &timeout); now = time(NULL); } while ((r == 0 || (r == -1 && errno == EINTR)) && (now < read_timeout)); if (r == 0) { if (!s->dontblock) { s->error = "idle for too long"; return EOF; } else { errno = EAGAIN; return EOF; } } } do { #ifdef HAVE_SSL /* just do a SSL read instead if we're under a tls layer */ if (s->tls_conn != NULL) { n = SSL_read(s->tls_conn, (char *) s->buf, PROT_BUFSIZE); } else { n = read(s->fd, s->buf, PROT_BUFSIZE); } #else /* HAVE_SSL */ n = read(s->fd, s->buf, PROT_BUFSIZE); #endif /* HAVE_SSL */ } while (n == -1 && errno == EINTR); if (n <= 0) { if (n) s->error = strerror(errno); else s->eof = 1; return EOF; } if (s->saslssf) { /* decode it */ int result; const char *out; unsigned outlen; static char errbuf[256]; /* Decode the input token */ result = sasl_decode(s->conn, (const char *) s->buf, n, &out, &outlen); if (result != SASL_OK) { snprintf(errbuf, 256, "Decoding error: %s (%i)", sasl_errstring(result, NULL, NULL), result); s->error = errbuf; return EOF; } if (outlen > 0) { if (outlen > s->buf_size) { s->buf = (unsigned char *) xrealloc(s->buf, sizeof(char) * (outlen + 4)); s->buf_size = outlen; } memcpy(s->buf, out, outlen); s->ptr = s->buf + 1; s->cnt = outlen; } else { /* didn't decode anything */ s->cnt = 0; } } else { /* No protection function, just use the raw data */ s->ptr = s->buf+1; s->cnt = n; } if (s->cnt > 0) { if (s->logfd != -1) { time_t newtime; char timebuf[20]; if (s->log_timeptr) { time(&newtime); snprintf(timebuf, sizeof(timebuf), "<%ld<", newtime - *s->log_timeptr); write(s->logfd, timebuf, strlen(timebuf)); *s->log_timeptr = newtime; } left = s->cnt; ptr = s->buf; do { n = write(s->logfd, ptr, left); if (n == -1 && errno != EINTR) { break; } if (n > 0) { ptr += n; left -= n; } } while (left); } s->cnt--; /* we return the first char */ return *s->buf; } } while (1); } /* * Write out any buffered data in the stream 's' */ int prot_flush(struct protstream *s) { unsigned char *ptr = s->buf; int left = s->ptr - s->buf; int n; const char *encoded_output; assert(s->write); assert(s->cnt >= 0); if (s->eof || s->error) { s->ptr = s->buf; s->cnt = 1; return EOF; } if (!left) return 0; if (s->logfd != -1) { time_t newtime; char timebuf[20]; if (s->log_timeptr) { time(&newtime); snprintf(timebuf, sizeof(timebuf), ">%ld>", newtime - *s->log_timeptr); write(s->logfd, timebuf, strlen(timebuf)); } do { n = write(s->logfd, ptr, left); if (n == -1 && errno != EINTR) { break; } if (n > 0) { ptr += n; left -= n; } } while (left); left = s->ptr - s->buf; ptr = s->buf; } if (s->saslssf != 0) { /* Encode the data */ /* xxx handle left */ unsigned int outlen; int result; result = sasl_encode(s->conn, (char *) ptr, left, &encoded_output, &outlen); if (result != SASL_OK) { s->error = "Encoding error"; if (s->log_timeptr) time(s->log_timeptr); return EOF; } ptr = (unsigned char *) encoded_output; left = outlen; } /* Write out the data */ do { #ifdef HAVE_SSL if (s->tls_conn != NULL) { n = SSL_write(s->tls_conn, (char *) ptr, left); } else { n = write(s->fd, ptr, left); } #else /* HAVE_SSL */ n = write(s->fd, ptr, left); #endif /* HAVE_SSL */ if (n == -1 && errno != EINTR) { s->error = strerror(errno); if (s->log_timeptr) time(s->log_timeptr); return EOF; } if (n > 0) { ptr += n; left -= n; } } while (left); /* Reset the output buffer */ s->ptr = s->buf; s->cnt = s->maxplain; if (s->log_timeptr) time(s->log_timeptr); return 0; } /* * Write to the output stream 's' the 'len' bytes of data at 'buf' */ int prot_write(struct protstream *s, const char *buf, unsigned len) { assert(len >= 0); assert(s->write); while (len >= s->cnt) { memcpy(s->ptr, buf, s->cnt); s->ptr += s->cnt; buf += s->cnt; len -= s->cnt; s->cnt = 0; if (prot_flush(s) == EOF) return EOF; } memcpy(s->ptr, buf, len); s->ptr += len; s->cnt -= len; if (s->error || s->eof) return EOF; assert(s->cnt > 0); return 0; } /* * Stripped-down version of printf() that works on protection streams * Only understands '%d', '%s', '%c', and '%%' in the format string. */ int prot_printf(struct protstream *s, const char *fmt, ...) { va_list pvar; char *percent, *p; int i; unsigned u; char buf[30]; va_start(pvar, fmt); assert(s->write); while ((percent = strchr(fmt, '%')) != 0) { prot_write(s, fmt, percent-fmt); switch (*++percent) { case '%': prot_putc('%', s); break; case 'd': i = va_arg(pvar, int); snprintf(buf, sizeof(buf), "%d", i); prot_write(s, buf, strlen(buf)); break; case 'u': u = va_arg(pvar, int); snprintf(buf, sizeof(buf), "%u", u); prot_write(s, buf, strlen(buf)); break; case 's': p = va_arg(pvar, char *); prot_write(s, p, strlen(p)); break; case 'c': i = va_arg(pvar, int); prot_putc(i, s); break; default: abort(); } fmt = percent+1; } prot_write(s, fmt, strlen(fmt)); va_end(pvar); if (s->error || s->eof) return EOF; return 0; } /* * Read from the protections stream 's' up to 'size' bytes into the buffer * 'buf'. Returns the number of bytes read, or 0 for some error. */ int prot_read(struct protstream *s, char *buf, unsigned size) { int c; assert(!s->write); if (!size) return 0; if (s->cnt) { /* Some data in the input buffer, return that */ if (size > s->cnt) size = s->cnt; memcpy(buf, s->ptr, size); s->ptr += size; s->cnt -= size; return size; } c = prot_fill(s); if (c == EOF) return 0; buf[0] = c; if (--size > s->cnt) size = s->cnt; memcpy(buf+1, s->ptr, size); s->ptr += size; s->cnt -= size; return size+1; } /* * Version of fgets() that works with protection streams. */ char *prot_fgets(char *buf, unsigned size, struct protstream *s) { char *p = buf; int c; assert(!s->write); if (size < 2) return 0; size -= 2; while (size && (c = prot_getc(s)) != EOF) { size--; *p++ = c; if (c == '\n') break; } if (p == buf) return 0; *p++ = '\0'; return buf; } /* function versions of the macros */ #undef prot_getc #undef prot_ungetc #undef prot_putc int prot_getc(struct protstream *s) { assert(!s->write); if (s->cnt-- > 0) { return *(s->ptr)++; } else { return prot_fill(s); } } int prot_ungetc(int c, struct protstream *s) { assert(!s->write); s->cnt++; *--(s->ptr) = c; return c; } int prot_putc(int c, struct protstream *s) { assert(s->write); assert(s->cnt > 0); *s->ptr++ = c; if (--s->cnt == 0) { return prot_flush(s); } else { return 0; } } cyrus-imspd-v1.8/lib/prot.h0100644004310100000120000001147707613045526015111 0ustar shadowstaff/* prot.h -- stdio-like module that handles IMAP protection mechanisms * $Id: prot.h,v 1.4 2003/01/20 19:17:42 rjs3 Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_PROT_H #define INCLUDED_PROT_H #include #include #include #include #ifdef HAVE_SSL #include #endif /* HAVE_SSL */ #define PROT_BUFSIZE 4096 /* #define PROT_BUFSIZE 8192 */ struct protstream; struct prot_waitevent; typedef void prot_readcallback_t(struct protstream *s, void *rock); struct protstream { unsigned char *ptr; int cnt; int fd; int write; int logfd; sasl_conn_t *conn; int saslssf; time_t *log_timeptr; int maxplain; const char *error; int eof; int dontblock; int read_timeout; struct protstream *flushonread; prot_readcallback_t *readcallback_proc; void *readcallback_rock; struct prot_waitevent *waitevent; int buf_size; unsigned char *buf; #ifdef HAVE_SSL SSL *tls_conn; #endif /* HAVE_SSL */ }; typedef struct prot_waitevent *prot_waiteventcallback_t(struct protstream *s, struct prot_waitevent *ev, void *rock); struct prot_waitevent { time_t mark; prot_waiteventcallback_t *proc; void *rock; struct prot_waitevent *next; }; extern int prot_getc(struct protstream *s); extern int prot_ungetc(int c, struct protstream *s); extern int prot_putc(int c, struct protstream *s); #define prot_getc(s) ((s)->cnt-- > 0 ? (int)*(s)->ptr++ : prot_fill(s)) #define prot_ungetc(c, s) ((s)->cnt++, (*--(s)->ptr = (c))) #define prot_putc(c, s) ((*(s)->ptr++ = (c)), --(s)->cnt == 0 ? prot_flush(s) : 0) #define prot_BLOCK(s) ((s)->dontblock = 0) #define prot_NONBLOCK(s) ((s)->dontblock = 1) extern struct protstream *prot_new(int fd, int write); extern int prot_free(struct protstream *s); extern int prot_setlog(struct protstream *s, int fd); extern int prot_setlogtime(struct protstream *s, time_t *ptr); extern int prot_setsasl(struct protstream *s, sasl_conn_t *conn); #ifdef HAVE_SSL extern int prot_settls(struct protstream *s, SSL *tlsconn); #endif /* HAVE_SSL */ extern int prot_settimeout(struct protstream *s, int timeout); extern int prot_setflushonread(struct protstream *s, struct protstream *flushs); extern int prot_setreadcallback(struct protstream *s, prot_readcallback_t *proc, void *rock); extern struct prot_waitevent *prot_addwaitevent(struct protstream *s, time_t mark, prot_waiteventcallback_t *proc, void *rock); extern void prot_removewaitevent(struct protstream *s, struct prot_waitevent *event); extern const char *prot_error(struct protstream *s); extern int prot_rewind(struct protstream *s); extern int prot_fill(struct protstream *s); extern int prot_flush(struct protstream *s); extern int prot_write(struct protstream *s, const char *buf, unsigned len); extern int prot_printf(struct protstream *, const char *, ...) __attribute__ ((format (printf, 2, 3))); extern int prot_read(struct protstream *s, char *buf, unsigned size); extern char *prot_fgets(char *buf, unsigned size, struct protstream *s); #endif /* INCLUDED_PROT_H */ cyrus-imspd-v1.8/lib/retry.c0100644004310100000120000000665607214053366015266 0ustar shadowstaff/* retry.c -- keep trying write system calls $Id: retry.c,v 1.3 2000/12/08 03:35:18 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * */ #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include "retry.h" extern int errno; /* * Keep calling the write() system call with 'fd', 'buf', and 'nbyte' * until all the data is written out or an error occurs. */ int retry_write(fd, buf, nbyte) int fd; const char *buf; unsigned nbyte; { int n; int written = 0; if (nbyte == 0) return 0; for (;;) { n = write(fd, buf, nbyte); if (n == -1) { if (errno == EINTR) continue; return -1; } written += n; if (n >= nbyte) return written; buf += n; nbyte -= n; } } /* * Keep calling the writev() system call with 'fd', 'iov', and 'iovcnt' * until all the data is written out or an error occurs. */ int retry_writev(fd, iov, iovcnt) int fd; struct iovec *iov; int iovcnt; { int n; int i; int written = 0; static int iov_max = #ifdef MAXIOV MAXIOV #else #ifdef IOV_MAX IOV_MAX #else 8192 #endif #endif ; for (;;) { while (iovcnt && iov[0].iov_len == 0) { iov++; iovcnt--; } if (!iovcnt) return written; n = writev(fd, iov, iovcnt > iov_max ? iov_max : iovcnt); if (n == -1) { if (errno == EINVAL && iov_max > 10) { iov_max /= 2; continue; } if (errno == EINTR) continue; return -1; } written += n; for (i = 0; i < iovcnt; i++) { if (iov[i].iov_len > n) { iov[i].iov_base = (char *)iov[i].iov_base + n; iov[i].iov_len -= n; break; } n -= iov[i].iov_len; iov[i].iov_len = 0; } if (i == iovcnt) return written; } } cyrus-imspd-v1.8/lib/retry.h0100644004310100000120000000425107214053376015261 0ustar shadowstaff/* retry.h -- Keep retrying write system calls $Id: retry.h,v 1.2 2000/12/08 03:35:26 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_RETRY_H #define INCLUDED_RETRY_H #ifndef P #ifdef __STDC__ #define P(x) x #else #define P(x) () #endif #endif #include extern int retry_write P((int fd, const char *buf, unsigned nbyte)); extern int retry_writev P((int fd, struct iovec *iov, int iovcnt)); #endif /* INCLUDED_RETRY_H */ cyrus-imspd-v1.8/lib/strcasecmp.c0100644004310100000120000000466307214053406016254 0ustar shadowstaff/* strcasecmp.c -- replacement strcasecmp() & strncasecmp() routines $Id: strcasecmp.c,v 1.3 2000/12/08 03:35:34 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * * Author: Chris Newman * Start Date: 4/6/93 */ #include "util.h" /* case insensitive string compare */ int strcasecmp(str1, str2) char *str1, *str2; { while (*str1 && TOLOWER(*str1) == TOLOWER(*str2)) ++str1, ++str2; return ((int) TOLOWER(*str1) - (int) TOLOWER(*str2)); } /* case insensitive string compare with count */ int strncasecmp(str1, str2, n) char *str1, *str2; int n; { while (n && *str1 && TOLOWER(*str1) == TOLOWER(*str2)) ++str1, ++str2, --n; return (n ? (int) TOLOWER(*str1) - (int) TOLOWER(*str2) : 0); } cyrus-imspd-v1.8/lib/strerror.c0100644004310100000120000000403707214053427015770 0ustar shadowstaff/* strerror.c -- replacement strerror() routine $Id: strerror.c,v 1.2 2000/12/08 03:35:51 jackson Exp $ * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ extern int sys_nerr; extern char *sys_errlist; const char *strerror(errnum) int errnum; { if (errnum < 0 || errnum > sys_nerr) return 0; return sys_errlist[errnum]; } cyrus-imspd-v1.8/lib/sysexits.h0100644004310100000120000001614307214053436016007 0ustar shadowstaff/* * Copyright (c) 2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ /* * Copyright (c) 1987, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)sysexits.h 8.1 (Berkeley) 6/2/93 */ #ifndef _SYSEXITS_H_ #define _SYSEXITS_H_ /* * SYSEXITS.H -- Exit status codes for system programs. * * This include file attempts to categorize possible error * exit statuses for system programs, notably delivermail * and the Berkeley network. * * Error numbers begin at EX__BASE to reduce the possibility of * clashing with other exit statuses that random programs may * already return. The meaning of the codes is approximately * as follows: * * EX_USAGE -- The command was used incorrectly, e.g., with * the wrong number of arguments, a bad flag, a bad * syntax in a parameter, or whatever. * EX_DATAERR -- The input data was incorrect in some way. * This should only be used for user's data & not * system files. * EX_NOINPUT -- An input file (not a system file) did not * exist or was not readable. This could also include * errors like "No message" to a mailer (if it cared * to catch it). * EX_NOUSER -- The user specified did not exist. This might * be used for mail addresses or remote logins. * EX_NOHOST -- The host specified did not exist. This is used * in mail addresses or network requests. * EX_UNAVAILABLE -- A service is unavailable. This can occur * if a support program or file does not exist. This * can also be used as a catchall message when something * you wanted to do doesn't work, but you don't know * why. * EX_SOFTWARE -- An internal software error has been detected. * This should be limited to non-operating system related * errors as possible. * EX_OSERR -- An operating system error has been detected. * This is intended to be used for such things as "cannot * fork", "cannot create pipe", or the like. It includes * things like getuid returning a user that does not * exist in the passwd file. * EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp, * etc.) does not exist, cannot be opened, or has some * sort of error (e.g., syntax error). * EX_CANTCREAT -- A (user specified) output file cannot be * created. * EX_IOERR -- An error occurred while doing I/O on some file. * EX_TEMPFAIL -- temporary failure, indicating something that * is not really an error. In sendmail, this means * that a mailer (e.g.) could not create a connection, * and the request should be reattempted later. * EX_PROTOCOL -- the remote system returned something that * was "not possible" during a protocol exchange. * EX_NOPERM -- You did not have sufficient permission to * perform the operation. This is not intended for * file system problems, which should use NOINPUT or * CANTCREAT, but rather for higher level permissions. */ #define EX_OK 0 /* successful termination */ #define EX__BASE 64 /* base value for error messages */ #define EX_USAGE 64 /* command line usage error */ #define EX_DATAERR 65 /* data format error */ #define EX_NOINPUT 66 /* cannot open input */ #define EX_NOUSER 67 /* addressee unknown */ #define EX_NOHOST 68 /* host name unknown */ #define EX_UNAVAILABLE 69 /* service unavailable */ #define EX_SOFTWARE 70 /* internal software error */ #define EX_OSERR 71 /* system error (e.g., can't fork) */ #define EX_OSFILE 72 /* critical OS file missing */ #define EX_CANTCREAT 73 /* can't create (user) output file */ #define EX_IOERR 74 /* input/output error */ #define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ #define EX_PROTOCOL 76 /* remote error in protocol */ #define EX_NOPERM 77 /* permission denied */ #define EX_CONFIG 78 /* configuration error */ #define EX__MAX 78 /* maximum listed value */ #endif /* !_SYSEXITS_H_ */ cyrus-imspd-v1.8/lib/util.c0100644004310100000120000001666607214053447015100 0ustar shadowstaff/* util.c -- general utility functions * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 4/6/93 */ /* $Id: util.c,v 1.4 2000/12/08 03:36:07 jackson Exp $ */ #include #include #include #include #include "util.h" /* from OS: */ extern char *malloc(), *realloc(); #define BEAUTYBUFSIZE 4096 const unsigned char convert_to_lowercase[256] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; const unsigned char convert_to_uppercase[256] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; /* convert string to all lower case */ char *lcase(char* str) { char *scan = str; while (*scan) { *scan = TOLOWER(*scan); scan++; } return (str); } /* convert string to all upper case */ char *ucase(char* str) { char *scan = str; while (*scan) { *scan = convert_to_uppercase[(unsigned char)(*scan)]; scan++; } return (str); } /* clean up control characters in a string while copying it * returns pointer to end of dst string. * dst must have twice the length of source */ char *beautify_copy(char* dst, const char* src) { unsigned char c; while (*src) { c = *src++ & 0x7F; if (!isprint(c)) { *dst++ = '^'; if (c > ' ') { c = '?'; } else { c += '@'; } } *dst++ = c; } *dst = '\0'; return (dst); } /* clean up control characters in a string while copying it * returns pointer to a static buffer containing the cleaned-up version * returns NULL on malloc() error */ char *beautify_string(const char* src) { static char *beautybuf = NULL; static int beautysize = 0; int len; len = strlen(src) * 2 + 1; if (beautysize < len) { if (!beautysize) { beautysize = len > BEAUTYBUFSIZE ? len : BEAUTYBUFSIZE; beautybuf = malloc(beautysize); } else { beautysize *= 2; if (len > beautysize) beautysize = len; beautybuf = realloc(beautybuf, beautysize); } if (!beautybuf) { beautysize = 0; return ""; } } (void) beautify_copy(beautybuf, src); return (beautybuf); } /* do a binary search in a keyvalue array * nelem is the number of keyvalue elements in the kv array * cmpf is the comparison function (strcmp, strcasecmp, etc). * returns NULL if not found, or key/value pair if found. */ keyvalue *kv_bsearch(const char* key, keyvalue* kv, int nelem, int (*cmpf) (const char *s1, const char *s2)) { int top, mid = 0, bot, cmp = 0; cmp = 1; bot = 0; top = nelem - 1; while (top >= bot && (cmp = (*cmpf)(key, kv[mid = (bot + top) >> 1].key))) if (cmp < 0) { top = mid - 1; } else { bot = mid + 1; } return (cmp ? NULL : kv + mid); } cyrus-imspd-v1.8/lib/util.h0100644004310100000120000000627310155230572015070 0ustar shadowstaff/* util.h -- general utility functions * $Id: util.h,v 1.5 2004/12/07 04:28:42 shadow Exp $ * * Copyright (c) 1999-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Chris Newman * Start Date: 4/6/93 */ #ifndef INCLUDED_UTIL_H #define INCLUDED_UTIL_H extern const unsigned char convert_to_lowercase[256]; extern const unsigned char convert_to_uppercase[256]; #define TOUPPER(c) (convert_to_uppercase[(unsigned char)(c)]) #define TOLOWER(c) (convert_to_lowercase[(unsigned char)(c)]) typedef struct keyvalue { char *key, *value; int modified; } keyvalue; /* convert string to all lower case */ extern char *lcase (char *str); /* convert string to all upper case */ extern char *ucase (char *str); /* clean up control characters in a string while copying it * returns pointer to end of dst string. * dst must have twice the length of source */ extern char *beautify_copy (char *dst, const char *src); /* clean up control characters in a string while copying it * returns pointer to a static buffer containing the cleaned-up version * returns NULL on malloc() error */ extern char *beautify_string (const char *src); /* do a binary search in a keyvalue array * nelem is the number of keyvalue elements in the kv array * cmpf is the comparison function (strcmp, stricmp, etc). * returns NULL if not found, or key/value pair if found. */ extern keyvalue *kv_bsearch (const char *key, keyvalue *kv, int nelem, int (*cmpf)(const char *s1, const char *s2)); #endif /* INCLUDED_UTIL_H */ cyrus-imspd-v1.8/lib/xmalloc.c0100644004310100000120000000751707731506323015555 0ustar shadowstaff/* xmalloc.c -- Allocation package that calls fatal() when out of memory * * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * $Id: xmalloc.c,v 1.4 2003/09/16 04:08:51 rjs3 Exp $ */ #include #include #include #include #include "xmalloc.h" #include "exitcodes.h" void* xmalloc(unsigned size) { void *ret; ret = malloc(size); if (ret != NULL) return ret; fatal("Virtual memory exhausted", EC_TEMPFAIL); return 0; /*NOTREACHED*/ } void* xzmalloc(unsigned size) { void *ret; ret = malloc(size); if (ret != NULL) { memset(ret, 0, size); return ret; } fatal("Virtual memory exhausted", EC_TEMPFAIL); return 0; /*NOTREACHED*/ } void *xrealloc (void* ptr, unsigned size) { void *ret; /* xrealloc (NULL, size) behaves like xmalloc (size), as in ANSI C */ ret = (!ptr ? malloc (size) : realloc (ptr, size)); if (ret != NULL) return ret; fatal("Virtual memory exhausted", EC_TEMPFAIL); return 0; /*NOTREACHED*/ } char *xstrdup(const char* str) { char *p = xmalloc(strlen(str)+1); strcpy(p, str); return p; } char *xstrndup(const char* str, unsigned len) { char *p = xmalloc(len+1); strncpy(p, str, len); p[len] = '\0'; return p; } #ifndef HAVE_STRLCPY /* strlcpy -- copy string smartly. * * i believe/hope this is compatible with the BSD strlcpy(). */ size_t strlcpy(char *dst, const char *src, size_t len) { size_t n; if (len <= 0) { /* we can't do anything ! */ return strlen(src); } /* assert(len >= 1); */ for (n = 0; n < len-1; n++) { if ((dst[n] = src[n]) == '\0') break; } if (n >= len-1) { /* ran out of space */ dst[n] = '\0'; while(src[n]) n++; } return n; } #endif #ifndef HAVE_STRLCAT size_t strlcat(char *dst, const char *src, size_t len) { size_t i, j, o; o = strlen(dst); if (len < o + 1) return o + strlen(src); len -= o + 1; for (i = 0, j = o; i < len; i++, j++) { if ((dst[j] = src[i]) == '\0') break; } dst[j] = '\0'; if (src[i] == '\0') { return j; } else { return j + strlen(src + i); } } #endif cyrus-imspd-v1.8/lib/xmalloc.h0100644004310100000120000000546507214053527015561 0ustar shadowstaff/* xmalloc.h -- Allocation package that calls fatal() when out of memory * $Id: xmalloc.h,v 1.3 2000/12/08 03:36:55 jackson Exp $ * * Copyright (c) 1998-2000 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ #ifndef INCLUDED_XMALLOC_H #define INCLUDED_XMALLOC_H /* for size_t */ #include #ifndef __GNUC__ /* can't use attributes... */ #define __attribute__(foo) #define __inline__ #endif extern void *xmalloc (unsigned size); extern void *xzmalloc (unsigned size); extern void *xrealloc (void *ptr, unsigned size); extern char *xstrdup (const char *str); extern char *xstrndup (const char *str, unsigned len); extern void *fs_get (unsigned size); extern void fs_give (void **ptr); /* handy string manipulation functions */ #ifndef HAVE_STRLCPY extern size_t strlcpy(char *dst, const char *src, size_t len); #endif #ifndef HAVE_STRLCAT extern size_t strlcat(char *dst, const char *src, size_t len); #endif /* Functions using xmalloc.h must provide a function called fatal() conforming to the following: */ extern void fatal(const char *fatal_message, int fatal_code) __attribute__ ((noreturn)); #endif /* INCLUDED_XMALLOC_H */ cyrus-imspd-v1.8/notes/0040755004310100000120000000000010170575121014316 5ustar shadowstaffcyrus-imspd-v1.8/notes/Build-instructions0100644004310100000120000001607507714231543020057 0ustar shadowstaffThis file describes how to build the cyrus IMSP server. See the rest of the files in the "notes" directory for more information about setting up the server. Be sure to check the "Changes-Todo" file for important changes from previous versions. CYRUS SASL IS REQUIRED ---------------------- All of the authentication code that was included with the Cyrus IMSP sources has been removed in favor of calls to the Cyrus SASL library. SASL is the Simple Authentication and Security Layer, an extensible system for handling authentication and encryption in connection-based protocols. You no longer use the configure "--with-login" option to choose an authentication and password checking scheme. Instead, the imspd is linked against the SASL library. Provide the appropriate security mechanism plug-ins (dynamic libraries) to SASL and they will be available to the IMSP server. The authorization code is still present, however, because the SASL API doesn't provide an abstraction layer for group membership, access control lists, etc. The "--with-auth" option is still used to select the appropriate authorization module at compile time. To obtain a copy of SASL, refer to these URLs: This version of Cyrus IMSP requires atleast SASLv2. PARTS OF CYRUS IMAPD INCLUDED ----------------------------- The "lib" subdirectory is a direct copy of the equivalent portion of the Cyrus IMAP mail server sources (at some point in the past). Only the Makefile.in has been modified to omit unnecessary portions. If you're having trouble with this part of the code, you can instead try the latest Cyrus IMAPD sources to see if it helps. See the URLs above. SHORT INSTRUCTIONS ------------------ ./configure make all To compile with Kerberos authorization and Kerberos found in /usr/local, use: ./configure --with-auth=krb --with-krb=/usr/local See the next section or look in configure.in for more configure options. COMPILATION OPTIONS ------------------- Define these preprocessor macros by adding something like "-DANONYMOUS_LOGIN" to the compiler command line. Both of these should probably be converted to run-time options set in the global options file. ANONYMOUS_LOGIN Permits the user "anonymous" to login with any password. DISABLE_AUTO_CREATE_AB Define this if you don't want users to be able to create their own addressbooks. Note that the imsp.create.new.users option controls the automatic creation of the options file, not the addressbook. As of version 1.6a1 of the server, the mailbox (bboard) features and all other IMAP proxy features have been removed. CONFIGURE OPTIONS ----------------- --with-sasldir=PATH PATH where the SASL library is installed --with-ldap=LIBRARY use LDAP address book features LIBRARY is the name of your LDAP library --with-lock=METHOD force use of METHOD for locking METHOD is flock or fcntl --with-auth=METHOD use authorization module METHOD METHOD is unix, krb, or krb_pts --with-krb=PATH use Kerberos from PATH --with-statedir=DIR use DIR as state directory for ptclient, only needed when using krb_pts for authorization LONG INSTRUCTIONS ----------------- Configure the package for your system. In the directory above the one that this file is in, type `./configure'. If you're using `csh' on an old version of System V, you might need to type `sh configure' instead to prevent `csh' from trying to execute `configure' itself. If you are using Ultrix, you might need to type `sh5 configure' to avoid bugs in /bin/sh. Note that 'sh -x configure' may give different results than 'sh configure', making it difficult to debug configure scripts. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation, and creates the Makefile(s) (one in each subdirectory of the source directory). In some packages it creates a C header file containing system-dependent definitions. It also creates a file `config.status' that you can run in the future to recreate the current configuration. Running `configure' takes a minute or two. While it is running, it prints some messages that tell what it is doing. If you don't want to see the messages, run `configure' with its standard output redirected to `/dev/null'; for example, `./configure >/dev/null'. To compile the package in a different directory from the one containing the source code, you must use a version of `make' that supports the VPATH variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run `configure'. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If for some reason `configure' is not in the source code directory that you are configuring, then it will report that it can't find the source code. In that case, run `configure' with the option `--srcdir=DIR', where DIR is the directory that contains the source code. Another `configure' option is useful mainly in `Makefile' rules for updating `config.status' and `Makefile'. The `--no-create' option figures out the configuration for your system and records it in `config.status', without actually configuring the package (creating `Makefile's and perhaps a configuration header file). Later, you can run `./config.status' to actually configure the package. You can also give `config.status' the `--recheck' option, which makes it re-run `configure' with the same arguments you used before. This option is useful if you change `configure'. If your system requires unusual options for compilation or linking that `configure' doesn't know about, you can give `configure' initial values for some variables by setting them in the environment. In Bourne-compatible shells, you can do that on the command line like this: CC='gcc -traditional' DEFS=-D_POSIX_SOURCE ./configure For csh compatible shells, you can do something like this: (setenv CC 'gcc -traditional' ; ./configure) The `make' variables that you might want to override with environment variables when running `configure' are: (For these variables, any value given in the environment overrides the value that `configure' would choose:) CC C compiler program. Default is `cc', or `gcc' if `gcc' is in your PATH. INSTALL Program to use to install files. Default is `install' if you have it, `cp' otherwise. If you have an non-standard `install', use INSTALL="cp -p" (For these variables, any value given in the environment is added to the value that `configure' chooses:) DEFS Configuration options, in the form `-Dfoo -Dbar ...' CFLAGS Compiler options, such as `-O -g ...' LIBS Libraries to link with, in the form `-lfoo -lbar ...' If you need to do unusual things to compile the package, we encourage you to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the README so we can include them in the next release. After running configure, do a: make depend followed by a: make all cyrus-imspd-v1.8/notes/Changes-Todo0100644004310100000120000003004607714517411016524 0ustar shadowstaffSections: - Intro - TODO - Recent History - Ancient History Last update by Joseph Jackson, 01-Dec-2000. INTRO ----- This is a log of major changes made to the IMSP server and a list of improvements that could be made in the future. See also the RCS log files for each individual source file. At this point, we are not planning on significant work on this server, so the list of TODO items might remain outstanding forever. If you have bug reports or would like to contribute your enhancements back, please send them to . In the Recent History section, the three digit numbers are source code tracking numbers internal to Carnegie Mellon University. (Ignore them.) TODO ---- Simeon doesn't behave properly for searches, probably because of the restrictions on searching for "name *". Might have to pull that. The ptclient code doesn't initialize the ptscache.db file properly Use 'db_load -T -t hash ptscache.db' to create an empty one Remove all the code for bboard handling and IMAP proxy connections (It's all been ifdef'ed out for now) Simplify the code for "command MAILBOX" handlers now that the mailbox half is unimplemented Pull the "host" argument to the imsp_* protocol handler routines Move the realm and admin checks from sasl_support.c to authize.c Comment the abook_ldap.c code Make LDAP abooks more configurable, allowing more than one set of LDAP search parameters per server. See Setup-instructions for more details. Bug: When I add someone else to the ACL on my address book, it doesn't take effect until I logout of the IMSP server. Response: ACL changes are stored in the global abooks file which isn't written out until logout time. Same bug: I made an ACL change, but later that change was undone. Response: Yup, that happens some times. Details: The global abooks db isn't kept in sync when modified by multiple users at nearly the same time. - User 1 logs in and does an ADDRESSBOOK * command This causes a copy of the global abooks file to be read in - User 2 logs in and creates an abook with non-default ACLs This also reads in the global abooks file This updates the private image of the global abooks file - User 2 logs out This causes the private abooks to be written out to disk - User 1 creates a new abook with non-default ACLs This updates the private image of the global abooks file - User 1 logs out User 1's copy of the global abooks database is written out - Problem: User 2's changes have been discarded I've started to think about ways to fix this problem. There's a new syncdb.c function called sdb_flush() that takes a "GLOBAL" flag as an argument. If we checked the freshness of the global abooks file before making changes and flushed out any modifications right away, this problem would occur a lot less -- only in rare cases where users make changes at the same instant. To fix it for sure, we'd have to also lock the global abooks file during these operations. RECENT HISTORY --------------- 1.7: - Now use SASLv2 - Remove deprecated IMAP proxy code - Allow secondary LDAP search 013: 1.6a3 - Moved the configuration of LDAP searching from the abook_ldap.c source file to the global IMSP options file. It's now read in at run time rather than being hard-coded into the server binary. - Converted from the Netscape LDAP SDK to the OpenLDAP version. Mostly had to "ifdef" out error checking code in abook_ldap.c, but also needed to fiddle with configure.in. - Added support for the LITERAL+ protocol extension. The input processing loop in dispatch.c was cleaned up a bit in the process. 012: 1.6a2 - Fixed several memory leaks - Don't allow the dispatch error routine to call itself recursively. That caused slow but steady stack growth as it recursed endlessly - Fixed a problem handling non-lowercase search keys. Simeon searches on "Email" and "Alias". The spec says they should be case-insensitive - If the IMSP search spec has no fields that translate to LDAP attributes, return an error instead of doing an unqualified search of everything 011: 1.6a1 - Based on the sources in 009 - Merged the changes from 008 -> 010 (SASL integration) that were made in parallel with the changes from 008 -> 009 (LDAP lookups) - Added the -p command line argument which overrides the port number selection - Made the LDAP address book support conditional via configure - Disallow "name *" searches for abooks with ACL bit USER0 set Previously, only searches with no arguments were disallowed This should make the Simeon behavior match the Mulberry behavior - Numerous enhancements to the first round of SASL integration changes - Eight bit characters in address book entry names no longer cause "no such entry" failures from FETCHADDRESS (Fixed bugs in lib/glob.c) - Applied bug fixes from Jeff Gelb GETACL on a protected abook used to core dump the server. SETACL on an abook that doesn't exist used to return *nothing* at all from the server. Now sends back a "NO" error message. - Fixed Linux compile errors from undefined SIGEMT and SIGSYS - When an administrator assumes the identity of another user with 'LOGIN userid ""', the reply, telemetry log, and syslog messages all indicate both the admin user-id as well as the new user-id: Administrator switch from user `admin' to user `joeuser' successful. - Reorganized and updated much of the documentation in the notes directory. 010: - SASL integration. This affected the startup code, the AUTHENTICATE command, and the dispatch layer - Based on the sources in 008, not 009, due to parallel development 009: 1.5a9 - The USER1 access control list bit on an address book means that an LDAP directory should be searched instead of using a "syncdb" data file. This is a means of implementing an abook that has all your site's users. 008: 1.5a8 - Add support for the IMAP shutdown file (/var/imap/msg/shutdown) - Reorder logout code to write databases to disk before closing the connection - If the global options file has a read-only setting, the server will no longer let the user create an overriding private option - Added sdb_flush() routine to force database changes to disk (This routine isn't being called from anywhere just yet.) - Changed a few syslog messages in auth_krb_pts.c to differentiate them - Several misc. casting changes to avoid high volumes of compiler warnings 007: 1.5a6 - Updated auth_krb_pts.[ch] to reflect changes in cyrus imapd 1.5.16. 1.5a7 - The USER0 access control list bit will now prevent users from listing the complete contents of an address book. Attempts to use SEARCHADDRESS with no search criteria on abooks that have USER0 set now returns a permission error. 006: 1.5a5 - missed bug report regarding type mismatch in call to abook_parentacl in abook.c. Thanks to Roy Smith for the fix. 006: 1.5a4 ** This version changes the default hash algorithm when auth_krb_pts ** ** is used with db. This means that this release will only work with ** ** 1.5.9 (or later) of the cyrus-imapd or you need to compile the old ** ** hash algorithm by adding --enable-old-hash ** - Fixed bug in imsp/dispatch_read where a variable was being decremented twice. Thanks to Cyrus Daboo for the fix. - Allow someone with the admin bit set to create addressbooks for other people. 005: 1.5a3 ** This version has only been tested under Solaris ** - Changed syncdb not to commit to disk as per the comments. This probably means we will lose data if the machine crashes. However, the way the code is structured at this point, performance goes to hell if we do commit changes to disk when they are made - IMSPD no longer forks and exits. Rather, it won't exit unless there is an error; thereby allowing you to put it in a while(1) loop to restart it autoatmically if it does decide to kill itself. 003: 1.5a2 ** This version has only been tested under Solaris ** - fixed stuff I probably broke in syncdb.c with the way the cache of database is handled. More sanity checks and debugging output as a result of this bug hunt. 003: 1.5a1 ** This version has only been tested under Solaris ** - Added setsockopt() for SO_REUSEADDR to allow quicker restarts when imspd dies - remove infinite loop when creating addressbooks (loop in checking the parent acl) - autoconf cleanup * removed imtest - use the one with the cyrus imapd distribution * removed syslog test - wasn't being used by the Makefile anyway * reordered things so that the ucb linking would always come last -- was lazy and did not do the proper autoconf test - Allow creation of personal addressbooks. Before, if one tried to do a CREATEADDRESSBOOK on your own addressbook, it would always return AB_EXIST regardless of whether or not it actually did exist. Now, it will actually try to create it. UNLESS you define DISABLE_AUTO_CREATE_AB in the imsp/Makefile, imspd will bypass the ACL check and create an addressbook for the user. (was lazy here too -- this should be via configure) - bug in abook_parentacl() where it would actually overwrite the string being passed to it. This resulted in the user's abooks file not be updated properly when one did a CREATEADDRESSBOOK on a sub addressbook - added better logging (log authenticates) and better error reporting via syslog - fix sdb_copy() so RENAMEADDRESSBOOK actually works and doesn't result in the src addressbook being nuked and the dst addressbook being empty. - added shadow password support -- contributed by ?? ANCIENT HISTORY --------------- Version 1.4 WARNING: IMSP releases prior to version 1.0alpha8 as well as releases from ESYS used "anonymous" as the public identifier for ACLs. 1.4 and later uses "anyone" to be consistent with the IMAP server ACLs. Version 1.3 Added support to run as inetd client. Make GET accept an astring rather than an atom Version 1.0 alpha 8 released. (June 14, 1994) Fixed bug in sdb_delete which caused DELETEADDRESSBOOK to break on some systems. Fixed bug in encoding routines on little-endian machines Fixed bug in synchronized database routines which cause RENAMEADDRESSBOOK to break on some systems. Fixed bug which prevented locking of address book entries with a space in their name. Fixed bug which caused imap_wait() to lock on connection failures Added a number of POSIX compatability changes Disown parent tty Added some function prototypes Added new LIST command and re-write mailbox support Changed addressbooks to use libcyrus ACLs in abooks file Added \Marked and \Unmarked and LAST/SEEN support General cleanup of unused variables, etc. Added telemetry log Version 1.0 alpha 7 released Added CAPABILITY command. Added AUTHENTICATE command. Merged with libcyrus.a Added protection support and buffering to dispatch.c Added proxy support via AUTHENTICATE command Removed old @KERBEROS hack Removed old FIND ALL.ADDRESSBOOKS command Updated atom definition Fixed bug in MYRIGHTS MAILBOX and GETACL MAILBOX Version 1.0 alpha 6 released. Added CREATEADDRESSBOOK, DELETEADDRESSBOOK, RENAMEADDRESSBOOK Permit empty address book entries and empty address books Remove addressbook auto-create on STOREADDRESS Remove addressbook auto-delete on STOREADDRESS/DELETEADDRESS Added ANONYMOUS_LOGIN option Version 1.0 alpha 5 released. Added ADDRESSBOOK command fixed bug in lcase() routine. Renamed standard options to fit option naming conventions. Version 1.0 alpha 4 released. Changed MYACL to MYRIGHTS fixed SEARCHADDRESS bug fixed bug with "+ go" sending a NULL fixed memory bug in kerberos plaintext-password routines Version 1.0 alpha 3 released. Added ? wildcard. Changed syntax SEARCHADDRESS unsolicited reply. Version 1.0 alpha 2 released. Fixed bug in renaming INBOX. Change address book key from atom to string. Added advisory locking commands. cyrus-imspd-v1.8/notes/Setup-instructions0100644004310100000120000003447407714470444020130 0ustar shadowstaffIMSP Version 1.7 ---------------- Here's a crude set of directions for setting up the IMSP server. There are several sections in this document: - Setting it up - Setting up LDAP address books - Testing it - Telemetry (logging user activity) - Predefined options SETTING IT UP ------------- You have to create the directory /var/imsp, or change the "PREFIX" definition in the syncdb.c file to an appropriate existing directory. The cyrus-imspd must be run as root to use port 406. (But I think it could be run out of inetd, so maybe that's no longer a true statement.) You should copy the "options.sample" file to /var/imsp/options after changing the site-specific lines as needed. The parenthesized lists in the options file are space separated. Binary options are set to "+" for true and "-" for false. See the "Predefined options" section for a list of options that control the IMSP server. If you want new users to be able to LOGIN to the server, be sure the "imsp.create.new.users" option is set to true (+). Without it, no one can login until a directory and options file are created for them. The AUTHENTICATE and LOGIN commands are implemented using SASL, so you need to configure it as instructed by the directions that came with the SASL libraries. That primarily involves putting SASL plug-ins into the /usr/lib/sasl/ directory. Also check the "imsp.sasl.*" options that are documented in "Predefined options" section below. If you're using Kerberos you need to create an "imap." Kerberos instance where is the first element of the fully qualified domain name (ex: imap.cyrus for cyrus.andrew.cmu.edu). Note that we use "imap", not "imsp", as the service name. The IMAP proxy features of the IMSP server were never completed and never used at any site that I'm aware of. Therefore, I decided to remove those features rather than port them to the SASL environment. The following paragraphs are kept around for history's sake. The CREATE/DELETE/RENAME and new user LOGIN commands do proxy connections to an IMAP server. You need to make sure the "imap.new.mailbox.servers" option is correct for new user LOGIN to find a server to get a list of mailboxes from. In addition, if your IMSP clients are using Kerberos tickets rather than plaintext passwords, you need to modify your IMAP server to accept the imap. ticket as valid for any user. AFS sites may need to start imspd after running pagsh to prevent ticket confusion, and other sites may need to modify the ticket file environment variable. If you are running a cyrus imap server, you can remove the file /var/imsp/mailboxes to cause an automatic re-sync of the mailbox list with the IMAP server the next time IMSP is restarted. The mailbox commands will not work with a c-client IMAP server. SETTING UP LDAP ADDRESS BOOKS ----------------------------- The IMSP server now supports a special kind of read-only address book that's implemented via LDAP lookups rather than the built-in syncdb database. The "imsp.implementation.updates" file has more details on our motivations for adding this ability to the server, so this document will just talk about setting it up. In the initial implementation, the IMSP server can only perform lookups through one LDAP server using one set of search options. The server name and other LDAP settings are retrieved from the IMSP global options file whenever they are first needed. (You don't need to provide any settings if you're not going to use the LDAP feature.) The LDAP server name and search base settings are defined in the following global options. In /var/imsp/options, replace the values as appropriate for your site. Omit the "ldapport" setting to have it default to the standard LDAP port number. The "scope" setting must be one of "subtree", "base", or "onelevel"; see the LDAP documentation on ldap_search() for more info. imsp.ldap.searchbase N o=Carnegie Mellon University imsp.ldap.scope N subtree imsp.ldap.host N ldap.andrew.cmu.edu imsp.ldap.port N 389 Next, fill in the name of the LDAP attribute that contains the full name of the entry. This is normally "cn", short for common name. The server also needs the name of an attribute which is sure to be unique for each entry. At Carnegie Mellon, more than one user can have the same common name but we know that no two entries will have the same "uid" user-id field. In the worst case, you could always use "dn", the distinguished name of the entry. Try to pick something shorter, though. imsp.ldap.fullnameattr N cn imsp.ldap.uniqueattr N uid Now define a default filter for the search operations. Generally, this should help narrow the search down to entries which correspond to people or at least entries which have e-mail addresses. The value you see below is specific to Carnegie Mellon, so make sure you change it. Something like "mail=*" would limit the search to those entries that have an e-mail attribute. If you don't want to restrict the search at all, use "(objectclass=*)", the LDAP equivalent of an unqualified wildcard search. imsp.ldap.defaultfilter N (objectclass=cmuwhitepages) Finally, you must provide a mapping table to translate between IMSP field names and LDAP attribute names. They are entered as a simple list but are interpreted as (field-name, ldap-attribute-name) pairs. Obviously, there must be an even number of items in the list. If an IMSP field name has no corresponding LDAP attribute, use NULL as the corresponding attribute name. The values suggested below are tuned to Cyrusoft's Mulberry e-mail client. The IMSP fields you see listed are exactly what Mulberry uses when storing its address books. Pay particular attention to the "alias" field since that is the one used when Mulberry 1.4 or later does nickname resolution on addresses entered in the "To" header of outgoing message drafts. We use "uid" so Andrew user-ids are automatically expanded to the full name and preferred e-mail address of the user. This should appear as one long line in your options file, but has been broken up here for readability: imsp.ldap.attrmap N (name cn address postaladdress alias uid company ou email mail fax telephonenumber notes NULL phone-home telephonenumber phone-work telephonenumber urls labeleduri) When compiling the server for your site, make sure that the configure script finds your LDAP library. Use the --with-ldap= argument if you need to help it out. For example, "--with-ldap=superldap" results in "-lsuperldap" at link time. If configure doesn't find an LDAP library or you use "--without-ldap", all the LDAP lookup features are omitted. (abook_ldap.c is not even compiled.) The remaining set up steps are done by sending commands to the running IMSP server. The "imtest" program is a simple way of interacting with your IMSP server. See below for more information. You might find that "telnet imsp.company.com 406" will also do the job if you're comfortable authenticating with the 'A LOGIN user "password"' command first. Decide which address books should use LDAP lookups. If necessary, create the address book first with the protocol: A0 CREATEADDRESSBOOK "All Users" If the address book already exists and isn't empty, that's okay. Once the LDAP feature is enabled, the old contents of the address book are ignored. Turn on the LDAP feature for the address book by setting the USER1 access control list (ACL) bit for all users. By setting the USER1 bit, the server will automatically remove all normal access bits other than READ and LOOKUP, making this a read-only address book. If you don't want users to be able to open the address book, also set the USER0 bit. This is strongly recommended as producing a list of each user in the address book can be an expensive operation when the list of users ranges in the tens of thousands. When USER0 is set, users can still search for specific entries -- they're just restricted from doing an unqualified search. The protocol for this is ('0' stands for USER0 and '1' stands for USER1): A1 SETACL ADDRESSBOOK "All Users" anyone lr01 As a quick test of your LDAP-based address book, try a simple search: A2 SEARCHADDRESS "All Users" name "*jackson*" If you don't get the results you expected, check the syslog log file for error messages. TESTING IT ---------- The test program "imtest" included with the Cyrus IMAP release is a simple protocol tester. It connects to the IMSP or IMAP server specified on the command line, line-buffers user input and sends it to the server as well as displaying server responses locally. It will convert all newlines to CRLF pairs. It also has SASL integration, so it can let you test authenticated server logins. See the documentation that comes with "imtest" for more details on using the tool. TELEMETRY (LOGGING USER ACTIVITY) --------------------------------- If you wish to save session telemetry on the server, create the directory "/var/imsp/log/". All connections by will store a telemetry log in that directory. PREDEFINED OPTIONS ------------------ The following option names are reserved in this implementation. Some of the options have been deprecated by the removal of the IMAP integration (mailbox and bboard) features or by the conversion to the SASL authentication infrastructure. Those options are prefixed with the word "OLD" in the list below. imsp.sasl.allowplaintext [NON-VISIBLE] Binary option to decide whether users are allowed to AUTHENTICATE with the plaintext mechanism. Even if this option is turned off, the LOGIN command will accept the equivalent of plain text authentications. (Should that be changed?) imsp.sasl.minimum_ssf [NON-VISIBLE] Determines the minimum security strength factor required before the server will advertise and accept a given mechanism. Measured in bits. If the client doesn't support a mechanism with at least this many bits of "strength", authentication will fail. imsp.sasl.maximum_ssf [NON-VISIBLE] Determines the maximum security strength factor allowed for the server will advertise and accept a given mechanism. See above. imsp.sasl..* Each SASL plug-in may choose to support optional or required mechanism settings. When the mechanism requests an option lookup, the IMSP server prepends the string "imsp.sasl." and the lowercased name of the mechanism to the name of the option being sought. Example: imsp.sasl.kerberos_v4.srvtab common.date [READ-ONLY] (magic) When a user asks for the value of the date option, an RFC-822 date string should be returned with the current time. This is provided to assist small clients with unreliable clocks. common.delivery.hosts [READ-ONLY] This contains the list of recommended SMTP hosts for mail delivery. common.domain [READ-ONLY] When a user asks for the domain option, the local mail domain is returned. common.from [READ-ONLY] (magic) When a user asks for the value of the from option, an RFC-822 address for that user is returned. common.sent.mailbox [READ-WRITE] The name of a mailbox to APPEND blind carbon copies. imsp.admin.all [NON-VISIBLE] This is a list of users that may use any implemented IMSP features. OLD imsp.admin.bboards [NON-VISIBLE] This is a list of users that may create, rename, delete and replace any mailbox. OLD imsp.admin.subs [NON-VISIBLE] This is a list of users allowed to view (but not change) other user's subscriptions and mailboxes. imsp.create.new.users [NON-VISIBLE] If this global option is on, the directory for a new user will be created automatically. Otherwise the system administrator must create a directory for each authorized user. imsp.create.policy [NON-VISIBLE] This is specifies the creation policy for new mailboxes. The option is specified as a site-defined string. OLD imsp.default.subs [NON-VISIBLE] A list of the default subscriptions given to a new user. OLD imsp.external.subs [NON-VISIBLE] If this is set, subscriptions to external mailboxes and mailboxes are allowed by using the {hostname}folder notation. OLD imsp.imap.servers [READ-ONLY] This global option contains a list of all IMAP servers managed by IMSP. An implementation specifier may be appended to the end of a server name with a `/' separator. imsp.ldap.* [NON-VISIBLE] See the section above for more information on all the LDAP settings. imsp.log.level [NON-VISIBLE] This integer specifies the amount of logging to be done. imsp.login.realms [NON-VISIBLE] This specifies a list of realms which are permitted to do cross-realm Kerberos authentication. imsp.login.srvtab [NON-VISIBLE] This specifies the filename of the Kerberos srvtab file. Still supported for backward compatibility, but you should probably use imsp.sasl.kerberos_v4.srvtab instead. OLD imsp.new.mailbox.servers [NON-VISIBLE] This specifies a list of IMAP servers to search for or create the INBOX for a new user, or new non-personal mailboxes. OLD imsp.proxy.authlevel [NON-VISIBLE] This is an integer bitmask of the authentication levels supported for proxy login to IMAP servers. Add 1 if cleartext permitted, add 2 if integrity permitted, add 4 if privacy permitted. Defaults to 7. The highest permitted mechanism available will be used. OLD imsp.proxy.authtype [NON-VISIBLE] This is the authentication type used for proxy login to IMAP servers. If this is not set, the best authentication available will be used. Only KERBEROS_V4 and PLAINTEXT supported at present. OLD imsp.required.subs [NON-VISIBLE] Users will not be allowed to unsubscribe to mailboxes in this list. OLD imsp.share.mailboxes [NON-VISIBLE] If this global option is on, then mailbox names beginning with the prefix "user.." are reserved as mappings of individual user's MAILBOXES into the MAILBOXES namespace. In addition, it permits users to allow other users to read their mailboxes if ACLs permit. OLD imsp.user.inbox [READ-ONLY] This is the name of a mailbox which will appear as "INBOX" on any mailbox list. The phrase "$USER" will be replaced with the login name of the current user. imsp.user.quota [READ-ONLY] This is an integer specifying the maximum number of kilobytes in the user's options & address books (doesn't include subscriptions or address book ACLs). imsp.user.quota.usage [READ-ONLY] This is an integer specifying the number of bytes used by options and address book entries (see "QUOTA" above for full details). Its value is translated to kilobytes for user requests. cyrus-imspd-v1.8/notes/imsp.implementation0100644004310100000120000006636607060651607020263 0ustar shadowstaff*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT* ** SEE ALSO THE UPDATES TO THIS DOCUMENT KEPT IN "imsp.implementation.updates" CMU's IMSP server implementation -------------------------------- by Chris Newman draft 10/12/94 ASSUMPTIONS ----------- This document assumes you are familiar with both the IMSP and IMAP4 protocols. TERMS ----- ACL Access control list, as defined in IMSP specification. CYRUS-IMSP CMU's implementation of IMSP IMAP Interactive Mail Access Protocol (see RFC-1176, IMAP4 internet-draft) A protocol for users to access mail and bboards. IMSP Interactive Mail Support Protocol (see IMSP document) A protocol to manage multiple IMAP servers and provide support functions that are related to mail access. UID An IMAP UID. USP Un-Specified Protocol A currently unspecified protocol or set of protocol extensions for communication between IMAP and/or IMSP servers. SCOPE ----- This document is a working document describing the Cyrus implementation of IMSP. Some of the items described in this document are not implemented, but should be implemented in the future. This document may change at any time in any way. FILES ----- CYRUS-IMSP will store its configuration files in a configuration directory (usually /var/imsp). Each file will have a separate lock file by the same name with a "." post-pended. Within this configuration directory are the following files: options Global options file. See the "OPTIONS" section below. abooks List of address books with ACLs. See "ADDRESS BOOKS" below. mailboxes List of available mailboxes, the servers they're on and the uid of the last message in the folder. See "MAILBOXES" below. changed List of mailboxes that have been renamed or replaceed. user Directory for user specific information. The user subdirectory will contain another subdirectory for each user on the system. The user specific subdirectories will contain the following: options User options. See "OPTIONS" section below. subs List of mailboxes the user has accessed, a flag indicating subscription status, and an uid. See "SUBSCRIPTIONS" below. abooks List of personal address books. See "ADDRESS BOOKS" below. abook. User address book(s). See "ADDRESS BOOKS" below. abookacl. User address book access control list(s). See "ADDRESS BOOKS" below. alock Advisory locks for address books and options. Fields stored in IMSP database files will be encoded with "\n" for newlines, "\s" for spaces, and "\\" for backslashes as necessary. When the CYRUS-IMSP server becomes a replicated service, cross server locking and synchronization of these files will need to be implemented. All file access and file locking will be heavily modularized in expectation of this replication. OPTIONS ------- Server configuration, user configuration and some general information is made available through the options interface. Options may be read with the IMSP "GET" command and changed with the IMSP "SET" or "UNSET" commands. Four basic types of options are supported. "Magic" options are built into the server and may return different values at different times (e.g. the "common.date" option). "Non-visible" options may only be used by the config administrator, and are for configuration options that are of no interest to the user. "Read-only" options may not be changed by users. "Read-write" options may have a default (global) value, which may be overridden by the user's local options. Non-visible options appear read-only to a full administrator. Magic options usually appear as read-only. The options file contains a list of options in the following format: OPTION-NAME OPTION-TYPE OPTION-VALUE LF The OPTION-NAME is a string containing no spaces or CRLF characters and specifies the option. The OPTION-TYPE is a single character either 'N' (Non-visible), 'R' (Read-only) or 'W' (Read-Write). Option names are case-insensitive, but option values may be case sensitive. By convention: Boolean options are on if their value is '+' and off if their value is '-'. Integer options are numeric with an optional '-' prefix. List options begin with '(', end with ')', and the different items are separated by spaces. If necessary, '"' could be used to quote list items containing parentheses and spaces. Normal users may only set options in their user options file that don't shadow a global read-only option. Full administrators may change global options using the IMSP "SET" command and prefixing the option name with a "*". A full administrator can change read-only or non-visible options by prefixing the option name (after the "*" prefix if it's global) with "%" or "%%" respectively. ADMINISTRATION -------------- There will be three levels of administration provided by CYRUS-IMSP. The usernames in the "imsp.admin.subs" list option are allowed to view but not change other user's subscriptions and mailboxes (by issuing the LOGIN command with a null password). This is provided to allow a subscription statistics service such as CMU's "arbitron" or a delivery system to find the location of a user's INBOX. The "imsp.admin.bboards" level would be useful for a postmaster who administrates the entire mailbox tree. The "imsp.admin.all" level (which includes all the others) allows full access to the CYRUS-IMSP server and would be useful for the system administrator. The following IMSP commands will be generally restricted in CYRUS-IMSP: MOVE, CREATE with server_partition_list, and DELETE with hostname. If the mailbox "user." is removed, then that user will be removed from the IMSP server database. AUTHENTICATION/AUTHORIZATION ---------------------------- A separate module for authentication and authorization will be made to allow site-specific changes. This will be used to control logins, proxy IMAP connections, and access control list lookups. The reference authentication module will do standard unix or (if KERBEROS is defined at compile time) kerberos authentication, and authorize the administrative levels listed above by looking for the usernames in the list options "imsp.admin.subs", "imsp.admin.bboards", "imsp.admin.all". Proxy-IMAP will use the plaintext password, or if KERBEROS is used, it will authenticate as user imap. and get a ticket for imap. using that ticket to authenticate users. This requires a simple modification to the IMAP server to consider a kerberos ticket belonging to imap.* (or imap.) as a valid password for any user. Access controls lists will contain only userids, or the word "anonymous" which applies to all users not listed in the ACL as well as unauthenticated users. A future authentication module may be made that allows AFS groups in ACLs and uses "system:anyuser" in place of "anonymous". The "imsp.admin.*" options may be replaced with AFS groups. LOGIN ACCESS ------------ Access to the server is controlled by the login command. The initial version will allow kerberos-style logins as well as plaintext logins. If the global option "imsp.create.new.users" is not set, then a user must also have a subdirectory in the "user" directory and an "options" file in order to log in. If "imsp.create.new.users" is set and the user has no INBOX, it will be created according the the "CREATE" policy below. A full administrator may gain access to a user's MAILBOX namespace by issuing a second LOGIN command with that user's name and a NULL password. SERVER STRUCTURE ---------------- The CYRUS-IMSP server will run as a process which watches the appropriate port. When a connection from a client is made, the server process will fork to give each client its own process. The parent process will continue to watch for connections and will also periodically update the MAILBOX LISTS (see next section). A limit on the number of connections to service could be added if deemed necessary. FAULT TOLERANCE --------------- Any bad protocol or improper syntax from the user will be rejected through the protocol. If a connection from a user is dropped, the server will make sure all files are up to date, and let the connection go. In the case of server disk errors, the server will abort (and remove itself from the pool if replicated servers are being used) and wait for the system administrator to clean up. User subscriptions, options and address books should be backed up regularly for recovery purposes. If a proxy connection to an IMAP server fails, IMSP will respond to the user request which prompted the proxy with a failure message. MAILBOX LISTS ------------- The first time the CYRUS-IMSP server is started, no top level "mailboxes" file will exist. At this point the server will check the "imsp.imap.servers" option and contact each IMAP server in the list to find the available mailboxes by doing a "LIST "" *". The mailboxes file will have the following format: MAILBOX-NAME UID FLAGS IMAP-SERVER-LIST ACL-LIST LF The MAILBOX-NAME is the name of that mailbox. IMAP-SERVER-LIST is a list of hostnames where that mailbox is stored. UID is the uid for that mailbox. ACL-LIST is a series of tab-separated identifier-rights pairs with a trailing tab. The FLAGS field begins with the separator character or CR if no separator character is supported. Currently there are no other flags, but they may be added in the future. MAILBOX NAMESPACE ----------------- If the "imsp.external.subs" option is set, than names of the form {hostname}folder are reserved for external sites. SUPPORT FOR C-CLIENT -------------------- Due to c-client's naming conventions, no support is planned for use of a cyrus-imsp server with a c-client imap server at present. A "always proxy" option might be added to support c-client minimally. SUBSCRIPTIONS ------------- Information about subscriptions to mailboxes are stored in the "subs" file in the following format: MAILBOX-NAME SUBSCRIPTION-STATUS UID LF MAILBOX-NAME is the name of the mailbox. SUBSCRIPTION-STATUS is a flag: '0' indicates user is not subscripted and '1' indicates user is subscribed. UID indicates how much the user has seen. Subscriptions may be adjusted with the IMSP "SUBSCRIBE" and "UNSUBSCRIBE" commands. A user is not permitted to unsubscribe to a mailbox listed in the "imsp.required.subs" option. If a user has no subs file, a new one will be created with a subscription to each mailbox listed in the "imsp.default.subs" option. If the option "imsp.external.subs" is set, then a user may subscribe to any mailbox name with the '{' prefix. The subscription will be returned by the LSUB with an empty list of server locations. This is only appropriate for sites whose clients all recognize the {hostname}mailbox notation. The mailboxes and subs files will be kept in alphabetic order. By default, the LIST commands will return INBOX first, followed by the mailboxes in alphabetic order. MARKED FLAG ----------- The \Marked flag will be implemented as follows: The "LAST" and "SEEN" IMSP extension commands will be used to change seen/unseen information as follows: tag LAST mailbox UID This command will be sent from an IMAP server to CYRUS-IMSP periodically to indicate the mailboxes with new messages. tag SEEN mailbox UID userid This command will be sent from an IMAP server to CYRUS-IMSP only when a user finishes reading all messages on the specified mailbox. A "LAST" will specify the uid to be placed in the mailboxes file for a given mailbox, and a "SEEN" will specify the uid to be placed in the subs file for a given user and mailbox. It is expected that the IMAP servers will be the only users allowed to use the "SEEN" and "LAST" commands. The UID "*" is used in the mailboxes files to represent a UID for which no LAST information has been provided. The UID "0" is reserved to mean there are no messages in the given folder, or the user has read no messages in the folder. IMSP SERVER REPLICATION ----------------------- A single IMSP server will probably be insufficient for a medium to large site. Therefore consideration must be taken on how to replicate the CYRUS-IMSP database between cooperating CYRUS-IMSP servers. An inter-IMSP server locking and data transfer protocol will need to be found. One possibility is to use the ubik protocol from Transarc. This would, however, prevent us from being able to distribute a replicated IMSP implementation outside of CMU. Load balancing between IMSP servers should be provided by DNS. For the first implementation (which won't include IMSP server replication), care will be taken to keep all access to potentially shared data highly modularized. MAILBOX REPLICATION ------------------- IMSP supports replication of mailboxes on multiple servers. To do this, CYRUS-IMSP will have to designate a master site for a mailbox and manage replication through the USP. The master site will be the first mailbox listed in the server list. In addition, the USP may support a server-load indicator so that CYRUS-IMSP can sort the output of the list of servers for LIST command by a load parameter. Alternatively, the CYRUS-IMSP server could simply randomize the list. The LIST command will return unsorted server lists to any administrator (so that the administrator can determine the master site). MOVE ---- The IMSP "MOVE" command is used to move folders between IMAP servers. This requires a command in USP (or IMAP) to direct an IMAP server to send a folder to another IMAP server. CREATE ------ The IMSP "CREATE" command is used to create new mailboxes. It adjusts the mailboxes files as appropriate. If no hostname is specified on the "CREATE" command, the hostname will be the hostname of the parent mailbox. "CREATE" will be implemented by proxy to an IMAP server. An "imsp.create.policy" option may be added later as follows: Policy types include the following: "random" selects a random server from the "imsp.new.mailbox.servers" list. "parent" selects the server that the "parent" mailbox is located on, if no parent mailbox is found, it falls back to another policy. "free-space" selects the server with the most available free space. This can only be implemented if a free space request is available through USP. CHANGED SUBSCRIPTIONS --------------------- The "changed" file allows a lazy evaluation method of updating user subs files. When a user is subscribed to a non-existent mailbox, the "changed" file will be checked for an entry for that mailbox. The changed file contains lines of the form: OLD-MAILBOX NEW-MAILBOX LF OLD-MAILBOX is the name of a non-existent mailbox and NEW-MAILBOX is the name of the new mailbox which has replaced OLD-MAILBOX. If a mailbox is renamed more than once, the previous entries in the "changed" file will be updated to prevent chaining. RENAME ------ If a user mailbox is renamed with the IMSP "RENAME" command, the mailboxes file should be adjusted as appropriate and a line will be added to the "changed" file. This allows modification of individual user's subs file to be done in a lazy-evaluation style and also allows CYRUS-IMSP to alert the user (through an unsolicited NO) that the mailbox has been renamed. The "RENAME" command will be implemented by proxy to the appropriate IMAP server. DELETE ------ The IMSP "DELETE" command will adjust the mailboxes file as appropriate. When a user has a subscription entry that refers to a non-existent mailbox (that doesn't have an entry in the changed file) they will be informed that the mailbox was deleted and the subscription entry will be removed. The "DELETE" command will be implemented by proxy to the appropriate IMAP server. ADDRESS BOOKS ------------- The "ADDRESSBOOK" command will be implemented by first scanning the user's "abooks" database then the global "abooks" database. The ACL of each address book scanned will be checked to see if the user has read access, and if so, it will be returned in an unsolicited "* ADDRESSBOOK" command. The global "abooks" database will contain a list of all address books that have ACL entries for identifiers other than the owner. The default ACL for an address book is full rights for the owner and no rights for others. The "CREATEADDRESSBOOK", "DELETEADDRESSBOOK", and "RENAMEADDRESSBOOK" commands are used to manage address books. The default address book, however, is assumed to implicity exist so the implementation will implicitly create it. The "create" access right on the default address book determines who is permitted to create new address books. The "abook.[name]" files are used to store a user's address books. The addressbook "abook." is the primary address book, and other address books are of the form "abook..". An address book entry will be in the following form: " The double-quote `"' is used as a separator and will be disallowed as part of the . The "FETCHADDRESS" command will return all pairs for a given . The "DELETEADDRESS" command will remove all entires for a given . The "STOREADDRESS" command will add or change the entry or entries as appropriate. The "SEARCHADDRESS" command will do a separate search for each field/value-pattern pair and intersect the results. When an entry is created, it is given an entry with an empty which is removed only upon deletion. Mapping the address book database file into a key-value form like the other database files makes it easier to use the same mechanism for all database files. The disadvantage is that the key-value database system has to be expanded to do searches on both the key and the value at the same time (rather than just the key), and that "FETCHADDRESS", "SEARCHADDRESS" and "DELETEADDRESS" must walk through every / pair. ACLS ---- Address book ACLs are stored in a file "abookacl." in the owner's directory. They are sorted case-sensitive, and are stored in the following format: The is restricted to characters listed in the IMSP specification. No ACL file is stored if the ACL is the default address book ACL (see "ADDRESS BOOKS" above). The IMSP "SETACL", "DELETEACL", "GETACL" and "MYACL" commands for mailboxes and mailboxes only require location of the mailbox/mailbox on the part of the CYRUS-IMSP server. The rest is dependent upon implementing ACL support in either IMAP or USP. CYRUS-IMSP will assume that the lookup access right is always set for all mailboxes. ADVISORY LOCKS -------------- The advisory lock file (alock) is a per-user database of objects that are locked. The format of the file is as follows: @ The field may be an option name, or have the syntax ", where is the name of an address book, and is the name of the locked entry. The is the user that locked the entry, and the is the host that sent the lock request to the IMSP server. When a user tries to lock an already locked entry, an error message will be sent including the @. In order to prevent advisory locks from getting "stuck", the IMSP server process will keep a list of all advisory locks held by a client. When that client disconnects, any advisory locks that are still locked will be unlocked. QUOTA ----- The "imsp.user.quota" option specifies the maximum amount of kilobytes that the user may store in their option and address book files. The ACL files and subscriptions files are not included since they are not free-form databases. The STOREADDRESS and SET commands will fail if the user would be over-quota upon completion. If the option is set to 0, then quota is unlimited. The user's usage will be stored in a read-only per-user option "imsp.user.quota.usage". The value of this option will be in bytes, and will be the sum of the following: length of the option names of per-user read-write options length of the option values of per-user read-write options length of the field name for every entry in every address book length of the values for every entry in every address book The STOREADDRESS and SET commands will compute a delta for this value, and check if that delta will put the value: imsp.user.quota.usage / 1024 over the imsp.user.quota. The DELETEADDRESS and UNSET commands will also modify the usage appropriately. LOGGING ------- CYRUS-IMSP will support multiple levels of logging using the standard UNIX syslog mechanism. Logging will be modular so that an alternate mechanism could be used if syslog is deemed too primitive. The "imsp.log.level" option will specify the logging level (each level includes the previous levels) as follows: 0 - only fatal errors will be sent to syslog as LOG_ERROR. 1 - warnings will be sent to syslog as LOG_WARNING. 2 - mailbox administrative actions (including new mailbox creations) will be sent to syslog as a LOG_NOTICE. The message will include the user, hostname, type and time of the action. 3 - every time a user logs in or out, a syslog LOG_NOTICE message will be sent. 9 - debugging messages will be sent to syslog as LOG_DEBUG. MONITORING ---------- The initial implementation will keep in mind that we will want to monitor serious IMSP errors and possibly the number of active connections to a given server. These might be made available through SNMPcon or a similar mechanism. Unspecified Protocol (USP) FEATURES ----------------------------------- A directed move/copy function is necessary to implement the IMSP "MOVE" command and replication. The CYRUS-IMSP server must be able to request available free space on a server in order to implement load-balanced creation policies. ACL support should be added to USP (or IMAP) in order to allow implementation of the IMSP ACL commands. A way of finding a system load parameter on IMAP servers should be added to support load-balanced mailbox replication. Support would also be needed in order to implement the partition based CREATE feature. INTERFACE TO DELIVERY SYSTEM ---------------------------- The delivery system is expected to use CYRUS-IMSP to locate the appropriate IMAP server to deliver a message. It must have "imsp.admin.subs" level access to locate the INBOX for any user. PREDEFINED OPTIONS ------------------ The following option names are reserved in this implementation. common.date [READ-ONLY] (magic) When a user asks for the value of the date option, an RFC-822 date string should be returned with the current time. This is provided to assist small clients with unreliable clocks. common.delivery.hosts [READ-ONLY] This contains the list of recommended SMTP hosts for mail delivery. common.domain [READ-ONLY] When a user asks for the domain option, the local mail domain is returned. common.from [READ-ONLY] (magic) When a user asks for the value of the from option, an RFC-822 address for that user is returned. common.sent.mailbox [READ-WRITE] The name of a mailbox to APPEND blind carbon copies. imsp.admin.all [NON-VISIBLE] This is a list of users that may use any implemented IMSP features. imsp.admin.bboards [NON-VISIBLE] This is a list of users that may create, rename, delete and replace any mailbox. imsp.admin.subs [NON-VISIBLE] This is a list of users allowed to view (but not change) other user's subscriptions and mailboxes. imsp.create.new.users [NON-VISIBLE] If this global option is on, the directory for a new user will be created automatically. Otherwise the system administrator must create a directory for each authorized user. imsp.create.policy [NON-VISIBLE] This is specifies the creation policy for new mailboxes. The option is specified as a site-defined string. imsp.default.subs [NON-VISIBLE] A list of the default subscriptions given to a new user. imsp.external.subs [NON-VISIBLE] If this is set, subscriptions to external mailboxes and mailboxes are allowed by using the {hostname}folder notation. imsp.imap.servers [READ-ONLY] This global option contains a list of all IMAP servers managed by IMSP. An implementation specifier may be appended to the end of a server name with a `/' separator. imsp.log.level [NON-VISIBLE] This integer specifies the amount of logging to be done. imsp.login.realms [NON-VISIBLE] This specifies a list of realms which are permitted to do cross-realm kerberos authentication. imsp.login.srvtab [NON-VISIBLE] This specifies the filename of the kerberos srvtab file. imsp.new.mailbox.servers [NON-VISIBLE] This specifies a list of IMAP servers to search for or create the INBOX for a new user, or new non-personal mailboxes. imsp.proxy.authlevel [NON-VISIBLE] This is an integer bitmask of the authentication levels supported for proxy login to IMAP servers. Add 1 if cleartext permitted, add 2 if integrity permitted, add 4 if privacy permitted. Defaults to 7. The highest permitted mechanism available will be used. imsp.proxy.authtype [NON-VISIBLE] This is the authentication type used for proxy login to IMAP servers. If this is not set, the best authentication available will be used. Only KERBEROS_V4 and PLAINTEXT supported at present. imsp.required.subs [NON-VISIBLE] Users will not be allowed to unsubscribe to mailboxes in this list. imsp.share.mailboxes [NON-VISIBLE] If this global option is on, then mailbox names beginning with the prefix "user.." are reserved as mappings of individual user's MAILBOXES into the MAILBOXES namespace. In addition, it permits users to allow other users to read their mailboxes if ACLs permit. imsp.user.inbox [READ-ONLY] This is the name of a mailbox which will appear as "INBOX" on any mailbox list. The phrase "$USER" will be replaced with the login name of the current user. imsp.user.quota [READ-ONLY] This is an integer specifying the maximum number of kilobytes in the user's options & address books (doesn't include subscriptions or address book ACLs). imsp.user.quota.usage [READ-ONLY] This is an integer specifying the number of bytes used by options and address book entries (see "QUOTA" above for full details). Its value is translated to kilobytes for user requests. PROJECT PLAN ------------ Phase 1 - Basic Implementation The goal of phase 1 will be to produce an IMSP server with all basic functionality that works with a stock IMAP server. Only features which can be implemented without the USP will be done. This includes the following: Options: including GET, SET, and UNSET. Address books: including SEARCHADDRESS, FETCHADDRESS, STOREADDRESS, DELETEADDRESS, RENAMEADDRESS Address book ACLs: SETACL, GETACL, DELETEACL, MYACL Advisory locking: LOCK and UNLOCK. LIST/LSUB (although the "SEEN" and "LAST" commands won't be implemented) Administrative levels with LOGIN SUBSCRIBE, UNSUBSCRIBE CREATE/RENAME/DELETE without replication or free-space create policy. Phase 2 - Unseen Information This will involve implementing the "SEEN" and "LAST" commands as well as modifying an IMAP server to use them. Phase 3 - Advanced features This will involve implementing the USP, "MOVE", create/rename/delete/replace for mailboxes, ACLs, and free-space create policy. It will probably be necessary to write our own IMAP implementation in order to make the IMAP and IMSP servers work together smoothly with these features. Phase 4 - Replicated IMSP This might be done before phase 3, as it has no dependencies on IMAP modifications. This involves adding inter-IMSP server synchronization. Phase 5 - Replicated mailboxes This could be done before phase 4 but depends on phase 3. Add replication support for mailboxes as well as load-balanced server lists returned by the LIST command. cyrus-imspd-v1.8/notes/imsp.implementation.updates0100644004310100000120000002156207060651720021710 0ustar shadowstaffIMSP Implementation Updates Joseph Jackson 22-Feb-2000 These notes supplement the file "imsp.implementation" with updates and corrections that bring it up to date with the latest changes to the server. There are several sections found below. - LDAP-based address books - IMAP integration removed - SASL authentication added - Implementation status - Organization of code, description of modules LDAP-BASED ADDRESS BOOKS ------------------------ The IMSP server now supports a special type of read-only address book that is implemented using LDAP lookups rather than the built-in "syncdb" database. A section has been added to the "Setup-instructions" document to explain how to use it. The "Changes-Todo" file also has some comments on how this feature might be improved in the future. The LDAP lookup code was written against the old Netscape LDAPv2 library. If you need any changes in order to make it work with your preferred LDAP library, I'd appreciate getting those patches back from you. Why was this added? For several reasons. At Carnegie Mellon, we find it useful to have an address book available that lists all users on the system. This is especially helpful in the context of the Mulberry 2.0 mail client, where it is very easy to initiate IMSP address book lookups but not as convenient to perform LDAP lookups. Before this feature was added, the "All Users" address book was generated from the password file every morning, getting munged into the IMSP database format. It seemed silly to regenerate a database that's already available elsewhere. Plus, the source data violates the IMSP spec in that there are several instances where more than one user shares the same full name. Since IMSP address books are keyed on full name, they are supposed to be unique. This caused all sorts of bugs and bad behavior. The mondo address book also caused performance problems. The IMSP server can only keep one address book in memory at a time, but people are likely to want to use a personal address book at the same time as the "All Users" address book. There are noticable delays when the server re-reads the large address book database file, making automatic name lookups painfully slow. By eliminating the really huge database file, the server feels a lot more responsive to users. Changing between multiple personal address books is okay because they tend to be relatively small. In fact, the LDAP lookups are really quick. It seems like the overhead of sending a request to the LDAP server is small enough that it's indexed lookups still return faster than a local syncdb lookup. I mentioned earlier a problem where multiple users have the same full name (ex: John Anderson). The LDAP code has a somewhat heavy handed approach to solving that problem, so it's worth describing. IMSP address books are keyed on the full name. When you perform a search on some address book field, the results are returned as a list of full names (database keys). To get the complete details on the entries associated with those keys, a fetch command is sent with one or more full names. If your search returns "John Anderson" as a match and you later fetch it, how will the server know which one you want? The IMSP server normally won't let you create duplicate keys, but a manually generated database file might violate that rule. If so, it's unpredicatable which entry will be returned. To solve this problem in the case of LDAP address books, some extra LDAP searches are performed during the SEARCHADDRESS command. Before the server returns the full name of a search result, an extra search is done to see if the full name is unique on the LDAP server. If it isn't, the full name is augmented with the name and value of some other LDAP attribute which is known to be unique. The "uniquifing" information is enclosed by square brackets and tacked onto the end of the full name. If the extra search finds that only one entry has the full name, it is returned directly with nothing extra added on. When a FETCHADDRESS command is processed for an LDAP address book, the server looks for the special square bracket delimiters. If found, the value of the unique attribute is used to find the entry instead of the full name. We find that users of Mulberry, our preferred e-mail client, don't notice the extra details appended to the name. Mulberry never displays the full names as returned by the initial SEARCHADDRESS command. It returns the full name from the individual FETCHADDRESS commands instead, and those are not modified by the server. Applications that don't hide this information will result in the users seeing something a little odd, but still readable. It might look like this, assuming you use the "uid" (user-id) attribute as the uniquifier: John Anderson[uid:anderson2] The "Setup-instructions" file explains how to specify the name of the LDAP attribute which is known to be unique at your site. See that file for more details. IMAP INTEGRATION REMOVED ------------------------ In the original design of the IMSP server, many mailbox-related commands were provided. The intention was to make the IMSP server the centralized source of mailbox details such as the name of the IMAP server housing the folder. Those features were never completely implemented and never used by any client that we are aware of. (However, the concept continues on in the ACAP protocol's Mailboxes dataset.) To simplify the process of compiling the IMSP server, the IMAP integration features have been removed. See the "Implementation status" section for an exact list of protocol commands that have been removed. The primary side-effect of this change is that the IMSP server no longer obtains Kerberos credentials to be used while connecting to the IMAP server. Sites using Kerberos will no longer need to take precautions to ensure that the credentials of the invoker are not overwritten. Read on for details on how the rest of the authentication infrastructure has been affected by the integration of SASL. SASL AUTHENTICATION ADDED ------------------------- The LOGIN and AUTHENTICATE commands are now implemented using the Cyrus Simple Authentication and Security Layer (SASL) library. See the IETF RFC 2222 for more background on SASL. The "Build-instructions" file has more information on obtaining the required SASL library. The benefit of this work is that there are very few dependencies on the particular authentication system (such as Kerberos) used at your site. Once you compile SASL and install a plug-in for each mechanism you want to support, the IMSP server should just work. There are other software packages that also rely on the Cyrus SASL libraries, so the tricky details of compiling authentication modules can be done just once for all those packages. IMPLEMENTATION STATUS --------------------- NOOP Done LOGIN/LOGOUT Done, with SASL sasl_checkpass function AUTHENTICATE Done, with SASL integration CAPABILITY Done GET/SET/UNSET Done CREATEADDRESSBOOK Done DELETEADDRESSBOOK Done RENAMEADDRESSBOOK Done SEARCHADDRESS Done FETCHADDRESS Done STOREADDRESS Done DELETEADDRESS Done LOCK/UNLOCK Done SETACL/DELETEACL Done GETACL/MYRIGHTS Done SUBSCRIBE/UNSUBSCRIBE Returns "not implemented" as of 1.6a1 CREATE Returns "not implemented" DELETE Returns "not implemented" RENAME Returns "not implemented" MOVE Returns "not implemented" LIST Returns "not implemented" This meets minimal protocol compliance standards outlined in the IMSP specification. ORGANIZATION OF THE CODE ------------------------ The lib/* sources are copied from the Cyrus IMAP mail server. We decided to copy the sources over rather than compiling against the "libcyrus" associated with the IMAP server. The rest of the sources are in the "imsp" directory. imsp_server.c -- parses IMSP protocol received from the client and responds appropriately. main.c -- main program which listens on a socket waiting for clients to connect. authize.c -- authorization module abook.c -- address book support abook_ldap.c -- read-only address books implemented via LDAP lookups option.c -- support for options database alock.c -- support for advisory locking database syncdb.c -- low level key-value database functions im_util.c -- IMSP/IMAP protocol utility functions dispatch.c -- File writing/reading with provisions for handling of multiple streams simultaneously. Also includes SASL-negotiated protection mechanism. adate.c -- RFC 822 date generator sasl_support.c - Support routines needed by the SASL library These files were removed during the SASL integration: login_krb.c -- kerberos authentication routines login_unix.c -- unix authentication routines These files were removed while pulling the IMAP integration features: bb.c -- support for global mailboxes imap_client.c -- IMSP's IMAP client routines for proxy connections proxy_krb.c -- kerberos proxy login proxy_unix.c -- unix proxy login cyrus-imspd-v1.8/notes/option.registry0100644004310100000120000000747007060651535017435 0ustar shadowstaff IMSP option registry -------------------- by Chris Newman Last update 02/16/00 In order to prevent conflicts in option naming, the namespace for IMSP options needs to be controlled by a central registry. Two types of registrations may be made: 1) Registration of an option prefix. Each client should register a prefix. The client implementor or team then has complete control over option names beginning with that prefix. 2) Registration of common options. If a specific option is deemed useful for multiple clients, it can be registered in one of the shared option hierarchies. A precise description of the option's function must be sent with the registration. The registration authority reserves the right to reject a registration, require that the registered option be in use by multiple clients, or open the proposal up for discussion. NOTE: The IMAP integration features of the IMSP server have been removed as of version 1.6a1 of the IMSP server. Therefore, many of these options are deprecated. Periodic updates of the registration list will be sent to the IMAP discussion list. Current procedure: Send the request in email to imsp-options@andrew.cmu.edu -------------------------------------- Common registered option prefixes: Prefix Controller Description ------ ---------- ----------- common. registry Options useful to multiple clients. desc. registry Text descriptions of other options. imap. registry Options that affect or describe IMAP server configuration. imsp. registry Options that affect or describe IMSP server configuration. x. none Unrestricted option space for testing. Client specific registered option prefixes: Prefix Controller Product ------ ---------- ------- cyrus. Carnegie Mellon University X-Cyrus ecsmail. ESYS Corp Simeon (formerly ECSmail) eudora. Qualcomm Incorporated Eudora mailstrom. Adam Treister Mailstrom ML. Mike Macgirvin ML pine. University of Washington Pine simeon. ESYS Corp. Simeon cyrusoft.mulberry. Cyrusoft International, Inc. Mulberry -------------------------------------- Registered options: common.date The value of this option is the current date and time at the IMSP server in the proper format for an RFC822 date header as updated by RFC1123. This should be used in place of a client's internal clock if there is reason to suspect the internal clock may not be accurate. common.delivery.hosts The value of this option is a list of SMTP hosts for mail submission. A client should try all hosts in the order specified before announcing failure to the user. common.domain The value of this option is the RFC822 mail domain of the current IMSP server. There is no requirement that a host with the specified name exists, since a DNS MX record would be sufficient. common.from The value of this option is the RFC822 from address that should be used for mail submitted by the current user. All clients should use this option in order to leave administrative control of whether and how users may adjust their from address to the IMSP server implementation and configuration. common.sent.mailbox The value of this option is the name of a mailbox where copies of all outgoing mail should be stored. desc. A textual description of the option that may be desplayed to users to describe that option. imap.charset [proposal currently being discussed] imsp.imap.servers [ Deprecated as of version 1.6a1 ] The value of this option is a list of host-descriptors for the IMAP servers managed by this IMSP server. A host-descriptor is a hostname which may be followed by a "/" and an implementation dependent string (used to identify the IMAP implementation as necessary). cyrus-imspd-v1.8/acconfig.h0100644004310100000120000000116010035057302015077 0ustar shadowstaff#define STATEDIR "/var/imsp" @TOP@ #undef HAS_STRERROR #undef HAVE_DB_185_H #undef HAVE_KRB #undef HAVE_LDAP #undef HAVE_LIBDB #undef HAVE_GSSAPI_H #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE #undef HAVE_STRLCAT #undef HAVE_STRLCPY #undef HAVE_PR_END @BOTTOM@ /* getaddrinfo things */ #include #include #include #ifndef HAVE_GETADDRINFO #define getaddrinfo sasl_getaddrinfo #define freeaddrinfo sasl_freeaddrinfo #define getnameinfo sasl_getnameinfo #define gai_strerror sasl_gai_strerror #include "gai.h" #endif #ifndef NI_WITHSCOPEID #define NI_WITHSCOPEID 0 #endif cyrus-imspd-v1.8/config.h.in0100644004310100000120000000754410170575203015221 0ustar shadowstaff/* config.h.in. Generated automatically from configure.in by autoheader 2.13. */ #define STATEDIR "/var/imsp" /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE #undef _ALL_SOURCE #endif /* Define to empty if the keyword does not work. */ #undef const /* Define if you don't have vprintf but do have _doprnt. */ #undef HAVE_DOPRNT /* Define if you support file names longer than 14 characters. */ #undef HAVE_LONG_FILE_NAMES /* Define if you have the vprintf function. */ #undef HAVE_VPRINTF #undef HAS_STRERROR #undef HAVE_DB_185_H #undef HAVE_KRB #undef HAVE_LDAP #undef HAVE_LIBDB #undef HAVE_GSSAPI_H #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE #undef HAVE_STRLCAT #undef HAVE_STRLCPY #undef HAVE_PR_END /* Define if you have the dn_expand function. */ #undef HAVE_DN_EXPAND /* Define if you have the dns_lookup function. */ #undef HAVE_DNS_LOOKUP /* Define if you have the ftruncate function. */ #undef HAVE_FTRUNCATE /* Define if you have the getaddrinfo function. */ #undef HAVE_GETADDRINFO /* Define if you have the getdtablesize function. */ #undef HAVE_GETDTABLESIZE /* Define if you have the getnameinfo function. */ #undef HAVE_GETNAMEINFO /* Define if you have the gsskrb5_register_acceptor_identity function. */ #undef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY /* Define if you have the memmove function. */ #undef HAVE_MEMMOVE /* Define if you have the strcasecmp function. */ #undef HAVE_STRCASECMP /* Define if you have the strlcat function. */ #undef HAVE_STRLCAT /* Define if you have the strlcpy function. */ #undef HAVE_STRLCPY /* Define if you have the header file. */ #undef HAVE_DIRENT_H /* Define if you have the header file. */ #undef HAVE_NDIR_H /* Define if you have the header file. */ #undef HAVE_STDARG_H /* Define if you have the header file. */ #undef HAVE_SYS_DIR_H /* Define if you have the header file. */ #undef HAVE_SYS_NDIR_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the dbm library (-ldbm). */ #undef HAVE_LIBDBM /* Define if you have the dl library (-ldl). */ #undef HAVE_LIBDL /* Define if you have the krb library (-lkrb). */ #undef HAVE_LIBKRB /* Define if you have the ndbm library (-lndbm). */ #undef HAVE_LIBNDBM /* Define if you have the resolv library (-lresolv). */ #undef HAVE_LIBRESOLV /* Do we have strerror? */ #undef HAS_STRERROR /* Berkeley DB? */ #undef HAVE_LIBDB /* Berkeley DB? */ #undef HAVE_LIBDB /* DB 185 h? */ #undef HAVE_DB_185_H /* Berkeley DB? */ #undef HAVE_LIBDB /* Define if you have the gssapi.h header file */ #undef HAVE_GSSAPI_H /* Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE */ #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE /* Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE */ #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE /* Define if your GSSAPI implimentation defines GSS_C_NT_HOSTBASED_SERVICE */ #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE /* Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME */ #undef HAVE_GSS_C_NT_USER_NAME /* Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME */ #undef HAVE_GSS_C_NT_USER_NAME /* Define if your GSSAPI implimentation defines GSS_C_NT_USER_NAME */ #undef HAVE_GSS_C_NT_USER_NAME /* Do we have ldap support? */ #undef HAVE_LDAP /* Do we have kerberos support? */ #undef HAVE_KRB /* ptclient state directory? */ #undef STATEDIR /* getaddrinfo things */ #include #include #include #ifndef HAVE_GETADDRINFO #define getaddrinfo sasl_getaddrinfo #define freeaddrinfo sasl_freeaddrinfo #define getnameinfo sasl_getnameinfo #define gai_strerror sasl_gai_strerror #include "gai.h" #endif #ifndef NI_WITHSCOPEID #define NI_WITHSCOPEID 0 #endif cyrus-imspd-v1.8/config.sub0100644004310100000120000005772707754522070015176 0ustar shadowstaff#! /bin/sh # Configuration validation subroutine script, version 1.1. # Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc. # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file 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., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. if [ x$1 = x ] then echo Configuration name missing. 1>&2 echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 echo "or $0 ALIAS" 1>&2 echo where ALIAS is a recognized configuration type. 1>&2 exit 1 fi # First pass through any local machine types. case $1 in *local*) echo $1 exit 0 ;; *) ;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in linux-gnu*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \ | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr5000 | miprs64vr5000el | mcore \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ | thumb | d10v | fr30) basic_machine=$basic_machine-unknown ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i[34567]86) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. # FIXME: clean up the formatting here. vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | xmp-* | ymp-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ | f301-* | armv*-* | t3e-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* ) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-cbm ;; amigaos | amigados) basic_machine=m68k-cbm os=-amigaos ;; amigaunix | amix) basic_machine=m68k-cbm os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | ymp) basic_machine=ymp-cray os=-unicos ;; cray2) basic_machine=cray2-cray os=-unicos ;; [ctj]90-cray) basic_machine=c90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[34567]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i[34567]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i[34567]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i[34567]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; i386-go32 | go32) basic_machine=i386-unknown os=-go32 ;; i386-mingw32 | mingw32) basic_machine=i386-unknown os=-mingw32 ;; i386-qnx | qnx) basic_machine=i386-qnx ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) basic_machine=i386-unknown os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; np1) basic_machine=np1-gould ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=rs6000-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=t3e-cray os=-unicos ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xmp) basic_machine=xmp-cray os=-unicos ;; xps | xps100) basic_machine=xps100-honeywell ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown else basic_machine=mips-mips fi ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sparc | sparcv9) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; c4x*) basic_machine=c4x-none os=-coff ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*) # Remember, each alternative MUST END IN *, to match a version number. ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) os=-nextstep2 ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -qnx) os=-qnx4 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -*MiNT) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f301-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -*MiNT) vendor=atari ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os