From b1ba8dc3b3510188de52dd6186bc7c547dbf8a01 Mon Sep 17 00:00:00 2001 From: qua-non Date: Wed, 12 Feb 2014 08:56:22 +0530 Subject: [PATCH 01/51] Introduce method `get_keyboard_height` that returns current softkeyboard height if keyboard is active else 0. --- recipes/android/src/android/_android.pyx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/recipes/android/src/android/_android.pyx b/recipes/android/src/android/_android.pyx index 20973efb89..8cc2e6d8ae 100644 --- a/recipes/android/src/android/_android.pyx +++ b/recipes/android/src/android/_android.pyx @@ -170,6 +170,18 @@ def get_dpi(): cdef extern void android_show_keyboard(int) cdef extern void android_hide_keyboard() +# get keyboard height +def get_keyboard_height(): + from jnius import autoclass + python_act = autoclass('org.renpy.android.PythonActivity') + rctx = autoclass('android.graphics.Rect')() + mActivity = python_act.mActivity + mActivity.getWindow().getDecorView().\ + getWindowVisibleDisplayFrame(rctx) + height = mActivity.getWindowManager().getDefaultDisplay().getHeight() + return height - rctx.bottom + + # Flags for input_type, for requesting a particular type of keyboard #android FLAGS TYPE_CLASS_DATETIME = 4 From df55cf7f6b2b07dfba4633a7c3c4cd83eed502c6 Mon Sep 17 00:00:00 2001 From: qua-non Date: Wed, 26 Feb 2014 23:32:00 +0530 Subject: [PATCH 02/51] Listen to chnages in the gloabal layout for figuring out when the IME is activated. --- src/src/org/renpy/android/SDLSurfaceView.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/src/org/renpy/android/SDLSurfaceView.java b/src/src/org/renpy/android/SDLSurfaceView.java index 059006a3fe..9f8174be94 100644 --- a/src/src/org/renpy/android/SDLSurfaceView.java +++ b/src/src/org/renpy/android/SDLSurfaceView.java @@ -1132,7 +1132,6 @@ public void run(){ public void dispatchCommand(String message){ - Boolean ret = false; int delay = 0; while (message.length() > 50){ delayed_message(message.substring(0, 50), delay); @@ -1146,7 +1145,7 @@ public void dispatchCommand(String message){ if (DEBUG) Log.d(TAG, String.format("dispatch :%s", message)); int keyCode = 45; - //send control sequence start \x01 + //send control sequence start nativeKey(keyCode, 1, 1); nativeKey(keyCode, 0, 1); @@ -1156,7 +1155,7 @@ public void dispatchCommand(String message){ nativeKey(keyCode, 0, (int) message.charAt(i)); } - //send control sequence start \x01 + //send control sequence end \x02 nativeKey(keyCode, 1, 2); nativeKey(keyCode, 0, 2); @@ -1164,10 +1163,20 @@ public void dispatchCommand(String message){ @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { - // setting inputtype to TYPE_CLASS_TEXT is necessary for swiftkey to enable outAttrs.inputType = inputType; // ask IME to avoid taking full screen on landscape mode outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI; + + // add a listener for the layout chnages to the IME view + final android.view.View activityRootView = mActivity.getWindow().getDecorView(); + activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new android.view.ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + //send control sequence start /x04 == kayboard layout changed + nativeKey(45, 1, 4); + nativeKey(45, 0, 4); + } + }); return new BaseInputConnection(this, false){ private void deleteLastText(){ From db9c2f8c2f0dcb23f4238c5f73146dfd8918b14b Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Fri, 14 Mar 2014 14:59:09 -0500 Subject: [PATCH 03/51] fix service handling --- src/build.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/build.py b/src/build.py index 0915930a02..c330084a9b 100755 --- a/src/build.py +++ b/src/build.py @@ -237,10 +237,10 @@ def make_package(args): # Figure out if application has service part service = False - directory = args.private or args.dir + directory = args.dir if directory: service_main = join(realpath(directory), 'service', 'main.py') - if os.path.exists(service_main): + if os.path.exists(service_main) or os.path.exists(service_main + 'o'): service = True # Check if OUYA support is enabled From 9ab3ee00fd91d1dfbd0bbdc08b3da41321c190ba Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Tue, 8 Apr 2014 16:22:53 +0200 Subject: [PATCH 04/51] sdlsurfaceview: fix npot usage on some device in splashscreen. --- src/src/org/renpy/android/SDLSurfaceView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/src/org/renpy/android/SDLSurfaceView.java b/src/src/org/renpy/android/SDLSurfaceView.java index 3abe930ed7..606eba853b 100644 --- a/src/src/org/renpy/android/SDLSurfaceView.java +++ b/src/src/org/renpy/android/SDLSurfaceView.java @@ -791,15 +791,15 @@ private void waitForStart() { GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureID); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, - GLES20.GL_NEAREST); + GLES20.GL_LINEAR); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, - GLES20.GL_REPEAT); + GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, - GLES20.GL_REPEAT); + GLES20.GL_CLAMP_TO_EDGE); GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); From ec8d54b3844dbeab18dba3f2f23c7bf68045083d Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Sat, 12 Apr 2014 03:03:08 +0200 Subject: [PATCH 05/51] use $CYTHON="cython -t" for all recipes that used cython. This doesnt recompile the file according to the timestamp. --- distribute.sh | 1 + recipes/android/recipe.sh | 2 +- recipes/audiostream/recipe.sh | 2 +- recipes/cymunk/recipe.sh | 2 +- recipes/docutils/recipe.sh | 2 +- recipes/ffmpeg/recipe.sh | 2 +- recipes/kivy/recipe.sh | 2 +- recipes/lxml/recipe.sh | 2 +- recipes/msgpack/recipe.sh | 2 +- recipes/pyjnius/recipe.sh | 2 +- recipes/twisted/recipe.sh | 2 +- 11 files changed, 11 insertions(+), 10 deletions(-) diff --git a/distribute.sh b/distribute.sh index d956dbdebd..7b1506a717 100755 --- a/distribute.sh +++ b/distribute.sh @@ -54,6 +54,7 @@ JNI_PATH="$SRC_PATH/jni" DIST_PATH="$ROOT_PATH/dist/default" SITEPACKAGES_PATH="$BUILD_PATH/python-install/lib/python2.7/site-packages/" HOSTPYTHON="$BUILD_PATH/python-install/bin/python.host" +CYTHON="cython -t" # Tools export LIBLINK_PATH="$BUILD_PATH/objects" diff --git a/recipes/android/recipe.sh b/recipes/android/recipe.sh index b7369476bd..68ae27995a 100644 --- a/recipes/android/recipe.sh +++ b/recipes/android/recipe.sh @@ -36,7 +36,7 @@ function build_android() { export LDSHARED="$LIBLINK" # cythonize - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try $HOSTPYTHON setup.py install -O2 diff --git a/recipes/audiostream/recipe.sh b/recipes/audiostream/recipe.sh index 6f7147de1c..31601da643 100644 --- a/recipes/audiostream/recipe.sh +++ b/recipes/audiostream/recipe.sh @@ -29,7 +29,7 @@ function build_audiostream() { export AUDIOSTREAM_ROOT="$BUILD_audiostream/build/audiostream/armeabi-v7a" try cd $BUILD_audiostream $HOSTPYTHON setup.py build_ext &>/dev/null - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try $HOSTPYTHON setup.py install -O2 try cp -a audiostream/platform/android/org $JAVACLASS_PATH diff --git a/recipes/cymunk/recipe.sh b/recipes/cymunk/recipe.sh index 3f5698c336..2254d16df7 100644 --- a/recipes/cymunk/recipe.sh +++ b/recipes/cymunk/recipe.sh @@ -24,7 +24,7 @@ function build_cymunk() { export LDSHARED="$LIBLINK" - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try find build/lib.* -name "*.o" -exec $STRIP {} \; diff --git a/recipes/docutils/recipe.sh b/recipes/docutils/recipe.sh index 348c2683bd..8f14d86a2b 100755 --- a/recipes/docutils/recipe.sh +++ b/recipes/docutils/recipe.sh @@ -27,7 +27,7 @@ function build_docutils() { # fake try to be able to cythonize generated files $HOSTPYTHON setup.py build_ext - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try $HOSTPYTHON setup.py install -O2 diff --git a/recipes/ffmpeg/recipe.sh b/recipes/ffmpeg/recipe.sh index f9cf19efd8..4278274033 100644 --- a/recipes/ffmpeg/recipe.sh +++ b/recipes/ffmpeg/recipe.sh @@ -39,7 +39,7 @@ function build_ffmpeg() { export LDFLAGS="$LDFLAGS -lm -L$LIBS_PATH" export FFMPEG_ROOT="$BUILD_ffmpeg/build/ffmpeg/armeabi-v7a" try cd $BUILD_ffmpeg/python - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try $HOSTPYTHON setup.py install -O2 diff --git a/recipes/kivy/recipe.sh b/recipes/kivy/recipe.sh index e7f8828dc1..5d8b3638c3 100644 --- a/recipes/kivy/recipe.sh +++ b/recipes/kivy/recipe.sh @@ -27,7 +27,7 @@ function build_kivy() { # fake try to be able to cythonize generated files $HOSTPYTHON setup.py build_ext - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try find build/lib.* -name "*.o" -exec $STRIP {} \; try $HOSTPYTHON setup.py install -O2 diff --git a/recipes/lxml/recipe.sh b/recipes/lxml/recipe.sh index 58ee0ad8d5..172fba54d5 100644 --- a/recipes/lxml/recipe.sh +++ b/recipes/lxml/recipe.sh @@ -30,7 +30,7 @@ function build_lxml() { export PATH=$PATH:$BUILD_libxslt try $HOSTPYTHON setup.py build_ext -I$BUILD_libxml2/include -I$BUILD_libxslt - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try find build/lib.* -name "*.o" -exec $STRIP {} \; diff --git a/recipes/msgpack/recipe.sh b/recipes/msgpack/recipe.sh index 8d60a1e661..255f429d1b 100644 --- a/recipes/msgpack/recipe.sh +++ b/recipes/msgpack/recipe.sh @@ -24,7 +24,7 @@ function build_msgpack() { # fake try to be able to cythonize generated files $HOSTPYTHON setup.py build_ext - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try find build/lib.* -name "*.o" -exec $STRIP {} \; diff --git a/recipes/pyjnius/recipe.sh b/recipes/pyjnius/recipe.sh index bd78e8780d..b64fa0cbfe 100755 --- a/recipes/pyjnius/recipe.sh +++ b/recipes/pyjnius/recipe.sh @@ -27,7 +27,7 @@ function build_pyjnius() { # fake try to be able to cythonize generated files $HOSTPYTHON setup.py build_ext - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try find build/lib.* -name "*.o" -exec $STRIP {} \; try $HOSTPYTHON setup.py install -O2 diff --git a/recipes/twisted/recipe.sh b/recipes/twisted/recipe.sh index 466e24580a..ea553401fc 100644 --- a/recipes/twisted/recipe.sh +++ b/recipes/twisted/recipe.sh @@ -29,7 +29,7 @@ function build_twisted() { # fake try to be able to cythonize generated files $HOSTPYTHON setup.py build_ext - try find . -iname '*.pyx' -exec cython {} \; + try find . -iname '*.pyx' -exec $CYTHON {} \; try $HOSTPYTHON setup.py build_ext -v try find build/lib.* -name "*.o" -exec $STRIP {} \; From b0633e10a668af90d84d6a61b7ee84d685ec5569 Mon Sep 17 00:00:00 2001 From: Kovak Date: Mon, 14 Apr 2014 02:02:22 -0600 Subject: [PATCH 06/51] added recipe for kivent --- recipes/kivent/recipe.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 recipes/kivent/recipe.sh diff --git a/recipes/kivent/recipe.sh b/recipes/kivent/recipe.sh new file mode 100644 index 0000000000..6dfa284202 --- /dev/null +++ b/recipes/kivent/recipe.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +VERSION_kivent=1.0.0 +URL_kivent=https://github.com/Kovak/KivEnt/archive/master.zip +MD5_kivent= +DEPS_kivent=(python cymunk kivy) +BUILD_kivent=$BUILD_PATH/kivent/master/kivent/ +RECIPE_kivent=$RECIPES_PATH/kivent + +function prebuild_kivent() { + true +} + +function build_kivent() { + cd $BUILD_kivent + + push_arm + + export LDSHARED="$LIBLINK" + export PYTHONPATH=$BUILD_kivy/:$PYTHONPATH + export PYTHONPATH=$BUILD_cymunk/cymunk/python:$PYTHONPATH + try find . -iname '__init__.pyx' -exec $CYTHON {} \; + try $BUILD_PATH/python-install/bin/python.host setup.py build_ext -v + try find build/lib.* -name "*.o" -exec $STRIP {} \; + + export PYTHONPATH=$BUILD_hostpython/Lib/site-packages + try $BUILD_hostpython/hostpython setup.py install -O2 --root=$BUILD_PATH/python-install --install-lib=lib/python2.7/site-packages + + unset LDSHARED + pop_arm +} + +function postbuild_kivent() { + true +} From 3514a8127a2973402b55e055c17316db6ce04793 Mon Sep 17 00:00:00 2001 From: Ben Hagen Date: Sun, 27 Apr 2014 23:21:31 +0200 Subject: [PATCH 07/51] heartbleed fix --- recipes/openssl/recipe.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recipes/openssl/recipe.sh b/recipes/openssl/recipe.sh index 808d92a5a4..aeea5c48c1 100644 --- a/recipes/openssl/recipe.sh +++ b/recipes/openssl/recipe.sh @@ -1,9 +1,9 @@ #!/bin/bash -VERSION_openssl=${VERSION_openssl:-1.0.1c} +VERSION_openssl=${VERSION_openssl:-1.0.1g} URL_openssl=http://www.openssl.org/source/openssl-$VERSION_openssl.tar.gz DEPS_openssl=() -MD5_openssl=ae412727c8c15b67880aef7bd2999b2e +MD5_openssl=de62b43dfcd858e66a74bee1c834e959 BUILD_openssl=$BUILD_PATH/openssl/$(get_directory $URL_openssl) RECIPE_openssl=$RECIPES_PATH/openssl From 1dce664c8a5f8105881e201ac3e984ffda828218 Mon Sep 17 00:00:00 2001 From: trivedigaurav Date: Tue, 20 May 2014 00:14:48 -0400 Subject: [PATCH 08/51] Update examples.rst --- docs/source/examples.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/examples.rst b/docs/source/examples.rst index 44be552fea..b89a62e124 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -8,7 +8,8 @@ A good starting point to build an APK are prebuilt VirtualBox images, where the Android NDK, the Android SDK and the Kivy Python-For-Android sources are prebuilt in an VirtualBox image. Please search the `Download Section `__ for -such an image. +such an image. You will also need to create a device filter for the Android +USB device using the VirtualBox OS settings. .. include:: example_helloworld.rst .. include:: example_compass.rst From b19558fa8d395e16137adb21ddd49fbf114e61de Mon Sep 17 00:00:00 2001 From: "anthony.prieur" Date: Mon, 26 May 2014 23:47:08 +0200 Subject: [PATCH 09/51] Added psutil recipe --- .../psutil/patches/psutil-0.6.1-android.patch | 371 ++++++++++++++++++ recipes/psutil/recipe.sh | 47 +++ 2 files changed, 418 insertions(+) create mode 100644 recipes/psutil/patches/psutil-0.6.1-android.patch create mode 100644 recipes/psutil/recipe.sh diff --git a/recipes/psutil/patches/psutil-0.6.1-android.patch b/recipes/psutil/patches/psutil-0.6.1-android.patch new file mode 100644 index 0000000000..7f3c9fbf16 --- /dev/null +++ b/recipes/psutil/patches/psutil-0.6.1-android.patch @@ -0,0 +1,371 @@ +diff -wuprN psutil-0.6.1/psutil/_pslinux.py psutil-0.6.1-new/psutil/_pslinux.py +--- psutil-0.6.1/psutil/_pslinux.py 2012-08-16 17:07:37.000000000 +0200 ++++ psutil-0.6.1-new/psutil/_pslinux.py 2013-09-21 14:20:14.240988106 +0200 +@@ -455,9 +455,9 @@ class Process(object): + f = open("/proc/%s/io" % self.pid) + try: + for line in f: +- if line.startswith("rchar"): ++ if line.startswith("syscr"): + read_count = int(line.split()[1]) +- elif line.startswith("wchar"): ++ elif line.startswith("syscw"): + write_count = int(line.split()[1]) + elif line.startswith("read_bytes"): + read_bytes = int(line.split()[1]) +@@ -588,7 +588,7 @@ class Process(object): + data['Shared_Clean:'], data['Shared_Clean:'], + data['Private_Clean:'], data['Private_Dirty:'], + data['Referenced:'], +- data['Anonymous:'], ++ data.get('Anonymous:', 0), + data['Swap:']) + f.close() + except EnvironmentError: +diff -wuprN psutil-0.6.1/psutil/_psutil_linux.c psutil-0.6.1-new/psutil/_psutil_linux.c +--- psutil-0.6.1/psutil/_psutil_linux.c 2012-08-13 14:26:21.000000000 +0200 ++++ psutil-0.6.1-new/psutil/_psutil_linux.c 2013-09-21 14:15:55.844987989 +0200 +@@ -94,6 +94,151 @@ linux_ioprio_set(PyObject* self, PyObjec + } + #endif + ++/* Prepare to begin reading and/or writing mount table entries from the ++ beginning of FILE. MODE is as for `fopen'. */ ++FILE *setmntent (const char *file, const char *mode) ++{ ++ /* Extend the mode parameter with "c" to disable cancellation in the ++ I/O functions and "e" to set FD_CLOEXEC. */ ++ size_t modelen = strlen (mode); ++ char newmode[modelen + 3]; ++ memcpy (newmode, mode, modelen); ++ memcpy (newmode + modelen, "ce", 3); ++ FILE *result = fopen (file, newmode); ++ ++ return result; ++} ++ ++/* Close a stream opened with `setmntent'. */ ++int endmntent (FILE *stream) ++{ ++ if (stream) /* SunOS 4.x allows for NULL stream */ ++ fclose (stream); ++ return 1; /* SunOS 4.x says to always return 1 */ ++} ++ ++/* Since the values in a line are separated by spaces, a name cannot ++ contain a space. Therefore some programs encode spaces in names ++ by the strings "\040". We undo the encoding when reading an entry. ++ The decoding happens in place. */ ++static char * ++decode_name (char *buf) ++{ ++ char *rp = buf; ++ char *wp = buf; ++ ++ do ++ if (rp[0] == '\\' && rp[1] == '0' && rp[2] == '4' && rp[3] == '0') ++ { ++ /* \040 is a SPACE. */ ++ *wp++ = ' '; ++ rp += 3; ++ } ++ else if (rp[0] == '\\' && rp[1] == '0' && rp[2] == '1' && rp[3] == '1') ++ { ++ /* \011 is a TAB. */ ++ *wp++ = '\t'; ++ rp += 3; ++ } ++ else if (rp[0] == '\\' && rp[1] == '0' && rp[2] == '1' && rp[3] == '2') ++ { ++ /* \012 is a NEWLINE. */ ++ *wp++ = '\n'; ++ rp += 3; ++ } ++ else if (rp[0] == '\\' && rp[1] == '\\') ++ { ++ /* We have to escape \\ to be able to represent all characters. */ ++ *wp++ = '\\'; ++ rp += 1; ++ } ++ else if (rp[0] == '\\' && rp[1] == '1' && rp[2] == '3' && rp[3] == '4') ++ { ++ /* \134 is also \\. */ ++ *wp++ = '\\'; ++ rp += 3; ++ } ++ else ++ *wp++ = *rp; ++ while (*rp++ != '\0'); ++ ++ return buf; ++} ++ ++/* Read one mount table entry from STREAM. Returns a pointer to storage ++ reused on the next call, or null for EOF or error (use feof/ferror to ++ check). */ ++struct mntent *custom_getmntent_r (FILE *stream, struct mntent *mp, char *buffer, int bufsiz) ++{ ++ char *cp; ++ char *head; ++ ++ do ++ { ++ char *end_ptr; ++ ++ if (fgets (buffer, bufsiz, stream) == NULL) ++ { ++ return NULL; ++ } ++ ++ end_ptr = strchr (buffer, '\n'); ++ if (end_ptr != NULL) /* chop newline */ ++ *end_ptr = '\0'; ++ else ++ { ++ /* Not the whole line was read. Do it now but forget it. */ ++ char tmp[1024]; ++ while (fgets (tmp, sizeof tmp, stream) != NULL) ++ if (strchr (tmp, '\n') != NULL) ++ break; ++ } ++ ++ head = buffer + strspn (buffer, " \t"); ++ /* skip empty lines and comment lines: */ ++ } ++ while (head[0] == '\0' || head[0] == '#'); ++ ++ cp = strsep (&head, " \t"); ++ mp->mnt_fsname = cp != NULL ? decode_name (cp) : (char *) ""; ++ if (head) ++ head += strspn (head, " \t"); ++ cp = strsep (&head, " \t"); ++ mp->mnt_dir = cp != NULL ? decode_name (cp) : (char *) ""; ++ if (head) ++ head += strspn (head, " \t"); ++ cp = strsep (&head, " \t"); ++ mp->mnt_type = cp != NULL ? decode_name (cp) : (char *) ""; ++ if (head) ++ head += strspn (head, " \t"); ++ cp = strsep (&head, " \t"); ++ mp->mnt_opts = cp != NULL ? decode_name (cp) : (char *) ""; ++ switch (head ? sscanf (head, " %d %d ", &mp->mnt_freq, &mp->mnt_passno) : 0) ++ { ++ case 0: ++ mp->mnt_freq = 0; ++ case 1: ++ mp->mnt_passno = 0; ++ case 2: ++ break; ++ } ++ ++ return mp; ++} ++ ++struct mntent *getmntent_custom (FILE *stream) ++{ ++ static struct mntent m; ++ static char *getmntent_buffer; ++ ++ #define BUFFER_SIZE 4096 ++ if (getmntent_buffer == NULL) { ++ getmntent_buffer = (char *) malloc (BUFFER_SIZE); ++ } ++ ++ return custom_getmntent_r (stream, &m, getmntent_buffer, BUFFER_SIZE); ++ #undef BUFFER_SIZE ++} + + /* + * Return disk mounted partitions as a list of tuples including device, +@@ -116,9 +261,9 @@ get_disk_partitions(PyObject* self, PyOb + goto error; + } + +- while ((entry = getmntent(file))) { ++ while ((entry = getmntent_custom(file))) { + if (entry == NULL) { +- PyErr_Format(PyExc_RuntimeError, "getmntent() failed"); ++ PyErr_Format(PyExc_RuntimeError, "getmntent_custom() failed"); + goto error; + } + py_tuple = Py_BuildValue("(ssss)", entry->mnt_fsname, // device +@@ -164,6 +309,18 @@ get_sysinfo(PyObject* self, PyObject* ar + } + + ++static int ++sched_setaffinity(pid_t pid, size_t len, cpu_set_t const * cpusetp) ++{ ++ return syscall(__NR_sched_setaffinity, pid, len, cpusetp); ++} ++ ++static int ++sched_getaffinity(pid_t pid, size_t len, cpu_set_t const * cpusetp) ++{ ++ return syscall(__NR_sched_getaffinity, pid, len, cpusetp); ++} ++ + /* + * Return process CPU affinity as a Python long (the bitmask) + */ +diff -wuprN psutil-0.6.1/psutil/_psutil_linux.h psutil-0.6.1-new/psutil/_psutil_linux.h +--- psutil-0.6.1/psutil/_psutil_linux.h 2012-08-13 14:26:21.000000000 +0200 ++++ psutil-0.6.1-new/psutil/_psutil_linux.h 2013-09-21 14:15:55.844987989 +0200 +@@ -10,6 +10,157 @@ + + #include + ++#ifndef MOUNTED ++#define MOUNTED "/proc/mounts" // android ++#endif ++ ++extern int sched_getcpu(void); ++ ++/* Our implementation supports up to 32 independent CPUs, which is also ++ * the maximum supported by the kernel at the moment. GLibc uses 1024 by ++ * default. ++ * ++ * If you want to use more than that, you should use CPU_ALLOC() / CPU_FREE() ++ * and the CPU_XXX_S() macro variants. ++ */ ++#define CPU_SETSIZE 32 ++ ++#define __CPU_BITTYPE unsigned long int /* mandated by the kernel */ ++#define __CPU_BITSHIFT 5 /* should be log2(BITTYPE) */ ++#define __CPU_BITS (1 << __CPU_BITSHIFT) ++#define __CPU_ELT(x) ((x) >> __CPU_BITSHIFT) ++#define __CPU_MASK(x) ((__CPU_BITTYPE)1 << ((x) & (__CPU_BITS-1))) ++ ++typedef struct { ++ __CPU_BITTYPE __bits[ CPU_SETSIZE / __CPU_BITS ]; ++} cpu_set_t; ++ ++/* Provide optimized implementation for 32-bit cpu_set_t */ ++#if CPU_SETSIZE == __CPU_BITS ++ ++# define CPU_ZERO(set_) \ ++ do{ \ ++ (set_)->__bits[0] = 0; \ ++ }while(0) ++ ++# define CPU_SET(cpu_,set_) \ ++ do {\ ++ size_t __cpu = (cpu_); \ ++ if (__cpu < CPU_SETSIZE) \ ++ (set_)->__bits[0] |= __CPU_MASK(__cpu); \ ++ }while (0) ++ ++# define CPU_CLR(cpu_,set_) \ ++ do {\ ++ size_t __cpu = (cpu_); \ ++ if (__cpu < CPU_SETSIZE) \ ++ (set_)->__bits[0] &= ~__CPU_MASK(__cpu); \ ++ }while (0) ++ ++# define CPU_ISSET(cpu_, set_) \ ++ (__extension__({\ ++ size_t __cpu = (cpu_); \ ++ (cpu_ < CPU_SETSIZE) \ ++ ? ((set_)->__bits[0] & __CPU_MASK(__cpu)) != 0 \ ++ : 0; \ ++ })) ++ ++# define CPU_EQUAL(set1_, set2_) \ ++ ((set1_)->__bits[0] == (set2_)->__bits[0]) ++ ++# define __CPU_OP(dst_, set1_, set2_, op_) \ ++ do { \ ++ (dst_)->__bits[0] = (set1_)->__bits[0] op_ (set2_)->__bits[0]; \ ++ } while (0) ++ ++# define CPU_COUNT(set_) __builtin_popcountl((set_)->__bits[0]) ++ ++#else /* CPU_SETSIZE != __CPU_BITS */ ++ ++# define CPU_ZERO(set_) CPU_ZERO_S(sizeof(cpu_set_t), set_) ++# define CPU_SET(cpu_,set_) CPU_SET_S(cpu_,sizeof(cpu_set_t),set_) ++# define CPU_CLR(cpu_,set_) CPU_CLR_S(cpu_,sizeof(cpu_set_t),set_) ++# define CPU_ISSET(cpu_,set_) CPU_ISSET_S(cpu_,sizeof(cpu_set_t),set_) ++# define CPU_COUNT(set_) CPU_COUNT_S(sizeof(cpu_set_t),set_) ++# define CPU_EQUAL(set1_,set2_) CPU_EQUAL_S(sizeof(cpu_set_t),set1_,set2_) ++ ++# define __CPU_OP(dst_,set1_,set2_,op_) __CPU_OP_S(sizeof(cpu_set_t),dst_,set1_,set2_,op_) ++ ++#endif /* CPU_SETSIZE != __CPU_BITS */ ++ ++#define CPU_AND(set1_,set2_) __CPU_OP(set1_,set2_,&) ++#define CPU_OR(set1_,set2_) __CPU_OP(set1_,set2_,|) ++#define CPU_XOR(set1_,set2_) __CPU_OP(set1_,set2_,^) ++ ++/* Support for dynamically-allocated cpu_set_t */ ++ ++#define CPU_ALLOC_SIZE(count) \ ++ __CPU_ELT((count) + (__CPU_BITS-1))*sizeof(__CPU_BITTYPE) ++ ++#define CPU_ALLOC(count) __sched_cpualloc((count)); ++#define CPU_FREE(set) __sched_cpufree((set)) ++ ++extern cpu_set_t* __sched_cpualloc(size_t count); ++extern void __sched_cpufree(cpu_set_t* set); ++ ++#define CPU_ZERO_S(setsize_,set_) \ ++ do { \ ++ size_t __nn = 0; \ ++ size_t __nn_max = (setsize_)/sizeof(__CPU_BITTYPE); \ ++ for (; __nn < __nn_max; __nn++) \ ++ (set_)->__bits[__nn] = 0; \ ++ } while (0) ++ ++#define CPU_SET_S(cpu_,setsize_,set_) \ ++ do { \ ++ size_t __cpu = (cpu_); \ ++ if (__cpu < 8*(setsize_)) \ ++ (set_)->__bits[__CPU_ELT(__cpu)] |= __CPU_MASK(__cpu); \ ++ } while (0) ++ ++#define CPU_CLR_S(cpu_,setsize_,set_) \ ++ do { \ ++ size_t __cpu = (cpu_); \ ++ if (__cpu < 8*(setsize_)) \ ++ (set_)->__bits[__CPU_ELT(__cpu)] &= ~__CPU_MASK(__cpu); \ ++ } while (0) ++ ++#define CPU_ISSET_S(cpu_, setsize_, set_) \ ++ (__extension__ ({ \ ++ size_t __cpu = (cpu_); \ ++ (__cpu < 8*(setsize_)) \ ++ ? ((set_)->__bits[__CPU_ELT(__cpu)] & __CPU_MASK(__cpu)) != 0 \ ++ : 0; \ ++ })) ++ ++#define CPU_EQUAL_S(setsize_, set1_, set2_) \ ++ (__extension__ ({ \ ++ __const __CPU_BITTYPE* __src1 = (set1_)->__bits; \ ++ __const __CPU_BITTYPE* __src2 = (set2_)->__bits; \ ++ size_t __nn = 0, __nn_max = (setsize_)/sizeof(__CPU_BITTYPE); \ ++ for (; __nn < __nn_max; __nn++) { \ ++ if (__src1[__nn] != __src2[__nn]) \ ++ break; \ ++ } \ ++ __nn == __nn_max; \ ++ })) ++ ++#define __CPU_OP_S(setsize_, dstset_, srcset1_, srcset2_, op) \ ++ do { \ ++ cpu_set_t* __dst = (dstset); \ ++ const __CPU_BITTYPE* __src1 = (srcset1)->__bits; \ ++ const __CPU_BITTYPE* __src2 = (srcset2)->__bits; \ ++ size_t __nn = 0, __nn_max = (setsize_)/sizeof(__CPU_BITTYPE); \ ++ for (; __nn < __nn_max; __nn++) \ ++ (__dst)->__bits[__nn] = __src1[__nn] op __src2[__nn]; \ ++ } while (0) ++ ++#define CPU_COUNT_S(setsize_, set_) \ ++ __sched_cpucount((setsize_), (set_)) ++ ++extern int __sched_cpucount(size_t setsize, cpu_set_t* set); ++ ++ + static PyObject* linux_ioprio_get(PyObject* self, PyObject* args); + static PyObject* linux_ioprio_set(PyObject* self, PyObject* args); + static PyObject* get_disk_partitions(PyObject* self, PyObject* args); diff --git a/recipes/psutil/recipe.sh b/recipes/psutil/recipe.sh new file mode 100644 index 0000000000..68e4392de0 --- /dev/null +++ b/recipes/psutil/recipe.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +https://pypi.python.org/packages/source/p/psutil/psutil-0.6.1.tar.gz#md5=93c1420cb3dac091325a80c9c5ed9623 + +VERSION_psutil=${VERSION_psutil:-0.6.1} +DEPS_psutil=(python) +URL_psutil=http://pypi.python.org/packages/source/p/psutil/psutil-$VERSION_psutil.tar.gz +MD5_psutil=93c1420cb3dac091325a80c9c5ed9623 +BUILD_psutil=$BUILD_PATH/psutil/$(get_directory $URL_psutil) +RECIPE_psutil=$RECIPES_PATH/psutil + +# function called for preparing source code if needed +# (you can apply patch etc here.) +function prebuild_psutil() { + cd $BUILD_psutil + + if [ -f .psutil_patched ]; then + # no patch needed + return + fi + + try patch -p1 < $RECIPE_psutil/patches/psutil-$VERSION_psutil-android.patch + + # everything done + touch .psutil_patched +} + +function shouldbuild_psutil() { + if [ -d "$SITEPACKAGES_PATH/psutil" ]; then + DO_BUILD=0 + fi +} + +function build_psutil() { + cd $BUILD_psutil + push_arm + try $HOSTPYTHON setup.py build_ext -v + try find build/lib.* -name "*.o" -exec $STRIP {} \; + try $HOSTPYTHON setup.py install -O2 + pop_arm +} + +# function called after all the compile have been done +function postbuild_psutil() { + true +} + From 612ae26958f4a9d181e93e55c13c4bd7e3685780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Sj=C3=B6str=C3=B6m?= Date: Thu, 29 May 2014 00:13:55 +0200 Subject: [PATCH 10/51] Changed a tiny grammatical error --- docs/source/example_helloworld.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/example_helloworld.rst b/docs/source/example_helloworld.rst index a63d5b49fb..d90a2e3944 100644 --- a/docs/source/example_helloworld.rst +++ b/docs/source/example_helloworld.rst @@ -43,7 +43,7 @@ Let's create a simple Hello world application, with one Label and one Button. class HelloWorldScreen(GridLayout): counter = NumericProperty(0) def my_callback(self): - print 'The button have been pushed' + print 'The button has been pushed' self.counter += 1 class HelloWorldApp(App): From 8889330864312f7383b62f8c3ce1ec00c8f11334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Sj=C3=B6str=C3=B6m?= Date: Thu, 29 May 2014 00:19:09 +0200 Subject: [PATCH 11/51] Fixed a tiny misspelling. recommand -> recommend --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index fdb3d12641..3210ef2f54 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -20,7 +20,7 @@ You can include other modules (or "recipes") to compile using `-m`:: You can also specify a specific version for each package. Please note that the compilation might **break** if you don't use the default version. Most recipes have patch to fixes android issues, and might not apply if you specify a -version. We also recommand to clean build/ before changing version.:: +version. We also recommend to clean build/ before changing version.:: ./distribute.sh -m "openssl kivy==master" From db5a7bbe00382a123d0931ed642883ff48b51ec8 Mon Sep 17 00:00:00 2001 From: Bill Janssen Date: Tue, 3 Jun 2014 10:15:06 -0700 Subject: [PATCH 12/51] fix pycrypto recipe; add recipe for apsw --- recipes/apsw/recipe.sh | 95 +++++++++++++++++++++++ recipes/pycrypto/patches/add_length.patch | 11 +++ recipes/pycrypto/recipe.sh | 17 +++- 3 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 recipes/apsw/recipe.sh create mode 100644 recipes/pycrypto/patches/add_length.patch diff --git a/recipes/apsw/recipe.sh b/recipes/apsw/recipe.sh new file mode 100644 index 0000000000..f2cb60f4a5 --- /dev/null +++ b/recipes/apsw/recipe.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +# version of your package +VERSION_apsw=${VERSION_apsw:-3.8.4.1-r1} + +# dependencies of this recipe +DEPS_apsw=(python) + +# url of the package +URL_apsw=https://github.com/rogerbinns/apsw/releases/download/3.8.4.1-r1/apsw-3.8.4.1-r1.zip + +# md5 of the package +MD5_apsw=5ad3098489576929b90f4215eb5b2621 + +# default build path +BUILD_apsw=$BUILD_PATH/apsw/$(get_directory $URL_apsw) + +# default recipe path +RECIPE_apsw=$RECIPES_PATH/apsw + +# function called for preparing source code if needed +# (you can apply patch etc here.) +function prebuild_apsw() { + + # fetch sqlite if necessary + cd ${BUILD_apsw} + if [ ! -d ${BUILD_apsw}/sqlite3 ]; then + echo "fetching sqlite..." + # using /usr/bin/python for this + python setup.py fetch --sqlite --version=3.8.4.1 --missing-checksum-ok + fi + + # apsw insists on configuring sqlite, but it's for the host, not the target. + # So, put in the correct values. + + cat >sqlite3/sqlite3config.h <setup.py + + # build python extension + export LDFLAGS="$LDFLAGS -L$LIBS_PATH" + export LDSHARED="$LIBLINK" + + echo "building apsw in `pwd`..." + # now we can build; enable the FTS4 sqlite extension for full-text search + try ${HOSTPYTHON} setup.py build --enable=fts4 + echo "installing apsw..." + try ${HOSTPYTHON} setup.py install + echo "done with apsw." + + pop_arm +} + +# function called after all the compile have been done +function postbuild_apsw() { + echo "apsw built" +} diff --git a/recipes/pycrypto/patches/add_length.patch b/recipes/pycrypto/patches/add_length.patch new file mode 100644 index 0000000000..7bb9299692 --- /dev/null +++ b/recipes/pycrypto/patches/add_length.patch @@ -0,0 +1,11 @@ +--- pycrypto-2.6.1/src/hash_SHA2_template.c.orig 2013-10-14 14:38:10.000000000 -0700 ++++ pycrypto-2.6.1/src/hash_SHA2_template.c 2014-05-19 10:15:51.000000000 -0700 +@@ -87,7 +87,7 @@ + * return 1 on success + * return 0 if the length overflows + */ +-int add_length(hash_state *hs, sha2_word_t inc) { ++static int add_length(hash_state *hs, sha2_word_t inc) { + sha2_word_t overflow_detector; + overflow_detector = hs->length_lower; + hs->length_lower += inc; diff --git a/recipes/pycrypto/recipe.sh b/recipes/pycrypto/recipe.sh index cbe7100685..e80136d47d 100644 --- a/recipes/pycrypto/recipe.sh +++ b/recipes/pycrypto/recipe.sh @@ -1,14 +1,25 @@ #!/bin/bash -VERSION_pycrypto=${VERSION_pycrypto:-2.5} +VERSION_pycrypto=${VERSION_pycrypto:-2.6.1} URL_pycrypto=http://pypi.python.org/packages/source/p/pycrypto/pycrypto-$VERSION_pycrypto.tar.gz DEPS_pycrypto=(openssl python) -MD5_pycrypto=783e45d4a1a309e03ab378b00f97b291 +MD5_pycrypto=55a61a054aa66812daf5161a0d5d7eda BUILD_pycrypto=$BUILD_PATH/pycrypto/$(get_directory $URL_pycrypto) RECIPE_pycrypto=$RECIPES_PATH/pycrypto function prebuild_pycrypto() { - true + cd $BUILD_pycrypto + + # check marker in our source build + if [ -f .patched ]; then + # no patch needed + return + fi + + try patch -p1 < $RECIPE_pycrypto/patches/add_length.patch + + # everything done, touch the marker ! + touch .patched } function shouldbuild_pycrypto() { From 08b959e10070194db487e2e3a8a5e4920e7909a6 Mon Sep 17 00:00:00 2001 From: Knapp Date: Wed, 18 Jun 2014 11:56:22 +0900 Subject: [PATCH 13/51] changed script to work with env variable. --- src/build.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/build.py b/src/build.py index 19cbcfa757..6a126eb386 100755 --- a/src/build.py +++ b/src/build.py @@ -266,9 +266,6 @@ def make_package(args): 'GAME or APP') sys.exit(-1) - # Get target android API - android_api = int(os.environ.get('ANDROIDAPI', '8')) - # Render the various templates into control files. render( 'AndroidManifest.tmpl.xml', @@ -278,7 +275,7 @@ def make_package(args): url_scheme=url_scheme, intent_filters=intent_filters, manifest_extra=manifest_extra, - android_api=android_api) + ) render( 'Configuration.tmpl.java', @@ -302,7 +299,7 @@ def make_package(args): # Update the project to a recent version. try: subprocess.call([ANDROID, 'update', 'project', '-p', '.', '-t', - 'android-{}'.format(android_api)]) + 'android-{}'.format(args['sdk_version'])]) except (OSError, IOError): print 'An error occured while calling', ANDROID, 'update' print 'Your PATH must include android tools.' @@ -360,6 +357,9 @@ def make_package(args): if __name__ == '__main__': import argparse + # get default SDK version from environment + android_api = os.environ.get('ANDROIDAPI', 8) + ap = argparse.ArgumentParser(description='''\ Package a Python application for Android. @@ -437,9 +437,9 @@ def make_package(args): default=join(curdir, 'whitelist.txt'), help=('Use a whitelist file to prevent blacklisting of ' 'file in the final APK')) - ap.add_argument('--sdk', dest='sdk_version', default='8', + ap.add_argument('--sdk', dest='sdk_version', default=android_api, help='Android SDK version to use. Default to 8') - ap.add_argument('--minsdk', dest='min_sdk_version', default='8', + ap.add_argument('--minsdk', dest='min_sdk_version', default=android_api, help='Minimum Android SDK version to use. Default to 8') ap.add_argument('--window', dest='window', action='store_true', help='Indicate if the application will be windowed') From aa38c6b99544439dfe08792477341f01d4d116ea Mon Sep 17 00:00:00 2001 From: Knapp Date: Wed, 18 Jun 2014 12:11:06 +0900 Subject: [PATCH 14/51] use shell as default for argparse. modified template to not use android_api at all. --- src/build.py | 2 +- src/templates/AndroidManifest.tmpl.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/build.py b/src/build.py index 6a126eb386..dfc1692d33 100755 --- a/src/build.py +++ b/src/build.py @@ -299,7 +299,7 @@ def make_package(args): # Update the project to a recent version. try: subprocess.call([ANDROID, 'update', 'project', '-p', '.', '-t', - 'android-{}'.format(args['sdk_version'])]) + 'android-{}'.format(args.sdk_version)]) except (OSError, IOError): print 'An error occured while calling', ANDROID, 'update' print 'Your PATH must include android tools.' diff --git a/src/templates/AndroidManifest.tmpl.xml b/src/templates/AndroidManifest.tmpl.xml index db116ae9e5..050a7d2308 100644 --- a/src/templates/AndroidManifest.tmpl.xml +++ b/src/templates/AndroidManifest.tmpl.xml @@ -11,7 +11,7 @@ android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" - {% if android_api >= 9 %} + {% if args.min_sdk_version >= 9 %} android:xlargeScreens="true" {% endif %} /> @@ -29,7 +29,7 @@ Date: Thu, 19 Jun 2014 17:43:08 +0200 Subject: [PATCH 15/51] android: fix broadcast context --- recipes/android/src/android/broadcast.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/recipes/android/src/android/broadcast.py b/recipes/android/src/android/broadcast.py index 452efbc0e3..6cab7ed05c 100644 --- a/recipes/android/src/android/broadcast.py +++ b/recipes/android/src/android/broadcast.py @@ -39,7 +39,6 @@ def _expand_partial_name(partial_name): resolved_categories = [_expand_partial_name(x) for x in categories or []] # resolve android API - PythonActivity = autoclass('org.renpy.android.PythonActivity') GenericBroadcastReceiver = autoclass('org.renpy.android.GenericBroadcastReceiver') IntentFilter = autoclass('android.content.IntentFilter') HandlerThread = autoclass('android.os.HandlerThread') @@ -48,7 +47,6 @@ def _expand_partial_name(partial_name): self.handlerthread = HandlerThread('handlerthread') # create a listener - self.context = PythonActivity.mActivity self.listener = BroadcastReceiver.Callback(self.callback) self.receiver = GenericBroadcastReceiver(self.listener) self.receiver_filter = IntentFilter() @@ -68,4 +66,12 @@ def stop(self): self.context.unregisterReceiver(self.receiver) self.handlerthread.quit() + @property + def context(self): + from os import environ + if 'PYTHON_SERVICE_ARGUMENT' in environ: + PythonService = autoclass('org.renpy.android.PythonService') + return PythonService.mService + PythonActivity = autoclass('org.renpy.android.PythonActivity') + return PythonActivity.mActivity From 162edb2e1f5be3ff60f08ffb650e1e9f537b64eb Mon Sep 17 00:00:00 2001 From: Chozabu Date: Thu, 3 Jul 2014 13:54:15 +0100 Subject: [PATCH 16/51] added polygon recipe --- recipes/polygon/recipe.sh | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 recipes/polygon/recipe.sh diff --git a/recipes/polygon/recipe.sh b/recipes/polygon/recipe.sh new file mode 100644 index 0000000000..7d544d8809 --- /dev/null +++ b/recipes/polygon/recipe.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +URL_polygon=https://bitbucket.org/jraedler/polygon2/get/ec07628ee633.zip +DEPS_polygon=(python) +MD5_polygon= +BUILD_polygon=$BUILD_PATH/polygon/$(get_directory $URL_polygon) +RECIPE_polygon=$RECIPES_PATH/polygon + +function prebuild_polygon() { + true +} + +function shouldbuild_polygon() { + if [ -d "$SITEPACKAGES_PATH/polygon" ]; then + DO_BUILD=0 + fi +} + +function build_polygon() { + cd $BUILD_polygon + echo "helllooo" + push_arm + + export LDSHARED="$LIBLINK" + + try find . -iname '*.pyx' -exec $CYTHON {} \; + try $HOSTPYTHON setup.py build_ext -v + try find build/lib.* -name "*.o" -exec $STRIP {} \; + + export PYTHONPATH=$BUILD_hostpython/Lib/site-packages + echo $BUILD_hostpython/hostpython + try $BUILD_hostpython/hostpython setup.py install -O2 --root=$BUILD_PATH/python-install --install-lib=lib/python2.7/site-packages + + unset LDSHARED + pop_arm +} + +function postbuild_polygon() { + true +} From 71af4d88eed418b9d08bdbfd0ee84917a61f3abc Mon Sep 17 00:00:00 2001 From: trivedigaurav Date: Tue, 15 Jul 2014 13:47:03 -0400 Subject: [PATCH 17/51] Fix spelling --- distribute.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribute.sh b/distribute.sh index 7b1506a717..e33404e4ed 100755 --- a/distribute.sh +++ b/distribute.sh @@ -147,7 +147,7 @@ function get_directory() { } function push_arm() { - info "Entering in ARM enviromnent" + info "Entering in ARM environment" # save for pop export OLD_PATH=$PATH From 6f37a924df5ec2395eca6635837c16cc8aab078d Mon Sep 17 00:00:00 2001 From: lfdversluis Date: Wed, 16 Jul 2014 11:19:19 +0200 Subject: [PATCH 18/51] added libswift recipe --- recipes/libswift/recipe.sh | 51 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 recipes/libswift/recipe.sh diff --git a/recipes/libswift/recipe.sh b/recipes/libswift/recipe.sh new file mode 100644 index 0000000000..694f86243e --- /dev/null +++ b/recipes/libswift/recipe.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +#TODO get a release version if possible +VERSION_libswift= +DEPS_libswift=() +#TODO get a version specific URL and update the md5sum +#URL_libswift=https://github.com/whirm/tgs-android/archive/master.zip +#MD5_libswift=23ce86e2bd4d213fdcf1d8c5c37a979a +URL_libswift=https://nodeload.github.com/triblerteam/libswift/zip/4123e6579309cd65a5ba3800e0b674f348c62bfb +FILENAME_libswift=4123e6579309cd65a5ba3800e0b674f348c62bfb +EXTRACT_libswift=$BUILD_PATH/libswift/libswift-$FILENAME_libswift +BUILD_libswift=$BUILD_PATH/libswift/libswift +RECIPE_libswift=$RECIPES_PATH/libswift + +function prebuild_libswift() { + true +} + +function build_libswift() { + if [ ! -d "$BUILD_libswift" ]; then + cd $BUILD_PATH/libswift + mkdir -p libswift + unzip $PACKAGES_PATH/$FILENAME_libswift + rm -Rf libswift/jni + mv $EXTRACT_libswift libswift/jni + fi + cd $BUILD_libswift + mkdir -p libs + + if [ -f "$BUILD_PATH/libs/libevent.so" ]; then + #return + true + fi + + push_arm + + #FIXME get it so you don't have to download the jni module manually + export LDFLAGS=$LIBLINK + try ndk-build -C $BUILD_libswift/jni + unset LDFLAGS + + #TODO find out why it's libevent.so and not libswift.so + try cp -a $BUILD_libswift/libs/$ARCH/*.so $LIBS_PATH + + pop_arm +} + +function postbuild_libswift() { + true +} + From ae125f3f3e81ce0abf675a271a5921eb08fbb2cb Mon Sep 17 00:00:00 2001 From: lfdversluis Date: Wed, 16 Jul 2014 11:19:37 +0200 Subject: [PATCH 19/51] Added M2Crypto recipe --- recipes/m2crypto/recipe.sh | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 recipes/m2crypto/recipe.sh diff --git a/recipes/m2crypto/recipe.sh b/recipes/m2crypto/recipe.sh new file mode 100644 index 0000000000..6f4f7df95b --- /dev/null +++ b/recipes/m2crypto/recipe.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +VERSION_m2crypto=0.21.1 +DEPS_m2crypto=(openssl hostpython python) +URL_m2crypto=http://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-$VERSION_m2crypto.tar.gz +MD5_m2crypto=f93d8462ff7646397a9f77a2fe602d17 +BUILD_m2crypto=$BUILD_PATH/m2crypto/$(get_directory $URL_m2crypto) +RECIPE_m2crypto=$RECIPES_PATH/m2crypto + +function prebuild_m2crypto() { + true +} + +function build_m2crypto() { + cd $BUILD_m2crypto + + if [ -d "$BUILD_PATH/python-install/lib/python2.7/site-packages/m2crypto" ]; then + #return + true + fi + push_arm + + # build python extension + export CFLAGS="$CFLAGS -I$BUILD_PATH/python-install/include/python2.7" + export LDSHARED=$LIBLINK + export PYTHONPATH=$BUILD_PATH/python-install/lib/python2.7/site-packages + + try $BUILD_hostpython/hostpython setup.py build_ext --openssl=$BUILD_openssl --library-dirs=$BUILD_openssl + + unset LDSHARED + + try $BUILD_hostpython/hostpython setup.py install -O2 --prefix $BUILD_PATH/python-install + + pop_arm +} + +function postbuild_m2crypto() { + true +} From 09c73e097379c5a75c8885133c2616bd7d6afb29 Mon Sep 17 00:00:00 2001 From: lfdversluis Date: Wed, 16 Jul 2014 11:19:57 +0200 Subject: [PATCH 20/51] added Netifaces recipe --- recipes/netifaces/recipe.sh | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 recipes/netifaces/recipe.sh diff --git a/recipes/netifaces/recipe.sh b/recipes/netifaces/recipe.sh new file mode 100644 index 0000000000..2d5bf27eb0 --- /dev/null +++ b/recipes/netifaces/recipe.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +VERSION_netifaces=0.10.3 +DEPS_netifaces=(hostpython python setuptools) +URL_netifaces=http://pypi.python.org/packages/source/n/netifaces/netifaces-$VERSION_netifaces.tar.gz +MD5_netifaces=b96913473e1dcc3c4a7c43bc15d10e26 +BUILD_netifaces=$BUILD_PATH/netifaces/$(get_directory $URL_netifaces) +RECIPE_netifaces=$RECIPES_PATH/netifaces + +function prebuild_netifaces() { + true +} + +function build_netifaces() { + cd $BUILD_netifaces + + #FIXME it actually builds an egg + if [ -d "$BUILD_PATH/python-install/lib/python2.7/site-packages/netifaces" ]; then + #return + true + fi + push_arm + + # build python extension + export CFLAGS="$CFLAGS -I$BUILD_PATH/python-install/include/python2.7" + export LDSHARED=$LIBLINK + export PYTHONPATH=$BUILD_PATH/python-install/lib/python2.7/site-packages + + # resulting .so is empty but .o will be collected into libpymodules.so in final distribute.sh step + try $BUILD_hostpython/hostpython setup.py build_ext + + unset LDSHARED + + try $BUILD_hostpython/hostpython setup.py install -O2 --prefix $BUILD_PATH/python-install + + pop_arm +} + +function postbuild_netifaces() { + true +} From 68a6d6c2509a6f841c65104a2e7fd27361fb4bda Mon Sep 17 00:00:00 2001 From: lfdversluis Date: Wed, 16 Jul 2014 11:20:08 +0200 Subject: [PATCH 21/51] added swift recipe --- recipes/swift/extra/Android.mk | 21 ++++++++++++++ recipes/swift/recipe.sh | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 recipes/swift/extra/Android.mk create mode 100644 recipes/swift/recipe.sh diff --git a/recipes/swift/extra/Android.mk b/recipes/swift/extra/Android.mk new file mode 100644 index 0000000000..c89fd4830a --- /dev/null +++ b/recipes/swift/extra/Android.mk @@ -0,0 +1,21 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libevent2 + +LOCAL_SRC_FILES := libevent2/lib/libevent.a +LOCAL_EXPORT_C_INCLUDES := libevent2/include +LOCAL_C_INCLUDES := libevent2/include + +include $(PREBUILT_STATIC_LIBRARY) + +LOCAL_MODULE := swift +LOCAL_SRC_FILES := swift.cpp sha1.cpp compat.cpp sendrecv.cpp send_control.cpp hashtree.cpp bin.cpp binmap.cpp binheap.cpp channel.cpp transfer.cpp httpgw.cpp statsgw.cpp cmdgw.cpp avgspeed.cpp availability.cpp + +LOCAL_CFLAGS += -D__NEW__ + +LOCAL_STATIC_LIBRARIES := libevent2 + +#include $(BUILD_SHARED_LIBRARY) +include $(BUILD_EXECUTABLE) diff --git a/recipes/swift/recipe.sh b/recipes/swift/recipe.sh new file mode 100644 index 0000000000..f6cfa631af --- /dev/null +++ b/recipes/swift/recipe.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +#TODO get a release version if possible +VERSION_swift= +DEPS_swift=() +URL_swift=https://nodeload.github.com/triblerteam/libswift/zip/4123e6579309cd65a5ba3800e0b674f348c62bfb +MD5_swift=99cf78ea0b4aeb23a2439dd886f00f8f +FILENAME_swift=4123e6579309cd65a5ba3800e0b674f348c62bfb +EXTRACT_swift=$BUILD_PATH/swift/libswift-$FILENAME_swift +BUILD_swift=$BUILD_PATH/swift/swift +RECIPE_swift=$RECIPES_PATH/swift + +function prebuild_swift() { + true +} + +function build_swift() { + if [ ! -d "$BUILD_swift" ]; then + cd $BUILD_PATH/swift + mkdir -p swift + unzip $PACKAGES_PATH/$FILENAME_swift + rm -Rf swift/jni + mv $EXTRACT_swift swift/jni + + # Use differend Android.mk to create a binary instead of a library + cp $RECIPE_swift/extra/Android.mk swift/jni/Android.mk + fi + + cd $BUILD_swift + mkdir -p libs + + if [ -f "$BUILD_PATH/libs/swift" ]; then + #return + true + fi + + push_arm + + #FIXME get it so you don't have to download the jni module manually + export LDFLAGS=$LIBLINK + try ndk-build -C $BUILD_swift/jni + unset LDFLAGS + + #TODO find out why it's libevent.so and not libswift.so + try cp -a $BUILD_swift/libs/$ARCH/libevent $LIBS_PATH/swift + + pop_arm +} + +function postbuild_swift() { + true +} + From 5a56c8c9dd372c168c8fa6be9495627853bfdfe6 Mon Sep 17 00:00:00 2001 From: lfdversluis Date: Wed, 16 Jul 2014 11:20:33 +0200 Subject: [PATCH 22/51] Updated twisted to 14.0.0 --- recipes/twisted/recipe.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/recipes/twisted/recipe.sh b/recipes/twisted/recipe.sh index ea553401fc..19ae794116 100644 --- a/recipes/twisted/recipe.sh +++ b/recipes/twisted/recipe.sh @@ -1,14 +1,16 @@ #!/bin/bash -VERSION_twisted=${VERSION_twisted:-11.1} +VERSION_twisted=${VERSION_twisted:-14.0} URL_twisted=http://twistedmatrix.com/Releases/Twisted/$VERSION_twisted/Twisted-$VERSION_twisted.0.tar.bz2 + DEPS_twisted=(zope) -MD5_twisted= +MD5_twisted=9625c094e0a18da77faa4627b98c9815 BUILD_twisted=$BUILD_PATH/twisted/$(get_directory $URL_twisted) RECIPE_twisted=$RECIPES_PATH/twisted function prebuild_twisted() { - true + echo "tty.pyo" >> "${BUILD_PATH}/whitelist.txt" + echo "termios.so" >> "${BUILD_PATH}/whitelist.txt" } function shouldbuild_twisted() { @@ -25,7 +27,7 @@ function build_twisted() { export LDFLAGS="$LDFLAGS -L$LIBS_PATH" export LDSHARED="$LIBLINK" - export PYTHONPATH=$BUILD_hostpython/Lib/site-packages + export PYTHONPATH=$BUILD_hostpython/Lib/site-packages:$BUILD_hostpython/build/lib.linux-x86_64-2.7 # fake try to be able to cythonize generated files $HOSTPYTHON setup.py build_ext From 19aa462701a1ec459d777dc97d7a838199bce61c Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Fri, 1 Aug 2014 13:05:20 -0500 Subject: [PATCH 23/51] skip biglink for jb 4.3 --- distribute.sh | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/distribute.sh b/distribute.sh index e33404e4ed..421389dbd3 100755 --- a/distribute.sh +++ b/distribute.sh @@ -63,6 +63,8 @@ export BIGLINK="$ROOT_PATH/src/tools/biglink" export PIP=$PIP_NAME export VIRTUALENV=$VIRTUALENV_NAME +JELLYBEAN=0 + MD5SUM=$(which md5sum) if [ "X$MD5SUM" == "X" ]; then MD5SUM=$(which md5) @@ -218,6 +220,10 @@ function push_arm() { export STRIP="$TOOLCHAIN_PREFIX-strip --strip-unneeded" export MAKE="make -j5" + if [ "$JELLYBEAN" == "1" ]; then + export LIBLINK="$CC -shared $LDFLAGS" + fi + # Use ccache ? which ccache &>/dev/null if [ $? -eq 0 ]; then @@ -248,6 +254,7 @@ function usage() { echo echo " -d directory Name of the distribution directory" echo " -h Show this help" + echo " -j Create distribution for JB 4.3+" echo " -l Show a list of available modules" echo " -m 'mod1 mod2' Modules to include" echo " -f Restart from scratch (remove the current build)" @@ -345,6 +352,10 @@ function run_prepare() { fi done + if [ "$JELLYBEAN" == "1" ]; then + info "Distribution for Jelly Bean (4.3) or higher; biglink will be skipped" + fi + info "Distribution will be located at $DIST_PATH" if [ -e "$DIST_PATH" ]; then error "The distribution $DIST_PATH already exist" @@ -760,7 +771,10 @@ function run_distribute() { debug "Fill private directory" try cp -a python-install/lib private/ try mkdir -p private/include/python2.7 - try mv libs/$ARCH/libpymodules.so private/ + + if [ "$JELLYBEAN" == "0" ]; then + try mv libs/$ARCH/libpymodules.so private/ + fi try cp python-install/include/python2.7/pyconfig.h private/include/python2.7/ debug "Reduce private directory from unwanted files" @@ -786,9 +800,11 @@ function run_distribute() { } function run_biglink() { - push_arm - try $BIGLINK $LIBS_PATH/libpymodules.so $LIBLINK_PATH - pop_arm + if [ "$JELLYBEAN" == "0" ]; then + push_arm + try $BIGLINK $LIBS_PATH/libpymodules.so $LIBLINK_PATH + pop_arm + fi } function run() { @@ -829,11 +845,14 @@ function arm_deduplicate() { # Do the build -while getopts ":hvlfxm:u:d:s" opt; do +while getopts ":hjvlfxm:u:d:s" opt; do case $opt in h) usage ;; + j) + JELLYBEAN=1 + ;; l) list_modules ;; From 22afe4cb5eabfca8bc12da758abc3b04c8a45c37 Mon Sep 17 00:00:00 2001 From: Mariogrip Date: Sat, 2 Aug 2014 23:14:45 +0200 Subject: [PATCH 24/51] Add LinuxMint Adding LinuxMint. LinuxMint is the same as Ubuntu anyway... --- distribute.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribute.sh b/distribute.sh index e33404e4ed..917fc5902d 100755 --- a/distribute.sh +++ b/distribute.sh @@ -280,7 +280,7 @@ function check_build_deps() { DIST=$(lsb_release -is) info "Check build dependencies for $DIST" case $DIST in - Debian|Ubuntu) + Debian|Ubuntu|LinuxMint) check_pkg_deb_installed "build-essential zlib1g-dev cython" ;; *) From 7606331eb89b99ed3a4894d93113c31554a937eb Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Mon, 18 Aug 2014 13:06:21 -0500 Subject: [PATCH 25/51] add libcopy for jb 4.3 --- distribute.sh | 21 +++++--- src/tools/biglink-jb | 111 +++++++++++++++++++++++++++++++++++++++++++ src/tools/liblink-jb | 43 +++++++++++++++++ 3 files changed, 168 insertions(+), 7 deletions(-) create mode 100755 src/tools/biglink-jb create mode 100755 src/tools/liblink-jb diff --git a/distribute.sh b/distribute.sh index 421389dbd3..f9924e9a25 100755 --- a/distribute.sh +++ b/distribute.sh @@ -63,7 +63,7 @@ export BIGLINK="$ROOT_PATH/src/tools/biglink" export PIP=$PIP_NAME export VIRTUALENV=$VIRTUALENV_NAME -JELLYBEAN=0 +export JELLYBEAN=0 MD5SUM=$(which md5sum) if [ "X$MD5SUM" == "X" ]; then @@ -219,10 +219,11 @@ function push_arm() { export LD="$TOOLCHAIN_PREFIX-ld" export STRIP="$TOOLCHAIN_PREFIX-strip --strip-unneeded" export MAKE="make -j5" + export READELF="$TOOLCHAIN_PREFIX-readelf" - if [ "$JELLYBEAN" == "1" ]; then - export LIBLINK="$CC -shared $LDFLAGS" - fi + #if [ "$JELLYBEAN" == "1" ]; then + # export LIBLINK="$CC -shared $LDFLAGS" + #fi # Use ccache ? which ccache &>/dev/null @@ -772,7 +773,9 @@ function run_distribute() { try cp -a python-install/lib private/ try mkdir -p private/include/python2.7 - if [ "$JELLYBEAN" == "0" ]; then + if [ "$JELLYBEAN" == "1" ]; then + try sh -c "cat libs/$ARCH/copylibs | xargs -d'\n' cp -t private/" + else try mv libs/$ARCH/libpymodules.so private/ fi try cp python-install/include/python2.7/pyconfig.h private/include/python2.7/ @@ -800,11 +803,13 @@ function run_distribute() { } function run_biglink() { + push_arm if [ "$JELLYBEAN" == "0" ]; then - push_arm try $BIGLINK $LIBS_PATH/libpymodules.so $LIBLINK_PATH - pop_arm + else + try $BIGLINK $LIBS_PATH/copylibs $LIBLINK_PATH fi + pop_arm } function run() { @@ -852,6 +857,8 @@ while getopts ":hjvlfxm:u:d:s" opt; do ;; j) JELLYBEAN=1 + LIBLINK=${LIBLINK}-jb + BIGLINK=${BIGLINK}-jb ;; l) list_modules diff --git a/src/tools/biglink-jb b/src/tools/biglink-jb new file mode 100755 index 0000000000..e7b9609424 --- /dev/null +++ b/src/tools/biglink-jb @@ -0,0 +1,111 @@ +#!/usr/bin/env python + +from __future__ import print_function +import os +import sys +import subprocess +import re + +re_needso = re.compile(r'^.*\(NEEDED\)\s+Shared library: \[lib(.*)\.so\]\s*$') + +blacklist_libs = ( + 'c', + 'stdc++', + 'dl', + 'python2.7', + 'sdl', + 'sdl_image', + 'sdl_ttf', + 'z', + 'm', + 'GLESv2', + 'jpeg', + 'png', + 'log', +) + +found_libs = [] +sofiles = [ ] + +for directory in sys.argv[2:]: + + for fn in os.listdir(directory): + fn = os.path.join(directory, fn) + + if not fn.endswith(".libs"): + continue + + dirfn = fn[:-1] + 'dirs' + if not os.path.exists(dirfn): + continue + + with open(fn) as f: + needed_libs = [lib for lib in {ln.strip() for ln in f} if lib not in blacklist_libs and lib not in found_libs] + + while needed_libs: + print('need libs:\n\t' + '\n\t'.join(needed_libs)) + + start_needed_libs = needed_libs[:] + found_sofiles = [] + + with open(dirfn) as f: + for libdir in f: + if not needed_libs: + break + + libdir = libdir.strip() + print('scanning %s' % libdir) + for lib in needed_libs[:]: + if lib in found_libs: + continue + + if lib.endswith('.a'): + needed_libs.remove(lib) + found_libs.append(lib) + continue + + lib_a = 'lib' + lib + '.a' + libpath_a = os.path.join(libdir, lib_a) + lib_so = 'lib' + lib + '.so' + libpath_so = os.path.join(libdir, lib_so) + plain_so = lib + '.so' + plainpath_so = os.path.join(libdir, plain_so) + + sopath = None + if os.path.exists(libpath_so): + sopath = libpath_so + elif os.path.exists(plainpath_so): + sopath = plainpath_so + + if sopath: + print('found %s in %s' % (lib, libdir)) + found_sofiles.append(sopath) + needed_libs.remove(lib) + found_libs.append(lib) + continue + + if os.path.exists(libpath_a): + print('found %s (static) in %s' % (lib, libdir)) + needed_libs.remove(lib) + found_libs.append(lib) + continue + + for sofile in found_sofiles: + print('scanning dependencies for %s' % sofile) + out = subprocess.check_output([os.environ['READELF'], '-d', sofile]) + for line in out.splitlines(): + needso = re_needso.match(line) + if needso: + lib = needso.group(1) + if lib not in needed_libs and lib not in found_libs and lib not in blacklist_libs: + needed_libs.append(needso.group(1)) + + sofiles += found_sofiles + + if needed_libs == start_needed_libs: + raise RuntimeError('Failed to located needed libraries!\n\t' + '\n\t'.join(needed_libs)) + +output = sys.argv[1] + +with open(output, 'w') as f: + f.write('\n'.join(sofiles)) diff --git a/src/tools/liblink-jb b/src/tools/liblink-jb new file mode 100755 index 0000000000..46dc1ca325 --- /dev/null +++ b/src/tools/liblink-jb @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +from __future__ import print_function +import sys +import subprocess +from os import environ +from os.path import basename, join + +libs = [ ] +libdirs = [ ] +output = None + + +i = 1 +while i < len(sys.argv): + opt = sys.argv[i] + i += 1 + + if opt == "-o": + output = sys.argv[i] + i ++ 1 + continue + + if opt.startswith("-l"): + libs.append(opt[2:]) + continue + + if opt.startswith("-L"): + libdirs.append(opt[2:]) + continue + +output = join(environ.get('LIBLINK_PATH'), basename(output)) + +with open(output + ".libs", "w") as f: + f.write("\n".join(libs)) + +with open(output + ".libdirs", "w") as f: + f.write("\n".join(libdirs)) + + +libargs = ' '.join(["'%s'" % arg for arg in sys.argv[1:]]) +cmd = '%s -shared %s %s' % (environ['CC'], environ['LDFLAGS'], libargs) +sys.exit(subprocess.call(cmd, shell=True)) From 2442091121397b7a1808db25028adea2afd7ca7d Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Sat, 23 Aug 2014 17:11:34 +0200 Subject: [PATCH 26/51] android/sound: fix audio volume not implemented. Closes kivy/kivy#1869 --- recipes/android/src/android/mixer.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/recipes/android/src/android/mixer.py b/recipes/android/src/android/mixer.py index 336a2e64cb..4ac224a790 100644 --- a/recipes/android/src/android/mixer.py +++ b/recipes/android/src/android/mixer.py @@ -131,11 +131,10 @@ def fadeout(self, time): self.stop() def set_volume(self, left, right=None): - # Not implemented. - return + sound.set_volume(self.id, left) def get_volume(self): - return 1.0 + return sound.get_volume(self.id) def get_busy(self): return sound.busy(self.id) @@ -193,6 +192,7 @@ def __init__(self, what): global sound_serial self._channel = None + self._volume = 1. self.serial = str(sound_serial) sound_serial += 1 @@ -210,6 +210,7 @@ def play(self, loops=0, maxtime=0, fade_ms=0): if self._channel.get_sound() is self: return self._channel = channel = find_channel(True) + channel.set_volume(self._volume) channel.play(self, loops=loops) return channel @@ -223,10 +224,13 @@ def fadeout(self, time): self.stop() def set_volume(self, left, right=None): - return + self._volume = left + if self._channel: + if self._channel.get_sound() is self: + self._channel.set_volume(self._volume) def get_volume(self): - return 1.0 + return self._volume def get_num_channels(self): rv = 0 From 5619ec28673ef32d07e38e12e9f138380c83bdd9 Mon Sep 17 00:00:00 2001 From: John Mark Diaz Date: Wed, 3 Sep 2014 08:40:39 +0800 Subject: [PATCH 27/51] added support for setting resources to add in strings.xml --- src/build.py | 6 ++++++ src/templates/strings.xml | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/build.py b/src/build.py index 19cbcfa757..313114c85b 100755 --- a/src/build.py +++ b/src/build.py @@ -456,6 +456,9 @@ def make_package(args): ap.add_argument('--meta-data', dest='meta_data', action='append', help='Custom key=value to add in application metadata') + ap.add_argument('--resource', dest='resource', action='append', + help='Custom key=value to add in strings.xml resource file') + args = ap.parse_args() if not args.dir and not args.private and not args.launcher: @@ -470,6 +473,9 @@ def make_package(args): if args.meta_data is None: args.meta_data = [] + if args.resource is None: + args.resource = [] + if args.compile_pyo: if PYTHON is None: ap.error('To use --compile-pyo, you need Python 2.7.1 installed ' diff --git a/src/templates/strings.xml b/src/templates/strings.xml index dc0440b5eb..f5d30e721c 100644 --- a/src/templates/strings.xml +++ b/src/templates/strings.xml @@ -9,4 +9,8 @@ {{ public_version }} {% endif %} {{ url_scheme }} +{% for m in args.resource %} +{{ m.split('=', 1)[-1] }} +{% endfor %} + From 7c6e1f55005c9c4c7567d38b717daec1a0368b1f Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Tue, 9 Sep 2014 13:58:13 +0200 Subject: [PATCH 28/51] Fix long filename support. - use kamranzafar star instead of xeustechnologies. - force the tar creation to use USTAR format (default is GNU, and unsupported by kamranzafar). --- src/build.py | 2 +- .../jtar/Octal.java | 20 +- .../jtar/TarConstants.java | 4 +- src/src/org/kamranzafar/jtar/TarEntry.java | 284 +++++++++++++++++ src/src/org/kamranzafar/jtar/TarHeader.java | 243 +++++++++++++++ .../org/kamranzafar/jtar/TarInputStream.java | 249 +++++++++++++++ .../jtar/TarOutputStream.java | 61 +++- src/src/org/kamranzafar/jtar/TarUtils.java | 96 ++++++ src/src/org/renpy/android/AssetExtract.java | 2 +- .../org/xeustechnologies/jtar/TarEntry.java | 286 ------------------ .../org/xeustechnologies/jtar/TarHeader.java | 197 ------------ .../xeustechnologies/jtar/TarInputStream.java | 179 ----------- .../org/xeustechnologies/jtar/TarUtils.java | 75 ----- 13 files changed, 931 insertions(+), 767 deletions(-) rename src/src/org/{xeustechnologies => kamranzafar}/jtar/Octal.java (86%) mode change 100644 => 100755 rename src/src/org/{xeustechnologies => kamranzafar}/jtar/TarConstants.java (88%) mode change 100644 => 100755 create mode 100755 src/src/org/kamranzafar/jtar/TarEntry.java create mode 100755 src/src/org/kamranzafar/jtar/TarHeader.java create mode 100755 src/src/org/kamranzafar/jtar/TarInputStream.java rename src/src/org/{xeustechnologies => kamranzafar}/jtar/TarOutputStream.java (65%) mode change 100644 => 100755 create mode 100755 src/src/org/kamranzafar/jtar/TarUtils.java delete mode 100644 src/src/org/xeustechnologies/jtar/TarEntry.java delete mode 100644 src/src/org/xeustechnologies/jtar/TarHeader.java delete mode 100644 src/src/org/xeustechnologies/jtar/TarInputStream.java delete mode 100644 src/src/org/xeustechnologies/jtar/TarUtils.java diff --git a/src/build.py b/src/build.py index 19cbcfa757..3e1a58c325 100755 --- a/src/build.py +++ b/src/build.py @@ -180,7 +180,7 @@ def select(fn): if select(x)] # create tar.gz of thoses files - tf = tarfile.open(tfn, 'w:gz') + tf = tarfile.open(tfn, 'w:gz', format=tarfile.USTAR_FORMAT) dirs = [] for fn, afn in files: print '%s: %s' % (tfn, fn) diff --git a/src/src/org/xeustechnologies/jtar/Octal.java b/src/src/org/kamranzafar/jtar/Octal.java old mode 100644 new mode 100755 similarity index 86% rename from src/src/org/xeustechnologies/jtar/Octal.java rename to src/src/org/kamranzafar/jtar/Octal.java index 94048140c2..dd10624eab --- a/src/src/org/xeustechnologies/jtar/Octal.java +++ b/src/src/org/kamranzafar/jtar/Octal.java @@ -1,5 +1,5 @@ /** - * Copyright 2010 Xeus Technologies + * Copyright 2012 Kamran Zafar * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ * */ -package org.xeustechnologies.jtar; +package org.kamranzafar.jtar; /** * @author Kamran Zafar @@ -41,15 +41,15 @@ public static long parseOctal(byte[] header, int offset, int length) { boolean stillPadding = true; int end = offset + length; - for( int i = offset; i < end; ++i ) { - if( header[i] == 0 ) + for (int i = offset; i < end; ++i) { + if (header[i] == 0) break; - if( header[i] == (byte) ' ' || header[i] == '0' ) { - if( stillPadding ) + if (header[i] == (byte) ' ' || header[i] == '0') { + if (stillPadding) continue; - if( header[i] == (byte) ' ' ) + if (header[i] == (byte) ' ') break; } @@ -82,17 +82,17 @@ public static int getOctalBytes(long value, byte[] buf, int offset, int length) buf[offset + idx] = (byte) ' '; --idx; - if( value == 0 ) { + if (value == 0) { buf[offset + idx] = (byte) '0'; --idx; } else { - for( long val = value; idx >= 0 && val > 0; --idx ) { + for (long val = value; idx >= 0 && val > 0; --idx) { buf[offset + idx] = (byte) ( (byte) '0' + (byte) ( val & 7 ) ); val = val >> 3; } } - for( ; idx >= 0; --idx ) { + for (; idx >= 0; --idx) { buf[offset + idx] = (byte) ' '; } diff --git a/src/src/org/xeustechnologies/jtar/TarConstants.java b/src/src/org/kamranzafar/jtar/TarConstants.java old mode 100644 new mode 100755 similarity index 88% rename from src/src/org/xeustechnologies/jtar/TarConstants.java rename to src/src/org/kamranzafar/jtar/TarConstants.java index cd7258ad61..4611e20eaa --- a/src/src/org/xeustechnologies/jtar/TarConstants.java +++ b/src/src/org/kamranzafar/jtar/TarConstants.java @@ -1,5 +1,5 @@ /** - * Copyright 2010 Xeus Technologies + * Copyright 2012 Kamran Zafar * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ * */ -package org.xeustechnologies.jtar; +package org.kamranzafar.jtar; /** * @author Kamran Zafar diff --git a/src/src/org/kamranzafar/jtar/TarEntry.java b/src/src/org/kamranzafar/jtar/TarEntry.java new file mode 100755 index 0000000000..fe01db463a --- /dev/null +++ b/src/src/org/kamranzafar/jtar/TarEntry.java @@ -0,0 +1,284 @@ +/** + * Copyright 2012 Kamran Zafar + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.kamranzafar.jtar; + +import java.io.File; +import java.util.Date; + +/** + * @author Kamran Zafar + * + */ +public class TarEntry { + protected File file; + protected TarHeader header; + + private TarEntry() { + this.file = null; + header = new TarHeader(); + } + + public TarEntry(File file, String entryName) { + this(); + this.file = file; + this.extractTarHeader(entryName); + } + + public TarEntry(byte[] headerBuf) { + this(); + this.parseTarHeader(headerBuf); + } + + /** + * Constructor to create an entry from an existing TarHeader object. + * + * This method is useful to add new entries programmatically (e.g. for + * adding files or directories that do not exist in the file system). + * + * @param header + * + */ + public TarEntry(TarHeader header) { + this.file = null; + this.header = header; + } + + public boolean equals(TarEntry it) { + return header.name.toString().equals(it.header.name.toString()); + } + + public boolean isDescendent(TarEntry desc) { + return desc.header.name.toString().startsWith(header.name.toString()); + } + + public TarHeader getHeader() { + return header; + } + + public String getName() { + String name = header.name.toString(); + if (header.namePrefix != null && !header.namePrefix.toString().equals("")) { + name = header.namePrefix.toString() + "/" + name; + } + + return name; + } + + public void setName(String name) { + header.name = new StringBuffer(name); + } + + public int getUserId() { + return header.userId; + } + + public void setUserId(int userId) { + header.userId = userId; + } + + public int getGroupId() { + return header.groupId; + } + + public void setGroupId(int groupId) { + header.groupId = groupId; + } + + public String getUserName() { + return header.userName.toString(); + } + + public void setUserName(String userName) { + header.userName = new StringBuffer(userName); + } + + public String getGroupName() { + return header.groupName.toString(); + } + + public void setGroupName(String groupName) { + header.groupName = new StringBuffer(groupName); + } + + public void setIds(int userId, int groupId) { + this.setUserId(userId); + this.setGroupId(groupId); + } + + public void setModTime(long time) { + header.modTime = time / 1000; + } + + public void setModTime(Date time) { + header.modTime = time.getTime() / 1000; + } + + public Date getModTime() { + return new Date(header.modTime * 1000); + } + + public File getFile() { + return this.file; + } + + public long getSize() { + return header.size; + } + + public void setSize(long size) { + header.size = size; + } + + /** + * Checks if the org.kamrazafar.jtar entry is a directory + * + * @return + */ + public boolean isDirectory() { + if (this.file != null) + return this.file.isDirectory(); + + if (header != null) { + if (header.linkFlag == TarHeader.LF_DIR) + return true; + + if (header.name.toString().endsWith("/")) + return true; + } + + return false; + } + + /** + * Extract header from File + * + * @param entryName + */ + public void extractTarHeader(String entryName) { + header = TarHeader.createHeader(entryName, file.length(), file.lastModified() / 1000, file.isDirectory()); + } + + /** + * Calculate checksum + * + * @param buf + * @return + */ + public long computeCheckSum(byte[] buf) { + long sum = 0; + + for (int i = 0; i < buf.length; ++i) { + sum += 255 & buf[i]; + } + + return sum; + } + + /** + * Writes the header to the byte buffer + * + * @param outbuf + */ + public void writeEntryHeader(byte[] outbuf) { + int offset = 0; + + offset = TarHeader.getNameBytes(header.name, outbuf, offset, TarHeader.NAMELEN); + offset = Octal.getOctalBytes(header.mode, outbuf, offset, TarHeader.MODELEN); + offset = Octal.getOctalBytes(header.userId, outbuf, offset, TarHeader.UIDLEN); + offset = Octal.getOctalBytes(header.groupId, outbuf, offset, TarHeader.GIDLEN); + + long size = header.size; + + offset = Octal.getLongOctalBytes(size, outbuf, offset, TarHeader.SIZELEN); + offset = Octal.getLongOctalBytes(header.modTime, outbuf, offset, TarHeader.MODTIMELEN); + + int csOffset = offset; + for (int c = 0; c < TarHeader.CHKSUMLEN; ++c) + outbuf[offset++] = (byte) ' '; + + outbuf[offset++] = header.linkFlag; + + offset = TarHeader.getNameBytes(header.linkName, outbuf, offset, TarHeader.NAMELEN); + offset = TarHeader.getNameBytes(header.magic, outbuf, offset, TarHeader.USTAR_MAGICLEN); + offset = TarHeader.getNameBytes(header.userName, outbuf, offset, TarHeader.USTAR_USER_NAMELEN); + offset = TarHeader.getNameBytes(header.groupName, outbuf, offset, TarHeader.USTAR_GROUP_NAMELEN); + offset = Octal.getOctalBytes(header.devMajor, outbuf, offset, TarHeader.USTAR_DEVLEN); + offset = Octal.getOctalBytes(header.devMinor, outbuf, offset, TarHeader.USTAR_DEVLEN); + offset = TarHeader.getNameBytes(header.namePrefix, outbuf, offset, TarHeader.USTAR_FILENAME_PREFIX); + + for (; offset < outbuf.length;) + outbuf[offset++] = 0; + + long checkSum = this.computeCheckSum(outbuf); + + Octal.getCheckSumOctalBytes(checkSum, outbuf, csOffset, TarHeader.CHKSUMLEN); + } + + /** + * Parses the tar header to the byte buffer + * + * @param header + * @param bh + */ + public void parseTarHeader(byte[] bh) { + int offset = 0; + + header.name = TarHeader.parseName(bh, offset, TarHeader.NAMELEN); + offset += TarHeader.NAMELEN; + + header.mode = (int) Octal.parseOctal(bh, offset, TarHeader.MODELEN); + offset += TarHeader.MODELEN; + + header.userId = (int) Octal.parseOctal(bh, offset, TarHeader.UIDLEN); + offset += TarHeader.UIDLEN; + + header.groupId = (int) Octal.parseOctal(bh, offset, TarHeader.GIDLEN); + offset += TarHeader.GIDLEN; + + header.size = Octal.parseOctal(bh, offset, TarHeader.SIZELEN); + offset += TarHeader.SIZELEN; + + header.modTime = Octal.parseOctal(bh, offset, TarHeader.MODTIMELEN); + offset += TarHeader.MODTIMELEN; + + header.checkSum = (int) Octal.parseOctal(bh, offset, TarHeader.CHKSUMLEN); + offset += TarHeader.CHKSUMLEN; + + header.linkFlag = bh[offset++]; + + header.linkName = TarHeader.parseName(bh, offset, TarHeader.NAMELEN); + offset += TarHeader.NAMELEN; + + header.magic = TarHeader.parseName(bh, offset, TarHeader.USTAR_MAGICLEN); + offset += TarHeader.USTAR_MAGICLEN; + + header.userName = TarHeader.parseName(bh, offset, TarHeader.USTAR_USER_NAMELEN); + offset += TarHeader.USTAR_USER_NAMELEN; + + header.groupName = TarHeader.parseName(bh, offset, TarHeader.USTAR_GROUP_NAMELEN); + offset += TarHeader.USTAR_GROUP_NAMELEN; + + header.devMajor = (int) Octal.parseOctal(bh, offset, TarHeader.USTAR_DEVLEN); + offset += TarHeader.USTAR_DEVLEN; + + header.devMinor = (int) Octal.parseOctal(bh, offset, TarHeader.USTAR_DEVLEN); + offset += TarHeader.USTAR_DEVLEN; + + header.namePrefix = TarHeader.parseName(bh, offset, TarHeader.USTAR_FILENAME_PREFIX); + } +} \ No newline at end of file diff --git a/src/src/org/kamranzafar/jtar/TarHeader.java b/src/src/org/kamranzafar/jtar/TarHeader.java new file mode 100755 index 0000000000..b9d3a86bef --- /dev/null +++ b/src/src/org/kamranzafar/jtar/TarHeader.java @@ -0,0 +1,243 @@ +/** + * Copyright 2012 Kamran Zafar + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.kamranzafar.jtar; + +import java.io.File; + +/** + * Header + * + *
+ * Offset  Size     Field
+ * 0       100      File name
+ * 100     8        File mode
+ * 108     8        Owner's numeric user ID
+ * 116     8        Group's numeric user ID
+ * 124     12       File size in bytes
+ * 136     12       Last modification time in numeric Unix time format
+ * 148     8        Checksum for header block
+ * 156     1        Link indicator (file type)
+ * 157     100      Name of linked file
+ * 
+ * + * + * File Types + * + *
+ * Value        Meaning
+ * '0'          Normal file
+ * (ASCII NUL)  Normal file (now obsolete)
+ * '1'          Hard link
+ * '2'          Symbolic link
+ * '3'          Character special
+ * '4'          Block special
+ * '5'          Directory
+ * '6'          FIFO
+ * '7'          Contigous
+ * 
+ * + * + * + * Ustar header + * + *
+ * Offset  Size    Field
+ * 257     6       UStar indicator "ustar"
+ * 263     2       UStar version "00"
+ * 265     32      Owner user name
+ * 297     32      Owner group name
+ * 329     8       Device major number
+ * 337     8       Device minor number
+ * 345     155     Filename prefix
+ * 
+ */ + +public class TarHeader { + + /* + * Header + */ + public static final int NAMELEN = 100; + public static final int MODELEN = 8; + public static final int UIDLEN = 8; + public static final int GIDLEN = 8; + public static final int SIZELEN = 12; + public static final int MODTIMELEN = 12; + public static final int CHKSUMLEN = 8; + public static final byte LF_OLDNORM = 0; + + /* + * File Types + */ + public static final byte LF_NORMAL = (byte) '0'; + public static final byte LF_LINK = (byte) '1'; + public static final byte LF_SYMLINK = (byte) '2'; + public static final byte LF_CHR = (byte) '3'; + public static final byte LF_BLK = (byte) '4'; + public static final byte LF_DIR = (byte) '5'; + public static final byte LF_FIFO = (byte) '6'; + public static final byte LF_CONTIG = (byte) '7'; + + /* + * Ustar header + */ + + public static final String USTAR_MAGIC = "ustar"; // POSIX + + public static final int USTAR_MAGICLEN = 8; + public static final int USTAR_USER_NAMELEN = 32; + public static final int USTAR_GROUP_NAMELEN = 32; + public static final int USTAR_DEVLEN = 8; + public static final int USTAR_FILENAME_PREFIX = 155; + + // Header values + public StringBuffer name; + public int mode; + public int userId; + public int groupId; + public long size; + public long modTime; + public int checkSum; + public byte linkFlag; + public StringBuffer linkName; + public StringBuffer magic; // ustar indicator and version + public StringBuffer userName; + public StringBuffer groupName; + public int devMajor; + public int devMinor; + public StringBuffer namePrefix; + + public TarHeader() { + this.magic = new StringBuffer(TarHeader.USTAR_MAGIC); + + this.name = new StringBuffer(); + this.linkName = new StringBuffer(); + + String user = System.getProperty("user.name", ""); + + if (user.length() > 31) + user = user.substring(0, 31); + + this.userId = 0; + this.groupId = 0; + this.userName = new StringBuffer(user); + this.groupName = new StringBuffer(""); + this.namePrefix = new StringBuffer(); + } + + /** + * Parse an entry name from a header buffer. + * + * @param name + * @param header + * The header buffer from which to parse. + * @param offset + * The offset into the buffer from which to parse. + * @param length + * The number of header bytes to parse. + * @return The header's entry name. + */ + public static StringBuffer parseName(byte[] header, int offset, int length) { + StringBuffer result = new StringBuffer(length); + + int end = offset + length; + for (int i = offset; i < end; ++i) { + if (header[i] == 0) + break; + result.append((char) header[i]); + } + + return result; + } + + /** + * Determine the number of bytes in an entry name. + * + * @param name + * @param header + * The header buffer from which to parse. + * @param offset + * The offset into the buffer from which to parse. + * @param length + * The number of header bytes to parse. + * @return The number of bytes in a header's entry name. + */ + public static int getNameBytes(StringBuffer name, byte[] buf, int offset, int length) { + int i; + + for (i = 0; i < length && i < name.length(); ++i) { + buf[offset + i] = (byte) name.charAt(i); + } + + for (; i < length; ++i) { + buf[offset + i] = 0; + } + + return offset + length; + } + + /** + * Creates a new header for a file/directory entry. + * + * + * @param name + * File name + * @param size + * File size in bytes + * @param modTime + * Last modification time in numeric Unix time format + * @param dir + * Is directory + * + * @return + */ + public static TarHeader createHeader(String entryName, long size, long modTime, boolean dir) { + String name = entryName; + name = TarUtils.trim(name.replace(File.separatorChar, '/'), '/'); + + TarHeader header = new TarHeader(); + header.linkName = new StringBuffer(""); + + if (name.length() > 100) { + header.namePrefix = new StringBuffer(name.substring(0, name.lastIndexOf('/'))); + header.name = new StringBuffer(name.substring(name.lastIndexOf('/') + 1)); + } else { + header.name = new StringBuffer(name); + } + + if (dir) { + header.mode = 040755; + header.linkFlag = TarHeader.LF_DIR; + if (header.name.charAt(header.name.length() - 1) != '/') { + header.name.append("/"); + } + header.size = 0; + } else { + header.mode = 0100644; + header.linkFlag = TarHeader.LF_NORMAL; + header.size = size; + } + + header.modTime = modTime; + header.checkSum = 0; + header.devMajor = 0; + header.devMinor = 0; + + return header; + } +} \ No newline at end of file diff --git a/src/src/org/kamranzafar/jtar/TarInputStream.java b/src/src/org/kamranzafar/jtar/TarInputStream.java new file mode 100755 index 0000000000..ec50a1b688 --- /dev/null +++ b/src/src/org/kamranzafar/jtar/TarInputStream.java @@ -0,0 +1,249 @@ +/** + * Copyright 2012 Kamran Zafar + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.kamranzafar.jtar; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * @author Kamran Zafar + * + */ +public class TarInputStream extends FilterInputStream { + + private static final int SKIP_BUFFER_SIZE = 2048; + private TarEntry currentEntry; + private long currentFileSize; + private long bytesRead; + private boolean defaultSkip = false; + + public TarInputStream(InputStream in) { + super(in); + currentFileSize = 0; + bytesRead = 0; + } + + @Override + public boolean markSupported() { + return false; + } + + /** + * Not supported + * + */ + @Override + public synchronized void mark(int readlimit) { + } + + /** + * Not supported + * + */ + @Override + public synchronized void reset() throws IOException { + throw new IOException("mark/reset not supported"); + } + + /** + * Read a byte + * + * @see java.io.FilterInputStream#read() + */ + @Override + public int read() throws IOException { + byte[] buf = new byte[1]; + + int res = this.read(buf, 0, 1); + + if (res != -1) { + return 0xFF & buf[0]; + } + + return res; + } + + /** + * Checks if the bytes being read exceed the entry size and adjusts the byte + * array length. Updates the byte counters + * + * + * @see java.io.FilterInputStream#read(byte[], int, int) + */ + @Override + public int read(byte[] b, int off, int len) throws IOException { + if (currentEntry != null) { + if (currentFileSize == currentEntry.getSize()) { + return -1; + } else if ((currentEntry.getSize() - currentFileSize) < len) { + len = (int) (currentEntry.getSize() - currentFileSize); + } + } + + int br = super.read(b, off, len); + + if (br != -1) { + if (currentEntry != null) { + currentFileSize += br; + } + + bytesRead += br; + } + + return br; + } + + /** + * Returns the next entry in the tar file + * + * @return TarEntry + * @throws IOException + */ + public TarEntry getNextEntry() throws IOException { + closeCurrentEntry(); + + byte[] header = new byte[TarConstants.HEADER_BLOCK]; + byte[] theader = new byte[TarConstants.HEADER_BLOCK]; + int tr = 0; + + // Read full header + while (tr < TarConstants.HEADER_BLOCK) { + int res = read(theader, 0, TarConstants.HEADER_BLOCK - tr); + + if (res < 0) { + break; + } + + System.arraycopy(theader, 0, header, tr, res); + tr += res; + } + + // Check if record is null + boolean eof = true; + for (byte b : header) { + if (b != 0) { + eof = false; + break; + } + } + + if (!eof) { + currentEntry = new TarEntry(header); + } + + return currentEntry; + } + + /** + * Returns the current offset (in bytes) from the beginning of the stream. + * This can be used to find out at which point in a tar file an entry's content begins, for instance. + */ + public long getCurrentOffset() { + return bytesRead; + } + + /** + * Closes the current tar entry + * + * @throws IOException + */ + protected void closeCurrentEntry() throws IOException { + if (currentEntry != null) { + if (currentEntry.getSize() > currentFileSize) { + // Not fully read, skip rest of the bytes + long bs = 0; + while (bs < currentEntry.getSize() - currentFileSize) { + long res = skip(currentEntry.getSize() - currentFileSize - bs); + + if (res == 0 && currentEntry.getSize() - currentFileSize > 0) { + // I suspect file corruption + throw new IOException("Possible tar file corruption"); + } + + bs += res; + } + } + + currentEntry = null; + currentFileSize = 0L; + skipPad(); + } + } + + /** + * Skips the pad at the end of each tar entry file content + * + * @throws IOException + */ + protected void skipPad() throws IOException { + if (bytesRead > 0) { + int extra = (int) (bytesRead % TarConstants.DATA_BLOCK); + + if (extra > 0) { + long bs = 0; + while (bs < TarConstants.DATA_BLOCK - extra) { + long res = skip(TarConstants.DATA_BLOCK - extra - bs); + bs += res; + } + } + } + } + + /** + * Skips 'n' bytes on the InputStream
+ * Overrides default implementation of skip + * + */ + @Override + public long skip(long n) throws IOException { + if (defaultSkip) { + // use skip method of parent stream + // may not work if skip not implemented by parent + long bs = super.skip(n); + bytesRead += bs; + + return bs; + } + + if (n <= 0) { + return 0; + } + + long left = n; + byte[] sBuff = new byte[SKIP_BUFFER_SIZE]; + + while (left > 0) { + int res = read(sBuff, 0, (int) (left < SKIP_BUFFER_SIZE ? left : SKIP_BUFFER_SIZE)); + if (res < 0) { + break; + } + left -= res; + } + + return n - left; + } + + public boolean isDefaultSkip() { + return defaultSkip; + } + + public void setDefaultSkip(boolean defaultSkip) { + this.defaultSkip = defaultSkip; + } +} diff --git a/src/src/org/xeustechnologies/jtar/TarOutputStream.java b/src/src/org/kamranzafar/jtar/TarOutputStream.java old mode 100644 new mode 100755 similarity index 65% rename from src/src/org/xeustechnologies/jtar/TarOutputStream.java rename to src/src/org/kamranzafar/jtar/TarOutputStream.java index f68d45d063..ffdfe87564 --- a/src/src/org/xeustechnologies/jtar/TarOutputStream.java +++ b/src/src/org/kamranzafar/jtar/TarOutputStream.java @@ -1,5 +1,5 @@ /** - * Copyright 2010 Xeus Technologies + * Copyright 2012 Kamran Zafar * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,27 +15,51 @@ * */ -package org.xeustechnologies.jtar; +package org.kamranzafar.jtar; -import java.io.FilterOutputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.io.RandomAccessFile; /** * @author Kamran Zafar * */ -public class TarOutputStream extends FilterOutputStream { +public class TarOutputStream extends OutputStream { + private final OutputStream out; private long bytesWritten; private long currentFileSize; private TarEntry currentEntry; public TarOutputStream(OutputStream out) { - super( out ); + this.out = out; bytesWritten = 0; currentFileSize = 0; } + public TarOutputStream(final File fout) throws FileNotFoundException { + this.out = new BufferedOutputStream(new FileOutputStream(fout)); + bytesWritten = 0; + currentFileSize = 0; + } + + /** + * Opens a file for writing. + */ + public TarOutputStream(final File fout, final boolean append) throws IOException { + @SuppressWarnings("resource") + RandomAccessFile raf = new RandomAccessFile(fout, "rw"); + final long fileSize = fout.length(); + if (append && fileSize > TarConstants.EOF_BLOCK) { + raf.seek(fileSize - TarConstants.EOF_BLOCK); + } + out = new BufferedOutputStream(new FileOutputStream(raf.getFD())); + } + /** * Appends the EOF record and closes the stream * @@ -45,9 +69,8 @@ public TarOutputStream(OutputStream out) { public void close() throws IOException { closeCurrentEntry(); write( new byte[TarConstants.EOF_BLOCK] ); - super.close(); + out.close(); } - /** * Writes a byte to the stream and updates byte counters * @@ -55,10 +78,10 @@ public void close() throws IOException { */ @Override public void write(int b) throws IOException { - super.write( b ); + out.write( b ); bytesWritten += 1; - if( currentEntry != null ) { + if (currentEntry != null) { currentFileSize += 1; } } @@ -70,15 +93,21 @@ public void write(int b) throws IOException { */ @Override public void write(byte[] b, int off, int len) throws IOException { - if( currentEntry != null && !currentEntry.isDirectory() ) { - if( currentEntry.getSize() < currentFileSize + len ) { + if (currentEntry != null && !currentEntry.isDirectory()) { + if (currentEntry.getSize() < currentFileSize + len) { throw new IOException( "The current entry[" + currentEntry.getName() + "] size[" + currentEntry.getSize() + "] is smaller than the bytes[" + ( currentFileSize + len ) + "] being written." ); } } - super.write( b, off, len ); + out.write( b, off, len ); + + bytesWritten += len; + + if (currentEntry != null) { + currentFileSize += len; + } } /** @@ -104,8 +133,8 @@ public void putNextEntry(TarEntry entry) throws IOException { * @throws IOException */ protected void closeCurrentEntry() throws IOException { - if( currentEntry != null ) { - if( currentEntry.getSize() > currentFileSize ) { + if (currentEntry != null) { + if (currentEntry.getSize() > currentFileSize) { throw new IOException( "The current entry[" + currentEntry.getName() + "] of size[" + currentEntry.getSize() + "] has not been fully written." ); } @@ -123,10 +152,10 @@ protected void closeCurrentEntry() throws IOException { * @throws IOException */ protected void pad() throws IOException { - if( bytesWritten > 0 ) { + if (bytesWritten > 0) { int extra = (int) ( bytesWritten % TarConstants.DATA_BLOCK ); - if( extra > 0 ) { + if (extra > 0) { write( new byte[TarConstants.DATA_BLOCK - extra] ); } } diff --git a/src/src/org/kamranzafar/jtar/TarUtils.java b/src/src/org/kamranzafar/jtar/TarUtils.java new file mode 100755 index 0000000000..50165765c0 --- /dev/null +++ b/src/src/org/kamranzafar/jtar/TarUtils.java @@ -0,0 +1,96 @@ +/** + * Copyright 2012 Kamran Zafar + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.kamranzafar.jtar; + +import java.io.File; + +/** + * @author Kamran + * + */ +public class TarUtils { + /** + * Determines the tar file size of the given folder/file path + * + * @param path + * @return + */ + public static long calculateTarSize(File path) { + return tarSize(path) + TarConstants.EOF_BLOCK; + } + + private static long tarSize(File dir) { + long size = 0; + + if (dir.isFile()) { + return entrySize(dir.length()); + } else { + File[] subFiles = dir.listFiles(); + + if (subFiles != null && subFiles.length > 0) { + for (File file : subFiles) { + if (file.isFile()) { + size += entrySize(file.length()); + } else { + size += tarSize(file); + } + } + } else { + // Empty folder header + return TarConstants.HEADER_BLOCK; + } + } + + return size; + } + + private static long entrySize(long fileSize) { + long size = 0; + size += TarConstants.HEADER_BLOCK; // Header + size += fileSize; // File size + + long extra = size % TarConstants.DATA_BLOCK; + + if (extra > 0) { + size += (TarConstants.DATA_BLOCK - extra); // pad + } + + return size; + } + + public static String trim(String s, char c) { + StringBuffer tmp = new StringBuffer(s); + for (int i = 0; i < tmp.length(); i++) { + if (tmp.charAt(i) != c) { + break; + } else { + tmp.deleteCharAt(i); + } + } + + for (int i = tmp.length() - 1; i >= 0; i--) { + if (tmp.charAt(i) != c) { + break; + } else { + tmp.deleteCharAt(i); + } + } + + return tmp.toString(); + } +} diff --git a/src/src/org/renpy/android/AssetExtract.java b/src/src/org/renpy/android/AssetExtract.java index 64a42a6721..e1d810798a 100644 --- a/src/src/org/renpy/android/AssetExtract.java +++ b/src/src/org/renpy/android/AssetExtract.java @@ -19,7 +19,7 @@ import android.content.res.AssetManager; -import org.xeustechnologies.jtar.*; +import org.kamranzafar.jtar.*; class AssetExtract { diff --git a/src/src/org/xeustechnologies/jtar/TarEntry.java b/src/src/org/xeustechnologies/jtar/TarEntry.java deleted file mode 100644 index 5f459b9736..0000000000 --- a/src/src/org/xeustechnologies/jtar/TarEntry.java +++ /dev/null @@ -1,286 +0,0 @@ -/** - * Copyright 2010 Xeus Technologies - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.xeustechnologies.jtar; - -import java.io.File; -import java.util.Date; - -/** - * @author Kamran Zafar - * - */ -public class TarEntry { - protected File file; - protected TarHeader header; - - private TarEntry() { - this.file = null; - this.header = new TarHeader(); - } - - public TarEntry(File file, String entryName) { - this(); - this.file = file; - this.extractTarHeader( entryName ); - } - - public TarEntry(byte[] headerBuf) { - this(); - this.parseTarHeader( headerBuf ); - } - - public boolean equals(TarEntry it) { - return this.header.name.toString().equals( it.header.name.toString() ); - } - - public boolean isDescendent(TarEntry desc) { - return desc.header.name.toString().startsWith( this.header.name.toString() ); - } - - public TarHeader getHeader() { - return this.header; - } - - public String getName() { - return this.header.name.toString(); - } - - public void setName(String name) { - this.header.name = new StringBuffer( name ); - } - - public int getUserId() { - return this.header.userId; - } - - public void setUserId(int userId) { - this.header.userId = userId; - } - - public int getGroupId() { - return this.header.groupId; - } - - public void setGroupId(int groupId) { - this.header.groupId = groupId; - } - - public String getUserName() { - return this.header.userName.toString(); - } - - public void setUserName(String userName) { - this.header.userName = new StringBuffer( userName ); - } - - public String getGroupName() { - return this.header.groupName.toString(); - } - - public void setGroupName(String groupName) { - this.header.groupName = new StringBuffer( groupName ); - } - - public void setIds(int userId, int groupId) { - this.setUserId( userId ); - this.setGroupId( groupId ); - } - - public void setModTime(long time) { - this.header.modTime = time / 1000; - } - - public void setModTime(Date time) { - this.header.modTime = time.getTime() / 1000; - } - - public Date getModTime() { - return new Date( this.header.modTime * 1000 ); - } - - public File getFile() { - return this.file; - } - - public long getSize() { - return this.header.size; - } - - public void setSize(long size) { - this.header.size = size; - } - - /** - * Checks if the org.xeustechnologies.jtar entry is a directory - * - * @return - */ - public boolean isDirectory() { - if( this.file != null ) - return this.file.isDirectory(); - - if( this.header != null ) { - if( this.header.linkFlag == TarHeader.LF_DIR ) - return true; - - if( this.header.name.toString().endsWith( "/" ) ) - return true; - } - - return false; - } - - /** - * Extract header from File - * - * @param entryName - */ - public void extractTarHeader(String entryName) { - String name = entryName; - - name = name.replace( File.separatorChar, '/' ); - - if( name.startsWith( "/" ) ) - name = name.substring( 1 ); - - header.linkName = new StringBuffer( "" ); - - header.name = new StringBuffer( name ); - - if( file.isDirectory() ) { - header.mode = 040755; - header.linkFlag = TarHeader.LF_DIR; - if( header.name.charAt( header.name.length() - 1 ) != '/' ) - header.name.append( "/" ); - } else { - header.mode = 0100644; - header.linkFlag = TarHeader.LF_NORMAL; - } - - header.size = file.length(); - header.modTime = file.lastModified() / 1000; - header.checkSum = 0; - header.devMajor = 0; - header.devMinor = 0; - } - - /** - * Calculate checksum - * - * @param buf - * @return - */ - public long computeCheckSum(byte[] buf) { - long sum = 0; - - for( int i = 0; i < buf.length; ++i ) { - sum += 255 & buf[i]; - } - - return sum; - } - - /** - * Writes the header to the byte buffer - * - * @param outbuf - */ - public void writeEntryHeader(byte[] outbuf) { - int offset = 0; - - offset = TarHeader.getNameBytes( this.header.name, outbuf, offset, TarHeader.NAMELEN ); - offset = Octal.getOctalBytes( this.header.mode, outbuf, offset, TarHeader.MODELEN ); - offset = Octal.getOctalBytes( this.header.userId, outbuf, offset, TarHeader.UIDLEN ); - offset = Octal.getOctalBytes( this.header.groupId, outbuf, offset, TarHeader.GIDLEN ); - - long size = this.header.size; - - offset = Octal.getLongOctalBytes( size, outbuf, offset, TarHeader.SIZELEN ); - offset = Octal.getLongOctalBytes( this.header.modTime, outbuf, offset, TarHeader.MODTIMELEN ); - - int csOffset = offset; - for( int c = 0; c < TarHeader.CHKSUMLEN; ++c ) - outbuf[offset++] = (byte) ' '; - - outbuf[offset++] = this.header.linkFlag; - - offset = TarHeader.getNameBytes( this.header.linkName, outbuf, offset, TarHeader.NAMELEN ); - offset = TarHeader.getNameBytes( this.header.magic, outbuf, offset, TarHeader.MAGICLEN ); - offset = TarHeader.getNameBytes( this.header.userName, outbuf, offset, TarHeader.UNAMELEN ); - offset = TarHeader.getNameBytes( this.header.groupName, outbuf, offset, TarHeader.GNAMELEN ); - offset = Octal.getOctalBytes( this.header.devMajor, outbuf, offset, TarHeader.DEVLEN ); - offset = Octal.getOctalBytes( this.header.devMinor, outbuf, offset, TarHeader.DEVLEN ); - - for( ; offset < outbuf.length; ) - outbuf[offset++] = 0; - - long checkSum = this.computeCheckSum( outbuf ); - - Octal.getCheckSumOctalBytes( checkSum, outbuf, csOffset, TarHeader.CHKSUMLEN ); - } - - /** - * Parses the tar header to the byte buffer - * - * @param header - * @param bh - */ - public void parseTarHeader(byte[] bh) { - int offset = 0; - - header.name = TarHeader.parseName( bh, offset, TarHeader.NAMELEN ); - offset += TarHeader.NAMELEN; - - header.mode = (int) Octal.parseOctal( bh, offset, TarHeader.MODELEN ); - offset += TarHeader.MODELEN; - - header.userId = (int) Octal.parseOctal( bh, offset, TarHeader.UIDLEN ); - offset += TarHeader.UIDLEN; - - header.groupId = (int) Octal.parseOctal( bh, offset, TarHeader.GIDLEN ); - offset += TarHeader.GIDLEN; - - header.size = Octal.parseOctal( bh, offset, TarHeader.SIZELEN ); - offset += TarHeader.SIZELEN; - - header.modTime = Octal.parseOctal( bh, offset, TarHeader.MODTIMELEN ); - offset += TarHeader.MODTIMELEN; - - header.checkSum = (int) Octal.parseOctal( bh, offset, TarHeader.CHKSUMLEN ); - offset += TarHeader.CHKSUMLEN; - - header.linkFlag = bh[offset++]; - - header.linkName = TarHeader.parseName( bh, offset, TarHeader.NAMELEN ); - offset += TarHeader.NAMELEN; - - header.magic = TarHeader.parseName( bh, offset, TarHeader.MAGICLEN ); - offset += TarHeader.MAGICLEN; - - header.userName = TarHeader.parseName( bh, offset, TarHeader.UNAMELEN ); - offset += TarHeader.UNAMELEN; - - header.groupName = TarHeader.parseName( bh, offset, TarHeader.GNAMELEN ); - offset += TarHeader.GNAMELEN; - - header.devMajor = (int) Octal.parseOctal( bh, offset, TarHeader.DEVLEN ); - offset += TarHeader.DEVLEN; - - header.devMinor = (int) Octal.parseOctal( bh, offset, TarHeader.DEVLEN ); - } -} \ No newline at end of file diff --git a/src/src/org/xeustechnologies/jtar/TarHeader.java b/src/src/org/xeustechnologies/jtar/TarHeader.java deleted file mode 100644 index 7b59e9063a..0000000000 --- a/src/src/org/xeustechnologies/jtar/TarHeader.java +++ /dev/null @@ -1,197 +0,0 @@ -/** - * Copyright 2010 Xeus Technologies - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.xeustechnologies.jtar; - -/** - * Header - * - *
- * Offset  Size     Field
- * 0       100      File name
- * 100     8        File mode
- * 108     8        Owner's numeric user ID
- * 116     8        Group's numeric user ID
- * 124     12       File size in bytes
- * 136     12       Last modification time in numeric Unix time format
- * 148     8        Checksum for header block
- * 156     1        Link indicator (file type)
- * 157     100      Name of linked file
- * 
- * - * - * File Types - * - *
- * Value        Meaning
- * '0'          Normal file
- * (ASCII NUL)  Normal file (now obsolete)
- * '1'          Hard link
- * '2'          Symbolic link
- * '3'          Character special
- * '4'          Block special
- * '5'          Directory
- * '6'          FIFO
- * '7'          Contigous
- * 
- * - * - * - * Ustar header - * - *
- * Offset  Size    Field
- * 257     6       UStar indicator "ustar"
- * 263     2       UStar version "00"
- * 265     32      Owner user name
- * 297     32      Owner group name
- * 329     8       Device major number
- * 337     8       Device minor number
- * 345     155     Filename prefix
- * 
- */ - -public class TarHeader { - - /* - * Header - */ - public static final int NAMELEN = 100; - public static final int MODELEN = 8; - public static final int UIDLEN = 8; - public static final int GIDLEN = 8; - public static final int SIZELEN = 12; - public static final int MODTIMELEN = 12; - public static final int CHKSUMLEN = 8; - public static final byte LF_OLDNORM = 0; - - /* - * File Types - */ - public static final byte LF_NORMAL = (byte) '0'; - public static final byte LF_LINK = (byte) '1'; - public static final byte LF_SYMLINK = (byte) '2'; - public static final byte LF_CHR = (byte) '3'; - public static final byte LF_BLK = (byte) '4'; - public static final byte LF_DIR = (byte) '5'; - public static final byte LF_FIFO = (byte) '6'; - public static final byte LF_CONTIG = (byte) '7'; - - /* - * Ustar header - */ - - public static final int MAGICLEN = 8; - /** - * The magic tag representing a POSIX tar archive. - */ - public static final String TMAGIC = "ustar"; - - /** - * The magic tag representing a GNU tar archive. - */ - public static final String GNU_TMAGIC = "ustar "; - - public static final int UNAMELEN = 32; - public static final int GNAMELEN = 32; - public static final int DEVLEN = 8; - - // Header values - public StringBuffer name; - public int mode; - public int userId; - public int groupId; - public long size; - public long modTime; - public int checkSum; - public byte linkFlag; - public StringBuffer linkName; - public StringBuffer magic; - public StringBuffer userName; - public StringBuffer groupName; - public int devMajor; - public int devMinor; - - public TarHeader() { - this.magic = new StringBuffer( TarHeader.TMAGIC ); - - this.name = new StringBuffer(); - this.linkName = new StringBuffer(); - - String user = System.getProperty( "user.name", "" ); - - if( user.length() > 31 ) - user = user.substring( 0, 31 ); - - this.userId = 0; - this.groupId = 0; - this.userName = new StringBuffer( user ); - this.groupName = new StringBuffer( "" ); - } - - /** - * Parse an entry name from a header buffer. - * - * @param name - * @param header - * The header buffer from which to parse. - * @param offset - * The offset into the buffer from which to parse. - * @param length - * The number of header bytes to parse. - * @return The header's entry name. - */ - public static StringBuffer parseName(byte[] header, int offset, int length) { - StringBuffer result = new StringBuffer( length ); - - int end = offset + length; - for( int i = offset; i < end; ++i ) { - if( header[i] == 0 ) - break; - result.append( (char) header[i] ); - } - - return result; - } - - /** - * Determine the number of bytes in an entry name. - * - * @param name - * @param header - * The header buffer from which to parse. - * @param offset - * The offset into the buffer from which to parse. - * @param length - * The number of header bytes to parse. - * @return The number of bytes in a header's entry name. - */ - public static int getNameBytes(StringBuffer name, byte[] buf, int offset, int length) { - int i; - - for( i = 0; i < length && i < name.length(); ++i ) { - buf[offset + i] = (byte) name.charAt( i ); - } - - for( ; i < length; ++i ) { - buf[offset + i] = 0; - } - - return offset + length; - } - -} \ No newline at end of file diff --git a/src/src/org/xeustechnologies/jtar/TarInputStream.java b/src/src/org/xeustechnologies/jtar/TarInputStream.java deleted file mode 100644 index 946ffff1c6..0000000000 --- a/src/src/org/xeustechnologies/jtar/TarInputStream.java +++ /dev/null @@ -1,179 +0,0 @@ -/** - * Copyright 2010 Xeus Technologies - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.xeustechnologies.jtar; - -import java.io.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - -/** - * @author Kamran Zafar - * - */ -public class TarInputStream extends FilterInputStream { - - private TarEntry currentEntry; - private long currentFileSize; - private long bytesRead; - - public TarInputStream(InputStream in) { - super( in ); - currentFileSize = 0; - bytesRead = 0; - } - - @Override - public boolean markSupported() { - return false; - } - - /** - * Not supported - * - */ - @Override - public synchronized void mark(int readlimit) { - } - - /** - * Not supported - * - */ - @Override - public synchronized void reset() throws IOException { - throw new IOException( "mark/reset not supported" ); - } - - /** - * Read a byte - * - * @see java.io.FilterInputStream#read() - */ - @Override - public int read() throws IOException { - byte[] buf = new byte[1]; - - int res = this.read( buf, 0, 1 ); - - if( res != -1 ) { - return buf[0]; - } - - return res; - } - - /** - * Checks if the bytes being read exceed the entry size and adjusts the byte - * array length. Updates the byte counters - * - * - * @see java.io.FilterInputStream#read(byte[], int, int) - */ - @Override - public int read(byte[] b, int off, int len) throws IOException { - if( currentEntry != null ) { - if( currentFileSize == currentEntry.getSize() ) { - return -1; - } else if( ( currentEntry.getSize() - currentFileSize ) < len ) { - len = (int) ( currentEntry.getSize() - currentFileSize ); - } - } - - int br = super.read( b, off, len ); - - if( br != -1 ) { - if( currentEntry != null ) { - currentFileSize += br; - } - - bytesRead += br; - } - - return br; - } - - /** - * Returns the next entry in the tar file - * - * @return TarEntry - * @throws IOException - */ - public TarEntry getNextEntry() throws IOException { - closeCurrentEntry(); - - byte[] header = new byte[TarConstants.HEADER_BLOCK]; - - int res = read( header ); - - // Invalid header size - if( res != TarConstants.HEADER_BLOCK ) { - throw new IOException( "Invalid entry header of size [" + res + "]; expected [" + TarConstants.HEADER_BLOCK - + "]" ); - } - - // Check if record is null - boolean eof = true; - for( byte b : header ) { - if( b != 0 ) { - eof = false; - break; - } - } - - if( !eof ) { - currentEntry = new TarEntry( header ); - } - - return currentEntry; - } - - /** - * Closes the current tar entry - * - * @throws IOException - */ - protected void closeCurrentEntry() throws IOException { - if( currentEntry != null ) { - if( currentEntry.getSize() > currentFileSize ) { - // Not fully read, skip rest of the bytes - skip( currentEntry.getSize() - currentFileSize ); - bytesRead += ( currentEntry.getSize() - currentFileSize ); - } - - currentEntry = null; - currentFileSize = 0L; - skipPad(); - } - } - - /** - * Skips the pad at the end of each tar entry file content - * - * @throws IOException - */ - protected void skipPad() throws IOException { - if( bytesRead > 0 ) { - int extra = (int) ( bytesRead % TarConstants.DATA_BLOCK ); - - if( extra > 0 ) { - skip( TarConstants.DATA_BLOCK - extra ); - bytesRead += ( TarConstants.DATA_BLOCK - extra ); - } - } - } -} diff --git a/src/src/org/xeustechnologies/jtar/TarUtils.java b/src/src/org/xeustechnologies/jtar/TarUtils.java deleted file mode 100644 index bbd57ad2db..0000000000 --- a/src/src/org/xeustechnologies/jtar/TarUtils.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright 2010 Xeus Technologies - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.xeustechnologies.jtar; - -import java.io.File; - -/** - * @author Kamran - * - */ -public class TarUtils { - /** - * Determines the tar file size of the given folder/file path - * - * @param path - * @return - */ - public static long calculateTarSize(File path) { - return tarSize( path ) + TarConstants.EOF_BLOCK; - } - - private static long tarSize(File dir) { - long size = 0; - - if( dir.isFile() ) { - return entrySize( dir.length() ); - } else { - File[] subFiles = dir.listFiles(); - - if( subFiles != null && subFiles.length > 0 ) { - for( File file : subFiles ) { - if( file.isFile() ) { - size += entrySize( file.length() ); - } else { - size += tarSize( file ); - } - } - } else { - // Empty folder header - return TarConstants.HEADER_BLOCK; - } - } - - return size; - } - - private static long entrySize(long fileSize) { - long size = 0; - size += TarConstants.HEADER_BLOCK; // Header - size += fileSize; // File size - - long extra = size % TarConstants.DATA_BLOCK; - - if( extra > 0 ) { - size += ( TarConstants.DATA_BLOCK - extra ); // pad - } - - return size; - } -} From 388b95663bac07c46a090b07b62d37c964181242 Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Tue, 9 Sep 2014 13:58:32 +0200 Subject: [PATCH 29/51] osx: try to fix _scproxy file when python-for-android is build on osx --- recipes/python/recipe.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/recipes/python/recipe.sh b/recipes/python/recipe.sh index fdd659f278..4246bae97a 100644 --- a/recipes/python/recipe.sh +++ b/recipes/python/recipe.sh @@ -113,6 +113,7 @@ function build_python() { system=$(uname -s) if [ "X$system" == "XDarwin" ]; then try cp $RECIPE_python/patches/_scproxy.py $BUILD_python/Lib/ + try cp $RECIPE_python/patches/_scproxy.py $BUILD_PATH/python-install/lib/python2.7/ fi try cp $BUILD_hostpython/hostpython $HOSTPYTHON try cp libpython2.7.so $LIBS_PATH/ From 22ad4d84fbb614bdbfa55735f1ab609b69afa419 Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Tue, 9 Sep 2014 13:58:54 +0200 Subject: [PATCH 30/51] osx: specific fixes for osx and virtualenv --- distribute.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/distribute.sh b/distribute.sh index 917fc5902d..be1f890563 100755 --- a/distribute.sh +++ b/distribute.sh @@ -720,10 +720,13 @@ function run_pymodules_install() { fi debug "Create a requirement file for pure-python modules" - try echo "$PYMODULES" | try sed 's/\ /\n/g' > requirements.txt + try echo "" > requirements.txt + for mod in $PYMODULES; do + echo $mod >> requirements.txt + done debug "Install pure-python modules via pip in venv" - try bash -c "source venv/bin/activate && env CC=/bin/false CXX=/bin/false $PIP install --target '$SITEPACKAGES_PATH' --download-cache '$PACKAGES_PATH' -r requirements.txt" + try bash -c "source venv/bin/activate && env CC=/bin/false CXX=/bin/false pip install --target '$SITEPACKAGES_PATH' --download-cache '$PACKAGES_PATH' -r requirements.txt" } From a101685ba0a623cf5b335c7f4573f9918d5682d9 Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Mon, 15 Sep 2014 17:27:47 -0500 Subject: [PATCH 31/51] rename option to copylibs and clean up --- distribute.sh | 34 ++++++++++++++++++++-------------- src/tools/biglink-jb | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/distribute.sh b/distribute.sh index f9924e9a25..6b1b82f187 100755 --- a/distribute.sh +++ b/distribute.sh @@ -63,7 +63,7 @@ export BIGLINK="$ROOT_PATH/src/tools/biglink" export PIP=$PIP_NAME export VIRTUALENV=$VIRTUALENV_NAME -export JELLYBEAN=0 +export COPYLIBS=0 MD5SUM=$(which md5sum) if [ "X$MD5SUM" == "X" ]; then @@ -221,10 +221,6 @@ function push_arm() { export MAKE="make -j5" export READELF="$TOOLCHAIN_PREFIX-readelf" - #if [ "$JELLYBEAN" == "1" ]; then - # export LIBLINK="$CC -shared $LDFLAGS" - #fi - # Use ccache ? which ccache &>/dev/null if [ $? -eq 0 ]; then @@ -255,12 +251,15 @@ function usage() { echo echo " -d directory Name of the distribution directory" echo " -h Show this help" - echo " -j Create distribution for JB 4.3+" echo " -l Show a list of available modules" echo " -m 'mod1 mod2' Modules to include" echo " -f Restart from scratch (remove the current build)" echo " -x display expanded values (execute 'set -x')" echo + echo "Advanced:" + echo " -L Copy libraries instead of using biglink" + echo " (may not work before Android 4.3)" + echo echo "For developers:" echo " -u 'mod1 mod2' Modules to update (if already compiled)" echo @@ -353,8 +352,13 @@ function run_prepare() { fi done - if [ "$JELLYBEAN" == "1" ]; then - info "Distribution for Jelly Bean (4.3) or higher; biglink will be skipped" + if [ "$COPYLIBS" == "1" ]; then + info "Library files will be copied to the distribution (no biglink)" + error "NOTICE: This option is still beta!" + error "\tIf you encounter an error 'Failed to locate needed libraries!' and" + error "\tthe libraries listed are not supposed to be provided by your app or" + error "\tits dependencies, please submit a bug report at" + error "\thttps://github.com/kivy/python-for-android/issues" fi info "Distribution will be located at $DIST_PATH" @@ -773,8 +777,10 @@ function run_distribute() { try cp -a python-install/lib private/ try mkdir -p private/include/python2.7 - if [ "$JELLYBEAN" == "1" ]; then - try sh -c "cat libs/$ARCH/copylibs | xargs -d'\n' cp -t private/" + if [ "$COPYLIBS" == "1" ]; then + if [ -s "libs/$ARCH/copylibs" ]; then + try sh -c "cat libs/$ARCH/copylibs | xargs -d'\n' cp -t private/" + fi else try mv libs/$ARCH/libpymodules.so private/ fi @@ -804,7 +810,7 @@ function run_distribute() { function run_biglink() { push_arm - if [ "$JELLYBEAN" == "0" ]; then + if [ "$COPYLIBS" == "0" ]; then try $BIGLINK $LIBS_PATH/libpymodules.so $LIBLINK_PATH else try $BIGLINK $LIBS_PATH/copylibs $LIBLINK_PATH @@ -850,13 +856,13 @@ function arm_deduplicate() { # Do the build -while getopts ":hjvlfxm:u:d:s" opt; do +while getopts ":hCvlfxm:u:d:s" opt; do case $opt in h) usage ;; - j) - JELLYBEAN=1 + C) + COPYLIBS=1 LIBLINK=${LIBLINK}-jb BIGLINK=${BIGLINK}-jb ;; diff --git a/src/tools/biglink-jb b/src/tools/biglink-jb index e7b9609424..ef3004f5bc 100755 --- a/src/tools/biglink-jb +++ b/src/tools/biglink-jb @@ -103,7 +103,7 @@ for directory in sys.argv[2:]: sofiles += found_sofiles if needed_libs == start_needed_libs: - raise RuntimeError('Failed to located needed libraries!\n\t' + '\n\t'.join(needed_libs)) + raise RuntimeError('Failed to locate needed libraries!\n\t' + '\n\t'.join(needed_libs)) output = sys.argv[1] From 7a60a3a2c2f2d8e49295b29c3d2927c49d63fc1f Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Mon, 15 Sep 2014 17:30:50 -0500 Subject: [PATCH 32/51] fix help --- distribute.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribute.sh b/distribute.sh index 6b1b82f187..9a8da04bef 100755 --- a/distribute.sh +++ b/distribute.sh @@ -257,7 +257,7 @@ function usage() { echo " -x display expanded values (execute 'set -x')" echo echo "Advanced:" - echo " -L Copy libraries instead of using biglink" + echo " -C Copy libraries instead of using biglink" echo " (may not work before Android 4.3)" echo echo "For developers:" From 3345c66dcabf3555b57a50b8fb77657e6a6d5711 Mon Sep 17 00:00:00 2001 From: Chozabu Date: Tue, 23 Sep 2014 18:00:33 +0100 Subject: [PATCH 33/51] move parts of get_keyboard_height to global --- recipes/android/src/android/_android.pyx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/recipes/android/src/android/_android.pyx b/recipes/android/src/android/_android.pyx index 8cc2e6d8ae..6db6aeac70 100644 --- a/recipes/android/src/android/_android.pyx +++ b/recipes/android/src/android/_android.pyx @@ -170,15 +170,16 @@ def get_dpi(): cdef extern void android_show_keyboard(int) cdef extern void android_hide_keyboard() + +from jnius import autoclass +python_act = autoclass('org.renpy.android.PythonActivity') +rctx = autoclass('android.graphics.Rect')() +mActivity = python_act.mActivity +decor_view = mActivity.getWindow().getDecorView() +height = mActivity.getWindowManager().getDefaultDisplay().getHeight() # get keyboard height def get_keyboard_height(): - from jnius import autoclass - python_act = autoclass('org.renpy.android.PythonActivity') - rctx = autoclass('android.graphics.Rect')() - mActivity = python_act.mActivity - mActivity.getWindow().getDecorView().\ - getWindowVisibleDisplayFrame(rctx) - height = mActivity.getWindowManager().getDefaultDisplay().getHeight() + decor_view.getWindowVisibleDisplayFrame(rctx) return height - rctx.bottom From 6a1b55fe456de042dfcaaa2af576d9d9e35ead5a Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Wed, 24 Sep 2014 11:06:19 -0500 Subject: [PATCH 34/51] make private service work (but only if there is no public folder) --- src/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/build.py b/src/build.py index b9b224f157..cb8413c468 100755 --- a/src/build.py +++ b/src/build.py @@ -252,7 +252,7 @@ def make_package(args): # Figure out if application has service part service = False - directory = args.dir + directory = args.dir if public_version else args.private if directory: service_main = join(realpath(directory), 'service', 'main.py') if os.path.exists(service_main) or os.path.exists(service_main + 'o'): From a1fbc8259b6bf5831c6c10f9aad88e2cc3680fdd Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Tue, 30 Sep 2014 16:13:20 +0200 Subject: [PATCH 35/51] fix django compilation. closes #231 --- recipes/django/recipe.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/django/recipe.sh b/recipes/django/recipe.sh index fe8a257363..c272ae20ef 100644 --- a/recipes/django/recipe.sh +++ b/recipes/django/recipe.sh @@ -1,7 +1,7 @@ #!/bin/bash VERSION_django=${VERSION_django:-1.6.1} -DEPS_django=(sqlite3) +DEPS_django=(sqlite3 python) URL_django=https://pypi.python.org/packages/source/D/Django/Django-$VERSION_django.tar.gz MD5_django=3ea7a00ea9e7a014e8a4067dd6466a1b BUILD_django=$BUILD_PATH/django/$(get_directory $URL_django) From 730d56086a938f3e3d0568344f159b6c049e77fc Mon Sep 17 00:00:00 2001 From: Rakesh Sankar Date: Wed, 1 Oct 2014 18:20:58 +0530 Subject: [PATCH 36/51] Add support for NDK r10 --- distribute.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/distribute.sh b/distribute.sh index 4f9d0f1d10..d77d1a571e 100755 --- a/distribute.sh +++ b/distribute.sh @@ -192,8 +192,11 @@ function push_arm() { export TOOLCHAIN_PREFIX=arm-linux-androideabi export TOOLCHAIN_VERSION=4.4.3 elif [ "X${ANDROIDNDKVER:0:2}" == "Xr9" ]; then - export TOOLCHAIN_PREFIX=arm-linux-androideabi - export TOOLCHAIN_VERSION=4.8 + export TOOLCHAIN_PREFIX=arm-linux-androideabi + export TOOLCHAIN_VERSION=4.8 + elif [ "X${ANDROIDNDKVER:0:3}" == "Xr10" ]; then + export TOOLCHAIN_PREFIX=arm-linux-androideabi + export TOOLCHAIN_VERSION=4.9 else echo "Error: Please report issue to enable support for newer ndk." exit 1 From 473003e7f1485448f71324b685f23794f7c822cf Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Mon, 13 Oct 2014 17:52:48 -0500 Subject: [PATCH 37/51] fix twisted recipe --- distribute.sh | 3 +++ recipes/twisted/recipe.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/distribute.sh b/distribute.sh index d77d1a571e..6e89315a2e 100755 --- a/distribute.sh +++ b/distribute.sh @@ -224,6 +224,9 @@ function push_arm() { export MAKE="make -j5" export READELF="$TOOLCHAIN_PREFIX-readelf" + # This will need to be updated to support Python versions other than 2.7 + export BUILDLIB_PATH="$BUILD_hostpython/build/lib.linux-`uname -m`-2.7/" + # Use ccache ? which ccache &>/dev/null if [ $? -eq 0 ]; then diff --git a/recipes/twisted/recipe.sh b/recipes/twisted/recipe.sh index 19ae794116..1e4de5c2e2 100644 --- a/recipes/twisted/recipe.sh +++ b/recipes/twisted/recipe.sh @@ -27,7 +27,7 @@ function build_twisted() { export LDFLAGS="$LDFLAGS -L$LIBS_PATH" export LDSHARED="$LIBLINK" - export PYTHONPATH=$BUILD_hostpython/Lib/site-packages:$BUILD_hostpython/build/lib.linux-x86_64-2.7 + export PYTHONPATH=$SITEPACKAGES_PATH:$BUILDLIB_PATH # fake try to be able to cythonize generated files $HOSTPYTHON setup.py build_ext From 1f7f23f7d6c9ffd383c3b196296762a9a920b3e5 Mon Sep 17 00:00:00 2001 From: jdruiter Date: Tue, 14 Oct 2014 23:27:20 +0200 Subject: [PATCH 38/51] Update toolchain.rst --- docs/source/toolchain.rst | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/source/toolchain.rst b/docs/source/toolchain.rst index e2fa577be1..b301a5a9f5 100644 --- a/docs/source/toolchain.rst +++ b/docs/source/toolchain.rst @@ -21,13 +21,17 @@ compared to other projects. .. note:: - For the moment, we are shipping only one "java bootstrap" needed for - decompressing all the files of your project, create an OpenGL ES 2.0 - surface, handle touch input and manage an audio thread. + For the moment, we are shipping only one "java bootstrap" (needed for + decompressing your packaged zip file project, create an OpenGL ES 2.0 + surface, handle touch input and manage an audio thread). If you want to use it without kivy module (an opengl es 2.0 ui toolkit), then you might want a lighter java bootstrap, that we don't have right now. Help is welcome :) + + So for the moment, Python for Android can only be used with the kivy GUI toolkit: + http://kivy.org/#home + How does it work ? ------------------ @@ -41,6 +45,7 @@ So for a simple ui project, the first step is to compile Python + Kivy + all others libraries. Then you'll have what we call a "distribution". A distribution is composed of: +- Python - Python libraries - All selected libraries (kivy, pygame, pil...) - A java bootstrap From ca6b48cb2c82a1b4da8759879da9b0c4736739a2 Mon Sep 17 00:00:00 2001 From: jdruiter Date: Tue, 14 Oct 2014 23:33:36 +0200 Subject: [PATCH 39/51] Update prerequisites.rst More clarification, after https://groups.google.com/forum/#!topic/python-android/jaK9rA9ZWa8 --- docs/source/prerequisites.rst | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/source/prerequisites.rst b/docs/source/prerequisites.rst index 361c912135..54d9366d5e 100644 --- a/docs/source/prerequisites.rst +++ b/docs/source/prerequisites.rst @@ -9,7 +9,7 @@ Prerequisites The current version is tested only on Ubuntu oneiric (11.10) and precise (12.04). If it doesn't work on other platforms, send us patch, not bug - report. + report. Pyhton for Android works on Linux and Mac OSX, not Windows. You need the minimal environment for building python. Note that other libraries might need other tools (cython is used by some recipes, and ccache to speedup the build):: @@ -28,9 +28,10 @@ Ensure you have the latest cython version:: pip install --upgrade cython -You must have android SDK and NDK. Right now, it's prefered to use: +You must have android SDK and NDK. The SDK defines the Android functions you can use. +The NDK is used for compilation. Right now, it's prefered to use: -- SDK API 8 or 14 (15 will not work until a new NDK is released) +- SDK API 8 or 14 (15 will only work with a newly released NDK) - NDK r5b or r7 You can download them at:: @@ -38,6 +39,9 @@ You can download them at:: http://developer.android.com/sdk/index.html http://developer.android.com/sdk/ndk/index.html + +In general, Python for Android currently works with Android 2.3 to L. + If it's your very first time into android SDK, don't forget to follow documentation for recommended components at:: From 2de18e68eba40897fe5219921ddf0144cd592f05 Mon Sep 17 00:00:00 2001 From: jdruiter Date: Tue, 14 Oct 2014 23:39:19 +0200 Subject: [PATCH 40/51] Update usage.rst Added explanations --- docs/source/usage.rst | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 3210ef2f54..d5ecb0b9a0 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -17,6 +17,12 @@ You can include other modules (or "recipes") to compile using `-m`:: ./distribute.sh -m "openssl kivy" ./distribute.sh -m "pil ffmpeg kivy" +.. note:: + + Recipes are instructions for compiling Python modules that require C extensions. + The list of recipes we currently have is at: + https://github.com/kivy/python-for-android/tree/master/recipes + You can also specify a specific version for each package. Please note that the compilation might **break** if you don't use the default version. Most recipes have patch to fixes android issues, and might not apply if you specify a @@ -24,11 +30,9 @@ version. We also recommend to clean build/ before changing version.:: ./distribute.sh -m "openssl kivy==master" -The list of available recipes is available at: -https://github.com/kivy/python-for-android/tree/master/recipes - -From python-for-android 1.1, you can now specify pure-python package into the --m. It will use virtualenv and pip to install pure-python modules into the +Python modules that don't need C extrnsions don't need a recipe and can be included this way. +From python-for-android 1.1 on, you can now specify pure-python package into the +distribution. It will use virtualenv and pip to install pure-python modules into the distribution. Please note that compiler are deactivated, and will break any module who try to compile something. If compilation is needed, write a recipe:: From e842e17cb27be64340e7f2ba3b4eb374c5f84934 Mon Sep 17 00:00:00 2001 From: Nicolas Niemczycki Date: Sat, 18 Oct 2014 15:58:26 +0200 Subject: [PATCH 41/51] Added protobuf recipe --- recipes/protobuf/recipe.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 recipes/protobuf/recipe.sh diff --git a/recipes/protobuf/recipe.sh b/recipes/protobuf/recipe.sh new file mode 100644 index 0000000000..e123f5e7af --- /dev/null +++ b/recipes/protobuf/recipe.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +VERSION_protobuf=${VERSION_protobuf:-2.6.0} +URL_protobuf=https://protobuf.googlecode.com/svn/rc/protobuf-$VERSION_protobuf.tar.gz +DEPS_protobuf=(python) +MD5_protobuf=9959d86087e64524d7f91e7a5a6e4fd7 +BUILD_protobuf=$BUILD_PATH/protobuf/$(get_directory $URL_protobuf)/python +RECIPE_protobuf=$RECIPES_PATH/protobuf + +function prebuild_protobuf() { + true +} + +function shouldbuild_protobuf() { + if [ -d "$SITEPACKAGES_PATH/protobuf" ]; then + DO_BUILD=0 + fi +} + +function build_protobuf() { + cd $BUILD_protobuf + + push_arm + + try $BUILD_hostpython/hostpython setup.py build + try $BUILD_hostpython/hostpython setup.py install -O2 --root=$BUILD_PATH/python-install --install-lib=lib/python2.7/site-packages + + pop_arm +} + +function postbuild_protobuf() { + true +} From fc3def447c642380ab05294234e299814cbf8ba4 Mon Sep 17 00:00:00 2001 From: Ronaldo Maia Date: Sat, 1 Nov 2014 18:38:51 -0200 Subject: [PATCH 42/51] Add a storm/psycopg2 recipe This should allow using python-storm (https://storm.canonical.com/) and psycopg2 for connecting to a postgresql database. --- recipes/libpq/patches/libpq.patch | 16 +++++++++++ recipes/libpq/recipe.sh | 41 ++++++++++++++++++++++++++++ recipes/psycopg2/recipe.sh | 45 +++++++++++++++++++++++++++++++ recipes/storm/recipe.sh | 41 ++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+) create mode 100644 recipes/libpq/patches/libpq.patch create mode 100644 recipes/libpq/recipe.sh create mode 100644 recipes/psycopg2/recipe.sh create mode 100644 recipes/storm/recipe.sh diff --git a/recipes/libpq/patches/libpq.patch b/recipes/libpq/patches/libpq.patch new file mode 100644 index 0000000000..dd961230bf --- /dev/null +++ b/recipes/libpq/patches/libpq.patch @@ -0,0 +1,16 @@ +diff --git a/src/port/crypt.c b/src/port/crypt.c +index 85b98c5..416c509 100644 +--- a/src/port/crypt.c ++++ b/src/port/crypt.c +@@ -87,7 +87,10 @@ static int des_cipher(const char *in, char *out, long salt, int num_iter); + * define "B64" to be the declaration for a 64 bit integer. + * XXX this feature is currently unused, see "endian" comment below. + */ +-#define B64 __int64 ++//to avoid crypt.c:237: error: expected specifier-qualifier-list before '__int64' when cross compiling for android ++#ifndef ANDROID ++ #define B64 __int64 ++#endif + + /* + * define "LARGEDATA" to get faster permutations, by using about 72 kilobytes diff --git a/recipes/libpq/recipe.sh b/recipes/libpq/recipe.sh new file mode 100644 index 0000000000..887a23c767 --- /dev/null +++ b/recipes/libpq/recipe.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +VERSION_libpq=${VERSION_libpq:-9.3.5} +URL_libpq=http://ftp.postgresql.org/pub/source/v$VERSION_libpq/postgresql-$VERSION_libpq.tar.bz2 +DEPS_libpq=(python) +MD5_libpq=5059857c7d7e6ad83b6d55893a121b59 +BUILD_libpq=$BUILD_PATH/libpq/$(get_directory $URL_libpq) +RECIPE_libpq=$RECIPES_PATH/libpq + +function prebuild_libpq() { + cd $BUILD_libpq + if [ -f .patched ]; then + return + fi + # http://www.postgresql.org/message-id/4ECCD3D9.3040505@bernawebdesign.ch + try patch -p1 < $RECIPE_libpq/patches/libpq.patch + touch .patched +} + +function shouldbuild_libpq() { + if [ -f "$BUILD_libpq/src/interfaces/libpq/libpq.so" ]; then + DO_BUILD=0 + fi +} + +function build_libpq() { + cd $BUILD_libpq + + push_arm + + try ./configure --without-readline --host=arm-linux + try make submake-libpq + try cp -a $BUILD_libpq/src/interfaces/libpq/libpq.a $LIBS_PATH + + pop_arm + +} + +function postbuild_libpq() { + true +} diff --git a/recipes/psycopg2/recipe.sh b/recipes/psycopg2/recipe.sh new file mode 100644 index 0000000000..b34cf75a93 --- /dev/null +++ b/recipes/psycopg2/recipe.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# There is a bug in storm that breaks with newer versions (>= 2.5) +VERSION_psycopg2=${VERSION_psycopg2:-2.4.5} +DEPS_psycopg2=(python libpq) +URL_psycopg2=http://pypi.python.org/packages/source/p/psycopg2/psycopg2-$VERSION_psycopg2.tar.gz +MD5_psycopg2=075e4df465e9a863f288d5bdf6e6887e +BUILD_psycopg2=$BUILD_PATH/psycopg2/$(get_directory $URL_psycopg2) +RECIPE_psycopg2=$RECIPES_PATH/psycopg2 + +# function called for preparing source code if needed +# (you can apply patch etc here.) +function prebuild_psycopg2() { + cd $BUILD_psycopg2 + if [ -f .patched ]; then + return + fi + # Set the correct path where our cross compiled libpq.a is (otherwise it + # will try to link against the system one) + try sed -i "s|pg_config_helper.query(.libdir.)|'$LIBS_PATH'|" setup.py + touch .patched +} + +function shouldbuild_psycopg2() { + if [ -d "$SITEPACKAGES_PATH/psycopg2" ]; then + DO_BUILD=0 + fi +} + +function build_psycopg2() { + cd $BUILD_psycopg2 + push_arm + export LDFLAGS="$LDFLAGS -L$LIBS_PATH" + export EXTRA_CFLAGS="--host linux-armv" + # Statically compile psycopg + try $HOSTPYTHON setup.py build_ext --static-libpq + try $HOSTPYTHON setup.py install -O2 --root=$BUILD_PATH/python-install --install-lib=lib/python2.7/site-packages + pop_arm +} + +# function called after all the compile have been done +function postbuild_psycopg2() { + true +} + diff --git a/recipes/storm/recipe.sh b/recipes/storm/recipe.sh new file mode 100644 index 0000000000..f187b56f7c --- /dev/null +++ b/recipes/storm/recipe.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +VERSION_storm=${VERSION_storm:-0.20} +DEPS_storm=(python) +URL_storm=https://pypi.python.org/packages/source/s/storm/storm-$VERSION_storm.tar.bz2 +MD5_storm=4a9048fed9d1ec472ce73fbe54387054 +BUILD_storm=$BUILD_PATH/storm/$(get_directory $URL_storm) +RECIPE_storm=$RECIPES_PATH/storm + +# function called for preparing source code if needed +# (you can apply patch etc here.) +function prebuild_storm() { + cd $BUILD_storm + wget -nc http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg + if [ -f .patched ]; then + return + fi + # I still dont know how to build the c extensions for android yet. + # Luckly, storm provides a python fallback + try sed -i "s|BUILD_CEXTENSIONS = True|BUILD_CEXTENSIONS = False|" setup.py + touch .patched +} + +function shouldbuild_storm() { + if [ -d "$SITEPACKAGES_PATH/storm" ]; then + DO_BUILD=0 + fi +} + +function build_storm() { + cd $BUILD_storm + push_arm + try $BUILD_hostpython/hostpython setup.py install -O2 --root=$BUILD_PATH/python-install --install-lib=lib/python2.7/site-packages + pop_arm +} + +# function called after all the compile have been done +function postbuild_storm() { + true +} + From 067373b42367ea881b63f3ed53ea350a453702e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=AF=85?= Date: Wed, 5 Nov 2014 16:24:14 +0800 Subject: [PATCH 43/51] add recipe for cprotobuf --- recipes/cprotobuf/recipe.sh | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 recipes/cprotobuf/recipe.sh diff --git a/recipes/cprotobuf/recipe.sh b/recipes/cprotobuf/recipe.sh new file mode 100644 index 0000000000..d8832c2c8c --- /dev/null +++ b/recipes/cprotobuf/recipe.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +VERSION_cprotobuf=${VERSION_cprotobuf:-0.1.3} +URL_cprotobuf=https://pypi.python.org/packages/source/c/cprotobuf/cprotobuf-$VERSION_cprotobuf.tar.gz +DEPS_cprotobuf=(python) +MD5_cprotobuf=c2bf4083eca57f5eb5a481999ea03755 +BUILD_cprotobuf=$BUILD_PATH/cprotobuf/$(get_directory $URL_cprotobuf) +RECIPE_cprotobuf=$RECIPES_PATH/cprotobuf + +function prebuild_cprotobuf() { + true +} + +function shouldbuild_cprotobuf() { + if [ -d "$SITEPACKAGES_PATH/cprotobuf" ]; then + DO_BUILD=0 + fi +} + +function build_cprotobuf() { + cd $BUILD_cprotobuf + + push_arm + + export LDSHARED="$LIBLINK" + + try find . -iname '*.pyx' -exec $CYTHON {} \; + try $HOSTPYTHON setup.py build_ext -v + try find build/lib.* -name "*.o" -exec $STRIP {} \; + + export PYTHONPATH=$BUILD_hostpython/Lib/site-packages + try $BUILD_hostpython/hostpython setup.py install -O2 --root=$BUILD_PATH/python-install --install-lib=lib/python2.7/site-packages + + unset LDSHARED + pop_arm +} + +function postbuild_cprotobuf() { + true +} From c672cfc4d823771742e187c5ad31ab9f10ced640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Thu, 6 Nov 2014 11:39:00 +0100 Subject: [PATCH 44/51] Autodetect cython2 version --- distribute.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/distribute.sh b/distribute.sh index d77d1a571e..bddff2c2cb 100755 --- a/distribute.sh +++ b/distribute.sh @@ -42,6 +42,12 @@ if [ "X$VIRTUALENV_NAME" == "X" ]; then VIRTUALENV_NAME="$(which virtualenv)" fi +# Resolve Cython path +CYTHON="$(which cython2)" +if [ "X$CYTHON" == "X" ]; then + CYTHON="$(which cython)" +fi + # Paths ROOT_PATH="$(dirname $($PYTHON -c 'from __future__ import print_function; import os,sys;print(os.path.realpath(sys.argv[1]))' $0))" RECIPES_PATH="$ROOT_PATH/recipes" @@ -54,7 +60,7 @@ JNI_PATH="$SRC_PATH/jni" DIST_PATH="$ROOT_PATH/dist/default" SITEPACKAGES_PATH="$BUILD_PATH/python-install/lib/python2.7/site-packages/" HOSTPYTHON="$BUILD_PATH/python-install/bin/python.host" -CYTHON="cython -t" +CYTHON+=" -t" # Tools export LIBLINK_PATH="$BUILD_PATH/objects" From f0740c40d1d26e38bfc8dc6345cfc51e398ff821 Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Wed, 12 Nov 2014 21:17:31 +0100 Subject: [PATCH 45/51] Fixes for #297 --- distribute.sh | 8 ++++++-- recipes/audiostream/recipe.sh | 4 ++-- recipes/cymunk/recipe.sh | 2 +- recipes/ffmpeg/recipe.sh | 4 ++-- recipes/kivy/recipe.sh | 2 +- recipes/plyer/recipe.sh | 2 +- recipes/pyjnius/recipe.sh | 2 +- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/distribute.sh b/distribute.sh index bddff2c2cb..99f8e2d942 100755 --- a/distribute.sh +++ b/distribute.sh @@ -552,6 +552,10 @@ function run_get_packages() { try mkdir -p $BUILD_PATH/$module fi + if [ ! -d "$PACKAGES_PATH/$module" ]; then + try mkdir -p "$PACKAGES_PATH/$module" + fi + if [ "X$url" == "X" ]; then debug "No package for $module" continue @@ -561,7 +565,7 @@ function run_get_packages() { marker_filename=".mark-$filename" do_download=1 - cd $PACKAGES_PATH + cd "$PACKAGES_PATH/$module" # check if the file is already present if [ -f $filename ]; then @@ -631,7 +635,7 @@ function run_get_packages() { fi # decompress - pfilename=$PACKAGES_PATH/$filename + pfilename=$PACKAGES_PATH/$module/$filename info "Extract $pfilename" case $pfilename in *.tar.gz|*.tgz ) diff --git a/recipes/audiostream/recipe.sh b/recipes/audiostream/recipe.sh index 31601da643..15cd9019a4 100644 --- a/recipes/audiostream/recipe.sh +++ b/recipes/audiostream/recipe.sh @@ -1,10 +1,10 @@ #!/bin/bash VERSION_audiostream=${VERSION_audiostream:-master} -URL_audiostream=https://github.com/kivy/audiostream/zipball/$VERSION_audiostream/audiostream.zip +URL_audiostream=https://github.com/kivy/audiostream/archive/$VERSION_audiostream.zip DEPS_audiostream=(python sdl pyjnius) MD5_audiostream= -BUILD_audiostream=$BUILD_PATH/audiostream/audiostream +BUILD_audiostream=$BUILD_PATH/audiostream/$(get_directory $URL_audiostream) RECIPE_audiostream=$RECIPES_PATH/audiostream function prebuild_audiostream() { diff --git a/recipes/cymunk/recipe.sh b/recipes/cymunk/recipe.sh index 2254d16df7..e8940ce6fc 100644 --- a/recipes/cymunk/recipe.sh +++ b/recipes/cymunk/recipe.sh @@ -1,7 +1,7 @@ #!/bin/bash VERSION_cymunk=${VERSION_cymunk:-master} -URL_cymunk=http://github.com/tito/cymunk/zipball/$VERSION_cymunk/cymunk.zip +URL_cymunk=http://github.com/tito/cymunk/archive/$VERSION_cymunk.zip DEPS_cymunk=(python) MD5_cymunk= BUILD_cymunk=$BUILD_PATH/cymunk/$(get_directory $URL_cymunk) diff --git a/recipes/ffmpeg/recipe.sh b/recipes/ffmpeg/recipe.sh index 4278274033..7df248c35a 100644 --- a/recipes/ffmpeg/recipe.sh +++ b/recipes/ffmpeg/recipe.sh @@ -3,10 +3,10 @@ # Only h264+aac build are working. VERSION_ffmpeg=${VERSION_ffmpeg:-master} -URL_ffmpeg=https://github.com/tito/ffmpeg-android/zipball/$VERSION_ffmpeg/ffmpeg-android.zip +URL_ffmpeg=https://github.com/tito/ffmpeg-android/archive/$VERSION_ffmpeg.zip DEPS_ffmpeg=(python sdl) MD5_ffmpeg= -BUILD_ffmpeg=$BUILD_PATH/ffmpeg/ffmpeg-android +BUILD_ffmpeg=$BUILD_PATH/ffmpeg/$(get_directory $URL_ffmpeg) RECIPE_ffmpeg=$RECIPES_PATH/ffmpeg function prebuild_ffmpeg() { diff --git a/recipes/kivy/recipe.sh b/recipes/kivy/recipe.sh index 5d8b3638c3..0272e026c4 100644 --- a/recipes/kivy/recipe.sh +++ b/recipes/kivy/recipe.sh @@ -1,7 +1,7 @@ #!/bin/bash VERSION_kivy=${VERSION_kivy:-stable} -URL_kivy=https://github.com/kivy/kivy/zipball/$VERSION_kivy/kivy-$VERSION_kivy.zip +URL_kivy=https://github.com/kivy/kivy/archive/$VERSION_kivy.zip DEPS_kivy=(pygame pyjnius android) MD5_kivy= BUILD_kivy=$BUILD_PATH/kivy/$(get_directory $URL_kivy) diff --git a/recipes/plyer/recipe.sh b/recipes/plyer/recipe.sh index 5d47356cb7..09f49ead89 100644 --- a/recipes/plyer/recipe.sh +++ b/recipes/plyer/recipe.sh @@ -1,7 +1,7 @@ #!/bin/bash VERSION_plyer=${VERSION_plyer:-master} -URL_plyer=https://github.com/kivy/plyer/zipball/$VERSION_plyer/plyer-$VERSION_plyer.zip +URL_plyer=https://github.com/kivy/plyer/archive/$VERSION_plyer.zip DEPS_plyer=(pyjnius android) MD5_plyer= BUILD_plyer=$BUILD_PATH/plyer/$(get_directory $URL_plyer) diff --git a/recipes/pyjnius/recipe.sh b/recipes/pyjnius/recipe.sh index b64fa0cbfe..7616ffc155 100755 --- a/recipes/pyjnius/recipe.sh +++ b/recipes/pyjnius/recipe.sh @@ -1,7 +1,7 @@ #!/bin/bash VERSION_pyjnius=${VERSION_pyjnius:-master} -URL_pyjnius=https://github.com/kivy/pyjnius/zipball/$VERSION_pyjnius/pyjnius-$VERSION_pyjnius.zip +URL_pyjnius=https://github.com/kivy/pyjnius/archive/$VERSION_pyjnius.zip DEPS_pyjnius=(python sdl) MD5_pyjnius= BUILD_pyjnius=$BUILD_PATH/pyjnius/$(get_directory $URL_pyjnius) From 1321842f453b5c1729ec83dd4938a7021affcfc5 Mon Sep 17 00:00:00 2001 From: "Michael V. DePalatis" Date: Thu, 27 Nov 2014 19:09:43 +0100 Subject: [PATCH 46/51] Documentation grammar and spelling fixes --- docs/source/android.rst | 16 ++++++----- docs/source/contribute.rst | 16 +++++------ docs/source/example_helloworld.rst | 13 +++++---- docs/source/examples.rst | 10 +++---- docs/source/faq.rst | 8 ++++-- docs/source/javaapi.rst | 28 ++++++++++--------- docs/source/prerequisites.rst | 35 ++++++++++++++---------- docs/source/usage.rst | 44 ++++++++++++++++-------------- 8 files changed, 93 insertions(+), 77 deletions(-) diff --git a/docs/source/android.rst b/docs/source/android.rst index 98ca12ac9b..112f7e8362 100644 --- a/docs/source/android.rst +++ b/docs/source/android.rst @@ -1,11 +1,13 @@ Python API ========== -The Python for android project includes a Python module called "android". It -consists of multiple parts which are mostly there to facilitate the use of the Java API. +The Python for Android project includes a Python module called +``android`` which consists of multiple parts that are mostly there to +facilitate the use of the Java API. -This module is not designed to be comprehensive. Most of the Java API is also accessible with PyJNIus, -so if you can't find what you need here you can try using the Java API directly instead. +This module is not designed to be comprehensive. Most of the Java API +is also accessible with PyJNIus, so if you can't find what you need +here you can try using the Java API directly instead. Android (``android``) @@ -88,7 +90,7 @@ This billing module gives an access to the `In-App Billing `_ to buy. Let's say you've created a product with the id "org.kivy.gopremium" -#. In your application, you can use the billing module like this:: +#. In your application, you can use the ``billing`` module like this:: from android.billing import BillingService @@ -123,7 +125,7 @@ This billing module gives an access to the `In-App Billing [2] C JNI -> [3] Java -Think about acceleration sensors : you want to get the acceleration values in -python nothing is available natively, but you have a java API for that : the -google API is available here +Think about acceleration sensors: you want to get the acceleration +values in Python, but nothing is available natively. Lukcily you have +a Java API for that : the Google API is available here http://developer.android.com/reference/android/hardware/Sensor.html You can't use it directly, you need to do your own API to use it in python, @@ -82,14 +82,14 @@ Jni gottchas Create your own recipes ----------------------- -A recipe is a script that contain the "definition" of a module to compile. +A recipe is a script that contains the "definition" of a module to compile. The directory layout of a recipe for a is something like:: python-for-android/recipes//recipe.sh python-for-android/recipes//patches/ python-for-android/recipes//patches/fix-path.patch -When building, all the recipe build must go to:: +When building, all the recipe builds must go to:: python-for-android/build// @@ -101,5 +101,5 @@ For example, if you want to create a recipe for sdl, do:: sed -i 's#XXX#sdl#' sdl/recipe.sh Then, edit the sdl/recipe.sh to adjust other information (version, url) and -complete build function. +complete the build function. diff --git a/docs/source/example_helloworld.rst b/docs/source/example_helloworld.rst index d90a2e3944..dab760ad4b 100644 --- a/docs/source/example_helloworld.rst +++ b/docs/source/example_helloworld.rst @@ -7,9 +7,9 @@ with this project. .. note:: - Don't forget that Python for android is not Kivy only, and you might want - to use other toolkit libraries. When other toolkits will be available, this - documentation will be enhanced. + Don't forget that Python for Android is not Kivy only, and you + might want to use other toolkit libraries. When other toolkits + will be available, this documentation will be enhanced. Let's create a simple Hello world application, with one Label and one Button. @@ -55,7 +55,7 @@ Let's create a simple Hello world application, with one Label and one Button. #. Go to the ``python-for-android`` directory -#. Create a distribute with kivy:: +#. Create a distribution with kivy:: ./distribute.sh -m kivy @@ -63,7 +63,8 @@ Let's create a simple Hello world application, with one Label and one Button. cd dist/default -#. Plug your android device, and ensure you can install development application +#. Plug your android device, and ensure you can install development + application #. Build your hello world application in debug mode:: @@ -72,7 +73,7 @@ Let's create a simple Hello world application, with one Label and one Button. #. Take your device, and start the application! -#. If it's goes wrong, open the logcat by doing:: +#. If something goes wrong, open the logcat by doing:: adb logcat diff --git a/docs/source/examples.rst b/docs/source/examples.rst index b89a62e124..4d7408fa0c 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -4,11 +4,11 @@ Examples Prebuilt VirtualBox ------------------- -A good starting point to build an APK are prebuilt VirtualBox images, where -the Android NDK, the Android SDK and the Kivy Python-For-Android sources -are prebuilt in an VirtualBox image. Please search the `Download Section -`__ for -such an image. You will also need to create a device filter for the Android +A good starting point to build an APK are prebuilt VirtualBox images, +where the Android NDK, the Android SDK, and the Kivy +Python-For-Android sources are prebuilt in an VirtualBox image. Please +search the `Download Section `__ for such +an image. You will also need to create a device filter for the Android USB device using the VirtualBox OS settings. .. include:: example_helloworld.rst diff --git a/docs/source/faq.rst b/docs/source/faq.rst index 9d0dd599cc..45202887ee 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -10,9 +10,11 @@ Android. Go to :doc:`prerequisites.rst` to see which one are working. _sqlite3.so not found --------------------- -We recently fixed sqlite3 compilation. In case of, you must: +We recently fixed sqlite3 compilation. In case of this error, you +must: -* Install development headers for sqlite3 if it's not already installed. On Ubuntu: +* Install development headers for sqlite3 if they are not already + installed. On Ubuntu: apt-get install libsqlite3-dev @@ -26,4 +28,4 @@ We recently fixed sqlite3 compilation. In case of, you must: sqlite3/* lib-dynload/_sqlite3.so -And then, sqlite3 will be compiled, and included in your APK. +Then sqlite3 will be compiled and included in your APK. diff --git a/docs/source/javaapi.rst b/docs/source/javaapi.rst index a8c44b5d5e..73fc888f8e 100644 --- a/docs/source/javaapi.rst +++ b/docs/source/javaapi.rst @@ -5,8 +5,9 @@ Using `PyJNIus `__ to access the Android API restricts the usage to a simple call of the **autoclass** constructor function and a second call to instantiate this class. -You can access through this method all Java Android API, e.g. to get the DisplayMetrics -of an Android device could fetched using the following piece of code: +You can access through this method the entire Java Android API, e.g., +the ``DisplayMetrics`` of an Android device could be fetched using the +following piece of code: .. code-block:: python @@ -15,17 +16,18 @@ of an Android device could fetched using the following piece of code: metrics.setToDefaults() self.densityDpi = metrics.densityDpi -You can access all fields and methods as described in the `Java Android -DisplayMetrics API `__ -as shown here with the method `setToDefaults()` and the field `densityDpi`. -Before you use o view a field, you should always call `setToDefaults` to initiate -to the default values of the device. - -Currently only JavaMethod, JavaStaticMethod, JavaField, JavaStaticField -and JavaMultipleMethod are built into PyJNIus, therefore such constructs like -registerListener or something like this have to be coded still in Java. -For this the Android module described below is available to access some of -the hardware in Android devices. +You can access all fields and methods as described in the `Java +Android DisplayMetrics API +`__ +as shown here with the method `setToDefaults()` and the field +`densityDpi`. Before you use a view field, you should always call +`setToDefaults` to initiate to the default values of the device. + +Currently only JavaMethod, JavaStaticMethod, JavaField, +JavaStaticField and JavaMultipleMethod are built into PyJNIus, +therefore such constructs like registerListener or something like this +must still be coded in Java. For this the Android module described +below is available to access some of the hardware on Android devices. .. module:: org.renpy.android diff --git a/docs/source/prerequisites.rst b/docs/source/prerequisites.rst index 54d9366d5e..eb5cd6dcd0 100644 --- a/docs/source/prerequisites.rst +++ b/docs/source/prerequisites.rst @@ -1,18 +1,21 @@ Prerequisites ------------- -.. note:: - There is a VirtualBox Image we provide with the prerequisites along with - Android SDK and NDK preinstalled to ease your installation woes. You can download it from `here `__. +.. note:: There is a VirtualBox Image we provide with the + prerequisites along with the Android SDK and NDK preinstalled to + ease your installation woes. You can download it from `here + `__. .. warning:: - The current version is tested only on Ubuntu oneiric (11.10) and precise - (12.04). If it doesn't work on other platforms, send us patch, not bug - report. Pyhton for Android works on Linux and Mac OSX, not Windows. + The current version is tested only on Ubuntu oneiric (11.10) and + precise (12.04). If it doesn't work on other platforms, send us a + patch, not a bug report. Python for Android works on Linux and Mac + OS X, not Windows. -You need the minimal environment for building python. Note that other libraries -might need other tools (cython is used by some recipes, and ccache to speedup the build):: +You need the minimal environment for building python. Note that other +libraries might need other tools (cython is used by some recipes, and +ccache to speedup the build):: sudo apt-get install build-essential patch git-core ccache ant python-pip python-dev @@ -24,12 +27,13 @@ On debian Squeeze amd64, those packages were found to be necessary :: sudo apt-get install lib32stdc++6 lib32z1 -Ensure you have the latest cython version:: +Ensure you have the latest Cython version:: pip install --upgrade cython -You must have android SDK and NDK. The SDK defines the Android functions you can use. -The NDK is used for compilation. Right now, it's prefered to use: +You must have android SDK and NDK. The SDK defines the Android +functions you can use. The NDK is used for compilation. Right now, +it's preferred to use: - SDK API 8 or 14 (15 will only work with a newly released NDK) - NDK r5b or r7 @@ -42,8 +46,8 @@ You can download them at:: In general, Python for Android currently works with Android 2.3 to L. -If it's your very first time into android SDK, don't forget to follow -documentation for recommended components at:: +If it's your very first time using the Android SDK, don't forget to +follow the documentation for recommended components at:: http://developer.android.com/sdk/installing/adding-packages.html @@ -55,7 +59,8 @@ documentation for recommended components at:: well, so that you can test your application on the full range of Android platform versions that your application supports. -After installing them, export both installation path, NDK version and API to use:: +After installing them, export both installation paths, NDK version, +and API to use:: export ANDROIDSDK=/path/to/android-sdk export ANDROIDNDK=/path/to/android-ndk @@ -68,7 +73,7 @@ After installing them, export both installation path, NDK version and API to use export ANDROIDNDKVER=r7 export ANDROIDAPI=14 -Also, you must configure you're PATH to add the ``android`` binary:: +Also, you must configure your PATH to add the ``android`` binary:: export PATH=$ANDROIDNDK:$ANDROIDSDK/platform-tools:$ANDROIDSDK/tools:$PATH diff --git a/docs/source/usage.rst b/docs/source/usage.rst index d5ecb0b9a0..0b55498cc3 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -4,13 +4,13 @@ Usage Step 1: compile the toolchain ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you want to compile the toolchain with only kivy module:: +If you want to compile the toolchain with only the kivy module:: ./distribute.sh -m "kivy" -After a long time, you'll get a "dist/default" directory containing all the compiled -libraries and build.py script to package your application using thoses -libraries. +After a long time, you'll get a "dist/default" directory containing +all the compiled libraries and a build.py script to package your +application using thoses libraries. You can include other modules (or "recipes") to compile using `-m`:: @@ -23,27 +23,31 @@ You can include other modules (or "recipes") to compile using `-m`:: The list of recipes we currently have is at: https://github.com/kivy/python-for-android/tree/master/recipes -You can also specify a specific version for each package. Please note that the -compilation might **break** if you don't use the default version. Most recipes -have patch to fixes android issues, and might not apply if you specify a -version. We also recommend to clean build/ before changing version.:: +You can also specify a specific version for each package. Please note +that the compilation might **break** if you don't use the default +version. Most recipes have patches to fix Android issues, and might +not apply if you specify a version. We also recommend to clean build +before changing version.:: ./distribute.sh -m "openssl kivy==master" -Python modules that don't need C extrnsions don't need a recipe and can be included this way. -From python-for-android 1.1 on, you can now specify pure-python package into the -distribution. It will use virtualenv and pip to install pure-python modules into the -distribution. Please note that compiler are deactivated, and will break any -module who try to compile something. If compilation is needed, write a recipe:: +Python modules that don't need C extrnsions don't need a recipe and +can be included this way. From python-for-android 1.1 on, you can now +specify pure-python package into the distribution. It will use +virtualenv and pip to install pure-python modules into the +distribution. Please note that the compiler is deactivated, and will +break any module which tries to compile something. If compilation is +needed, write a recipe:: ./distribute.sh -m "requests pygments kivy" .. note:: Recipes download a defined version of their needed package from the - internet, and build from it, if you know what you are doing, and want to - override that, you can export the env variable `P4A_recipe_name_DIR` and - this directory will be copied and used instead. + internet, and build from it. If you know what you are doing, and + want to override that, you can export the env variable + `P4A_recipe_name_DIR` and this directory will be copied and used + instead. Available options to `distribute.sh`:: @@ -57,7 +61,7 @@ Available options to `distribute.sh`:: Step 2: package your application ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Go fo your custom python distribution:: +Go to your custom Python distribution:: cd dist/default @@ -66,16 +70,16 @@ Use the build.py for creating the APK:: ./build.py --package org.test.touchtracer --name touchtracer \ --version 1.0 --dir ~/code/kivy/examples/demo/touchtracer debug -Then, the android package (APK) will be generated at: +Then, the Android package (APK) will be generated at: bin/touchtracer-1.0-debug.apk .. warning:: Some files and modules for python are blacklisted by default to - save a few megabytes on the final apk file, in case your + save a few megabytes on the final APK file. In case your applications doesn't find a standard python module, check the - src/blacklist.txt file remove the module you need from the list, + src/blacklist.txt file, remove the module you need from the list, and try again. Available options to `build.py`:: From 59b90950143456ca5cb90e747175aa373745342c Mon Sep 17 00:00:00 2001 From: Ryan Pessa Date: Tue, 2 Dec 2014 16:02:23 -0600 Subject: [PATCH 47/51] provide api versions in android package --- recipes/android/src/android/_android.pyx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/recipes/android/src/android/_android.pyx b/recipes/android/src/android/_android.pyx index 6db6aeac70..99e51fce2d 100644 --- a/recipes/android/src/android/_android.pyx +++ b/recipes/android/src/android/_android.pyx @@ -172,6 +172,12 @@ cdef extern void android_hide_keyboard() from jnius import autoclass + +# API versions +api_version = autoclass('android.os.Build$VERSION').SDK_INT +version_codes = autoclass('android.os.Build$VERSION_CODES') + + python_act = autoclass('org.renpy.android.PythonActivity') rctx = autoclass('android.graphics.Rect')() mActivity = python_act.mActivity From 6c758d484b60ce469c57f736390b9fda08e21f87 Mon Sep 17 00:00:00 2001 From: Marco Mariani Date: Sat, 27 Dec 2014 20:10:43 +0100 Subject: [PATCH 48/51] libyaml + pyyaml --- recipes/libyaml/recipe.sh | 35 +++++++++++++++++++++++++++++++++ recipes/pyyaml/recipe.sh | 41 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 recipes/libyaml/recipe.sh create mode 100644 recipes/pyyaml/recipe.sh diff --git a/recipes/libyaml/recipe.sh b/recipes/libyaml/recipe.sh new file mode 100644 index 0000000000..93626fbd29 --- /dev/null +++ b/recipes/libyaml/recipe.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +VERSION_libyaml=${VERSION_libyaml:-0.1.5} +URL_libyaml=http://pyyaml.org/download/libyaml/yaml-${VERSION_libyaml}.tar.gz +MD5_libyaml=24f6093c1e840ca5df2eb09291a1dbf1 +BUILD_libyaml=$BUILD_PATH/libyaml/$(get_directory $URL_libyaml) +RECIPE_libyaml=$RECIPES_PATH/libyaml + +function prebuild_libyaml() { + true +} + +function shouldbuild_libxslt() { + if [ -f "$BUILD_libyaml/src/.libs/libyaml.a" ]; then + DO_BUILD=0 + fi +} + +function build_libyaml() { + cd $BUILD_libyaml + + push_arm + + # using arm-linux-eabi does not create a shared library + try ./configure --build=i686-pc-linux-gnu --host=arm-linux-androideabi + try make + + try cp -L $BUILD_libyaml/src/.libs/libyaml.so $LIBS_PATH + + pop_arm +} + +function postbuild_libyaml() { + true +} diff --git a/recipes/pyyaml/recipe.sh b/recipes/pyyaml/recipe.sh new file mode 100644 index 0000000000..23c3476b3b --- /dev/null +++ b/recipes/pyyaml/recipe.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +VERSION_pyyaml=${VERSION_pyyaml:-3.11} +DEPS_pyyaml=(libyaml python) +URL_pyyaml=http://pyyaml.org/download/pyyaml/PyYAML-$VERSION_pyyaml.tar.gz +MD5_pyyaml=f50e08ef0fe55178479d3a618efe21db +BUILD_pyyaml=$BUILD_PATH/pyyaml/$(get_directory $URL_pyyaml) +RECIPE_pyyaml=$RECIPES_PATH/pyyaml + +function prebuild_pyyaml() { + true +} + +function shouldbuild_pyyaml() { + if [ -d "$SITEPACKAGES_PATH/pyyaml" ]; then + DO_BUILD=0 + fi +} + +function build_pyyaml() { + cd $BUILD_pyyaml + push_arm + export CC="$CC -I$BUILD_libyaml/include" + export LDFLAGS="$LDFLAGS -L$LIBS_PATH" + export LDSHARED="$LIBLINK" + export PYTHONPATH=$BUILD_hostpython/Lib/site-packages + + # with C extension + $HOSTPYTHON setup.py --with-libyaml install >/tmp/pyyaml-setup + + # pure python +# $HOSTPYTHON setup.py --without-libyaml install + + unset LDSHARED + pop_arm +} + +function postbuild_pyyaml() { + true +} + From f85933015e3629c4b23666414c238007cd9d9151 Mon Sep 17 00:00:00 2001 From: Marco Mariani Date: Tue, 30 Dec 2014 15:21:26 +0100 Subject: [PATCH 49/51] actually raise an error if virtualenv or pip are missing --- distribute.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/distribute.sh b/distribute.sh index 41f8203bd8..95913b3743 100755 --- a/distribute.sh +++ b/distribute.sh @@ -66,8 +66,8 @@ CYTHON+=" -t" export LIBLINK_PATH="$BUILD_PATH/objects" export LIBLINK="$ROOT_PATH/src/tools/liblink" export BIGLINK="$ROOT_PATH/src/tools/biglink" -export PIP=$PIP_NAME -export VIRTUALENV=$VIRTUALENV_NAME +export PIP=${PIP_NAME:-pip} +export VIRTUALENV=${VIRTUALENV_NAME:-virtualenv} export COPYLIBS=0 @@ -737,7 +737,7 @@ function run_pymodules_install() { debug "We want to install: $PYMODULES" debug "Check if $VIRTUALENV and $PIP are present" - for tool in $VIRTUALENV $PIP; do + for tool in "$VIRTUALENV" "$PIP"; do which $tool &>/dev/null if [ $? -ne 0 ]; then error "Tool $tool is missing" From 462c12f78f703a3a0daee74d892ec611e58b9ec7 Mon Sep 17 00:00:00 2001 From: Alexander Taylor Date: Mon, 7 Apr 2014 17:38:16 +0100 Subject: [PATCH 50/51] Made build.py compatible with python3 --- src/build.py | 31 +- .../EGG-INFO/PKG-INFO | 0 .../EGG-INFO/SOURCES.txt | 0 .../EGG-INFO/dependency_links.txt | 0 .../EGG-INFO/entry_points.txt | 0 .../EGG-INFO/not-zip-safe | 0 .../EGG-INFO/requires.txt | 0 .../EGG-INFO/top_level.txt | 0 .../jinja2/__init__.py | 0 .../jinja2/_speedups.c | 0 .../jinja2/_stringdefs.py | 0 .../jinja2/bccache.py | 0 .../jinja2/compiler.py | 0 .../jinja2/constants.py | 0 .../jinja2/debug.py | 0 .../jinja2/defaults.py | 0 .../jinja2/environment.py | 0 .../jinja2/exceptions.py | 0 .../jinja2/ext.py | 0 .../jinja2/filters.py | 0 .../jinja2/lexer.py | 0 .../jinja2/loaders.py | 0 .../jinja2/meta.py | 0 .../jinja2/nodes.py | 0 .../jinja2/optimizer.py | 0 .../jinja2/parser.py | 0 .../jinja2/runtime.py | 0 .../jinja2/sandbox.py | 0 .../jinja2/tests.py | 0 .../jinja2/utils.py | 0 .../jinja2/visitor.py | 0 src/buildlib/jinja2-py3.egg/EGG-INFO/PKG-INFO | 55 + .../jinja2-py3.egg/EGG-INFO/SOURCES.txt | 126 ++ .../EGG-INFO/dependency_links.txt | 1 + .../jinja2-py3.egg/EGG-INFO/entry_points.txt | 4 + .../jinja2-py3.egg/EGG-INFO/not-zip-safe | 1 + .../jinja2-py3.egg/EGG-INFO/requires.txt | 4 + .../jinja2-py3.egg/EGG-INFO/top_level.txt | 1 + .../jinja2-py3.egg/jinja2/__init__.py | 69 + .../__pycache__/__init__.cpython-34.pyo | Bin 0 -> 2269 bytes .../jinja2/__pycache__/_compat.cpython-34.pyo | Bin 0 -> 4876 bytes .../__pycache__/_stringdefs.cpython-34.pyo | Bin 0 -> 208432 bytes .../jinja2/__pycache__/bccache.cpython-34.pyo | Bin 0 -> 12698 bytes .../__pycache__/compiler.cpython-34.pyo | Bin 0 -> 49406 bytes .../__pycache__/constants.cpython-34.pyo | Bin 0 -> 1678 bytes .../jinja2/__pycache__/debug.cpython-34.pyo | Bin 0 -> 9494 bytes .../__pycache__/defaults.cpython-34.pyo | Bin 0 -> 1354 bytes .../__pycache__/environment.cpython-34.pyo | Bin 0 -> 42103 bytes .../__pycache__/exceptions.cpython-34.pyo | Bin 0 -> 5334 bytes .../jinja2/__pycache__/ext.cpython-34.pyo | Bin 0 -> 22175 bytes .../jinja2/__pycache__/filters.cpython-34.pyo | Bin 0 -> 30170 bytes .../jinja2/__pycache__/lexer.cpython-34.pyo | Bin 0 -> 20117 bytes .../jinja2/__pycache__/loaders.cpython-34.pyo | Bin 0 -> 17265 bytes .../jinja2/__pycache__/meta.cpython-34.pyo | Bin 0 -> 3687 bytes .../jinja2/__pycache__/nodes.cpython-34.pyo | Bin 0 -> 36918 bytes .../__pycache__/optimizer.cpython-34.pyo | Bin 0 -> 2494 bytes .../jinja2/__pycache__/parser.cpython-34.pyo | Bin 0 -> 28002 bytes .../jinja2/__pycache__/runtime.cpython-34.pyo | Bin 0 -> 19904 bytes .../jinja2/__pycache__/sandbox.cpython-34.pyo | Bin 0 -> 10997 bytes .../jinja2/__pycache__/tests.cpython-34.pyo | Bin 0 -> 4122 bytes .../jinja2/__pycache__/utils.cpython-34.pyo | Bin 0 -> 17261 bytes .../jinja2/__pycache__/visitor.cpython-34.pyo | Bin 0 -> 3485 bytes src/buildlib/jinja2-py3.egg/jinja2/_compat.py | 150 ++ .../jinja2-py3.egg/jinja2/_stringdefs.py | 132 ++ src/buildlib/jinja2-py3.egg/jinja2/bccache.py | 337 ++++ .../jinja2-py3.egg/jinja2/compiler.py | 1640 +++++++++++++++++ .../jinja2-py3.egg/jinja2/constants.py | 32 + src/buildlib/jinja2-py3.egg/jinja2/debug.py | 337 ++++ .../jinja2-py3.egg/jinja2/defaults.py | 43 + .../jinja2-py3.egg/jinja2/environment.py | 1191 ++++++++++++ .../jinja2-py3.egg/jinja2/exceptions.py | 146 ++ src/buildlib/jinja2-py3.egg/jinja2/ext.py | 636 +++++++ src/buildlib/jinja2-py3.egg/jinja2/filters.py | 987 ++++++++++ src/buildlib/jinja2-py3.egg/jinja2/lexer.py | 733 ++++++++ src/buildlib/jinja2-py3.egg/jinja2/loaders.py | 471 +++++ src/buildlib/jinja2-py3.egg/jinja2/meta.py | 103 ++ src/buildlib/jinja2-py3.egg/jinja2/nodes.py | 914 +++++++++ .../jinja2-py3.egg/jinja2/optimizer.py | 68 + src/buildlib/jinja2-py3.egg/jinja2/parser.py | 895 +++++++++ src/buildlib/jinja2-py3.egg/jinja2/runtime.py | 581 ++++++ src/buildlib/jinja2-py3.egg/jinja2/sandbox.py | 368 ++++ src/buildlib/jinja2-py3.egg/jinja2/tests.py | 149 ++ src/buildlib/jinja2-py3.egg/jinja2/utils.py | 520 ++++++ src/buildlib/jinja2-py3.egg/jinja2/visitor.py | 87 + 84 files changed, 10801 insertions(+), 11 deletions(-) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/EGG-INFO/PKG-INFO (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/EGG-INFO/SOURCES.txt (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/EGG-INFO/dependency_links.txt (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/EGG-INFO/entry_points.txt (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/EGG-INFO/not-zip-safe (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/EGG-INFO/requires.txt (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/EGG-INFO/top_level.txt (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/__init__.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/_speedups.c (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/_stringdefs.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/bccache.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/compiler.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/constants.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/debug.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/defaults.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/environment.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/exceptions.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/ext.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/filters.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/lexer.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/loaders.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/meta.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/nodes.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/optimizer.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/parser.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/runtime.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/sandbox.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/tests.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/utils.py (100%) rename src/buildlib/{jinja2.egg => jinja2-py2.egg}/jinja2/visitor.py (100%) create mode 100644 src/buildlib/jinja2-py3.egg/EGG-INFO/PKG-INFO create mode 100644 src/buildlib/jinja2-py3.egg/EGG-INFO/SOURCES.txt create mode 100644 src/buildlib/jinja2-py3.egg/EGG-INFO/dependency_links.txt create mode 100644 src/buildlib/jinja2-py3.egg/EGG-INFO/entry_points.txt create mode 100644 src/buildlib/jinja2-py3.egg/EGG-INFO/not-zip-safe create mode 100644 src/buildlib/jinja2-py3.egg/EGG-INFO/requires.txt create mode 100644 src/buildlib/jinja2-py3.egg/EGG-INFO/top_level.txt create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__init__.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/__init__.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/_compat.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/_stringdefs.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/bccache.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/compiler.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/constants.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/debug.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/defaults.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/environment.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/exceptions.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/ext.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/filters.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/lexer.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/loaders.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/meta.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/nodes.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/optimizer.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/parser.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/runtime.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/sandbox.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/tests.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/utils.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/__pycache__/visitor.cpython-34.pyo create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/_compat.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/_stringdefs.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/bccache.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/compiler.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/constants.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/debug.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/defaults.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/environment.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/exceptions.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/ext.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/filters.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/lexer.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/loaders.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/meta.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/nodes.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/optimizer.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/parser.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/runtime.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/sandbox.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/tests.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/utils.py create mode 100644 src/buildlib/jinja2-py3.egg/jinja2/visitor.py diff --git a/src/build.py b/src/build.py index cb8413c468..8893f7156a 100755 --- a/src/build.py +++ b/src/build.py @@ -3,7 +3,10 @@ from os.path import dirname, join, isfile, realpath, relpath, split from zipfile import ZipFile import sys -sys.path.insert(0, 'buildlib/jinja2.egg') + +python_major_version = sys.version_info[0] + +sys.path.insert(0, 'buildlib/jinja2-py{}.egg'.format(python_major_version)) sys.path.insert(0, 'buildlib') from fnmatch import fnmatch @@ -67,10 +70,14 @@ def render(template, dest, **kwargs): template = environment.get_template(template) text = template.render(**kwargs) + if python_major_version == 2: + text = text.encode('utf-8') + else: + text = bytes(text, 'utf-8') - f = file(dest, 'wb') - f.write(text.encode('utf-8')) - f.close() + with open(dest, 'wb') as fileh: + fileh.write(text) + fileh.close() def compile_dir(dfn): @@ -183,7 +190,7 @@ def select(fn): tf = tarfile.open(tfn, 'w:gz', format=tarfile.USTAR_FORMAT) dirs = [] for fn, afn in files: - print '%s: %s' % (tfn, fn) + print('%s: %s' % (tfn, fn)) dn = dirname(afn) if dn not in dirs: # create every dirs first if not exist yet @@ -219,7 +226,9 @@ def make_package(args): args.numeric_version = str(version_code) - args.name = args.name.decode('utf-8') + if python_major_version == 2: + args.name = args.name.decode('utf-8') + if args.icon_name: args.icon_name = args.icon_name.decode('utf-8') @@ -301,8 +310,8 @@ def make_package(args): subprocess.call([ANDROID, 'update', 'project', '-p', '.', '-t', 'android-{}'.format(args.sdk_version)]) except (OSError, IOError): - print 'An error occured while calling', ANDROID, 'update' - print 'Your PATH must include android tools.' + print('An error occured while calling', ANDROID, 'update') + print('Your PATH must include android tools.') sys.exit(-1) # Delete the old assets. @@ -341,7 +350,7 @@ def make_package(args): if args.add_jar: for jarname in args.add_jar: if not os.path.exists(jarname): - print 'Requested jar does not exist: {}'.format(jarname) + print('Requested jar does not exist: {}'.format(jarname)) sys.exit(-1) shutil.copy(jarname, 'libs') @@ -350,8 +359,8 @@ def make_package(args): for arg in args.command: subprocess.check_call([ANT, arg]) except (OSError, IOError): - print 'An error occured while calling', ANT - print 'Did you install ant on your system ?' + print('An error occured while calling', ANT) + print('Did you install ant on your system ?') sys.exit(-1) if __name__ == '__main__': diff --git a/src/buildlib/jinja2.egg/EGG-INFO/PKG-INFO b/src/buildlib/jinja2-py2.egg/EGG-INFO/PKG-INFO similarity index 100% rename from src/buildlib/jinja2.egg/EGG-INFO/PKG-INFO rename to src/buildlib/jinja2-py2.egg/EGG-INFO/PKG-INFO diff --git a/src/buildlib/jinja2.egg/EGG-INFO/SOURCES.txt b/src/buildlib/jinja2-py2.egg/EGG-INFO/SOURCES.txt similarity index 100% rename from src/buildlib/jinja2.egg/EGG-INFO/SOURCES.txt rename to src/buildlib/jinja2-py2.egg/EGG-INFO/SOURCES.txt diff --git a/src/buildlib/jinja2.egg/EGG-INFO/dependency_links.txt b/src/buildlib/jinja2-py2.egg/EGG-INFO/dependency_links.txt similarity index 100% rename from src/buildlib/jinja2.egg/EGG-INFO/dependency_links.txt rename to src/buildlib/jinja2-py2.egg/EGG-INFO/dependency_links.txt diff --git a/src/buildlib/jinja2.egg/EGG-INFO/entry_points.txt b/src/buildlib/jinja2-py2.egg/EGG-INFO/entry_points.txt similarity index 100% rename from src/buildlib/jinja2.egg/EGG-INFO/entry_points.txt rename to src/buildlib/jinja2-py2.egg/EGG-INFO/entry_points.txt diff --git a/src/buildlib/jinja2.egg/EGG-INFO/not-zip-safe b/src/buildlib/jinja2-py2.egg/EGG-INFO/not-zip-safe similarity index 100% rename from src/buildlib/jinja2.egg/EGG-INFO/not-zip-safe rename to src/buildlib/jinja2-py2.egg/EGG-INFO/not-zip-safe diff --git a/src/buildlib/jinja2.egg/EGG-INFO/requires.txt b/src/buildlib/jinja2-py2.egg/EGG-INFO/requires.txt similarity index 100% rename from src/buildlib/jinja2.egg/EGG-INFO/requires.txt rename to src/buildlib/jinja2-py2.egg/EGG-INFO/requires.txt diff --git a/src/buildlib/jinja2.egg/EGG-INFO/top_level.txt b/src/buildlib/jinja2-py2.egg/EGG-INFO/top_level.txt similarity index 100% rename from src/buildlib/jinja2.egg/EGG-INFO/top_level.txt rename to src/buildlib/jinja2-py2.egg/EGG-INFO/top_level.txt diff --git a/src/buildlib/jinja2.egg/jinja2/__init__.py b/src/buildlib/jinja2-py2.egg/jinja2/__init__.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/__init__.py rename to src/buildlib/jinja2-py2.egg/jinja2/__init__.py diff --git a/src/buildlib/jinja2.egg/jinja2/_speedups.c b/src/buildlib/jinja2-py2.egg/jinja2/_speedups.c similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/_speedups.c rename to src/buildlib/jinja2-py2.egg/jinja2/_speedups.c diff --git a/src/buildlib/jinja2.egg/jinja2/_stringdefs.py b/src/buildlib/jinja2-py2.egg/jinja2/_stringdefs.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/_stringdefs.py rename to src/buildlib/jinja2-py2.egg/jinja2/_stringdefs.py diff --git a/src/buildlib/jinja2.egg/jinja2/bccache.py b/src/buildlib/jinja2-py2.egg/jinja2/bccache.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/bccache.py rename to src/buildlib/jinja2-py2.egg/jinja2/bccache.py diff --git a/src/buildlib/jinja2.egg/jinja2/compiler.py b/src/buildlib/jinja2-py2.egg/jinja2/compiler.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/compiler.py rename to src/buildlib/jinja2-py2.egg/jinja2/compiler.py diff --git a/src/buildlib/jinja2.egg/jinja2/constants.py b/src/buildlib/jinja2-py2.egg/jinja2/constants.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/constants.py rename to src/buildlib/jinja2-py2.egg/jinja2/constants.py diff --git a/src/buildlib/jinja2.egg/jinja2/debug.py b/src/buildlib/jinja2-py2.egg/jinja2/debug.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/debug.py rename to src/buildlib/jinja2-py2.egg/jinja2/debug.py diff --git a/src/buildlib/jinja2.egg/jinja2/defaults.py b/src/buildlib/jinja2-py2.egg/jinja2/defaults.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/defaults.py rename to src/buildlib/jinja2-py2.egg/jinja2/defaults.py diff --git a/src/buildlib/jinja2.egg/jinja2/environment.py b/src/buildlib/jinja2-py2.egg/jinja2/environment.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/environment.py rename to src/buildlib/jinja2-py2.egg/jinja2/environment.py diff --git a/src/buildlib/jinja2.egg/jinja2/exceptions.py b/src/buildlib/jinja2-py2.egg/jinja2/exceptions.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/exceptions.py rename to src/buildlib/jinja2-py2.egg/jinja2/exceptions.py diff --git a/src/buildlib/jinja2.egg/jinja2/ext.py b/src/buildlib/jinja2-py2.egg/jinja2/ext.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/ext.py rename to src/buildlib/jinja2-py2.egg/jinja2/ext.py diff --git a/src/buildlib/jinja2.egg/jinja2/filters.py b/src/buildlib/jinja2-py2.egg/jinja2/filters.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/filters.py rename to src/buildlib/jinja2-py2.egg/jinja2/filters.py diff --git a/src/buildlib/jinja2.egg/jinja2/lexer.py b/src/buildlib/jinja2-py2.egg/jinja2/lexer.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/lexer.py rename to src/buildlib/jinja2-py2.egg/jinja2/lexer.py diff --git a/src/buildlib/jinja2.egg/jinja2/loaders.py b/src/buildlib/jinja2-py2.egg/jinja2/loaders.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/loaders.py rename to src/buildlib/jinja2-py2.egg/jinja2/loaders.py diff --git a/src/buildlib/jinja2.egg/jinja2/meta.py b/src/buildlib/jinja2-py2.egg/jinja2/meta.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/meta.py rename to src/buildlib/jinja2-py2.egg/jinja2/meta.py diff --git a/src/buildlib/jinja2.egg/jinja2/nodes.py b/src/buildlib/jinja2-py2.egg/jinja2/nodes.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/nodes.py rename to src/buildlib/jinja2-py2.egg/jinja2/nodes.py diff --git a/src/buildlib/jinja2.egg/jinja2/optimizer.py b/src/buildlib/jinja2-py2.egg/jinja2/optimizer.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/optimizer.py rename to src/buildlib/jinja2-py2.egg/jinja2/optimizer.py diff --git a/src/buildlib/jinja2.egg/jinja2/parser.py b/src/buildlib/jinja2-py2.egg/jinja2/parser.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/parser.py rename to src/buildlib/jinja2-py2.egg/jinja2/parser.py diff --git a/src/buildlib/jinja2.egg/jinja2/runtime.py b/src/buildlib/jinja2-py2.egg/jinja2/runtime.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/runtime.py rename to src/buildlib/jinja2-py2.egg/jinja2/runtime.py diff --git a/src/buildlib/jinja2.egg/jinja2/sandbox.py b/src/buildlib/jinja2-py2.egg/jinja2/sandbox.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/sandbox.py rename to src/buildlib/jinja2-py2.egg/jinja2/sandbox.py diff --git a/src/buildlib/jinja2.egg/jinja2/tests.py b/src/buildlib/jinja2-py2.egg/jinja2/tests.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/tests.py rename to src/buildlib/jinja2-py2.egg/jinja2/tests.py diff --git a/src/buildlib/jinja2.egg/jinja2/utils.py b/src/buildlib/jinja2-py2.egg/jinja2/utils.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/utils.py rename to src/buildlib/jinja2-py2.egg/jinja2/utils.py diff --git a/src/buildlib/jinja2.egg/jinja2/visitor.py b/src/buildlib/jinja2-py2.egg/jinja2/visitor.py similarity index 100% rename from src/buildlib/jinja2.egg/jinja2/visitor.py rename to src/buildlib/jinja2-py2.egg/jinja2/visitor.py diff --git a/src/buildlib/jinja2-py3.egg/EGG-INFO/PKG-INFO b/src/buildlib/jinja2-py3.egg/EGG-INFO/PKG-INFO new file mode 100644 index 0000000000..2c6a330a11 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/EGG-INFO/PKG-INFO @@ -0,0 +1,55 @@ +Metadata-Version: 1.1 +Name: Jinja2 +Version: 2.7.2 +Summary: A small but fast and easy to use stand-alone template engine written in pure python. +Home-page: http://jinja.pocoo.org/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +License: BSD +Description: + Jinja2 + ~~~~~~ + + Jinja2 is a template engine written in pure Python. It provides a + `Django`_ inspired non-XML syntax but supports inline expressions and + an optional `sandboxed`_ environment. + + Nutshell + -------- + + Here a small example of a Jinja template:: + + {% extends 'base.html' %} + {% block title %}Memberlist{% endblock %} + {% block content %} + + {% endblock %} + + Philosophy + ---------- + + Application logic is for the controller but don't try to make the life + for the template designer too hard by giving him too few functionality. + + For more informations visit the new `Jinja2 webpage`_ and `documentation`_. + + .. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security) + .. _Django: http://www.djangoproject.com/ + .. _Jinja2 webpage: http://jinja.pocoo.org/ + .. _documentation: http://jinja.pocoo.org/2/documentation/ + +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup :: HTML diff --git a/src/buildlib/jinja2-py3.egg/EGG-INFO/SOURCES.txt b/src/buildlib/jinja2-py3.egg/EGG-INFO/SOURCES.txt new file mode 100644 index 0000000000..a27a9c434d --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/EGG-INFO/SOURCES.txt @@ -0,0 +1,126 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +Makefile +README.rst +run-tests.py +setup.cfg +setup.py +Jinja2.egg-info/PKG-INFO +Jinja2.egg-info/SOURCES.txt +Jinja2.egg-info/dependency_links.txt +Jinja2.egg-info/entry_points.txt +Jinja2.egg-info/not-zip-safe +Jinja2.egg-info/requires.txt +Jinja2.egg-info/top_level.txt +artwork/jinjalogo.svg +docs/Makefile +docs/api.rst +docs/cache_extension.py +docs/changelog.rst +docs/conf.py +docs/contents.rst.inc +docs/extensions.rst +docs/faq.rst +docs/index.rst +docs/integration.rst +docs/intro.rst +docs/jinjaext.py +docs/jinjastyle.sty +docs/latexindex.rst +docs/logo.pdf +docs/sandbox.rst +docs/switching.rst +docs/templates.rst +docs/tricks.rst +docs/_static/.ignore +docs/_static/jinja-small.png +docs/_templates/sidebarintro.html +docs/_templates/sidebarlogo.html +docs/_themes/LICENSE +docs/_themes/README +docs/_themes/jinja/layout.html +docs/_themes/jinja/relations.html +docs/_themes/jinja/theme.conf +docs/_themes/jinja/static/jinja.css_t +examples/bench.py +examples/profile.py +examples/basic/cycle.py +examples/basic/debugger.py +examples/basic/inheritance.py +examples/basic/test.py +examples/basic/test_filter_and_linestatements.py +examples/basic/test_loop_filter.py +examples/basic/translate.py +examples/basic/templates/broken.html +examples/basic/templates/subbroken.html +examples/rwbench/djangoext.py +examples/rwbench/rwbench.py +examples/rwbench/django/_form.html +examples/rwbench/django/_input_field.html +examples/rwbench/django/_textarea.html +examples/rwbench/django/index.html +examples/rwbench/django/layout.html +examples/rwbench/genshi/helpers.html +examples/rwbench/genshi/index.html +examples/rwbench/genshi/layout.html +examples/rwbench/jinja/helpers.html +examples/rwbench/jinja/index.html +examples/rwbench/jinja/layout.html +examples/rwbench/mako/helpers.html +examples/rwbench/mako/index.html +examples/rwbench/mako/layout.html +ext/djangojinja2.py +ext/inlinegettext.py +ext/jinja.el +ext/Vim/jinja.vim +ext/django2jinja/django2jinja.py +ext/django2jinja/example.py +ext/django2jinja/templates/index.html +ext/django2jinja/templates/layout.html +ext/django2jinja/templates/subtemplate.html +jinja2/__init__.py +jinja2/_compat.py +jinja2/_stringdefs.py +jinja2/bccache.py +jinja2/compiler.py +jinja2/constants.py +jinja2/debug.py +jinja2/defaults.py +jinja2/environment.py +jinja2/exceptions.py +jinja2/ext.py +jinja2/filters.py +jinja2/lexer.py +jinja2/loaders.py +jinja2/meta.py +jinja2/nodes.py +jinja2/optimizer.py +jinja2/parser.py +jinja2/runtime.py +jinja2/sandbox.py +jinja2/tests.py +jinja2/utils.py +jinja2/visitor.py +jinja2/testsuite/__init__.py +jinja2/testsuite/api.py +jinja2/testsuite/bytecode_cache.py +jinja2/testsuite/core_tags.py +jinja2/testsuite/debug.py +jinja2/testsuite/doctests.py +jinja2/testsuite/ext.py +jinja2/testsuite/filters.py +jinja2/testsuite/imports.py +jinja2/testsuite/inheritance.py +jinja2/testsuite/lexnparse.py +jinja2/testsuite/loader.py +jinja2/testsuite/regression.py +jinja2/testsuite/security.py +jinja2/testsuite/tests.py +jinja2/testsuite/utils.py +jinja2/testsuite/res/__init__.py +jinja2/testsuite/res/templates/broken.html +jinja2/testsuite/res/templates/syntaxerror.html +jinja2/testsuite/res/templates/test.html +jinja2/testsuite/res/templates/foo/test.html \ No newline at end of file diff --git a/src/buildlib/jinja2-py3.egg/EGG-INFO/dependency_links.txt b/src/buildlib/jinja2-py3.egg/EGG-INFO/dependency_links.txt new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/EGG-INFO/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/buildlib/jinja2-py3.egg/EGG-INFO/entry_points.txt b/src/buildlib/jinja2-py3.egg/EGG-INFO/entry_points.txt new file mode 100644 index 0000000000..32e6b75302 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/EGG-INFO/entry_points.txt @@ -0,0 +1,4 @@ + + [babel.extractors] + jinja2 = jinja2.ext:babel_extract[i18n] + \ No newline at end of file diff --git a/src/buildlib/jinja2-py3.egg/EGG-INFO/not-zip-safe b/src/buildlib/jinja2-py3.egg/EGG-INFO/not-zip-safe new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/EGG-INFO/not-zip-safe @@ -0,0 +1 @@ + diff --git a/src/buildlib/jinja2-py3.egg/EGG-INFO/requires.txt b/src/buildlib/jinja2-py3.egg/EGG-INFO/requires.txt new file mode 100644 index 0000000000..ccd0e9212c --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/EGG-INFO/requires.txt @@ -0,0 +1,4 @@ +markupsafe + +[i18n] +Babel>=0.8 \ No newline at end of file diff --git a/src/buildlib/jinja2-py3.egg/EGG-INFO/top_level.txt b/src/buildlib/jinja2-py3.egg/EGG-INFO/top_level.txt new file mode 100644 index 0000000000..7f7afbf3bf --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/EGG-INFO/top_level.txt @@ -0,0 +1 @@ +jinja2 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__init__.py b/src/buildlib/jinja2-py3.egg/jinja2/__init__.py new file mode 100644 index 0000000000..6d0e988280 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/__init__.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +""" + jinja2 + ~~~~~~ + + Jinja2 is a template engine written in pure Python. It provides a + Django inspired non-XML syntax but supports inline expressions and + an optional sandboxed environment. + + Nutshell + -------- + + Here a small example of a Jinja2 template:: + + {% extends 'base.html' %} + {% block title %}Memberlist{% endblock %} + {% block content %} + + {% endblock %} + + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +__docformat__ = 'restructuredtext en' +__version__ = '2.7.2' + +# high level interface +from jinja2.environment import Environment, Template + +# loaders +from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, \ + DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader, \ + ModuleLoader + +# bytecode caches +from jinja2.bccache import BytecodeCache, FileSystemBytecodeCache, \ + MemcachedBytecodeCache + +# undefined types +from jinja2.runtime import Undefined, DebugUndefined, StrictUndefined + +# exceptions +from jinja2.exceptions import TemplateError, UndefinedError, \ + TemplateNotFound, TemplatesNotFound, TemplateSyntaxError, \ + TemplateAssertionError + +# decorators and public utilities +from jinja2.filters import environmentfilter, contextfilter, \ + evalcontextfilter +from jinja2.utils import Markup, escape, clear_caches, \ + environmentfunction, evalcontextfunction, contextfunction, \ + is_undefined + +__all__ = [ + 'Environment', 'Template', 'BaseLoader', 'FileSystemLoader', + 'PackageLoader', 'DictLoader', 'FunctionLoader', 'PrefixLoader', + 'ChoiceLoader', 'BytecodeCache', 'FileSystemBytecodeCache', + 'MemcachedBytecodeCache', 'Undefined', 'DebugUndefined', + 'StrictUndefined', 'TemplateError', 'UndefinedError', 'TemplateNotFound', + 'TemplatesNotFound', 'TemplateSyntaxError', 'TemplateAssertionError', + 'ModuleLoader', 'environmentfilter', 'contextfilter', 'Markup', 'escape', + 'environmentfunction', 'contextfunction', 'clear_caches', 'is_undefined', + 'evalcontextfilter', 'evalcontextfunction' +] diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/__init__.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/__init__.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..b07d20c43f50257317ffe55737e70617ef7a1fe1 GIT binary patch literal 2269 zcma)7TTdHD6#lrFi?I#nV(wue5O6MbN+MOVC~6aknkt}3q*666)_P~ao9ygbJF^rL z(TDz!zV|QfLtpyTm;Qi0^~|nqOjJc(%b$0?Gv~}X-<%o$T`1;*t=+RfCV)RN@GyG+ zmcIJeAwU3}a0q+|Vi3jDd=IJ$UL~I?hyp|rq69GwF#}PCn1z^wn1@(^s6Z@2EI}+o ztU#_Jo^9^!%$do4h(Pv3t?Y36C>Fe6pRcZ_5*xbOnWevUk2WWcc{}x7Vf}1~tZB8`g=! zOHW90OT!$!cY=$MX6lX?Nx_0Jc=FT98>X)V<6N;;Y?zKaoiH+*CiynHyy`?!YcC8a zNFdTMPQb#BAM*Sw-={Sk zDoL{NoTzT8y($}x%)yHDX@{m#sY0{emZN2@ZIr*uc5c!Ix-(jS=zd_vGZb*==0vKN zjC@ZU>rAPp*8lQw!+=7Y!Dx&f#QtGFc$&a@7_nH($jWVh^<4*Y@x8+XhqWVl{>|2> zPwAvu9Qo|#X6vv&CeOf8lE{O)b9hiEr@QM=u6C(`Oeu7IFrCi|%4BM|VdpyXF50HS z_S`DlfBMx^*1Bem#YTp4KDU@y*&9y2W^d-M9`@#)zyvrDUxwn#|h zc)qUXKh9Abm?(A)^_VcU4J+o#ouB>#eT>rLng z86`8XJYSw&Yuey0Q+(^VADoNcg#3}`ny#tzDh^!RY29(*Ey?O#^+qq-A(hY@orEIx zyQAtzQhaf3q#FwP(sA1|S-f5MuAxFb;@Teh?r-W$ILf%5bLeWCW!nB1M3uOzl7UnF> zTUfAAv9M@i%EFR`Wecko)-2q!z$~m=*tD=>VT0hb`Y0K1Hbv+*o4lC5P}?iVG@Hp( zvw2Bpo1`Y&Y<4Nv26VZtjhDJsKW%UQe`>Y)_WfFJs{3aG^vzKm7*EO11mWdgPFJo> zuVVdWjr#GjzR&}5SwVQA8!t9=+6NR&bxUQml4V+28Le`3bvK*8BigYR3;#T;$2y|B ztX1!%e?re{&+FPV@<}H<;kuqJQ*SoCz$2k+o$F-cK&1!w&~BODCKwx{&q!sYky{&G V8>!{ihM(sOLxrJ9`dFMM{1@%XV(tI{ literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/_compat.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/_compat.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..f2b484d7a7fb5eb6723c511b32f08091b17ac7cc GIT binary patch literal 4876 zcmbtXTXWRd5pIpfGoJAn1HN!GAnteGF2zX%!D&Ea5s#GZ&>5MH~Bh4Pk z;Bhv2SW{si@|Zu7Kaz+11ij`ZTb0UlDo^>kH8Z|Ips2{6R-ZoS^!;=n{i`-yjm}r< zE9@+hGAa2tsWRDvq$*@rNez)*W7q_{Ve-qp#RteA?BOHiS9Ju;bCfx zl08bTF|xb6vgFS!%*Utc0%lVj$2p$ALiC9PcZAzNhpd3NMJdJ4(ZXaZ(q_ zKTO*O8SLdz3NKOXIIG;6WR+V-*$6|4+Wr{%?$e{21ljNTg!bjAB80d1E!jGwSh3uhSy!L%?~C@=#oKuXMzJws}S)^d1_)OBi_yhXS^^x@ev%ob41(l(~%$UjT|IgxdP z)J;-1*nInw9!@g+REBf3O|*7PD4%sH7_Q9=f4QuX$s4%_Rz#sP$!c%?|S)d(6S)agT{G&%;xo<*Cc=IfJNb;aLl! zHFtK}@#0q7O@;J_Jx^6=%W+Ft?au5>yEA9yYlB7*25HAiHrnl2r&hyFlyAk6{ufFo0p{YSl?0ns5?e17W}{1~wd%f5RvKHrYOAQnpsl>18F*HApYXum zAf3+jnfKy$M+Ymb>AbbrL#^3s*XOK8$4Xa~^(7l-rOItxu@a@MFTVNu(bHcoPYbL0 zFz{5AsCnz&^8I}N$)j*B{O+YX1YO{Zg;Z5+o9WP`0m0XW{)4~62Knmtffdl2qYB+)(p;C917NCs*n{S zMrXx!)k#<@e@81l(BpX=h)DQA=DLiHS?PrvZYXfq6=vACdWZjs|BL?sENH!p{bY|l z%q`#Rq$*i@nhh=^Bcqk2ryeWB55M~k`xt{CaK-@(v|b^7Mur9t;XIUtNEQG=AM5&Z z*x_XGR0C0Sob15MAYI*|Oqq5eZD#}Gj;xS2_PHV}Yo*;FK`Vf}IhJIM7>5mg7}y@q z_mhhKi=={fEQ^$d~Ipg+;kPMjt{mp3hc~<*8ktaR2oFsXQ{LdhM`r&M= z%=W$6aqGhwSD5kp(&Doo->HHg1}=vK5+gCz#x_X%PH})>G09GyEi{wBl z!QO2yC58Idz((49r_Gf+|yWA8}E$IKT$+Pb*QtTcAGWkf5}x5Lduhbb7RGxl?H_~vM@w@Ne1{oz=8WH7 zc3e{ydBy_B3vddT6$tTRKgw;FJ&3_>FPd33NP;Ly-N;i}x$94T3S5vAgUBuwxh=Kd z=8@dnPH+Ahi|$pDVMCwC`0eJt<W=t4cQ}4BAx+}FlRhG5@nK+MC$7#j>M#y;0alYShL)HdI z=^`ZXLL9ablfZ%~Kqt{GUbI1-oMQZ=9zi;IR_Qws?#Pv_85R8LYZ%)j=+3wey1L_t z<8xMK&PDj~vNr{=>D?CE7w{VvAW^EGE^Gdp#Azsh<+j_X6nm0}6Z0;wo&?yPH2rFa zkIOtWvVybNPhLL%{TjfM5O)q{uAh+=6BRaPkOR@O1O-=P|9318KiaA|i_TCda<`tX)c{y@QOjLBc zlJf0^$965R|1wDQ7_`>o47ht{rFP)0hYGbR)-|Sb1Gf*!HXCm6Jcs)5;QEe(O zlS@Y$$LQDGE3!%*2kU{>v6f8DhP*fomB-%+iRP+e4?`Qy+}y@&Xo(L>DqFI_ZxW^N z2VQDd7=9IO22ob@fo7$+u?9YpADY7{XV)I)NXu7<`0v1qit?+0u$Q#6hw`ixiX3+7 z(y)c!5{AmxaDG<>wdr+3>!c0)z|P%PRt}~Oq>q#`dC7jewxL6O$V|6g4FkAj+ZB*d zX^?J+zszdB)7hnTRV&xmd=W$BWdLvJc^=pNjaCaESNW2+92a~5<&|uK6Cn9BK*^{T zMsa7ZnI&9-_^(o^8TbR7FiM4yfgUw~k961Z{LZRsVG?U=1NZ|pjjAzh94gkvOk)gK e%{X3~DDV!xn;$kz(1wkJppTjPit+9{AN?0a2j&F; literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/_stringdefs.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/_stringdefs.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..bc6a7d38e42856ec1d71d5023f348dc59383c066 GIT binary patch literal 208432 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%0DarqWr7!3+3OGe^>rP`A_A)l>b)#NBLjn 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≠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%0A-O=6CJ{m}i= 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 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/bccache.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/bccache.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..d88783d7e9892b13a4bc6db04d2ca333ba25fb52 GIT binary patch literal 12698 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 Ke;Gx4@X@~)b6a5m literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/debug.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/debug.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..7d0f1aedc6059f0589a17961a1a3ee246cbd30f0 GIT binary patch literal 9494 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 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/environment.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/environment.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..3f126b6e1dbe379e7062ab736f3b8db48e082d67 GIT binary patch literal 42103 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 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/ext.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/ext.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..afb6283e0971199524ea51f5a4f9c6083cda4536 GIT binary patch literal 22175 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𝔧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 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/lexer.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/lexer.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..b0b257f21fd335aaec4cf6501263ae42edac4567 GIT binary patch literal 20117 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 A(*OVf literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/loaders.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/loaders.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..f892cdb986c2435af9bd1d6ac4e7d2f664963638 GIT binary patch literal 17265 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 bE8Af%f9^V|ZCcW_)bMW8zv}(ltsnds6Cw3d literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/nodes.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/nodes.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..64fdd707c6671c3c8d0ffc54444e5bdeab09e8a5 GIT binary patch literal 36918 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 T;eMUGHG;bHfTEOQcD?%lvq9Wy literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/optimizer.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/optimizer.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..ee3e61ca1f223b68c37a3e3c0e4584dd38d47d76 GIT binary patch literal 2494 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 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/sandbox.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/sandbox.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..88fb5fbc12c51732017911da5f0f743eee39d486 GIT binary patch literal 10997 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 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/tests.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/tests.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..2588e2484eff154e2c73042e0095f238ddfb57cf GIT binary patch literal 4122 zcmb_fTXWmS6+R$%7j{j^GD$IMCRh;lEp}&E)32u3ZKA z7c5;a%D=$d{M`YN06sn)kR^y6@KL~j7vd5OUGQCSs9%P-48sce6&O~*ufnhfehnPu zz+oL^1-`?n4Ny%`4VG6xwZLBmSp`{xzu_ipAaP`a<#muvkSi>2fNX(WW%&|F9JbE# z4?yClODtaoiQUUA{}3epUt#$Q$W4$}Sw`VUAm3y8D##y$yv8!Vybkhxmfr(;1LRLw z#sLE42P|I$c@yL9c*xy2iTxd9%6(0Kf(sFeGHHN_sRa<_9xSSHU(aXQF0hO@~kq} z@Qc4JT}^)TTN)y0gy@fx&_-!uJn^|vQoM}pK-hs2HzRXXq$8yRn`$qg*9p_nL`Me$ z+Ywt~TReL3@PXK$@c4YqT@?&H-lG#op-PPEh+lPo{gE(AiRZt0^7KXbspzL#3{$Oy zR5plW<2Bz9#a^_XtnqmwRX<9UY`a;*s#msWCnJ@$jMY(cz#WsV4ujEX-kq+0z5Ur& z^8VIW9zNTj-42nPd{JA%`w8A=4IkeyT{qEQM`SX0dg~9$j&&le9xD;`S(D>HN5OuK zeIrsSy*ISP8(QlhfDkLkK|EHvj(vXo_rcEC=$$y)-x*EpAWc5@KG`vmRokN=JPHn! z*~yP&hmXV?O|m*kJzV=LE@EhTDCre^z60{x7a&*1D)Dp`7u5uvp|%~}n8~>UP3)4L z5e`kbj@=oa7Rn)GLxEblmo52?1DojJY{}Ae`^i9sM`Xi5EL%`U$B~K1oJf>FB;(<} z(%urL5@YgR{IW2rW?&l(Y`((&U46y%0H2ty}m=bp3pQWuDJ6pI{*!$i|HcL#n_H`{dzI++r?;H zQpHAne}M%blhmTuu!GDup=pUkFt{O{jl zXdKlsV3ej8xm}Vb%6oCKx6!yymmpj^69R$Djf08u5D5(k#F>700h#0UrP5)5F`bM< zzLC`;!*9)B_3{_qQ)$C ze9MzrGN>QGXsQjCh{t77}s=OP867d5L8Qf#uhj_BGWG zdC+{ei(%7^Rg$grdI!ql*I}=BhO(PQ%eRuzz|^E&>(i zWDZo$^goMyoQQ(wqZDm#DBe?gFu_oXp~6ZG6SI_B8T>Q|5)ojQ!SKqA%4fbyO6;ep z7g%&AjMZF2(LR9@{os_`MmTVSSWM6=h~o({hraDSqgi{Ht&)RS*)(BLl#rIQ9`*B( zn->#Vg%x6Gk?a`J89I0 zI0cq-r>1nEDI(@EE5gMaIfR~8S($#M_)V=2)GPjtqKP?v?$R?fT;Xf-X-#Lr^$?dH znv%b!JgX_CX^OWTjyce=(=$i;a5dYrvir2V+g&0!{~Y0>x&G-emE&0boOJAA>rTt9x~&TTT`F4Y)$wk%R$Gl$#dT`u{{0VUTd(v0 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/utils.cpython-34.pyo b/src/buildlib/jinja2-py3.egg/jinja2/__pycache__/utils.cpython-34.pyo new file mode 100644 index 0000000000000000000000000000000000000000..74d778edfa1391e2bc663800ed07ded25c24a601 GIT binary patch literal 17261 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 literal 0 HcmV?d00001 diff --git a/src/buildlib/jinja2-py3.egg/jinja2/_compat.py b/src/buildlib/jinja2-py3.egg/jinja2/_compat.py new file mode 100644 index 0000000000..8fa8a49a0a --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/_compat.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +""" + jinja2._compat + ~~~~~~~~~~~~~~ + + Some py2/py3 compatibility support based on a stripped down + version of six so we don't have to depend on a specific version + of it. + + :copyright: Copyright 2013 by the Jinja team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +import sys + +PY2 = sys.version_info[0] == 2 +PYPY = hasattr(sys, 'pypy_translation_info') +_identity = lambda x: x + + +if not PY2: + unichr = chr + range_type = range + text_type = str + string_types = (str,) + + iterkeys = lambda d: iter(d.keys()) + itervalues = lambda d: iter(d.values()) + iteritems = lambda d: iter(d.items()) + + import pickle + from io import BytesIO, StringIO + NativeStringIO = StringIO + + def reraise(tp, value, tb=None): + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + + ifilter = filter + imap = map + izip = zip + intern = sys.intern + + implements_iterator = _identity + implements_to_string = _identity + encode_filename = _identity + get_next = lambda x: x.__next__ + +else: + unichr = unichr + text_type = unicode + range_type = xrange + string_types = (str, unicode) + + iterkeys = lambda d: d.iterkeys() + itervalues = lambda d: d.itervalues() + iteritems = lambda d: d.iteritems() + + import cPickle as pickle + from cStringIO import StringIO as BytesIO, StringIO + NativeStringIO = BytesIO + + exec('def reraise(tp, value, tb=None):\n raise tp, value, tb') + + from itertools import imap, izip, ifilter + intern = intern + + def implements_iterator(cls): + cls.next = cls.__next__ + del cls.__next__ + return cls + + def implements_to_string(cls): + cls.__unicode__ = cls.__str__ + cls.__str__ = lambda x: x.__unicode__().encode('utf-8') + return cls + + get_next = lambda x: x.next + + def encode_filename(filename): + if isinstance(filename, unicode): + return filename.encode('utf-8') + return filename + +try: + next = next +except NameError: + def next(it): + return it.next() + + +def with_metaclass(meta, *bases): + # This requires a bit of explanation: the basic idea is to make a + # dummy metaclass for one level of class instanciation that replaces + # itself with the actual metaclass. Because of internal type checks + # we also need to make sure that we downgrade the custom metaclass + # for one level to something closer to type (that's why __call__ and + # __init__ comes back from type etc.). + # + # This has the advantage over six.with_metaclass in that it does not + # introduce dummy classes into the final MRO. + class metaclass(meta): + __call__ = type.__call__ + __init__ = type.__init__ + def __new__(cls, name, this_bases, d): + if this_bases is None: + return type.__new__(cls, name, (), d) + return meta(name, bases, d) + return metaclass('temporary_class', None, {}) + + +try: + from collections import Mapping as mapping_types +except ImportError: + import UserDict + mapping_types = (UserDict.UserDict, UserDict.DictMixin, dict) + + +# common types. These do exist in the special types module too which however +# does not exist in IronPython out of the box. Also that way we don't have +# to deal with implementation specific stuff here +class _C(object): + def method(self): pass +def _func(): + yield None +function_type = type(_func) +generator_type = type(_func()) +method_type = type(_C().method) +code_type = type(_C.method.__code__) +try: + raise TypeError() +except TypeError: + _tb = sys.exc_info()[2] + traceback_type = type(_tb) + frame_type = type(_tb.tb_frame) + + +try: + from urllib.parse import quote_from_bytes as url_quote +except ImportError: + from urllib import quote as url_quote + + +try: + from thread import allocate_lock +except ImportError: + try: + from threading import Lock as allocate_lock + except ImportError: + from dummy_thread import allocate_lock diff --git a/src/buildlib/jinja2-py3.egg/jinja2/_stringdefs.py b/src/buildlib/jinja2-py3.egg/jinja2/_stringdefs.py new file mode 100644 index 0000000000..da5830e9f1 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/_stringdefs.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +""" + jinja2._stringdefs + ~~~~~~~~~~~~~~~~~~ + + Strings of all Unicode characters of a certain category. + Used for matching in Unicode-aware languages. Run to regenerate. + + Inspired by chartypes_create.py from the MoinMoin project, original + implementation from Pygments. + + :copyright: Copyright 2006-2009 by the Jinja team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from jinja2._compat import unichr + +Cc = u'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f' + +Cf = u'\xad\u0600\u0601\u0602\u0603\u06dd\u070f\u17b4\u17b5\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb' + +Cn = u'\u0242\u0243\u0244\u0245\u0246\u0247\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u0370\u0371\u0372\u0373\u0376\u0377\u0378\u0379\u037b\u037c\u037d\u037f\u0380\u0381\u0382\u0383\u038b\u038d\u03a2\u03cf\u0487\u04cf\u04fa\u04fb\u04fc\u04fd\u04fe\u04ff\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519\u051a\u051b\u051c\u051d\u051e\u051f\u0520\u0521\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052a\u052b\u052c\u052d\u052e\u052f\u0530\u0557\u0558\u0560\u0588\u058b\u058c\u058d\u058e\u058f\u0590\u05ba\u05c8\u05c9\u05ca\u05cb\u05cc\u05cd\u05ce\u05cf\u05eb\u05ec\u05ed\u05ee\u05ef\u05f5\u05f6\u05f7\u05f8\u05f9\u05fa\u05fb\u05fc\u05fd\u05fe\u05ff\u0604\u0605\u0606\u0607\u0608\u0609\u060a\u0616\u0617\u0618\u0619\u061a\u061c\u061d\u0620\u063b\u063c\u063d\u063e\u063f\u065f\u070e\u074b\u074c\u076e\u076f\u0770\u0771\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779\u077a\u077b\u077c\u077d\u077e\u077f\u07b2\u07b3\u07b4\u07b5\u07b6\u07b7\u07b8\u07b9\u07ba\u07bb\u07bc\u07bd\u07be\u07bf\u07c0\u07c1\u07c2\u07c3\u07c4\u07c5\u07c6\u07c7\u07c8\u07c9\u07ca\u07cb\u07cc\u07cd\u07ce\u07cf\u07d0\u07d1\u07d2\u07d3\u07d4\u07d5\u07d6\u07d7\u07d8\u07d9\u07da\u07db\u07dc\u07dd\u07de\u07df\u07e0\u07e1\u07e2\u07e3\u07e4\u07e5\u07e6\u07e7\u07e8\u07e9\u07ea\u07eb\u07ec\u07ed\u07ee\u07ef\u07f0\u07f1\u07f2\u07f3\u07f4\u07f5\u07f6\u07f7\u07f8\u07f9\u07fa\u07fb\u07fc\u07fd\u07fe\u07ff\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f\u0810\u0811\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819\u081a\u081b\u081c\u081d\u081e\u081f\u0820\u0821\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829\u082a\u082b\u082c\u082d\u082e\u082f\u0830\u0831\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839\u083a\u083b\u083c\u083d\u083e\u083f\u0840\u0841\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849\u084a\u084b\u084c\u084d\u084e\u084f\u0850\u0851\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859\u085a\u085b\u085c\u085d\u085e\u085f\u0860\u0861\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869\u086a\u086b\u086c\u086d\u086e\u086f\u0870\u0871\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879\u087a\u087b\u087c\u087d\u087e\u087f\u0880\u0881\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889\u088a\u088b\u088c\u088d\u088e\u088f\u0890\u0891\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899\u089a\u089b\u089c\u089d\u089e\u089f\u08a0\u08a1\u08a2\u08a3\u08a4\u08a5\u08a6\u08a7\u08a8\u08a9\u08aa\u08ab\u08ac\u08ad\u08ae\u08af\u08b0\u08b1\u08b2\u08b3\u08b4\u08b5\u08b6\u08b7\u08b8\u08b9\u08ba\u08bb\u08bc\u08bd\u08be\u08bf\u08c0\u08c1\u08c2\u08c3\u08c4\u08c5\u08c6\u08c7\u08c8\u08c9\u08ca\u08cb\u08cc\u08cd\u08ce\u08cf\u08d0\u08d1\u08d2\u08d3\u08d4\u08d5\u08d6\u08d7\u08d8\u08d9\u08da\u08db\u08dc\u08dd\u08de\u08df\u08e0\u08e1\u08e2\u08e3\u08e4\u08e5\u08e6\u08e7\u08e8\u08e9\u08ea\u08eb\u08ec\u08ed\u08ee\u08ef\u08f0\u08f1\u08f2\u08f3\u08f4\u08f5\u08f6\u08f7\u08f8\u08f9\u08fa\u08fb\u08fc\u08fd\u08fe\u08ff\u0900\u093a\u093b\u094e\u094f\u0955\u0956\u0957\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097e\u097f\u0980\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3\u09b4\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf\u09d0\u09d1\u09d2\u09d3\u09d4\u09d5\u09d6\u09d8\u09d9\u09da\u09db\u09de\u09e4\u09e5\u09fb\u09fc\u09fd\u09fe\u09ff\u0a00\u0a04\u0a0b\u0a0c\u0a0d\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43\u0a44\u0a45\u0a46\u0a49\u0a4a\u0a4e\u0a4f\u0a50\u0a51\u0a52\u0a53\u0a54\u0a55\u0a56\u0a57\u0a58\u0a5d\u0a5f\u0a60\u0a61\u0a62\u0a63\u0a64\u0a65\u0a75\u0a76\u0a77\u0a78\u0a79\u0a7a\u0a7b\u0a7c\u0a7d\u0a7e\u0a7f\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1\u0ad2\u0ad3\u0ad4\u0ad5\u0ad6\u0ad7\u0ad8\u0ad9\u0ada\u0adb\u0adc\u0add\u0ade\u0adf\u0ae4\u0ae5\u0af0\u0af2\u0af3\u0af4\u0af5\u0af6\u0af7\u0af8\u0af9\u0afa\u0afb\u0afc\u0afd\u0afe\u0aff\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b44\u0b45\u0b46\u0b49\u0b4a\u0b4e\u0b4f\u0b50\u0b51\u0b52\u0b53\u0b54\u0b55\u0b58\u0b59\u0b5a\u0b5b\u0b5e\u0b62\u0b63\u0b64\u0b65\u0b72\u0b73\u0b74\u0b75\u0b76\u0b77\u0b78\u0b79\u0b7a\u0b7b\u0b7c\u0b7d\u0b7e\u0b7f\u0b80\u0b81\u0b84\u0b8b\u0b8c\u0b8d\u0b91\u0b96\u0b97\u0b98\u0b9b\u0b9d\u0ba0\u0ba1\u0ba2\u0ba5\u0ba6\u0ba7\u0bab\u0bac\u0bad\u0bba\u0bbb\u0bbc\u0bbd\u0bc3\u0bc4\u0bc5\u0bc9\u0bce\u0bcf\u0bd0\u0bd1\u0bd2\u0bd3\u0bd4\u0bd5\u0bd6\u0bd8\u0bd9\u0bda\u0bdb\u0bdc\u0bdd\u0bde\u0bdf\u0be0\u0be1\u0be2\u0be3\u0be4\u0be5\u0bfb\u0bfc\u0bfd\u0bfe\u0bff\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a\u0c3b\u0c3c\u0c3d\u0c45\u0c49\u0c4e\u0c4f\u0c50\u0c51\u0c52\u0c53\u0c54\u0c57\u0c58\u0c59\u0c5a\u0c5b\u0c5c\u0c5d\u0c5e\u0c5f\u0c62\u0c63\u0c64\u0c65\u0c70\u0c71\u0c72\u0c73\u0c74\u0c75\u0c76\u0c77\u0c78\u0c79\u0c7a\u0c7b\u0c7c\u0c7d\u0c7e\u0c7f\u0c80\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce\u0ccf\u0cd0\u0cd1\u0cd2\u0cd3\u0cd4\u0cd7\u0cd8\u0cd9\u0cda\u0cdb\u0cdc\u0cdd\u0cdf\u0ce2\u0ce3\u0ce4\u0ce5\u0cf0\u0cf1\u0cf2\u0cf3\u0cf4\u0cf5\u0cf6\u0cf7\u0cf8\u0cf9\u0cfa\u0cfb\u0cfc\u0cfd\u0cfe\u0cff\u0d00\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a\u0d3b\u0d3c\u0d3d\u0d44\u0d45\u0d49\u0d4e\u0d4f\u0d50\u0d51\u0d52\u0d53\u0d54\u0d55\u0d56\u0d58\u0d59\u0d5a\u0d5b\u0d5c\u0d5d\u0d5e\u0d5f\u0d62\u0d63\u0d64\u0d65\u0d70\u0d71\u0d72\u0d73\u0d74\u0d75\u0d76\u0d77\u0d78\u0d79\u0d7a\u0d7b\u0d7c\u0d7d\u0d7e\u0d7f\u0d80\u0d81\u0d84\u0d97\u0d98\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7\u0dc8\u0dc9\u0dcb\u0dcc\u0dcd\u0dce\u0dd5\u0dd7\u0de0\u0de1\u0de2\u0de3\u0de4\u0de5\u0de6\u0de7\u0de8\u0de9\u0dea\u0deb\u0dec\u0ded\u0dee\u0def\u0df0\u0df1\u0df5\u0df6\u0df7\u0df8\u0df9\u0dfa\u0dfb\u0dfc\u0dfd\u0dfe\u0dff\u0e00\u0e3b\u0e3c\u0e3d\u0e3e\u0e5c\u0e5d\u0e5e\u0e5f\u0e60\u0e61\u0e62\u0e63\u0e64\u0e65\u0e66\u0e67\u0e68\u0e69\u0e6a\u0e6b\u0e6c\u0e6d\u0e6e\u0e6f\u0e70\u0e71\u0e72\u0e73\u0e74\u0e75\u0e76\u0e77\u0e78\u0e79\u0e7a\u0e7b\u0e7c\u0e7d\u0e7e\u0e7f\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e\u0e8f\u0e90\u0e91\u0e92\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ede\u0edf\u0ee0\u0ee1\u0ee2\u0ee3\u0ee4\u0ee5\u0ee6\u0ee7\u0ee8\u0ee9\u0eea\u0eeb\u0eec\u0eed\u0eee\u0eef\u0ef0\u0ef1\u0ef2\u0ef3\u0ef4\u0ef5\u0ef6\u0ef7\u0ef8\u0ef9\u0efa\u0efb\u0efc\u0efd\u0efe\u0eff\u0f48\u0f6b\u0f6c\u0f6d\u0f6e\u0f6f\u0f70\u0f8c\u0f8d\u0f8e\u0f8f\u0f98\u0fbd\u0fcd\u0fce\u0fd2\u0fd3\u0fd4\u0fd5\u0fd6\u0fd7\u0fd8\u0fd9\u0fda\u0fdb\u0fdc\u0fdd\u0fde\u0fdf\u0fe0\u0fe1\u0fe2\u0fe3\u0fe4\u0fe5\u0fe6\u0fe7\u0fe8\u0fe9\u0fea\u0feb\u0fec\u0fed\u0fee\u0fef\u0ff0\u0ff1\u0ff2\u0ff3\u0ff4\u0ff5\u0ff6\u0ff7\u0ff8\u0ff9\u0ffa\u0ffb\u0ffc\u0ffd\u0ffe\u0fff\u1022\u1028\u102b\u1033\u1034\u1035\u103a\u103b\u103c\u103d\u103e\u103f\u105a\u105b\u105c\u105d\u105e\u105f\u1060\u1061\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069\u106a\u106b\u106c\u106d\u106e\u106f\u1070\u1071\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079\u107a\u107b\u107c\u107d\u107e\u107f\u1080\u1081\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089\u108a\u108b\u108c\u108d\u108e\u108f\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u109a\u109b\u109c\u109d\u109e\u109f\u10c6\u10c7\u10c8\u10c9\u10ca\u10cb\u10cc\u10cd\u10ce\u10cf\u10fd\u10fe\u10ff\u115a\u115b\u115c\u115d\u115e\u11a3\u11a4\u11a5\u11a6\u11a7\u11fa\u11fb\u11fc\u11fd\u11fe\u11ff\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u135d\u135e\u137d\u137e\u137f\u139a\u139b\u139c\u139d\u139e\u139f\u13f5\u13f6\u13f7\u13f8\u13f9\u13fa\u13fb\u13fc\u13fd\u13fe\u13ff\u1400\u1677\u1678\u1679\u167a\u167b\u167c\u167d\u167e\u167f\u169d\u169e\u169f\u16f1\u16f2\u16f3\u16f4\u16f5\u16f6\u16f7\u16f8\u16f9\u16fa\u16fb\u16fc\u16fd\u16fe\u16ff\u170d\u1715\u1716\u1717\u1718\u1719\u171a\u171b\u171c\u171d\u171e\u171f\u1737\u1738\u1739\u173a\u173b\u173c\u173d\u173e\u173f\u1754\u1755\u1756\u1757\u1758\u1759\u175a\u175b\u175c\u175d\u175e\u175f\u176d\u1771\u1774\u1775\u1776\u1777\u1778\u1779\u177a\u177b\u177c\u177d\u177e\u177f\u17de\u17df\u17ea\u17eb\u17ec\u17ed\u17ee\u17ef\u17fa\u17fb\u17fc\u17fd\u17fe\u17ff\u180f\u181a\u181b\u181c\u181d\u181e\u181f\u1878\u1879\u187a\u187b\u187c\u187d\u187e\u187f\u18aa\u18ab\u18ac\u18ad\u18ae\u18af\u18b0\u18b1\u18b2\u18b3\u18b4\u18b5\u18b6\u18b7\u18b8\u18b9\u18ba\u18bb\u18bc\u18bd\u18be\u18bf\u18c0\u18c1\u18c2\u18c3\u18c4\u18c5\u18c6\u18c7\u18c8\u18c9\u18ca\u18cb\u18cc\u18cd\u18ce\u18cf\u18d0\u18d1\u18d2\u18d3\u18d4\u18d5\u18d6\u18d7\u18d8\u18d9\u18da\u18db\u18dc\u18dd\u18de\u18df\u18e0\u18e1\u18e2\u18e3\u18e4\u18e5\u18e6\u18e7\u18e8\u18e9\u18ea\u18eb\u18ec\u18ed\u18ee\u18ef\u18f0\u18f1\u18f2\u18f3\u18f4\u18f5\u18f6\u18f7\u18f8\u18f9\u18fa\u18fb\u18fc\u18fd\u18fe\u18ff\u191d\u191e\u191f\u192c\u192d\u192e\u192f\u193c\u193d\u193e\u193f\u1941\u1942\u1943\u196e\u196f\u1975\u1976\u1977\u1978\u1979\u197a\u197b\u197c\u197d\u197e\u197f\u19aa\u19ab\u19ac\u19ad\u19ae\u19af\u19ca\u19cb\u19cc\u19cd\u19ce\u19cf\u19da\u19db\u19dc\u19dd\u1a1c\u1a1d\u1a20\u1a21\u1a22\u1a23\u1a24\u1a25\u1a26\u1a27\u1a28\u1a29\u1a2a\u1a2b\u1a2c\u1a2d\u1a2e\u1a2f\u1a30\u1a31\u1a32\u1a33\u1a34\u1a35\u1a36\u1a37\u1a38\u1a39\u1a3a\u1a3b\u1a3c\u1a3d\u1a3e\u1a3f\u1a40\u1a41\u1a42\u1a43\u1a44\u1a45\u1a46\u1a47\u1a48\u1a49\u1a4a\u1a4b\u1a4c\u1a4d\u1a4e\u1a4f\u1a50\u1a51\u1a52\u1a53\u1a54\u1a55\u1a56\u1a57\u1a58\u1a59\u1a5a\u1a5b\u1a5c\u1a5d\u1a5e\u1a5f\u1a60\u1a61\u1a62\u1a63\u1a64\u1a65\u1a66\u1a67\u1a68\u1a69\u1a6a\u1a6b\u1a6c\u1a6d\u1a6e\u1a6f\u1a70\u1a71\u1a72\u1a73\u1a74\u1a75\u1a76\u1a77\u1a78\u1a79\u1a7a\u1a7b\u1a7c\u1a7d\u1a7e\u1a7f\u1a80\u1a81\u1a82\u1a83\u1a84\u1a85\u1a86\u1a87\u1a88\u1a89\u1a8a\u1a8b\u1a8c\u1a8d\u1a8e\u1a8f\u1a90\u1a91\u1a92\u1a93\u1a94\u1a95\u1a96\u1a97\u1a98\u1a99\u1a9a\u1a9b\u1a9c\u1a9d\u1a9e\u1a9f\u1aa0\u1aa1\u1aa2\u1aa3\u1aa4\u1aa5\u1aa6\u1aa7\u1aa8\u1aa9\u1aaa\u1aab\u1aac\u1aad\u1aae\u1aaf\u1ab0\u1ab1\u1ab2\u1ab3\u1ab4\u1ab5\u1ab6\u1ab7\u1ab8\u1ab9\u1aba\u1abb\u1abc\u1abd\u1abe\u1abf\u1ac0\u1ac1\u1ac2\u1ac3\u1ac4\u1ac5\u1ac6\u1ac7\u1ac8\u1ac9\u1aca\u1acb\u1acc\u1acd\u1ace\u1acf\u1ad0\u1ad1\u1ad2\u1ad3\u1ad4\u1ad5\u1ad6\u1ad7\u1ad8\u1ad9\u1ada\u1adb\u1adc\u1add\u1ade\u1adf\u1ae0\u1ae1\u1ae2\u1ae3\u1ae4\u1ae5\u1ae6\u1ae7\u1ae8\u1ae9\u1aea\u1aeb\u1aec\u1aed\u1aee\u1aef\u1af0\u1af1\u1af2\u1af3\u1af4\u1af5\u1af6\u1af7\u1af8\u1af9\u1afa\u1afb\u1afc\u1afd\u1afe\u1aff\u1b00\u1b01\u1b02\u1b03\u1b04\u1b05\u1b06\u1b07\u1b08\u1b09\u1b0a\u1b0b\u1b0c\u1b0d\u1b0e\u1b0f\u1b10\u1b11\u1b12\u1b13\u1b14\u1b15\u1b16\u1b17\u1b18\u1b19\u1b1a\u1b1b\u1b1c\u1b1d\u1b1e\u1b1f\u1b20\u1b21\u1b22\u1b23\u1b24\u1b25\u1b26\u1b27\u1b28\u1b29\u1b2a\u1b2b\u1b2c\u1b2d\u1b2e\u1b2f\u1b30\u1b31\u1b32\u1b33\u1b34\u1b35\u1b36\u1b37\u1b38\u1b39\u1b3a\u1b3b\u1b3c\u1b3d\u1b3e\u1b3f\u1b40\u1b41\u1b42\u1b43\u1b44\u1b45\u1b46\u1b47\u1b48\u1b49\u1b4a\u1b4b\u1b4c\u1b4d\u1b4e\u1b4f\u1b50\u1b51\u1b52\u1b53\u1b54\u1b55\u1b56\u1b57\u1b58\u1b59\u1b5a\u1b5b\u1b5c\u1b5d\u1b5e\u1b5f\u1b60\u1b61\u1b62\u1b63\u1b64\u1b65\u1b66\u1b67\u1b68\u1b69\u1b6a\u1b6b\u1b6c\u1b6d\u1b6e\u1b6f\u1b70\u1b71\u1b72\u1b73\u1b74\u1b75\u1b76\u1b77\u1b78\u1b79\u1b7a\u1b7b\u1b7c\u1b7d\u1b7e\u1b7f\u1b80\u1b81\u1b82\u1b83\u1b84\u1b85\u1b86\u1b87\u1b88\u1b89\u1b8a\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\u1b92\u1b93\u1b94\u1b95\u1b96\u1b97\u1b98\u1b99\u1b9a\u1b9b\u1b9c\u1b9d\u1b9e\u1b9f\u1ba0\u1ba1\u1ba2\u1ba3\u1ba4\u1ba5\u1ba6\u1ba7\u1ba8\u1ba9\u1baa\u1bab\u1bac\u1bad\u1bae\u1baf\u1bb0\u1bb1\u1bb2\u1bb3\u1bb4\u1bb5\u1bb6\u1bb7\u1bb8\u1bb9\u1bba\u1bbb\u1bbc\u1bbd\u1bbe\u1bbf\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u1bcc\u1bcd\u1bce\u1bcf\u1bd0\u1bd1\u1bd2\u1bd3\u1bd4\u1bd5\u1bd6\u1bd7\u1bd8\u1bd9\u1bda\u1bdb\u1bdc\u1bdd\u1bde\u1bdf\u1be0\u1be1\u1be2\u1be3\u1be4\u1be5\u1be6\u1be7\u1be8\u1be9\u1bea\u1beb\u1bec\u1bed\u1bee\u1bef\u1bf0\u1bf1\u1bf2\u1bf3\u1bf4\u1bf5\u1bf6\u1bf7\u1bf8\u1bf9\u1bfa\u1bfb\u1bfc\u1bfd\u1bfe\u1bff\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c1b\u1c1c\u1c1d\u1c1e\u1c1f\u1c20\u1c21\u1c22\u1c23\u1c24\u1c25\u1c26\u1c27\u1c28\u1c29\u1c2a\u1c2b\u1c2c\u1c2d\u1c2e\u1c2f\u1c30\u1c31\u1c32\u1c33\u1c34\u1c35\u1c36\u1c37\u1c38\u1c39\u1c3a\u1c3b\u1c3c\u1c3d\u1c3e\u1c3f\u1c40\u1c41\u1c42\u1c43\u1c44\u1c45\u1c46\u1c47\u1c48\u1c49\u1c4a\u1c4b\u1c4c\u1c4d\u1c4e\u1c4f\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59\u1c5a\u1c5b\u1c5c\u1c5d\u1c5e\u1c5f\u1c60\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u1c67\u1c68\u1c69\u1c6a\u1c6b\u1c6c\u1c6d\u1c6e\u1c6f\u1c70\u1c71\u1c72\u1c73\u1c74\u1c75\u1c76\u1c77\u1c78\u1c79\u1c7a\u1c7b\u1c7c\u1c7d\u1c7e\u1c7f\u1c80\u1c81\u1c82\u1c83\u1c84\u1c85\u1c86\u1c87\u1c88\u1c89\u1c8a\u1c8b\u1c8c\u1c8d\u1c8e\u1c8f\u1c90\u1c91\u1c92\u1c93\u1c94\u1c95\u1c96\u1c97\u1c98\u1c99\u1c9a\u1c9b\u1c9c\u1c9d\u1c9e\u1c9f\u1ca0\u1ca1\u1ca2\u1ca3\u1ca4\u1ca5\u1ca6\u1ca7\u1ca8\u1ca9\u1caa\u1cab\u1cac\u1cad\u1cae\u1caf\u1cb0\u1cb1\u1cb2\u1cb3\u1cb4\u1cb5\u1cb6\u1cb7\u1cb8\u1cb9\u1cba\u1cbb\u1cbc\u1cbd\u1cbe\u1cbf\u1cc0\u1cc1\u1cc2\u1cc3\u1cc4\u1cc5\u1cc6\u1cc7\u1cc8\u1cc9\u1cca\u1ccb\u1ccc\u1ccd\u1cce\u1ccf\u1cd0\u1cd1\u1cd2\u1cd3\u1cd4\u1cd5\u1cd6\u1cd7\u1cd8\u1cd9\u1cda\u1cdb\u1cdc\u1cdd\u1cde\u1cdf\u1ce0\u1ce1\u1ce2\u1ce3\u1ce4\u1ce5\u1ce6\u1ce7\u1ce8\u1ce9\u1cea\u1ceb\u1cec\u1ced\u1cee\u1cef\u1cf0\u1cf1\u1cf2\u1cf3\u1cf4\u1cf5\u1cf6\u1cf7\u1cf8\u1cf9\u1cfa\u1cfb\u1cfc\u1cfd\u1cfe\u1cff\u1dc4\u1dc5\u1dc6\u1dc7\u1dc8\u1dc9\u1dca\u1dcb\u1dcc\u1dcd\u1dce\u1dcf\u1dd0\u1dd1\u1dd2\u1dd3\u1dd4\u1dd5\u1dd6\u1dd7\u1dd8\u1dd9\u1dda\u1ddb\u1ddc\u1ddd\u1dde\u1ddf\u1de0\u1de1\u1de2\u1de3\u1de4\u1de5\u1de6\u1de7\u1de8\u1de9\u1dea\u1deb\u1dec\u1ded\u1dee\u1def\u1df0\u1df1\u1df2\u1df3\u1df4\u1df5\u1df6\u1df7\u1df8\u1df9\u1dfa\u1dfb\u1dfc\u1dfd\u1dfe\u1dff\u1e9c\u1e9d\u1e9e\u1e9f\u1efa\u1efb\u1efc\u1efd\u1efe\u1eff\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u2064\u2065\u2066\u2067\u2068\u2069\u2072\u2073\u208f\u2095\u2096\u2097\u2098\u2099\u209a\u209b\u209c\u209d\u209e\u209f\u20b6\u20b7\u20b8\u20b9\u20ba\u20bb\u20bc\u20bd\u20be\u20bf\u20c0\u20c1\u20c2\u20c3\u20c4\u20c5\u20c6\u20c7\u20c8\u20c9\u20ca\u20cb\u20cc\u20cd\u20ce\u20cf\u20ec\u20ed\u20ee\u20ef\u20f0\u20f1\u20f2\u20f3\u20f4\u20f5\u20f6\u20f7\u20f8\u20f9\u20fa\u20fb\u20fc\u20fd\u20fe\u20ff\u214d\u214e\u214f\u2150\u2151\u2152\u2184\u2185\u2186\u2187\u2188\u2189\u218a\u218b\u218c\u218d\u218e\u218f\u23dc\u23dd\u23de\u23df\u23e0\u23e1\u23e2\u23e3\u23e4\u23e5\u23e6\u23e7\u23e8\u23e9\u23ea\u23eb\u23ec\u23ed\u23ee\u23ef\u23f0\u23f1\u23f2\u23f3\u23f4\u23f5\u23f6\u23f7\u23f8\u23f9\u23fa\u23fb\u23fc\u23fd\u23fe\u23ff\u2427\u2428\u2429\u242a\u242b\u242c\u242d\u242e\u242f\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437\u2438\u2439\u243a\u243b\u243c\u243d\u243e\u243f\u244b\u244c\u244d\u244e\u244f\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457\u2458\u2459\u245a\u245b\u245c\u245d\u245e\u245f\u269d\u269e\u269f\u26b2\u26b3\u26b4\u26b5\u26b6\u26b7\u26b8\u26b9\u26ba\u26bb\u26bc\u26bd\u26be\u26bf\u26c0\u26c1\u26c2\u26c3\u26c4\u26c5\u26c6\u26c7\u26c8\u26c9\u26ca\u26cb\u26cc\u26cd\u26ce\u26cf\u26d0\u26d1\u26d2\u26d3\u26d4\u26d5\u26d6\u26d7\u26d8\u26d9\u26da\u26db\u26dc\u26dd\u26de\u26df\u26e0\u26e1\u26e2\u26e3\u26e4\u26e5\u26e6\u26e7\u26e8\u26e9\u26ea\u26eb\u26ec\u26ed\u26ee\u26ef\u26f0\u26f1\u26f2\u26f3\u26f4\u26f5\u26f6\u26f7\u26f8\u26f9\u26fa\u26fb\u26fc\u26fd\u26fe\u26ff\u2700\u2705\u270a\u270b\u2728\u274c\u274e\u2753\u2754\u2755\u2757\u275f\u2760\u2795\u2796\u2797\u27b0\u27bf\u27c7\u27c8\u27c9\u27ca\u27cb\u27cc\u27cd\u27ce\u27cf\u27ec\u27ed\u27ee\u27ef\u2b14\u2b15\u2b16\u2b17\u2b18\u2b19\u2b1a\u2b1b\u2b1c\u2b1d\u2b1e\u2b1f\u2b20\u2b21\u2b22\u2b23\u2b24\u2b25\u2b26\u2b27\u2b28\u2b29\u2b2a\u2b2b\u2b2c\u2b2d\u2b2e\u2b2f\u2b30\u2b31\u2b32\u2b33\u2b34\u2b35\u2b36\u2b37\u2b38\u2b39\u2b3a\u2b3b\u2b3c\u2b3d\u2b3e\u2b3f\u2b40\u2b41\u2b42\u2b43\u2b44\u2b45\u2b46\u2b47\u2b48\u2b49\u2b4a\u2b4b\u2b4c\u2b4d\u2b4e\u2b4f\u2b50\u2b51\u2b52\u2b53\u2b54\u2b55\u2b56\u2b57\u2b58\u2b59\u2b5a\u2b5b\u2b5c\u2b5d\u2b5e\u2b5f\u2b60\u2b61\u2b62\u2b63\u2b64\u2b65\u2b66\u2b67\u2b68\u2b69\u2b6a\u2b6b\u2b6c\u2b6d\u2b6e\u2b6f\u2b70\u2b71\u2b72\u2b73\u2b74\u2b75\u2b76\u2b77\u2b78\u2b79\u2b7a\u2b7b\u2b7c\u2b7d\u2b7e\u2b7f\u2b80\u2b81\u2b82\u2b83\u2b84\u2b85\u2b86\u2b87\u2b88\u2b89\u2b8a\u2b8b\u2b8c\u2b8d\u2b8e\u2b8f\u2b90\u2b91\u2b92\u2b93\u2b94\u2b95\u2b96\u2b97\u2b98\u2b99\u2b9a\u2b9b\u2b9c\u2b9d\u2b9e\u2b9f\u2ba0\u2ba1\u2ba2\u2ba3\u2ba4\u2ba5\u2ba6\u2ba7\u2ba8\u2ba9\u2baa\u2bab\u2bac\u2bad\u2bae\u2baf\u2bb0\u2bb1\u2bb2\u2bb3\u2bb4\u2bb5\u2bb6\u2bb7\u2bb8\u2bb9\u2bba\u2bbb\u2bbc\u2bbd\u2bbe\u2bbf\u2bc0\u2bc1\u2bc2\u2bc3\u2bc4\u2bc5\u2bc6\u2bc7\u2bc8\u2bc9\u2bca\u2bcb\u2bcc\u2bcd\u2bce\u2bcf\u2bd0\u2bd1\u2bd2\u2bd3\u2bd4\u2bd5\u2bd6\u2bd7\u2bd8\u2bd9\u2bda\u2bdb\u2bdc\u2bdd\u2bde\u2bdf\u2be0\u2be1\u2be2\u2be3\u2be4\u2be5\u2be6\u2be7\u2be8\u2be9\u2bea\u2beb\u2bec\u2bed\u2bee\u2bef\u2bf0\u2bf1\u2bf2\u2bf3\u2bf4\u2bf5\u2bf6\u2bf7\u2bf8\u2bf9\u2bfa\u2bfb\u2bfc\u2bfd\u2bfe\u2bff\u2c2f\u2c5f\u2c60\u2c61\u2c62\u2c63\u2c64\u2c65\u2c66\u2c67\u2c68\u2c69\u2c6a\u2c6b\u2c6c\u2c6d\u2c6e\u2c6f\u2c70\u2c71\u2c72\u2c73\u2c74\u2c75\u2c76\u2c77\u2c78\u2c79\u2c7a\u2c7b\u2c7c\u2c7d\u2c7e\u2c7f\u2ceb\u2cec\u2ced\u2cee\u2cef\u2cf0\u2cf1\u2cf2\u2cf3\u2cf4\u2cf5\u2cf6\u2cf7\u2cf8\u2d26\u2d27\u2d28\u2d29\u2d2a\u2d2b\u2d2c\u2d2d\u2d2e\u2d2f\u2d66\u2d67\u2d68\u2d69\u2d6a\u2d6b\u2d6c\u2d6d\u2d6e\u2d70\u2d71\u2d72\u2d73\u2d74\u2d75\u2d76\u2d77\u2d78\u2d79\u2d7a\u2d7b\u2d7c\u2d7d\u2d7e\u2d7f\u2d97\u2d98\u2d99\u2d9a\u2d9b\u2d9c\u2d9d\u2d9e\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2de0\u2de1\u2de2\u2de3\u2de4\u2de5\u2de6\u2de7\u2de8\u2de9\u2dea\u2deb\u2dec\u2ded\u2dee\u2def\u2df0\u2df1\u2df2\u2df3\u2df4\u2df5\u2df6\u2df7\u2df8\u2df9\u2dfa\u2dfb\u2dfc\u2dfd\u2dfe\u2dff\u2e18\u2e19\u2e1a\u2e1b\u2e1e\u2e1f\u2e20\u2e21\u2e22\u2e23\u2e24\u2e25\u2e26\u2e27\u2e28\u2e29\u2e2a\u2e2b\u2e2c\u2e2d\u2e2e\u2e2f\u2e30\u2e31\u2e32\u2e33\u2e34\u2e35\u2e36\u2e37\u2e38\u2e39\u2e3a\u2e3b\u2e3c\u2e3d\u2e3e\u2e3f\u2e40\u2e41\u2e42\u2e43\u2e44\u2e45\u2e46\u2e47\u2e48\u2e49\u2e4a\u2e4b\u2e4c\u2e4d\u2e4e\u2e4f\u2e50\u2e51\u2e52\u2e53\u2e54\u2e55\u2e56\u2e57\u2e58\u2e59\u2e5a\u2e5b\u2e5c\u2e5d\u2e5e\u2e5f\u2e60\u2e61\u2e62\u2e63\u2e64\u2e65\u2e66\u2e67\u2e68\u2e69\u2e6a\u2e6b\u2e6c\u2e6d\u2e6e\u2e6f\u2e70\u2e71\u2e72\u2e73\u2e74\u2e75\u2e76\u2e77\u2e78\u2e79\u2e7a\u2e7b\u2e7c\u2e7d\u2e7e\u2e7f\u2e9a\u2ef4\u2ef5\u2ef6\u2ef7\u2ef8\u2ef9\u2efa\u2efb\u2efc\u2efd\u2efe\u2eff\u2fd6\u2fd7\u2fd8\u2fd9\u2fda\u2fdb\u2fdc\u2fdd\u2fde\u2fdf\u2fe0\u2fe1\u2fe2\u2fe3\u2fe4\u2fe5\u2fe6\u2fe7\u2fe8\u2fe9\u2fea\u2feb\u2fec\u2fed\u2fee\u2fef\u2ffc\u2ffd\u2ffe\u2fff\u3040\u3097\u3098\u3100\u3101\u3102\u3103\u3104\u312d\u312e\u312f\u3130\u318f\u31b8\u31b9\u31ba\u31bb\u31bc\u31bd\u31be\u31bf\u31d0\u31d1\u31d2\u31d3\u31d4\u31d5\u31d6\u31d7\u31d8\u31d9\u31da\u31db\u31dc\u31dd\u31de\u31df\u31e0\u31e1\u31e2\u31e3\u31e4\u31e5\u31e6\u31e7\u31e8\u31e9\u31ea\u31eb\u31ec\u31ed\u31ee\u31ef\u321f\u3244\u3245\u3246\u3247\u3248\u3249\u324a\u324b\u324c\u324d\u324e\u324f\u32ff\u4db6\u4db7\u4db8\u4db9\u4dba\u4dbb\u4dbc\u4dbd\u4dbe\u4dbf\u9fbc\u9fbd\u9fbe\u9fbf\u9fc0\u9fc1\u9fc2\u9fc3\u9fc4\u9fc5\u9fc6\u9fc7\u9fc8\u9fc9\u9fca\u9fcb\u9fcc\u9fcd\u9fce\u9fcf\u9fd0\u9fd1\u9fd2\u9fd3\u9fd4\u9fd5\u9fd6\u9fd7\u9fd8\u9fd9\u9fda\u9fdb\u9fdc\u9fdd\u9fde\u9fdf\u9fe0\u9fe1\u9fe2\u9fe3\u9fe4\u9fe5\u9fe6\u9fe7\u9fe8\u9fe9\u9fea\u9feb\u9fec\u9fed\u9fee\u9fef\u9ff0\u9ff1\u9ff2\u9ff3\u9ff4\u9ff5\u9ff6\u9ff7\u9ff8\u9ff9\u9ffa\u9ffb\u9ffc\u9ffd\u9ffe\u9fff\ua48d\ua48e\ua48f\ua4c7\ua4c8\ua4c9\ua4ca\ua4cb\ua4cc\ua4cd\ua4ce\ua4cf\ua4d0\ua4d1\ua4d2\ua4d3\ua4d4\ua4d5\ua4d6\ua4d7\ua4d8\ua4d9\ua4da\ua4db\ua4dc\ua4dd\ua4de\ua4df\ua4e0\ua4e1\ua4e2\ua4e3\ua4e4\ua4e5\ua4e6\ua4e7\ua4e8\ua4e9\ua4ea\ua4eb\ua4ec\ua4ed\ua4ee\ua4ef\ua4f0\ua4f1\ua4f2\ua4f3\ua4f4\ua4f5\ua4f6\ua4f7\ua4f8\ua4f9\ua4fa\ua4fb\ua4fc\ua4fd\ua4fe\ua4ff\ua500\ua501\ua502\ua503\ua504\ua505\ua506\ua507\ua508\ua509\ua50a\ua50b\ua50c\ua50d\ua50e\ua50f\ua510\ua511\ua512\ua513\ua514\ua515\ua516\ua517\ua518\ua519\ua51a\ua51b\ua51c\ua51d\ua51e\ua51f\ua520\ua521\ua522\ua523\ua524\ua525\ua526\ua527\ua528\ua529\ua52a\ua52b\ua52c\ua52d\ua52e\ua52f\ua530\ua531\ua532\ua533\ua534\ua535\ua536\ua537\ua538\ua539\ua53a\ua53b\ua53c\ua53d\ua53e\ua53f\ua540\ua541\ua542\ua543\ua544\ua545\ua546\ua547\ua548\ua549\ua54a\ua54b\ua54c\ua54d\ua54e\ua54f\ua550\ua551\ua552\ua553\ua554\ua555\ua556\ua557\ua558\ua559\ua55a\ua55b\ua55c\ua55d\ua55e\ua55f\ua560\ua561\ua562\ua563\ua564\ua565\ua566\ua567\ua568\ua569\ua56a\ua56b\ua56c\ua56d\ua56e\ua56f\ua570\ua571\ua572\ua573\ua574\ua575\ua576\ua577\ua578\ua579\ua57a\ua57b\ua57c\ua57d\ua57e\ua57f\ua580\ua581\ua582\ua583\ua584\ua585\ua586\ua587\ua588\ua589\ua58a\ua58b\ua58c\ua58d\ua58e\ua58f\ua590\ua591\ua592\ua593\ua594\ua595\ua596\ua597\ua598\ua599\ua59a\ua59b\ua59c\ua59d\ua59e\ua59f\ua5a0\ua5a1\ua5a2\ua5a3\ua5a4\ua5a5\ua5a6\ua5a7\ua5a8\ua5a9\ua5aa\ua5ab\ua5ac\ua5ad\ua5ae\ua5af\ua5b0\ua5b1\ua5b2\ua5b3\ua5b4\ua5b5\ua5b6\ua5b7\ua5b8\ua5b9\ua5ba\ua5bb\ua5bc\ua5bd\ua5be\ua5bf\ua5c0\ua5c1\ua5c2\ua5c3\ua5c4\ua5c5\ua5c6\ua5c7\ua5c8\ua5c9\ua5ca\ua5cb\ua5cc\ua5cd\ua5ce\ua5cf\ua5d0\ua5d1\ua5d2\ua5d3\ua5d4\ua5d5\ua5d6\ua5d7\ua5d8\ua5d9\ua5da\ua5db\ua5dc\ua5dd\ua5de\ua5df\ua5e0\ua5e1\ua5e2\ua5e3\ua5e4\ua5e5\ua5e6\ua5e7\ua5e8\ua5e9\ua5ea\ua5eb\ua5ec\ua5ed\ua5ee\ua5ef\ua5f0\ua5f1\ua5f2\ua5f3\ua5f4\ua5f5\ua5f6\ua5f7\ua5f8\ua5f9\ua5fa\ua5fb\ua5fc\ua5fd\ua5fe\ua5ff\ua600\ua601\ua602\ua603\ua604\ua605\ua606\ua607\ua608\ua609\ua60a\ua60b\ua60c\ua60d\ua60e\ua60f\ua610\ua611\ua612\ua613\ua614\ua615\ua616\ua617\ua618\ua619\ua61a\ua61b\ua61c\ua61d\ua61e\ua61f\ua620\ua621\ua622\ua623\ua624\ua625\ua626\ua627\ua628\ua629\ua62a\ua62b\ua62c\ua62d\ua62e\ua62f\ua630\ua631\ua632\ua633\ua634\ua635\ua636\ua637\ua638\ua639\ua63a\ua63b\ua63c\ua63d\ua63e\ua63f\ua640\ua641\ua642\ua643\ua644\ua645\ua646\ua647\ua648\ua649\ua64a\ua64b\ua64c\ua64d\ua64e\ua64f\ua650\ua651\ua652\ua653\ua654\ua655\ua656\ua657\ua658\ua659\ua65a\ua65b\ua65c\ua65d\ua65e\ua65f\ua660\ua661\ua662\ua663\ua664\ua665\ua666\ua667\ua668\ua669\ua66a\ua66b\ua66c\ua66d\ua66e\ua66f\ua670\ua671\ua672\ua673\ua674\ua675\ua676\ua677\ua678\ua679\ua67a\ua67b\ua67c\ua67d\ua67e\ua67f\ua680\ua681\ua682\ua683\ua684\ua685\ua686\ua687\ua688\ua689\ua68a\ua68b\ua68c\ua68d\ua68e\ua68f\ua690\ua691\ua692\ua693\ua694\ua695\ua696\ua697\ua698\ua699\ua69a\ua69b\ua69c\ua69d\ua69e\ua69f\ua6a0\ua6a1\ua6a2\ua6a3\ua6a4\ua6a5\ua6a6\ua6a7\ua6a8\ua6a9\ua6aa\ua6ab\ua6ac\ua6ad\ua6ae\ua6af\ua6b0\ua6b1\ua6b2\ua6b3\ua6b4\ua6b5\ua6b6\ua6b7\ua6b8\ua6b9\ua6ba\ua6bb\ua6bc\ua6bd\ua6be\ua6bf\ua6c0\ua6c1\ua6c2\ua6c3\ua6c4\ua6c5\ua6c6\ua6c7\ua6c8\ua6c9\ua6ca\ua6cb\ua6cc\ua6cd\ua6ce\ua6cf\ua6d0\ua6d1\ua6d2\ua6d3\ua6d4\ua6d5\ua6d6\ua6d7\ua6d8\ua6d9\ua6da\ua6db\ua6dc\ua6dd\ua6de\ua6df\ua6e0\ua6e1\ua6e2\ua6e3\ua6e4\ua6e5\ua6e6\ua6e7\ua6e8\ua6e9\ua6ea\ua6eb\ua6ec\ua6ed\ua6ee\ua6ef\ua6f0\ua6f1\ua6f2\ua6f3\ua6f4\ua6f5\ua6f6\ua6f7\ua6f8\ua6f9\ua6fa\ua6fb\ua6fc\ua6fd\ua6fe\ua6ff\ua717\ua718\ua719\ua71a\ua71b\ua71c\ua71d\ua71e\ua71f\ua720\ua721\ua722\ua723\ua724\ua725\ua726\ua727\ua728\ua729\ua72a\ua72b\ua72c\ua72d\ua72e\ua72f\ua730\ua731\ua732\ua733\ua734\ua735\ua736\ua737\ua738\ua739\ua73a\ua73b\ua73c\ua73d\ua73e\ua73f\ua740\ua741\ua742\ua743\ua744\ua745\ua746\ua747\ua748\ua749\ua74a\ua74b\ua74c\ua74d\ua74e\ua74f\ua750\ua751\ua752\ua753\ua754\ua755\ua756\ua757\ua758\ua759\ua75a\ua75b\ua75c\ua75d\ua75e\ua75f\ua760\ua761\ua762\ua763\ua764\ua765\ua766\ua767\ua768\ua769\ua76a\ua76b\ua76c\ua76d\ua76e\ua76f\ua770\ua771\ua772\ua773\ua774\ua775\ua776\ua777\ua778\ua779\ua77a\ua77b\ua77c\ua77d\ua77e\ua77f\ua780\ua781\ua782\ua783\ua784\ua785\ua786\ua787\ua788\ua789\ua78a\ua78b\ua78c\ua78d\ua78e\ua78f\ua790\ua791\ua792\ua793\ua794\ua795\ua796\ua797\ua798\ua799\ua79a\ua79b\ua79c\ua79d\ua79e\ua79f\ua7a0\ua7a1\ua7a2\ua7a3\ua7a4\ua7a5\ua7a6\ua7a7\ua7a8\ua7a9\ua7aa\ua7ab\ua7ac\ua7ad\ua7ae\ua7af\ua7b0\ua7b1\ua7b2\ua7b3\ua7b4\ua7b5\ua7b6\ua7b7\ua7b8\ua7b9\ua7ba\ua7bb\ua7bc\ua7bd\ua7be\ua7bf\ua7c0\ua7c1\ua7c2\ua7c3\ua7c4\ua7c5\ua7c6\ua7c7\ua7c8\ua7c9\ua7ca\ua7cb\ua7cc\ua7cd\ua7ce\ua7cf\ua7d0\ua7d1\ua7d2\ua7d3\ua7d4\ua7d5\ua7d6\ua7d7\ua7d8\ua7d9\ua7da\ua7db\ua7dc\ua7dd\ua7de\ua7df\ua7e0\ua7e1\ua7e2\ua7e3\ua7e4\ua7e5\ua7e6\ua7e7\ua7e8\ua7e9\ua7ea\ua7eb\ua7ec\ua7ed\ua7ee\ua7ef\ua7f0\ua7f1\ua7f2\ua7f3\ua7f4\ua7f5\ua7f6\ua7f7\ua7f8\ua7f9\ua7fa\ua7fb\ua7fc\ua7fd\ua7fe\ua7ff\ua82c\ua82d\ua82e\ua82f\ua830\ua831\ua832\ua833\ua834\ua835\ua836\ua837\ua838\ua839\ua83a\ua83b\ua83c\ua83d\ua83e\ua83f\ua840\ua841\ua842\ua843\ua844\ua845\ua846\ua847\ua848\ua849\ua84a\ua84b\ua84c\ua84d\ua84e\ua84f\ua850\ua851\ua852\ua853\ua854\ua855\ua856\ua857\ua858\ua859\ua85a\ua85b\ua85c\ua85d\ua85e\ua85f\ua860\ua861\ua862\ua863\ua864\ua865\ua866\ua867\ua868\ua869\ua86a\ua86b\ua86c\ua86d\ua86e\ua86f\ua870\ua871\ua872\ua873\ua874\ua875\ua876\ua877\ua878\ua879\ua87a\ua87b\ua87c\ua87d\ua87e\ua87f\ua880\ua881\ua882\ua883\ua884\ua885\ua886\ua887\ua888\ua889\ua88a\ua88b\ua88c\ua88d\ua88e\ua88f\ua890\ua891\ua892\ua893\ua894\ua895\ua896\ua897\ua898\ua899\ua89a\ua89b\ua89c\ua89d\ua89e\ua89f\ua8a0\ua8a1\ua8a2\ua8a3\ua8a4\ua8a5\ua8a6\ua8a7\ua8a8\ua8a9\ua8aa\ua8ab\ua8ac\ua8ad\ua8ae\ua8af\ua8b0\ua8b1\ua8b2\ua8b3\ua8b4\ua8b5\ua8b6\ua8b7\ua8b8\ua8b9\ua8ba\ua8bb\ua8bc\ua8bd\ua8be\ua8bf\ua8c0\ua8c1\ua8c2\ua8c3\ua8c4\ua8c5\ua8c6\ua8c7\ua8c8\ua8c9\ua8ca\ua8cb\ua8cc\ua8cd\ua8ce\ua8cf\ua8d0\ua8d1\ua8d2\ua8d3\ua8d4\ua8d5\ua8d6\ua8d7\ua8d8\ua8d9\ua8da\ua8db\ua8dc\ua8dd\ua8de\ua8df\ua8e0\ua8e1\ua8e2\ua8e3\ua8e4\ua8e5\ua8e6\ua8e7\ua8e8\ua8e9\ua8ea\ua8eb\ua8ec\ua8ed\ua8ee\ua8ef\ua8f0\ua8f1\ua8f2\ua8f3\ua8f4\ua8f5\ua8f6\ua8f7\ua8f8\ua8f9\ua8fa\ua8fb\ua8fc\ua8fd\ua8fe\ua8ff\ua900\ua901\ua902\ua903\ua904\ua905\ua906\ua907\ua908\ua909\ua90a\ua90b\ua90c\ua90d\ua90e\ua90f\ua910\ua911\ua912\ua913\ua914\ua915\ua916\ua917\ua918\ua919\ua91a\ua91b\ua91c\ua91d\ua91e\ua91f\ua920\ua921\ua922\ua923\ua924\ua925\ua926\ua927\ua928\ua929\ua92a\ua92b\ua92c\ua92d\ua92e\ua92f\ua930\ua931\ua932\ua933\ua934\ua935\ua936\ua937\ua938\ua939\ua93a\ua93b\ua93c\ua93d\ua93e\ua93f\ua940\ua941\ua942\ua943\ua944\ua945\ua946\ua947\ua948\ua949\ua94a\ua94b\ua94c\ua94d\ua94e\ua94f\ua950\ua951\ua952\ua953\ua954\ua955\ua956\ua957\ua958\ua959\ua95a\ua95b\ua95c\ua95d\ua95e\ua95f\ua960\ua961\ua962\ua963\ua964\ua965\ua966\ua967\ua968\ua969\ua96a\ua96b\ua96c\ua96d\ua96e\ua96f\ua970\ua971\ua972\ua973\ua974\ua975\ua976\ua977\ua978\ua979\ua97a\ua97b\ua97c\ua97d\ua97e\ua97f\ua980\ua981\ua982\ua983\ua984\ua985\ua986\ua987\ua988\ua989\ua98a\ua98b\ua98c\ua98d\ua98e\ua98f\ua990\ua991\ua992\ua993\ua994\ua995\ua996\ua997\ua998\ua999\ua99a\ua99b\ua99c\ua99d\ua99e\ua99f\ua9a0\ua9a1\ua9a2\ua9a3\ua9a4\ua9a5\ua9a6\ua9a7\ua9a8\ua9a9\ua9aa\ua9ab\ua9ac\ua9ad\ua9ae\ua9af\ua9b0\ua9b1\ua9b2\ua9b3\ua9b4\ua9b5\ua9b6\ua9b7\ua9b8\ua9b9\ua9ba\ua9bb\ua9bc\ua9bd\ua9be\ua9bf\ua9c0\ua9c1\ua9c2\ua9c3\ua9c4\ua9c5\ua9c6\ua9c7\ua9c8\ua9c9\ua9ca\ua9cb\ua9cc\ua9cd\ua9ce\ua9cf\ua9d0\ua9d1\ua9d2\ua9d3\ua9d4\ua9d5\ua9d6\ua9d7\ua9d8\ua9d9\ua9da\ua9db\ua9dc\ua9dd\ua9de\ua9df\ua9e0\ua9e1\ua9e2\ua9e3\ua9e4\ua9e5\ua9e6\ua9e7\ua9e8\ua9e9\ua9ea\ua9eb\ua9ec\ua9ed\ua9ee\ua9ef\ua9f0\ua9f1\ua9f2\ua9f3\ua9f4\ua9f5\ua9f6\ua9f7\ua9f8\ua9f9\ua9fa\ua9fb\ua9fc\ua9fd\ua9fe\ua9ff\uaa00\uaa01\uaa02\uaa03\uaa04\uaa05\uaa06\uaa07\uaa08\uaa09\uaa0a\uaa0b\uaa0c\uaa0d\uaa0e\uaa0f\uaa10\uaa11\uaa12\uaa13\uaa14\uaa15\uaa16\uaa17\uaa18\uaa19\uaa1a\uaa1b\uaa1c\uaa1d\uaa1e\uaa1f\uaa20\uaa21\uaa22\uaa23\uaa24\uaa25\uaa26\uaa27\uaa28\uaa29\uaa2a\uaa2b\uaa2c\uaa2d\uaa2e\uaa2f\uaa30\uaa31\uaa32\uaa33\uaa34\uaa35\uaa36\uaa37\uaa38\uaa39\uaa3a\uaa3b\uaa3c\uaa3d\uaa3e\uaa3f\uaa40\uaa41\uaa42\uaa43\uaa44\uaa45\uaa46\uaa47\uaa48\uaa49\uaa4a\uaa4b\uaa4c\uaa4d\uaa4e\uaa4f\uaa50\uaa51\uaa52\uaa53\uaa54\uaa55\uaa56\uaa57\uaa58\uaa59\uaa5a\uaa5b\uaa5c\uaa5d\uaa5e\uaa5f\uaa60\uaa61\uaa62\uaa63\uaa64\uaa65\uaa66\uaa67\uaa68\uaa69\uaa6a\uaa6b\uaa6c\uaa6d\uaa6e\uaa6f\uaa70\uaa71\uaa72\uaa73\uaa74\uaa75\uaa76\uaa77\uaa78\uaa79\uaa7a\uaa7b\uaa7c\uaa7d\uaa7e\uaa7f\uaa80\uaa81\uaa82\uaa83\uaa84\uaa85\uaa86\uaa87\uaa88\uaa89\uaa8a\uaa8b\uaa8c\uaa8d\uaa8e\uaa8f\uaa90\uaa91\uaa92\uaa93\uaa94\uaa95\uaa96\uaa97\uaa98\uaa99\uaa9a\uaa9b\uaa9c\uaa9d\uaa9e\uaa9f\uaaa0\uaaa1\uaaa2\uaaa3\uaaa4\uaaa5\uaaa6\uaaa7\uaaa8\uaaa9\uaaaa\uaaab\uaaac\uaaad\uaaae\uaaaf\uaab0\uaab1\uaab2\uaab3\uaab4\uaab5\uaab6\uaab7\uaab8\uaab9\uaaba\uaabb\uaabc\uaabd\uaabe\uaabf\uaac0\uaac1\uaac2\uaac3\uaac4\uaac5\uaac6\uaac7\uaac8\uaac9\uaaca\uaacb\uaacc\uaacd\uaace\uaacf\uaad0\uaad1\uaad2\uaad3\uaad4\uaad5\uaad6\uaad7\uaad8\uaad9\uaada\uaadb\uaadc\uaadd\uaade\uaadf\uaae0\uaae1\uaae2\uaae3\uaae4\uaae5\uaae6\uaae7\uaae8\uaae9\uaaea\uaaeb\uaaec\uaaed\uaaee\uaaef\uaaf0\uaaf1\uaaf2\uaaf3\uaaf4\uaaf5\uaaf6\uaaf7\uaaf8\uaaf9\uaafa\uaafb\uaafc\uaafd\uaafe\uaaff\uab00\uab01\uab02\uab03\uab04\uab05\uab06\uab07\uab08\uab09\uab0a\uab0b\uab0c\uab0d\uab0e\uab0f\uab10\uab11\uab12\uab13\uab14\uab15\uab16\uab17\uab18\uab19\uab1a\uab1b\uab1c\uab1d\uab1e\uab1f\uab20\uab21\uab22\uab23\uab24\uab25\uab26\uab27\uab28\uab29\uab2a\uab2b\uab2c\uab2d\uab2e\uab2f\uab30\uab31\uab32\uab33\uab34\uab35\uab36\uab37\uab38\uab39\uab3a\uab3b\uab3c\uab3d\uab3e\uab3f\uab40\uab41\uab42\uab43\uab44\uab45\uab46\uab47\uab48\uab49\uab4a\uab4b\uab4c\uab4d\uab4e\uab4f\uab50\uab51\uab52\uab53\uab54\uab55\uab56\uab57\uab58\uab59\uab5a\uab5b\uab5c\uab5d\uab5e\uab5f\uab60\uab61\uab62\uab63\uab64\uab65\uab66\uab67\uab68\uab69\uab6a\uab6b\uab6c\uab6d\uab6e\uab6f\uab70\uab71\uab72\uab73\uab74\uab75\uab76\uab77\uab78\uab79\uab7a\uab7b\uab7c\uab7d\uab7e\uab7f\uab80\uab81\uab82\uab83\uab84\uab85\uab86\uab87\uab88\uab89\uab8a\uab8b\uab8c\uab8d\uab8e\uab8f\uab90\uab91\uab92\uab93\uab94\uab95\uab96\uab97\uab98\uab99\uab9a\uab9b\uab9c\uab9d\uab9e\uab9f\uaba0\uaba1\uaba2\uaba3\uaba4\uaba5\uaba6\uaba7\uaba8\uaba9\uabaa\uabab\uabac\uabad\uabae\uabaf\uabb0\uabb1\uabb2\uabb3\uabb4\uabb5\uabb6\uabb7\uabb8\uabb9\uabba\uabbb\uabbc\uabbd\uabbe\uabbf\uabc0\uabc1\uabc2\uabc3\uabc4\uabc5\uabc6\uabc7\uabc8\uabc9\uabca\uabcb\uabcc\uabcd\uabce\uabcf\uabd0\uabd1\uabd2\uabd3\uabd4\uabd5\uabd6\uabd7\uabd8\uabd9\uabda\uabdb\uabdc\uabdd\uabde\uabdf\uabe0\uabe1\uabe2\uabe3\uabe4\uabe5\uabe6\uabe7\uabe8\uabe9\uabea\uabeb\uabec\uabed\uabee\uabef\uabf0\uabf1\uabf2\uabf3\uabf4\uabf5\uabf6\uabf7\uabf8\uabf9\uabfa\uabfb\uabfc\uabfd\uabfe\uabff\ud7a4\ud7a5\ud7a6\ud7a7\ud7a8\ud7a9\ud7aa\ud7ab\ud7ac\ud7ad\ud7ae\ud7af\ud7b0\ud7b1\ud7b2\ud7b3\ud7b4\ud7b5\ud7b6\ud7b7\ud7b8\ud7b9\ud7ba\ud7bb\ud7bc\ud7bd\ud7be\ud7bf\ud7c0\ud7c1\ud7c2\ud7c3\ud7c4\ud7c5\ud7c6\ud7c7\ud7c8\ud7c9\ud7ca\ud7cb\ud7cc\ud7cd\ud7ce\ud7cf\ud7d0\ud7d1\ud7d2\ud7d3\ud7d4\ud7d5\ud7d6\ud7d7\ud7d8\ud7d9\ud7da\ud7db\ud7dc\ud7dd\ud7de\ud7df\ud7e0\ud7e1\ud7e2\ud7e3\ud7e4\ud7e5\ud7e6\ud7e7\ud7e8\ud7e9\ud7ea\ud7eb\ud7ec\ud7ed\ud7ee\ud7ef\ud7f0\ud7f1\ud7f2\ud7f3\ud7f4\ud7f5\ud7f6\ud7f7\ud7f8\ud7f9\ud7fa\ud7fb\ud7fc\ud7fd\ud7fe\ud7ff\ufa2e\ufa2f\ufa6b\ufa6c\ufa6d\ufa6e\ufa6f\ufada\ufadb\ufadc\ufadd\ufade\ufadf\ufae0\ufae1\ufae2\ufae3\ufae4\ufae5\ufae6\ufae7\ufae8\ufae9\ufaea\ufaeb\ufaec\ufaed\ufaee\ufaef\ufaf0\ufaf1\ufaf2\ufaf3\ufaf4\ufaf5\ufaf6\ufaf7\ufaf8\ufaf9\ufafa\ufafb\ufafc\ufafd\ufafe\ufaff\ufb07\ufb08\ufb09\ufb0a\ufb0b\ufb0c\ufb0d\ufb0e\ufb0f\ufb10\ufb11\ufb12\ufb18\ufb19\ufb1a\ufb1b\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbb2\ufbb3\ufbb4\ufbb5\ufbb6\ufbb7\ufbb8\ufbb9\ufbba\ufbbb\ufbbc\ufbbd\ufbbe\ufbbf\ufbc0\ufbc1\ufbc2\ufbc3\ufbc4\ufbc5\ufbc6\ufbc7\ufbc8\ufbc9\ufbca\ufbcb\ufbcc\ufbcd\ufbce\ufbcf\ufbd0\ufbd1\ufbd2\ufd40\ufd41\ufd42\ufd43\ufd44\ufd45\ufd46\ufd47\ufd48\ufd49\ufd4a\ufd4b\ufd4c\ufd4d\ufd4e\ufd4f\ufd90\ufd91\ufdc8\ufdc9\ufdca\ufdcb\ufdcc\ufdcd\ufdce\ufdcf\ufdd0\ufdd1\ufdd2\ufdd3\ufdd4\ufdd5\ufdd6\ufdd7\ufdd8\ufdd9\ufdda\ufddb\ufddc\ufddd\ufdde\ufddf\ufde0\ufde1\ufde2\ufde3\ufde4\ufde5\ufde6\ufde7\ufde8\ufde9\ufdea\ufdeb\ufdec\ufded\ufdee\ufdef\ufdfe\ufdff\ufe1a\ufe1b\ufe1c\ufe1d\ufe1e\ufe1f\ufe24\ufe25\ufe26\ufe27\ufe28\ufe29\ufe2a\ufe2b\ufe2c\ufe2d\ufe2e\ufe2f\ufe53\ufe67\ufe6c\ufe6d\ufe6e\ufe6f\ufe75\ufefd\ufefe\uff00\uffbf\uffc0\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd\uffde\uffdf\uffe7\uffef\ufff0\ufff1\ufff2\ufff3\ufff4\ufff5\ufff6\ufff7\ufff8\ufffe' + +Co = u'\ue000\ue001\ue002\ue003\ue004\ue005\ue006\ue007\ue008\ue009\ue00a\ue00b\ue00c\ue00d\ue00e\ue00f\ue010\ue011\ue012\ue013\ue014\ue015\ue016\ue017\ue018\ue019\ue01a\ue01b\ue01c\ue01d\ue01e\ue01f\ue020\ue021\ue022\ue023\ue024\ue025\ue026\ue027\ue028\ue029\ue02a\ue02b\ue02c\ue02d\ue02e\ue02f\ue030\ue031\ue032\ue033\ue034\ue035\ue036\ue037\ue038\ue039\ue03a\ue03b\ue03c\ue03d\ue03e\ue03f\ue040\ue041\ue042\ue043\ue044\ue045\ue046\ue047\ue048\ue049\ue04a\ue04b\ue04c\ue04d\ue04e\ue04f\ue050\ue051\ue052\ue053\ue054\ue055\ue056\ue057\ue058\ue059\ue05a\ue05b\ue05c\ue05d\ue05e\ue05f\ue060\ue061\ue062\ue063\ue064\ue065\ue066\ue067\ue068\ue069\ue06a\ue06b\ue06c\ue06d\ue06e\ue06f\ue070\ue071\ue072\ue073\ue074\ue075\ue076\ue077\ue078\ue079\ue07a\ue07b\ue07c\ue07d\ue07e\ue07f\ue080\ue081\ue082\ue083\ue084\ue085\ue086\ue087\ue088\ue089\ue08a\ue08b\ue08c\ue08d\ue08e\ue08f\ue090\ue091\ue092\ue093\ue094\ue095\ue096\ue097\ue098\ue099\ue09a\ue09b\ue09c\ue09d\ue09e\ue09f\ue0a0\ue0a1\ue0a2\ue0a3\ue0a4\ue0a5\ue0a6\ue0a7\ue0a8\ue0a9\ue0aa\ue0ab\ue0ac\ue0ad\ue0ae\ue0af\ue0b0\ue0b1\ue0b2\ue0b3\ue0b4\ue0b5\ue0b6\ue0b7\ue0b8\ue0b9\ue0ba\ue0bb\ue0bc\ue0bd\ue0be\ue0bf\ue0c0\ue0c1\ue0c2\ue0c3\ue0c4\ue0c5\ue0c6\ue0c7\ue0c8\ue0c9\ue0ca\ue0cb\ue0cc\ue0cd\ue0ce\ue0cf\ue0d0\ue0d1\ue0d2\ue0d3\ue0d4\ue0d5\ue0d6\ue0d7\ue0d8\ue0d9\ue0da\ue0db\ue0dc\ue0dd\ue0de\ue0df\ue0e0\ue0e1\ue0e2\ue0e3\ue0e4\ue0e5\ue0e6\ue0e7\ue0e8\ue0e9\ue0ea\ue0eb\ue0ec\ue0ed\ue0ee\ue0ef\ue0f0\ue0f1\ue0f2\ue0f3\ue0f4\ue0f5\ue0f6\ue0f7\ue0f8\ue0f9\ue0fa\ue0fb\ue0fc\ue0fd\ue0fe\ue0ff\ue100\ue101\ue102\ue103\ue104\ue105\ue106\ue107\ue108\ue109\ue10a\ue10b\ue10c\ue10d\ue10e\ue10f\ue110\ue111\ue112\ue113\ue114\ue115\ue116\ue117\ue118\ue119\ue11a\ue11b\ue11c\ue11d\ue11e\ue11f\ue120\ue121\ue122\ue123\ue124\ue125\ue126\ue127\ue128\ue129\ue12a\ue12b\ue12c\ue12d\ue12e\ue12f\ue130\ue131\ue132\ue133\ue134\ue135\ue136\ue137\ue138\ue139\ue13a\ue13b\ue13c\ue13d\ue13e\ue13f\ue140\ue141\ue142\ue143\ue144\ue145\ue146\ue147\ue148\ue149\ue14a\ue14b\ue14c\ue14d\ue14e\ue14f\ue150\ue151\ue152\ue153\ue154\ue155\ue156\ue157\ue158\ue159\ue15a\ue15b\ue15c\ue15d\ue15e\ue15f\ue160\ue161\ue162\ue163\ue164\ue165\ue166\ue167\ue168\ue169\ue16a\ue16b\ue16c\ue16d\ue16e\ue16f\ue170\ue171\ue172\ue173\ue174\ue175\ue176\ue177\ue178\ue179\ue17a\ue17b\ue17c\ue17d\ue17e\ue17f\ue180\ue181\ue182\ue183\ue184\ue185\ue186\ue187\ue188\ue189\ue18a\ue18b\ue18c\ue18d\ue18e\ue18f\ue190\ue191\ue192\ue193\ue194\ue195\ue196\ue197\ue198\ue199\ue19a\ue19b\ue19c\ue19d\ue19e\ue19f\ue1a0\ue1a1\ue1a2\ue1a3\ue1a4\ue1a5\ue1a6\ue1a7\ue1a8\ue1a9\ue1aa\ue1ab\ue1ac\ue1ad\ue1ae\ue1af\ue1b0\ue1b1\ue1b2\ue1b3\ue1b4\ue1b5\ue1b6\ue1b7\ue1b8\ue1b9\ue1ba\ue1bb\ue1bc\ue1bd\ue1be\ue1bf\ue1c0\ue1c1\ue1c2\ue1c3\ue1c4\ue1c5\ue1c6\ue1c7\ue1c8\ue1c9\ue1ca\ue1cb\ue1cc\ue1cd\ue1ce\ue1cf\ue1d0\ue1d1\ue1d2\ue1d3\ue1d4\ue1d5\ue1d6\ue1d7\ue1d8\ue1d9\ue1da\ue1db\ue1dc\ue1dd\ue1de\ue1df\ue1e0\ue1e1\ue1e2\ue1e3\ue1e4\ue1e5\ue1e6\ue1e7\ue1e8\ue1e9\ue1ea\ue1eb\ue1ec\ue1ed\ue1ee\ue1ef\ue1f0\ue1f1\ue1f2\ue1f3\ue1f4\ue1f5\ue1f6\ue1f7\ue1f8\ue1f9\ue1fa\ue1fb\ue1fc\ue1fd\ue1fe\ue1ff\ue200\ue201\ue202\ue203\ue204\ue205\ue206\ue207\ue208\ue209\ue20a\ue20b\ue20c\ue20d\ue20e\ue20f\ue210\ue211\ue212\ue213\ue214\ue215\ue216\ue217\ue218\ue219\ue21a\ue21b\ue21c\ue21d\ue21e\ue21f\ue220\ue221\ue222\ue223\ue224\ue225\ue226\ue227\ue228\ue229\ue22a\ue22b\ue22c\ue22d\ue22e\ue22f\ue230\ue231\ue232\ue233\ue234\ue235\ue236\ue237\ue238\ue239\ue23a\ue23b\ue23c\ue23d\ue23e\ue23f\ue240\ue241\ue242\ue243\ue244\ue245\ue246\ue247\ue248\ue249\ue24a\ue24b\ue24c\ue24d\ue24e\ue24f\ue250\ue251\ue252\ue253\ue254\ue255\ue256\ue257\ue258\ue259\ue25a\ue25b\ue25c\ue25d\ue25e\ue25f\ue260\ue261\ue262\ue263\ue264\ue265\ue266\ue267\ue268\ue269\ue26a\ue26b\ue26c\ue26d\ue26e\ue26f\ue270\ue271\ue272\ue273\ue274\ue275\ue276\ue277\ue278\ue279\ue27a\ue27b\ue27c\ue27d\ue27e\ue27f\ue280\ue281\ue282\ue283\ue284\ue285\ue286\ue287\ue288\ue289\ue28a\ue28b\ue28c\ue28d\ue28e\ue28f\ue290\ue291\ue292\ue293\ue294\ue295\ue296\ue297\ue298\ue299\ue29a\ue29b\ue29c\ue29d\ue29e\ue29f\ue2a0\ue2a1\ue2a2\ue2a3\ue2a4\ue2a5\ue2a6\ue2a7\ue2a8\ue2a9\ue2aa\ue2ab\ue2ac\ue2ad\ue2ae\ue2af\ue2b0\ue2b1\ue2b2\ue2b3\ue2b4\ue2b5\ue2b6\ue2b7\ue2b8\ue2b9\ue2ba\ue2bb\ue2bc\ue2bd\ue2be\ue2bf\ue2c0\ue2c1\ue2c2\ue2c3\ue2c4\ue2c5\ue2c6\ue2c7\ue2c8\ue2c9\ue2ca\ue2cb\ue2cc\ue2cd\ue2ce\ue2cf\ue2d0\ue2d1\ue2d2\ue2d3\ue2d4\ue2d5\ue2d6\ue2d7\ue2d8\ue2d9\ue2da\ue2db\ue2dc\ue2dd\ue2de\ue2df\ue2e0\ue2e1\ue2e2\ue2e3\ue2e4\ue2e5\ue2e6\ue2e7\ue2e8\ue2e9\ue2ea\ue2eb\ue2ec\ue2ed\ue2ee\ue2ef\ue2f0\ue2f1\ue2f2\ue2f3\ue2f4\ue2f5\ue2f6\ue2f7\ue2f8\ue2f9\ue2fa\ue2fb\ue2fc\ue2fd\ue2fe\ue2ff\ue300\ue301\ue302\ue303\ue304\ue305\ue306\ue307\ue308\ue309\ue30a\ue30b\ue30c\ue30d\ue30e\ue30f\ue310\ue311\ue312\ue313\ue314\ue315\ue316\ue317\ue318\ue319\ue31a\ue31b\ue31c\ue31d\ue31e\ue31f\ue320\ue321\ue322\ue323\ue324\ue325\ue326\ue327\ue328\ue329\ue32a\ue32b\ue32c\ue32d\ue32e\ue32f\ue330\ue331\ue332\ue333\ue334\ue335\ue336\ue337\ue338\ue339\ue33a\ue33b\ue33c\ue33d\ue33e\ue33f\ue340\ue341\ue342\ue343\ue344\ue345\ue346\ue347\ue348\ue349\ue34a\ue34b\ue34c\ue34d\ue34e\ue34f\ue350\ue351\ue352\ue353\ue354\ue355\ue356\ue357\ue358\ue359\ue35a\ue35b\ue35c\ue35d\ue35e\ue35f\ue360\ue361\ue362\ue363\ue364\ue365\ue366\ue367\ue368\ue369\ue36a\ue36b\ue36c\ue36d\ue36e\ue36f\ue370\ue371\ue372\ue373\ue374\ue375\ue376\ue377\ue378\ue379\ue37a\ue37b\ue37c\ue37d\ue37e\ue37f\ue380\ue381\ue382\ue383\ue384\ue385\ue386\ue387\ue388\ue389\ue38a\ue38b\ue38c\ue38d\ue38e\ue38f\ue390\ue391\ue392\ue393\ue394\ue395\ue396\ue397\ue398\ue399\ue39a\ue39b\ue39c\ue39d\ue39e\ue39f\ue3a0\ue3a1\ue3a2\ue3a3\ue3a4\ue3a5\ue3a6\ue3a7\ue3a8\ue3a9\ue3aa\ue3ab\ue3ac\ue3ad\ue3ae\ue3af\ue3b0\ue3b1\ue3b2\ue3b3\ue3b4\ue3b5\ue3b6\ue3b7\ue3b8\ue3b9\ue3ba\ue3bb\ue3bc\ue3bd\ue3be\ue3bf\ue3c0\ue3c1\ue3c2\ue3c3\ue3c4\ue3c5\ue3c6\ue3c7\ue3c8\ue3c9\ue3ca\ue3cb\ue3cc\ue3cd\ue3ce\ue3cf\ue3d0\ue3d1\ue3d2\ue3d3\ue3d4\ue3d5\ue3d6\ue3d7\ue3d8\ue3d9\ue3da\ue3db\ue3dc\ue3dd\ue3de\ue3df\ue3e0\ue3e1\ue3e2\ue3e3\ue3e4\ue3e5\ue3e6\ue3e7\ue3e8\ue3e9\ue3ea\ue3eb\ue3ec\ue3ed\ue3ee\ue3ef\ue3f0\ue3f1\ue3f2\ue3f3\ue3f4\ue3f5\ue3f6\ue3f7\ue3f8\ue3f9\ue3fa\ue3fb\ue3fc\ue3fd\ue3fe\ue3ff\ue400\ue401\ue402\ue403\ue404\ue405\ue406\ue407\ue408\ue409\ue40a\ue40b\ue40c\ue40d\ue40e\ue40f\ue410\ue411\ue412\ue413\ue414\ue415\ue416\ue417\ue418\ue419\ue41a\ue41b\ue41c\ue41d\ue41e\ue41f\ue420\ue421\ue422\ue423\ue424\ue425\ue426\ue427\ue428\ue429\ue42a\ue42b\ue42c\ue42d\ue42e\ue42f\ue430\ue431\ue432\ue433\ue434\ue435\ue436\ue437\ue438\ue439\ue43a\ue43b\ue43c\ue43d\ue43e\ue43f\ue440\ue441\ue442\ue443\ue444\ue445\ue446\ue447\ue448\ue449\ue44a\ue44b\ue44c\ue44d\ue44e\ue44f\ue450\ue451\ue452\ue453\ue454\ue455\ue456\ue457\ue458\ue459\ue45a\ue45b\ue45c\ue45d\ue45e\ue45f\ue460\ue461\ue462\ue463\ue464\ue465\ue466\ue467\ue468\ue469\ue46a\ue46b\ue46c\ue46d\ue46e\ue46f\ue470\ue471\ue472\ue473\ue474\ue475\ue476\ue477\ue478\ue479\ue47a\ue47b\ue47c\ue47d\ue47e\ue47f\ue480\ue481\ue482\ue483\ue484\ue485\ue486\ue487\ue488\ue489\ue48a\ue48b\ue48c\ue48d\ue48e\ue48f\ue490\ue491\ue492\ue493\ue494\ue495\ue496\ue497\ue498\ue499\ue49a\ue49b\ue49c\ue49d\ue49e\ue49f\ue4a0\ue4a1\ue4a2\ue4a3\ue4a4\ue4a5\ue4a6\ue4a7\ue4a8\ue4a9\ue4aa\ue4ab\ue4ac\ue4ad\ue4ae\ue4af\ue4b0\ue4b1\ue4b2\ue4b3\ue4b4\ue4b5\ue4b6\ue4b7\ue4b8\ue4b9\ue4ba\ue4bb\ue4bc\ue4bd\ue4be\ue4bf\ue4c0\ue4c1\ue4c2\ue4c3\ue4c4\ue4c5\ue4c6\ue4c7\ue4c8\ue4c9\ue4ca\ue4cb\ue4cc\ue4cd\ue4ce\ue4cf\ue4d0\ue4d1\ue4d2\ue4d3\ue4d4\ue4d5\ue4d6\ue4d7\ue4d8\ue4d9\ue4da\ue4db\ue4dc\ue4dd\ue4de\ue4df\ue4e0\ue4e1\ue4e2\ue4e3\ue4e4\ue4e5\ue4e6\ue4e7\ue4e8\ue4e9\ue4ea\ue4eb\ue4ec\ue4ed\ue4ee\ue4ef\ue4f0\ue4f1\ue4f2\ue4f3\ue4f4\ue4f5\ue4f6\ue4f7\ue4f8\ue4f9\ue4fa\ue4fb\ue4fc\ue4fd\ue4fe\ue4ff\ue500\ue501\ue502\ue503\ue504\ue505\ue506\ue507\ue508\ue509\ue50a\ue50b\ue50c\ue50d\ue50e\ue50f\ue510\ue511\ue512\ue513\ue514\ue515\ue516\ue517\ue518\ue519\ue51a\ue51b\ue51c\ue51d\ue51e\ue51f\ue520\ue521\ue522\ue523\ue524\ue525\ue526\ue527\ue528\ue529\ue52a\ue52b\ue52c\ue52d\ue52e\ue52f\ue530\ue531\ue532\ue533\ue534\ue535\ue536\ue537\ue538\ue539\ue53a\ue53b\ue53c\ue53d\ue53e\ue53f\ue540\ue541\ue542\ue543\ue544\ue545\ue546\ue547\ue548\ue549\ue54a\ue54b\ue54c\ue54d\ue54e\ue54f\ue550\ue551\ue552\ue553\ue554\ue555\ue556\ue557\ue558\ue559\ue55a\ue55b\ue55c\ue55d\ue55e\ue55f\ue560\ue561\ue562\ue563\ue564\ue565\ue566\ue567\ue568\ue569\ue56a\ue56b\ue56c\ue56d\ue56e\ue56f\ue570\ue571\ue572\ue573\ue574\ue575\ue576\ue577\ue578\ue579\ue57a\ue57b\ue57c\ue57d\ue57e\ue57f\ue580\ue581\ue582\ue583\ue584\ue585\ue586\ue587\ue588\ue589\ue58a\ue58b\ue58c\ue58d\ue58e\ue58f\ue590\ue591\ue592\ue593\ue594\ue595\ue596\ue597\ue598\ue599\ue59a\ue59b\ue59c\ue59d\ue59e\ue59f\ue5a0\ue5a1\ue5a2\ue5a3\ue5a4\ue5a5\ue5a6\ue5a7\ue5a8\ue5a9\ue5aa\ue5ab\ue5ac\ue5ad\ue5ae\ue5af\ue5b0\ue5b1\ue5b2\ue5b3\ue5b4\ue5b5\ue5b6\ue5b7\ue5b8\ue5b9\ue5ba\ue5bb\ue5bc\ue5bd\ue5be\ue5bf\ue5c0\ue5c1\ue5c2\ue5c3\ue5c4\ue5c5\ue5c6\ue5c7\ue5c8\ue5c9\ue5ca\ue5cb\ue5cc\ue5cd\ue5ce\ue5cf\ue5d0\ue5d1\ue5d2\ue5d3\ue5d4\ue5d5\ue5d6\ue5d7\ue5d8\ue5d9\ue5da\ue5db\ue5dc\ue5dd\ue5de\ue5df\ue5e0\ue5e1\ue5e2\ue5e3\ue5e4\ue5e5\ue5e6\ue5e7\ue5e8\ue5e9\ue5ea\ue5eb\ue5ec\ue5ed\ue5ee\ue5ef\ue5f0\ue5f1\ue5f2\ue5f3\ue5f4\ue5f5\ue5f6\ue5f7\ue5f8\ue5f9\ue5fa\ue5fb\ue5fc\ue5fd\ue5fe\ue5ff\ue600\ue601\ue602\ue603\ue604\ue605\ue606\ue607\ue608\ue609\ue60a\ue60b\ue60c\ue60d\ue60e\ue60f\ue610\ue611\ue612\ue613\ue614\ue615\ue616\ue617\ue618\ue619\ue61a\ue61b\ue61c\ue61d\ue61e\ue61f\ue620\ue621\ue622\ue623\ue624\ue625\ue626\ue627\ue628\ue629\ue62a\ue62b\ue62c\ue62d\ue62e\ue62f\ue630\ue631\ue632\ue633\ue634\ue635\ue636\ue637\ue638\ue639\ue63a\ue63b\ue63c\ue63d\ue63e\ue63f\ue640\ue641\ue642\ue643\ue644\ue645\ue646\ue647\ue648\ue649\ue64a\ue64b\ue64c\ue64d\ue64e\ue64f\ue650\ue651\ue652\ue653\ue654\ue655\ue656\ue657\ue658\ue659\ue65a\ue65b\ue65c\ue65d\ue65e\ue65f\ue660\ue661\ue662\ue663\ue664\ue665\ue666\ue667\ue668\ue669\ue66a\ue66b\ue66c\ue66d\ue66e\ue66f\ue670\ue671\ue672\ue673\ue674\ue675\ue676\ue677\ue678\ue679\ue67a\ue67b\ue67c\ue67d\ue67e\ue67f\ue680\ue681\ue682\ue683\ue684\ue685\ue686\ue687\ue688\ue689\ue68a\ue68b\ue68c\ue68d\ue68e\ue68f\ue690\ue691\ue692\ue693\ue694\ue695\ue696\ue697\ue698\ue699\ue69a\ue69b\ue69c\ue69d\ue69e\ue69f\ue6a0\ue6a1\ue6a2\ue6a3\ue6a4\ue6a5\ue6a6\ue6a7\ue6a8\ue6a9\ue6aa\ue6ab\ue6ac\ue6ad\ue6ae\ue6af\ue6b0\ue6b1\ue6b2\ue6b3\ue6b4\ue6b5\ue6b6\ue6b7\ue6b8\ue6b9\ue6ba\ue6bb\ue6bc\ue6bd\ue6be\ue6bf\ue6c0\ue6c1\ue6c2\ue6c3\ue6c4\ue6c5\ue6c6\ue6c7\ue6c8\ue6c9\ue6ca\ue6cb\ue6cc\ue6cd\ue6ce\ue6cf\ue6d0\ue6d1\ue6d2\ue6d3\ue6d4\ue6d5\ue6d6\ue6d7\ue6d8\ue6d9\ue6da\ue6db\ue6dc\ue6dd\ue6de\ue6df\ue6e0\ue6e1\ue6e2\ue6e3\ue6e4\ue6e5\ue6e6\ue6e7\ue6e8\ue6e9\ue6ea\ue6eb\ue6ec\ue6ed\ue6ee\ue6ef\ue6f0\ue6f1\ue6f2\ue6f3\ue6f4\ue6f5\ue6f6\ue6f7\ue6f8\ue6f9\ue6fa\ue6fb\ue6fc\ue6fd\ue6fe\ue6ff\ue700\ue701\ue702\ue703\ue704\ue705\ue706\ue707\ue708\ue709\ue70a\ue70b\ue70c\ue70d\ue70e\ue70f\ue710\ue711\ue712\ue713\ue714\ue715\ue716\ue717\ue718\ue719\ue71a\ue71b\ue71c\ue71d\ue71e\ue71f\ue720\ue721\ue722\ue723\ue724\ue725\ue726\ue727\ue728\ue729\ue72a\ue72b\ue72c\ue72d\ue72e\ue72f\ue730\ue731\ue732\ue733\ue734\ue735\ue736\ue737\ue738\ue739\ue73a\ue73b\ue73c\ue73d\ue73e\ue73f\ue740\ue741\ue742\ue743\ue744\ue745\ue746\ue747\ue748\ue749\ue74a\ue74b\ue74c\ue74d\ue74e\ue74f\ue750\ue751\ue752\ue753\ue754\ue755\ue756\ue757\ue758\ue759\ue75a\ue75b\ue75c\ue75d\ue75e\ue75f\ue760\ue761\ue762\ue763\ue764\ue765\ue766\ue767\ue768\ue769\ue76a\ue76b\ue76c\ue76d\ue76e\ue76f\ue770\ue771\ue772\ue773\ue774\ue775\ue776\ue777\ue778\ue779\ue77a\ue77b\ue77c\ue77d\ue77e\ue77f\ue780\ue781\ue782\ue783\ue784\ue785\ue786\ue787\ue788\ue789\ue78a\ue78b\ue78c\ue78d\ue78e\ue78f\ue790\ue791\ue792\ue793\ue794\ue795\ue796\ue797\ue798\ue799\ue79a\ue79b\ue79c\ue79d\ue79e\ue79f\ue7a0\ue7a1\ue7a2\ue7a3\ue7a4\ue7a5\ue7a6\ue7a7\ue7a8\ue7a9\ue7aa\ue7ab\ue7ac\ue7ad\ue7ae\ue7af\ue7b0\ue7b1\ue7b2\ue7b3\ue7b4\ue7b5\ue7b6\ue7b7\ue7b8\ue7b9\ue7ba\ue7bb\ue7bc\ue7bd\ue7be\ue7bf\ue7c0\ue7c1\ue7c2\ue7c3\ue7c4\ue7c5\ue7c6\ue7c7\ue7c8\ue7c9\ue7ca\ue7cb\ue7cc\ue7cd\ue7ce\ue7cf\ue7d0\ue7d1\ue7d2\ue7d3\ue7d4\ue7d5\ue7d6\ue7d7\ue7d8\ue7d9\ue7da\ue7db\ue7dc\ue7dd\ue7de\ue7df\ue7e0\ue7e1\ue7e2\ue7e3\ue7e4\ue7e5\ue7e6\ue7e7\ue7e8\ue7e9\ue7ea\ue7eb\ue7ec\ue7ed\ue7ee\ue7ef\ue7f0\ue7f1\ue7f2\ue7f3\ue7f4\ue7f5\ue7f6\ue7f7\ue7f8\ue7f9\ue7fa\ue7fb\ue7fc\ue7fd\ue7fe\ue7ff\ue800\ue801\ue802\ue803\ue804\ue805\ue806\ue807\ue808\ue809\ue80a\ue80b\ue80c\ue80d\ue80e\ue80f\ue810\ue811\ue812\ue813\ue814\ue815\ue816\ue817\ue818\ue819\ue81a\ue81b\ue81c\ue81d\ue81e\ue81f\ue820\ue821\ue822\ue823\ue824\ue825\ue826\ue827\ue828\ue829\ue82a\ue82b\ue82c\ue82d\ue82e\ue82f\ue830\ue831\ue832\ue833\ue834\ue835\ue836\ue837\ue838\ue839\ue83a\ue83b\ue83c\ue83d\ue83e\ue83f\ue840\ue841\ue842\ue843\ue844\ue845\ue846\ue847\ue848\ue849\ue84a\ue84b\ue84c\ue84d\ue84e\ue84f\ue850\ue851\ue852\ue853\ue854\ue855\ue856\ue857\ue858\ue859\ue85a\ue85b\ue85c\ue85d\ue85e\ue85f\ue860\ue861\ue862\ue863\ue864\ue865\ue866\ue867\ue868\ue869\ue86a\ue86b\ue86c\ue86d\ue86e\ue86f\ue870\ue871\ue872\ue873\ue874\ue875\ue876\ue877\ue878\ue879\ue87a\ue87b\ue87c\ue87d\ue87e\ue87f\ue880\ue881\ue882\ue883\ue884\ue885\ue886\ue887\ue888\ue889\ue88a\ue88b\ue88c\ue88d\ue88e\ue88f\ue890\ue891\ue892\ue893\ue894\ue895\ue896\ue897\ue898\ue899\ue89a\ue89b\ue89c\ue89d\ue89e\ue89f\ue8a0\ue8a1\ue8a2\ue8a3\ue8a4\ue8a5\ue8a6\ue8a7\ue8a8\ue8a9\ue8aa\ue8ab\ue8ac\ue8ad\ue8ae\ue8af\ue8b0\ue8b1\ue8b2\ue8b3\ue8b4\ue8b5\ue8b6\ue8b7\ue8b8\ue8b9\ue8ba\ue8bb\ue8bc\ue8bd\ue8be\ue8bf\ue8c0\ue8c1\ue8c2\ue8c3\ue8c4\ue8c5\ue8c6\ue8c7\ue8c8\ue8c9\ue8ca\ue8cb\ue8cc\ue8cd\ue8ce\ue8cf\ue8d0\ue8d1\ue8d2\ue8d3\ue8d4\ue8d5\ue8d6\ue8d7\ue8d8\ue8d9\ue8da\ue8db\ue8dc\ue8dd\ue8de\ue8df\ue8e0\ue8e1\ue8e2\ue8e3\ue8e4\ue8e5\ue8e6\ue8e7\ue8e8\ue8e9\ue8ea\ue8eb\ue8ec\ue8ed\ue8ee\ue8ef\ue8f0\ue8f1\ue8f2\ue8f3\ue8f4\ue8f5\ue8f6\ue8f7\ue8f8\ue8f9\ue8fa\ue8fb\ue8fc\ue8fd\ue8fe\ue8ff\ue900\ue901\ue902\ue903\ue904\ue905\ue906\ue907\ue908\ue909\ue90a\ue90b\ue90c\ue90d\ue90e\ue90f\ue910\ue911\ue912\ue913\ue914\ue915\ue916\ue917\ue918\ue919\ue91a\ue91b\ue91c\ue91d\ue91e\ue91f\ue920\ue921\ue922\ue923\ue924\ue925\ue926\ue927\ue928\ue929\ue92a\ue92b\ue92c\ue92d\ue92e\ue92f\ue930\ue931\ue932\ue933\ue934\ue935\ue936\ue937\ue938\ue939\ue93a\ue93b\ue93c\ue93d\ue93e\ue93f\ue940\ue941\ue942\ue943\ue944\ue945\ue946\ue947\ue948\ue949\ue94a\ue94b\ue94c\ue94d\ue94e\ue94f\ue950\ue951\ue952\ue953\ue954\ue955\ue956\ue957\ue958\ue959\ue95a\ue95b\ue95c\ue95d\ue95e\ue95f\ue960\ue961\ue962\ue963\ue964\ue965\ue966\ue967\ue968\ue969\ue96a\ue96b\ue96c\ue96d\ue96e\ue96f\ue970\ue971\ue972\ue973\ue974\ue975\ue976\ue977\ue978\ue979\ue97a\ue97b\ue97c\ue97d\ue97e\ue97f\ue980\ue981\ue982\ue983\ue984\ue985\ue986\ue987\ue988\ue989\ue98a\ue98b\ue98c\ue98d\ue98e\ue98f\ue990\ue991\ue992\ue993\ue994\ue995\ue996\ue997\ue998\ue999\ue99a\ue99b\ue99c\ue99d\ue99e\ue99f\ue9a0\ue9a1\ue9a2\ue9a3\ue9a4\ue9a5\ue9a6\ue9a7\ue9a8\ue9a9\ue9aa\ue9ab\ue9ac\ue9ad\ue9ae\ue9af\ue9b0\ue9b1\ue9b2\ue9b3\ue9b4\ue9b5\ue9b6\ue9b7\ue9b8\ue9b9\ue9ba\ue9bb\ue9bc\ue9bd\ue9be\ue9bf\ue9c0\ue9c1\ue9c2\ue9c3\ue9c4\ue9c5\ue9c6\ue9c7\ue9c8\ue9c9\ue9ca\ue9cb\ue9cc\ue9cd\ue9ce\ue9cf\ue9d0\ue9d1\ue9d2\ue9d3\ue9d4\ue9d5\ue9d6\ue9d7\ue9d8\ue9d9\ue9da\ue9db\ue9dc\ue9dd\ue9de\ue9df\ue9e0\ue9e1\ue9e2\ue9e3\ue9e4\ue9e5\ue9e6\ue9e7\ue9e8\ue9e9\ue9ea\ue9eb\ue9ec\ue9ed\ue9ee\ue9ef\ue9f0\ue9f1\ue9f2\ue9f3\ue9f4\ue9f5\ue9f6\ue9f7\ue9f8\ue9f9\ue9fa\ue9fb\ue9fc\ue9fd\ue9fe\ue9ff\uea00\uea01\uea02\uea03\uea04\uea05\uea06\uea07\uea08\uea09\uea0a\uea0b\uea0c\uea0d\uea0e\uea0f\uea10\uea11\uea12\uea13\uea14\uea15\uea16\uea17\uea18\uea19\uea1a\uea1b\uea1c\uea1d\uea1e\uea1f\uea20\uea21\uea22\uea23\uea24\uea25\uea26\uea27\uea28\uea29\uea2a\uea2b\uea2c\uea2d\uea2e\uea2f\uea30\uea31\uea32\uea33\uea34\uea35\uea36\uea37\uea38\uea39\uea3a\uea3b\uea3c\uea3d\uea3e\uea3f\uea40\uea41\uea42\uea43\uea44\uea45\uea46\uea47\uea48\uea49\uea4a\uea4b\uea4c\uea4d\uea4e\uea4f\uea50\uea51\uea52\uea53\uea54\uea55\uea56\uea57\uea58\uea59\uea5a\uea5b\uea5c\uea5d\uea5e\uea5f\uea60\uea61\uea62\uea63\uea64\uea65\uea66\uea67\uea68\uea69\uea6a\uea6b\uea6c\uea6d\uea6e\uea6f\uea70\uea71\uea72\uea73\uea74\uea75\uea76\uea77\uea78\uea79\uea7a\uea7b\uea7c\uea7d\uea7e\uea7f\uea80\uea81\uea82\uea83\uea84\uea85\uea86\uea87\uea88\uea89\uea8a\uea8b\uea8c\uea8d\uea8e\uea8f\uea90\uea91\uea92\uea93\uea94\uea95\uea96\uea97\uea98\uea99\uea9a\uea9b\uea9c\uea9d\uea9e\uea9f\ueaa0\ueaa1\ueaa2\ueaa3\ueaa4\ueaa5\ueaa6\ueaa7\ueaa8\ueaa9\ueaaa\ueaab\ueaac\ueaad\ueaae\ueaaf\ueab0\ueab1\ueab2\ueab3\ueab4\ueab5\ueab6\ueab7\ueab8\ueab9\ueaba\ueabb\ueabc\ueabd\ueabe\ueabf\ueac0\ueac1\ueac2\ueac3\ueac4\ueac5\ueac6\ueac7\ueac8\ueac9\ueaca\ueacb\ueacc\ueacd\ueace\ueacf\uead0\uead1\uead2\uead3\uead4\uead5\uead6\uead7\uead8\uead9\ueada\ueadb\ueadc\ueadd\ueade\ueadf\ueae0\ueae1\ueae2\ueae3\ueae4\ueae5\ueae6\ueae7\ueae8\ueae9\ueaea\ueaeb\ueaec\ueaed\ueaee\ueaef\ueaf0\ueaf1\ueaf2\ueaf3\ueaf4\ueaf5\ueaf6\ueaf7\ueaf8\ueaf9\ueafa\ueafb\ueafc\ueafd\ueafe\ueaff\ueb00\ueb01\ueb02\ueb03\ueb04\ueb05\ueb06\ueb07\ueb08\ueb09\ueb0a\ueb0b\ueb0c\ueb0d\ueb0e\ueb0f\ueb10\ueb11\ueb12\ueb13\ueb14\ueb15\ueb16\ueb17\ueb18\ueb19\ueb1a\ueb1b\ueb1c\ueb1d\ueb1e\ueb1f\ueb20\ueb21\ueb22\ueb23\ueb24\ueb25\ueb26\ueb27\ueb28\ueb29\ueb2a\ueb2b\ueb2c\ueb2d\ueb2e\ueb2f\ueb30\ueb31\ueb32\ueb33\ueb34\ueb35\ueb36\ueb37\ueb38\ueb39\ueb3a\ueb3b\ueb3c\ueb3d\ueb3e\ueb3f\ueb40\ueb41\ueb42\ueb43\ueb44\ueb45\ueb46\ueb47\ueb48\ueb49\ueb4a\ueb4b\ueb4c\ueb4d\ueb4e\ueb4f\ueb50\ueb51\ueb52\ueb53\ueb54\ueb55\ueb56\ueb57\ueb58\ueb59\ueb5a\ueb5b\ueb5c\ueb5d\ueb5e\ueb5f\ueb60\ueb61\ueb62\ueb63\ueb64\ueb65\ueb66\ueb67\ueb68\ueb69\ueb6a\ueb6b\ueb6c\ueb6d\ueb6e\ueb6f\ueb70\ueb71\ueb72\ueb73\ueb74\ueb75\ueb76\ueb77\ueb78\ueb79\ueb7a\ueb7b\ueb7c\ueb7d\ueb7e\ueb7f\ueb80\ueb81\ueb82\ueb83\ueb84\ueb85\ueb86\ueb87\ueb88\ueb89\ueb8a\ueb8b\ueb8c\ueb8d\ueb8e\ueb8f\ueb90\ueb91\ueb92\ueb93\ueb94\ueb95\ueb96\ueb97\ueb98\ueb99\ueb9a\ueb9b\ueb9c\ueb9d\ueb9e\ueb9f\ueba0\ueba1\ueba2\ueba3\ueba4\ueba5\ueba6\ueba7\ueba8\ueba9\uebaa\uebab\uebac\uebad\uebae\uebaf\uebb0\uebb1\uebb2\uebb3\uebb4\uebb5\uebb6\uebb7\uebb8\uebb9\uebba\uebbb\uebbc\uebbd\uebbe\uebbf\uebc0\uebc1\uebc2\uebc3\uebc4\uebc5\uebc6\uebc7\uebc8\uebc9\uebca\uebcb\uebcc\uebcd\uebce\uebcf\uebd0\uebd1\uebd2\uebd3\uebd4\uebd5\uebd6\uebd7\uebd8\uebd9\uebda\uebdb\uebdc\uebdd\uebde\uebdf\uebe0\uebe1\uebe2\uebe3\uebe4\uebe5\uebe6\uebe7\uebe8\uebe9\uebea\uebeb\uebec\uebed\uebee\uebef\uebf0\uebf1\uebf2\uebf3\uebf4\uebf5\uebf6\uebf7\uebf8\uebf9\uebfa\uebfb\uebfc\uebfd\uebfe\uebff\uec00\uec01\uec02\uec03\uec04\uec05\uec06\uec07\uec08\uec09\uec0a\uec0b\uec0c\uec0d\uec0e\uec0f\uec10\uec11\uec12\uec13\uec14\uec15\uec16\uec17\uec18\uec19\uec1a\uec1b\uec1c\uec1d\uec1e\uec1f\uec20\uec21\uec22\uec23\uec24\uec25\uec26\uec27\uec28\uec29\uec2a\uec2b\uec2c\uec2d\uec2e\uec2f\uec30\uec31\uec32\uec33\uec34\uec35\uec36\uec37\uec38\uec39\uec3a\uec3b\uec3c\uec3d\uec3e\uec3f\uec40\uec41\uec42\uec43\uec44\uec45\uec46\uec47\uec48\uec49\uec4a\uec4b\uec4c\uec4d\uec4e\uec4f\uec50\uec51\uec52\uec53\uec54\uec55\uec56\uec57\uec58\uec59\uec5a\uec5b\uec5c\uec5d\uec5e\uec5f\uec60\uec61\uec62\uec63\uec64\uec65\uec66\uec67\uec68\uec69\uec6a\uec6b\uec6c\uec6d\uec6e\uec6f\uec70\uec71\uec72\uec73\uec74\uec75\uec76\uec77\uec78\uec79\uec7a\uec7b\uec7c\uec7d\uec7e\uec7f\uec80\uec81\uec82\uec83\uec84\uec85\uec86\uec87\uec88\uec89\uec8a\uec8b\uec8c\uec8d\uec8e\uec8f\uec90\uec91\uec92\uec93\uec94\uec95\uec96\uec97\uec98\uec99\uec9a\uec9b\uec9c\uec9d\uec9e\uec9f\ueca0\ueca1\ueca2\ueca3\ueca4\ueca5\ueca6\ueca7\ueca8\ueca9\uecaa\uecab\uecac\uecad\uecae\uecaf\uecb0\uecb1\uecb2\uecb3\uecb4\uecb5\uecb6\uecb7\uecb8\uecb9\uecba\uecbb\uecbc\uecbd\uecbe\uecbf\uecc0\uecc1\uecc2\uecc3\uecc4\uecc5\uecc6\uecc7\uecc8\uecc9\uecca\ueccb\ueccc\ueccd\uecce\ueccf\uecd0\uecd1\uecd2\uecd3\uecd4\uecd5\uecd6\uecd7\uecd8\uecd9\uecda\uecdb\uecdc\uecdd\uecde\uecdf\uece0\uece1\uece2\uece3\uece4\uece5\uece6\uece7\uece8\uece9\uecea\ueceb\uecec\ueced\uecee\uecef\uecf0\uecf1\uecf2\uecf3\uecf4\uecf5\uecf6\uecf7\uecf8\uecf9\uecfa\uecfb\uecfc\uecfd\uecfe\uecff\ued00\ued01\ued02\ued03\ued04\ued05\ued06\ued07\ued08\ued09\ued0a\ued0b\ued0c\ued0d\ued0e\ued0f\ued10\ued11\ued12\ued13\ued14\ued15\ued16\ued17\ued18\ued19\ued1a\ued1b\ued1c\ued1d\ued1e\ued1f\ued20\ued21\ued22\ued23\ued24\ued25\ued26\ued27\ued28\ued29\ued2a\ued2b\ued2c\ued2d\ued2e\ued2f\ued30\ued31\ued32\ued33\ued34\ued35\ued36\ued37\ued38\ued39\ued3a\ued3b\ued3c\ued3d\ued3e\ued3f\ued40\ued41\ued42\ued43\ued44\ued45\ued46\ued47\ued48\ued49\ued4a\ued4b\ued4c\ued4d\ued4e\ued4f\ued50\ued51\ued52\ued53\ued54\ued55\ued56\ued57\ued58\ued59\ued5a\ued5b\ued5c\ued5d\ued5e\ued5f\ued60\ued61\ued62\ued63\ued64\ued65\ued66\ued67\ued68\ued69\ued6a\ued6b\ued6c\ued6d\ued6e\ued6f\ued70\ued71\ued72\ued73\ued74\ued75\ued76\ued77\ued78\ued79\ued7a\ued7b\ued7c\ued7d\ued7e\ued7f\ued80\ued81\ued82\ued83\ued84\ued85\ued86\ued87\ued88\ued89\ued8a\ued8b\ued8c\ued8d\ued8e\ued8f\ued90\ued91\ued92\ued93\ued94\ued95\ued96\ued97\ued98\ued99\ued9a\ued9b\ued9c\ued9d\ued9e\ued9f\ueda0\ueda1\ueda2\ueda3\ueda4\ueda5\ueda6\ueda7\ueda8\ueda9\uedaa\uedab\uedac\uedad\uedae\uedaf\uedb0\uedb1\uedb2\uedb3\uedb4\uedb5\uedb6\uedb7\uedb8\uedb9\uedba\uedbb\uedbc\uedbd\uedbe\uedbf\uedc0\uedc1\uedc2\uedc3\uedc4\uedc5\uedc6\uedc7\uedc8\uedc9\uedca\uedcb\uedcc\uedcd\uedce\uedcf\uedd0\uedd1\uedd2\uedd3\uedd4\uedd5\uedd6\uedd7\uedd8\uedd9\uedda\ueddb\ueddc\ueddd\uedde\ueddf\uede0\uede1\uede2\uede3\uede4\uede5\uede6\uede7\uede8\uede9\uedea\uedeb\uedec\ueded\uedee\uedef\uedf0\uedf1\uedf2\uedf3\uedf4\uedf5\uedf6\uedf7\uedf8\uedf9\uedfa\uedfb\uedfc\uedfd\uedfe\uedff\uee00\uee01\uee02\uee03\uee04\uee05\uee06\uee07\uee08\uee09\uee0a\uee0b\uee0c\uee0d\uee0e\uee0f\uee10\uee11\uee12\uee13\uee14\uee15\uee16\uee17\uee18\uee19\uee1a\uee1b\uee1c\uee1d\uee1e\uee1f\uee20\uee21\uee22\uee23\uee24\uee25\uee26\uee27\uee28\uee29\uee2a\uee2b\uee2c\uee2d\uee2e\uee2f\uee30\uee31\uee32\uee33\uee34\uee35\uee36\uee37\uee38\uee39\uee3a\uee3b\uee3c\uee3d\uee3e\uee3f\uee40\uee41\uee42\uee43\uee44\uee45\uee46\uee47\uee48\uee49\uee4a\uee4b\uee4c\uee4d\uee4e\uee4f\uee50\uee51\uee52\uee53\uee54\uee55\uee56\uee57\uee58\uee59\uee5a\uee5b\uee5c\uee5d\uee5e\uee5f\uee60\uee61\uee62\uee63\uee64\uee65\uee66\uee67\uee68\uee69\uee6a\uee6b\uee6c\uee6d\uee6e\uee6f\uee70\uee71\uee72\uee73\uee74\uee75\uee76\uee77\uee78\uee79\uee7a\uee7b\uee7c\uee7d\uee7e\uee7f\uee80\uee81\uee82\uee83\uee84\uee85\uee86\uee87\uee88\uee89\uee8a\uee8b\uee8c\uee8d\uee8e\uee8f\uee90\uee91\uee92\uee93\uee94\uee95\uee96\uee97\uee98\uee99\uee9a\uee9b\uee9c\uee9d\uee9e\uee9f\ueea0\ueea1\ueea2\ueea3\ueea4\ueea5\ueea6\ueea7\ueea8\ueea9\ueeaa\ueeab\ueeac\ueead\ueeae\ueeaf\ueeb0\ueeb1\ueeb2\ueeb3\ueeb4\ueeb5\ueeb6\ueeb7\ueeb8\ueeb9\ueeba\ueebb\ueebc\ueebd\ueebe\ueebf\ueec0\ueec1\ueec2\ueec3\ueec4\ueec5\ueec6\ueec7\ueec8\ueec9\ueeca\ueecb\ueecc\ueecd\ueece\ueecf\ueed0\ueed1\ueed2\ueed3\ueed4\ueed5\ueed6\ueed7\ueed8\ueed9\ueeda\ueedb\ueedc\ueedd\ueede\ueedf\ueee0\ueee1\ueee2\ueee3\ueee4\ueee5\ueee6\ueee7\ueee8\ueee9\ueeea\ueeeb\ueeec\ueeed\ueeee\ueeef\ueef0\ueef1\ueef2\ueef3\ueef4\ueef5\ueef6\ueef7\ueef8\ueef9\ueefa\ueefb\ueefc\ueefd\ueefe\ueeff\uef00\uef01\uef02\uef03\uef04\uef05\uef06\uef07\uef08\uef09\uef0a\uef0b\uef0c\uef0d\uef0e\uef0f\uef10\uef11\uef12\uef13\uef14\uef15\uef16\uef17\uef18\uef19\uef1a\uef1b\uef1c\uef1d\uef1e\uef1f\uef20\uef21\uef22\uef23\uef24\uef25\uef26\uef27\uef28\uef29\uef2a\uef2b\uef2c\uef2d\uef2e\uef2f\uef30\uef31\uef32\uef33\uef34\uef35\uef36\uef37\uef38\uef39\uef3a\uef3b\uef3c\uef3d\uef3e\uef3f\uef40\uef41\uef42\uef43\uef44\uef45\uef46\uef47\uef48\uef49\uef4a\uef4b\uef4c\uef4d\uef4e\uef4f\uef50\uef51\uef52\uef53\uef54\uef55\uef56\uef57\uef58\uef59\uef5a\uef5b\uef5c\uef5d\uef5e\uef5f\uef60\uef61\uef62\uef63\uef64\uef65\uef66\uef67\uef68\uef69\uef6a\uef6b\uef6c\uef6d\uef6e\uef6f\uef70\uef71\uef72\uef73\uef74\uef75\uef76\uef77\uef78\uef79\uef7a\uef7b\uef7c\uef7d\uef7e\uef7f\uef80\uef81\uef82\uef83\uef84\uef85\uef86\uef87\uef88\uef89\uef8a\uef8b\uef8c\uef8d\uef8e\uef8f\uef90\uef91\uef92\uef93\uef94\uef95\uef96\uef97\uef98\uef99\uef9a\uef9b\uef9c\uef9d\uef9e\uef9f\uefa0\uefa1\uefa2\uefa3\uefa4\uefa5\uefa6\uefa7\uefa8\uefa9\uefaa\uefab\uefac\uefad\uefae\uefaf\uefb0\uefb1\uefb2\uefb3\uefb4\uefb5\uefb6\uefb7\uefb8\uefb9\uefba\uefbb\uefbc\uefbd\uefbe\uefbf\uefc0\uefc1\uefc2\uefc3\uefc4\uefc5\uefc6\uefc7\uefc8\uefc9\uefca\uefcb\uefcc\uefcd\uefce\uefcf\uefd0\uefd1\uefd2\uefd3\uefd4\uefd5\uefd6\uefd7\uefd8\uefd9\uefda\uefdb\uefdc\uefdd\uefde\uefdf\uefe0\uefe1\uefe2\uefe3\uefe4\uefe5\uefe6\uefe7\uefe8\uefe9\uefea\uefeb\uefec\uefed\uefee\uefef\ueff0\ueff1\ueff2\ueff3\ueff4\ueff5\ueff6\ueff7\ueff8\ueff9\ueffa\ueffb\ueffc\ueffd\ueffe\uefff\uf000\uf001\uf002\uf003\uf004\uf005\uf006\uf007\uf008\uf009\uf00a\uf00b\uf00c\uf00d\uf00e\uf00f\uf010\uf011\uf012\uf013\uf014\uf015\uf016\uf017\uf018\uf019\uf01a\uf01b\uf01c\uf01d\uf01e\uf01f\uf020\uf021\uf022\uf023\uf024\uf025\uf026\uf027\uf028\uf029\uf02a\uf02b\uf02c\uf02d\uf02e\uf02f\uf030\uf031\uf032\uf033\uf034\uf035\uf036\uf037\uf038\uf039\uf03a\uf03b\uf03c\uf03d\uf03e\uf03f\uf040\uf041\uf042\uf043\uf044\uf045\uf046\uf047\uf048\uf049\uf04a\uf04b\uf04c\uf04d\uf04e\uf04f\uf050\uf051\uf052\uf053\uf054\uf055\uf056\uf057\uf058\uf059\uf05a\uf05b\uf05c\uf05d\uf05e\uf05f\uf060\uf061\uf062\uf063\uf064\uf065\uf066\uf067\uf068\uf069\uf06a\uf06b\uf06c\uf06d\uf06e\uf06f\uf070\uf071\uf072\uf073\uf074\uf075\uf076\uf077\uf078\uf079\uf07a\uf07b\uf07c\uf07d\uf07e\uf07f\uf080\uf081\uf082\uf083\uf084\uf085\uf086\uf087\uf088\uf089\uf08a\uf08b\uf08c\uf08d\uf08e\uf08f\uf090\uf091\uf092\uf093\uf094\uf095\uf096\uf097\uf098\uf099\uf09a\uf09b\uf09c\uf09d\uf09e\uf09f\uf0a0\uf0a1\uf0a2\uf0a3\uf0a4\uf0a5\uf0a6\uf0a7\uf0a8\uf0a9\uf0aa\uf0ab\uf0ac\uf0ad\uf0ae\uf0af\uf0b0\uf0b1\uf0b2\uf0b3\uf0b4\uf0b5\uf0b6\uf0b7\uf0b8\uf0b9\uf0ba\uf0bb\uf0bc\uf0bd\uf0be\uf0bf\uf0c0\uf0c1\uf0c2\uf0c3\uf0c4\uf0c5\uf0c6\uf0c7\uf0c8\uf0c9\uf0ca\uf0cb\uf0cc\uf0cd\uf0ce\uf0cf\uf0d0\uf0d1\uf0d2\uf0d3\uf0d4\uf0d5\uf0d6\uf0d7\uf0d8\uf0d9\uf0da\uf0db\uf0dc\uf0dd\uf0de\uf0df\uf0e0\uf0e1\uf0e2\uf0e3\uf0e4\uf0e5\uf0e6\uf0e7\uf0e8\uf0e9\uf0ea\uf0eb\uf0ec\uf0ed\uf0ee\uf0ef\uf0f0\uf0f1\uf0f2\uf0f3\uf0f4\uf0f5\uf0f6\uf0f7\uf0f8\uf0f9\uf0fa\uf0fb\uf0fc\uf0fd\uf0fe\uf0ff\uf100\uf101\uf102\uf103\uf104\uf105\uf106\uf107\uf108\uf109\uf10a\uf10b\uf10c\uf10d\uf10e\uf10f\uf110\uf111\uf112\uf113\uf114\uf115\uf116\uf117\uf118\uf119\uf11a\uf11b\uf11c\uf11d\uf11e\uf11f\uf120\uf121\uf122\uf123\uf124\uf125\uf126\uf127\uf128\uf129\uf12a\uf12b\uf12c\uf12d\uf12e\uf12f\uf130\uf131\uf132\uf133\uf134\uf135\uf136\uf137\uf138\uf139\uf13a\uf13b\uf13c\uf13d\uf13e\uf13f\uf140\uf141\uf142\uf143\uf144\uf145\uf146\uf147\uf148\uf149\uf14a\uf14b\uf14c\uf14d\uf14e\uf14f\uf150\uf151\uf152\uf153\uf154\uf155\uf156\uf157\uf158\uf159\uf15a\uf15b\uf15c\uf15d\uf15e\uf15f\uf160\uf161\uf162\uf163\uf164\uf165\uf166\uf167\uf168\uf169\uf16a\uf16b\uf16c\uf16d\uf16e\uf16f\uf170\uf171\uf172\uf173\uf174\uf175\uf176\uf177\uf178\uf179\uf17a\uf17b\uf17c\uf17d\uf17e\uf17f\uf180\uf181\uf182\uf183\uf184\uf185\uf186\uf187\uf188\uf189\uf18a\uf18b\uf18c\uf18d\uf18e\uf18f\uf190\uf191\uf192\uf193\uf194\uf195\uf196\uf197\uf198\uf199\uf19a\uf19b\uf19c\uf19d\uf19e\uf19f\uf1a0\uf1a1\uf1a2\uf1a3\uf1a4\uf1a5\uf1a6\uf1a7\uf1a8\uf1a9\uf1aa\uf1ab\uf1ac\uf1ad\uf1ae\uf1af\uf1b0\uf1b1\uf1b2\uf1b3\uf1b4\uf1b5\uf1b6\uf1b7\uf1b8\uf1b9\uf1ba\uf1bb\uf1bc\uf1bd\uf1be\uf1bf\uf1c0\uf1c1\uf1c2\uf1c3\uf1c4\uf1c5\uf1c6\uf1c7\uf1c8\uf1c9\uf1ca\uf1cb\uf1cc\uf1cd\uf1ce\uf1cf\uf1d0\uf1d1\uf1d2\uf1d3\uf1d4\uf1d5\uf1d6\uf1d7\uf1d8\uf1d9\uf1da\uf1db\uf1dc\uf1dd\uf1de\uf1df\uf1e0\uf1e1\uf1e2\uf1e3\uf1e4\uf1e5\uf1e6\uf1e7\uf1e8\uf1e9\uf1ea\uf1eb\uf1ec\uf1ed\uf1ee\uf1ef\uf1f0\uf1f1\uf1f2\uf1f3\uf1f4\uf1f5\uf1f6\uf1f7\uf1f8\uf1f9\uf1fa\uf1fb\uf1fc\uf1fd\uf1fe\uf1ff\uf200\uf201\uf202\uf203\uf204\uf205\uf206\uf207\uf208\uf209\uf20a\uf20b\uf20c\uf20d\uf20e\uf20f\uf210\uf211\uf212\uf213\uf214\uf215\uf216\uf217\uf218\uf219\uf21a\uf21b\uf21c\uf21d\uf21e\uf21f\uf220\uf221\uf222\uf223\uf224\uf225\uf226\uf227\uf228\uf229\uf22a\uf22b\uf22c\uf22d\uf22e\uf22f\uf230\uf231\uf232\uf233\uf234\uf235\uf236\uf237\uf238\uf239\uf23a\uf23b\uf23c\uf23d\uf23e\uf23f\uf240\uf241\uf242\uf243\uf244\uf245\uf246\uf247\uf248\uf249\uf24a\uf24b\uf24c\uf24d\uf24e\uf24f\uf250\uf251\uf252\uf253\uf254\uf255\uf256\uf257\uf258\uf259\uf25a\uf25b\uf25c\uf25d\uf25e\uf25f\uf260\uf261\uf262\uf263\uf264\uf265\uf266\uf267\uf268\uf269\uf26a\uf26b\uf26c\uf26d\uf26e\uf26f\uf270\uf271\uf272\uf273\uf274\uf275\uf276\uf277\uf278\uf279\uf27a\uf27b\uf27c\uf27d\uf27e\uf27f\uf280\uf281\uf282\uf283\uf284\uf285\uf286\uf287\uf288\uf289\uf28a\uf28b\uf28c\uf28d\uf28e\uf28f\uf290\uf291\uf292\uf293\uf294\uf295\uf296\uf297\uf298\uf299\uf29a\uf29b\uf29c\uf29d\uf29e\uf29f\uf2a0\uf2a1\uf2a2\uf2a3\uf2a4\uf2a5\uf2a6\uf2a7\uf2a8\uf2a9\uf2aa\uf2ab\uf2ac\uf2ad\uf2ae\uf2af\uf2b0\uf2b1\uf2b2\uf2b3\uf2b4\uf2b5\uf2b6\uf2b7\uf2b8\uf2b9\uf2ba\uf2bb\uf2bc\uf2bd\uf2be\uf2bf\uf2c0\uf2c1\uf2c2\uf2c3\uf2c4\uf2c5\uf2c6\uf2c7\uf2c8\uf2c9\uf2ca\uf2cb\uf2cc\uf2cd\uf2ce\uf2cf\uf2d0\uf2d1\uf2d2\uf2d3\uf2d4\uf2d5\uf2d6\uf2d7\uf2d8\uf2d9\uf2da\uf2db\uf2dc\uf2dd\uf2de\uf2df\uf2e0\uf2e1\uf2e2\uf2e3\uf2e4\uf2e5\uf2e6\uf2e7\uf2e8\uf2e9\uf2ea\uf2eb\uf2ec\uf2ed\uf2ee\uf2ef\uf2f0\uf2f1\uf2f2\uf2f3\uf2f4\uf2f5\uf2f6\uf2f7\uf2f8\uf2f9\uf2fa\uf2fb\uf2fc\uf2fd\uf2fe\uf2ff\uf300\uf301\uf302\uf303\uf304\uf305\uf306\uf307\uf308\uf309\uf30a\uf30b\uf30c\uf30d\uf30e\uf30f\uf310\uf311\uf312\uf313\uf314\uf315\uf316\uf317\uf318\uf319\uf31a\uf31b\uf31c\uf31d\uf31e\uf31f\uf320\uf321\uf322\uf323\uf324\uf325\uf326\uf327\uf328\uf329\uf32a\uf32b\uf32c\uf32d\uf32e\uf32f\uf330\uf331\uf332\uf333\uf334\uf335\uf336\uf337\uf338\uf339\uf33a\uf33b\uf33c\uf33d\uf33e\uf33f\uf340\uf341\uf342\uf343\uf344\uf345\uf346\uf347\uf348\uf349\uf34a\uf34b\uf34c\uf34d\uf34e\uf34f\uf350\uf351\uf352\uf353\uf354\uf355\uf356\uf357\uf358\uf359\uf35a\uf35b\uf35c\uf35d\uf35e\uf35f\uf360\uf361\uf362\uf363\uf364\uf365\uf366\uf367\uf368\uf369\uf36a\uf36b\uf36c\uf36d\uf36e\uf36f\uf370\uf371\uf372\uf373\uf374\uf375\uf376\uf377\uf378\uf379\uf37a\uf37b\uf37c\uf37d\uf37e\uf37f\uf380\uf381\uf382\uf383\uf384\uf385\uf386\uf387\uf388\uf389\uf38a\uf38b\uf38c\uf38d\uf38e\uf38f\uf390\uf391\uf392\uf393\uf394\uf395\uf396\uf397\uf398\uf399\uf39a\uf39b\uf39c\uf39d\uf39e\uf39f\uf3a0\uf3a1\uf3a2\uf3a3\uf3a4\uf3a5\uf3a6\uf3a7\uf3a8\uf3a9\uf3aa\uf3ab\uf3ac\uf3ad\uf3ae\uf3af\uf3b0\uf3b1\uf3b2\uf3b3\uf3b4\uf3b5\uf3b6\uf3b7\uf3b8\uf3b9\uf3ba\uf3bb\uf3bc\uf3bd\uf3be\uf3bf\uf3c0\uf3c1\uf3c2\uf3c3\uf3c4\uf3c5\uf3c6\uf3c7\uf3c8\uf3c9\uf3ca\uf3cb\uf3cc\uf3cd\uf3ce\uf3cf\uf3d0\uf3d1\uf3d2\uf3d3\uf3d4\uf3d5\uf3d6\uf3d7\uf3d8\uf3d9\uf3da\uf3db\uf3dc\uf3dd\uf3de\uf3df\uf3e0\uf3e1\uf3e2\uf3e3\uf3e4\uf3e5\uf3e6\uf3e7\uf3e8\uf3e9\uf3ea\uf3eb\uf3ec\uf3ed\uf3ee\uf3ef\uf3f0\uf3f1\uf3f2\uf3f3\uf3f4\uf3f5\uf3f6\uf3f7\uf3f8\uf3f9\uf3fa\uf3fb\uf3fc\uf3fd\uf3fe\uf3ff\uf400\uf401\uf402\uf403\uf404\uf405\uf406\uf407\uf408\uf409\uf40a\uf40b\uf40c\uf40d\uf40e\uf40f\uf410\uf411\uf412\uf413\uf414\uf415\uf416\uf417\uf418\uf419\uf41a\uf41b\uf41c\uf41d\uf41e\uf41f\uf420\uf421\uf422\uf423\uf424\uf425\uf426\uf427\uf428\uf429\uf42a\uf42b\uf42c\uf42d\uf42e\uf42f\uf430\uf431\uf432\uf433\uf434\uf435\uf436\uf437\uf438\uf439\uf43a\uf43b\uf43c\uf43d\uf43e\uf43f\uf440\uf441\uf442\uf443\uf444\uf445\uf446\uf447\uf448\uf449\uf44a\uf44b\uf44c\uf44d\uf44e\uf44f\uf450\uf451\uf452\uf453\uf454\uf455\uf456\uf457\uf458\uf459\uf45a\uf45b\uf45c\uf45d\uf45e\uf45f\uf460\uf461\uf462\uf463\uf464\uf465\uf466\uf467\uf468\uf469\uf46a\uf46b\uf46c\uf46d\uf46e\uf46f\uf470\uf471\uf472\uf473\uf474\uf475\uf476\uf477\uf478\uf479\uf47a\uf47b\uf47c\uf47d\uf47e\uf47f\uf480\uf481\uf482\uf483\uf484\uf485\uf486\uf487\uf488\uf489\uf48a\uf48b\uf48c\uf48d\uf48e\uf48f\uf490\uf491\uf492\uf493\uf494\uf495\uf496\uf497\uf498\uf499\uf49a\uf49b\uf49c\uf49d\uf49e\uf49f\uf4a0\uf4a1\uf4a2\uf4a3\uf4a4\uf4a5\uf4a6\uf4a7\uf4a8\uf4a9\uf4aa\uf4ab\uf4ac\uf4ad\uf4ae\uf4af\uf4b0\uf4b1\uf4b2\uf4b3\uf4b4\uf4b5\uf4b6\uf4b7\uf4b8\uf4b9\uf4ba\uf4bb\uf4bc\uf4bd\uf4be\uf4bf\uf4c0\uf4c1\uf4c2\uf4c3\uf4c4\uf4c5\uf4c6\uf4c7\uf4c8\uf4c9\uf4ca\uf4cb\uf4cc\uf4cd\uf4ce\uf4cf\uf4d0\uf4d1\uf4d2\uf4d3\uf4d4\uf4d5\uf4d6\uf4d7\uf4d8\uf4d9\uf4da\uf4db\uf4dc\uf4dd\uf4de\uf4df\uf4e0\uf4e1\uf4e2\uf4e3\uf4e4\uf4e5\uf4e6\uf4e7\uf4e8\uf4e9\uf4ea\uf4eb\uf4ec\uf4ed\uf4ee\uf4ef\uf4f0\uf4f1\uf4f2\uf4f3\uf4f4\uf4f5\uf4f6\uf4f7\uf4f8\uf4f9\uf4fa\uf4fb\uf4fc\uf4fd\uf4fe\uf4ff\uf500\uf501\uf502\uf503\uf504\uf505\uf506\uf507\uf508\uf509\uf50a\uf50b\uf50c\uf50d\uf50e\uf50f\uf510\uf511\uf512\uf513\uf514\uf515\uf516\uf517\uf518\uf519\uf51a\uf51b\uf51c\uf51d\uf51e\uf51f\uf520\uf521\uf522\uf523\uf524\uf525\uf526\uf527\uf528\uf529\uf52a\uf52b\uf52c\uf52d\uf52e\uf52f\uf530\uf531\uf532\uf533\uf534\uf535\uf536\uf537\uf538\uf539\uf53a\uf53b\uf53c\uf53d\uf53e\uf53f\uf540\uf541\uf542\uf543\uf544\uf545\uf546\uf547\uf548\uf549\uf54a\uf54b\uf54c\uf54d\uf54e\uf54f\uf550\uf551\uf552\uf553\uf554\uf555\uf556\uf557\uf558\uf559\uf55a\uf55b\uf55c\uf55d\uf55e\uf55f\uf560\uf561\uf562\uf563\uf564\uf565\uf566\uf567\uf568\uf569\uf56a\uf56b\uf56c\uf56d\uf56e\uf56f\uf570\uf571\uf572\uf573\uf574\uf575\uf576\uf577\uf578\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf582\uf583\uf584\uf585\uf586\uf587\uf588\uf589\uf58a\uf58b\uf58c\uf58d\uf58e\uf58f\uf590\uf591\uf592\uf593\uf594\uf595\uf596\uf597\uf598\uf599\uf59a\uf59b\uf59c\uf59d\uf59e\uf59f\uf5a0\uf5a1\uf5a2\uf5a3\uf5a4\uf5a5\uf5a6\uf5a7\uf5a8\uf5a9\uf5aa\uf5ab\uf5ac\uf5ad\uf5ae\uf5af\uf5b0\uf5b1\uf5b2\uf5b3\uf5b4\uf5b5\uf5b6\uf5b7\uf5b8\uf5b9\uf5ba\uf5bb\uf5bc\uf5bd\uf5be\uf5bf\uf5c0\uf5c1\uf5c2\uf5c3\uf5c4\uf5c5\uf5c6\uf5c7\uf5c8\uf5c9\uf5ca\uf5cb\uf5cc\uf5cd\uf5ce\uf5cf\uf5d0\uf5d1\uf5d2\uf5d3\uf5d4\uf5d5\uf5d6\uf5d7\uf5d8\uf5d9\uf5da\uf5db\uf5dc\uf5dd\uf5de\uf5df\uf5e0\uf5e1\uf5e2\uf5e3\uf5e4\uf5e5\uf5e6\uf5e7\uf5e8\uf5e9\uf5ea\uf5eb\uf5ec\uf5ed\uf5ee\uf5ef\uf5f0\uf5f1\uf5f2\uf5f3\uf5f4\uf5f5\uf5f6\uf5f7\uf5f8\uf5f9\uf5fa\uf5fb\uf5fc\uf5fd\uf5fe\uf5ff\uf600\uf601\uf602\uf603\uf604\uf605\uf606\uf607\uf608\uf609\uf60a\uf60b\uf60c\uf60d\uf60e\uf60f\uf610\uf611\uf612\uf613\uf614\uf615\uf616\uf617\uf618\uf619\uf61a\uf61b\uf61c\uf61d\uf61e\uf61f\uf620\uf621\uf622\uf623\uf624\uf625\uf626\uf627\uf628\uf629\uf62a\uf62b\uf62c\uf62d\uf62e\uf62f\uf630\uf631\uf632\uf633\uf634\uf635\uf636\uf637\uf638\uf639\uf63a\uf63b\uf63c\uf63d\uf63e\uf63f\uf640\uf641\uf642\uf643\uf644\uf645\uf646\uf647\uf648\uf649\uf64a\uf64b\uf64c\uf64d\uf64e\uf64f\uf650\uf651\uf652\uf653\uf654\uf655\uf656\uf657\uf658\uf659\uf65a\uf65b\uf65c\uf65d\uf65e\uf65f\uf660\uf661\uf662\uf663\uf664\uf665\uf666\uf667\uf668\uf669\uf66a\uf66b\uf66c\uf66d\uf66e\uf66f\uf670\uf671\uf672\uf673\uf674\uf675\uf676\uf677\uf678\uf679\uf67a\uf67b\uf67c\uf67d\uf67e\uf67f\uf680\uf681\uf682\uf683\uf684\uf685\uf686\uf687\uf688\uf689\uf68a\uf68b\uf68c\uf68d\uf68e\uf68f\uf690\uf691\uf692\uf693\uf694\uf695\uf696\uf697\uf698\uf699\uf69a\uf69b\uf69c\uf69d\uf69e\uf69f\uf6a0\uf6a1\uf6a2\uf6a3\uf6a4\uf6a5\uf6a6\uf6a7\uf6a8\uf6a9\uf6aa\uf6ab\uf6ac\uf6ad\uf6ae\uf6af\uf6b0\uf6b1\uf6b2\uf6b3\uf6b4\uf6b5\uf6b6\uf6b7\uf6b8\uf6b9\uf6ba\uf6bb\uf6bc\uf6bd\uf6be\uf6bf\uf6c0\uf6c1\uf6c2\uf6c3\uf6c4\uf6c5\uf6c6\uf6c7\uf6c8\uf6c9\uf6ca\uf6cb\uf6cc\uf6cd\uf6ce\uf6cf\uf6d0\uf6d1\uf6d2\uf6d3\uf6d4\uf6d5\uf6d6\uf6d7\uf6d8\uf6d9\uf6da\uf6db\uf6dc\uf6dd\uf6de\uf6df\uf6e0\uf6e1\uf6e2\uf6e3\uf6e4\uf6e5\uf6e6\uf6e7\uf6e8\uf6e9\uf6ea\uf6eb\uf6ec\uf6ed\uf6ee\uf6ef\uf6f0\uf6f1\uf6f2\uf6f3\uf6f4\uf6f5\uf6f6\uf6f7\uf6f8\uf6f9\uf6fa\uf6fb\uf6fc\uf6fd\uf6fe\uf6ff\uf700\uf701\uf702\uf703\uf704\uf705\uf706\uf707\uf708\uf709\uf70a\uf70b\uf70c\uf70d\uf70e\uf70f\uf710\uf711\uf712\uf713\uf714\uf715\uf716\uf717\uf718\uf719\uf71a\uf71b\uf71c\uf71d\uf71e\uf71f\uf720\uf721\uf722\uf723\uf724\uf725\uf726\uf727\uf728\uf729\uf72a\uf72b\uf72c\uf72d\uf72e\uf72f\uf730\uf731\uf732\uf733\uf734\uf735\uf736\uf737\uf738\uf739\uf73a\uf73b\uf73c\uf73d\uf73e\uf73f\uf740\uf741\uf742\uf743\uf744\uf745\uf746\uf747\uf748\uf749\uf74a\uf74b\uf74c\uf74d\uf74e\uf74f\uf750\uf751\uf752\uf753\uf754\uf755\uf756\uf757\uf758\uf759\uf75a\uf75b\uf75c\uf75d\uf75e\uf75f\uf760\uf761\uf762\uf763\uf764\uf765\uf766\uf767\uf768\uf769\uf76a\uf76b\uf76c\uf76d\uf76e\uf76f\uf770\uf771\uf772\uf773\uf774\uf775\uf776\uf777\uf778\uf779\uf77a\uf77b\uf77c\uf77d\uf77e\uf77f\uf780\uf781\uf782\uf783\uf784\uf785\uf786\uf787\uf788\uf789\uf78a\uf78b\uf78c\uf78d\uf78e\uf78f\uf790\uf791\uf792\uf793\uf794\uf795\uf796\uf797\uf798\uf799\uf79a\uf79b\uf79c\uf79d\uf79e\uf79f\uf7a0\uf7a1\uf7a2\uf7a3\uf7a4\uf7a5\uf7a6\uf7a7\uf7a8\uf7a9\uf7aa\uf7ab\uf7ac\uf7ad\uf7ae\uf7af\uf7b0\uf7b1\uf7b2\uf7b3\uf7b4\uf7b5\uf7b6\uf7b7\uf7b8\uf7b9\uf7ba\uf7bb\uf7bc\uf7bd\uf7be\uf7bf\uf7c0\uf7c1\uf7c2\uf7c3\uf7c4\uf7c5\uf7c6\uf7c7\uf7c8\uf7c9\uf7ca\uf7cb\uf7cc\uf7cd\uf7ce\uf7cf\uf7d0\uf7d1\uf7d2\uf7d3\uf7d4\uf7d5\uf7d6\uf7d7\uf7d8\uf7d9\uf7da\uf7db\uf7dc\uf7dd\uf7de\uf7df\uf7e0\uf7e1\uf7e2\uf7e3\uf7e4\uf7e5\uf7e6\uf7e7\uf7e8\uf7e9\uf7ea\uf7eb\uf7ec\uf7ed\uf7ee\uf7ef\uf7f0\uf7f1\uf7f2\uf7f3\uf7f4\uf7f5\uf7f6\uf7f7\uf7f8\uf7f9\uf7fa\uf7fb\uf7fc\uf7fd\uf7fe\uf7ff\uf800\uf801\uf802\uf803\uf804\uf805\uf806\uf807\uf808\uf809\uf80a\uf80b\uf80c\uf80d\uf80e\uf80f\uf810\uf811\uf812\uf813\uf814\uf815\uf816\uf817\uf818\uf819\uf81a\uf81b\uf81c\uf81d\uf81e\uf81f\uf820\uf821\uf822\uf823\uf824\uf825\uf826\uf827\uf828\uf829\uf82a\uf82b\uf82c\uf82d\uf82e\uf82f\uf830\uf831\uf832\uf833\uf834\uf835\uf836\uf837\uf838\uf839\uf83a\uf83b\uf83c\uf83d\uf83e\uf83f\uf840\uf841\uf842\uf843\uf844\uf845\uf846\uf847\uf848\uf849\uf84a\uf84b\uf84c\uf84d\uf84e\uf84f\uf850\uf851\uf852\uf853\uf854\uf855\uf856\uf857\uf858\uf859\uf85a\uf85b\uf85c\uf85d\uf85e\uf85f\uf860\uf861\uf862\uf863\uf864\uf865\uf866\uf867\uf868\uf869\uf86a\uf86b\uf86c\uf86d\uf86e\uf86f\uf870\uf871\uf872\uf873\uf874\uf875\uf876\uf877\uf878\uf879\uf87a\uf87b\uf87c\uf87d\uf87e\uf87f\uf880\uf881\uf882\uf883\uf884\uf885\uf886\uf887\uf888\uf889\uf88a\uf88b\uf88c\uf88d\uf88e\uf88f\uf890\uf891\uf892\uf893\uf894\uf895\uf896\uf897\uf898\uf899\uf89a\uf89b\uf89c\uf89d\uf89e\uf89f\uf8a0\uf8a1\uf8a2\uf8a3\uf8a4\uf8a5\uf8a6\uf8a7\uf8a8\uf8a9\uf8aa\uf8ab\uf8ac\uf8ad\uf8ae\uf8af\uf8b0\uf8b1\uf8b2\uf8b3\uf8b4\uf8b5\uf8b6\uf8b7\uf8b8\uf8b9\uf8ba\uf8bb\uf8bc\uf8bd\uf8be\uf8bf\uf8c0\uf8c1\uf8c2\uf8c3\uf8c4\uf8c5\uf8c6\uf8c7\uf8c8\uf8c9\uf8ca\uf8cb\uf8cc\uf8cd\uf8ce\uf8cf\uf8d0\uf8d1\uf8d2\uf8d3\uf8d4\uf8d5\uf8d6\uf8d7\uf8d8\uf8d9\uf8da\uf8db\uf8dc\uf8dd\uf8de\uf8df\uf8e0\uf8e1\uf8e2\uf8e3\uf8e4\uf8e5\uf8e6\uf8e7\uf8e8\uf8e9\uf8ea\uf8eb\uf8ec\uf8ed\uf8ee\uf8ef\uf8f0\uf8f1\uf8f2\uf8f3\uf8f4\uf8f5\uf8f6\uf8f7\uf8f8\uf8f9\uf8fa\uf8fb\uf8fc\uf8fd\uf8fe\uf8ff' + +try: + Cs = eval(r"'\ud800\ud801\ud802\ud803\ud804\ud805\ud806\ud807\ud808\ud809\ud80a\ud80b\ud80c\ud80d\ud80e\ud80f\ud810\ud811\ud812\ud813\ud814\ud815\ud816\ud817\ud818\ud819\ud81a\ud81b\ud81c\ud81d\ud81e\ud81f\ud820\ud821\ud822\ud823\ud824\ud825\ud826\ud827\ud828\ud829\ud82a\ud82b\ud82c\ud82d\ud82e\ud82f\ud830\ud831\ud832\ud833\ud834\ud835\ud836\ud837\ud838\ud839\ud83a\ud83b\ud83c\ud83d\ud83e\ud83f\ud840\ud841\ud842\ud843\ud844\ud845\ud846\ud847\ud848\ud849\ud84a\ud84b\ud84c\ud84d\ud84e\ud84f\ud850\ud851\ud852\ud853\ud854\ud855\ud856\ud857\ud858\ud859\ud85a\ud85b\ud85c\ud85d\ud85e\ud85f\ud860\ud861\ud862\ud863\ud864\ud865\ud866\ud867\ud868\ud869\ud86a\ud86b\ud86c\ud86d\ud86e\ud86f\ud870\ud871\ud872\ud873\ud874\ud875\ud876\ud877\ud878\ud879\ud87a\ud87b\ud87c\ud87d\ud87e\ud87f\ud880\ud881\ud882\ud883\ud884\ud885\ud886\ud887\ud888\ud889\ud88a\ud88b\ud88c\ud88d\ud88e\ud88f\ud890\ud891\ud892\ud893\ud894\ud895\ud896\ud897\ud898\ud899\ud89a\ud89b\ud89c\ud89d\ud89e\ud89f\ud8a0\ud8a1\ud8a2\ud8a3\ud8a4\ud8a5\ud8a6\ud8a7\ud8a8\ud8a9\ud8aa\ud8ab\ud8ac\ud8ad\ud8ae\ud8af\ud8b0\ud8b1\ud8b2\ud8b3\ud8b4\ud8b5\ud8b6\ud8b7\ud8b8\ud8b9\ud8ba\ud8bb\ud8bc\ud8bd\ud8be\ud8bf\ud8c0\ud8c1\ud8c2\ud8c3\ud8c4\ud8c5\ud8c6\ud8c7\ud8c8\ud8c9\ud8ca\ud8cb\ud8cc\ud8cd\ud8ce\ud8cf\ud8d0\ud8d1\ud8d2\ud8d3\ud8d4\ud8d5\ud8d6\ud8d7\ud8d8\ud8d9\ud8da\ud8db\ud8dc\ud8dd\ud8de\ud8df\ud8e0\ud8e1\ud8e2\ud8e3\ud8e4\ud8e5\ud8e6\ud8e7\ud8e8\ud8e9\ud8ea\ud8eb\ud8ec\ud8ed\ud8ee\ud8ef\ud8f0\ud8f1\ud8f2\ud8f3\ud8f4\ud8f5\ud8f6\ud8f7\ud8f8\ud8f9\ud8fa\ud8fb\ud8fc\ud8fd\ud8fe\ud8ff\ud900\ud901\ud902\ud903\ud904\ud905\ud906\ud907\ud908\ud909\ud90a\ud90b\ud90c\ud90d\ud90e\ud90f\ud910\ud911\ud912\ud913\ud914\ud915\ud916\ud917\ud918\ud919\ud91a\ud91b\ud91c\ud91d\ud91e\ud91f\ud920\ud921\ud922\ud923\ud924\ud925\ud926\ud927\ud928\ud929\ud92a\ud92b\ud92c\ud92d\ud92e\ud92f\ud930\ud931\ud932\ud933\ud934\ud935\ud936\ud937\ud938\ud939\ud93a\ud93b\ud93c\ud93d\ud93e\ud93f\ud940\ud941\ud942\ud943\ud944\ud945\ud946\ud947\ud948\ud949\ud94a\ud94b\ud94c\ud94d\ud94e\ud94f\ud950\ud951\ud952\ud953\ud954\ud955\ud956\ud957\ud958\ud959\ud95a\ud95b\ud95c\ud95d\ud95e\ud95f\ud960\ud961\ud962\ud963\ud964\ud965\ud966\ud967\ud968\ud969\ud96a\ud96b\ud96c\ud96d\ud96e\ud96f\ud970\ud971\ud972\ud973\ud974\ud975\ud976\ud977\ud978\ud979\ud97a\ud97b\ud97c\ud97d\ud97e\ud97f\ud980\ud981\ud982\ud983\ud984\ud985\ud986\ud987\ud988\ud989\ud98a\ud98b\ud98c\ud98d\ud98e\ud98f\ud990\ud991\ud992\ud993\ud994\ud995\ud996\ud997\ud998\ud999\ud99a\ud99b\ud99c\ud99d\ud99e\ud99f\ud9a0\ud9a1\ud9a2\ud9a3\ud9a4\ud9a5\ud9a6\ud9a7\ud9a8\ud9a9\ud9aa\ud9ab\ud9ac\ud9ad\ud9ae\ud9af\ud9b0\ud9b1\ud9b2\ud9b3\ud9b4\ud9b5\ud9b6\ud9b7\ud9b8\ud9b9\ud9ba\ud9bb\ud9bc\ud9bd\ud9be\ud9bf\ud9c0\ud9c1\ud9c2\ud9c3\ud9c4\ud9c5\ud9c6\ud9c7\ud9c8\ud9c9\ud9ca\ud9cb\ud9cc\ud9cd\ud9ce\ud9cf\ud9d0\ud9d1\ud9d2\ud9d3\ud9d4\ud9d5\ud9d6\ud9d7\ud9d8\ud9d9\ud9da\ud9db\ud9dc\ud9dd\ud9de\ud9df\ud9e0\ud9e1\ud9e2\ud9e3\ud9e4\ud9e5\ud9e6\ud9e7\ud9e8\ud9e9\ud9ea\ud9eb\ud9ec\ud9ed\ud9ee\ud9ef\ud9f0\ud9f1\ud9f2\ud9f3\ud9f4\ud9f5\ud9f6\ud9f7\ud9f8\ud9f9\ud9fa\ud9fb\ud9fc\ud9fd\ud9fe\ud9ff\uda00\uda01\uda02\uda03\uda04\uda05\uda06\uda07\uda08\uda09\uda0a\uda0b\uda0c\uda0d\uda0e\uda0f\uda10\uda11\uda12\uda13\uda14\uda15\uda16\uda17\uda18\uda19\uda1a\uda1b\uda1c\uda1d\uda1e\uda1f\uda20\uda21\uda22\uda23\uda24\uda25\uda26\uda27\uda28\uda29\uda2a\uda2b\uda2c\uda2d\uda2e\uda2f\uda30\uda31\uda32\uda33\uda34\uda35\uda36\uda37\uda38\uda39\uda3a\uda3b\uda3c\uda3d\uda3e\uda3f\uda40\uda41\uda42\uda43\uda44\uda45\uda46\uda47\uda48\uda49\uda4a\uda4b\uda4c\uda4d\uda4e\uda4f\uda50\uda51\uda52\uda53\uda54\uda55\uda56\uda57\uda58\uda59\uda5a\uda5b\uda5c\uda5d\uda5e\uda5f\uda60\uda61\uda62\uda63\uda64\uda65\uda66\uda67\uda68\uda69\uda6a\uda6b\uda6c\uda6d\uda6e\uda6f\uda70\uda71\uda72\uda73\uda74\uda75\uda76\uda77\uda78\uda79\uda7a\uda7b\uda7c\uda7d\uda7e\uda7f\uda80\uda81\uda82\uda83\uda84\uda85\uda86\uda87\uda88\uda89\uda8a\uda8b\uda8c\uda8d\uda8e\uda8f\uda90\uda91\uda92\uda93\uda94\uda95\uda96\uda97\uda98\uda99\uda9a\uda9b\uda9c\uda9d\uda9e\uda9f\udaa0\udaa1\udaa2\udaa3\udaa4\udaa5\udaa6\udaa7\udaa8\udaa9\udaaa\udaab\udaac\udaad\udaae\udaaf\udab0\udab1\udab2\udab3\udab4\udab5\udab6\udab7\udab8\udab9\udaba\udabb\udabc\udabd\udabe\udabf\udac0\udac1\udac2\udac3\udac4\udac5\udac6\udac7\udac8\udac9\udaca\udacb\udacc\udacd\udace\udacf\udad0\udad1\udad2\udad3\udad4\udad5\udad6\udad7\udad8\udad9\udada\udadb\udadc\udadd\udade\udadf\udae0\udae1\udae2\udae3\udae4\udae5\udae6\udae7\udae8\udae9\udaea\udaeb\udaec\udaed\udaee\udaef\udaf0\udaf1\udaf2\udaf3\udaf4\udaf5\udaf6\udaf7\udaf8\udaf9\udafa\udafb\udafc\udafd\udafe\udaff\udb00\udb01\udb02\udb03\udb04\udb05\udb06\udb07\udb08\udb09\udb0a\udb0b\udb0c\udb0d\udb0e\udb0f\udb10\udb11\udb12\udb13\udb14\udb15\udb16\udb17\udb18\udb19\udb1a\udb1b\udb1c\udb1d\udb1e\udb1f\udb20\udb21\udb22\udb23\udb24\udb25\udb26\udb27\udb28\udb29\udb2a\udb2b\udb2c\udb2d\udb2e\udb2f\udb30\udb31\udb32\udb33\udb34\udb35\udb36\udb37\udb38\udb39\udb3a\udb3b\udb3c\udb3d\udb3e\udb3f\udb40\udb41\udb42\udb43\udb44\udb45\udb46\udb47\udb48\udb49\udb4a\udb4b\udb4c\udb4d\udb4e\udb4f\udb50\udb51\udb52\udb53\udb54\udb55\udb56\udb57\udb58\udb59\udb5a\udb5b\udb5c\udb5d\udb5e\udb5f\udb60\udb61\udb62\udb63\udb64\udb65\udb66\udb67\udb68\udb69\udb6a\udb6b\udb6c\udb6d\udb6e\udb6f\udb70\udb71\udb72\udb73\udb74\udb75\udb76\udb77\udb78\udb79\udb7a\udb7b\udb7c\udb7d\udb7e\udb7f\udb80\udb81\udb82\udb83\udb84\udb85\udb86\udb87\udb88\udb89\udb8a\udb8b\udb8c\udb8d\udb8e\udb8f\udb90\udb91\udb92\udb93\udb94\udb95\udb96\udb97\udb98\udb99\udb9a\udb9b\udb9c\udb9d\udb9e\udb9f\udba0\udba1\udba2\udba3\udba4\udba5\udba6\udba7\udba8\udba9\udbaa\udbab\udbac\udbad\udbae\udbaf\udbb0\udbb1\udbb2\udbb3\udbb4\udbb5\udbb6\udbb7\udbb8\udbb9\udbba\udbbb\udbbc\udbbd\udbbe\udbbf\udbc0\udbc1\udbc2\udbc3\udbc4\udbc5\udbc6\udbc7\udbc8\udbc9\udbca\udbcb\udbcc\udbcd\udbce\udbcf\udbd0\udbd1\udbd2\udbd3\udbd4\udbd5\udbd6\udbd7\udbd8\udbd9\udbda\udbdb\udbdc\udbdd\udbde\udbdf\udbe0\udbe1\udbe2\udbe3\udbe4\udbe5\udbe6\udbe7\udbe8\udbe9\udbea\udbeb\udbec\udbed\udbee\udbef\udbf0\udbf1\udbf2\udbf3\udbf4\udbf5\udbf6\udbf7\udbf8\udbf9\udbfa\udbfb\udbfc\udbfd\udbfe\U0010fc00\udc01\udc02\udc03\udc04\udc05\udc06\udc07\udc08\udc09\udc0a\udc0b\udc0c\udc0d\udc0e\udc0f\udc10\udc11\udc12\udc13\udc14\udc15\udc16\udc17\udc18\udc19\udc1a\udc1b\udc1c\udc1d\udc1e\udc1f\udc20\udc21\udc22\udc23\udc24\udc25\udc26\udc27\udc28\udc29\udc2a\udc2b\udc2c\udc2d\udc2e\udc2f\udc30\udc31\udc32\udc33\udc34\udc35\udc36\udc37\udc38\udc39\udc3a\udc3b\udc3c\udc3d\udc3e\udc3f\udc40\udc41\udc42\udc43\udc44\udc45\udc46\udc47\udc48\udc49\udc4a\udc4b\udc4c\udc4d\udc4e\udc4f\udc50\udc51\udc52\udc53\udc54\udc55\udc56\udc57\udc58\udc59\udc5a\udc5b\udc5c\udc5d\udc5e\udc5f\udc60\udc61\udc62\udc63\udc64\udc65\udc66\udc67\udc68\udc69\udc6a\udc6b\udc6c\udc6d\udc6e\udc6f\udc70\udc71\udc72\udc73\udc74\udc75\udc76\udc77\udc78\udc79\udc7a\udc7b\udc7c\udc7d\udc7e\udc7f\udc80\udc81\udc82\udc83\udc84\udc85\udc86\udc87\udc88\udc89\udc8a\udc8b\udc8c\udc8d\udc8e\udc8f\udc90\udc91\udc92\udc93\udc94\udc95\udc96\udc97\udc98\udc99\udc9a\udc9b\udc9c\udc9d\udc9e\udc9f\udca0\udca1\udca2\udca3\udca4\udca5\udca6\udca7\udca8\udca9\udcaa\udcab\udcac\udcad\udcae\udcaf\udcb0\udcb1\udcb2\udcb3\udcb4\udcb5\udcb6\udcb7\udcb8\udcb9\udcba\udcbb\udcbc\udcbd\udcbe\udcbf\udcc0\udcc1\udcc2\udcc3\udcc4\udcc5\udcc6\udcc7\udcc8\udcc9\udcca\udccb\udccc\udccd\udcce\udccf\udcd0\udcd1\udcd2\udcd3\udcd4\udcd5\udcd6\udcd7\udcd8\udcd9\udcda\udcdb\udcdc\udcdd\udcde\udcdf\udce0\udce1\udce2\udce3\udce4\udce5\udce6\udce7\udce8\udce9\udcea\udceb\udcec\udced\udcee\udcef\udcf0\udcf1\udcf2\udcf3\udcf4\udcf5\udcf6\udcf7\udcf8\udcf9\udcfa\udcfb\udcfc\udcfd\udcfe\udcff\udd00\udd01\udd02\udd03\udd04\udd05\udd06\udd07\udd08\udd09\udd0a\udd0b\udd0c\udd0d\udd0e\udd0f\udd10\udd11\udd12\udd13\udd14\udd15\udd16\udd17\udd18\udd19\udd1a\udd1b\udd1c\udd1d\udd1e\udd1f\udd20\udd21\udd22\udd23\udd24\udd25\udd26\udd27\udd28\udd29\udd2a\udd2b\udd2c\udd2d\udd2e\udd2f\udd30\udd31\udd32\udd33\udd34\udd35\udd36\udd37\udd38\udd39\udd3a\udd3b\udd3c\udd3d\udd3e\udd3f\udd40\udd41\udd42\udd43\udd44\udd45\udd46\udd47\udd48\udd49\udd4a\udd4b\udd4c\udd4d\udd4e\udd4f\udd50\udd51\udd52\udd53\udd54\udd55\udd56\udd57\udd58\udd59\udd5a\udd5b\udd5c\udd5d\udd5e\udd5f\udd60\udd61\udd62\udd63\udd64\udd65\udd66\udd67\udd68\udd69\udd6a\udd6b\udd6c\udd6d\udd6e\udd6f\udd70\udd71\udd72\udd73\udd74\udd75\udd76\udd77\udd78\udd79\udd7a\udd7b\udd7c\udd7d\udd7e\udd7f\udd80\udd81\udd82\udd83\udd84\udd85\udd86\udd87\udd88\udd89\udd8a\udd8b\udd8c\udd8d\udd8e\udd8f\udd90\udd91\udd92\udd93\udd94\udd95\udd96\udd97\udd98\udd99\udd9a\udd9b\udd9c\udd9d\udd9e\udd9f\udda0\udda1\udda2\udda3\udda4\udda5\udda6\udda7\udda8\udda9\uddaa\uddab\uddac\uddad\uddae\uddaf\uddb0\uddb1\uddb2\uddb3\uddb4\uddb5\uddb6\uddb7\uddb8\uddb9\uddba\uddbb\uddbc\uddbd\uddbe\uddbf\uddc0\uddc1\uddc2\uddc3\uddc4\uddc5\uddc6\uddc7\uddc8\uddc9\uddca\uddcb\uddcc\uddcd\uddce\uddcf\uddd0\uddd1\uddd2\uddd3\uddd4\uddd5\uddd6\uddd7\uddd8\uddd9\uddda\udddb\udddc\udddd\uddde\udddf\udde0\udde1\udde2\udde3\udde4\udde5\udde6\udde7\udde8\udde9\uddea\uddeb\uddec\udded\uddee\uddef\uddf0\uddf1\uddf2\uddf3\uddf4\uddf5\uddf6\uddf7\uddf8\uddf9\uddfa\uddfb\uddfc\uddfd\uddfe\uddff\ude00\ude01\ude02\ude03\ude04\ude05\ude06\ude07\ude08\ude09\ude0a\ude0b\ude0c\ude0d\ude0e\ude0f\ude10\ude11\ude12\ude13\ude14\ude15\ude16\ude17\ude18\ude19\ude1a\ude1b\ude1c\ude1d\ude1e\ude1f\ude20\ude21\ude22\ude23\ude24\ude25\ude26\ude27\ude28\ude29\ude2a\ude2b\ude2c\ude2d\ude2e\ude2f\ude30\ude31\ude32\ude33\ude34\ude35\ude36\ude37\ude38\ude39\ude3a\ude3b\ude3c\ude3d\ude3e\ude3f\ude40\ude41\ude42\ude43\ude44\ude45\ude46\ude47\ude48\ude49\ude4a\ude4b\ude4c\ude4d\ude4e\ude4f\ude50\ude51\ude52\ude53\ude54\ude55\ude56\ude57\ude58\ude59\ude5a\ude5b\ude5c\ude5d\ude5e\ude5f\ude60\ude61\ude62\ude63\ude64\ude65\ude66\ude67\ude68\ude69\ude6a\ude6b\ude6c\ude6d\ude6e\ude6f\ude70\ude71\ude72\ude73\ude74\ude75\ude76\ude77\ude78\ude79\ude7a\ude7b\ude7c\ude7d\ude7e\ude7f\ude80\ude81\ude82\ude83\ude84\ude85\ude86\ude87\ude88\ude89\ude8a\ude8b\ude8c\ude8d\ude8e\ude8f\ude90\ude91\ude92\ude93\ude94\ude95\ude96\ude97\ude98\ude99\ude9a\ude9b\ude9c\ude9d\ude9e\ude9f\udea0\udea1\udea2\udea3\udea4\udea5\udea6\udea7\udea8\udea9\udeaa\udeab\udeac\udead\udeae\udeaf\udeb0\udeb1\udeb2\udeb3\udeb4\udeb5\udeb6\udeb7\udeb8\udeb9\udeba\udebb\udebc\udebd\udebe\udebf\udec0\udec1\udec2\udec3\udec4\udec5\udec6\udec7\udec8\udec9\udeca\udecb\udecc\udecd\udece\udecf\uded0\uded1\uded2\uded3\uded4\uded5\uded6\uded7\uded8\uded9\udeda\udedb\udedc\udedd\udede\udedf\udee0\udee1\udee2\udee3\udee4\udee5\udee6\udee7\udee8\udee9\udeea\udeeb\udeec\udeed\udeee\udeef\udef0\udef1\udef2\udef3\udef4\udef5\udef6\udef7\udef8\udef9\udefa\udefb\udefc\udefd\udefe\udeff\udf00\udf01\udf02\udf03\udf04\udf05\udf06\udf07\udf08\udf09\udf0a\udf0b\udf0c\udf0d\udf0e\udf0f\udf10\udf11\udf12\udf13\udf14\udf15\udf16\udf17\udf18\udf19\udf1a\udf1b\udf1c\udf1d\udf1e\udf1f\udf20\udf21\udf22\udf23\udf24\udf25\udf26\udf27\udf28\udf29\udf2a\udf2b\udf2c\udf2d\udf2e\udf2f\udf30\udf31\udf32\udf33\udf34\udf35\udf36\udf37\udf38\udf39\udf3a\udf3b\udf3c\udf3d\udf3e\udf3f\udf40\udf41\udf42\udf43\udf44\udf45\udf46\udf47\udf48\udf49\udf4a\udf4b\udf4c\udf4d\udf4e\udf4f\udf50\udf51\udf52\udf53\udf54\udf55\udf56\udf57\udf58\udf59\udf5a\udf5b\udf5c\udf5d\udf5e\udf5f\udf60\udf61\udf62\udf63\udf64\udf65\udf66\udf67\udf68\udf69\udf6a\udf6b\udf6c\udf6d\udf6e\udf6f\udf70\udf71\udf72\udf73\udf74\udf75\udf76\udf77\udf78\udf79\udf7a\udf7b\udf7c\udf7d\udf7e\udf7f\udf80\udf81\udf82\udf83\udf84\udf85\udf86\udf87\udf88\udf89\udf8a\udf8b\udf8c\udf8d\udf8e\udf8f\udf90\udf91\udf92\udf93\udf94\udf95\udf96\udf97\udf98\udf99\udf9a\udf9b\udf9c\udf9d\udf9e\udf9f\udfa0\udfa1\udfa2\udfa3\udfa4\udfa5\udfa6\udfa7\udfa8\udfa9\udfaa\udfab\udfac\udfad\udfae\udfaf\udfb0\udfb1\udfb2\udfb3\udfb4\udfb5\udfb6\udfb7\udfb8\udfb9\udfba\udfbb\udfbc\udfbd\udfbe\udfbf\udfc0\udfc1\udfc2\udfc3\udfc4\udfc5\udfc6\udfc7\udfc8\udfc9\udfca\udfcb\udfcc\udfcd\udfce\udfcf\udfd0\udfd1\udfd2\udfd3\udfd4\udfd5\udfd6\udfd7\udfd8\udfd9\udfda\udfdb\udfdc\udfdd\udfde\udfdf\udfe0\udfe1\udfe2\udfe3\udfe4\udfe5\udfe6\udfe7\udfe8\udfe9\udfea\udfeb\udfec\udfed\udfee\udfef\udff0\udff1\udff2\udff3\udff4\udff5\udff6\udff7\udff8\udff9\udffa\udffb\udffc\udffd\udffe\udfff'") +except UnicodeDecodeError: + Cs = '' # Jython can't handle isolated surrogates + +Ll = u'abcdefghijklmnopqrstuvwxyz\xaa\xb5\xba\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e\u017f\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199\u019a\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd\u01be\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023c\u023f\u0240\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025a\u025b\u025c\u025d\u025e\u025f\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026a\u026b\u026c\u026d\u026e\u026f\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027a\u027b\u027c\u027d\u027e\u027f\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028a\u028b\u028c\u028d\u028e\u028f\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029a\u029b\u029c\u029d\u029e\u029f\u02a0\u02a1\u02a2\u02a3\u02a4\u02a5\u02a6\u02a7\u02a8\u02a9\u02aa\u02ab\u02ac\u02ad\u02ae\u02af\u0390\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03d0\u03d1\u03d5\u03d6\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef\u03f0\u03f1\u03f2\u03f3\u03f5\u03f8\u03fb\u03fc\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045d\u045e\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056a\u056b\u056c\u056d\u056e\u056f\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057a\u057b\u057c\u057d\u057e\u057f\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u1d00\u1d01\u1d02\u1d03\u1d04\u1d05\u1d06\u1d07\u1d08\u1d09\u1d0a\u1d0b\u1d0c\u1d0d\u1d0e\u1d0f\u1d10\u1d11\u1d12\u1d13\u1d14\u1d15\u1d16\u1d17\u1d18\u1d19\u1d1a\u1d1b\u1d1c\u1d1d\u1d1e\u1d1f\u1d20\u1d21\u1d22\u1d23\u1d24\u1d25\u1d26\u1d27\u1d28\u1d29\u1d2a\u1d2b\u1d62\u1d63\u1d64\u1d65\u1d66\u1d67\u1d68\u1d69\u1d6a\u1d6b\u1d6c\u1d6d\u1d6e\u1d6f\u1d70\u1d71\u1d72\u1d73\u1d74\u1d75\u1d76\u1d77\u1d79\u1d7a\u1d7b\u1d7c\u1d7d\u1d7e\u1d7f\u1d80\u1d81\u1d82\u1d83\u1d84\u1d85\u1d86\u1d87\u1d88\u1d89\u1d8a\u1d8b\u1d8c\u1d8d\u1d8e\u1d8f\u1d90\u1d91\u1d92\u1d93\u1d94\u1d95\u1d96\u1d97\u1d98\u1d99\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95\u1e96\u1e97\u1e98\u1e99\u1e9a\u1e9b\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1f00\u1f01\u1f02\u1f03\u1f04\u1f05\u1f06\u1f07\u1f10\u1f11\u1f12\u1f13\u1f14\u1f15\u1f20\u1f21\u1f22\u1f23\u1f24\u1f25\u1f26\u1f27\u1f30\u1f31\u1f32\u1f33\u1f34\u1f35\u1f36\u1f37\u1f40\u1f41\u1f42\u1f43\u1f44\u1f45\u1f50\u1f51\u1f52\u1f53\u1f54\u1f55\u1f56\u1f57\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u1f66\u1f67\u1f70\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u1f7b\u1f7c\u1f7d\u1f80\u1f81\u1f82\u1f83\u1f84\u1f85\u1f86\u1f87\u1f90\u1f91\u1f92\u1f93\u1f94\u1f95\u1f96\u1f97\u1fa0\u1fa1\u1fa2\u1fa3\u1fa4\u1fa5\u1fa6\u1fa7\u1fb0\u1fb1\u1fb2\u1fb3\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2\u1fc3\u1fc4\u1fc6\u1fc7\u1fd0\u1fd1\u1fd2\u1fd3\u1fd6\u1fd7\u1fe0\u1fe1\u1fe2\u1fe3\u1fe4\u1fe5\u1fe6\u1fe7\u1ff2\u1ff3\u1ff4\u1ff6\u1ff7\u2071\u207f\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146\u2147\u2148\u2149\u2c30\u2c31\u2c32\u2c33\u2c34\u2c35\u2c36\u2c37\u2c38\u2c39\u2c3a\u2c3b\u2c3c\u2c3d\u2c3e\u2c3f\u2c40\u2c41\u2c42\u2c43\u2c44\u2c45\u2c46\u2c47\u2c48\u2c49\u2c4a\u2c4b\u2c4c\u2c4d\u2c4e\u2c4f\u2c50\u2c51\u2c52\u2c53\u2c54\u2c55\u2c56\u2c57\u2c58\u2c59\u2c5a\u2c5b\u2c5c\u2c5d\u2c5e\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2d00\u2d01\u2d02\u2d03\u2d04\u2d05\u2d06\u2d07\u2d08\u2d09\u2d0a\u2d0b\u2d0c\u2d0d\u2d0e\u2d0f\u2d10\u2d11\u2d12\u2d13\u2d14\u2d15\u2d16\u2d17\u2d18\u2d19\u2d1a\u2d1b\u2d1c\u2d1d\u2d1e\u2d1f\u2d20\u2d21\u2d22\u2d23\u2d24\u2d25\ufb00\ufb01\ufb02\ufb03\ufb04\ufb05\ufb06\ufb13\ufb14\ufb15\ufb16\ufb17\uff41\uff42\uff43\uff44\uff45\uff46\uff47\uff48\uff49\uff4a\uff4b\uff4c\uff4d\uff4e\uff4f\uff50\uff51\uff52\uff53\uff54\uff55\uff56\uff57\uff58\uff59\uff5a' + +Lm = u'\u02b0\u02b1\u02b2\u02b3\u02b4\u02b5\u02b6\u02b7\u02b8\u02b9\u02ba\u02bb\u02bc\u02bd\u02be\u02bf\u02c0\u02c1\u02c6\u02c7\u02c8\u02c9\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u02d0\u02d1\u02e0\u02e1\u02e2\u02e3\u02e4\u02ee\u037a\u0559\u0640\u06e5\u06e6\u0e46\u0ec6\u10fc\u17d7\u1843\u1d2c\u1d2d\u1d2e\u1d2f\u1d30\u1d31\u1d32\u1d33\u1d34\u1d35\u1d36\u1d37\u1d38\u1d39\u1d3a\u1d3b\u1d3c\u1d3d\u1d3e\u1d3f\u1d40\u1d41\u1d42\u1d43\u1d44\u1d45\u1d46\u1d47\u1d48\u1d49\u1d4a\u1d4b\u1d4c\u1d4d\u1d4e\u1d4f\u1d50\u1d51\u1d52\u1d53\u1d54\u1d55\u1d56\u1d57\u1d58\u1d59\u1d5a\u1d5b\u1d5c\u1d5d\u1d5e\u1d5f\u1d60\u1d61\u1d78\u1d9b\u1d9c\u1d9d\u1d9e\u1d9f\u1da0\u1da1\u1da2\u1da3\u1da4\u1da5\u1da6\u1da7\u1da8\u1da9\u1daa\u1dab\u1dac\u1dad\u1dae\u1daf\u1db0\u1db1\u1db2\u1db3\u1db4\u1db5\u1db6\u1db7\u1db8\u1db9\u1dba\u1dbb\u1dbc\u1dbd\u1dbe\u1dbf\u2090\u2091\u2092\u2093\u2094\u2d6f\u3005\u3031\u3032\u3033\u3034\u3035\u303b\u309d\u309e\u30fc\u30fd\u30fe\ua015\uff70\uff9e\uff9f' + +Lo = u'\u01bb\u01c0\u01c1\u01c2\u01c3\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05f0\u05f1\u05f2\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u066e\u066f\u0671\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679\u067a\u067b\u067c\u067d\u067e\u067f\u0680\u0681\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689\u068a\u068b\u068c\u068d\u068e\u068f\u0690\u0691\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699\u069a\u069b\u069c\u069d\u069e\u069f\u06a0\u06a1\u06a2\u06a3\u06a4\u06a5\u06a6\u06a7\u06a8\u06a9\u06aa\u06ab\u06ac\u06ad\u06ae\u06af\u06b0\u06b1\u06b2\u06b3\u06b4\u06b5\u06b6\u06b7\u06b8\u06b9\u06ba\u06bb\u06bc\u06bd\u06be\u06bf\u06c0\u06c1\u06c2\u06c3\u06c4\u06c5\u06c6\u06c7\u06c8\u06c9\u06ca\u06cb\u06cc\u06cd\u06ce\u06cf\u06d0\u06d1\u06d2\u06d3\u06d5\u06ee\u06ef\u06fa\u06fb\u06fc\u06ff\u0710\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719\u071a\u071b\u071c\u071d\u071e\u071f\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729\u072a\u072b\u072c\u072d\u072e\u072f\u074d\u074e\u074f\u0750\u0751\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759\u075a\u075b\u075c\u075d\u075e\u075f\u0760\u0761\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769\u076a\u076b\u076c\u076d\u0780\u0781\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789\u078a\u078b\u078c\u078d\u078e\u078f\u0790\u0791\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799\u079a\u079b\u079c\u079d\u079e\u079f\u07a0\u07a1\u07a2\u07a3\u07a4\u07a5\u07b1\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093d\u0950\u0958\u0959\u095a\u095b\u095c\u095d\u095e\u095f\u0960\u0961\u097d\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bd\u09ce\u09dc\u09dd\u09df\u09e0\u09e1\u09f0\u09f1\u0a05\u0a06\u0a07\u0a08\u0a09\u0a0a\u0a0f\u0a10\u0a13\u0a14\u0a15\u0a16\u0a17\u0a18\u0a19\u0a1a\u0a1b\u0a1c\u0a1d\u0a1e\u0a1f\u0a20\u0a21\u0a22\u0a23\u0a24\u0a25\u0a26\u0a27\u0a28\u0a2a\u0a2b\u0a2c\u0a2d\u0a2e\u0a2f\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5a\u0a5b\u0a5c\u0a5e\u0a72\u0a73\u0a74\u0a85\u0a86\u0a87\u0a88\u0a89\u0a8a\u0a8b\u0a8c\u0a8d\u0a8f\u0a90\u0a91\u0a93\u0a94\u0a95\u0a96\u0a97\u0a98\u0a99\u0a9a\u0a9b\u0a9c\u0a9d\u0a9e\u0a9f\u0aa0\u0aa1\u0aa2\u0aa3\u0aa4\u0aa5\u0aa6\u0aa7\u0aa8\u0aaa\u0aab\u0aac\u0aad\u0aae\u0aaf\u0ab0\u0ab2\u0ab3\u0ab5\u0ab6\u0ab7\u0ab8\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05\u0b06\u0b07\u0b08\u0b09\u0b0a\u0b0b\u0b0c\u0b0f\u0b10\u0b13\u0b14\u0b15\u0b16\u0b17\u0b18\u0b19\u0b1a\u0b1b\u0b1c\u0b1d\u0b1e\u0b1f\u0b20\u0b21\u0b22\u0b23\u0b24\u0b25\u0b26\u0b27\u0b28\u0b2a\u0b2b\u0b2c\u0b2d\u0b2e\u0b2f\u0b30\u0b32\u0b33\u0b35\u0b36\u0b37\u0b38\u0b39\u0b3d\u0b5c\u0b5d\u0b5f\u0b60\u0b61\u0b71\u0b83\u0b85\u0b86\u0b87\u0b88\u0b89\u0b8a\u0b8e\u0b8f\u0b90\u0b92\u0b93\u0b94\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0ba9\u0baa\u0bae\u0baf\u0bb0\u0bb1\u0bb2\u0bb3\u0bb4\u0bb5\u0bb6\u0bb7\u0bb8\u0bb9\u0c05\u0c06\u0c07\u0c08\u0c09\u0c0a\u0c0b\u0c0c\u0c0e\u0c0f\u0c10\u0c12\u0c13\u0c14\u0c15\u0c16\u0c17\u0c18\u0c19\u0c1a\u0c1b\u0c1c\u0c1d\u0c1e\u0c1f\u0c20\u0c21\u0c22\u0c23\u0c24\u0c25\u0c26\u0c27\u0c28\u0c2a\u0c2b\u0c2c\u0c2d\u0c2e\u0c2f\u0c30\u0c31\u0c32\u0c33\u0c35\u0c36\u0c37\u0c38\u0c39\u0c60\u0c61\u0c85\u0c86\u0c87\u0c88\u0c89\u0c8a\u0c8b\u0c8c\u0c8e\u0c8f\u0c90\u0c92\u0c93\u0c94\u0c95\u0c96\u0c97\u0c98\u0c99\u0c9a\u0c9b\u0c9c\u0c9d\u0c9e\u0c9f\u0ca0\u0ca1\u0ca2\u0ca3\u0ca4\u0ca5\u0ca6\u0ca7\u0ca8\u0caa\u0cab\u0cac\u0cad\u0cae\u0caf\u0cb0\u0cb1\u0cb2\u0cb3\u0cb5\u0cb6\u0cb7\u0cb8\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0d05\u0d06\u0d07\u0d08\u0d09\u0d0a\u0d0b\u0d0c\u0d0e\u0d0f\u0d10\u0d12\u0d13\u0d14\u0d15\u0d16\u0d17\u0d18\u0d19\u0d1a\u0d1b\u0d1c\u0d1d\u0d1e\u0d1f\u0d20\u0d21\u0d22\u0d23\u0d24\u0d25\u0d26\u0d27\u0d28\u0d2a\u0d2b\u0d2c\u0d2d\u0d2e\u0d2f\u0d30\u0d31\u0d32\u0d33\u0d34\u0d35\u0d36\u0d37\u0d38\u0d39\u0d60\u0d61\u0d85\u0d86\u0d87\u0d88\u0d89\u0d8a\u0d8b\u0d8c\u0d8d\u0d8e\u0d8f\u0d90\u0d91\u0d92\u0d93\u0d94\u0d95\u0d96\u0d9a\u0d9b\u0d9c\u0d9d\u0d9e\u0d9f\u0da0\u0da1\u0da2\u0da3\u0da4\u0da5\u0da6\u0da7\u0da8\u0da9\u0daa\u0dab\u0dac\u0dad\u0dae\u0daf\u0db0\u0db1\u0db3\u0db4\u0db5\u0db6\u0db7\u0db8\u0db9\u0dba\u0dbb\u0dbd\u0dc0\u0dc1\u0dc2\u0dc3\u0dc4\u0dc5\u0dc6\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e32\u0e33\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94\u0e95\u0e96\u0e97\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea1\u0ea2\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eaf\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\u0edc\u0edd\u0f00\u0f40\u0f41\u0f42\u0f43\u0f44\u0f45\u0f46\u0f47\u0f49\u0f4a\u0f4b\u0f4c\u0f4d\u0f4e\u0f4f\u0f50\u0f51\u0f52\u0f53\u0f54\u0f55\u0f56\u0f57\u0f58\u0f59\u0f5a\u0f5b\u0f5c\u0f5d\u0f5e\u0f5f\u0f60\u0f61\u0f62\u0f63\u0f64\u0f65\u0f66\u0f67\u0f68\u0f69\u0f6a\u0f88\u0f89\u0f8a\u0f8b\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100a\u100b\u100c\u100d\u100e\u100f\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101a\u101b\u101c\u101d\u101e\u101f\u1020\u1021\u1023\u1024\u1025\u1026\u1027\u1029\u102a\u1050\u1051\u1052\u1053\u1054\u1055\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10e3\u10e4\u10e5\u10e6\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10ef\u10f0\u10f1\u10f2\u10f3\u10f4\u10f5\u10f6\u10f7\u10f8\u10f9\u10fa\u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110a\u110b\u110c\u110d\u110e\u110f\u1110\u1111\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119\u111a\u111b\u111c\u111d\u111e\u111f\u1120\u1121\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129\u112a\u112b\u112c\u112d\u112e\u112f\u1130\u1131\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139\u113a\u113b\u113c\u113d\u113e\u113f\u1140\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149\u114a\u114b\u114c\u114d\u114e\u114f\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159\u115f\u1160\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\u116a\u116b\u116c\u116d\u116e\u116f\u1170\u1171\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179\u117a\u117b\u117c\u117d\u117e\u117f\u1180\u1181\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189\u118a\u118b\u118c\u118d\u118e\u118f\u1190\u1191\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199\u119a\u119b\u119c\u119d\u119e\u119f\u11a0\u11a1\u11a2\u11a8\u11a9\u11aa\u11ab\u11ac\u11ad\u11ae\u11af\u11b0\u11b1\u11b2\u11b3\u11b4\u11b5\u11b6\u11b7\u11b8\u11b9\u11ba\u11bb\u11bc\u11bd\u11be\u11bf\u11c0\u11c1\u11c2\u11c3\u11c4\u11c5\u11c6\u11c7\u11c8\u11c9\u11ca\u11cb\u11cc\u11cd\u11ce\u11cf\u11d0\u11d1\u11d2\u11d3\u11d4\u11d5\u11d6\u11d7\u11d8\u11d9\u11da\u11db\u11dc\u11dd\u11de\u11df\u11e0\u11e1\u11e2\u11e3\u11e4\u11e5\u11e6\u11e7\u11e8\u11e9\u11ea\u11eb\u11ec\u11ed\u11ee\u11ef\u11f0\u11f1\u11f2\u11f3\u11f4\u11f5\u11f6\u11f7\u11f8\u11f9\u1200\u1201\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209\u120a\u120b\u120c\u120d\u120e\u120f\u1210\u1211\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219\u121a\u121b\u121c\u121d\u121e\u121f\u1220\u1221\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229\u122a\u122b\u122c\u122d\u122e\u122f\u1230\u1231\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239\u123a\u123b\u123c\u123d\u123e\u123f\u1240\u1241\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u124a\u124b\u124c\u124d\u1250\u1251\u1252\u1253\u1254\u1255\u1256\u1258\u125a\u125b\u125c\u125d\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269\u126a\u126b\u126c\u126d\u126e\u126f\u1270\u1271\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279\u127a\u127b\u127c\u127d\u127e\u127f\u1280\u1281\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u128a\u128b\u128c\u128d\u1290\u1291\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299\u129a\u129b\u129c\u129d\u129e\u129f\u12a0\u12a1\u12a2\u12a3\u12a4\u12a5\u12a6\u12a7\u12a8\u12a9\u12aa\u12ab\u12ac\u12ad\u12ae\u12af\u12b0\u12b2\u12b3\u12b4\u12b5\u12b8\u12b9\u12ba\u12bb\u12bc\u12bd\u12be\u12c0\u12c2\u12c3\u12c4\u12c5\u12c8\u12c9\u12ca\u12cb\u12cc\u12cd\u12ce\u12cf\u12d0\u12d1\u12d2\u12d3\u12d4\u12d5\u12d6\u12d8\u12d9\u12da\u12db\u12dc\u12dd\u12de\u12df\u12e0\u12e1\u12e2\u12e3\u12e4\u12e5\u12e6\u12e7\u12e8\u12e9\u12ea\u12eb\u12ec\u12ed\u12ee\u12ef\u12f0\u12f1\u12f2\u12f3\u12f4\u12f5\u12f6\u12f7\u12f8\u12f9\u12fa\u12fb\u12fc\u12fd\u12fe\u12ff\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130a\u130b\u130c\u130d\u130e\u130f\u1310\u1312\u1313\u1314\u1315\u1318\u1319\u131a\u131b\u131c\u131d\u131e\u131f\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132a\u132b\u132c\u132d\u132e\u132f\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133a\u133b\u133c\u133d\u133e\u133f\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134a\u134b\u134c\u134d\u134e\u134f\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135a\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138a\u138b\u138c\u138d\u138e\u138f\u13a0\u13a1\u13a2\u13a3\u13a4\u13a5\u13a6\u13a7\u13a8\u13a9\u13aa\u13ab\u13ac\u13ad\u13ae\u13af\u13b0\u13b1\u13b2\u13b3\u13b4\u13b5\u13b6\u13b7\u13b8\u13b9\u13ba\u13bb\u13bc\u13bd\u13be\u13bf\u13c0\u13c1\u13c2\u13c3\u13c4\u13c5\u13c6\u13c7\u13c8\u13c9\u13ca\u13cb\u13cc\u13cd\u13ce\u13cf\u13d0\u13d1\u13d2\u13d3\u13d4\u13d5\u13d6\u13d7\u13d8\u13d9\u13da\u13db\u13dc\u13dd\u13de\u13df\u13e0\u13e1\u13e2\u13e3\u13e4\u13e5\u13e6\u13e7\u13e8\u13e9\u13ea\u13eb\u13ec\u13ed\u13ee\u13ef\u13f0\u13f1\u13f2\u13f3\u13f4\u1401\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409\u140a\u140b\u140c\u140d\u140e\u140f\u1410\u1411\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419\u141a\u141b\u141c\u141d\u141e\u141f\u1420\u1421\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429\u142a\u142b\u142c\u142d\u142e\u142f\u1430\u1431\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439\u143a\u143b\u143c\u143d\u143e\u143f\u1440\u1441\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449\u144a\u144b\u144c\u144d\u144e\u144f\u1450\u1451\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459\u145a\u145b\u145c\u145d\u145e\u145f\u1460\u1461\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469\u146a\u146b\u146c\u146d\u146e\u146f\u1470\u1471\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479\u147a\u147b\u147c\u147d\u147e\u147f\u1480\u1481\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489\u148a\u148b\u148c\u148d\u148e\u148f\u1490\u1491\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499\u149a\u149b\u149c\u149d\u149e\u149f\u14a0\u14a1\u14a2\u14a3\u14a4\u14a5\u14a6\u14a7\u14a8\u14a9\u14aa\u14ab\u14ac\u14ad\u14ae\u14af\u14b0\u14b1\u14b2\u14b3\u14b4\u14b5\u14b6\u14b7\u14b8\u14b9\u14ba\u14bb\u14bc\u14bd\u14be\u14bf\u14c0\u14c1\u14c2\u14c3\u14c4\u14c5\u14c6\u14c7\u14c8\u14c9\u14ca\u14cb\u14cc\u14cd\u14ce\u14cf\u14d0\u14d1\u14d2\u14d3\u14d4\u14d5\u14d6\u14d7\u14d8\u14d9\u14da\u14db\u14dc\u14dd\u14de\u14df\u14e0\u14e1\u14e2\u14e3\u14e4\u14e5\u14e6\u14e7\u14e8\u14e9\u14ea\u14eb\u14ec\u14ed\u14ee\u14ef\u14f0\u14f1\u14f2\u14f3\u14f4\u14f5\u14f6\u14f7\u14f8\u14f9\u14fa\u14fb\u14fc\u14fd\u14fe\u14ff\u1500\u1501\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509\u150a\u150b\u150c\u150d\u150e\u150f\u1510\u1511\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519\u151a\u151b\u151c\u151d\u151e\u151f\u1520\u1521\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529\u152a\u152b\u152c\u152d\u152e\u152f\u1530\u1531\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539\u153a\u153b\u153c\u153d\u153e\u153f\u1540\u1541\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549\u154a\u154b\u154c\u154d\u154e\u154f\u1550\u1551\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559\u155a\u155b\u155c\u155d\u155e\u155f\u1560\u1561\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569\u156a\u156b\u156c\u156d\u156e\u156f\u1570\u1571\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579\u157a\u157b\u157c\u157d\u157e\u157f\u1580\u1581\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589\u158a\u158b\u158c\u158d\u158e\u158f\u1590\u1591\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599\u159a\u159b\u159c\u159d\u159e\u159f\u15a0\u15a1\u15a2\u15a3\u15a4\u15a5\u15a6\u15a7\u15a8\u15a9\u15aa\u15ab\u15ac\u15ad\u15ae\u15af\u15b0\u15b1\u15b2\u15b3\u15b4\u15b5\u15b6\u15b7\u15b8\u15b9\u15ba\u15bb\u15bc\u15bd\u15be\u15bf\u15c0\u15c1\u15c2\u15c3\u15c4\u15c5\u15c6\u15c7\u15c8\u15c9\u15ca\u15cb\u15cc\u15cd\u15ce\u15cf\u15d0\u15d1\u15d2\u15d3\u15d4\u15d5\u15d6\u15d7\u15d8\u15d9\u15da\u15db\u15dc\u15dd\u15de\u15df\u15e0\u15e1\u15e2\u15e3\u15e4\u15e5\u15e6\u15e7\u15e8\u15e9\u15ea\u15eb\u15ec\u15ed\u15ee\u15ef\u15f0\u15f1\u15f2\u15f3\u15f4\u15f5\u15f6\u15f7\u15f8\u15f9\u15fa\u15fb\u15fc\u15fd\u15fe\u15ff\u1600\u1601\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609\u160a\u160b\u160c\u160d\u160e\u160f\u1610\u1611\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619\u161a\u161b\u161c\u161d\u161e\u161f\u1620\u1621\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629\u162a\u162b\u162c\u162d\u162e\u162f\u1630\u1631\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639\u163a\u163b\u163c\u163d\u163e\u163f\u1640\u1641\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649\u164a\u164b\u164c\u164d\u164e\u164f\u1650\u1651\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659\u165a\u165b\u165c\u165d\u165e\u165f\u1660\u1661\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669\u166a\u166b\u166c\u166f\u1670\u1671\u1672\u1673\u1674\u1675\u1676\u1681\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689\u168a\u168b\u168c\u168d\u168e\u168f\u1690\u1691\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699\u169a\u16a0\u16a1\u16a2\u16a3\u16a4\u16a5\u16a6\u16a7\u16a8\u16a9\u16aa\u16ab\u16ac\u16ad\u16ae\u16af\u16b0\u16b1\u16b2\u16b3\u16b4\u16b5\u16b6\u16b7\u16b8\u16b9\u16ba\u16bb\u16bc\u16bd\u16be\u16bf\u16c0\u16c1\u16c2\u16c3\u16c4\u16c5\u16c6\u16c7\u16c8\u16c9\u16ca\u16cb\u16cc\u16cd\u16ce\u16cf\u16d0\u16d1\u16d2\u16d3\u16d4\u16d5\u16d6\u16d7\u16d8\u16d9\u16da\u16db\u16dc\u16dd\u16de\u16df\u16e0\u16e1\u16e2\u16e3\u16e4\u16e5\u16e6\u16e7\u16e8\u16e9\u16ea\u1700\u1701\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709\u170a\u170b\u170c\u170e\u170f\u1710\u1711\u1720\u1721\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729\u172a\u172b\u172c\u172d\u172e\u172f\u1730\u1731\u1740\u1741\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749\u174a\u174b\u174c\u174d\u174e\u174f\u1750\u1751\u1760\u1761\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769\u176a\u176b\u176c\u176e\u176f\u1770\u1780\u1781\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789\u178a\u178b\u178c\u178d\u178e\u178f\u1790\u1791\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799\u179a\u179b\u179c\u179d\u179e\u179f\u17a0\u17a1\u17a2\u17a3\u17a4\u17a5\u17a6\u17a7\u17a8\u17a9\u17aa\u17ab\u17ac\u17ad\u17ae\u17af\u17b0\u17b1\u17b2\u17b3\u17dc\u1820\u1821\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829\u182a\u182b\u182c\u182d\u182e\u182f\u1830\u1831\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839\u183a\u183b\u183c\u183d\u183e\u183f\u1840\u1841\u1842\u1844\u1845\u1846\u1847\u1848\u1849\u184a\u184b\u184c\u184d\u184e\u184f\u1850\u1851\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859\u185a\u185b\u185c\u185d\u185e\u185f\u1860\u1861\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869\u186a\u186b\u186c\u186d\u186e\u186f\u1870\u1871\u1872\u1873\u1874\u1875\u1876\u1877\u1880\u1881\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889\u188a\u188b\u188c\u188d\u188e\u188f\u1890\u1891\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899\u189a\u189b\u189c\u189d\u189e\u189f\u18a0\u18a1\u18a2\u18a3\u18a4\u18a5\u18a6\u18a7\u18a8\u1900\u1901\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909\u190a\u190b\u190c\u190d\u190e\u190f\u1910\u1911\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919\u191a\u191b\u191c\u1950\u1951\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959\u195a\u195b\u195c\u195d\u195e\u195f\u1960\u1961\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969\u196a\u196b\u196c\u196d\u1970\u1971\u1972\u1973\u1974\u1980\u1981\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989\u198a\u198b\u198c\u198d\u198e\u198f\u1990\u1991\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999\u199a\u199b\u199c\u199d\u199e\u199f\u19a0\u19a1\u19a2\u19a3\u19a4\u19a5\u19a6\u19a7\u19a8\u19a9\u19c1\u19c2\u19c3\u19c4\u19c5\u19c6\u19c7\u1a00\u1a01\u1a02\u1a03\u1a04\u1a05\u1a06\u1a07\u1a08\u1a09\u1a0a\u1a0b\u1a0c\u1a0d\u1a0e\u1a0f\u1a10\u1a11\u1a12\u1a13\u1a14\u1a15\u1a16\u2135\u2136\u2137\u2138\u2d30\u2d31\u2d32\u2d33\u2d34\u2d35\u2d36\u2d37\u2d38\u2d39\u2d3a\u2d3b\u2d3c\u2d3d\u2d3e\u2d3f\u2d40\u2d41\u2d42\u2d43\u2d44\u2d45\u2d46\u2d47\u2d48\u2d49\u2d4a\u2d4b\u2d4c\u2d4d\u2d4e\u2d4f\u2d50\u2d51\u2d52\u2d53\u2d54\u2d55\u2d56\u2d57\u2d58\u2d59\u2d5a\u2d5b\u2d5c\u2d5d\u2d5e\u2d5f\u2d60\u2d61\u2d62\u2d63\u2d64\u2d65\u2d80\u2d81\u2d82\u2d83\u2d84\u2d85\u2d86\u2d87\u2d88\u2d89\u2d8a\u2d8b\u2d8c\u2d8d\u2d8e\u2d8f\u2d90\u2d91\u2d92\u2d93\u2d94\u2d95\u2d96\u2da0\u2da1\u2da2\u2da3\u2da4\u2da5\u2da6\u2da8\u2da9\u2daa\u2dab\u2dac\u2dad\u2dae\u2db0\u2db1\u2db2\u2db3\u2db4\u2db5\u2db6\u2db8\u2db9\u2dba\u2dbb\u2dbc\u2dbd\u2dbe\u2dc0\u2dc1\u2dc2\u2dc3\u2dc4\u2dc5\u2dc6\u2dc8\u2dc9\u2dca\u2dcb\u2dcc\u2dcd\u2dce\u2dd0\u2dd1\u2dd2\u2dd3\u2dd4\u2dd5\u2dd6\u2dd8\u2dd9\u2dda\u2ddb\u2ddc\u2ddd\u2dde\u3006\u303c\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\u3090\u3091\u3092\u3093\u3094\u3095\u3096\u309f\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30ff\u3105\u3106\u3107\u3108\u3109\u310a\u310b\u310c\u310d\u310e\u310f\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311a\u311b\u311c\u311d\u311e\u311f\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\u312a\u312b\u312c\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313a\u313b\u313c\u313d\u313e\u313f\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e\u314f\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316a\u316b\u316c\u316d\u316e\u316f\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317a\u317b\u317c\u317d\u317e\u317f\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318a\u318b\u318c\u318d\u318e\u31a0\u31a1\u31a2\u31a3\u31a4\u31a5\u31a6\u31a7\u31a8\u31a9\u31aa\u31ab\u31ac\u31ad\u31ae\u31af\u31b0\u31b1\u31b2\u31b3\u31b4\u31b5\u31b6\u31b7\u31f0\u31f1\u31f2\u31f3\u31f4\u31f5\u31f6\u31f7\u31f8\u31f9\u31fa\u31fb\u31fc\u31fd\u31fe\u31ff\u3400\u3401\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409\u340a\u340b\u340c\u340d\u340e\u340f\u3410\u3411\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419\u341a\u341b\u341c\u341d\u341e\u341f\u3420\u3421\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429\u342a\u342b\u342c\u342d\u342e\u342f\u3430\u3431\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439\u343a\u343b\u343c\u343d\u343e\u343f\u3440\u3441\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449\u344a\u344b\u344c\u344d\u344e\u344f\u3450\u3451\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459\u345a\u345b\u345c\u345d\u345e\u345f\u3460\u3461\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469\u346a\u346b\u346c\u346d\u346e\u346f\u3470\u3471\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479\u347a\u347b\u347c\u347d\u347e\u347f\u3480\u3481\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489\u348a\u348b\u348c\u348d\u348e\u348f\u3490\u3491\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499\u349a\u349b\u349c\u349d\u349e\u349f\u34a0\u34a1\u34a2\u34a3\u34a4\u34a5\u34a6\u34a7\u34a8\u34a9\u34aa\u34ab\u34ac\u34ad\u34ae\u34af\u34b0\u34b1\u34b2\u34b3\u34b4\u34b5\u34b6\u34b7\u34b8\u34b9\u34ba\u34bb\u34bc\u34bd\u34be\u34bf\u34c0\u34c1\u34c2\u34c3\u34c4\u34c5\u34c6\u34c7\u34c8\u34c9\u34ca\u34cb\u34cc\u34cd\u34ce\u34cf\u34d0\u34d1\u34d2\u34d3\u34d4\u34d5\u34d6\u34d7\u34d8\u34d9\u34da\u34db\u34dc\u34dd\u34de\u34df\u34e0\u34e1\u34e2\u34e3\u34e4\u34e5\u34e6\u34e7\u34e8\u34e9\u34ea\u34eb\u34ec\u34ed\u34ee\u34ef\u34f0\u34f1\u34f2\u34f3\u34f4\u34f5\u34f6\u34f7\u34f8\u34f9\u34fa\u34fb\u34fc\u34fd\u34fe\u34ff\u3500\u3501\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u350a\u350b\u350c\u350d\u350e\u350f\u3510\u3511\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519\u351a\u351b\u351c\u351d\u351e\u351f\u3520\u3521\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529\u352a\u352b\u352c\u352d\u352e\u352f\u3530\u3531\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539\u353a\u353b\u353c\u353d\u353e\u353f\u3540\u3541\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549\u354a\u354b\u354c\u354d\u354e\u354f\u3550\u3551\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559\u355a\u355b\u355c\u355d\u355e\u355f\u3560\u3561\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569\u356a\u356b\u356c\u356d\u356e\u356f\u3570\u3571\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579\u357a\u357b\u357c\u357d\u357e\u357f\u3580\u3581\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589\u358a\u358b\u358c\u358d\u358e\u358f\u3590\u3591\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359a\u359b\u359c\u359d\u359e\u359f\u35a0\u35a1\u35a2\u35a3\u35a4\u35a5\u35a6\u35a7\u35a8\u35a9\u35aa\u35ab\u35ac\u35ad\u35ae\u35af\u35b0\u35b1\u35b2\u35b3\u35b4\u35b5\u35b6\u35b7\u35b8\u35b9\u35ba\u35bb\u35bc\u35bd\u35be\u35bf\u35c0\u35c1\u35c2\u35c3\u35c4\u35c5\u35c6\u35c7\u35c8\u35c9\u35ca\u35cb\u35cc\u35cd\u35ce\u35cf\u35d0\u35d1\u35d2\u35d3\u35d4\u35d5\u35d6\u35d7\u35d8\u35d9\u35da\u35db\u35dc\u35dd\u35de\u35df\u35e0\u35e1\u35e2\u35e3\u35e4\u35e5\u35e6\u35e7\u35e8\u35e9\u35ea\u35eb\u35ec\u35ed\u35ee\u35ef\u35f0\u35f1\u35f2\u35f3\u35f4\u35f5\u35f6\u35f7\u35f8\u35f9\u35fa\u35fb\u35fc\u35fd\u35fe\u35ff\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607\u3608\u3609\u360a\u360b\u360c\u360d\u360e\u360f\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617\u3618\u3619\u361a\u361b\u361c\u361d\u361e\u361f\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627\u3628\u3629\u362a\u362b\u362c\u362d\u362e\u362f\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637\u3638\u3639\u363a\u363b\u363c\u363d\u363e\u363f\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647\u3648\u3649\u364a\u364b\u364c\u364d\u364e\u364f\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657\u3658\u3659\u365a\u365b\u365c\u365d\u365e\u365f\u3660\u3661\u3662\u3663\u3664\u3665\u3666\u3667\u3668\u3669\u366a\u366b\u366c\u366d\u366e\u366f\u3670\u3671\u3672\u3673\u3674\u3675\u3676\u3677\u3678\u3679\u367a\u367b\u367c\u367d\u367e\u367f\u3680\u3681\u3682\u3683\u3684\u3685\u3686\u3687\u3688\u3689\u368a\u368b\u368c\u368d\u368e\u368f\u3690\u3691\u3692\u3693\u3694\u3695\u3696\u3697\u3698\u3699\u369a\u369b\u369c\u369d\u369e\u369f\u36a0\u36a1\u36a2\u36a3\u36a4\u36a5\u36a6\u36a7\u36a8\u36a9\u36aa\u36ab\u36ac\u36ad\u36ae\u36af\u36b0\u36b1\u36b2\u36b3\u36b4\u36b5\u36b6\u36b7\u36b8\u36b9\u36ba\u36bb\u36bc\u36bd\u36be\u36bf\u36c0\u36c1\u36c2\u36c3\u36c4\u36c5\u36c6\u36c7\u36c8\u36c9\u36ca\u36cb\u36cc\u36cd\u36ce\u36cf\u36d0\u36d1\u36d2\u36d3\u36d4\u36d5\u36d6\u36d7\u36d8\u36d9\u36da\u36db\u36dc\u36dd\u36de\u36df\u36e0\u36e1\u36e2\u36e3\u36e4\u36e5\u36e6\u36e7\u36e8\u36e9\u36ea\u36eb\u36ec\u36ed\u36ee\u36ef\u36f0\u36f1\u36f2\u36f3\u36f4\u36f5\u36f6\u36f7\u36f8\u36f9\u36fa\u36fb\u36fc\u36fd\u36fe\u36ff\u3700\u3701\u3702\u3703\u3704\u3705\u3706\u3707\u3708\u3709\u370a\u370b\u370c\u370d\u370e\u370f\u3710\u3711\u3712\u3713\u3714\u3715\u3716\u3717\u3718\u3719\u371a\u371b\u371c\u371d\u371e\u371f\u3720\u3721\u3722\u3723\u3724\u3725\u3726\u3727\u3728\u3729\u372a\u372b\u372c\u372d\u372e\u372f\u3730\u3731\u3732\u3733\u3734\u3735\u3736\u3737\u3738\u3739\u373a\u373b\u373c\u373d\u373e\u373f\u3740\u3741\u3742\u3743\u3744\u3745\u3746\u3747\u3748\u3749\u374a\u374b\u374c\u374d\u374e\u374f\u3750\u3751\u3752\u3753\u3754\u3755\u3756\u3757\u3758\u3759\u375a\u375b\u375c\u375d\u375e\u375f\u3760\u3761\u3762\u3763\u3764\u3765\u3766\u3767\u3768\u3769\u376a\u376b\u376c\u376d\u376e\u376f\u3770\u3771\u3772\u3773\u3774\u3775\u3776\u3777\u3778\u3779\u377a\u377b\u377c\u377d\u377e\u377f\u3780\u3781\u3782\u3783\u3784\u3785\u3786\u3787\u3788\u3789\u378a\u378b\u378c\u378d\u378e\u378f\u3790\u3791\u3792\u3793\u3794\u3795\u3796\u3797\u3798\u3799\u379a\u379b\u379c\u379d\u379e\u379f\u37a0\u37a1\u37a2\u37a3\u37a4\u37a5\u37a6\u37a7\u37a8\u37a9\u37aa\u37ab\u37ac\u37ad\u37ae\u37af\u37b0\u37b1\u37b2\u37b3\u37b4\u37b5\u37b6\u37b7\u37b8\u37b9\u37ba\u37bb\u37bc\u37bd\u37be\u37bf\u37c0\u37c1\u37c2\u37c3\u37c4\u37c5\u37c6\u37c7\u37c8\u37c9\u37ca\u37cb\u37cc\u37cd\u37ce\u37cf\u37d0\u37d1\u37d2\u37d3\u37d4\u37d5\u37d6\u37d7\u37d8\u37d9\u37da\u37db\u37dc\u37dd\u37de\u37df\u37e0\u37e1\u37e2\u37e3\u37e4\u37e5\u37e6\u37e7\u37e8\u37e9\u37ea\u37eb\u37ec\u37ed\u37ee\u37ef\u37f0\u37f1\u37f2\u37f3\u37f4\u37f5\u37f6\u37f7\u37f8\u37f9\u37fa\u37fb\u37fc\u37fd\u37fe\u37ff\u3800\u3801\u3802\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380a\u380b\u380c\u380d\u380e\u380f\u3810\u3811\u3812\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381a\u381b\u381c\u381d\u381e\u381f\u3820\u3821\u3822\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382a\u382b\u382c\u382d\u382e\u382f\u3830\u3831\u3832\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383a\u383b\u383c\u383d\u383e\u383f\u3840\u3841\u3842\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384a\u384b\u384c\u384d\u384e\u384f\u3850\u3851\u3852\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385a\u385b\u385c\u385d\u385e\u385f\u3860\u3861\u3862\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386a\u386b\u386c\u386d\u386e\u386f\u3870\u3871\u3872\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387a\u387b\u387c\u387d\u387e\u387f\u3880\u3881\u3882\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388a\u388b\u388c\u388d\u388e\u388f\u3890\u3891\u3892\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389a\u389b\u389c\u389d\u389e\u389f\u38a0\u38a1\u38a2\u38a3\u38a4\u38a5\u38a6\u38a7\u38a8\u38a9\u38aa\u38ab\u38ac\u38ad\u38ae\u38af\u38b0\u38b1\u38b2\u38b3\u38b4\u38b5\u38b6\u38b7\u38b8\u38b9\u38ba\u38bb\u38bc\u38bd\u38be\u38bf\u38c0\u38c1\u38c2\u38c3\u38c4\u38c5\u38c6\u38c7\u38c8\u38c9\u38ca\u38cb\u38cc\u38cd\u38ce\u38cf\u38d0\u38d1\u38d2\u38d3\u38d4\u38d5\u38d6\u38d7\u38d8\u38d9\u38da\u38db\u38dc\u38dd\u38de\u38df\u38e0\u38e1\u38e2\u38e3\u38e4\u38e5\u38e6\u38e7\u38e8\u38e9\u38ea\u38eb\u38ec\u38ed\u38ee\u38ef\u38f0\u38f1\u38f2\u38f3\u38f4\u38f5\u38f6\u38f7\u38f8\u38f9\u38fa\u38fb\u38fc\u38fd\u38fe\u38ff\u3900\u3901\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909\u390a\u390b\u390c\u390d\u390e\u390f\u3910\u3911\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919\u391a\u391b\u391c\u391d\u391e\u391f\u3920\u3921\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929\u392a\u392b\u392c\u392d\u392e\u392f\u3930\u3931\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939\u393a\u393b\u393c\u393d\u393e\u393f\u3940\u3941\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949\u394a\u394b\u394c\u394d\u394e\u394f\u3950\u3951\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959\u395a\u395b\u395c\u395d\u395e\u395f\u3960\u3961\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969\u396a\u396b\u396c\u396d\u396e\u396f\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979\u397a\u397b\u397c\u397d\u397e\u397f\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u3989\u398a\u398b\u398c\u398d\u398e\u398f\u3990\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998\u3999\u399a\u399b\u399c\u399d\u399e\u399f\u39a0\u39a1\u39a2\u39a3\u39a4\u39a5\u39a6\u39a7\u39a8\u39a9\u39aa\u39ab\u39ac\u39ad\u39ae\u39af\u39b0\u39b1\u39b2\u39b3\u39b4\u39b5\u39b6\u39b7\u39b8\u39b9\u39ba\u39bb\u39bc\u39bd\u39be\u39bf\u39c0\u39c1\u39c2\u39c3\u39c4\u39c5\u39c6\u39c7\u39c8\u39c9\u39ca\u39cb\u39cc\u39cd\u39ce\u39cf\u39d0\u39d1\u39d2\u39d3\u39d4\u39d5\u39d6\u39d7\u39d8\u39d9\u39da\u39db\u39dc\u39dd\u39de\u39df\u39e0\u39e1\u39e2\u39e3\u39e4\u39e5\u39e6\u39e7\u39e8\u39e9\u39ea\u39eb\u39ec\u39ed\u39ee\u39ef\u39f0\u39f1\u39f2\u39f3\u39f4\u39f5\u39f6\u39f7\u39f8\u39f9\u39fa\u39fb\u39fc\u39fd\u39fe\u39ff\u3a00\u3a01\u3a02\u3a03\u3a04\u3a05\u3a06\u3a07\u3a08\u3a09\u3a0a\u3a0b\u3a0c\u3a0d\u3a0e\u3a0f\u3a10\u3a11\u3a12\u3a13\u3a14\u3a15\u3a16\u3a17\u3a18\u3a19\u3a1a\u3a1b\u3a1c\u3a1d\u3a1e\u3a1f\u3a20\u3a21\u3a22\u3a23\u3a24\u3a25\u3a26\u3a27\u3a28\u3a29\u3a2a\u3a2b\u3a2c\u3a2d\u3a2e\u3a2f\u3a30\u3a31\u3a32\u3a33\u3a34\u3a35\u3a36\u3a37\u3a38\u3a39\u3a3a\u3a3b\u3a3c\u3a3d\u3a3e\u3a3f\u3a40\u3a41\u3a42\u3a43\u3a44\u3a45\u3a46\u3a47\u3a48\u3a49\u3a4a\u3a4b\u3a4c\u3a4d\u3a4e\u3a4f\u3a50\u3a51\u3a52\u3a53\u3a54\u3a55\u3a56\u3a57\u3a58\u3a59\u3a5a\u3a5b\u3a5c\u3a5d\u3a5e\u3a5f\u3a60\u3a61\u3a62\u3a63\u3a64\u3a65\u3a66\u3a67\u3a68\u3a69\u3a6a\u3a6b\u3a6c\u3a6d\u3a6e\u3a6f\u3a70\u3a71\u3a72\u3a73\u3a74\u3a75\u3a76\u3a77\u3a78\u3a79\u3a7a\u3a7b\u3a7c\u3a7d\u3a7e\u3a7f\u3a80\u3a81\u3a82\u3a83\u3a84\u3a85\u3a86\u3a87\u3a88\u3a89\u3a8a\u3a8b\u3a8c\u3a8d\u3a8e\u3a8f\u3a90\u3a91\u3a92\u3a93\u3a94\u3a95\u3a96\u3a97\u3a98\u3a99\u3a9a\u3a9b\u3a9c\u3a9d\u3a9e\u3a9f\u3aa0\u3aa1\u3aa2\u3aa3\u3aa4\u3aa5\u3aa6\u3aa7\u3aa8\u3aa9\u3aaa\u3aab\u3aac\u3aad\u3aae\u3aaf\u3ab0\u3ab1\u3ab2\u3ab3\u3ab4\u3ab5\u3ab6\u3ab7\u3ab8\u3ab9\u3aba\u3abb\u3abc\u3abd\u3abe\u3abf\u3ac0\u3ac1\u3ac2\u3ac3\u3ac4\u3ac5\u3ac6\u3ac7\u3ac8\u3ac9\u3aca\u3acb\u3acc\u3acd\u3ace\u3acf\u3ad0\u3ad1\u3ad2\u3ad3\u3ad4\u3ad5\u3ad6\u3ad7\u3ad8\u3ad9\u3ada\u3adb\u3adc\u3add\u3ade\u3adf\u3ae0\u3ae1\u3ae2\u3ae3\u3ae4\u3ae5\u3ae6\u3ae7\u3ae8\u3ae9\u3aea\u3aeb\u3aec\u3aed\u3aee\u3aef\u3af0\u3af1\u3af2\u3af3\u3af4\u3af5\u3af6\u3af7\u3af8\u3af9\u3afa\u3afb\u3afc\u3afd\u3afe\u3aff\u3b00\u3b01\u3b02\u3b03\u3b04\u3b05\u3b06\u3b07\u3b08\u3b09\u3b0a\u3b0b\u3b0c\u3b0d\u3b0e\u3b0f\u3b10\u3b11\u3b12\u3b13\u3b14\u3b15\u3b16\u3b17\u3b18\u3b19\u3b1a\u3b1b\u3b1c\u3b1d\u3b1e\u3b1f\u3b20\u3b21\u3b22\u3b23\u3b24\u3b25\u3b26\u3b27\u3b28\u3b29\u3b2a\u3b2b\u3b2c\u3b2d\u3b2e\u3b2f\u3b30\u3b31\u3b32\u3b33\u3b34\u3b35\u3b36\u3b37\u3b38\u3b39\u3b3a\u3b3b\u3b3c\u3b3d\u3b3e\u3b3f\u3b40\u3b41\u3b42\u3b43\u3b44\u3b45\u3b46\u3b47\u3b48\u3b49\u3b4a\u3b4b\u3b4c\u3b4d\u3b4e\u3b4f\u3b50\u3b51\u3b52\u3b53\u3b54\u3b55\u3b56\u3b57\u3b58\u3b59\u3b5a\u3b5b\u3b5c\u3b5d\u3b5e\u3b5f\u3b60\u3b61\u3b62\u3b63\u3b64\u3b65\u3b66\u3b67\u3b68\u3b69\u3b6a\u3b6b\u3b6c\u3b6d\u3b6e\u3b6f\u3b70\u3b71\u3b72\u3b73\u3b74\u3b75\u3b76\u3b77\u3b78\u3b79\u3b7a\u3b7b\u3b7c\u3b7d\u3b7e\u3b7f\u3b80\u3b81\u3b82\u3b83\u3b84\u3b85\u3b86\u3b87\u3b88\u3b89\u3b8a\u3b8b\u3b8c\u3b8d\u3b8e\u3b8f\u3b90\u3b91\u3b92\u3b93\u3b94\u3b95\u3b96\u3b97\u3b98\u3b99\u3b9a\u3b9b\u3b9c\u3b9d\u3b9e\u3b9f\u3ba0\u3ba1\u3ba2\u3ba3\u3ba4\u3ba5\u3ba6\u3ba7\u3ba8\u3ba9\u3baa\u3bab\u3bac\u3bad\u3bae\u3baf\u3bb0\u3bb1\u3bb2\u3bb3\u3bb4\u3bb5\u3bb6\u3bb7\u3bb8\u3bb9\u3bba\u3bbb\u3bbc\u3bbd\u3bbe\u3bbf\u3bc0\u3bc1\u3bc2\u3bc3\u3bc4\u3bc5\u3bc6\u3bc7\u3bc8\u3bc9\u3bca\u3bcb\u3bcc\u3bcd\u3bce\u3bcf\u3bd0\u3bd1\u3bd2\u3bd3\u3bd4\u3bd5\u3bd6\u3bd7\u3bd8\u3bd9\u3bda\u3bdb\u3bdc\u3bdd\u3bde\u3bdf\u3be0\u3be1\u3be2\u3be3\u3be4\u3be5\u3be6\u3be7\u3be8\u3be9\u3bea\u3beb\u3bec\u3bed\u3bee\u3bef\u3bf0\u3bf1\u3bf2\u3bf3\u3bf4\u3bf5\u3bf6\u3bf7\u3bf8\u3bf9\u3bfa\u3bfb\u3bfc\u3bfd\u3bfe\u3bff\u3c00\u3c01\u3c02\u3c03\u3c04\u3c05\u3c06\u3c07\u3c08\u3c09\u3c0a\u3c0b\u3c0c\u3c0d\u3c0e\u3c0f\u3c10\u3c11\u3c12\u3c13\u3c14\u3c15\u3c16\u3c17\u3c18\u3c19\u3c1a\u3c1b\u3c1c\u3c1d\u3c1e\u3c1f\u3c20\u3c21\u3c22\u3c23\u3c24\u3c25\u3c26\u3c27\u3c28\u3c29\u3c2a\u3c2b\u3c2c\u3c2d\u3c2e\u3c2f\u3c30\u3c31\u3c32\u3c33\u3c34\u3c35\u3c36\u3c37\u3c38\u3c39\u3c3a\u3c3b\u3c3c\u3c3d\u3c3e\u3c3f\u3c40\u3c41\u3c42\u3c43\u3c44\u3c45\u3c46\u3c47\u3c48\u3c49\u3c4a\u3c4b\u3c4c\u3c4d\u3c4e\u3c4f\u3c50\u3c51\u3c52\u3c53\u3c54\u3c55\u3c56\u3c57\u3c58\u3c59\u3c5a\u3c5b\u3c5c\u3c5d\u3c5e\u3c5f\u3c60\u3c61\u3c62\u3c63\u3c64\u3c65\u3c66\u3c67\u3c68\u3c69\u3c6a\u3c6b\u3c6c\u3c6d\u3c6e\u3c6f\u3c70\u3c71\u3c72\u3c73\u3c74\u3c75\u3c76\u3c77\u3c78\u3c79\u3c7a\u3c7b\u3c7c\u3c7d\u3c7e\u3c7f\u3c80\u3c81\u3c82\u3c83\u3c84\u3c85\u3c86\u3c87\u3c88\u3c89\u3c8a\u3c8b\u3c8c\u3c8d\u3c8e\u3c8f\u3c90\u3c91\u3c92\u3c93\u3c94\u3c95\u3c96\u3c97\u3c98\u3c99\u3c9a\u3c9b\u3c9c\u3c9d\u3c9e\u3c9f\u3ca0\u3ca1\u3ca2\u3ca3\u3ca4\u3ca5\u3ca6\u3ca7\u3ca8\u3ca9\u3caa\u3cab\u3cac\u3cad\u3cae\u3caf\u3cb0\u3cb1\u3cb2\u3cb3\u3cb4\u3cb5\u3cb6\u3cb7\u3cb8\u3cb9\u3cba\u3cbb\u3cbc\u3cbd\u3cbe\u3cbf\u3cc0\u3cc1\u3cc2\u3cc3\u3cc4\u3cc5\u3cc6\u3cc7\u3cc8\u3cc9\u3cca\u3ccb\u3ccc\u3ccd\u3cce\u3ccf\u3cd0\u3cd1\u3cd2\u3cd3\u3cd4\u3cd5\u3cd6\u3cd7\u3cd8\u3cd9\u3cda\u3cdb\u3cdc\u3cdd\u3cde\u3cdf\u3ce0\u3ce1\u3ce2\u3ce3\u3ce4\u3ce5\u3ce6\u3ce7\u3ce8\u3ce9\u3cea\u3ceb\u3cec\u3ced\u3cee\u3cef\u3cf0\u3cf1\u3cf2\u3cf3\u3cf4\u3cf5\u3cf6\u3cf7\u3cf8\u3cf9\u3cfa\u3cfb\u3cfc\u3cfd\u3cfe\u3cff\u3d00\u3d01\u3d02\u3d03\u3d04\u3d05\u3d06\u3d07\u3d08\u3d09\u3d0a\u3d0b\u3d0c\u3d0d\u3d0e\u3d0f\u3d10\u3d11\u3d12\u3d13\u3d14\u3d15\u3d16\u3d17\u3d18\u3d19\u3d1a\u3d1b\u3d1c\u3d1d\u3d1e\u3d1f\u3d20\u3d21\u3d22\u3d23\u3d24\u3d25\u3d26\u3d27\u3d28\u3d29\u3d2a\u3d2b\u3d2c\u3d2d\u3d2e\u3d2f\u3d30\u3d31\u3d32\u3d33\u3d34\u3d35\u3d36\u3d37\u3d38\u3d39\u3d3a\u3d3b\u3d3c\u3d3d\u3d3e\u3d3f\u3d40\u3d41\u3d42\u3d43\u3d44\u3d45\u3d46\u3d47\u3d48\u3d49\u3d4a\u3d4b\u3d4c\u3d4d\u3d4e\u3d4f\u3d50\u3d51\u3d52\u3d53\u3d54\u3d55\u3d56\u3d57\u3d58\u3d59\u3d5a\u3d5b\u3d5c\u3d5d\u3d5e\u3d5f\u3d60\u3d61\u3d62\u3d63\u3d64\u3d65\u3d66\u3d67\u3d68\u3d69\u3d6a\u3d6b\u3d6c\u3d6d\u3d6e\u3d6f\u3d70\u3d71\u3d72\u3d73\u3d74\u3d75\u3d76\u3d77\u3d78\u3d79\u3d7a\u3d7b\u3d7c\u3d7d\u3d7e\u3d7f\u3d80\u3d81\u3d82\u3d83\u3d84\u3d85\u3d86\u3d87\u3d88\u3d89\u3d8a\u3d8b\u3d8c\u3d8d\u3d8e\u3d8f\u3d90\u3d91\u3d92\u3d93\u3d94\u3d95\u3d96\u3d97\u3d98\u3d99\u3d9a\u3d9b\u3d9c\u3d9d\u3d9e\u3d9f\u3da0\u3da1\u3da2\u3da3\u3da4\u3da5\u3da6\u3da7\u3da8\u3da9\u3daa\u3dab\u3dac\u3dad\u3dae\u3daf\u3db0\u3db1\u3db2\u3db3\u3db4\u3db5\u3db6\u3db7\u3db8\u3db9\u3dba\u3dbb\u3dbc\u3dbd\u3dbe\u3dbf\u3dc0\u3dc1\u3dc2\u3dc3\u3dc4\u3dc5\u3dc6\u3dc7\u3dc8\u3dc9\u3dca\u3dcb\u3dcc\u3dcd\u3dce\u3dcf\u3dd0\u3dd1\u3dd2\u3dd3\u3dd4\u3dd5\u3dd6\u3dd7\u3dd8\u3dd9\u3dda\u3ddb\u3ddc\u3ddd\u3dde\u3ddf\u3de0\u3de1\u3de2\u3de3\u3de4\u3de5\u3de6\u3de7\u3de8\u3de9\u3dea\u3deb\u3dec\u3ded\u3dee\u3def\u3df0\u3df1\u3df2\u3df3\u3df4\u3df5\u3df6\u3df7\u3df8\u3df9\u3dfa\u3dfb\u3dfc\u3dfd\u3dfe\u3dff\u3e00\u3e01\u3e02\u3e03\u3e04\u3e05\u3e06\u3e07\u3e08\u3e09\u3e0a\u3e0b\u3e0c\u3e0d\u3e0e\u3e0f\u3e10\u3e11\u3e12\u3e13\u3e14\u3e15\u3e16\u3e17\u3e18\u3e19\u3e1a\u3e1b\u3e1c\u3e1d\u3e1e\u3e1f\u3e20\u3e21\u3e22\u3e23\u3e24\u3e25\u3e26\u3e27\u3e28\u3e29\u3e2a\u3e2b\u3e2c\u3e2d\u3e2e\u3e2f\u3e30\u3e31\u3e32\u3e33\u3e34\u3e35\u3e36\u3e37\u3e38\u3e39\u3e3a\u3e3b\u3e3c\u3e3d\u3e3e\u3e3f\u3e40\u3e41\u3e42\u3e43\u3e44\u3e45\u3e46\u3e47\u3e48\u3e49\u3e4a\u3e4b\u3e4c\u3e4d\u3e4e\u3e4f\u3e50\u3e51\u3e52\u3e53\u3e54\u3e55\u3e56\u3e57\u3e58\u3e59\u3e5a\u3e5b\u3e5c\u3e5d\u3e5e\u3e5f\u3e60\u3e61\u3e62\u3e63\u3e64\u3e65\u3e66\u3e67\u3e68\u3e69\u3e6a\u3e6b\u3e6c\u3e6d\u3e6e\u3e6f\u3e70\u3e71\u3e72\u3e73\u3e74\u3e75\u3e76\u3e77\u3e78\u3e79\u3e7a\u3e7b\u3e7c\u3e7d\u3e7e\u3e7f\u3e80\u3e81\u3e82\u3e83\u3e84\u3e85\u3e86\u3e87\u3e88\u3e89\u3e8a\u3e8b\u3e8c\u3e8d\u3e8e\u3e8f\u3e90\u3e91\u3e92\u3e93\u3e94\u3e95\u3e96\u3e97\u3e98\u3e99\u3e9a\u3e9b\u3e9c\u3e9d\u3e9e\u3e9f\u3ea0\u3ea1\u3ea2\u3ea3\u3ea4\u3ea5\u3ea6\u3ea7\u3ea8\u3ea9\u3eaa\u3eab\u3eac\u3ead\u3eae\u3eaf\u3eb0\u3eb1\u3eb2\u3eb3\u3eb4\u3eb5\u3eb6\u3eb7\u3eb8\u3eb9\u3eba\u3ebb\u3ebc\u3ebd\u3ebe\u3ebf\u3ec0\u3ec1\u3ec2\u3ec3\u3ec4\u3ec5\u3ec6\u3ec7\u3ec8\u3ec9\u3eca\u3ecb\u3ecc\u3ecd\u3ece\u3ecf\u3ed0\u3ed1\u3ed2\u3ed3\u3ed4\u3ed5\u3ed6\u3ed7\u3ed8\u3ed9\u3eda\u3edb\u3edc\u3edd\u3ede\u3edf\u3ee0\u3ee1\u3ee2\u3ee3\u3ee4\u3ee5\u3ee6\u3ee7\u3ee8\u3ee9\u3eea\u3eeb\u3eec\u3eed\u3eee\u3eef\u3ef0\u3ef1\u3ef2\u3ef3\u3ef4\u3ef5\u3ef6\u3ef7\u3ef8\u3ef9\u3efa\u3efb\u3efc\u3efd\u3efe\u3eff\u3f00\u3f01\u3f02\u3f03\u3f04\u3f05\u3f06\u3f07\u3f08\u3f09\u3f0a\u3f0b\u3f0c\u3f0d\u3f0e\u3f0f\u3f10\u3f11\u3f12\u3f13\u3f14\u3f15\u3f16\u3f17\u3f18\u3f19\u3f1a\u3f1b\u3f1c\u3f1d\u3f1e\u3f1f\u3f20\u3f21\u3f22\u3f23\u3f24\u3f25\u3f26\u3f27\u3f28\u3f29\u3f2a\u3f2b\u3f2c\u3f2d\u3f2e\u3f2f\u3f30\u3f31\u3f32\u3f33\u3f34\u3f35\u3f36\u3f37\u3f38\u3f39\u3f3a\u3f3b\u3f3c\u3f3d\u3f3e\u3f3f\u3f40\u3f41\u3f42\u3f43\u3f44\u3f45\u3f46\u3f47\u3f48\u3f49\u3f4a\u3f4b\u3f4c\u3f4d\u3f4e\u3f4f\u3f50\u3f51\u3f52\u3f53\u3f54\u3f55\u3f56\u3f57\u3f58\u3f59\u3f5a\u3f5b\u3f5c\u3f5d\u3f5e\u3f5f\u3f60\u3f61\u3f62\u3f63\u3f64\u3f65\u3f66\u3f67\u3f68\u3f69\u3f6a\u3f6b\u3f6c\u3f6d\u3f6e\u3f6f\u3f70\u3f71\u3f72\u3f73\u3f74\u3f75\u3f76\u3f77\u3f78\u3f79\u3f7a\u3f7b\u3f7c\u3f7d\u3f7e\u3f7f\u3f80\u3f81\u3f82\u3f83\u3f84\u3f85\u3f86\u3f87\u3f88\u3f89\u3f8a\u3f8b\u3f8c\u3f8d\u3f8e\u3f8f\u3f90\u3f91\u3f92\u3f93\u3f94\u3f95\u3f96\u3f97\u3f98\u3f99\u3f9a\u3f9b\u3f9c\u3f9d\u3f9e\u3f9f\u3fa0\u3fa1\u3fa2\u3fa3\u3fa4\u3fa5\u3fa6\u3fa7\u3fa8\u3fa9\u3faa\u3fab\u3fac\u3fad\u3fae\u3faf\u3fb0\u3fb1\u3fb2\u3fb3\u3fb4\u3fb5\u3fb6\u3fb7\u3fb8\u3fb9\u3fba\u3fbb\u3fbc\u3fbd\u3fbe\u3fbf\u3fc0\u3fc1\u3fc2\u3fc3\u3fc4\u3fc5\u3fc6\u3fc7\u3fc8\u3fc9\u3fca\u3fcb\u3fcc\u3fcd\u3fce\u3fcf\u3fd0\u3fd1\u3fd2\u3fd3\u3fd4\u3fd5\u3fd6\u3fd7\u3fd8\u3fd9\u3fda\u3fdb\u3fdc\u3fdd\u3fde\u3fdf\u3fe0\u3fe1\u3fe2\u3fe3\u3fe4\u3fe5\u3fe6\u3fe7\u3fe8\u3fe9\u3fea\u3feb\u3fec\u3fed\u3fee\u3fef\u3ff0\u3ff1\u3ff2\u3ff3\u3ff4\u3ff5\u3ff6\u3ff7\u3ff8\u3ff9\u3ffa\u3ffb\u3ffc\u3ffd\u3ffe\u3fff\u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\u4040\u4041\u4042\u4043\u4044\u4045\u4046\u4047\u4048\u4049\u404a\u404b\u404c\u404d\u404e\u404f\u4050\u4051\u4052\u4053\u4054\u4055\u4056\u4057\u4058\u4059\u405a\u405b\u405c\u405d\u405e\u405f\u4060\u4061\u4062\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406a\u406b\u406c\u406d\u406e\u406f\u4070\u4071\u4072\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407a\u407b\u407c\u407d\u407e\u407f\u4080\u4081\u4082\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408a\u408b\u408c\u408d\u408e\u408f\u4090\u4091\u4092\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409a\u409b\u409c\u409d\u409e\u409f\u40a0\u40a1\u40a2\u40a3\u40a4\u40a5\u40a6\u40a7\u40a8\u40a9\u40aa\u40ab\u40ac\u40ad\u40ae\u40af\u40b0\u40b1\u40b2\u40b3\u40b4\u40b5\u40b6\u40b7\u40b8\u40b9\u40ba\u40bb\u40bc\u40bd\u40be\u40bf\u40c0\u40c1\u40c2\u40c3\u40c4\u40c5\u40c6\u40c7\u40c8\u40c9\u40ca\u40cb\u40cc\u40cd\u40ce\u40cf\u40d0\u40d1\u40d2\u40d3\u40d4\u40d5\u40d6\u40d7\u40d8\u40d9\u40da\u40db\u40dc\u40dd\u40de\u40df\u40e0\u40e1\u40e2\u40e3\u40e4\u40e5\u40e6\u40e7\u40e8\u40e9\u40ea\u40eb\u40ec\u40ed\u40ee\u40ef\u40f0\u40f1\u40f2\u40f3\u40f4\u40f5\u40f6\u40f7\u40f8\u40f9\u40fa\u40fb\u40fc\u40fd\u40fe\u40ff\u4100\u4101\u4102\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410a\u410b\u410c\u410d\u410e\u410f\u4110\u4111\u4112\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411a\u411b\u411c\u411d\u411e\u411f\u4120\u4121\u4122\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412a\u412b\u412c\u412d\u412e\u412f\u4130\u4131\u4132\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413a\u413b\u413c\u413d\u413e\u413f\u4140\u4141\u4142\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414a\u414b\u414c\u414d\u414e\u414f\u4150\u4151\u4152\u4153\u4154\u4155\u4156\u4157\u4158\u4159\u415a\u415b\u415c\u415d\u415e\u415f\u4160\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169\u416a\u416b\u416c\u416d\u416e\u416f\u4170\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179\u417a\u417b\u417c\u417d\u417e\u417f\u4180\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189\u418a\u418b\u418c\u418d\u418e\u418f\u4190\u4191\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199\u419a\u419b\u419c\u419d\u419e\u419f\u41a0\u41a1\u41a2\u41a3\u41a4\u41a5\u41a6\u41a7\u41a8\u41a9\u41aa\u41ab\u41ac\u41ad\u41ae\u41af\u41b0\u41b1\u41b2\u41b3\u41b4\u41b5\u41b6\u41b7\u41b8\u41b9\u41ba\u41bb\u41bc\u41bd\u41be\u41bf\u41c0\u41c1\u41c2\u41c3\u41c4\u41c5\u41c6\u41c7\u41c8\u41c9\u41ca\u41cb\u41cc\u41cd\u41ce\u41cf\u41d0\u41d1\u41d2\u41d3\u41d4\u41d5\u41d6\u41d7\u41d8\u41d9\u41da\u41db\u41dc\u41dd\u41de\u41df\u41e0\u41e1\u41e2\u41e3\u41e4\u41e5\u41e6\u41e7\u41e8\u41e9\u41ea\u41eb\u41ec\u41ed\u41ee\u41ef\u41f0\u41f1\u41f2\u41f3\u41f4\u41f5\u41f6\u41f7\u41f8\u41f9\u41fa\u41fb\u41fc\u41fd\u41fe\u41ff\u4200\u4201\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209\u420a\u420b\u420c\u420d\u420e\u420f\u4210\u4211\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219\u421a\u421b\u421c\u421d\u421e\u421f\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229\u422a\u422b\u422c\u422d\u422e\u422f\u4230\u4231\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239\u423a\u423b\u423c\u423d\u423e\u423f\u4240\u4241\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249\u424a\u424b\u424c\u424d\u424e\u424f\u4250\u4251\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259\u425a\u425b\u425c\u425d\u425e\u425f\u4260\u4261\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269\u426a\u426b\u426c\u426d\u426e\u426f\u4270\u4271\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279\u427a\u427b\u427c\u427d\u427e\u427f\u4280\u4281\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289\u428a\u428b\u428c\u428d\u428e\u428f\u4290\u4291\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299\u429a\u429b\u429c\u429d\u429e\u429f\u42a0\u42a1\u42a2\u42a3\u42a4\u42a5\u42a6\u42a7\u42a8\u42a9\u42aa\u42ab\u42ac\u42ad\u42ae\u42af\u42b0\u42b1\u42b2\u42b3\u42b4\u42b5\u42b6\u42b7\u42b8\u42b9\u42ba\u42bb\u42bc\u42bd\u42be\u42bf\u42c0\u42c1\u42c2\u42c3\u42c4\u42c5\u42c6\u42c7\u42c8\u42c9\u42ca\u42cb\u42cc\u42cd\u42ce\u42cf\u42d0\u42d1\u42d2\u42d3\u42d4\u42d5\u42d6\u42d7\u42d8\u42d9\u42da\u42db\u42dc\u42dd\u42de\u42df\u42e0\u42e1\u42e2\u42e3\u42e4\u42e5\u42e6\u42e7\u42e8\u42e9\u42ea\u42eb\u42ec\u42ed\u42ee\u42ef\u42f0\u42f1\u42f2\u42f3\u42f4\u42f5\u42f6\u42f7\u42f8\u42f9\u42fa\u42fb\u42fc\u42fd\u42fe\u42ff\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307\u4308\u4309\u430a\u430b\u430c\u430d\u430e\u430f\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317\u4318\u4319\u431a\u431b\u431c\u431d\u431e\u431f\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327\u4328\u4329\u432a\u432b\u432c\u432d\u432e\u432f\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337\u4338\u4339\u433a\u433b\u433c\u433d\u433e\u433f\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347\u4348\u4349\u434a\u434b\u434c\u434d\u434e\u434f\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357\u4358\u4359\u435a\u435b\u435c\u435d\u435e\u435f\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367\u4368\u4369\u436a\u436b\u436c\u436d\u436e\u436f\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377\u4378\u4379\u437a\u437b\u437c\u437d\u437e\u437f\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387\u4388\u4389\u438a\u438b\u438c\u438d\u438e\u438f\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397\u4398\u4399\u439a\u439b\u439c\u439d\u439e\u439f\u43a0\u43a1\u43a2\u43a3\u43a4\u43a5\u43a6\u43a7\u43a8\u43a9\u43aa\u43ab\u43ac\u43ad\u43ae\u43af\u43b0\u43b1\u43b2\u43b3\u43b4\u43b5\u43b6\u43b7\u43b8\u43b9\u43ba\u43bb\u43bc\u43bd\u43be\u43bf\u43c0\u43c1\u43c2\u43c3\u43c4\u43c5\u43c6\u43c7\u43c8\u43c9\u43ca\u43cb\u43cc\u43cd\u43ce\u43cf\u43d0\u43d1\u43d2\u43d3\u43d4\u43d5\u43d6\u43d7\u43d8\u43d9\u43da\u43db\u43dc\u43dd\u43de\u43df\u43e0\u43e1\u43e2\u43e3\u43e4\u43e5\u43e6\u43e7\u43e8\u43e9\u43ea\u43eb\u43ec\u43ed\u43ee\u43ef\u43f0\u43f1\u43f2\u43f3\u43f4\u43f5\u43f6\u43f7\u43f8\u43f9\u43fa\u43fb\u43fc\u43fd\u43fe\u43ff\u4400\u4401\u4402\u4403\u4404\u4405\u4406\u4407\u4408\u4409\u440a\u440b\u440c\u440d\u440e\u440f\u4410\u4411\u4412\u4413\u4414\u4415\u4416\u4417\u4418\u4419\u441a\u441b\u441c\u441d\u441e\u441f\u4420\u4421\u4422\u4423\u4424\u4425\u4426\u4427\u4428\u4429\u442a\u442b\u442c\u442d\u442e\u442f\u4430\u4431\u4432\u4433\u4434\u4435\u4436\u4437\u4438\u4439\u443a\u443b\u443c\u443d\u443e\u443f\u4440\u4441\u4442\u4443\u4444\u4445\u4446\u4447\u4448\u4449\u444a\u444b\u444c\u444d\u444e\u444f\u4450\u4451\u4452\u4453\u4454\u4455\u4456\u4457\u4458\u4459\u445a\u445b\u445c\u445d\u445e\u445f\u4460\u4461\u4462\u4463\u4464\u4465\u4466\u4467\u4468\u4469\u446a\u446b\u446c\u446d\u446e\u446f\u4470\u4471\u4472\u4473\u4474\u4475\u4476\u4477\u4478\u4479\u447a\u447b\u447c\u447d\u447e\u447f\u4480\u4481\u4482\u4483\u4484\u4485\u4486\u4487\u4488\u4489\u448a\u448b\u448c\u448d\u448e\u448f\u4490\u4491\u4492\u4493\u4494\u4495\u4496\u4497\u4498\u4499\u449a\u449b\u449c\u449d\u449e\u449f\u44a0\u44a1\u44a2\u44a3\u44a4\u44a5\u44a6\u44a7\u44a8\u44a9\u44aa\u44ab\u44ac\u44ad\u44ae\u44af\u44b0\u44b1\u44b2\u44b3\u44b4\u44b5\u44b6\u44b7\u44b8\u44b9\u44ba\u44bb\u44bc\u44bd\u44be\u44bf\u44c0\u44c1\u44c2\u44c3\u44c4\u44c5\u44c6\u44c7\u44c8\u44c9\u44ca\u44cb\u44cc\u44cd\u44ce\u44cf\u44d0\u44d1\u44d2\u44d3\u44d4\u44d5\u44d6\u44d7\u44d8\u44d9\u44da\u44db\u44dc\u44dd\u44de\u44df\u44e0\u44e1\u44e2\u44e3\u44e4\u44e5\u44e6\u44e7\u44e8\u44e9\u44ea\u44eb\u44ec\u44ed\u44ee\u44ef\u44f0\u44f1\u44f2\u44f3\u44f4\u44f5\u44f6\u44f7\u44f8\u44f9\u44fa\u44fb\u44fc\u44fd\u44fe\u44ff\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507\u4508\u4509\u450a\u450b\u450c\u450d\u450e\u450f\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517\u4518\u4519\u451a\u451b\u451c\u451d\u451e\u451f\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527\u4528\u4529\u452a\u452b\u452c\u452d\u452e\u452f\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537\u4538\u4539\u453a\u453b\u453c\u453d\u453e\u453f\u4540\u4541\u4542\u4543\u4544\u4545\u4546\u4547\u4548\u4549\u454a\u454b\u454c\u454d\u454e\u454f\u4550\u4551\u4552\u4553\u4554\u4555\u4556\u4557\u4558\u4559\u455a\u455b\u455c\u455d\u455e\u455f\u4560\u4561\u4562\u4563\u4564\u4565\u4566\u4567\u4568\u4569\u456a\u456b\u456c\u456d\u456e\u456f\u4570\u4571\u4572\u4573\u4574\u4575\u4576\u4577\u4578\u4579\u457a\u457b\u457c\u457d\u457e\u457f\u4580\u4581\u4582\u4583\u4584\u4585\u4586\u4587\u4588\u4589\u458a\u458b\u458c\u458d\u458e\u458f\u4590\u4591\u4592\u4593\u4594\u4595\u4596\u4597\u4598\u4599\u459a\u459b\u459c\u459d\u459e\u459f\u45a0\u45a1\u45a2\u45a3\u45a4\u45a5\u45a6\u45a7\u45a8\u45a9\u45aa\u45ab\u45ac\u45ad\u45ae\u45af\u45b0\u45b1\u45b2\u45b3\u45b4\u45b5\u45b6\u45b7\u45b8\u45b9\u45ba\u45bb\u45bc\u45bd\u45be\u45bf\u45c0\u45c1\u45c2\u45c3\u45c4\u45c5\u45c6\u45c7\u45c8\u45c9\u45ca\u45cb\u45cc\u45cd\u45ce\u45cf\u45d0\u45d1\u45d2\u45d3\u45d4\u45d5\u45d6\u45d7\u45d8\u45d9\u45da\u45db\u45dc\u45dd\u45de\u45df\u45e0\u45e1\u45e2\u45e3\u45e4\u45e5\u45e6\u45e7\u45e8\u45e9\u45ea\u45eb\u45ec\u45ed\u45ee\u45ef\u45f0\u45f1\u45f2\u45f3\u45f4\u45f5\u45f6\u45f7\u45f8\u45f9\u45fa\u45fb\u45fc\u45fd\u45fe\u45ff\u4600\u4601\u4602\u4603\u4604\u4605\u4606\u4607\u4608\u4609\u460a\u460b\u460c\u460d\u460e\u460f\u4610\u4611\u4612\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461a\u461b\u461c\u461d\u461e\u461f\u4620\u4621\u4622\u4623\u4624\u4625\u4626\u4627\u4628\u4629\u462a\u462b\u462c\u462d\u462e\u462f\u4630\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638\u4639\u463a\u463b\u463c\u463d\u463e\u463f\u4640\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648\u4649\u464a\u464b\u464c\u464d\u464e\u464f\u4650\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658\u4659\u465a\u465b\u465c\u465d\u465e\u465f\u4660\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668\u4669\u466a\u466b\u466c\u466d\u466e\u466f\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678\u4679\u467a\u467b\u467c\u467d\u467e\u467f\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688\u4689\u468a\u468b\u468c\u468d\u468e\u468f\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698\u4699\u469a\u469b\u469c\u469d\u469e\u469f\u46a0\u46a1\u46a2\u46a3\u46a4\u46a5\u46a6\u46a7\u46a8\u46a9\u46aa\u46ab\u46ac\u46ad\u46ae\u46af\u46b0\u46b1\u46b2\u46b3\u46b4\u46b5\u46b6\u46b7\u46b8\u46b9\u46ba\u46bb\u46bc\u46bd\u46be\u46bf\u46c0\u46c1\u46c2\u46c3\u46c4\u46c5\u46c6\u46c7\u46c8\u46c9\u46ca\u46cb\u46cc\u46cd\u46ce\u46cf\u46d0\u46d1\u46d2\u46d3\u46d4\u46d5\u46d6\u46d7\u46d8\u46d9\u46da\u46db\u46dc\u46dd\u46de\u46df\u46e0\u46e1\u46e2\u46e3\u46e4\u46e5\u46e6\u46e7\u46e8\u46e9\u46ea\u46eb\u46ec\u46ed\u46ee\u46ef\u46f0\u46f1\u46f2\u46f3\u46f4\u46f5\u46f6\u46f7\u46f8\u46f9\u46fa\u46fb\u46fc\u46fd\u46fe\u46ff\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708\u4709\u470a\u470b\u470c\u470d\u470e\u470f\u4710\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718\u4719\u471a\u471b\u471c\u471d\u471e\u471f\u4720\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728\u4729\u472a\u472b\u472c\u472d\u472e\u472f\u4730\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738\u4739\u473a\u473b\u473c\u473d\u473e\u473f\u4740\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748\u4749\u474a\u474b\u474c\u474d\u474e\u474f\u4750\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758\u4759\u475a\u475b\u475c\u475d\u475e\u475f\u4760\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768\u4769\u476a\u476b\u476c\u476d\u476e\u476f\u4770\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778\u4779\u477a\u477b\u477c\u477d\u477e\u477f\u4780\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788\u4789\u478a\u478b\u478c\u478d\u478e\u478f\u4790\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798\u4799\u479a\u479b\u479c\u479d\u479e\u479f\u47a0\u47a1\u47a2\u47a3\u47a4\u47a5\u47a6\u47a7\u47a8\u47a9\u47aa\u47ab\u47ac\u47ad\u47ae\u47af\u47b0\u47b1\u47b2\u47b3\u47b4\u47b5\u47b6\u47b7\u47b8\u47b9\u47ba\u47bb\u47bc\u47bd\u47be\u47bf\u47c0\u47c1\u47c2\u47c3\u47c4\u47c5\u47c6\u47c7\u47c8\u47c9\u47ca\u47cb\u47cc\u47cd\u47ce\u47cf\u47d0\u47d1\u47d2\u47d3\u47d4\u47d5\u47d6\u47d7\u47d8\u47d9\u47da\u47db\u47dc\u47dd\u47de\u47df\u47e0\u47e1\u47e2\u47e3\u47e4\u47e5\u47e6\u47e7\u47e8\u47e9\u47ea\u47eb\u47ec\u47ed\u47ee\u47ef\u47f0\u47f1\u47f2\u47f3\u47f4\u47f5\u47f6\u47f7\u47f8\u47f9\u47fa\u47fb\u47fc\u47fd\u47fe\u47ff\u4800\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808\u4809\u480a\u480b\u480c\u480d\u480e\u480f\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818\u4819\u481a\u481b\u481c\u481d\u481e\u481f\u4820\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828\u4829\u482a\u482b\u482c\u482d\u482e\u482f\u4830\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838\u4839\u483a\u483b\u483c\u483d\u483e\u483f\u4840\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848\u4849\u484a\u484b\u484c\u484d\u484e\u484f\u4850\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858\u4859\u485a\u485b\u485c\u485d\u485e\u485f\u4860\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868\u4869\u486a\u486b\u486c\u486d\u486e\u486f\u4870\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878\u4879\u487a\u487b\u487c\u487d\u487e\u487f\u4880\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888\u4889\u488a\u488b\u488c\u488d\u488e\u488f\u4890\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898\u4899\u489a\u489b\u489c\u489d\u489e\u489f\u48a0\u48a1\u48a2\u48a3\u48a4\u48a5\u48a6\u48a7\u48a8\u48a9\u48aa\u48ab\u48ac\u48ad\u48ae\u48af\u48b0\u48b1\u48b2\u48b3\u48b4\u48b5\u48b6\u48b7\u48b8\u48b9\u48ba\u48bb\u48bc\u48bd\u48be\u48bf\u48c0\u48c1\u48c2\u48c3\u48c4\u48c5\u48c6\u48c7\u48c8\u48c9\u48ca\u48cb\u48cc\u48cd\u48ce\u48cf\u48d0\u48d1\u48d2\u48d3\u48d4\u48d5\u48d6\u48d7\u48d8\u48d9\u48da\u48db\u48dc\u48dd\u48de\u48df\u48e0\u48e1\u48e2\u48e3\u48e4\u48e5\u48e6\u48e7\u48e8\u48e9\u48ea\u48eb\u48ec\u48ed\u48ee\u48ef\u48f0\u48f1\u48f2\u48f3\u48f4\u48f5\u48f6\u48f7\u48f8\u48f9\u48fa\u48fb\u48fc\u48fd\u48fe\u48ff\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907\u4908\u4909\u490a\u490b\u490c\u490d\u490e\u490f\u4910\u4911\u4912\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491a\u491b\u491c\u491d\u491e\u491f\u4920\u4921\u4922\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492a\u492b\u492c\u492d\u492e\u492f\u4930\u4931\u4932\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493a\u493b\u493c\u493d\u493e\u493f\u4940\u4941\u4942\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494a\u494b\u494c\u494d\u494e\u494f\u4950\u4951\u4952\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495a\u495b\u495c\u495d\u495e\u495f\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496a\u496b\u496c\u496d\u496e\u496f\u4970\u4971\u4972\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497a\u497b\u497c\u497d\u497e\u497f\u4980\u4981\u4982\u4983\u4984\u4985\u4986\u4987\u4988\u4989\u498a\u498b\u498c\u498d\u498e\u498f\u4990\u4991\u4992\u4993\u4994\u4995\u4996\u4997\u4998\u4999\u499a\u499b\u499c\u499d\u499e\u499f\u49a0\u49a1\u49a2\u49a3\u49a4\u49a5\u49a6\u49a7\u49a8\u49a9\u49aa\u49ab\u49ac\u49ad\u49ae\u49af\u49b0\u49b1\u49b2\u49b3\u49b4\u49b5\u49b6\u49b7\u49b8\u49b9\u49ba\u49bb\u49bc\u49bd\u49be\u49bf\u49c0\u49c1\u49c2\u49c3\u49c4\u49c5\u49c6\u49c7\u49c8\u49c9\u49ca\u49cb\u49cc\u49cd\u49ce\u49cf\u49d0\u49d1\u49d2\u49d3\u49d4\u49d5\u49d6\u49d7\u49d8\u49d9\u49da\u49db\u49dc\u49dd\u49de\u49df\u49e0\u49e1\u49e2\u49e3\u49e4\u49e5\u49e6\u49e7\u49e8\u49e9\u49ea\u49eb\u49ec\u49ed\u49ee\u49ef\u49f0\u49f1\u49f2\u49f3\u49f4\u49f5\u49f6\u49f7\u49f8\u49f9\u49fa\u49fb\u49fc\u49fd\u49fe\u49ff\u4a00\u4a01\u4a02\u4a03\u4a04\u4a05\u4a06\u4a07\u4a08\u4a09\u4a0a\u4a0b\u4a0c\u4a0d\u4a0e\u4a0f\u4a10\u4a11\u4a12\u4a13\u4a14\u4a15\u4a16\u4a17\u4a18\u4a19\u4a1a\u4a1b\u4a1c\u4a1d\u4a1e\u4a1f\u4a20\u4a21\u4a22\u4a23\u4a24\u4a25\u4a26\u4a27\u4a28\u4a29\u4a2a\u4a2b\u4a2c\u4a2d\u4a2e\u4a2f\u4a30\u4a31\u4a32\u4a33\u4a34\u4a35\u4a36\u4a37\u4a38\u4a39\u4a3a\u4a3b\u4a3c\u4a3d\u4a3e\u4a3f\u4a40\u4a41\u4a42\u4a43\u4a44\u4a45\u4a46\u4a47\u4a48\u4a49\u4a4a\u4a4b\u4a4c\u4a4d\u4a4e\u4a4f\u4a50\u4a51\u4a52\u4a53\u4a54\u4a55\u4a56\u4a57\u4a58\u4a59\u4a5a\u4a5b\u4a5c\u4a5d\u4a5e\u4a5f\u4a60\u4a61\u4a62\u4a63\u4a64\u4a65\u4a66\u4a67\u4a68\u4a69\u4a6a\u4a6b\u4a6c\u4a6d\u4a6e\u4a6f\u4a70\u4a71\u4a72\u4a73\u4a74\u4a75\u4a76\u4a77\u4a78\u4a79\u4a7a\u4a7b\u4a7c\u4a7d\u4a7e\u4a7f\u4a80\u4a81\u4a82\u4a83\u4a84\u4a85\u4a86\u4a87\u4a88\u4a89\u4a8a\u4a8b\u4a8c\u4a8d\u4a8e\u4a8f\u4a90\u4a91\u4a92\u4a93\u4a94\u4a95\u4a96\u4a97\u4a98\u4a99\u4a9a\u4a9b\u4a9c\u4a9d\u4a9e\u4a9f\u4aa0\u4aa1\u4aa2\u4aa3\u4aa4\u4aa5\u4aa6\u4aa7\u4aa8\u4aa9\u4aaa\u4aab\u4aac\u4aad\u4aae\u4aaf\u4ab0\u4ab1\u4ab2\u4ab3\u4ab4\u4ab5\u4ab6\u4ab7\u4ab8\u4ab9\u4aba\u4abb\u4abc\u4abd\u4abe\u4abf\u4ac0\u4ac1\u4ac2\u4ac3\u4ac4\u4ac5\u4ac6\u4ac7\u4ac8\u4ac9\u4aca\u4acb\u4acc\u4acd\u4ace\u4acf\u4ad0\u4ad1\u4ad2\u4ad3\u4ad4\u4ad5\u4ad6\u4ad7\u4ad8\u4ad9\u4ada\u4adb\u4adc\u4add\u4ade\u4adf\u4ae0\u4ae1\u4ae2\u4ae3\u4ae4\u4ae5\u4ae6\u4ae7\u4ae8\u4ae9\u4aea\u4aeb\u4aec\u4aed\u4aee\u4aef\u4af0\u4af1\u4af2\u4af3\u4af4\u4af5\u4af6\u4af7\u4af8\u4af9\u4afa\u4afb\u4afc\u4afd\u4afe\u4aff\u4b00\u4b01\u4b02\u4b03\u4b04\u4b05\u4b06\u4b07\u4b08\u4b09\u4b0a\u4b0b\u4b0c\u4b0d\u4b0e\u4b0f\u4b10\u4b11\u4b12\u4b13\u4b14\u4b15\u4b16\u4b17\u4b18\u4b19\u4b1a\u4b1b\u4b1c\u4b1d\u4b1e\u4b1f\u4b20\u4b21\u4b22\u4b23\u4b24\u4b25\u4b26\u4b27\u4b28\u4b29\u4b2a\u4b2b\u4b2c\u4b2d\u4b2e\u4b2f\u4b30\u4b31\u4b32\u4b33\u4b34\u4b35\u4b36\u4b37\u4b38\u4b39\u4b3a\u4b3b\u4b3c\u4b3d\u4b3e\u4b3f\u4b40\u4b41\u4b42\u4b43\u4b44\u4b45\u4b46\u4b47\u4b48\u4b49\u4b4a\u4b4b\u4b4c\u4b4d\u4b4e\u4b4f\u4b50\u4b51\u4b52\u4b53\u4b54\u4b55\u4b56\u4b57\u4b58\u4b59\u4b5a\u4b5b\u4b5c\u4b5d\u4b5e\u4b5f\u4b60\u4b61\u4b62\u4b63\u4b64\u4b65\u4b66\u4b67\u4b68\u4b69\u4b6a\u4b6b\u4b6c\u4b6d\u4b6e\u4b6f\u4b70\u4b71\u4b72\u4b73\u4b74\u4b75\u4b76\u4b77\u4b78\u4b79\u4b7a\u4b7b\u4b7c\u4b7d\u4b7e\u4b7f\u4b80\u4b81\u4b82\u4b83\u4b84\u4b85\u4b86\u4b87\u4b88\u4b89\u4b8a\u4b8b\u4b8c\u4b8d\u4b8e\u4b8f\u4b90\u4b91\u4b92\u4b93\u4b94\u4b95\u4b96\u4b97\u4b98\u4b99\u4b9a\u4b9b\u4b9c\u4b9d\u4b9e\u4b9f\u4ba0\u4ba1\u4ba2\u4ba3\u4ba4\u4ba5\u4ba6\u4ba7\u4ba8\u4ba9\u4baa\u4bab\u4bac\u4bad\u4bae\u4baf\u4bb0\u4bb1\u4bb2\u4bb3\u4bb4\u4bb5\u4bb6\u4bb7\u4bb8\u4bb9\u4bba\u4bbb\u4bbc\u4bbd\u4bbe\u4bbf\u4bc0\u4bc1\u4bc2\u4bc3\u4bc4\u4bc5\u4bc6\u4bc7\u4bc8\u4bc9\u4bca\u4bcb\u4bcc\u4bcd\u4bce\u4bcf\u4bd0\u4bd1\u4bd2\u4bd3\u4bd4\u4bd5\u4bd6\u4bd7\u4bd8\u4bd9\u4bda\u4bdb\u4bdc\u4bdd\u4bde\u4bdf\u4be0\u4be1\u4be2\u4be3\u4be4\u4be5\u4be6\u4be7\u4be8\u4be9\u4bea\u4beb\u4bec\u4bed\u4bee\u4bef\u4bf0\u4bf1\u4bf2\u4bf3\u4bf4\u4bf5\u4bf6\u4bf7\u4bf8\u4bf9\u4bfa\u4bfb\u4bfc\u4bfd\u4bfe\u4bff\u4c00\u4c01\u4c02\u4c03\u4c04\u4c05\u4c06\u4c07\u4c08\u4c09\u4c0a\u4c0b\u4c0c\u4c0d\u4c0e\u4c0f\u4c10\u4c11\u4c12\u4c13\u4c14\u4c15\u4c16\u4c17\u4c18\u4c19\u4c1a\u4c1b\u4c1c\u4c1d\u4c1e\u4c1f\u4c20\u4c21\u4c22\u4c23\u4c24\u4c25\u4c26\u4c27\u4c28\u4c29\u4c2a\u4c2b\u4c2c\u4c2d\u4c2e\u4c2f\u4c30\u4c31\u4c32\u4c33\u4c34\u4c35\u4c36\u4c37\u4c38\u4c39\u4c3a\u4c3b\u4c3c\u4c3d\u4c3e\u4c3f\u4c40\u4c41\u4c42\u4c43\u4c44\u4c45\u4c46\u4c47\u4c48\u4c49\u4c4a\u4c4b\u4c4c\u4c4d\u4c4e\u4c4f\u4c50\u4c51\u4c52\u4c53\u4c54\u4c55\u4c56\u4c57\u4c58\u4c59\u4c5a\u4c5b\u4c5c\u4c5d\u4c5e\u4c5f\u4c60\u4c61\u4c62\u4c63\u4c64\u4c65\u4c66\u4c67\u4c68\u4c69\u4c6a\u4c6b\u4c6c\u4c6d\u4c6e\u4c6f\u4c70\u4c71\u4c72\u4c73\u4c74\u4c75\u4c76\u4c77\u4c78\u4c79\u4c7a\u4c7b\u4c7c\u4c7d\u4c7e\u4c7f\u4c80\u4c81\u4c82\u4c83\u4c84\u4c85\u4c86\u4c87\u4c88\u4c89\u4c8a\u4c8b\u4c8c\u4c8d\u4c8e\u4c8f\u4c90\u4c91\u4c92\u4c93\u4c94\u4c95\u4c96\u4c97\u4c98\u4c99\u4c9a\u4c9b\u4c9c\u4c9d\u4c9e\u4c9f\u4ca0\u4ca1\u4ca2\u4ca3\u4ca4\u4ca5\u4ca6\u4ca7\u4ca8\u4ca9\u4caa\u4cab\u4cac\u4cad\u4cae\u4caf\u4cb0\u4cb1\u4cb2\u4cb3\u4cb4\u4cb5\u4cb6\u4cb7\u4cb8\u4cb9\u4cba\u4cbb\u4cbc\u4cbd\u4cbe\u4cbf\u4cc0\u4cc1\u4cc2\u4cc3\u4cc4\u4cc5\u4cc6\u4cc7\u4cc8\u4cc9\u4cca\u4ccb\u4ccc\u4ccd\u4cce\u4ccf\u4cd0\u4cd1\u4cd2\u4cd3\u4cd4\u4cd5\u4cd6\u4cd7\u4cd8\u4cd9\u4cda\u4cdb\u4cdc\u4cdd\u4cde\u4cdf\u4ce0\u4ce1\u4ce2\u4ce3\u4ce4\u4ce5\u4ce6\u4ce7\u4ce8\u4ce9\u4cea\u4ceb\u4cec\u4ced\u4cee\u4cef\u4cf0\u4cf1\u4cf2\u4cf3\u4cf4\u4cf5\u4cf6\u4cf7\u4cf8\u4cf9\u4cfa\u4cfb\u4cfc\u4cfd\u4cfe\u4cff\u4d00\u4d01\u4d02\u4d03\u4d04\u4d05\u4d06\u4d07\u4d08\u4d09\u4d0a\u4d0b\u4d0c\u4d0d\u4d0e\u4d0f\u4d10\u4d11\u4d12\u4d13\u4d14\u4d15\u4d16\u4d17\u4d18\u4d19\u4d1a\u4d1b\u4d1c\u4d1d\u4d1e\u4d1f\u4d20\u4d21\u4d22\u4d23\u4d24\u4d25\u4d26\u4d27\u4d28\u4d29\u4d2a\u4d2b\u4d2c\u4d2d\u4d2e\u4d2f\u4d30\u4d31\u4d32\u4d33\u4d34\u4d35\u4d36\u4d37\u4d38\u4d39\u4d3a\u4d3b\u4d3c\u4d3d\u4d3e\u4d3f\u4d40\u4d41\u4d42\u4d43\u4d44\u4d45\u4d46\u4d47\u4d48\u4d49\u4d4a\u4d4b\u4d4c\u4d4d\u4d4e\u4d4f\u4d50\u4d51\u4d52\u4d53\u4d54\u4d55\u4d56\u4d57\u4d58\u4d59\u4d5a\u4d5b\u4d5c\u4d5d\u4d5e\u4d5f\u4d60\u4d61\u4d62\u4d63\u4d64\u4d65\u4d66\u4d67\u4d68\u4d69\u4d6a\u4d6b\u4d6c\u4d6d\u4d6e\u4d6f\u4d70\u4d71\u4d72\u4d73\u4d74\u4d75\u4d76\u4d77\u4d78\u4d79\u4d7a\u4d7b\u4d7c\u4d7d\u4d7e\u4d7f\u4d80\u4d81\u4d82\u4d83\u4d84\u4d85\u4d86\u4d87\u4d88\u4d89\u4d8a\u4d8b\u4d8c\u4d8d\u4d8e\u4d8f\u4d90\u4d91\u4d92\u4d93\u4d94\u4d95\u4d96\u4d97\u4d98\u4d99\u4d9a\u4d9b\u4d9c\u4d9d\u4d9e\u4d9f\u4da0\u4da1\u4da2\u4da3\u4da4\u4da5\u4da6\u4da7\u4da8\u4da9\u4daa\u4dab\u4dac\u4dad\u4dae\u4daf\u4db0\u4db1\u4db2\u4db3\u4db4\u4db5\u4e00\u4e01\u4e02\u4e03\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e0d\u4e0e\u4e0f\u4e10\u4e11\u4e12\u4e13\u4e14\u4e15\u4e16\u4e17\u4e18\u4e19\u4e1a\u4e1b\u4e1c\u4e1d\u4e1e\u4e1f\u4e20\u4e21\u4e22\u4e23\u4e24\u4e25\u4e26\u4e27\u4e28\u4e29\u4e2a\u4e2b\u4e2c\u4e2d\u4e2e\u4e2f\u4e30\u4e31\u4e32\u4e33\u4e34\u4e35\u4e36\u4e37\u4e38\u4e39\u4e3a\u4e3b\u4e3c\u4e3d\u4e3e\u4e3f\u4e40\u4e41\u4e42\u4e43\u4e44\u4e45\u4e46\u4e47\u4e48\u4e49\u4e4a\u4e4b\u4e4c\u4e4d\u4e4e\u4e4f\u4e50\u4e51\u4e52\u4e53\u4e54\u4e55\u4e56\u4e57\u4e58\u4e59\u4e5a\u4e5b\u4e5c\u4e5d\u4e5e\u4e5f\u4e60\u4e61\u4e62\u4e63\u4e64\u4e65\u4e66\u4e67\u4e68\u4e69\u4e6a\u4e6b\u4e6c\u4e6d\u4e6e\u4e6f\u4e70\u4e71\u4e72\u4e73\u4e74\u4e75\u4e76\u4e77\u4e78\u4e79\u4e7a\u4e7b\u4e7c\u4e7d\u4e7e\u4e7f\u4e80\u4e81\u4e82\u4e83\u4e84\u4e85\u4e86\u4e87\u4e88\u4e89\u4e8a\u4e8b\u4e8c\u4e8d\u4e8e\u4e8f\u4e90\u4e91\u4e92\u4e93\u4e94\u4e95\u4e96\u4e97\u4e98\u4e99\u4e9a\u4e9b\u4e9c\u4e9d\u4e9e\u4e9f\u4ea0\u4ea1\u4ea2\u4ea3\u4ea4\u4ea5\u4ea6\u4ea7\u4ea8\u4ea9\u4eaa\u4eab\u4eac\u4ead\u4eae\u4eaf\u4eb0\u4eb1\u4eb2\u4eb3\u4eb4\u4eb5\u4eb6\u4eb7\u4eb8\u4eb9\u4eba\u4ebb\u4ebc\u4ebd\u4ebe\u4ebf\u4ec0\u4ec1\u4ec2\u4ec3\u4ec4\u4ec5\u4ec6\u4ec7\u4ec8\u4ec9\u4eca\u4ecb\u4ecc\u4ecd\u4ece\u4ecf\u4ed0\u4ed1\u4ed2\u4ed3\u4ed4\u4ed5\u4ed6\u4ed7\u4ed8\u4ed9\u4eda\u4edb\u4edc\u4edd\u4ede\u4edf\u4ee0\u4ee1\u4ee2\u4ee3\u4ee4\u4ee5\u4ee6\u4ee7\u4ee8\u4ee9\u4eea\u4eeb\u4eec\u4eed\u4eee\u4eef\u4ef0\u4ef1\u4ef2\u4ef3\u4ef4\u4ef5\u4ef6\u4ef7\u4ef8\u4ef9\u4efa\u4efb\u4efc\u4efd\u4efe\u4eff\u4f00\u4f01\u4f02\u4f03\u4f04\u4f05\u4f06\u4f07\u4f08\u4f09\u4f0a\u4f0b\u4f0c\u4f0d\u4f0e\u4f0f\u4f10\u4f11\u4f12\u4f13\u4f14\u4f15\u4f16\u4f17\u4f18\u4f19\u4f1a\u4f1b\u4f1c\u4f1d\u4f1e\u4f1f\u4f20\u4f21\u4f22\u4f23\u4f24\u4f25\u4f26\u4f27\u4f28\u4f29\u4f2a\u4f2b\u4f2c\u4f2d\u4f2e\u4f2f\u4f30\u4f31\u4f32\u4f33\u4f34\u4f35\u4f36\u4f37\u4f38\u4f39\u4f3a\u4f3b\u4f3c\u4f3d\u4f3e\u4f3f\u4f40\u4f41\u4f42\u4f43\u4f44\u4f45\u4f46\u4f47\u4f48\u4f49\u4f4a\u4f4b\u4f4c\u4f4d\u4f4e\u4f4f\u4f50\u4f51\u4f52\u4f53\u4f54\u4f55\u4f56\u4f57\u4f58\u4f59\u4f5a\u4f5b\u4f5c\u4f5d\u4f5e\u4f5f\u4f60\u4f61\u4f62\u4f63\u4f64\u4f65\u4f66\u4f67\u4f68\u4f69\u4f6a\u4f6b\u4f6c\u4f6d\u4f6e\u4f6f\u4f70\u4f71\u4f72\u4f73\u4f74\u4f75\u4f76\u4f77\u4f78\u4f79\u4f7a\u4f7b\u4f7c\u4f7d\u4f7e\u4f7f\u4f80\u4f81\u4f82\u4f83\u4f84\u4f85\u4f86\u4f87\u4f88\u4f89\u4f8a\u4f8b\u4f8c\u4f8d\u4f8e\u4f8f\u4f90\u4f91\u4f92\u4f93\u4f94\u4f95\u4f96\u4f97\u4f98\u4f99\u4f9a\u4f9b\u4f9c\u4f9d\u4f9e\u4f9f\u4fa0\u4fa1\u4fa2\u4fa3\u4fa4\u4fa5\u4fa6\u4fa7\u4fa8\u4fa9\u4faa\u4fab\u4fac\u4fad\u4fae\u4faf\u4fb0\u4fb1\u4fb2\u4fb3\u4fb4\u4fb5\u4fb6\u4fb7\u4fb8\u4fb9\u4fba\u4fbb\u4fbc\u4fbd\u4fbe\u4fbf\u4fc0\u4fc1\u4fc2\u4fc3\u4fc4\u4fc5\u4fc6\u4fc7\u4fc8\u4fc9\u4fca\u4fcb\u4fcc\u4fcd\u4fce\u4fcf\u4fd0\u4fd1\u4fd2\u4fd3\u4fd4\u4fd5\u4fd6\u4fd7\u4fd8\u4fd9\u4fda\u4fdb\u4fdc\u4fdd\u4fde\u4fdf\u4fe0\u4fe1\u4fe2\u4fe3\u4fe4\u4fe5\u4fe6\u4fe7\u4fe8\u4fe9\u4fea\u4feb\u4fec\u4fed\u4fee\u4fef\u4ff0\u4ff1\u4ff2\u4ff3\u4ff4\u4ff5\u4ff6\u4ff7\u4ff8\u4ff9\u4ffa\u4ffb\u4ffc\u4ffd\u4ffe\u4fff\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500a\u500b\u500c\u500d\u500e\u500f\u5010\u5011\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019\u501a\u501b\u501c\u501d\u501e\u501f\u5020\u5021\u5022\u5023\u5024\u5025\u5026\u5027\u5028\u5029\u502a\u502b\u502c\u502d\u502e\u502f\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503a\u503b\u503c\u503d\u503e\u503f\u5040\u5041\u5042\u5043\u5044\u5045\u5046\u5047\u5048\u5049\u504a\u504b\u504c\u504d\u504e\u504f\u5050\u5051\u5052\u5053\u5054\u5055\u5056\u5057\u5058\u5059\u505a\u505b\u505c\u505d\u505e\u505f\u5060\u5061\u5062\u5063\u5064\u5065\u5066\u5067\u5068\u5069\u506a\u506b\u506c\u506d\u506e\u506f\u5070\u5071\u5072\u5073\u5074\u5075\u5076\u5077\u5078\u5079\u507a\u507b\u507c\u507d\u507e\u507f\u5080\u5081\u5082\u5083\u5084\u5085\u5086\u5087\u5088\u5089\u508a\u508b\u508c\u508d\u508e\u508f\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u5098\u5099\u509a\u509b\u509c\u509d\u509e\u509f\u50a0\u50a1\u50a2\u50a3\u50a4\u50a5\u50a6\u50a7\u50a8\u50a9\u50aa\u50ab\u50ac\u50ad\u50ae\u50af\u50b0\u50b1\u50b2\u50b3\u50b4\u50b5\u50b6\u50b7\u50b8\u50b9\u50ba\u50bb\u50bc\u50bd\u50be\u50bf\u50c0\u50c1\u50c2\u50c3\u50c4\u50c5\u50c6\u50c7\u50c8\u50c9\u50ca\u50cb\u50cc\u50cd\u50ce\u50cf\u50d0\u50d1\u50d2\u50d3\u50d4\u50d5\u50d6\u50d7\u50d8\u50d9\u50da\u50db\u50dc\u50dd\u50de\u50df\u50e0\u50e1\u50e2\u50e3\u50e4\u50e5\u50e6\u50e7\u50e8\u50e9\u50ea\u50eb\u50ec\u50ed\u50ee\u50ef\u50f0\u50f1\u50f2\u50f3\u50f4\u50f5\u50f6\u50f7\u50f8\u50f9\u50fa\u50fb\u50fc\u50fd\u50fe\u50ff\u5100\u5101\u5102\u5103\u5104\u5105\u5106\u5107\u5108\u5109\u510a\u510b\u510c\u510d\u510e\u510f\u5110\u5111\u5112\u5113\u5114\u5115\u5116\u5117\u5118\u5119\u511a\u511b\u511c\u511d\u511e\u511f\u5120\u5121\u5122\u5123\u5124\u5125\u5126\u5127\u5128\u5129\u512a\u512b\u512c\u512d\u512e\u512f\u5130\u5131\u5132\u5133\u5134\u5135\u5136\u5137\u5138\u5139\u513a\u513b\u513c\u513d\u513e\u513f\u5140\u5141\u5142\u5143\u5144\u5145\u5146\u5147\u5148\u5149\u514a\u514b\u514c\u514d\u514e\u514f\u5150\u5151\u5152\u5153\u5154\u5155\u5156\u5157\u5158\u5159\u515a\u515b\u515c\u515d\u515e\u515f\u5160\u5161\u5162\u5163\u5164\u5165\u5166\u5167\u5168\u5169\u516a\u516b\u516c\u516d\u516e\u516f\u5170\u5171\u5172\u5173\u5174\u5175\u5176\u5177\u5178\u5179\u517a\u517b\u517c\u517d\u517e\u517f\u5180\u5181\u5182\u5183\u5184\u5185\u5186\u5187\u5188\u5189\u518a\u518b\u518c\u518d\u518e\u518f\u5190\u5191\u5192\u5193\u5194\u5195\u5196\u5197\u5198\u5199\u519a\u519b\u519c\u519d\u519e\u519f\u51a0\u51a1\u51a2\u51a3\u51a4\u51a5\u51a6\u51a7\u51a8\u51a9\u51aa\u51ab\u51ac\u51ad\u51ae\u51af\u51b0\u51b1\u51b2\u51b3\u51b4\u51b5\u51b6\u51b7\u51b8\u51b9\u51ba\u51bb\u51bc\u51bd\u51be\u51bf\u51c0\u51c1\u51c2\u51c3\u51c4\u51c5\u51c6\u51c7\u51c8\u51c9\u51ca\u51cb\u51cc\u51cd\u51ce\u51cf\u51d0\u51d1\u51d2\u51d3\u51d4\u51d5\u51d6\u51d7\u51d8\u51d9\u51da\u51db\u51dc\u51dd\u51de\u51df\u51e0\u51e1\u51e2\u51e3\u51e4\u51e5\u51e6\u51e7\u51e8\u51e9\u51ea\u51eb\u51ec\u51ed\u51ee\u51ef\u51f0\u51f1\u51f2\u51f3\u51f4\u51f5\u51f6\u51f7\u51f8\u51f9\u51fa\u51fb\u51fc\u51fd\u51fe\u51ff\u5200\u5201\u5202\u5203\u5204\u5205\u5206\u5207\u5208\u5209\u520a\u520b\u520c\u520d\u520e\u520f\u5210\u5211\u5212\u5213\u5214\u5215\u5216\u5217\u5218\u5219\u521a\u521b\u521c\u521d\u521e\u521f\u5220\u5221\u5222\u5223\u5224\u5225\u5226\u5227\u5228\u5229\u522a\u522b\u522c\u522d\u522e\u522f\u5230\u5231\u5232\u5233\u5234\u5235\u5236\u5237\u5238\u5239\u523a\u523b\u523c\u523d\u523e\u523f\u5240\u5241\u5242\u5243\u5244\u5245\u5246\u5247\u5248\u5249\u524a\u524b\u524c\u524d\u524e\u524f\u5250\u5251\u5252\u5253\u5254\u5255\u5256\u5257\u5258\u5259\u525a\u525b\u525c\u525d\u525e\u525f\u5260\u5261\u5262\u5263\u5264\u5265\u5266\u5267\u5268\u5269\u526a\u526b\u526c\u526d\u526e\u526f\u5270\u5271\u5272\u5273\u5274\u5275\u5276\u5277\u5278\u5279\u527a\u527b\u527c\u527d\u527e\u527f\u5280\u5281\u5282\u5283\u5284\u5285\u5286\u5287\u5288\u5289\u528a\u528b\u528c\u528d\u528e\u528f\u5290\u5291\u5292\u5293\u5294\u5295\u5296\u5297\u5298\u5299\u529a\u529b\u529c\u529d\u529e\u529f\u52a0\u52a1\u52a2\u52a3\u52a4\u52a5\u52a6\u52a7\u52a8\u52a9\u52aa\u52ab\u52ac\u52ad\u52ae\u52af\u52b0\u52b1\u52b2\u52b3\u52b4\u52b5\u52b6\u52b7\u52b8\u52b9\u52ba\u52bb\u52bc\u52bd\u52be\u52bf\u52c0\u52c1\u52c2\u52c3\u52c4\u52c5\u52c6\u52c7\u52c8\u52c9\u52ca\u52cb\u52cc\u52cd\u52ce\u52cf\u52d0\u52d1\u52d2\u52d3\u52d4\u52d5\u52d6\u52d7\u52d8\u52d9\u52da\u52db\u52dc\u52dd\u52de\u52df\u52e0\u52e1\u52e2\u52e3\u52e4\u52e5\u52e6\u52e7\u52e8\u52e9\u52ea\u52eb\u52ec\u52ed\u52ee\u52ef\u52f0\u52f1\u52f2\u52f3\u52f4\u52f5\u52f6\u52f7\u52f8\u52f9\u52fa\u52fb\u52fc\u52fd\u52fe\u52ff\u5300\u5301\u5302\u5303\u5304\u5305\u5306\u5307\u5308\u5309\u530a\u530b\u530c\u530d\u530e\u530f\u5310\u5311\u5312\u5313\u5314\u5315\u5316\u5317\u5318\u5319\u531a\u531b\u531c\u531d\u531e\u531f\u5320\u5321\u5322\u5323\u5324\u5325\u5326\u5327\u5328\u5329\u532a\u532b\u532c\u532d\u532e\u532f\u5330\u5331\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u5339\u533a\u533b\u533c\u533d\u533e\u533f\u5340\u5341\u5342\u5343\u5344\u5345\u5346\u5347\u5348\u5349\u534a\u534b\u534c\u534d\u534e\u534f\u5350\u5351\u5352\u5353\u5354\u5355\u5356\u5357\u5358\u5359\u535a\u535b\u535c\u535d\u535e\u535f\u5360\u5361\u5362\u5363\u5364\u5365\u5366\u5367\u5368\u5369\u536a\u536b\u536c\u536d\u536e\u536f\u5370\u5371\u5372\u5373\u5374\u5375\u5376\u5377\u5378\u5379\u537a\u537b\u537c\u537d\u537e\u537f\u5380\u5381\u5382\u5383\u5384\u5385\u5386\u5387\u5388\u5389\u538a\u538b\u538c\u538d\u538e\u538f\u5390\u5391\u5392\u5393\u5394\u5395\u5396\u5397\u5398\u5399\u539a\u539b\u539c\u539d\u539e\u539f\u53a0\u53a1\u53a2\u53a3\u53a4\u53a5\u53a6\u53a7\u53a8\u53a9\u53aa\u53ab\u53ac\u53ad\u53ae\u53af\u53b0\u53b1\u53b2\u53b3\u53b4\u53b5\u53b6\u53b7\u53b8\u53b9\u53ba\u53bb\u53bc\u53bd\u53be\u53bf\u53c0\u53c1\u53c2\u53c3\u53c4\u53c5\u53c6\u53c7\u53c8\u53c9\u53ca\u53cb\u53cc\u53cd\u53ce\u53cf\u53d0\u53d1\u53d2\u53d3\u53d4\u53d5\u53d6\u53d7\u53d8\u53d9\u53da\u53db\u53dc\u53dd\u53de\u53df\u53e0\u53e1\u53e2\u53e3\u53e4\u53e5\u53e6\u53e7\u53e8\u53e9\u53ea\u53eb\u53ec\u53ed\u53ee\u53ef\u53f0\u53f1\u53f2\u53f3\u53f4\u53f5\u53f6\u53f7\u53f8\u53f9\u53fa\u53fb\u53fc\u53fd\u53fe\u53ff\u5400\u5401\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409\u540a\u540b\u540c\u540d\u540e\u540f\u5410\u5411\u5412\u5413\u5414\u5415\u5416\u5417\u5418\u5419\u541a\u541b\u541c\u541d\u541e\u541f\u5420\u5421\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429\u542a\u542b\u542c\u542d\u542e\u542f\u5430\u5431\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439\u543a\u543b\u543c\u543d\u543e\u543f\u5440\u5441\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449\u544a\u544b\u544c\u544d\u544e\u544f\u5450\u5451\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459\u545a\u545b\u545c\u545d\u545e\u545f\u5460\u5461\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469\u546a\u546b\u546c\u546d\u546e\u546f\u5470\u5471\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479\u547a\u547b\u547c\u547d\u547e\u547f\u5480\u5481\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489\u548a\u548b\u548c\u548d\u548e\u548f\u5490\u5491\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499\u549a\u549b\u549c\u549d\u549e\u549f\u54a0\u54a1\u54a2\u54a3\u54a4\u54a5\u54a6\u54a7\u54a8\u54a9\u54aa\u54ab\u54ac\u54ad\u54ae\u54af\u54b0\u54b1\u54b2\u54b3\u54b4\u54b5\u54b6\u54b7\u54b8\u54b9\u54ba\u54bb\u54bc\u54bd\u54be\u54bf\u54c0\u54c1\u54c2\u54c3\u54c4\u54c5\u54c6\u54c7\u54c8\u54c9\u54ca\u54cb\u54cc\u54cd\u54ce\u54cf\u54d0\u54d1\u54d2\u54d3\u54d4\u54d5\u54d6\u54d7\u54d8\u54d9\u54da\u54db\u54dc\u54dd\u54de\u54df\u54e0\u54e1\u54e2\u54e3\u54e4\u54e5\u54e6\u54e7\u54e8\u54e9\u54ea\u54eb\u54ec\u54ed\u54ee\u54ef\u54f0\u54f1\u54f2\u54f3\u54f4\u54f5\u54f6\u54f7\u54f8\u54f9\u54fa\u54fb\u54fc\u54fd\u54fe\u54ff\u5500\u5501\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509\u550a\u550b\u550c\u550d\u550e\u550f\u5510\u5511\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519\u551a\u551b\u551c\u551d\u551e\u551f\u5520\u5521\u5522\u5523\u5524\u5525\u5526\u5527\u5528\u5529\u552a\u552b\u552c\u552d\u552e\u552f\u5530\u5531\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539\u553a\u553b\u553c\u553d\u553e\u553f\u5540\u5541\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549\u554a\u554b\u554c\u554d\u554e\u554f\u5550\u5551\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u5559\u555a\u555b\u555c\u555d\u555e\u555f\u5560\u5561\u5562\u5563\u5564\u5565\u5566\u5567\u5568\u5569\u556a\u556b\u556c\u556d\u556e\u556f\u5570\u5571\u5572\u5573\u5574\u5575\u5576\u5577\u5578\u5579\u557a\u557b\u557c\u557d\u557e\u557f\u5580\u5581\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589\u558a\u558b\u558c\u558d\u558e\u558f\u5590\u5591\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599\u559a\u559b\u559c\u559d\u559e\u559f\u55a0\u55a1\u55a2\u55a3\u55a4\u55a5\u55a6\u55a7\u55a8\u55a9\u55aa\u55ab\u55ac\u55ad\u55ae\u55af\u55b0\u55b1\u55b2\u55b3\u55b4\u55b5\u55b6\u55b7\u55b8\u55b9\u55ba\u55bb\u55bc\u55bd\u55be\u55bf\u55c0\u55c1\u55c2\u55c3\u55c4\u55c5\u55c6\u55c7\u55c8\u55c9\u55ca\u55cb\u55cc\u55cd\u55ce\u55cf\u55d0\u55d1\u55d2\u55d3\u55d4\u55d5\u55d6\u55d7\u55d8\u55d9\u55da\u55db\u55dc\u55dd\u55de\u55df\u55e0\u55e1\u55e2\u55e3\u55e4\u55e5\u55e6\u55e7\u55e8\u55e9\u55ea\u55eb\u55ec\u55ed\u55ee\u55ef\u55f0\u55f1\u55f2\u55f3\u55f4\u55f5\u55f6\u55f7\u55f8\u55f9\u55fa\u55fb\u55fc\u55fd\u55fe\u55ff\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607\u5608\u5609\u560a\u560b\u560c\u560d\u560e\u560f\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5618\u5619\u561a\u561b\u561c\u561d\u561e\u561f\u5620\u5621\u5622\u5623\u5624\u5625\u5626\u5627\u5628\u5629\u562a\u562b\u562c\u562d\u562e\u562f\u5630\u5631\u5632\u5633\u5634\u5635\u5636\u5637\u5638\u5639\u563a\u563b\u563c\u563d\u563e\u563f\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649\u564a\u564b\u564c\u564d\u564e\u564f\u5650\u5651\u5652\u5653\u5654\u5655\u5656\u5657\u5658\u5659\u565a\u565b\u565c\u565d\u565e\u565f\u5660\u5661\u5662\u5663\u5664\u5665\u5666\u5667\u5668\u5669\u566a\u566b\u566c\u566d\u566e\u566f\u5670\u5671\u5672\u5673\u5674\u5675\u5676\u5677\u5678\u5679\u567a\u567b\u567c\u567d\u567e\u567f\u5680\u5681\u5682\u5683\u5684\u5685\u5686\u5687\u5688\u5689\u568a\u568b\u568c\u568d\u568e\u568f\u5690\u5691\u5692\u5693\u5694\u5695\u5696\u5697\u5698\u5699\u569a\u569b\u569c\u569d\u569e\u569f\u56a0\u56a1\u56a2\u56a3\u56a4\u56a5\u56a6\u56a7\u56a8\u56a9\u56aa\u56ab\u56ac\u56ad\u56ae\u56af\u56b0\u56b1\u56b2\u56b3\u56b4\u56b5\u56b6\u56b7\u56b8\u56b9\u56ba\u56bb\u56bc\u56bd\u56be\u56bf\u56c0\u56c1\u56c2\u56c3\u56c4\u56c5\u56c6\u56c7\u56c8\u56c9\u56ca\u56cb\u56cc\u56cd\u56ce\u56cf\u56d0\u56d1\u56d2\u56d3\u56d4\u56d5\u56d6\u56d7\u56d8\u56d9\u56da\u56db\u56dc\u56dd\u56de\u56df\u56e0\u56e1\u56e2\u56e3\u56e4\u56e5\u56e6\u56e7\u56e8\u56e9\u56ea\u56eb\u56ec\u56ed\u56ee\u56ef\u56f0\u56f1\u56f2\u56f3\u56f4\u56f5\u56f6\u56f7\u56f8\u56f9\u56fa\u56fb\u56fc\u56fd\u56fe\u56ff\u5700\u5701\u5702\u5703\u5704\u5705\u5706\u5707\u5708\u5709\u570a\u570b\u570c\u570d\u570e\u570f\u5710\u5711\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719\u571a\u571b\u571c\u571d\u571e\u571f\u5720\u5721\u5722\u5723\u5724\u5725\u5726\u5727\u5728\u5729\u572a\u572b\u572c\u572d\u572e\u572f\u5730\u5731\u5732\u5733\u5734\u5735\u5736\u5737\u5738\u5739\u573a\u573b\u573c\u573d\u573e\u573f\u5740\u5741\u5742\u5743\u5744\u5745\u5746\u5747\u5748\u5749\u574a\u574b\u574c\u574d\u574e\u574f\u5750\u5751\u5752\u5753\u5754\u5755\u5756\u5757\u5758\u5759\u575a\u575b\u575c\u575d\u575e\u575f\u5760\u5761\u5762\u5763\u5764\u5765\u5766\u5767\u5768\u5769\u576a\u576b\u576c\u576d\u576e\u576f\u5770\u5771\u5772\u5773\u5774\u5775\u5776\u5777\u5778\u5779\u577a\u577b\u577c\u577d\u577e\u577f\u5780\u5781\u5782\u5783\u5784\u5785\u5786\u5787\u5788\u5789\u578a\u578b\u578c\u578d\u578e\u578f\u5790\u5791\u5792\u5793\u5794\u5795\u5796\u5797\u5798\u5799\u579a\u579b\u579c\u579d\u579e\u579f\u57a0\u57a1\u57a2\u57a3\u57a4\u57a5\u57a6\u57a7\u57a8\u57a9\u57aa\u57ab\u57ac\u57ad\u57ae\u57af\u57b0\u57b1\u57b2\u57b3\u57b4\u57b5\u57b6\u57b7\u57b8\u57b9\u57ba\u57bb\u57bc\u57bd\u57be\u57bf\u57c0\u57c1\u57c2\u57c3\u57c4\u57c5\u57c6\u57c7\u57c8\u57c9\u57ca\u57cb\u57cc\u57cd\u57ce\u57cf\u57d0\u57d1\u57d2\u57d3\u57d4\u57d5\u57d6\u57d7\u57d8\u57d9\u57da\u57db\u57dc\u57dd\u57de\u57df\u57e0\u57e1\u57e2\u57e3\u57e4\u57e5\u57e6\u57e7\u57e8\u57e9\u57ea\u57eb\u57ec\u57ed\u57ee\u57ef\u57f0\u57f1\u57f2\u57f3\u57f4\u57f5\u57f6\u57f7\u57f8\u57f9\u57fa\u57fb\u57fc\u57fd\u57fe\u57ff\u5800\u5801\u5802\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580a\u580b\u580c\u580d\u580e\u580f\u5810\u5811\u5812\u5813\u5814\u5815\u5816\u5817\u5818\u5819\u581a\u581b\u581c\u581d\u581e\u581f\u5820\u5821\u5822\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582a\u582b\u582c\u582d\u582e\u582f\u5830\u5831\u5832\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583a\u583b\u583c\u583d\u583e\u583f\u5840\u5841\u5842\u5843\u5844\u5845\u5846\u5847\u5848\u5849\u584a\u584b\u584c\u584d\u584e\u584f\u5850\u5851\u5852\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585a\u585b\u585c\u585d\u585e\u585f\u5860\u5861\u5862\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586a\u586b\u586c\u586d\u586e\u586f\u5870\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587a\u587b\u587c\u587d\u587e\u587f\u5880\u5881\u5882\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588a\u588b\u588c\u588d\u588e\u588f\u5890\u5891\u5892\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u589a\u589b\u589c\u589d\u589e\u589f\u58a0\u58a1\u58a2\u58a3\u58a4\u58a5\u58a6\u58a7\u58a8\u58a9\u58aa\u58ab\u58ac\u58ad\u58ae\u58af\u58b0\u58b1\u58b2\u58b3\u58b4\u58b5\u58b6\u58b7\u58b8\u58b9\u58ba\u58bb\u58bc\u58bd\u58be\u58bf\u58c0\u58c1\u58c2\u58c3\u58c4\u58c5\u58c6\u58c7\u58c8\u58c9\u58ca\u58cb\u58cc\u58cd\u58ce\u58cf\u58d0\u58d1\u58d2\u58d3\u58d4\u58d5\u58d6\u58d7\u58d8\u58d9\u58da\u58db\u58dc\u58dd\u58de\u58df\u58e0\u58e1\u58e2\u58e3\u58e4\u58e5\u58e6\u58e7\u58e8\u58e9\u58ea\u58eb\u58ec\u58ed\u58ee\u58ef\u58f0\u58f1\u58f2\u58f3\u58f4\u58f5\u58f6\u58f7\u58f8\u58f9\u58fa\u58fb\u58fc\u58fd\u58fe\u58ff\u5900\u5901\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u5909\u590a\u590b\u590c\u590d\u590e\u590f\u5910\u5911\u5912\u5913\u5914\u5915\u5916\u5917\u5918\u5919\u591a\u591b\u591c\u591d\u591e\u591f\u5920\u5921\u5922\u5923\u5924\u5925\u5926\u5927\u5928\u5929\u592a\u592b\u592c\u592d\u592e\u592f\u5930\u5931\u5932\u5933\u5934\u5935\u5936\u5937\u5938\u5939\u593a\u593b\u593c\u593d\u593e\u593f\u5940\u5941\u5942\u5943\u5944\u5945\u5946\u5947\u5948\u5949\u594a\u594b\u594c\u594d\u594e\u594f\u5950\u5951\u5952\u5953\u5954\u5955\u5956\u5957\u5958\u5959\u595a\u595b\u595c\u595d\u595e\u595f\u5960\u5961\u5962\u5963\u5964\u5965\u5966\u5967\u5968\u5969\u596a\u596b\u596c\u596d\u596e\u596f\u5970\u5971\u5972\u5973\u5974\u5975\u5976\u5977\u5978\u5979\u597a\u597b\u597c\u597d\u597e\u597f\u5980\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988\u5989\u598a\u598b\u598c\u598d\u598e\u598f\u5990\u5991\u5992\u5993\u5994\u5995\u5996\u5997\u5998\u5999\u599a\u599b\u599c\u599d\u599e\u599f\u59a0\u59a1\u59a2\u59a3\u59a4\u59a5\u59a6\u59a7\u59a8\u59a9\u59aa\u59ab\u59ac\u59ad\u59ae\u59af\u59b0\u59b1\u59b2\u59b3\u59b4\u59b5\u59b6\u59b7\u59b8\u59b9\u59ba\u59bb\u59bc\u59bd\u59be\u59bf\u59c0\u59c1\u59c2\u59c3\u59c4\u59c5\u59c6\u59c7\u59c8\u59c9\u59ca\u59cb\u59cc\u59cd\u59ce\u59cf\u59d0\u59d1\u59d2\u59d3\u59d4\u59d5\u59d6\u59d7\u59d8\u59d9\u59da\u59db\u59dc\u59dd\u59de\u59df\u59e0\u59e1\u59e2\u59e3\u59e4\u59e5\u59e6\u59e7\u59e8\u59e9\u59ea\u59eb\u59ec\u59ed\u59ee\u59ef\u59f0\u59f1\u59f2\u59f3\u59f4\u59f5\u59f6\u59f7\u59f8\u59f9\u59fa\u59fb\u59fc\u59fd\u59fe\u59ff\u5a00\u5a01\u5a02\u5a03\u5a04\u5a05\u5a06\u5a07\u5a08\u5a09\u5a0a\u5a0b\u5a0c\u5a0d\u5a0e\u5a0f\u5a10\u5a11\u5a12\u5a13\u5a14\u5a15\u5a16\u5a17\u5a18\u5a19\u5a1a\u5a1b\u5a1c\u5a1d\u5a1e\u5a1f\u5a20\u5a21\u5a22\u5a23\u5a24\u5a25\u5a26\u5a27\u5a28\u5a29\u5a2a\u5a2b\u5a2c\u5a2d\u5a2e\u5a2f\u5a30\u5a31\u5a32\u5a33\u5a34\u5a35\u5a36\u5a37\u5a38\u5a39\u5a3a\u5a3b\u5a3c\u5a3d\u5a3e\u5a3f\u5a40\u5a41\u5a42\u5a43\u5a44\u5a45\u5a46\u5a47\u5a48\u5a49\u5a4a\u5a4b\u5a4c\u5a4d\u5a4e\u5a4f\u5a50\u5a51\u5a52\u5a53\u5a54\u5a55\u5a56\u5a57\u5a58\u5a59\u5a5a\u5a5b\u5a5c\u5a5d\u5a5e\u5a5f\u5a60\u5a61\u5a62\u5a63\u5a64\u5a65\u5a66\u5a67\u5a68\u5a69\u5a6a\u5a6b\u5a6c\u5a6d\u5a6e\u5a6f\u5a70\u5a71\u5a72\u5a73\u5a74\u5a75\u5a76\u5a77\u5a78\u5a79\u5a7a\u5a7b\u5a7c\u5a7d\u5a7e\u5a7f\u5a80\u5a81\u5a82\u5a83\u5a84\u5a85\u5a86\u5a87\u5a88\u5a89\u5a8a\u5a8b\u5a8c\u5a8d\u5a8e\u5a8f\u5a90\u5a91\u5a92\u5a93\u5a94\u5a95\u5a96\u5a97\u5a98\u5a99\u5a9a\u5a9b\u5a9c\u5a9d\u5a9e\u5a9f\u5aa0\u5aa1\u5aa2\u5aa3\u5aa4\u5aa5\u5aa6\u5aa7\u5aa8\u5aa9\u5aaa\u5aab\u5aac\u5aad\u5aae\u5aaf\u5ab0\u5ab1\u5ab2\u5ab3\u5ab4\u5ab5\u5ab6\u5ab7\u5ab8\u5ab9\u5aba\u5abb\u5abc\u5abd\u5abe\u5abf\u5ac0\u5ac1\u5ac2\u5ac3\u5ac4\u5ac5\u5ac6\u5ac7\u5ac8\u5ac9\u5aca\u5acb\u5acc\u5acd\u5ace\u5acf\u5ad0\u5ad1\u5ad2\u5ad3\u5ad4\u5ad5\u5ad6\u5ad7\u5ad8\u5ad9\u5ada\u5adb\u5adc\u5add\u5ade\u5adf\u5ae0\u5ae1\u5ae2\u5ae3\u5ae4\u5ae5\u5ae6\u5ae7\u5ae8\u5ae9\u5aea\u5aeb\u5aec\u5aed\u5aee\u5aef\u5af0\u5af1\u5af2\u5af3\u5af4\u5af5\u5af6\u5af7\u5af8\u5af9\u5afa\u5afb\u5afc\u5afd\u5afe\u5aff\u5b00\u5b01\u5b02\u5b03\u5b04\u5b05\u5b06\u5b07\u5b08\u5b09\u5b0a\u5b0b\u5b0c\u5b0d\u5b0e\u5b0f\u5b10\u5b11\u5b12\u5b13\u5b14\u5b15\u5b16\u5b17\u5b18\u5b19\u5b1a\u5b1b\u5b1c\u5b1d\u5b1e\u5b1f\u5b20\u5b21\u5b22\u5b23\u5b24\u5b25\u5b26\u5b27\u5b28\u5b29\u5b2a\u5b2b\u5b2c\u5b2d\u5b2e\u5b2f\u5b30\u5b31\u5b32\u5b33\u5b34\u5b35\u5b36\u5b37\u5b38\u5b39\u5b3a\u5b3b\u5b3c\u5b3d\u5b3e\u5b3f\u5b40\u5b41\u5b42\u5b43\u5b44\u5b45\u5b46\u5b47\u5b48\u5b49\u5b4a\u5b4b\u5b4c\u5b4d\u5b4e\u5b4f\u5b50\u5b51\u5b52\u5b53\u5b54\u5b55\u5b56\u5b57\u5b58\u5b59\u5b5a\u5b5b\u5b5c\u5b5d\u5b5e\u5b5f\u5b60\u5b61\u5b62\u5b63\u5b64\u5b65\u5b66\u5b67\u5b68\u5b69\u5b6a\u5b6b\u5b6c\u5b6d\u5b6e\u5b6f\u5b70\u5b71\u5b72\u5b73\u5b74\u5b75\u5b76\u5b77\u5b78\u5b79\u5b7a\u5b7b\u5b7c\u5b7d\u5b7e\u5b7f\u5b80\u5b81\u5b82\u5b83\u5b84\u5b85\u5b86\u5b87\u5b88\u5b89\u5b8a\u5b8b\u5b8c\u5b8d\u5b8e\u5b8f\u5b90\u5b91\u5b92\u5b93\u5b94\u5b95\u5b96\u5b97\u5b98\u5b99\u5b9a\u5b9b\u5b9c\u5b9d\u5b9e\u5b9f\u5ba0\u5ba1\u5ba2\u5ba3\u5ba4\u5ba5\u5ba6\u5ba7\u5ba8\u5ba9\u5baa\u5bab\u5bac\u5bad\u5bae\u5baf\u5bb0\u5bb1\u5bb2\u5bb3\u5bb4\u5bb5\u5bb6\u5bb7\u5bb8\u5bb9\u5bba\u5bbb\u5bbc\u5bbd\u5bbe\u5bbf\u5bc0\u5bc1\u5bc2\u5bc3\u5bc4\u5bc5\u5bc6\u5bc7\u5bc8\u5bc9\u5bca\u5bcb\u5bcc\u5bcd\u5bce\u5bcf\u5bd0\u5bd1\u5bd2\u5bd3\u5bd4\u5bd5\u5bd6\u5bd7\u5bd8\u5bd9\u5bda\u5bdb\u5bdc\u5bdd\u5bde\u5bdf\u5be0\u5be1\u5be2\u5be3\u5be4\u5be5\u5be6\u5be7\u5be8\u5be9\u5bea\u5beb\u5bec\u5bed\u5bee\u5bef\u5bf0\u5bf1\u5bf2\u5bf3\u5bf4\u5bf5\u5bf6\u5bf7\u5bf8\u5bf9\u5bfa\u5bfb\u5bfc\u5bfd\u5bfe\u5bff\u5c00\u5c01\u5c02\u5c03\u5c04\u5c05\u5c06\u5c07\u5c08\u5c09\u5c0a\u5c0b\u5c0c\u5c0d\u5c0e\u5c0f\u5c10\u5c11\u5c12\u5c13\u5c14\u5c15\u5c16\u5c17\u5c18\u5c19\u5c1a\u5c1b\u5c1c\u5c1d\u5c1e\u5c1f\u5c20\u5c21\u5c22\u5c23\u5c24\u5c25\u5c26\u5c27\u5c28\u5c29\u5c2a\u5c2b\u5c2c\u5c2d\u5c2e\u5c2f\u5c30\u5c31\u5c32\u5c33\u5c34\u5c35\u5c36\u5c37\u5c38\u5c39\u5c3a\u5c3b\u5c3c\u5c3d\u5c3e\u5c3f\u5c40\u5c41\u5c42\u5c43\u5c44\u5c45\u5c46\u5c47\u5c48\u5c49\u5c4a\u5c4b\u5c4c\u5c4d\u5c4e\u5c4f\u5c50\u5c51\u5c52\u5c53\u5c54\u5c55\u5c56\u5c57\u5c58\u5c59\u5c5a\u5c5b\u5c5c\u5c5d\u5c5e\u5c5f\u5c60\u5c61\u5c62\u5c63\u5c64\u5c65\u5c66\u5c67\u5c68\u5c69\u5c6a\u5c6b\u5c6c\u5c6d\u5c6e\u5c6f\u5c70\u5c71\u5c72\u5c73\u5c74\u5c75\u5c76\u5c77\u5c78\u5c79\u5c7a\u5c7b\u5c7c\u5c7d\u5c7e\u5c7f\u5c80\u5c81\u5c82\u5c83\u5c84\u5c85\u5c86\u5c87\u5c88\u5c89\u5c8a\u5c8b\u5c8c\u5c8d\u5c8e\u5c8f\u5c90\u5c91\u5c92\u5c93\u5c94\u5c95\u5c96\u5c97\u5c98\u5c99\u5c9a\u5c9b\u5c9c\u5c9d\u5c9e\u5c9f\u5ca0\u5ca1\u5ca2\u5ca3\u5ca4\u5ca5\u5ca6\u5ca7\u5ca8\u5ca9\u5caa\u5cab\u5cac\u5cad\u5cae\u5caf\u5cb0\u5cb1\u5cb2\u5cb3\u5cb4\u5cb5\u5cb6\u5cb7\u5cb8\u5cb9\u5cba\u5cbb\u5cbc\u5cbd\u5cbe\u5cbf\u5cc0\u5cc1\u5cc2\u5cc3\u5cc4\u5cc5\u5cc6\u5cc7\u5cc8\u5cc9\u5cca\u5ccb\u5ccc\u5ccd\u5cce\u5ccf\u5cd0\u5cd1\u5cd2\u5cd3\u5cd4\u5cd5\u5cd6\u5cd7\u5cd8\u5cd9\u5cda\u5cdb\u5cdc\u5cdd\u5cde\u5cdf\u5ce0\u5ce1\u5ce2\u5ce3\u5ce4\u5ce5\u5ce6\u5ce7\u5ce8\u5ce9\u5cea\u5ceb\u5cec\u5ced\u5cee\u5cef\u5cf0\u5cf1\u5cf2\u5cf3\u5cf4\u5cf5\u5cf6\u5cf7\u5cf8\u5cf9\u5cfa\u5cfb\u5cfc\u5cfd\u5cfe\u5cff\u5d00\u5d01\u5d02\u5d03\u5d04\u5d05\u5d06\u5d07\u5d08\u5d09\u5d0a\u5d0b\u5d0c\u5d0d\u5d0e\u5d0f\u5d10\u5d11\u5d12\u5d13\u5d14\u5d15\u5d16\u5d17\u5d18\u5d19\u5d1a\u5d1b\u5d1c\u5d1d\u5d1e\u5d1f\u5d20\u5d21\u5d22\u5d23\u5d24\u5d25\u5d26\u5d27\u5d28\u5d29\u5d2a\u5d2b\u5d2c\u5d2d\u5d2e\u5d2f\u5d30\u5d31\u5d32\u5d33\u5d34\u5d35\u5d36\u5d37\u5d38\u5d39\u5d3a\u5d3b\u5d3c\u5d3d\u5d3e\u5d3f\u5d40\u5d41\u5d42\u5d43\u5d44\u5d45\u5d46\u5d47\u5d48\u5d49\u5d4a\u5d4b\u5d4c\u5d4d\u5d4e\u5d4f\u5d50\u5d51\u5d52\u5d53\u5d54\u5d55\u5d56\u5d57\u5d58\u5d59\u5d5a\u5d5b\u5d5c\u5d5d\u5d5e\u5d5f\u5d60\u5d61\u5d62\u5d63\u5d64\u5d65\u5d66\u5d67\u5d68\u5d69\u5d6a\u5d6b\u5d6c\u5d6d\u5d6e\u5d6f\u5d70\u5d71\u5d72\u5d73\u5d74\u5d75\u5d76\u5d77\u5d78\u5d79\u5d7a\u5d7b\u5d7c\u5d7d\u5d7e\u5d7f\u5d80\u5d81\u5d82\u5d83\u5d84\u5d85\u5d86\u5d87\u5d88\u5d89\u5d8a\u5d8b\u5d8c\u5d8d\u5d8e\u5d8f\u5d90\u5d91\u5d92\u5d93\u5d94\u5d95\u5d96\u5d97\u5d98\u5d99\u5d9a\u5d9b\u5d9c\u5d9d\u5d9e\u5d9f\u5da0\u5da1\u5da2\u5da3\u5da4\u5da5\u5da6\u5da7\u5da8\u5da9\u5daa\u5dab\u5dac\u5dad\u5dae\u5daf\u5db0\u5db1\u5db2\u5db3\u5db4\u5db5\u5db6\u5db7\u5db8\u5db9\u5dba\u5dbb\u5dbc\u5dbd\u5dbe\u5dbf\u5dc0\u5dc1\u5dc2\u5dc3\u5dc4\u5dc5\u5dc6\u5dc7\u5dc8\u5dc9\u5dca\u5dcb\u5dcc\u5dcd\u5dce\u5dcf\u5dd0\u5dd1\u5dd2\u5dd3\u5dd4\u5dd5\u5dd6\u5dd7\u5dd8\u5dd9\u5dda\u5ddb\u5ddc\u5ddd\u5dde\u5ddf\u5de0\u5de1\u5de2\u5de3\u5de4\u5de5\u5de6\u5de7\u5de8\u5de9\u5dea\u5deb\u5dec\u5ded\u5dee\u5def\u5df0\u5df1\u5df2\u5df3\u5df4\u5df5\u5df6\u5df7\u5df8\u5df9\u5dfa\u5dfb\u5dfc\u5dfd\u5dfe\u5dff\u5e00\u5e01\u5e02\u5e03\u5e04\u5e05\u5e06\u5e07\u5e08\u5e09\u5e0a\u5e0b\u5e0c\u5e0d\u5e0e\u5e0f\u5e10\u5e11\u5e12\u5e13\u5e14\u5e15\u5e16\u5e17\u5e18\u5e19\u5e1a\u5e1b\u5e1c\u5e1d\u5e1e\u5e1f\u5e20\u5e21\u5e22\u5e23\u5e24\u5e25\u5e26\u5e27\u5e28\u5e29\u5e2a\u5e2b\u5e2c\u5e2d\u5e2e\u5e2f\u5e30\u5e31\u5e32\u5e33\u5e34\u5e35\u5e36\u5e37\u5e38\u5e39\u5e3a\u5e3b\u5e3c\u5e3d\u5e3e\u5e3f\u5e40\u5e41\u5e42\u5e43\u5e44\u5e45\u5e46\u5e47\u5e48\u5e49\u5e4a\u5e4b\u5e4c\u5e4d\u5e4e\u5e4f\u5e50\u5e51\u5e52\u5e53\u5e54\u5e55\u5e56\u5e57\u5e58\u5e59\u5e5a\u5e5b\u5e5c\u5e5d\u5e5e\u5e5f\u5e60\u5e61\u5e62\u5e63\u5e64\u5e65\u5e66\u5e67\u5e68\u5e69\u5e6a\u5e6b\u5e6c\u5e6d\u5e6e\u5e6f\u5e70\u5e71\u5e72\u5e73\u5e74\u5e75\u5e76\u5e77\u5e78\u5e79\u5e7a\u5e7b\u5e7c\u5e7d\u5e7e\u5e7f\u5e80\u5e81\u5e82\u5e83\u5e84\u5e85\u5e86\u5e87\u5e88\u5e89\u5e8a\u5e8b\u5e8c\u5e8d\u5e8e\u5e8f\u5e90\u5e91\u5e92\u5e93\u5e94\u5e95\u5e96\u5e97\u5e98\u5e99\u5e9a\u5e9b\u5e9c\u5e9d\u5e9e\u5e9f\u5ea0\u5ea1\u5ea2\u5ea3\u5ea4\u5ea5\u5ea6\u5ea7\u5ea8\u5ea9\u5eaa\u5eab\u5eac\u5ead\u5eae\u5eaf\u5eb0\u5eb1\u5eb2\u5eb3\u5eb4\u5eb5\u5eb6\u5eb7\u5eb8\u5eb9\u5eba\u5ebb\u5ebc\u5ebd\u5ebe\u5ebf\u5ec0\u5ec1\u5ec2\u5ec3\u5ec4\u5ec5\u5ec6\u5ec7\u5ec8\u5ec9\u5eca\u5ecb\u5ecc\u5ecd\u5ece\u5ecf\u5ed0\u5ed1\u5ed2\u5ed3\u5ed4\u5ed5\u5ed6\u5ed7\u5ed8\u5ed9\u5eda\u5edb\u5edc\u5edd\u5ede\u5edf\u5ee0\u5ee1\u5ee2\u5ee3\u5ee4\u5ee5\u5ee6\u5ee7\u5ee8\u5ee9\u5eea\u5eeb\u5eec\u5eed\u5eee\u5eef\u5ef0\u5ef1\u5ef2\u5ef3\u5ef4\u5ef5\u5ef6\u5ef7\u5ef8\u5ef9\u5efa\u5efb\u5efc\u5efd\u5efe\u5eff\u5f00\u5f01\u5f02\u5f03\u5f04\u5f05\u5f06\u5f07\u5f08\u5f09\u5f0a\u5f0b\u5f0c\u5f0d\u5f0e\u5f0f\u5f10\u5f11\u5f12\u5f13\u5f14\u5f15\u5f16\u5f17\u5f18\u5f19\u5f1a\u5f1b\u5f1c\u5f1d\u5f1e\u5f1f\u5f20\u5f21\u5f22\u5f23\u5f24\u5f25\u5f26\u5f27\u5f28\u5f29\u5f2a\u5f2b\u5f2c\u5f2d\u5f2e\u5f2f\u5f30\u5f31\u5f32\u5f33\u5f34\u5f35\u5f36\u5f37\u5f38\u5f39\u5f3a\u5f3b\u5f3c\u5f3d\u5f3e\u5f3f\u5f40\u5f41\u5f42\u5f43\u5f44\u5f45\u5f46\u5f47\u5f48\u5f49\u5f4a\u5f4b\u5f4c\u5f4d\u5f4e\u5f4f\u5f50\u5f51\u5f52\u5f53\u5f54\u5f55\u5f56\u5f57\u5f58\u5f59\u5f5a\u5f5b\u5f5c\u5f5d\u5f5e\u5f5f\u5f60\u5f61\u5f62\u5f63\u5f64\u5f65\u5f66\u5f67\u5f68\u5f69\u5f6a\u5f6b\u5f6c\u5f6d\u5f6e\u5f6f\u5f70\u5f71\u5f72\u5f73\u5f74\u5f75\u5f76\u5f77\u5f78\u5f79\u5f7a\u5f7b\u5f7c\u5f7d\u5f7e\u5f7f\u5f80\u5f81\u5f82\u5f83\u5f84\u5f85\u5f86\u5f87\u5f88\u5f89\u5f8a\u5f8b\u5f8c\u5f8d\u5f8e\u5f8f\u5f90\u5f91\u5f92\u5f93\u5f94\u5f95\u5f96\u5f97\u5f98\u5f99\u5f9a\u5f9b\u5f9c\u5f9d\u5f9e\u5f9f\u5fa0\u5fa1\u5fa2\u5fa3\u5fa4\u5fa5\u5fa6\u5fa7\u5fa8\u5fa9\u5faa\u5fab\u5fac\u5fad\u5fae\u5faf\u5fb0\u5fb1\u5fb2\u5fb3\u5fb4\u5fb5\u5fb6\u5fb7\u5fb8\u5fb9\u5fba\u5fbb\u5fbc\u5fbd\u5fbe\u5fbf\u5fc0\u5fc1\u5fc2\u5fc3\u5fc4\u5fc5\u5fc6\u5fc7\u5fc8\u5fc9\u5fca\u5fcb\u5fcc\u5fcd\u5fce\u5fcf\u5fd0\u5fd1\u5fd2\u5fd3\u5fd4\u5fd5\u5fd6\u5fd7\u5fd8\u5fd9\u5fda\u5fdb\u5fdc\u5fdd\u5fde\u5fdf\u5fe0\u5fe1\u5fe2\u5fe3\u5fe4\u5fe5\u5fe6\u5fe7\u5fe8\u5fe9\u5fea\u5feb\u5fec\u5fed\u5fee\u5fef\u5ff0\u5ff1\u5ff2\u5ff3\u5ff4\u5ff5\u5ff6\u5ff7\u5ff8\u5ff9\u5ffa\u5ffb\u5ffc\u5ffd\u5ffe\u5fff\u6000\u6001\u6002\u6003\u6004\u6005\u6006\u6007\u6008\u6009\u600a\u600b\u600c\u600d\u600e\u600f\u6010\u6011\u6012\u6013\u6014\u6015\u6016\u6017\u6018\u6019\u601a\u601b\u601c\u601d\u601e\u601f\u6020\u6021\u6022\u6023\u6024\u6025\u6026\u6027\u6028\u6029\u602a\u602b\u602c\u602d\u602e\u602f\u6030\u6031\u6032\u6033\u6034\u6035\u6036\u6037\u6038\u6039\u603a\u603b\u603c\u603d\u603e\u603f\u6040\u6041\u6042\u6043\u6044\u6045\u6046\u6047\u6048\u6049\u604a\u604b\u604c\u604d\u604e\u604f\u6050\u6051\u6052\u6053\u6054\u6055\u6056\u6057\u6058\u6059\u605a\u605b\u605c\u605d\u605e\u605f\u6060\u6061\u6062\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606a\u606b\u606c\u606d\u606e\u606f\u6070\u6071\u6072\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607a\u607b\u607c\u607d\u607e\u607f\u6080\u6081\u6082\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608a\u608b\u608c\u608d\u608e\u608f\u6090\u6091\u6092\u6093\u6094\u6095\u6096\u6097\u6098\u6099\u609a\u609b\u609c\u609d\u609e\u609f\u60a0\u60a1\u60a2\u60a3\u60a4\u60a5\u60a6\u60a7\u60a8\u60a9\u60aa\u60ab\u60ac\u60ad\u60ae\u60af\u60b0\u60b1\u60b2\u60b3\u60b4\u60b5\u60b6\u60b7\u60b8\u60b9\u60ba\u60bb\u60bc\u60bd\u60be\u60bf\u60c0\u60c1\u60c2\u60c3\u60c4\u60c5\u60c6\u60c7\u60c8\u60c9\u60ca\u60cb\u60cc\u60cd\u60ce\u60cf\u60d0\u60d1\u60d2\u60d3\u60d4\u60d5\u60d6\u60d7\u60d8\u60d9\u60da\u60db\u60dc\u60dd\u60de\u60df\u60e0\u60e1\u60e2\u60e3\u60e4\u60e5\u60e6\u60e7\u60e8\u60e9\u60ea\u60eb\u60ec\u60ed\u60ee\u60ef\u60f0\u60f1\u60f2\u60f3\u60f4\u60f5\u60f6\u60f7\u60f8\u60f9\u60fa\u60fb\u60fc\u60fd\u60fe\u60ff\u6100\u6101\u6102\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610a\u610b\u610c\u610d\u610e\u610f\u6110\u6111\u6112\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611a\u611b\u611c\u611d\u611e\u611f\u6120\u6121\u6122\u6123\u6124\u6125\u6126\u6127\u6128\u6129\u612a\u612b\u612c\u612d\u612e\u612f\u6130\u6131\u6132\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613a\u613b\u613c\u613d\u613e\u613f\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147\u6148\u6149\u614a\u614b\u614c\u614d\u614e\u614f\u6150\u6151\u6152\u6153\u6154\u6155\u6156\u6157\u6158\u6159\u615a\u615b\u615c\u615d\u615e\u615f\u6160\u6161\u6162\u6163\u6164\u6165\u6166\u6167\u6168\u6169\u616a\u616b\u616c\u616d\u616e\u616f\u6170\u6171\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179\u617a\u617b\u617c\u617d\u617e\u617f\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189\u618a\u618b\u618c\u618d\u618e\u618f\u6190\u6191\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199\u619a\u619b\u619c\u619d\u619e\u619f\u61a0\u61a1\u61a2\u61a3\u61a4\u61a5\u61a6\u61a7\u61a8\u61a9\u61aa\u61ab\u61ac\u61ad\u61ae\u61af\u61b0\u61b1\u61b2\u61b3\u61b4\u61b5\u61b6\u61b7\u61b8\u61b9\u61ba\u61bb\u61bc\u61bd\u61be\u61bf\u61c0\u61c1\u61c2\u61c3\u61c4\u61c5\u61c6\u61c7\u61c8\u61c9\u61ca\u61cb\u61cc\u61cd\u61ce\u61cf\u61d0\u61d1\u61d2\u61d3\u61d4\u61d5\u61d6\u61d7\u61d8\u61d9\u61da\u61db\u61dc\u61dd\u61de\u61df\u61e0\u61e1\u61e2\u61e3\u61e4\u61e5\u61e6\u61e7\u61e8\u61e9\u61ea\u61eb\u61ec\u61ed\u61ee\u61ef\u61f0\u61f1\u61f2\u61f3\u61f4\u61f5\u61f6\u61f7\u61f8\u61f9\u61fa\u61fb\u61fc\u61fd\u61fe\u61ff\u6200\u6201\u6202\u6203\u6204\u6205\u6206\u6207\u6208\u6209\u620a\u620b\u620c\u620d\u620e\u620f\u6210\u6211\u6212\u6213\u6214\u6215\u6216\u6217\u6218\u6219\u621a\u621b\u621c\u621d\u621e\u621f\u6220\u6221\u6222\u6223\u6224\u6225\u6226\u6227\u6228\u6229\u622a\u622b\u622c\u622d\u622e\u622f\u6230\u6231\u6232\u6233\u6234\u6235\u6236\u6237\u6238\u6239\u623a\u623b\u623c\u623d\u623e\u623f\u6240\u6241\u6242\u6243\u6244\u6245\u6246\u6247\u6248\u6249\u624a\u624b\u624c\u624d\u624e\u624f\u6250\u6251\u6252\u6253\u6254\u6255\u6256\u6257\u6258\u6259\u625a\u625b\u625c\u625d\u625e\u625f\u6260\u6261\u6262\u6263\u6264\u6265\u6266\u6267\u6268\u6269\u626a\u626b\u626c\u626d\u626e\u626f\u6270\u6271\u6272\u6273\u6274\u6275\u6276\u6277\u6278\u6279\u627a\u627b\u627c\u627d\u627e\u627f\u6280\u6281\u6282\u6283\u6284\u6285\u6286\u6287\u6288\u6289\u628a\u628b\u628c\u628d\u628e\u628f\u6290\u6291\u6292\u6293\u6294\u6295\u6296\u6297\u6298\u6299\u629a\u629b\u629c\u629d\u629e\u629f\u62a0\u62a1\u62a2\u62a3\u62a4\u62a5\u62a6\u62a7\u62a8\u62a9\u62aa\u62ab\u62ac\u62ad\u62ae\u62af\u62b0\u62b1\u62b2\u62b3\u62b4\u62b5\u62b6\u62b7\u62b8\u62b9\u62ba\u62bb\u62bc\u62bd\u62be\u62bf\u62c0\u62c1\u62c2\u62c3\u62c4\u62c5\u62c6\u62c7\u62c8\u62c9\u62ca\u62cb\u62cc\u62cd\u62ce\u62cf\u62d0\u62d1\u62d2\u62d3\u62d4\u62d5\u62d6\u62d7\u62d8\u62d9\u62da\u62db\u62dc\u62dd\u62de\u62df\u62e0\u62e1\u62e2\u62e3\u62e4\u62e5\u62e6\u62e7\u62e8\u62e9\u62ea\u62eb\u62ec\u62ed\u62ee\u62ef\u62f0\u62f1\u62f2\u62f3\u62f4\u62f5\u62f6\u62f7\u62f8\u62f9\u62fa\u62fb\u62fc\u62fd\u62fe\u62ff\u6300\u6301\u6302\u6303\u6304\u6305\u6306\u6307\u6308\u6309\u630a\u630b\u630c\u630d\u630e\u630f\u6310\u6311\u6312\u6313\u6314\u6315\u6316\u6317\u6318\u6319\u631a\u631b\u631c\u631d\u631e\u631f\u6320\u6321\u6322\u6323\u6324\u6325\u6326\u6327\u6328\u6329\u632a\u632b\u632c\u632d\u632e\u632f\u6330\u6331\u6332\u6333\u6334\u6335\u6336\u6337\u6338\u6339\u633a\u633b\u633c\u633d\u633e\u633f\u6340\u6341\u6342\u6343\u6344\u6345\u6346\u6347\u6348\u6349\u634a\u634b\u634c\u634d\u634e\u634f\u6350\u6351\u6352\u6353\u6354\u6355\u6356\u6357\u6358\u6359\u635a\u635b\u635c\u635d\u635e\u635f\u6360\u6361\u6362\u6363\u6364\u6365\u6366\u6367\u6368\u6369\u636a\u636b\u636c\u636d\u636e\u636f\u6370\u6371\u6372\u6373\u6374\u6375\u6376\u6377\u6378\u6379\u637a\u637b\u637c\u637d\u637e\u637f\u6380\u6381\u6382\u6383\u6384\u6385\u6386\u6387\u6388\u6389\u638a\u638b\u638c\u638d\u638e\u638f\u6390\u6391\u6392\u6393\u6394\u6395\u6396\u6397\u6398\u6399\u639a\u639b\u639c\u639d\u639e\u639f\u63a0\u63a1\u63a2\u63a3\u63a4\u63a5\u63a6\u63a7\u63a8\u63a9\u63aa\u63ab\u63ac\u63ad\u63ae\u63af\u63b0\u63b1\u63b2\u63b3\u63b4\u63b5\u63b6\u63b7\u63b8\u63b9\u63ba\u63bb\u63bc\u63bd\u63be\u63bf\u63c0\u63c1\u63c2\u63c3\u63c4\u63c5\u63c6\u63c7\u63c8\u63c9\u63ca\u63cb\u63cc\u63cd\u63ce\u63cf\u63d0\u63d1\u63d2\u63d3\u63d4\u63d5\u63d6\u63d7\u63d8\u63d9\u63da\u63db\u63dc\u63dd\u63de\u63df\u63e0\u63e1\u63e2\u63e3\u63e4\u63e5\u63e6\u63e7\u63e8\u63e9\u63ea\u63eb\u63ec\u63ed\u63ee\u63ef\u63f0\u63f1\u63f2\u63f3\u63f4\u63f5\u63f6\u63f7\u63f8\u63f9\u63fa\u63fb\u63fc\u63fd\u63fe\u63ff\u6400\u6401\u6402\u6403\u6404\u6405\u6406\u6407\u6408\u6409\u640a\u640b\u640c\u640d\u640e\u640f\u6410\u6411\u6412\u6413\u6414\u6415\u6416\u6417\u6418\u6419\u641a\u641b\u641c\u641d\u641e\u641f\u6420\u6421\u6422\u6423\u6424\u6425\u6426\u6427\u6428\u6429\u642a\u642b\u642c\u642d\u642e\u642f\u6430\u6431\u6432\u6433\u6434\u6435\u6436\u6437\u6438\u6439\u643a\u643b\u643c\u643d\u643e\u643f\u6440\u6441\u6442\u6443\u6444\u6445\u6446\u6447\u6448\u6449\u644a\u644b\u644c\u644d\u644e\u644f\u6450\u6451\u6452\u6453\u6454\u6455\u6456\u6457\u6458\u6459\u645a\u645b\u645c\u645d\u645e\u645f\u6460\u6461\u6462\u6463\u6464\u6465\u6466\u6467\u6468\u6469\u646a\u646b\u646c\u646d\u646e\u646f\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u6478\u6479\u647a\u647b\u647c\u647d\u647e\u647f\u6480\u6481\u6482\u6483\u6484\u6485\u6486\u6487\u6488\u6489\u648a\u648b\u648c\u648d\u648e\u648f\u6490\u6491\u6492\u6493\u6494\u6495\u6496\u6497\u6498\u6499\u649a\u649b\u649c\u649d\u649e\u649f\u64a0\u64a1\u64a2\u64a3\u64a4\u64a5\u64a6\u64a7\u64a8\u64a9\u64aa\u64ab\u64ac\u64ad\u64ae\u64af\u64b0\u64b1\u64b2\u64b3\u64b4\u64b5\u64b6\u64b7\u64b8\u64b9\u64ba\u64bb\u64bc\u64bd\u64be\u64bf\u64c0\u64c1\u64c2\u64c3\u64c4\u64c5\u64c6\u64c7\u64c8\u64c9\u64ca\u64cb\u64cc\u64cd\u64ce\u64cf\u64d0\u64d1\u64d2\u64d3\u64d4\u64d5\u64d6\u64d7\u64d8\u64d9\u64da\u64db\u64dc\u64dd\u64de\u64df\u64e0\u64e1\u64e2\u64e3\u64e4\u64e5\u64e6\u64e7\u64e8\u64e9\u64ea\u64eb\u64ec\u64ed\u64ee\u64ef\u64f0\u64f1\u64f2\u64f3\u64f4\u64f5\u64f6\u64f7\u64f8\u64f9\u64fa\u64fb\u64fc\u64fd\u64fe\u64ff\u6500\u6501\u6502\u6503\u6504\u6505\u6506\u6507\u6508\u6509\u650a\u650b\u650c\u650d\u650e\u650f\u6510\u6511\u6512\u6513\u6514\u6515\u6516\u6517\u6518\u6519\u651a\u651b\u651c\u651d\u651e\u651f\u6520\u6521\u6522\u6523\u6524\u6525\u6526\u6527\u6528\u6529\u652a\u652b\u652c\u652d\u652e\u652f\u6530\u6531\u6532\u6533\u6534\u6535\u6536\u6537\u6538\u6539\u653a\u653b\u653c\u653d\u653e\u653f\u6540\u6541\u6542\u6543\u6544\u6545\u6546\u6547\u6548\u6549\u654a\u654b\u654c\u654d\u654e\u654f\u6550\u6551\u6552\u6553\u6554\u6555\u6556\u6557\u6558\u6559\u655a\u655b\u655c\u655d\u655e\u655f\u6560\u6561\u6562\u6563\u6564\u6565\u6566\u6567\u6568\u6569\u656a\u656b\u656c\u656d\u656e\u656f\u6570\u6571\u6572\u6573\u6574\u6575\u6576\u6577\u6578\u6579\u657a\u657b\u657c\u657d\u657e\u657f\u6580\u6581\u6582\u6583\u6584\u6585\u6586\u6587\u6588\u6589\u658a\u658b\u658c\u658d\u658e\u658f\u6590\u6591\u6592\u6593\u6594\u6595\u6596\u6597\u6598\u6599\u659a\u659b\u659c\u659d\u659e\u659f\u65a0\u65a1\u65a2\u65a3\u65a4\u65a5\u65a6\u65a7\u65a8\u65a9\u65aa\u65ab\u65ac\u65ad\u65ae\u65af\u65b0\u65b1\u65b2\u65b3\u65b4\u65b5\u65b6\u65b7\u65b8\u65b9\u65ba\u65bb\u65bc\u65bd\u65be\u65bf\u65c0\u65c1\u65c2\u65c3\u65c4\u65c5\u65c6\u65c7\u65c8\u65c9\u65ca\u65cb\u65cc\u65cd\u65ce\u65cf\u65d0\u65d1\u65d2\u65d3\u65d4\u65d5\u65d6\u65d7\u65d8\u65d9\u65da\u65db\u65dc\u65dd\u65de\u65df\u65e0\u65e1\u65e2\u65e3\u65e4\u65e5\u65e6\u65e7\u65e8\u65e9\u65ea\u65eb\u65ec\u65ed\u65ee\u65ef\u65f0\u65f1\u65f2\u65f3\u65f4\u65f5\u65f6\u65f7\u65f8\u65f9\u65fa\u65fb\u65fc\u65fd\u65fe\u65ff\u6600\u6601\u6602\u6603\u6604\u6605\u6606\u6607\u6608\u6609\u660a\u660b\u660c\u660d\u660e\u660f\u6610\u6611\u6612\u6613\u6614\u6615\u6616\u6617\u6618\u6619\u661a\u661b\u661c\u661d\u661e\u661f\u6620\u6621\u6622\u6623\u6624\u6625\u6626\u6627\u6628\u6629\u662a\u662b\u662c\u662d\u662e\u662f\u6630\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638\u6639\u663a\u663b\u663c\u663d\u663e\u663f\u6640\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648\u6649\u664a\u664b\u664c\u664d\u664e\u664f\u6650\u6651\u6652\u6653\u6654\u6655\u6656\u6657\u6658\u6659\u665a\u665b\u665c\u665d\u665e\u665f\u6660\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668\u6669\u666a\u666b\u666c\u666d\u666e\u666f\u6670\u6671\u6672\u6673\u6674\u6675\u6676\u6677\u6678\u6679\u667a\u667b\u667c\u667d\u667e\u667f\u6680\u6681\u6682\u6683\u6684\u6685\u6686\u6687\u6688\u6689\u668a\u668b\u668c\u668d\u668e\u668f\u6690\u6691\u6692\u6693\u6694\u6695\u6696\u6697\u6698\u6699\u669a\u669b\u669c\u669d\u669e\u669f\u66a0\u66a1\u66a2\u66a3\u66a4\u66a5\u66a6\u66a7\u66a8\u66a9\u66aa\u66ab\u66ac\u66ad\u66ae\u66af\u66b0\u66b1\u66b2\u66b3\u66b4\u66b5\u66b6\u66b7\u66b8\u66b9\u66ba\u66bb\u66bc\u66bd\u66be\u66bf\u66c0\u66c1\u66c2\u66c3\u66c4\u66c5\u66c6\u66c7\u66c8\u66c9\u66ca\u66cb\u66cc\u66cd\u66ce\u66cf\u66d0\u66d1\u66d2\u66d3\u66d4\u66d5\u66d6\u66d7\u66d8\u66d9\u66da\u66db\u66dc\u66dd\u66de\u66df\u66e0\u66e1\u66e2\u66e3\u66e4\u66e5\u66e6\u66e7\u66e8\u66e9\u66ea\u66eb\u66ec\u66ed\u66ee\u66ef\u66f0\u66f1\u66f2\u66f3\u66f4\u66f5\u66f6\u66f7\u66f8\u66f9\u66fa\u66fb\u66fc\u66fd\u66fe\u66ff\u6700\u6701\u6702\u6703\u6704\u6705\u6706\u6707\u6708\u6709\u670a\u670b\u670c\u670d\u670e\u670f\u6710\u6711\u6712\u6713\u6714\u6715\u6716\u6717\u6718\u6719\u671a\u671b\u671c\u671d\u671e\u671f\u6720\u6721\u6722\u6723\u6724\u6725\u6726\u6727\u6728\u6729\u672a\u672b\u672c\u672d\u672e\u672f\u6730\u6731\u6732\u6733\u6734\u6735\u6736\u6737\u6738\u6739\u673a\u673b\u673c\u673d\u673e\u673f\u6740\u6741\u6742\u6743\u6744\u6745\u6746\u6747\u6748\u6749\u674a\u674b\u674c\u674d\u674e\u674f\u6750\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758\u6759\u675a\u675b\u675c\u675d\u675e\u675f\u6760\u6761\u6762\u6763\u6764\u6765\u6766\u6767\u6768\u6769\u676a\u676b\u676c\u676d\u676e\u676f\u6770\u6771\u6772\u6773\u6774\u6775\u6776\u6777\u6778\u6779\u677a\u677b\u677c\u677d\u677e\u677f\u6780\u6781\u6782\u6783\u6784\u6785\u6786\u6787\u6788\u6789\u678a\u678b\u678c\u678d\u678e\u678f\u6790\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798\u6799\u679a\u679b\u679c\u679d\u679e\u679f\u67a0\u67a1\u67a2\u67a3\u67a4\u67a5\u67a6\u67a7\u67a8\u67a9\u67aa\u67ab\u67ac\u67ad\u67ae\u67af\u67b0\u67b1\u67b2\u67b3\u67b4\u67b5\u67b6\u67b7\u67b8\u67b9\u67ba\u67bb\u67bc\u67bd\u67be\u67bf\u67c0\u67c1\u67c2\u67c3\u67c4\u67c5\u67c6\u67c7\u67c8\u67c9\u67ca\u67cb\u67cc\u67cd\u67ce\u67cf\u67d0\u67d1\u67d2\u67d3\u67d4\u67d5\u67d6\u67d7\u67d8\u67d9\u67da\u67db\u67dc\u67dd\u67de\u67df\u67e0\u67e1\u67e2\u67e3\u67e4\u67e5\u67e6\u67e7\u67e8\u67e9\u67ea\u67eb\u67ec\u67ed\u67ee\u67ef\u67f0\u67f1\u67f2\u67f3\u67f4\u67f5\u67f6\u67f7\u67f8\u67f9\u67fa\u67fb\u67fc\u67fd\u67fe\u67ff\u6800\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808\u6809\u680a\u680b\u680c\u680d\u680e\u680f\u6810\u6811\u6812\u6813\u6814\u6815\u6816\u6817\u6818\u6819\u681a\u681b\u681c\u681d\u681e\u681f\u6820\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u6829\u682a\u682b\u682c\u682d\u682e\u682f\u6830\u6831\u6832\u6833\u6834\u6835\u6836\u6837\u6838\u6839\u683a\u683b\u683c\u683d\u683e\u683f\u6840\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848\u6849\u684a\u684b\u684c\u684d\u684e\u684f\u6850\u6851\u6852\u6853\u6854\u6855\u6856\u6857\u6858\u6859\u685a\u685b\u685c\u685d\u685e\u685f\u6860\u6861\u6862\u6863\u6864\u6865\u6866\u6867\u6868\u6869\u686a\u686b\u686c\u686d\u686e\u686f\u6870\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878\u6879\u687a\u687b\u687c\u687d\u687e\u687f\u6880\u6881\u6882\u6883\u6884\u6885\u6886\u6887\u6888\u6889\u688a\u688b\u688c\u688d\u688e\u688f\u6890\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898\u6899\u689a\u689b\u689c\u689d\u689e\u689f\u68a0\u68a1\u68a2\u68a3\u68a4\u68a5\u68a6\u68a7\u68a8\u68a9\u68aa\u68ab\u68ac\u68ad\u68ae\u68af\u68b0\u68b1\u68b2\u68b3\u68b4\u68b5\u68b6\u68b7\u68b8\u68b9\u68ba\u68bb\u68bc\u68bd\u68be\u68bf\u68c0\u68c1\u68c2\u68c3\u68c4\u68c5\u68c6\u68c7\u68c8\u68c9\u68ca\u68cb\u68cc\u68cd\u68ce\u68cf\u68d0\u68d1\u68d2\u68d3\u68d4\u68d5\u68d6\u68d7\u68d8\u68d9\u68da\u68db\u68dc\u68dd\u68de\u68df\u68e0\u68e1\u68e2\u68e3\u68e4\u68e5\u68e6\u68e7\u68e8\u68e9\u68ea\u68eb\u68ec\u68ed\u68ee\u68ef\u68f0\u68f1\u68f2\u68f3\u68f4\u68f5\u68f6\u68f7\u68f8\u68f9\u68fa\u68fb\u68fc\u68fd\u68fe\u68ff\u6900\u6901\u6902\u6903\u6904\u6905\u6906\u6907\u6908\u6909\u690a\u690b\u690c\u690d\u690e\u690f\u6910\u6911\u6912\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691a\u691b\u691c\u691d\u691e\u691f\u6920\u6921\u6922\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692a\u692b\u692c\u692d\u692e\u692f\u6930\u6931\u6932\u6933\u6934\u6935\u6936\u6937\u6938\u6939\u693a\u693b\u693c\u693d\u693e\u693f\u6940\u6941\u6942\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694a\u694b\u694c\u694d\u694e\u694f\u6950\u6951\u6952\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695a\u695b\u695c\u695d\u695e\u695f\u6960\u6961\u6962\u6963\u6964\u6965\u6966\u6967\u6968\u6969\u696a\u696b\u696c\u696d\u696e\u696f\u6970\u6971\u6972\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697a\u697b\u697c\u697d\u697e\u697f\u6980\u6981\u6982\u6983\u6984\u6985\u6986\u6987\u6988\u6989\u698a\u698b\u698c\u698d\u698e\u698f\u6990\u6991\u6992\u6993\u6994\u6995\u6996\u6997\u6998\u6999\u699a\u699b\u699c\u699d\u699e\u699f\u69a0\u69a1\u69a2\u69a3\u69a4\u69a5\u69a6\u69a7\u69a8\u69a9\u69aa\u69ab\u69ac\u69ad\u69ae\u69af\u69b0\u69b1\u69b2\u69b3\u69b4\u69b5\u69b6\u69b7\u69b8\u69b9\u69ba\u69bb\u69bc\u69bd\u69be\u69bf\u69c0\u69c1\u69c2\u69c3\u69c4\u69c5\u69c6\u69c7\u69c8\u69c9\u69ca\u69cb\u69cc\u69cd\u69ce\u69cf\u69d0\u69d1\u69d2\u69d3\u69d4\u69d5\u69d6\u69d7\u69d8\u69d9\u69da\u69db\u69dc\u69dd\u69de\u69df\u69e0\u69e1\u69e2\u69e3\u69e4\u69e5\u69e6\u69e7\u69e8\u69e9\u69ea\u69eb\u69ec\u69ed\u69ee\u69ef\u69f0\u69f1\u69f2\u69f3\u69f4\u69f5\u69f6\u69f7\u69f8\u69f9\u69fa\u69fb\u69fc\u69fd\u69fe\u69ff\u6a00\u6a01\u6a02\u6a03\u6a04\u6a05\u6a06\u6a07\u6a08\u6a09\u6a0a\u6a0b\u6a0c\u6a0d\u6a0e\u6a0f\u6a10\u6a11\u6a12\u6a13\u6a14\u6a15\u6a16\u6a17\u6a18\u6a19\u6a1a\u6a1b\u6a1c\u6a1d\u6a1e\u6a1f\u6a20\u6a21\u6a22\u6a23\u6a24\u6a25\u6a26\u6a27\u6a28\u6a29\u6a2a\u6a2b\u6a2c\u6a2d\u6a2e\u6a2f\u6a30\u6a31\u6a32\u6a33\u6a34\u6a35\u6a36\u6a37\u6a38\u6a39\u6a3a\u6a3b\u6a3c\u6a3d\u6a3e\u6a3f\u6a40\u6a41\u6a42\u6a43\u6a44\u6a45\u6a46\u6a47\u6a48\u6a49\u6a4a\u6a4b\u6a4c\u6a4d\u6a4e\u6a4f\u6a50\u6a51\u6a52\u6a53\u6a54\u6a55\u6a56\u6a57\u6a58\u6a59\u6a5a\u6a5b\u6a5c\u6a5d\u6a5e\u6a5f\u6a60\u6a61\u6a62\u6a63\u6a64\u6a65\u6a66\u6a67\u6a68\u6a69\u6a6a\u6a6b\u6a6c\u6a6d\u6a6e\u6a6f\u6a70\u6a71\u6a72\u6a73\u6a74\u6a75\u6a76\u6a77\u6a78\u6a79\u6a7a\u6a7b\u6a7c\u6a7d\u6a7e\u6a7f\u6a80\u6a81\u6a82\u6a83\u6a84\u6a85\u6a86\u6a87\u6a88\u6a89\u6a8a\u6a8b\u6a8c\u6a8d\u6a8e\u6a8f\u6a90\u6a91\u6a92\u6a93\u6a94\u6a95\u6a96\u6a97\u6a98\u6a99\u6a9a\u6a9b\u6a9c\u6a9d\u6a9e\u6a9f\u6aa0\u6aa1\u6aa2\u6aa3\u6aa4\u6aa5\u6aa6\u6aa7\u6aa8\u6aa9\u6aaa\u6aab\u6aac\u6aad\u6aae\u6aaf\u6ab0\u6ab1\u6ab2\u6ab3\u6ab4\u6ab5\u6ab6\u6ab7\u6ab8\u6ab9\u6aba\u6abb\u6abc\u6abd\u6abe\u6abf\u6ac0\u6ac1\u6ac2\u6ac3\u6ac4\u6ac5\u6ac6\u6ac7\u6ac8\u6ac9\u6aca\u6acb\u6acc\u6acd\u6ace\u6acf\u6ad0\u6ad1\u6ad2\u6ad3\u6ad4\u6ad5\u6ad6\u6ad7\u6ad8\u6ad9\u6ada\u6adb\u6adc\u6add\u6ade\u6adf\u6ae0\u6ae1\u6ae2\u6ae3\u6ae4\u6ae5\u6ae6\u6ae7\u6ae8\u6ae9\u6aea\u6aeb\u6aec\u6aed\u6aee\u6aef\u6af0\u6af1\u6af2\u6af3\u6af4\u6af5\u6af6\u6af7\u6af8\u6af9\u6afa\u6afb\u6afc\u6afd\u6afe\u6aff\u6b00\u6b01\u6b02\u6b03\u6b04\u6b05\u6b06\u6b07\u6b08\u6b09\u6b0a\u6b0b\u6b0c\u6b0d\u6b0e\u6b0f\u6b10\u6b11\u6b12\u6b13\u6b14\u6b15\u6b16\u6b17\u6b18\u6b19\u6b1a\u6b1b\u6b1c\u6b1d\u6b1e\u6b1f\u6b20\u6b21\u6b22\u6b23\u6b24\u6b25\u6b26\u6b27\u6b28\u6b29\u6b2a\u6b2b\u6b2c\u6b2d\u6b2e\u6b2f\u6b30\u6b31\u6b32\u6b33\u6b34\u6b35\u6b36\u6b37\u6b38\u6b39\u6b3a\u6b3b\u6b3c\u6b3d\u6b3e\u6b3f\u6b40\u6b41\u6b42\u6b43\u6b44\u6b45\u6b46\u6b47\u6b48\u6b49\u6b4a\u6b4b\u6b4c\u6b4d\u6b4e\u6b4f\u6b50\u6b51\u6b52\u6b53\u6b54\u6b55\u6b56\u6b57\u6b58\u6b59\u6b5a\u6b5b\u6b5c\u6b5d\u6b5e\u6b5f\u6b60\u6b61\u6b62\u6b63\u6b64\u6b65\u6b66\u6b67\u6b68\u6b69\u6b6a\u6b6b\u6b6c\u6b6d\u6b6e\u6b6f\u6b70\u6b71\u6b72\u6b73\u6b74\u6b75\u6b76\u6b77\u6b78\u6b79\u6b7a\u6b7b\u6b7c\u6b7d\u6b7e\u6b7f\u6b80\u6b81\u6b82\u6b83\u6b84\u6b85\u6b86\u6b87\u6b88\u6b89\u6b8a\u6b8b\u6b8c\u6b8d\u6b8e\u6b8f\u6b90\u6b91\u6b92\u6b93\u6b94\u6b95\u6b96\u6b97\u6b98\u6b99\u6b9a\u6b9b\u6b9c\u6b9d\u6b9e\u6b9f\u6ba0\u6ba1\u6ba2\u6ba3\u6ba4\u6ba5\u6ba6\u6ba7\u6ba8\u6ba9\u6baa\u6bab\u6bac\u6bad\u6bae\u6baf\u6bb0\u6bb1\u6bb2\u6bb3\u6bb4\u6bb5\u6bb6\u6bb7\u6bb8\u6bb9\u6bba\u6bbb\u6bbc\u6bbd\u6bbe\u6bbf\u6bc0\u6bc1\u6bc2\u6bc3\u6bc4\u6bc5\u6bc6\u6bc7\u6bc8\u6bc9\u6bca\u6bcb\u6bcc\u6bcd\u6bce\u6bcf\u6bd0\u6bd1\u6bd2\u6bd3\u6bd4\u6bd5\u6bd6\u6bd7\u6bd8\u6bd9\u6bda\u6bdb\u6bdc\u6bdd\u6bde\u6bdf\u6be0\u6be1\u6be2\u6be3\u6be4\u6be5\u6be6\u6be7\u6be8\u6be9\u6bea\u6beb\u6bec\u6bed\u6bee\u6bef\u6bf0\u6bf1\u6bf2\u6bf3\u6bf4\u6bf5\u6bf6\u6bf7\u6bf8\u6bf9\u6bfa\u6bfb\u6bfc\u6bfd\u6bfe\u6bff\u6c00\u6c01\u6c02\u6c03\u6c04\u6c05\u6c06\u6c07\u6c08\u6c09\u6c0a\u6c0b\u6c0c\u6c0d\u6c0e\u6c0f\u6c10\u6c11\u6c12\u6c13\u6c14\u6c15\u6c16\u6c17\u6c18\u6c19\u6c1a\u6c1b\u6c1c\u6c1d\u6c1e\u6c1f\u6c20\u6c21\u6c22\u6c23\u6c24\u6c25\u6c26\u6c27\u6c28\u6c29\u6c2a\u6c2b\u6c2c\u6c2d\u6c2e\u6c2f\u6c30\u6c31\u6c32\u6c33\u6c34\u6c35\u6c36\u6c37\u6c38\u6c39\u6c3a\u6c3b\u6c3c\u6c3d\u6c3e\u6c3f\u6c40\u6c41\u6c42\u6c43\u6c44\u6c45\u6c46\u6c47\u6c48\u6c49\u6c4a\u6c4b\u6c4c\u6c4d\u6c4e\u6c4f\u6c50\u6c51\u6c52\u6c53\u6c54\u6c55\u6c56\u6c57\u6c58\u6c59\u6c5a\u6c5b\u6c5c\u6c5d\u6c5e\u6c5f\u6c60\u6c61\u6c62\u6c63\u6c64\u6c65\u6c66\u6c67\u6c68\u6c69\u6c6a\u6c6b\u6c6c\u6c6d\u6c6e\u6c6f\u6c70\u6c71\u6c72\u6c73\u6c74\u6c75\u6c76\u6c77\u6c78\u6c79\u6c7a\u6c7b\u6c7c\u6c7d\u6c7e\u6c7f\u6c80\u6c81\u6c82\u6c83\u6c84\u6c85\u6c86\u6c87\u6c88\u6c89\u6c8a\u6c8b\u6c8c\u6c8d\u6c8e\u6c8f\u6c90\u6c91\u6c92\u6c93\u6c94\u6c95\u6c96\u6c97\u6c98\u6c99\u6c9a\u6c9b\u6c9c\u6c9d\u6c9e\u6c9f\u6ca0\u6ca1\u6ca2\u6ca3\u6ca4\u6ca5\u6ca6\u6ca7\u6ca8\u6ca9\u6caa\u6cab\u6cac\u6cad\u6cae\u6caf\u6cb0\u6cb1\u6cb2\u6cb3\u6cb4\u6cb5\u6cb6\u6cb7\u6cb8\u6cb9\u6cba\u6cbb\u6cbc\u6cbd\u6cbe\u6cbf\u6cc0\u6cc1\u6cc2\u6cc3\u6cc4\u6cc5\u6cc6\u6cc7\u6cc8\u6cc9\u6cca\u6ccb\u6ccc\u6ccd\u6cce\u6ccf\u6cd0\u6cd1\u6cd2\u6cd3\u6cd4\u6cd5\u6cd6\u6cd7\u6cd8\u6cd9\u6cda\u6cdb\u6cdc\u6cdd\u6cde\u6cdf\u6ce0\u6ce1\u6ce2\u6ce3\u6ce4\u6ce5\u6ce6\u6ce7\u6ce8\u6ce9\u6cea\u6ceb\u6cec\u6ced\u6cee\u6cef\u6cf0\u6cf1\u6cf2\u6cf3\u6cf4\u6cf5\u6cf6\u6cf7\u6cf8\u6cf9\u6cfa\u6cfb\u6cfc\u6cfd\u6cfe\u6cff\u6d00\u6d01\u6d02\u6d03\u6d04\u6d05\u6d06\u6d07\u6d08\u6d09\u6d0a\u6d0b\u6d0c\u6d0d\u6d0e\u6d0f\u6d10\u6d11\u6d12\u6d13\u6d14\u6d15\u6d16\u6d17\u6d18\u6d19\u6d1a\u6d1b\u6d1c\u6d1d\u6d1e\u6d1f\u6d20\u6d21\u6d22\u6d23\u6d24\u6d25\u6d26\u6d27\u6d28\u6d29\u6d2a\u6d2b\u6d2c\u6d2d\u6d2e\u6d2f\u6d30\u6d31\u6d32\u6d33\u6d34\u6d35\u6d36\u6d37\u6d38\u6d39\u6d3a\u6d3b\u6d3c\u6d3d\u6d3e\u6d3f\u6d40\u6d41\u6d42\u6d43\u6d44\u6d45\u6d46\u6d47\u6d48\u6d49\u6d4a\u6d4b\u6d4c\u6d4d\u6d4e\u6d4f\u6d50\u6d51\u6d52\u6d53\u6d54\u6d55\u6d56\u6d57\u6d58\u6d59\u6d5a\u6d5b\u6d5c\u6d5d\u6d5e\u6d5f\u6d60\u6d61\u6d62\u6d63\u6d64\u6d65\u6d66\u6d67\u6d68\u6d69\u6d6a\u6d6b\u6d6c\u6d6d\u6d6e\u6d6f\u6d70\u6d71\u6d72\u6d73\u6d74\u6d75\u6d76\u6d77\u6d78\u6d79\u6d7a\u6d7b\u6d7c\u6d7d\u6d7e\u6d7f\u6d80\u6d81\u6d82\u6d83\u6d84\u6d85\u6d86\u6d87\u6d88\u6d89\u6d8a\u6d8b\u6d8c\u6d8d\u6d8e\u6d8f\u6d90\u6d91\u6d92\u6d93\u6d94\u6d95\u6d96\u6d97\u6d98\u6d99\u6d9a\u6d9b\u6d9c\u6d9d\u6d9e\u6d9f\u6da0\u6da1\u6da2\u6da3\u6da4\u6da5\u6da6\u6da7\u6da8\u6da9\u6daa\u6dab\u6dac\u6dad\u6dae\u6daf\u6db0\u6db1\u6db2\u6db3\u6db4\u6db5\u6db6\u6db7\u6db8\u6db9\u6dba\u6dbb\u6dbc\u6dbd\u6dbe\u6dbf\u6dc0\u6dc1\u6dc2\u6dc3\u6dc4\u6dc5\u6dc6\u6dc7\u6dc8\u6dc9\u6dca\u6dcb\u6dcc\u6dcd\u6dce\u6dcf\u6dd0\u6dd1\u6dd2\u6dd3\u6dd4\u6dd5\u6dd6\u6dd7\u6dd8\u6dd9\u6dda\u6ddb\u6ddc\u6ddd\u6dde\u6ddf\u6de0\u6de1\u6de2\u6de3\u6de4\u6de5\u6de6\u6de7\u6de8\u6de9\u6dea\u6deb\u6dec\u6ded\u6dee\u6def\u6df0\u6df1\u6df2\u6df3\u6df4\u6df5\u6df6\u6df7\u6df8\u6df9\u6dfa\u6dfb\u6dfc\u6dfd\u6dfe\u6dff\u6e00\u6e01\u6e02\u6e03\u6e04\u6e05\u6e06\u6e07\u6e08\u6e09\u6e0a\u6e0b\u6e0c\u6e0d\u6e0e\u6e0f\u6e10\u6e11\u6e12\u6e13\u6e14\u6e15\u6e16\u6e17\u6e18\u6e19\u6e1a\u6e1b\u6e1c\u6e1d\u6e1e\u6e1f\u6e20\u6e21\u6e22\u6e23\u6e24\u6e25\u6e26\u6e27\u6e28\u6e29\u6e2a\u6e2b\u6e2c\u6e2d\u6e2e\u6e2f\u6e30\u6e31\u6e32\u6e33\u6e34\u6e35\u6e36\u6e37\u6e38\u6e39\u6e3a\u6e3b\u6e3c\u6e3d\u6e3e\u6e3f\u6e40\u6e41\u6e42\u6e43\u6e44\u6e45\u6e46\u6e47\u6e48\u6e49\u6e4a\u6e4b\u6e4c\u6e4d\u6e4e\u6e4f\u6e50\u6e51\u6e52\u6e53\u6e54\u6e55\u6e56\u6e57\u6e58\u6e59\u6e5a\u6e5b\u6e5c\u6e5d\u6e5e\u6e5f\u6e60\u6e61\u6e62\u6e63\u6e64\u6e65\u6e66\u6e67\u6e68\u6e69\u6e6a\u6e6b\u6e6c\u6e6d\u6e6e\u6e6f\u6e70\u6e71\u6e72\u6e73\u6e74\u6e75\u6e76\u6e77\u6e78\u6e79\u6e7a\u6e7b\u6e7c\u6e7d\u6e7e\u6e7f\u6e80\u6e81\u6e82\u6e83\u6e84\u6e85\u6e86\u6e87\u6e88\u6e89\u6e8a\u6e8b\u6e8c\u6e8d\u6e8e\u6e8f\u6e90\u6e91\u6e92\u6e93\u6e94\u6e95\u6e96\u6e97\u6e98\u6e99\u6e9a\u6e9b\u6e9c\u6e9d\u6e9e\u6e9f\u6ea0\u6ea1\u6ea2\u6ea3\u6ea4\u6ea5\u6ea6\u6ea7\u6ea8\u6ea9\u6eaa\u6eab\u6eac\u6ead\u6eae\u6eaf\u6eb0\u6eb1\u6eb2\u6eb3\u6eb4\u6eb5\u6eb6\u6eb7\u6eb8\u6eb9\u6eba\u6ebb\u6ebc\u6ebd\u6ebe\u6ebf\u6ec0\u6ec1\u6ec2\u6ec3\u6ec4\u6ec5\u6ec6\u6ec7\u6ec8\u6ec9\u6eca\u6ecb\u6ecc\u6ecd\u6ece\u6ecf\u6ed0\u6ed1\u6ed2\u6ed3\u6ed4\u6ed5\u6ed6\u6ed7\u6ed8\u6ed9\u6eda\u6edb\u6edc\u6edd\u6ede\u6edf\u6ee0\u6ee1\u6ee2\u6ee3\u6ee4\u6ee5\u6ee6\u6ee7\u6ee8\u6ee9\u6eea\u6eeb\u6eec\u6eed\u6eee\u6eef\u6ef0\u6ef1\u6ef2\u6ef3\u6ef4\u6ef5\u6ef6\u6ef7\u6ef8\u6ef9\u6efa\u6efb\u6efc\u6efd\u6efe\u6eff\u6f00\u6f01\u6f02\u6f03\u6f04\u6f05\u6f06\u6f07\u6f08\u6f09\u6f0a\u6f0b\u6f0c\u6f0d\u6f0e\u6f0f\u6f10\u6f11\u6f12\u6f13\u6f14\u6f15\u6f16\u6f17\u6f18\u6f19\u6f1a\u6f1b\u6f1c\u6f1d\u6f1e\u6f1f\u6f20\u6f21\u6f22\u6f23\u6f24\u6f25\u6f26\u6f27\u6f28\u6f29\u6f2a\u6f2b\u6f2c\u6f2d\u6f2e\u6f2f\u6f30\u6f31\u6f32\u6f33\u6f34\u6f35\u6f36\u6f37\u6f38\u6f39\u6f3a\u6f3b\u6f3c\u6f3d\u6f3e\u6f3f\u6f40\u6f41\u6f42\u6f43\u6f44\u6f45\u6f46\u6f47\u6f48\u6f49\u6f4a\u6f4b\u6f4c\u6f4d\u6f4e\u6f4f\u6f50\u6f51\u6f52\u6f53\u6f54\u6f55\u6f56\u6f57\u6f58\u6f59\u6f5a\u6f5b\u6f5c\u6f5d\u6f5e\u6f5f\u6f60\u6f61\u6f62\u6f63\u6f64\u6f65\u6f66\u6f67\u6f68\u6f69\u6f6a\u6f6b\u6f6c\u6f6d\u6f6e\u6f6f\u6f70\u6f71\u6f72\u6f73\u6f74\u6f75\u6f76\u6f77\u6f78\u6f79\u6f7a\u6f7b\u6f7c\u6f7d\u6f7e\u6f7f\u6f80\u6f81\u6f82\u6f83\u6f84\u6f85\u6f86\u6f87\u6f88\u6f89\u6f8a\u6f8b\u6f8c\u6f8d\u6f8e\u6f8f\u6f90\u6f91\u6f92\u6f93\u6f94\u6f95\u6f96\u6f97\u6f98\u6f99\u6f9a\u6f9b\u6f9c\u6f9d\u6f9e\u6f9f\u6fa0\u6fa1\u6fa2\u6fa3\u6fa4\u6fa5\u6fa6\u6fa7\u6fa8\u6fa9\u6faa\u6fab\u6fac\u6fad\u6fae\u6faf\u6fb0\u6fb1\u6fb2\u6fb3\u6fb4\u6fb5\u6fb6\u6fb7\u6fb8\u6fb9\u6fba\u6fbb\u6fbc\u6fbd\u6fbe\u6fbf\u6fc0\u6fc1\u6fc2\u6fc3\u6fc4\u6fc5\u6fc6\u6fc7\u6fc8\u6fc9\u6fca\u6fcb\u6fcc\u6fcd\u6fce\u6fcf\u6fd0\u6fd1\u6fd2\u6fd3\u6fd4\u6fd5\u6fd6\u6fd7\u6fd8\u6fd9\u6fda\u6fdb\u6fdc\u6fdd\u6fde\u6fdf\u6fe0\u6fe1\u6fe2\u6fe3\u6fe4\u6fe5\u6fe6\u6fe7\u6fe8\u6fe9\u6fea\u6feb\u6fec\u6fed\u6fee\u6fef\u6ff0\u6ff1\u6ff2\u6ff3\u6ff4\u6ff5\u6ff6\u6ff7\u6ff8\u6ff9\u6ffa\u6ffb\u6ffc\u6ffd\u6ffe\u6fff\u7000\u7001\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700a\u700b\u700c\u700d\u700e\u700f\u7010\u7011\u7012\u7013\u7014\u7015\u7016\u7017\u7018\u7019\u701a\u701b\u701c\u701d\u701e\u701f\u7020\u7021\u7022\u7023\u7024\u7025\u7026\u7027\u7028\u7029\u702a\u702b\u702c\u702d\u702e\u702f\u7030\u7031\u7032\u7033\u7034\u7035\u7036\u7037\u7038\u7039\u703a\u703b\u703c\u703d\u703e\u703f\u7040\u7041\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704a\u704b\u704c\u704d\u704e\u704f\u7050\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7058\u7059\u705a\u705b\u705c\u705d\u705e\u705f\u7060\u7061\u7062\u7063\u7064\u7065\u7066\u7067\u7068\u7069\u706a\u706b\u706c\u706d\u706e\u706f\u7070\u7071\u7072\u7073\u7074\u7075\u7076\u7077\u7078\u7079\u707a\u707b\u707c\u707d\u707e\u707f\u7080\u7081\u7082\u7083\u7084\u7085\u7086\u7087\u7088\u7089\u708a\u708b\u708c\u708d\u708e\u708f\u7090\u7091\u7092\u7093\u7094\u7095\u7096\u7097\u7098\u7099\u709a\u709b\u709c\u709d\u709e\u709f\u70a0\u70a1\u70a2\u70a3\u70a4\u70a5\u70a6\u70a7\u70a8\u70a9\u70aa\u70ab\u70ac\u70ad\u70ae\u70af\u70b0\u70b1\u70b2\u70b3\u70b4\u70b5\u70b6\u70b7\u70b8\u70b9\u70ba\u70bb\u70bc\u70bd\u70be\u70bf\u70c0\u70c1\u70c2\u70c3\u70c4\u70c5\u70c6\u70c7\u70c8\u70c9\u70ca\u70cb\u70cc\u70cd\u70ce\u70cf\u70d0\u70d1\u70d2\u70d3\u70d4\u70d5\u70d6\u70d7\u70d8\u70d9\u70da\u70db\u70dc\u70dd\u70de\u70df\u70e0\u70e1\u70e2\u70e3\u70e4\u70e5\u70e6\u70e7\u70e8\u70e9\u70ea\u70eb\u70ec\u70ed\u70ee\u70ef\u70f0\u70f1\u70f2\u70f3\u70f4\u70f5\u70f6\u70f7\u70f8\u70f9\u70fa\u70fb\u70fc\u70fd\u70fe\u70ff\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u7109\u710a\u710b\u710c\u710d\u710e\u710f\u7110\u7111\u7112\u7113\u7114\u7115\u7116\u7117\u7118\u7119\u711a\u711b\u711c\u711d\u711e\u711f\u7120\u7121\u7122\u7123\u7124\u7125\u7126\u7127\u7128\u7129\u712a\u712b\u712c\u712d\u712e\u712f\u7130\u7131\u7132\u7133\u7134\u7135\u7136\u7137\u7138\u7139\u713a\u713b\u713c\u713d\u713e\u713f\u7140\u7141\u7142\u7143\u7144\u7145\u7146\u7147\u7148\u7149\u714a\u714b\u714c\u714d\u714e\u714f\u7150\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158\u7159\u715a\u715b\u715c\u715d\u715e\u715f\u7160\u7161\u7162\u7163\u7164\u7165\u7166\u7167\u7168\u7169\u716a\u716b\u716c\u716d\u716e\u716f\u7170\u7171\u7172\u7173\u7174\u7175\u7176\u7177\u7178\u7179\u717a\u717b\u717c\u717d\u717e\u717f\u7180\u7181\u7182\u7183\u7184\u7185\u7186\u7187\u7188\u7189\u718a\u718b\u718c\u718d\u718e\u718f\u7190\u7191\u7192\u7193\u7194\u7195\u7196\u7197\u7198\u7199\u719a\u719b\u719c\u719d\u719e\u719f\u71a0\u71a1\u71a2\u71a3\u71a4\u71a5\u71a6\u71a7\u71a8\u71a9\u71aa\u71ab\u71ac\u71ad\u71ae\u71af\u71b0\u71b1\u71b2\u71b3\u71b4\u71b5\u71b6\u71b7\u71b8\u71b9\u71ba\u71bb\u71bc\u71bd\u71be\u71bf\u71c0\u71c1\u71c2\u71c3\u71c4\u71c5\u71c6\u71c7\u71c8\u71c9\u71ca\u71cb\u71cc\u71cd\u71ce\u71cf\u71d0\u71d1\u71d2\u71d3\u71d4\u71d5\u71d6\u71d7\u71d8\u71d9\u71da\u71db\u71dc\u71dd\u71de\u71df\u71e0\u71e1\u71e2\u71e3\u71e4\u71e5\u71e6\u71e7\u71e8\u71e9\u71ea\u71eb\u71ec\u71ed\u71ee\u71ef\u71f0\u71f1\u71f2\u71f3\u71f4\u71f5\u71f6\u71f7\u71f8\u71f9\u71fa\u71fb\u71fc\u71fd\u71fe\u71ff\u7200\u7201\u7202\u7203\u7204\u7205\u7206\u7207\u7208\u7209\u720a\u720b\u720c\u720d\u720e\u720f\u7210\u7211\u7212\u7213\u7214\u7215\u7216\u7217\u7218\u7219\u721a\u721b\u721c\u721d\u721e\u721f\u7220\u7221\u7222\u7223\u7224\u7225\u7226\u7227\u7228\u7229\u722a\u722b\u722c\u722d\u722e\u722f\u7230\u7231\u7232\u7233\u7234\u7235\u7236\u7237\u7238\u7239\u723a\u723b\u723c\u723d\u723e\u723f\u7240\u7241\u7242\u7243\u7244\u7245\u7246\u7247\u7248\u7249\u724a\u724b\u724c\u724d\u724e\u724f\u7250\u7251\u7252\u7253\u7254\u7255\u7256\u7257\u7258\u7259\u725a\u725b\u725c\u725d\u725e\u725f\u7260\u7261\u7262\u7263\u7264\u7265\u7266\u7267\u7268\u7269\u726a\u726b\u726c\u726d\u726e\u726f\u7270\u7271\u7272\u7273\u7274\u7275\u7276\u7277\u7278\u7279\u727a\u727b\u727c\u727d\u727e\u727f\u7280\u7281\u7282\u7283\u7284\u7285\u7286\u7287\u7288\u7289\u728a\u728b\u728c\u728d\u728e\u728f\u7290\u7291\u7292\u7293\u7294\u7295\u7296\u7297\u7298\u7299\u729a\u729b\u729c\u729d\u729e\u729f\u72a0\u72a1\u72a2\u72a3\u72a4\u72a5\u72a6\u72a7\u72a8\u72a9\u72aa\u72ab\u72ac\u72ad\u72ae\u72af\u72b0\u72b1\u72b2\u72b3\u72b4\u72b5\u72b6\u72b7\u72b8\u72b9\u72ba\u72bb\u72bc\u72bd\u72be\u72bf\u72c0\u72c1\u72c2\u72c3\u72c4\u72c5\u72c6\u72c7\u72c8\u72c9\u72ca\u72cb\u72cc\u72cd\u72ce\u72cf\u72d0\u72d1\u72d2\u72d3\u72d4\u72d5\u72d6\u72d7\u72d8\u72d9\u72da\u72db\u72dc\u72dd\u72de\u72df\u72e0\u72e1\u72e2\u72e3\u72e4\u72e5\u72e6\u72e7\u72e8\u72e9\u72ea\u72eb\u72ec\u72ed\u72ee\u72ef\u72f0\u72f1\u72f2\u72f3\u72f4\u72f5\u72f6\u72f7\u72f8\u72f9\u72fa\u72fb\u72fc\u72fd\u72fe\u72ff\u7300\u7301\u7302\u7303\u7304\u7305\u7306\u7307\u7308\u7309\u730a\u730b\u730c\u730d\u730e\u730f\u7310\u7311\u7312\u7313\u7314\u7315\u7316\u7317\u7318\u7319\u731a\u731b\u731c\u731d\u731e\u731f\u7320\u7321\u7322\u7323\u7324\u7325\u7326\u7327\u7328\u7329\u732a\u732b\u732c\u732d\u732e\u732f\u7330\u7331\u7332\u7333\u7334\u7335\u7336\u7337\u7338\u7339\u733a\u733b\u733c\u733d\u733e\u733f\u7340\u7341\u7342\u7343\u7344\u7345\u7346\u7347\u7348\u7349\u734a\u734b\u734c\u734d\u734e\u734f\u7350\u7351\u7352\u7353\u7354\u7355\u7356\u7357\u7358\u7359\u735a\u735b\u735c\u735d\u735e\u735f\u7360\u7361\u7362\u7363\u7364\u7365\u7366\u7367\u7368\u7369\u736a\u736b\u736c\u736d\u736e\u736f\u7370\u7371\u7372\u7373\u7374\u7375\u7376\u7377\u7378\u7379\u737a\u737b\u737c\u737d\u737e\u737f\u7380\u7381\u7382\u7383\u7384\u7385\u7386\u7387\u7388\u7389\u738a\u738b\u738c\u738d\u738e\u738f\u7390\u7391\u7392\u7393\u7394\u7395\u7396\u7397\u7398\u7399\u739a\u739b\u739c\u739d\u739e\u739f\u73a0\u73a1\u73a2\u73a3\u73a4\u73a5\u73a6\u73a7\u73a8\u73a9\u73aa\u73ab\u73ac\u73ad\u73ae\u73af\u73b0\u73b1\u73b2\u73b3\u73b4\u73b5\u73b6\u73b7\u73b8\u73b9\u73ba\u73bb\u73bc\u73bd\u73be\u73bf\u73c0\u73c1\u73c2\u73c3\u73c4\u73c5\u73c6\u73c7\u73c8\u73c9\u73ca\u73cb\u73cc\u73cd\u73ce\u73cf\u73d0\u73d1\u73d2\u73d3\u73d4\u73d5\u73d6\u73d7\u73d8\u73d9\u73da\u73db\u73dc\u73dd\u73de\u73df\u73e0\u73e1\u73e2\u73e3\u73e4\u73e5\u73e6\u73e7\u73e8\u73e9\u73ea\u73eb\u73ec\u73ed\u73ee\u73ef\u73f0\u73f1\u73f2\u73f3\u73f4\u73f5\u73f6\u73f7\u73f8\u73f9\u73fa\u73fb\u73fc\u73fd\u73fe\u73ff\u7400\u7401\u7402\u7403\u7404\u7405\u7406\u7407\u7408\u7409\u740a\u740b\u740c\u740d\u740e\u740f\u7410\u7411\u7412\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741a\u741b\u741c\u741d\u741e\u741f\u7420\u7421\u7422\u7423\u7424\u7425\u7426\u7427\u7428\u7429\u742a\u742b\u742c\u742d\u742e\u742f\u7430\u7431\u7432\u7433\u7434\u7435\u7436\u7437\u7438\u7439\u743a\u743b\u743c\u743d\u743e\u743f\u7440\u7441\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744a\u744b\u744c\u744d\u744e\u744f\u7450\u7451\u7452\u7453\u7454\u7455\u7456\u7457\u7458\u7459\u745a\u745b\u745c\u745d\u745e\u745f\u7460\u7461\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746a\u746b\u746c\u746d\u746e\u746f\u7470\u7471\u7472\u7473\u7474\u7475\u7476\u7477\u7478\u7479\u747a\u747b\u747c\u747d\u747e\u747f\u7480\u7481\u7482\u7483\u7484\u7485\u7486\u7487\u7488\u7489\u748a\u748b\u748c\u748d\u748e\u748f\u7490\u7491\u7492\u7493\u7494\u7495\u7496\u7497\u7498\u7499\u749a\u749b\u749c\u749d\u749e\u749f\u74a0\u74a1\u74a2\u74a3\u74a4\u74a5\u74a6\u74a7\u74a8\u74a9\u74aa\u74ab\u74ac\u74ad\u74ae\u74af\u74b0\u74b1\u74b2\u74b3\u74b4\u74b5\u74b6\u74b7\u74b8\u74b9\u74ba\u74bb\u74bc\u74bd\u74be\u74bf\u74c0\u74c1\u74c2\u74c3\u74c4\u74c5\u74c6\u74c7\u74c8\u74c9\u74ca\u74cb\u74cc\u74cd\u74ce\u74cf\u74d0\u74d1\u74d2\u74d3\u74d4\u74d5\u74d6\u74d7\u74d8\u74d9\u74da\u74db\u74dc\u74dd\u74de\u74df\u74e0\u74e1\u74e2\u74e3\u74e4\u74e5\u74e6\u74e7\u74e8\u74e9\u74ea\u74eb\u74ec\u74ed\u74ee\u74ef\u74f0\u74f1\u74f2\u74f3\u74f4\u74f5\u74f6\u74f7\u74f8\u74f9\u74fa\u74fb\u74fc\u74fd\u74fe\u74ff\u7500\u7501\u7502\u7503\u7504\u7505\u7506\u7507\u7508\u7509\u750a\u750b\u750c\u750d\u750e\u750f\u7510\u7511\u7512\u7513\u7514\u7515\u7516\u7517\u7518\u7519\u751a\u751b\u751c\u751d\u751e\u751f\u7520\u7521\u7522\u7523\u7524\u7525\u7526\u7527\u7528\u7529\u752a\u752b\u752c\u752d\u752e\u752f\u7530\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538\u7539\u753a\u753b\u753c\u753d\u753e\u753f\u7540\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548\u7549\u754a\u754b\u754c\u754d\u754e\u754f\u7550\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558\u7559\u755a\u755b\u755c\u755d\u755e\u755f\u7560\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7568\u7569\u756a\u756b\u756c\u756d\u756e\u756f\u7570\u7571\u7572\u7573\u7574\u7575\u7576\u7577\u7578\u7579\u757a\u757b\u757c\u757d\u757e\u757f\u7580\u7581\u7582\u7583\u7584\u7585\u7586\u7587\u7588\u7589\u758a\u758b\u758c\u758d\u758e\u758f\u7590\u7591\u7592\u7593\u7594\u7595\u7596\u7597\u7598\u7599\u759a\u759b\u759c\u759d\u759e\u759f\u75a0\u75a1\u75a2\u75a3\u75a4\u75a5\u75a6\u75a7\u75a8\u75a9\u75aa\u75ab\u75ac\u75ad\u75ae\u75af\u75b0\u75b1\u75b2\u75b3\u75b4\u75b5\u75b6\u75b7\u75b8\u75b9\u75ba\u75bb\u75bc\u75bd\u75be\u75bf\u75c0\u75c1\u75c2\u75c3\u75c4\u75c5\u75c6\u75c7\u75c8\u75c9\u75ca\u75cb\u75cc\u75cd\u75ce\u75cf\u75d0\u75d1\u75d2\u75d3\u75d4\u75d5\u75d6\u75d7\u75d8\u75d9\u75da\u75db\u75dc\u75dd\u75de\u75df\u75e0\u75e1\u75e2\u75e3\u75e4\u75e5\u75e6\u75e7\u75e8\u75e9\u75ea\u75eb\u75ec\u75ed\u75ee\u75ef\u75f0\u75f1\u75f2\u75f3\u75f4\u75f5\u75f6\u75f7\u75f8\u75f9\u75fa\u75fb\u75fc\u75fd\u75fe\u75ff\u7600\u7601\u7602\u7603\u7604\u7605\u7606\u7607\u7608\u7609\u760a\u760b\u760c\u760d\u760e\u760f\u7610\u7611\u7612\u7613\u7614\u7615\u7616\u7617\u7618\u7619\u761a\u761b\u761c\u761d\u761e\u761f\u7620\u7621\u7622\u7623\u7624\u7625\u7626\u7627\u7628\u7629\u762a\u762b\u762c\u762d\u762e\u762f\u7630\u7631\u7632\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763a\u763b\u763c\u763d\u763e\u763f\u7640\u7641\u7642\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764a\u764b\u764c\u764d\u764e\u764f\u7650\u7651\u7652\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765a\u765b\u765c\u765d\u765e\u765f\u7660\u7661\u7662\u7663\u7664\u7665\u7666\u7667\u7668\u7669\u766a\u766b\u766c\u766d\u766e\u766f\u7670\u7671\u7672\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767a\u767b\u767c\u767d\u767e\u767f\u7680\u7681\u7682\u7683\u7684\u7685\u7686\u7687\u7688\u7689\u768a\u768b\u768c\u768d\u768e\u768f\u7690\u7691\u7692\u7693\u7694\u7695\u7696\u7697\u7698\u7699\u769a\u769b\u769c\u769d\u769e\u769f\u76a0\u76a1\u76a2\u76a3\u76a4\u76a5\u76a6\u76a7\u76a8\u76a9\u76aa\u76ab\u76ac\u76ad\u76ae\u76af\u76b0\u76b1\u76b2\u76b3\u76b4\u76b5\u76b6\u76b7\u76b8\u76b9\u76ba\u76bb\u76bc\u76bd\u76be\u76bf\u76c0\u76c1\u76c2\u76c3\u76c4\u76c5\u76c6\u76c7\u76c8\u76c9\u76ca\u76cb\u76cc\u76cd\u76ce\u76cf\u76d0\u76d1\u76d2\u76d3\u76d4\u76d5\u76d6\u76d7\u76d8\u76d9\u76da\u76db\u76dc\u76dd\u76de\u76df\u76e0\u76e1\u76e2\u76e3\u76e4\u76e5\u76e6\u76e7\u76e8\u76e9\u76ea\u76eb\u76ec\u76ed\u76ee\u76ef\u76f0\u76f1\u76f2\u76f3\u76f4\u76f5\u76f6\u76f7\u76f8\u76f9\u76fa\u76fb\u76fc\u76fd\u76fe\u76ff\u7700\u7701\u7702\u7703\u7704\u7705\u7706\u7707\u7708\u7709\u770a\u770b\u770c\u770d\u770e\u770f\u7710\u7711\u7712\u7713\u7714\u7715\u7716\u7717\u7718\u7719\u771a\u771b\u771c\u771d\u771e\u771f\u7720\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728\u7729\u772a\u772b\u772c\u772d\u772e\u772f\u7730\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738\u7739\u773a\u773b\u773c\u773d\u773e\u773f\u7740\u7741\u7742\u7743\u7744\u7745\u7746\u7747\u7748\u7749\u774a\u774b\u774c\u774d\u774e\u774f\u7750\u7751\u7752\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775a\u775b\u775c\u775d\u775e\u775f\u7760\u7761\u7762\u7763\u7764\u7765\u7766\u7767\u7768\u7769\u776a\u776b\u776c\u776d\u776e\u776f\u7770\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778\u7779\u777a\u777b\u777c\u777d\u777e\u777f\u7780\u7781\u7782\u7783\u7784\u7785\u7786\u7787\u7788\u7789\u778a\u778b\u778c\u778d\u778e\u778f\u7790\u7791\u7792\u7793\u7794\u7795\u7796\u7797\u7798\u7799\u779a\u779b\u779c\u779d\u779e\u779f\u77a0\u77a1\u77a2\u77a3\u77a4\u77a5\u77a6\u77a7\u77a8\u77a9\u77aa\u77ab\u77ac\u77ad\u77ae\u77af\u77b0\u77b1\u77b2\u77b3\u77b4\u77b5\u77b6\u77b7\u77b8\u77b9\u77ba\u77bb\u77bc\u77bd\u77be\u77bf\u77c0\u77c1\u77c2\u77c3\u77c4\u77c5\u77c6\u77c7\u77c8\u77c9\u77ca\u77cb\u77cc\u77cd\u77ce\u77cf\u77d0\u77d1\u77d2\u77d3\u77d4\u77d5\u77d6\u77d7\u77d8\u77d9\u77da\u77db\u77dc\u77dd\u77de\u77df\u77e0\u77e1\u77e2\u77e3\u77e4\u77e5\u77e6\u77e7\u77e8\u77e9\u77ea\u77eb\u77ec\u77ed\u77ee\u77ef\u77f0\u77f1\u77f2\u77f3\u77f4\u77f5\u77f6\u77f7\u77f8\u77f9\u77fa\u77fb\u77fc\u77fd\u77fe\u77ff\u7800\u7801\u7802\u7803\u7804\u7805\u7806\u7807\u7808\u7809\u780a\u780b\u780c\u780d\u780e\u780f\u7810\u7811\u7812\u7813\u7814\u7815\u7816\u7817\u7818\u7819\u781a\u781b\u781c\u781d\u781e\u781f\u7820\u7821\u7822\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782a\u782b\u782c\u782d\u782e\u782f\u7830\u7831\u7832\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783a\u783b\u783c\u783d\u783e\u783f\u7840\u7841\u7842\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784a\u784b\u784c\u784d\u784e\u784f\u7850\u7851\u7852\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785a\u785b\u785c\u785d\u785e\u785f\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786a\u786b\u786c\u786d\u786e\u786f\u7870\u7871\u7872\u7873\u7874\u7875\u7876\u7877\u7878\u7879\u787a\u787b\u787c\u787d\u787e\u787f\u7880\u7881\u7882\u7883\u7884\u7885\u7886\u7887\u7888\u7889\u788a\u788b\u788c\u788d\u788e\u788f\u7890\u7891\u7892\u7893\u7894\u7895\u7896\u7897\u7898\u7899\u789a\u789b\u789c\u789d\u789e\u789f\u78a0\u78a1\u78a2\u78a3\u78a4\u78a5\u78a6\u78a7\u78a8\u78a9\u78aa\u78ab\u78ac\u78ad\u78ae\u78af\u78b0\u78b1\u78b2\u78b3\u78b4\u78b5\u78b6\u78b7\u78b8\u78b9\u78ba\u78bb\u78bc\u78bd\u78be\u78bf\u78c0\u78c1\u78c2\u78c3\u78c4\u78c5\u78c6\u78c7\u78c8\u78c9\u78ca\u78cb\u78cc\u78cd\u78ce\u78cf\u78d0\u78d1\u78d2\u78d3\u78d4\u78d5\u78d6\u78d7\u78d8\u78d9\u78da\u78db\u78dc\u78dd\u78de\u78df\u78e0\u78e1\u78e2\u78e3\u78e4\u78e5\u78e6\u78e7\u78e8\u78e9\u78ea\u78eb\u78ec\u78ed\u78ee\u78ef\u78f0\u78f1\u78f2\u78f3\u78f4\u78f5\u78f6\u78f7\u78f8\u78f9\u78fa\u78fb\u78fc\u78fd\u78fe\u78ff\u7900\u7901\u7902\u7903\u7904\u7905\u7906\u7907\u7908\u7909\u790a\u790b\u790c\u790d\u790e\u790f\u7910\u7911\u7912\u7913\u7914\u7915\u7916\u7917\u7918\u7919\u791a\u791b\u791c\u791d\u791e\u791f\u7920\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928\u7929\u792a\u792b\u792c\u792d\u792e\u792f\u7930\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938\u7939\u793a\u793b\u793c\u793d\u793e\u793f\u7940\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948\u7949\u794a\u794b\u794c\u794d\u794e\u794f\u7950\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958\u7959\u795a\u795b\u795c\u795d\u795e\u795f\u7960\u7961\u7962\u7963\u7964\u7965\u7966\u7967\u7968\u7969\u796a\u796b\u796c\u796d\u796e\u796f\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978\u7979\u797a\u797b\u797c\u797d\u797e\u797f\u7980\u7981\u7982\u7983\u7984\u7985\u7986\u7987\u7988\u7989\u798a\u798b\u798c\u798d\u798e\u798f\u7990\u7991\u7992\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u799a\u799b\u799c\u799d\u799e\u799f\u79a0\u79a1\u79a2\u79a3\u79a4\u79a5\u79a6\u79a7\u79a8\u79a9\u79aa\u79ab\u79ac\u79ad\u79ae\u79af\u79b0\u79b1\u79b2\u79b3\u79b4\u79b5\u79b6\u79b7\u79b8\u79b9\u79ba\u79bb\u79bc\u79bd\u79be\u79bf\u79c0\u79c1\u79c2\u79c3\u79c4\u79c5\u79c6\u79c7\u79c8\u79c9\u79ca\u79cb\u79cc\u79cd\u79ce\u79cf\u79d0\u79d1\u79d2\u79d3\u79d4\u79d5\u79d6\u79d7\u79d8\u79d9\u79da\u79db\u79dc\u79dd\u79de\u79df\u79e0\u79e1\u79e2\u79e3\u79e4\u79e5\u79e6\u79e7\u79e8\u79e9\u79ea\u79eb\u79ec\u79ed\u79ee\u79ef\u79f0\u79f1\u79f2\u79f3\u79f4\u79f5\u79f6\u79f7\u79f8\u79f9\u79fa\u79fb\u79fc\u79fd\u79fe\u79ff\u7a00\u7a01\u7a02\u7a03\u7a04\u7a05\u7a06\u7a07\u7a08\u7a09\u7a0a\u7a0b\u7a0c\u7a0d\u7a0e\u7a0f\u7a10\u7a11\u7a12\u7a13\u7a14\u7a15\u7a16\u7a17\u7a18\u7a19\u7a1a\u7a1b\u7a1c\u7a1d\u7a1e\u7a1f\u7a20\u7a21\u7a22\u7a23\u7a24\u7a25\u7a26\u7a27\u7a28\u7a29\u7a2a\u7a2b\u7a2c\u7a2d\u7a2e\u7a2f\u7a30\u7a31\u7a32\u7a33\u7a34\u7a35\u7a36\u7a37\u7a38\u7a39\u7a3a\u7a3b\u7a3c\u7a3d\u7a3e\u7a3f\u7a40\u7a41\u7a42\u7a43\u7a44\u7a45\u7a46\u7a47\u7a48\u7a49\u7a4a\u7a4b\u7a4c\u7a4d\u7a4e\u7a4f\u7a50\u7a51\u7a52\u7a53\u7a54\u7a55\u7a56\u7a57\u7a58\u7a59\u7a5a\u7a5b\u7a5c\u7a5d\u7a5e\u7a5f\u7a60\u7a61\u7a62\u7a63\u7a64\u7a65\u7a66\u7a67\u7a68\u7a69\u7a6a\u7a6b\u7a6c\u7a6d\u7a6e\u7a6f\u7a70\u7a71\u7a72\u7a73\u7a74\u7a75\u7a76\u7a77\u7a78\u7a79\u7a7a\u7a7b\u7a7c\u7a7d\u7a7e\u7a7f\u7a80\u7a81\u7a82\u7a83\u7a84\u7a85\u7a86\u7a87\u7a88\u7a89\u7a8a\u7a8b\u7a8c\u7a8d\u7a8e\u7a8f\u7a90\u7a91\u7a92\u7a93\u7a94\u7a95\u7a96\u7a97\u7a98\u7a99\u7a9a\u7a9b\u7a9c\u7a9d\u7a9e\u7a9f\u7aa0\u7aa1\u7aa2\u7aa3\u7aa4\u7aa5\u7aa6\u7aa7\u7aa8\u7aa9\u7aaa\u7aab\u7aac\u7aad\u7aae\u7aaf\u7ab0\u7ab1\u7ab2\u7ab3\u7ab4\u7ab5\u7ab6\u7ab7\u7ab8\u7ab9\u7aba\u7abb\u7abc\u7abd\u7abe\u7abf\u7ac0\u7ac1\u7ac2\u7ac3\u7ac4\u7ac5\u7ac6\u7ac7\u7ac8\u7ac9\u7aca\u7acb\u7acc\u7acd\u7ace\u7acf\u7ad0\u7ad1\u7ad2\u7ad3\u7ad4\u7ad5\u7ad6\u7ad7\u7ad8\u7ad9\u7ada\u7adb\u7adc\u7add\u7ade\u7adf\u7ae0\u7ae1\u7ae2\u7ae3\u7ae4\u7ae5\u7ae6\u7ae7\u7ae8\u7ae9\u7aea\u7aeb\u7aec\u7aed\u7aee\u7aef\u7af0\u7af1\u7af2\u7af3\u7af4\u7af5\u7af6\u7af7\u7af8\u7af9\u7afa\u7afb\u7afc\u7afd\u7afe\u7aff\u7b00\u7b01\u7b02\u7b03\u7b04\u7b05\u7b06\u7b07\u7b08\u7b09\u7b0a\u7b0b\u7b0c\u7b0d\u7b0e\u7b0f\u7b10\u7b11\u7b12\u7b13\u7b14\u7b15\u7b16\u7b17\u7b18\u7b19\u7b1a\u7b1b\u7b1c\u7b1d\u7b1e\u7b1f\u7b20\u7b21\u7b22\u7b23\u7b24\u7b25\u7b26\u7b27\u7b28\u7b29\u7b2a\u7b2b\u7b2c\u7b2d\u7b2e\u7b2f\u7b30\u7b31\u7b32\u7b33\u7b34\u7b35\u7b36\u7b37\u7b38\u7b39\u7b3a\u7b3b\u7b3c\u7b3d\u7b3e\u7b3f\u7b40\u7b41\u7b42\u7b43\u7b44\u7b45\u7b46\u7b47\u7b48\u7b49\u7b4a\u7b4b\u7b4c\u7b4d\u7b4e\u7b4f\u7b50\u7b51\u7b52\u7b53\u7b54\u7b55\u7b56\u7b57\u7b58\u7b59\u7b5a\u7b5b\u7b5c\u7b5d\u7b5e\u7b5f\u7b60\u7b61\u7b62\u7b63\u7b64\u7b65\u7b66\u7b67\u7b68\u7b69\u7b6a\u7b6b\u7b6c\u7b6d\u7b6e\u7b6f\u7b70\u7b71\u7b72\u7b73\u7b74\u7b75\u7b76\u7b77\u7b78\u7b79\u7b7a\u7b7b\u7b7c\u7b7d\u7b7e\u7b7f\u7b80\u7b81\u7b82\u7b83\u7b84\u7b85\u7b86\u7b87\u7b88\u7b89\u7b8a\u7b8b\u7b8c\u7b8d\u7b8e\u7b8f\u7b90\u7b91\u7b92\u7b93\u7b94\u7b95\u7b96\u7b97\u7b98\u7b99\u7b9a\u7b9b\u7b9c\u7b9d\u7b9e\u7b9f\u7ba0\u7ba1\u7ba2\u7ba3\u7ba4\u7ba5\u7ba6\u7ba7\u7ba8\u7ba9\u7baa\u7bab\u7bac\u7bad\u7bae\u7baf\u7bb0\u7bb1\u7bb2\u7bb3\u7bb4\u7bb5\u7bb6\u7bb7\u7bb8\u7bb9\u7bba\u7bbb\u7bbc\u7bbd\u7bbe\u7bbf\u7bc0\u7bc1\u7bc2\u7bc3\u7bc4\u7bc5\u7bc6\u7bc7\u7bc8\u7bc9\u7bca\u7bcb\u7bcc\u7bcd\u7bce\u7bcf\u7bd0\u7bd1\u7bd2\u7bd3\u7bd4\u7bd5\u7bd6\u7bd7\u7bd8\u7bd9\u7bda\u7bdb\u7bdc\u7bdd\u7bde\u7bdf\u7be0\u7be1\u7be2\u7be3\u7be4\u7be5\u7be6\u7be7\u7be8\u7be9\u7bea\u7beb\u7bec\u7bed\u7bee\u7bef\u7bf0\u7bf1\u7bf2\u7bf3\u7bf4\u7bf5\u7bf6\u7bf7\u7bf8\u7bf9\u7bfa\u7bfb\u7bfc\u7bfd\u7bfe\u7bff\u7c00\u7c01\u7c02\u7c03\u7c04\u7c05\u7c06\u7c07\u7c08\u7c09\u7c0a\u7c0b\u7c0c\u7c0d\u7c0e\u7c0f\u7c10\u7c11\u7c12\u7c13\u7c14\u7c15\u7c16\u7c17\u7c18\u7c19\u7c1a\u7c1b\u7c1c\u7c1d\u7c1e\u7c1f\u7c20\u7c21\u7c22\u7c23\u7c24\u7c25\u7c26\u7c27\u7c28\u7c29\u7c2a\u7c2b\u7c2c\u7c2d\u7c2e\u7c2f\u7c30\u7c31\u7c32\u7c33\u7c34\u7c35\u7c36\u7c37\u7c38\u7c39\u7c3a\u7c3b\u7c3c\u7c3d\u7c3e\u7c3f\u7c40\u7c41\u7c42\u7c43\u7c44\u7c45\u7c46\u7c47\u7c48\u7c49\u7c4a\u7c4b\u7c4c\u7c4d\u7c4e\u7c4f\u7c50\u7c51\u7c52\u7c53\u7c54\u7c55\u7c56\u7c57\u7c58\u7c59\u7c5a\u7c5b\u7c5c\u7c5d\u7c5e\u7c5f\u7c60\u7c61\u7c62\u7c63\u7c64\u7c65\u7c66\u7c67\u7c68\u7c69\u7c6a\u7c6b\u7c6c\u7c6d\u7c6e\u7c6f\u7c70\u7c71\u7c72\u7c73\u7c74\u7c75\u7c76\u7c77\u7c78\u7c79\u7c7a\u7c7b\u7c7c\u7c7d\u7c7e\u7c7f\u7c80\u7c81\u7c82\u7c83\u7c84\u7c85\u7c86\u7c87\u7c88\u7c89\u7c8a\u7c8b\u7c8c\u7c8d\u7c8e\u7c8f\u7c90\u7c91\u7c92\u7c93\u7c94\u7c95\u7c96\u7c97\u7c98\u7c99\u7c9a\u7c9b\u7c9c\u7c9d\u7c9e\u7c9f\u7ca0\u7ca1\u7ca2\u7ca3\u7ca4\u7ca5\u7ca6\u7ca7\u7ca8\u7ca9\u7caa\u7cab\u7cac\u7cad\u7cae\u7caf\u7cb0\u7cb1\u7cb2\u7cb3\u7cb4\u7cb5\u7cb6\u7cb7\u7cb8\u7cb9\u7cba\u7cbb\u7cbc\u7cbd\u7cbe\u7cbf\u7cc0\u7cc1\u7cc2\u7cc3\u7cc4\u7cc5\u7cc6\u7cc7\u7cc8\u7cc9\u7cca\u7ccb\u7ccc\u7ccd\u7cce\u7ccf\u7cd0\u7cd1\u7cd2\u7cd3\u7cd4\u7cd5\u7cd6\u7cd7\u7cd8\u7cd9\u7cda\u7cdb\u7cdc\u7cdd\u7cde\u7cdf\u7ce0\u7ce1\u7ce2\u7ce3\u7ce4\u7ce5\u7ce6\u7ce7\u7ce8\u7ce9\u7cea\u7ceb\u7cec\u7ced\u7cee\u7cef\u7cf0\u7cf1\u7cf2\u7cf3\u7cf4\u7cf5\u7cf6\u7cf7\u7cf8\u7cf9\u7cfa\u7cfb\u7cfc\u7cfd\u7cfe\u7cff\u7d00\u7d01\u7d02\u7d03\u7d04\u7d05\u7d06\u7d07\u7d08\u7d09\u7d0a\u7d0b\u7d0c\u7d0d\u7d0e\u7d0f\u7d10\u7d11\u7d12\u7d13\u7d14\u7d15\u7d16\u7d17\u7d18\u7d19\u7d1a\u7d1b\u7d1c\u7d1d\u7d1e\u7d1f\u7d20\u7d21\u7d22\u7d23\u7d24\u7d25\u7d26\u7d27\u7d28\u7d29\u7d2a\u7d2b\u7d2c\u7d2d\u7d2e\u7d2f\u7d30\u7d31\u7d32\u7d33\u7d34\u7d35\u7d36\u7d37\u7d38\u7d39\u7d3a\u7d3b\u7d3c\u7d3d\u7d3e\u7d3f\u7d40\u7d41\u7d42\u7d43\u7d44\u7d45\u7d46\u7d47\u7d48\u7d49\u7d4a\u7d4b\u7d4c\u7d4d\u7d4e\u7d4f\u7d50\u7d51\u7d52\u7d53\u7d54\u7d55\u7d56\u7d57\u7d58\u7d59\u7d5a\u7d5b\u7d5c\u7d5d\u7d5e\u7d5f\u7d60\u7d61\u7d62\u7d63\u7d64\u7d65\u7d66\u7d67\u7d68\u7d69\u7d6a\u7d6b\u7d6c\u7d6d\u7d6e\u7d6f\u7d70\u7d71\u7d72\u7d73\u7d74\u7d75\u7d76\u7d77\u7d78\u7d79\u7d7a\u7d7b\u7d7c\u7d7d\u7d7e\u7d7f\u7d80\u7d81\u7d82\u7d83\u7d84\u7d85\u7d86\u7d87\u7d88\u7d89\u7d8a\u7d8b\u7d8c\u7d8d\u7d8e\u7d8f\u7d90\u7d91\u7d92\u7d93\u7d94\u7d95\u7d96\u7d97\u7d98\u7d99\u7d9a\u7d9b\u7d9c\u7d9d\u7d9e\u7d9f\u7da0\u7da1\u7da2\u7da3\u7da4\u7da5\u7da6\u7da7\u7da8\u7da9\u7daa\u7dab\u7dac\u7dad\u7dae\u7daf\u7db0\u7db1\u7db2\u7db3\u7db4\u7db5\u7db6\u7db7\u7db8\u7db9\u7dba\u7dbb\u7dbc\u7dbd\u7dbe\u7dbf\u7dc0\u7dc1\u7dc2\u7dc3\u7dc4\u7dc5\u7dc6\u7dc7\u7dc8\u7dc9\u7dca\u7dcb\u7dcc\u7dcd\u7dce\u7dcf\u7dd0\u7dd1\u7dd2\u7dd3\u7dd4\u7dd5\u7dd6\u7dd7\u7dd8\u7dd9\u7dda\u7ddb\u7ddc\u7ddd\u7dde\u7ddf\u7de0\u7de1\u7de2\u7de3\u7de4\u7de5\u7de6\u7de7\u7de8\u7de9\u7dea\u7deb\u7dec\u7ded\u7dee\u7def\u7df0\u7df1\u7df2\u7df3\u7df4\u7df5\u7df6\u7df7\u7df8\u7df9\u7dfa\u7dfb\u7dfc\u7dfd\u7dfe\u7dff\u7e00\u7e01\u7e02\u7e03\u7e04\u7e05\u7e06\u7e07\u7e08\u7e09\u7e0a\u7e0b\u7e0c\u7e0d\u7e0e\u7e0f\u7e10\u7e11\u7e12\u7e13\u7e14\u7e15\u7e16\u7e17\u7e18\u7e19\u7e1a\u7e1b\u7e1c\u7e1d\u7e1e\u7e1f\u7e20\u7e21\u7e22\u7e23\u7e24\u7e25\u7e26\u7e27\u7e28\u7e29\u7e2a\u7e2b\u7e2c\u7e2d\u7e2e\u7e2f\u7e30\u7e31\u7e32\u7e33\u7e34\u7e35\u7e36\u7e37\u7e38\u7e39\u7e3a\u7e3b\u7e3c\u7e3d\u7e3e\u7e3f\u7e40\u7e41\u7e42\u7e43\u7e44\u7e45\u7e46\u7e47\u7e48\u7e49\u7e4a\u7e4b\u7e4c\u7e4d\u7e4e\u7e4f\u7e50\u7e51\u7e52\u7e53\u7e54\u7e55\u7e56\u7e57\u7e58\u7e59\u7e5a\u7e5b\u7e5c\u7e5d\u7e5e\u7e5f\u7e60\u7e61\u7e62\u7e63\u7e64\u7e65\u7e66\u7e67\u7e68\u7e69\u7e6a\u7e6b\u7e6c\u7e6d\u7e6e\u7e6f\u7e70\u7e71\u7e72\u7e73\u7e74\u7e75\u7e76\u7e77\u7e78\u7e79\u7e7a\u7e7b\u7e7c\u7e7d\u7e7e\u7e7f\u7e80\u7e81\u7e82\u7e83\u7e84\u7e85\u7e86\u7e87\u7e88\u7e89\u7e8a\u7e8b\u7e8c\u7e8d\u7e8e\u7e8f\u7e90\u7e91\u7e92\u7e93\u7e94\u7e95\u7e96\u7e97\u7e98\u7e99\u7e9a\u7e9b\u7e9c\u7e9d\u7e9e\u7e9f\u7ea0\u7ea1\u7ea2\u7ea3\u7ea4\u7ea5\u7ea6\u7ea7\u7ea8\u7ea9\u7eaa\u7eab\u7eac\u7ead\u7eae\u7eaf\u7eb0\u7eb1\u7eb2\u7eb3\u7eb4\u7eb5\u7eb6\u7eb7\u7eb8\u7eb9\u7eba\u7ebb\u7ebc\u7ebd\u7ebe\u7ebf\u7ec0\u7ec1\u7ec2\u7ec3\u7ec4\u7ec5\u7ec6\u7ec7\u7ec8\u7ec9\u7eca\u7ecb\u7ecc\u7ecd\u7ece\u7ecf\u7ed0\u7ed1\u7ed2\u7ed3\u7ed4\u7ed5\u7ed6\u7ed7\u7ed8\u7ed9\u7eda\u7edb\u7edc\u7edd\u7ede\u7edf\u7ee0\u7ee1\u7ee2\u7ee3\u7ee4\u7ee5\u7ee6\u7ee7\u7ee8\u7ee9\u7eea\u7eeb\u7eec\u7eed\u7eee\u7eef\u7ef0\u7ef1\u7ef2\u7ef3\u7ef4\u7ef5\u7ef6\u7ef7\u7ef8\u7ef9\u7efa\u7efb\u7efc\u7efd\u7efe\u7eff\u7f00\u7f01\u7f02\u7f03\u7f04\u7f05\u7f06\u7f07\u7f08\u7f09\u7f0a\u7f0b\u7f0c\u7f0d\u7f0e\u7f0f\u7f10\u7f11\u7f12\u7f13\u7f14\u7f15\u7f16\u7f17\u7f18\u7f19\u7f1a\u7f1b\u7f1c\u7f1d\u7f1e\u7f1f\u7f20\u7f21\u7f22\u7f23\u7f24\u7f25\u7f26\u7f27\u7f28\u7f29\u7f2a\u7f2b\u7f2c\u7f2d\u7f2e\u7f2f\u7f30\u7f31\u7f32\u7f33\u7f34\u7f35\u7f36\u7f37\u7f38\u7f39\u7f3a\u7f3b\u7f3c\u7f3d\u7f3e\u7f3f\u7f40\u7f41\u7f42\u7f43\u7f44\u7f45\u7f46\u7f47\u7f48\u7f49\u7f4a\u7f4b\u7f4c\u7f4d\u7f4e\u7f4f\u7f50\u7f51\u7f52\u7f53\u7f54\u7f55\u7f56\u7f57\u7f58\u7f59\u7f5a\u7f5b\u7f5c\u7f5d\u7f5e\u7f5f\u7f60\u7f61\u7f62\u7f63\u7f64\u7f65\u7f66\u7f67\u7f68\u7f69\u7f6a\u7f6b\u7f6c\u7f6d\u7f6e\u7f6f\u7f70\u7f71\u7f72\u7f73\u7f74\u7f75\u7f76\u7f77\u7f78\u7f79\u7f7a\u7f7b\u7f7c\u7f7d\u7f7e\u7f7f\u7f80\u7f81\u7f82\u7f83\u7f84\u7f85\u7f86\u7f87\u7f88\u7f89\u7f8a\u7f8b\u7f8c\u7f8d\u7f8e\u7f8f\u7f90\u7f91\u7f92\u7f93\u7f94\u7f95\u7f96\u7f97\u7f98\u7f99\u7f9a\u7f9b\u7f9c\u7f9d\u7f9e\u7f9f\u7fa0\u7fa1\u7fa2\u7fa3\u7fa4\u7fa5\u7fa6\u7fa7\u7fa8\u7fa9\u7faa\u7fab\u7fac\u7fad\u7fae\u7faf\u7fb0\u7fb1\u7fb2\u7fb3\u7fb4\u7fb5\u7fb6\u7fb7\u7fb8\u7fb9\u7fba\u7fbb\u7fbc\u7fbd\u7fbe\u7fbf\u7fc0\u7fc1\u7fc2\u7fc3\u7fc4\u7fc5\u7fc6\u7fc7\u7fc8\u7fc9\u7fca\u7fcb\u7fcc\u7fcd\u7fce\u7fcf\u7fd0\u7fd1\u7fd2\u7fd3\u7fd4\u7fd5\u7fd6\u7fd7\u7fd8\u7fd9\u7fda\u7fdb\u7fdc\u7fdd\u7fde\u7fdf\u7fe0\u7fe1\u7fe2\u7fe3\u7fe4\u7fe5\u7fe6\u7fe7\u7fe8\u7fe9\u7fea\u7feb\u7fec\u7fed\u7fee\u7fef\u7ff0\u7ff1\u7ff2\u7ff3\u7ff4\u7ff5\u7ff6\u7ff7\u7ff8\u7ff9\u7ffa\u7ffb\u7ffc\u7ffd\u7ffe\u7fff\u8000\u8001\u8002\u8003\u8004\u8005\u8006\u8007\u8008\u8009\u800a\u800b\u800c\u800d\u800e\u800f\u8010\u8011\u8012\u8013\u8014\u8015\u8016\u8017\u8018\u8019\u801a\u801b\u801c\u801d\u801e\u801f\u8020\u8021\u8022\u8023\u8024\u8025\u8026\u8027\u8028\u8029\u802a\u802b\u802c\u802d\u802e\u802f\u8030\u8031\u8032\u8033\u8034\u8035\u8036\u8037\u8038\u8039\u803a\u803b\u803c\u803d\u803e\u803f\u8040\u8041\u8042\u8043\u8044\u8045\u8046\u8047\u8048\u8049\u804a\u804b\u804c\u804d\u804e\u804f\u8050\u8051\u8052\u8053\u8054\u8055\u8056\u8057\u8058\u8059\u805a\u805b\u805c\u805d\u805e\u805f\u8060\u8061\u8062\u8063\u8064\u8065\u8066\u8067\u8068\u8069\u806a\u806b\u806c\u806d\u806e\u806f\u8070\u8071\u8072\u8073\u8074\u8075\u8076\u8077\u8078\u8079\u807a\u807b\u807c\u807d\u807e\u807f\u8080\u8081\u8082\u8083\u8084\u8085\u8086\u8087\u8088\u8089\u808a\u808b\u808c\u808d\u808e\u808f\u8090\u8091\u8092\u8093\u8094\u8095\u8096\u8097\u8098\u8099\u809a\u809b\u809c\u809d\u809e\u809f\u80a0\u80a1\u80a2\u80a3\u80a4\u80a5\u80a6\u80a7\u80a8\u80a9\u80aa\u80ab\u80ac\u80ad\u80ae\u80af\u80b0\u80b1\u80b2\u80b3\u80b4\u80b5\u80b6\u80b7\u80b8\u80b9\u80ba\u80bb\u80bc\u80bd\u80be\u80bf\u80c0\u80c1\u80c2\u80c3\u80c4\u80c5\u80c6\u80c7\u80c8\u80c9\u80ca\u80cb\u80cc\u80cd\u80ce\u80cf\u80d0\u80d1\u80d2\u80d3\u80d4\u80d5\u80d6\u80d7\u80d8\u80d9\u80da\u80db\u80dc\u80dd\u80de\u80df\u80e0\u80e1\u80e2\u80e3\u80e4\u80e5\u80e6\u80e7\u80e8\u80e9\u80ea\u80eb\u80ec\u80ed\u80ee\u80ef\u80f0\u80f1\u80f2\u80f3\u80f4\u80f5\u80f6\u80f7\u80f8\u80f9\u80fa\u80fb\u80fc\u80fd\u80fe\u80ff\u8100\u8101\u8102\u8103\u8104\u8105\u8106\u8107\u8108\u8109\u810a\u810b\u810c\u810d\u810e\u810f\u8110\u8111\u8112\u8113\u8114\u8115\u8116\u8117\u8118\u8119\u811a\u811b\u811c\u811d\u811e\u811f\u8120\u8121\u8122\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812a\u812b\u812c\u812d\u812e\u812f\u8130\u8131\u8132\u8133\u8134\u8135\u8136\u8137\u8138\u8139\u813a\u813b\u813c\u813d\u813e\u813f\u8140\u8141\u8142\u8143\u8144\u8145\u8146\u8147\u8148\u8149\u814a\u814b\u814c\u814d\u814e\u814f\u8150\u8151\u8152\u8153\u8154\u8155\u8156\u8157\u8158\u8159\u815a\u815b\u815c\u815d\u815e\u815f\u8160\u8161\u8162\u8163\u8164\u8165\u8166\u8167\u8168\u8169\u816a\u816b\u816c\u816d\u816e\u816f\u8170\u8171\u8172\u8173\u8174\u8175\u8176\u8177\u8178\u8179\u817a\u817b\u817c\u817d\u817e\u817f\u8180\u8181\u8182\u8183\u8184\u8185\u8186\u8187\u8188\u8189\u818a\u818b\u818c\u818d\u818e\u818f\u8190\u8191\u8192\u8193\u8194\u8195\u8196\u8197\u8198\u8199\u819a\u819b\u819c\u819d\u819e\u819f\u81a0\u81a1\u81a2\u81a3\u81a4\u81a5\u81a6\u81a7\u81a8\u81a9\u81aa\u81ab\u81ac\u81ad\u81ae\u81af\u81b0\u81b1\u81b2\u81b3\u81b4\u81b5\u81b6\u81b7\u81b8\u81b9\u81ba\u81bb\u81bc\u81bd\u81be\u81bf\u81c0\u81c1\u81c2\u81c3\u81c4\u81c5\u81c6\u81c7\u81c8\u81c9\u81ca\u81cb\u81cc\u81cd\u81ce\u81cf\u81d0\u81d1\u81d2\u81d3\u81d4\u81d5\u81d6\u81d7\u81d8\u81d9\u81da\u81db\u81dc\u81dd\u81de\u81df\u81e0\u81e1\u81e2\u81e3\u81e4\u81e5\u81e6\u81e7\u81e8\u81e9\u81ea\u81eb\u81ec\u81ed\u81ee\u81ef\u81f0\u81f1\u81f2\u81f3\u81f4\u81f5\u81f6\u81f7\u81f8\u81f9\u81fa\u81fb\u81fc\u81fd\u81fe\u81ff\u8200\u8201\u8202\u8203\u8204\u8205\u8206\u8207\u8208\u8209\u820a\u820b\u820c\u820d\u820e\u820f\u8210\u8211\u8212\u8213\u8214\u8215\u8216\u8217\u8218\u8219\u821a\u821b\u821c\u821d\u821e\u821f\u8220\u8221\u8222\u8223\u8224\u8225\u8226\u8227\u8228\u8229\u822a\u822b\u822c\u822d\u822e\u822f\u8230\u8231\u8232\u8233\u8234\u8235\u8236\u8237\u8238\u8239\u823a\u823b\u823c\u823d\u823e\u823f\u8240\u8241\u8242\u8243\u8244\u8245\u8246\u8247\u8248\u8249\u824a\u824b\u824c\u824d\u824e\u824f\u8250\u8251\u8252\u8253\u8254\u8255\u8256\u8257\u8258\u8259\u825a\u825b\u825c\u825d\u825e\u825f\u8260\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8268\u8269\u826a\u826b\u826c\u826d\u826e\u826f\u8270\u8271\u8272\u8273\u8274\u8275\u8276\u8277\u8278\u8279\u827a\u827b\u827c\u827d\u827e\u827f\u8280\u8281\u8282\u8283\u8284\u8285\u8286\u8287\u8288\u8289\u828a\u828b\u828c\u828d\u828e\u828f\u8290\u8291\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299\u829a\u829b\u829c\u829d\u829e\u829f\u82a0\u82a1\u82a2\u82a3\u82a4\u82a5\u82a6\u82a7\u82a8\u82a9\u82aa\u82ab\u82ac\u82ad\u82ae\u82af\u82b0\u82b1\u82b2\u82b3\u82b4\u82b5\u82b6\u82b7\u82b8\u82b9\u82ba\u82bb\u82bc\u82bd\u82be\u82bf\u82c0\u82c1\u82c2\u82c3\u82c4\u82c5\u82c6\u82c7\u82c8\u82c9\u82ca\u82cb\u82cc\u82cd\u82ce\u82cf\u82d0\u82d1\u82d2\u82d3\u82d4\u82d5\u82d6\u82d7\u82d8\u82d9\u82da\u82db\u82dc\u82dd\u82de\u82df\u82e0\u82e1\u82e2\u82e3\u82e4\u82e5\u82e6\u82e7\u82e8\u82e9\u82ea\u82eb\u82ec\u82ed\u82ee\u82ef\u82f0\u82f1\u82f2\u82f3\u82f4\u82f5\u82f6\u82f7\u82f8\u82f9\u82fa\u82fb\u82fc\u82fd\u82fe\u82ff\u8300\u8301\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309\u830a\u830b\u830c\u830d\u830e\u830f\u8310\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318\u8319\u831a\u831b\u831c\u831d\u831e\u831f\u8320\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328\u8329\u832a\u832b\u832c\u832d\u832e\u832f\u8330\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338\u8339\u833a\u833b\u833c\u833d\u833e\u833f\u8340\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834a\u834b\u834c\u834d\u834e\u834f\u8350\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358\u8359\u835a\u835b\u835c\u835d\u835e\u835f\u8360\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368\u8369\u836a\u836b\u836c\u836d\u836e\u836f\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378\u8379\u837a\u837b\u837c\u837d\u837e\u837f\u8380\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388\u8389\u838a\u838b\u838c\u838d\u838e\u838f\u8390\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398\u8399\u839a\u839b\u839c\u839d\u839e\u839f\u83a0\u83a1\u83a2\u83a3\u83a4\u83a5\u83a6\u83a7\u83a8\u83a9\u83aa\u83ab\u83ac\u83ad\u83ae\u83af\u83b0\u83b1\u83b2\u83b3\u83b4\u83b5\u83b6\u83b7\u83b8\u83b9\u83ba\u83bb\u83bc\u83bd\u83be\u83bf\u83c0\u83c1\u83c2\u83c3\u83c4\u83c5\u83c6\u83c7\u83c8\u83c9\u83ca\u83cb\u83cc\u83cd\u83ce\u83cf\u83d0\u83d1\u83d2\u83d3\u83d4\u83d5\u83d6\u83d7\u83d8\u83d9\u83da\u83db\u83dc\u83dd\u83de\u83df\u83e0\u83e1\u83e2\u83e3\u83e4\u83e5\u83e6\u83e7\u83e8\u83e9\u83ea\u83eb\u83ec\u83ed\u83ee\u83ef\u83f0\u83f1\u83f2\u83f3\u83f4\u83f5\u83f6\u83f7\u83f8\u83f9\u83fa\u83fb\u83fc\u83fd\u83fe\u83ff\u8400\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408\u8409\u840a\u840b\u840c\u840d\u840e\u840f\u8410\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418\u8419\u841a\u841b\u841c\u841d\u841e\u841f\u8420\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428\u8429\u842a\u842b\u842c\u842d\u842e\u842f\u8430\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438\u8439\u843a\u843b\u843c\u843d\u843e\u843f\u8440\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448\u8449\u844a\u844b\u844c\u844d\u844e\u844f\u8450\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458\u8459\u845a\u845b\u845c\u845d\u845e\u845f\u8460\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468\u8469\u846a\u846b\u846c\u846d\u846e\u846f\u8470\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478\u8479\u847a\u847b\u847c\u847d\u847e\u847f\u8480\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488\u8489\u848a\u848b\u848c\u848d\u848e\u848f\u8490\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498\u8499\u849a\u849b\u849c\u849d\u849e\u849f\u84a0\u84a1\u84a2\u84a3\u84a4\u84a5\u84a6\u84a7\u84a8\u84a9\u84aa\u84ab\u84ac\u84ad\u84ae\u84af\u84b0\u84b1\u84b2\u84b3\u84b4\u84b5\u84b6\u84b7\u84b8\u84b9\u84ba\u84bb\u84bc\u84bd\u84be\u84bf\u84c0\u84c1\u84c2\u84c3\u84c4\u84c5\u84c6\u84c7\u84c8\u84c9\u84ca\u84cb\u84cc\u84cd\u84ce\u84cf\u84d0\u84d1\u84d2\u84d3\u84d4\u84d5\u84d6\u84d7\u84d8\u84d9\u84da\u84db\u84dc\u84dd\u84de\u84df\u84e0\u84e1\u84e2\u84e3\u84e4\u84e5\u84e6\u84e7\u84e8\u84e9\u84ea\u84eb\u84ec\u84ed\u84ee\u84ef\u84f0\u84f1\u84f2\u84f3\u84f4\u84f5\u84f6\u84f7\u84f8\u84f9\u84fa\u84fb\u84fc\u84fd\u84fe\u84ff\u8500\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508\u8509\u850a\u850b\u850c\u850d\u850e\u850f\u8510\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518\u8519\u851a\u851b\u851c\u851d\u851e\u851f\u8520\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852a\u852b\u852c\u852d\u852e\u852f\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538\u8539\u853a\u853b\u853c\u853d\u853e\u853f\u8540\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548\u8549\u854a\u854b\u854c\u854d\u854e\u854f\u8550\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855a\u855b\u855c\u855d\u855e\u855f\u8560\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568\u8569\u856a\u856b\u856c\u856d\u856e\u856f\u8570\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578\u8579\u857a\u857b\u857c\u857d\u857e\u857f\u8580\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588\u8589\u858a\u858b\u858c\u858d\u858e\u858f\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859a\u859b\u859c\u859d\u859e\u859f\u85a0\u85a1\u85a2\u85a3\u85a4\u85a5\u85a6\u85a7\u85a8\u85a9\u85aa\u85ab\u85ac\u85ad\u85ae\u85af\u85b0\u85b1\u85b2\u85b3\u85b4\u85b5\u85b6\u85b7\u85b8\u85b9\u85ba\u85bb\u85bc\u85bd\u85be\u85bf\u85c0\u85c1\u85c2\u85c3\u85c4\u85c5\u85c6\u85c7\u85c8\u85c9\u85ca\u85cb\u85cc\u85cd\u85ce\u85cf\u85d0\u85d1\u85d2\u85d3\u85d4\u85d5\u85d6\u85d7\u85d8\u85d9\u85da\u85db\u85dc\u85dd\u85de\u85df\u85e0\u85e1\u85e2\u85e3\u85e4\u85e5\u85e6\u85e7\u85e8\u85e9\u85ea\u85eb\u85ec\u85ed\u85ee\u85ef\u85f0\u85f1\u85f2\u85f3\u85f4\u85f5\u85f6\u85f7\u85f8\u85f9\u85fa\u85fb\u85fc\u85fd\u85fe\u85ff\u8600\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608\u8609\u860a\u860b\u860c\u860d\u860e\u860f\u8610\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618\u8619\u861a\u861b\u861c\u861d\u861e\u861f\u8620\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628\u8629\u862a\u862b\u862c\u862d\u862e\u862f\u8630\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638\u8639\u863a\u863b\u863c\u863d\u863e\u863f\u8640\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648\u8649\u864a\u864b\u864c\u864d\u864e\u864f\u8650\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658\u8659\u865a\u865b\u865c\u865d\u865e\u865f\u8660\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668\u8669\u866a\u866b\u866c\u866d\u866e\u866f\u8670\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8679\u867a\u867b\u867c\u867d\u867e\u867f\u8680\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688\u8689\u868a\u868b\u868c\u868d\u868e\u868f\u8690\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698\u8699\u869a\u869b\u869c\u869d\u869e\u869f\u86a0\u86a1\u86a2\u86a3\u86a4\u86a5\u86a6\u86a7\u86a8\u86a9\u86aa\u86ab\u86ac\u86ad\u86ae\u86af\u86b0\u86b1\u86b2\u86b3\u86b4\u86b5\u86b6\u86b7\u86b8\u86b9\u86ba\u86bb\u86bc\u86bd\u86be\u86bf\u86c0\u86c1\u86c2\u86c3\u86c4\u86c5\u86c6\u86c7\u86c8\u86c9\u86ca\u86cb\u86cc\u86cd\u86ce\u86cf\u86d0\u86d1\u86d2\u86d3\u86d4\u86d5\u86d6\u86d7\u86d8\u86d9\u86da\u86db\u86dc\u86dd\u86de\u86df\u86e0\u86e1\u86e2\u86e3\u86e4\u86e5\u86e6\u86e7\u86e8\u86e9\u86ea\u86eb\u86ec\u86ed\u86ee\u86ef\u86f0\u86f1\u86f2\u86f3\u86f4\u86f5\u86f6\u86f7\u86f8\u86f9\u86fa\u86fb\u86fc\u86fd\u86fe\u86ff\u8700\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708\u8709\u870a\u870b\u870c\u870d\u870e\u870f\u8710\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718\u8719\u871a\u871b\u871c\u871d\u871e\u871f\u8720\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728\u8729\u872a\u872b\u872c\u872d\u872e\u872f\u8730\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738\u8739\u873a\u873b\u873c\u873d\u873e\u873f\u8740\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748\u8749\u874a\u874b\u874c\u874d\u874e\u874f\u8750\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758\u8759\u875a\u875b\u875c\u875d\u875e\u875f\u8760\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768\u8769\u876a\u876b\u876c\u876d\u876e\u876f\u8770\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778\u8779\u877a\u877b\u877c\u877d\u877e\u877f\u8780\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788\u8789\u878a\u878b\u878c\u878d\u878e\u878f\u8790\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798\u8799\u879a\u879b\u879c\u879d\u879e\u879f\u87a0\u87a1\u87a2\u87a3\u87a4\u87a5\u87a6\u87a7\u87a8\u87a9\u87aa\u87ab\u87ac\u87ad\u87ae\u87af\u87b0\u87b1\u87b2\u87b3\u87b4\u87b5\u87b6\u87b7\u87b8\u87b9\u87ba\u87bb\u87bc\u87bd\u87be\u87bf\u87c0\u87c1\u87c2\u87c3\u87c4\u87c5\u87c6\u87c7\u87c8\u87c9\u87ca\u87cb\u87cc\u87cd\u87ce\u87cf\u87d0\u87d1\u87d2\u87d3\u87d4\u87d5\u87d6\u87d7\u87d8\u87d9\u87da\u87db\u87dc\u87dd\u87de\u87df\u87e0\u87e1\u87e2\u87e3\u87e4\u87e5\u87e6\u87e7\u87e8\u87e9\u87ea\u87eb\u87ec\u87ed\u87ee\u87ef\u87f0\u87f1\u87f2\u87f3\u87f4\u87f5\u87f6\u87f7\u87f8\u87f9\u87fa\u87fb\u87fc\u87fd\u87fe\u87ff\u8800\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808\u8809\u880a\u880b\u880c\u880d\u880e\u880f\u8810\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818\u8819\u881a\u881b\u881c\u881d\u881e\u881f\u8820\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828\u8829\u882a\u882b\u882c\u882d\u882e\u882f\u8830\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838\u8839\u883a\u883b\u883c\u883d\u883e\u883f\u8840\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848\u8849\u884a\u884b\u884c\u884d\u884e\u884f\u8850\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858\u8859\u885a\u885b\u885c\u885d\u885e\u885f\u8860\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868\u8869\u886a\u886b\u886c\u886d\u886e\u886f\u8870\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878\u8879\u887a\u887b\u887c\u887d\u887e\u887f\u8880\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888\u8889\u888a\u888b\u888c\u888d\u888e\u888f\u8890\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898\u8899\u889a\u889b\u889c\u889d\u889e\u889f\u88a0\u88a1\u88a2\u88a3\u88a4\u88a5\u88a6\u88a7\u88a8\u88a9\u88aa\u88ab\u88ac\u88ad\u88ae\u88af\u88b0\u88b1\u88b2\u88b3\u88b4\u88b5\u88b6\u88b7\u88b8\u88b9\u88ba\u88bb\u88bc\u88bd\u88be\u88bf\u88c0\u88c1\u88c2\u88c3\u88c4\u88c5\u88c6\u88c7\u88c8\u88c9\u88ca\u88cb\u88cc\u88cd\u88ce\u88cf\u88d0\u88d1\u88d2\u88d3\u88d4\u88d5\u88d6\u88d7\u88d8\u88d9\u88da\u88db\u88dc\u88dd\u88de\u88df\u88e0\u88e1\u88e2\u88e3\u88e4\u88e5\u88e6\u88e7\u88e8\u88e9\u88ea\u88eb\u88ec\u88ed\u88ee\u88ef\u88f0\u88f1\u88f2\u88f3\u88f4\u88f5\u88f6\u88f7\u88f8\u88f9\u88fa\u88fb\u88fc\u88fd\u88fe\u88ff\u8900\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908\u8909\u890a\u890b\u890c\u890d\u890e\u890f\u8910\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918\u8919\u891a\u891b\u891c\u891d\u891e\u891f\u8920\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928\u8929\u892a\u892b\u892c\u892d\u892e\u892f\u8930\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938\u8939\u893a\u893b\u893c\u893d\u893e\u893f\u8940\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948\u8949\u894a\u894b\u894c\u894d\u894e\u894f\u8950\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958\u8959\u895a\u895b\u895c\u895d\u895e\u895f\u8960\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968\u8969\u896a\u896b\u896c\u896d\u896e\u896f\u8970\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978\u8979\u897a\u897b\u897c\u897d\u897e\u897f\u8980\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988\u8989\u898a\u898b\u898c\u898d\u898e\u898f\u8990\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998\u8999\u899a\u899b\u899c\u899d\u899e\u899f\u89a0\u89a1\u89a2\u89a3\u89a4\u89a5\u89a6\u89a7\u89a8\u89a9\u89aa\u89ab\u89ac\u89ad\u89ae\u89af\u89b0\u89b1\u89b2\u89b3\u89b4\u89b5\u89b6\u89b7\u89b8\u89b9\u89ba\u89bb\u89bc\u89bd\u89be\u89bf\u89c0\u89c1\u89c2\u89c3\u89c4\u89c5\u89c6\u89c7\u89c8\u89c9\u89ca\u89cb\u89cc\u89cd\u89ce\u89cf\u89d0\u89d1\u89d2\u89d3\u89d4\u89d5\u89d6\u89d7\u89d8\u89d9\u89da\u89db\u89dc\u89dd\u89de\u89df\u89e0\u89e1\u89e2\u89e3\u89e4\u89e5\u89e6\u89e7\u89e8\u89e9\u89ea\u89eb\u89ec\u89ed\u89ee\u89ef\u89f0\u89f1\u89f2\u89f3\u89f4\u89f5\u89f6\u89f7\u89f8\u89f9\u89fa\u89fb\u89fc\u89fd\u89fe\u89ff\u8a00\u8a01\u8a02\u8a03\u8a04\u8a05\u8a06\u8a07\u8a08\u8a09\u8a0a\u8a0b\u8a0c\u8a0d\u8a0e\u8a0f\u8a10\u8a11\u8a12\u8a13\u8a14\u8a15\u8a16\u8a17\u8a18\u8a19\u8a1a\u8a1b\u8a1c\u8a1d\u8a1e\u8a1f\u8a20\u8a21\u8a22\u8a23\u8a24\u8a25\u8a26\u8a27\u8a28\u8a29\u8a2a\u8a2b\u8a2c\u8a2d\u8a2e\u8a2f\u8a30\u8a31\u8a32\u8a33\u8a34\u8a35\u8a36\u8a37\u8a38\u8a39\u8a3a\u8a3b\u8a3c\u8a3d\u8a3e\u8a3f\u8a40\u8a41\u8a42\u8a43\u8a44\u8a45\u8a46\u8a47\u8a48\u8a49\u8a4a\u8a4b\u8a4c\u8a4d\u8a4e\u8a4f\u8a50\u8a51\u8a52\u8a53\u8a54\u8a55\u8a56\u8a57\u8a58\u8a59\u8a5a\u8a5b\u8a5c\u8a5d\u8a5e\u8a5f\u8a60\u8a61\u8a62\u8a63\u8a64\u8a65\u8a66\u8a67\u8a68\u8a69\u8a6a\u8a6b\u8a6c\u8a6d\u8a6e\u8a6f\u8a70\u8a71\u8a72\u8a73\u8a74\u8a75\u8a76\u8a77\u8a78\u8a79\u8a7a\u8a7b\u8a7c\u8a7d\u8a7e\u8a7f\u8a80\u8a81\u8a82\u8a83\u8a84\u8a85\u8a86\u8a87\u8a88\u8a89\u8a8a\u8a8b\u8a8c\u8a8d\u8a8e\u8a8f\u8a90\u8a91\u8a92\u8a93\u8a94\u8a95\u8a96\u8a97\u8a98\u8a99\u8a9a\u8a9b\u8a9c\u8a9d\u8a9e\u8a9f\u8aa0\u8aa1\u8aa2\u8aa3\u8aa4\u8aa5\u8aa6\u8aa7\u8aa8\u8aa9\u8aaa\u8aab\u8aac\u8aad\u8aae\u8aaf\u8ab0\u8ab1\u8ab2\u8ab3\u8ab4\u8ab5\u8ab6\u8ab7\u8ab8\u8ab9\u8aba\u8abb\u8abc\u8abd\u8abe\u8abf\u8ac0\u8ac1\u8ac2\u8ac3\u8ac4\u8ac5\u8ac6\u8ac7\u8ac8\u8ac9\u8aca\u8acb\u8acc\u8acd\u8ace\u8acf\u8ad0\u8ad1\u8ad2\u8ad3\u8ad4\u8ad5\u8ad6\u8ad7\u8ad8\u8ad9\u8ada\u8adb\u8adc\u8add\u8ade\u8adf\u8ae0\u8ae1\u8ae2\u8ae3\u8ae4\u8ae5\u8ae6\u8ae7\u8ae8\u8ae9\u8aea\u8aeb\u8aec\u8aed\u8aee\u8aef\u8af0\u8af1\u8af2\u8af3\u8af4\u8af5\u8af6\u8af7\u8af8\u8af9\u8afa\u8afb\u8afc\u8afd\u8afe\u8aff\u8b00\u8b01\u8b02\u8b03\u8b04\u8b05\u8b06\u8b07\u8b08\u8b09\u8b0a\u8b0b\u8b0c\u8b0d\u8b0e\u8b0f\u8b10\u8b11\u8b12\u8b13\u8b14\u8b15\u8b16\u8b17\u8b18\u8b19\u8b1a\u8b1b\u8b1c\u8b1d\u8b1e\u8b1f\u8b20\u8b21\u8b22\u8b23\u8b24\u8b25\u8b26\u8b27\u8b28\u8b29\u8b2a\u8b2b\u8b2c\u8b2d\u8b2e\u8b2f\u8b30\u8b31\u8b32\u8b33\u8b34\u8b35\u8b36\u8b37\u8b38\u8b39\u8b3a\u8b3b\u8b3c\u8b3d\u8b3e\u8b3f\u8b40\u8b41\u8b42\u8b43\u8b44\u8b45\u8b46\u8b47\u8b48\u8b49\u8b4a\u8b4b\u8b4c\u8b4d\u8b4e\u8b4f\u8b50\u8b51\u8b52\u8b53\u8b54\u8b55\u8b56\u8b57\u8b58\u8b59\u8b5a\u8b5b\u8b5c\u8b5d\u8b5e\u8b5f\u8b60\u8b61\u8b62\u8b63\u8b64\u8b65\u8b66\u8b67\u8b68\u8b69\u8b6a\u8b6b\u8b6c\u8b6d\u8b6e\u8b6f\u8b70\u8b71\u8b72\u8b73\u8b74\u8b75\u8b76\u8b77\u8b78\u8b79\u8b7a\u8b7b\u8b7c\u8b7d\u8b7e\u8b7f\u8b80\u8b81\u8b82\u8b83\u8b84\u8b85\u8b86\u8b87\u8b88\u8b89\u8b8a\u8b8b\u8b8c\u8b8d\u8b8e\u8b8f\u8b90\u8b91\u8b92\u8b93\u8b94\u8b95\u8b96\u8b97\u8b98\u8b99\u8b9a\u8b9b\u8b9c\u8b9d\u8b9e\u8b9f\u8ba0\u8ba1\u8ba2\u8ba3\u8ba4\u8ba5\u8ba6\u8ba7\u8ba8\u8ba9\u8baa\u8bab\u8bac\u8bad\u8bae\u8baf\u8bb0\u8bb1\u8bb2\u8bb3\u8bb4\u8bb5\u8bb6\u8bb7\u8bb8\u8bb9\u8bba\u8bbb\u8bbc\u8bbd\u8bbe\u8bbf\u8bc0\u8bc1\u8bc2\u8bc3\u8bc4\u8bc5\u8bc6\u8bc7\u8bc8\u8bc9\u8bca\u8bcb\u8bcc\u8bcd\u8bce\u8bcf\u8bd0\u8bd1\u8bd2\u8bd3\u8bd4\u8bd5\u8bd6\u8bd7\u8bd8\u8bd9\u8bda\u8bdb\u8bdc\u8bdd\u8bde\u8bdf\u8be0\u8be1\u8be2\u8be3\u8be4\u8be5\u8be6\u8be7\u8be8\u8be9\u8bea\u8beb\u8bec\u8bed\u8bee\u8bef\u8bf0\u8bf1\u8bf2\u8bf3\u8bf4\u8bf5\u8bf6\u8bf7\u8bf8\u8bf9\u8bfa\u8bfb\u8bfc\u8bfd\u8bfe\u8bff\u8c00\u8c01\u8c02\u8c03\u8c04\u8c05\u8c06\u8c07\u8c08\u8c09\u8c0a\u8c0b\u8c0c\u8c0d\u8c0e\u8c0f\u8c10\u8c11\u8c12\u8c13\u8c14\u8c15\u8c16\u8c17\u8c18\u8c19\u8c1a\u8c1b\u8c1c\u8c1d\u8c1e\u8c1f\u8c20\u8c21\u8c22\u8c23\u8c24\u8c25\u8c26\u8c27\u8c28\u8c29\u8c2a\u8c2b\u8c2c\u8c2d\u8c2e\u8c2f\u8c30\u8c31\u8c32\u8c33\u8c34\u8c35\u8c36\u8c37\u8c38\u8c39\u8c3a\u8c3b\u8c3c\u8c3d\u8c3e\u8c3f\u8c40\u8c41\u8c42\u8c43\u8c44\u8c45\u8c46\u8c47\u8c48\u8c49\u8c4a\u8c4b\u8c4c\u8c4d\u8c4e\u8c4f\u8c50\u8c51\u8c52\u8c53\u8c54\u8c55\u8c56\u8c57\u8c58\u8c59\u8c5a\u8c5b\u8c5c\u8c5d\u8c5e\u8c5f\u8c60\u8c61\u8c62\u8c63\u8c64\u8c65\u8c66\u8c67\u8c68\u8c69\u8c6a\u8c6b\u8c6c\u8c6d\u8c6e\u8c6f\u8c70\u8c71\u8c72\u8c73\u8c74\u8c75\u8c76\u8c77\u8c78\u8c79\u8c7a\u8c7b\u8c7c\u8c7d\u8c7e\u8c7f\u8c80\u8c81\u8c82\u8c83\u8c84\u8c85\u8c86\u8c87\u8c88\u8c89\u8c8a\u8c8b\u8c8c\u8c8d\u8c8e\u8c8f\u8c90\u8c91\u8c92\u8c93\u8c94\u8c95\u8c96\u8c97\u8c98\u8c99\u8c9a\u8c9b\u8c9c\u8c9d\u8c9e\u8c9f\u8ca0\u8ca1\u8ca2\u8ca3\u8ca4\u8ca5\u8ca6\u8ca7\u8ca8\u8ca9\u8caa\u8cab\u8cac\u8cad\u8cae\u8caf\u8cb0\u8cb1\u8cb2\u8cb3\u8cb4\u8cb5\u8cb6\u8cb7\u8cb8\u8cb9\u8cba\u8cbb\u8cbc\u8cbd\u8cbe\u8cbf\u8cc0\u8cc1\u8cc2\u8cc3\u8cc4\u8cc5\u8cc6\u8cc7\u8cc8\u8cc9\u8cca\u8ccb\u8ccc\u8ccd\u8cce\u8ccf\u8cd0\u8cd1\u8cd2\u8cd3\u8cd4\u8cd5\u8cd6\u8cd7\u8cd8\u8cd9\u8cda\u8cdb\u8cdc\u8cdd\u8cde\u8cdf\u8ce0\u8ce1\u8ce2\u8ce3\u8ce4\u8ce5\u8ce6\u8ce7\u8ce8\u8ce9\u8cea\u8ceb\u8cec\u8ced\u8cee\u8cef\u8cf0\u8cf1\u8cf2\u8cf3\u8cf4\u8cf5\u8cf6\u8cf7\u8cf8\u8cf9\u8cfa\u8cfb\u8cfc\u8cfd\u8cfe\u8cff\u8d00\u8d01\u8d02\u8d03\u8d04\u8d05\u8d06\u8d07\u8d08\u8d09\u8d0a\u8d0b\u8d0c\u8d0d\u8d0e\u8d0f\u8d10\u8d11\u8d12\u8d13\u8d14\u8d15\u8d16\u8d17\u8d18\u8d19\u8d1a\u8d1b\u8d1c\u8d1d\u8d1e\u8d1f\u8d20\u8d21\u8d22\u8d23\u8d24\u8d25\u8d26\u8d27\u8d28\u8d29\u8d2a\u8d2b\u8d2c\u8d2d\u8d2e\u8d2f\u8d30\u8d31\u8d32\u8d33\u8d34\u8d35\u8d36\u8d37\u8d38\u8d39\u8d3a\u8d3b\u8d3c\u8d3d\u8d3e\u8d3f\u8d40\u8d41\u8d42\u8d43\u8d44\u8d45\u8d46\u8d47\u8d48\u8d49\u8d4a\u8d4b\u8d4c\u8d4d\u8d4e\u8d4f\u8d50\u8d51\u8d52\u8d53\u8d54\u8d55\u8d56\u8d57\u8d58\u8d59\u8d5a\u8d5b\u8d5c\u8d5d\u8d5e\u8d5f\u8d60\u8d61\u8d62\u8d63\u8d64\u8d65\u8d66\u8d67\u8d68\u8d69\u8d6a\u8d6b\u8d6c\u8d6d\u8d6e\u8d6f\u8d70\u8d71\u8d72\u8d73\u8d74\u8d75\u8d76\u8d77\u8d78\u8d79\u8d7a\u8d7b\u8d7c\u8d7d\u8d7e\u8d7f\u8d80\u8d81\u8d82\u8d83\u8d84\u8d85\u8d86\u8d87\u8d88\u8d89\u8d8a\u8d8b\u8d8c\u8d8d\u8d8e\u8d8f\u8d90\u8d91\u8d92\u8d93\u8d94\u8d95\u8d96\u8d97\u8d98\u8d99\u8d9a\u8d9b\u8d9c\u8d9d\u8d9e\u8d9f\u8da0\u8da1\u8da2\u8da3\u8da4\u8da5\u8da6\u8da7\u8da8\u8da9\u8daa\u8dab\u8dac\u8dad\u8dae\u8daf\u8db0\u8db1\u8db2\u8db3\u8db4\u8db5\u8db6\u8db7\u8db8\u8db9\u8dba\u8dbb\u8dbc\u8dbd\u8dbe\u8dbf\u8dc0\u8dc1\u8dc2\u8dc3\u8dc4\u8dc5\u8dc6\u8dc7\u8dc8\u8dc9\u8dca\u8dcb\u8dcc\u8dcd\u8dce\u8dcf\u8dd0\u8dd1\u8dd2\u8dd3\u8dd4\u8dd5\u8dd6\u8dd7\u8dd8\u8dd9\u8dda\u8ddb\u8ddc\u8ddd\u8dde\u8ddf\u8de0\u8de1\u8de2\u8de3\u8de4\u8de5\u8de6\u8de7\u8de8\u8de9\u8dea\u8deb\u8dec\u8ded\u8dee\u8def\u8df0\u8df1\u8df2\u8df3\u8df4\u8df5\u8df6\u8df7\u8df8\u8df9\u8dfa\u8dfb\u8dfc\u8dfd\u8dfe\u8dff\u8e00\u8e01\u8e02\u8e03\u8e04\u8e05\u8e06\u8e07\u8e08\u8e09\u8e0a\u8e0b\u8e0c\u8e0d\u8e0e\u8e0f\u8e10\u8e11\u8e12\u8e13\u8e14\u8e15\u8e16\u8e17\u8e18\u8e19\u8e1a\u8e1b\u8e1c\u8e1d\u8e1e\u8e1f\u8e20\u8e21\u8e22\u8e23\u8e24\u8e25\u8e26\u8e27\u8e28\u8e29\u8e2a\u8e2b\u8e2c\u8e2d\u8e2e\u8e2f\u8e30\u8e31\u8e32\u8e33\u8e34\u8e35\u8e36\u8e37\u8e38\u8e39\u8e3a\u8e3b\u8e3c\u8e3d\u8e3e\u8e3f\u8e40\u8e41\u8e42\u8e43\u8e44\u8e45\u8e46\u8e47\u8e48\u8e49\u8e4a\u8e4b\u8e4c\u8e4d\u8e4e\u8e4f\u8e50\u8e51\u8e52\u8e53\u8e54\u8e55\u8e56\u8e57\u8e58\u8e59\u8e5a\u8e5b\u8e5c\u8e5d\u8e5e\u8e5f\u8e60\u8e61\u8e62\u8e63\u8e64\u8e65\u8e66\u8e67\u8e68\u8e69\u8e6a\u8e6b\u8e6c\u8e6d\u8e6e\u8e6f\u8e70\u8e71\u8e72\u8e73\u8e74\u8e75\u8e76\u8e77\u8e78\u8e79\u8e7a\u8e7b\u8e7c\u8e7d\u8e7e\u8e7f\u8e80\u8e81\u8e82\u8e83\u8e84\u8e85\u8e86\u8e87\u8e88\u8e89\u8e8a\u8e8b\u8e8c\u8e8d\u8e8e\u8e8f\u8e90\u8e91\u8e92\u8e93\u8e94\u8e95\u8e96\u8e97\u8e98\u8e99\u8e9a\u8e9b\u8e9c\u8e9d\u8e9e\u8e9f\u8ea0\u8ea1\u8ea2\u8ea3\u8ea4\u8ea5\u8ea6\u8ea7\u8ea8\u8ea9\u8eaa\u8eab\u8eac\u8ead\u8eae\u8eaf\u8eb0\u8eb1\u8eb2\u8eb3\u8eb4\u8eb5\u8eb6\u8eb7\u8eb8\u8eb9\u8eba\u8ebb\u8ebc\u8ebd\u8ebe\u8ebf\u8ec0\u8ec1\u8ec2\u8ec3\u8ec4\u8ec5\u8ec6\u8ec7\u8ec8\u8ec9\u8eca\u8ecb\u8ecc\u8ecd\u8ece\u8ecf\u8ed0\u8ed1\u8ed2\u8ed3\u8ed4\u8ed5\u8ed6\u8ed7\u8ed8\u8ed9\u8eda\u8edb\u8edc\u8edd\u8ede\u8edf\u8ee0\u8ee1\u8ee2\u8ee3\u8ee4\u8ee5\u8ee6\u8ee7\u8ee8\u8ee9\u8eea\u8eeb\u8eec\u8eed\u8eee\u8eef\u8ef0\u8ef1\u8ef2\u8ef3\u8ef4\u8ef5\u8ef6\u8ef7\u8ef8\u8ef9\u8efa\u8efb\u8efc\u8efd\u8efe\u8eff\u8f00\u8f01\u8f02\u8f03\u8f04\u8f05\u8f06\u8f07\u8f08\u8f09\u8f0a\u8f0b\u8f0c\u8f0d\u8f0e\u8f0f\u8f10\u8f11\u8f12\u8f13\u8f14\u8f15\u8f16\u8f17\u8f18\u8f19\u8f1a\u8f1b\u8f1c\u8f1d\u8f1e\u8f1f\u8f20\u8f21\u8f22\u8f23\u8f24\u8f25\u8f26\u8f27\u8f28\u8f29\u8f2a\u8f2b\u8f2c\u8f2d\u8f2e\u8f2f\u8f30\u8f31\u8f32\u8f33\u8f34\u8f35\u8f36\u8f37\u8f38\u8f39\u8f3a\u8f3b\u8f3c\u8f3d\u8f3e\u8f3f\u8f40\u8f41\u8f42\u8f43\u8f44\u8f45\u8f46\u8f47\u8f48\u8f49\u8f4a\u8f4b\u8f4c\u8f4d\u8f4e\u8f4f\u8f50\u8f51\u8f52\u8f53\u8f54\u8f55\u8f56\u8f57\u8f58\u8f59\u8f5a\u8f5b\u8f5c\u8f5d\u8f5e\u8f5f\u8f60\u8f61\u8f62\u8f63\u8f64\u8f65\u8f66\u8f67\u8f68\u8f69\u8f6a\u8f6b\u8f6c\u8f6d\u8f6e\u8f6f\u8f70\u8f71\u8f72\u8f73\u8f74\u8f75\u8f76\u8f77\u8f78\u8f79\u8f7a\u8f7b\u8f7c\u8f7d\u8f7e\u8f7f\u8f80\u8f81\u8f82\u8f83\u8f84\u8f85\u8f86\u8f87\u8f88\u8f89\u8f8a\u8f8b\u8f8c\u8f8d\u8f8e\u8f8f\u8f90\u8f91\u8f92\u8f93\u8f94\u8f95\u8f96\u8f97\u8f98\u8f99\u8f9a\u8f9b\u8f9c\u8f9d\u8f9e\u8f9f\u8fa0\u8fa1\u8fa2\u8fa3\u8fa4\u8fa5\u8fa6\u8fa7\u8fa8\u8fa9\u8faa\u8fab\u8fac\u8fad\u8fae\u8faf\u8fb0\u8fb1\u8fb2\u8fb3\u8fb4\u8fb5\u8fb6\u8fb7\u8fb8\u8fb9\u8fba\u8fbb\u8fbc\u8fbd\u8fbe\u8fbf\u8fc0\u8fc1\u8fc2\u8fc3\u8fc4\u8fc5\u8fc6\u8fc7\u8fc8\u8fc9\u8fca\u8fcb\u8fcc\u8fcd\u8fce\u8fcf\u8fd0\u8fd1\u8fd2\u8fd3\u8fd4\u8fd5\u8fd6\u8fd7\u8fd8\u8fd9\u8fda\u8fdb\u8fdc\u8fdd\u8fde\u8fdf\u8fe0\u8fe1\u8fe2\u8fe3\u8fe4\u8fe5\u8fe6\u8fe7\u8fe8\u8fe9\u8fea\u8feb\u8fec\u8fed\u8fee\u8fef\u8ff0\u8ff1\u8ff2\u8ff3\u8ff4\u8ff5\u8ff6\u8ff7\u8ff8\u8ff9\u8ffa\u8ffb\u8ffc\u8ffd\u8ffe\u8fff\u9000\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008\u9009\u900a\u900b\u900c\u900d\u900e\u900f\u9010\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018\u9019\u901a\u901b\u901c\u901d\u901e\u901f\u9020\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028\u9029\u902a\u902b\u902c\u902d\u902e\u902f\u9030\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038\u9039\u903a\u903b\u903c\u903d\u903e\u903f\u9040\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048\u9049\u904a\u904b\u904c\u904d\u904e\u904f\u9050\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058\u9059\u905a\u905b\u905c\u905d\u905e\u905f\u9060\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068\u9069\u906a\u906b\u906c\u906d\u906e\u906f\u9070\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078\u9079\u907a\u907b\u907c\u907d\u907e\u907f\u9080\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088\u9089\u908a\u908b\u908c\u908d\u908e\u908f\u9090\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098\u9099\u909a\u909b\u909c\u909d\u909e\u909f\u90a0\u90a1\u90a2\u90a3\u90a4\u90a5\u90a6\u90a7\u90a8\u90a9\u90aa\u90ab\u90ac\u90ad\u90ae\u90af\u90b0\u90b1\u90b2\u90b3\u90b4\u90b5\u90b6\u90b7\u90b8\u90b9\u90ba\u90bb\u90bc\u90bd\u90be\u90bf\u90c0\u90c1\u90c2\u90c3\u90c4\u90c5\u90c6\u90c7\u90c8\u90c9\u90ca\u90cb\u90cc\u90cd\u90ce\u90cf\u90d0\u90d1\u90d2\u90d3\u90d4\u90d5\u90d6\u90d7\u90d8\u90d9\u90da\u90db\u90dc\u90dd\u90de\u90df\u90e0\u90e1\u90e2\u90e3\u90e4\u90e5\u90e6\u90e7\u90e8\u90e9\u90ea\u90eb\u90ec\u90ed\u90ee\u90ef\u90f0\u90f1\u90f2\u90f3\u90f4\u90f5\u90f6\u90f7\u90f8\u90f9\u90fa\u90fb\u90fc\u90fd\u90fe\u90ff\u9100\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108\u9109\u910a\u910b\u910c\u910d\u910e\u910f\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118\u9119\u911a\u911b\u911c\u911d\u911e\u911f\u9120\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128\u9129\u912a\u912b\u912c\u912d\u912e\u912f\u9130\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u9139\u913a\u913b\u913c\u913d\u913e\u913f\u9140\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148\u9149\u914a\u914b\u914c\u914d\u914e\u914f\u9150\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158\u9159\u915a\u915b\u915c\u915d\u915e\u915f\u9160\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168\u9169\u916a\u916b\u916c\u916d\u916e\u916f\u9170\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178\u9179\u917a\u917b\u917c\u917d\u917e\u917f\u9180\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188\u9189\u918a\u918b\u918c\u918d\u918e\u918f\u9190\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919a\u919b\u919c\u919d\u919e\u919f\u91a0\u91a1\u91a2\u91a3\u91a4\u91a5\u91a6\u91a7\u91a8\u91a9\u91aa\u91ab\u91ac\u91ad\u91ae\u91af\u91b0\u91b1\u91b2\u91b3\u91b4\u91b5\u91b6\u91b7\u91b8\u91b9\u91ba\u91bb\u91bc\u91bd\u91be\u91bf\u91c0\u91c1\u91c2\u91c3\u91c4\u91c5\u91c6\u91c7\u91c8\u91c9\u91ca\u91cb\u91cc\u91cd\u91ce\u91cf\u91d0\u91d1\u91d2\u91d3\u91d4\u91d5\u91d6\u91d7\u91d8\u91d9\u91da\u91db\u91dc\u91dd\u91de\u91df\u91e0\u91e1\u91e2\u91e3\u91e4\u91e5\u91e6\u91e7\u91e8\u91e9\u91ea\u91eb\u91ec\u91ed\u91ee\u91ef\u91f0\u91f1\u91f2\u91f3\u91f4\u91f5\u91f6\u91f7\u91f8\u91f9\u91fa\u91fb\u91fc\u91fd\u91fe\u91ff\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208\u9209\u920a\u920b\u920c\u920d\u920e\u920f\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218\u9219\u921a\u921b\u921c\u921d\u921e\u921f\u9220\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228\u9229\u922a\u922b\u922c\u922d\u922e\u922f\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238\u9239\u923a\u923b\u923c\u923d\u923e\u923f\u9240\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248\u9249\u924a\u924b\u924c\u924d\u924e\u924f\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258\u9259\u925a\u925b\u925c\u925d\u925e\u925f\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268\u9269\u926a\u926b\u926c\u926d\u926e\u926f\u9270\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278\u9279\u927a\u927b\u927c\u927d\u927e\u927f\u9280\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288\u9289\u928a\u928b\u928c\u928d\u928e\u928f\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929a\u929b\u929c\u929d\u929e\u929f\u92a0\u92a1\u92a2\u92a3\u92a4\u92a5\u92a6\u92a7\u92a8\u92a9\u92aa\u92ab\u92ac\u92ad\u92ae\u92af\u92b0\u92b1\u92b2\u92b3\u92b4\u92b5\u92b6\u92b7\u92b8\u92b9\u92ba\u92bb\u92bc\u92bd\u92be\u92bf\u92c0\u92c1\u92c2\u92c3\u92c4\u92c5\u92c6\u92c7\u92c8\u92c9\u92ca\u92cb\u92cc\u92cd\u92ce\u92cf\u92d0\u92d1\u92d2\u92d3\u92d4\u92d5\u92d6\u92d7\u92d8\u92d9\u92da\u92db\u92dc\u92dd\u92de\u92df\u92e0\u92e1\u92e2\u92e3\u92e4\u92e5\u92e6\u92e7\u92e8\u92e9\u92ea\u92eb\u92ec\u92ed\u92ee\u92ef\u92f0\u92f1\u92f2\u92f3\u92f4\u92f5\u92f6\u92f7\u92f8\u92f9\u92fa\u92fb\u92fc\u92fd\u92fe\u92ff\u9300\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308\u9309\u930a\u930b\u930c\u930d\u930e\u930f\u9310\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931a\u931b\u931c\u931d\u931e\u931f\u9320\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328\u9329\u932a\u932b\u932c\u932d\u932e\u932f\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933a\u933b\u933c\u933d\u933e\u933f\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348\u9349\u934a\u934b\u934c\u934d\u934e\u934f\u9350\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358\u9359\u935a\u935b\u935c\u935d\u935e\u935f\u9360\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368\u9369\u936a\u936b\u936c\u936d\u936e\u936f\u9370\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379\u937a\u937b\u937c\u937d\u937e\u937f\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389\u938a\u938b\u938c\u938d\u938e\u938f\u9390\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939a\u939b\u939c\u939d\u939e\u939f\u93a0\u93a1\u93a2\u93a3\u93a4\u93a5\u93a6\u93a7\u93a8\u93a9\u93aa\u93ab\u93ac\u93ad\u93ae\u93af\u93b0\u93b1\u93b2\u93b3\u93b4\u93b5\u93b6\u93b7\u93b8\u93b9\u93ba\u93bb\u93bc\u93bd\u93be\u93bf\u93c0\u93c1\u93c2\u93c3\u93c4\u93c5\u93c6\u93c7\u93c8\u93c9\u93ca\u93cb\u93cc\u93cd\u93ce\u93cf\u93d0\u93d1\u93d2\u93d3\u93d4\u93d5\u93d6\u93d7\u93d8\u93d9\u93da\u93db\u93dc\u93dd\u93de\u93df\u93e0\u93e1\u93e2\u93e3\u93e4\u93e5\u93e6\u93e7\u93e8\u93e9\u93ea\u93eb\u93ec\u93ed\u93ee\u93ef\u93f0\u93f1\u93f2\u93f3\u93f4\u93f5\u93f6\u93f7\u93f8\u93f9\u93fa\u93fb\u93fc\u93fd\u93fe\u93ff\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940a\u940b\u940c\u940d\u940e\u940f\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u9419\u941a\u941b\u941c\u941d\u941e\u941f\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u9428\u9429\u942a\u942b\u942c\u942d\u942e\u942f\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u9438\u9439\u943a\u943b\u943c\u943d\u943e\u943f\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u9447\u9448\u9449\u944a\u944b\u944c\u944d\u944e\u944f\u9450\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458\u9459\u945a\u945b\u945c\u945d\u945e\u945f\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u9467\u9468\u9469\u946a\u946b\u946c\u946d\u946e\u946f\u9470\u9471\u9472\u9473\u9474\u9475\u9476\u9477\u9478\u9479\u947a\u947b\u947c\u947d\u947e\u947f\u9480\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488\u9489\u948a\u948b\u948c\u948d\u948e\u948f\u9490\u9491\u9492\u9493\u9494\u9495\u9496\u9497\u9498\u9499\u949a\u949b\u949c\u949d\u949e\u949f\u94a0\u94a1\u94a2\u94a3\u94a4\u94a5\u94a6\u94a7\u94a8\u94a9\u94aa\u94ab\u94ac\u94ad\u94ae\u94af\u94b0\u94b1\u94b2\u94b3\u94b4\u94b5\u94b6\u94b7\u94b8\u94b9\u94ba\u94bb\u94bc\u94bd\u94be\u94bf\u94c0\u94c1\u94c2\u94c3\u94c4\u94c5\u94c6\u94c7\u94c8\u94c9\u94ca\u94cb\u94cc\u94cd\u94ce\u94cf\u94d0\u94d1\u94d2\u94d3\u94d4\u94d5\u94d6\u94d7\u94d8\u94d9\u94da\u94db\u94dc\u94dd\u94de\u94df\u94e0\u94e1\u94e2\u94e3\u94e4\u94e5\u94e6\u94e7\u94e8\u94e9\u94ea\u94eb\u94ec\u94ed\u94ee\u94ef\u94f0\u94f1\u94f2\u94f3\u94f4\u94f5\u94f6\u94f7\u94f8\u94f9\u94fa\u94fb\u94fc\u94fd\u94fe\u94ff\u9500\u9501\u9502\u9503\u9504\u9505\u9506\u9507\u9508\u9509\u950a\u950b\u950c\u950d\u950e\u950f\u9510\u9511\u9512\u9513\u9514\u9515\u9516\u9517\u9518\u9519\u951a\u951b\u951c\u951d\u951e\u951f\u9520\u9521\u9522\u9523\u9524\u9525\u9526\u9527\u9528\u9529\u952a\u952b\u952c\u952d\u952e\u952f\u9530\u9531\u9532\u9533\u9534\u9535\u9536\u9537\u9538\u9539\u953a\u953b\u953c\u953d\u953e\u953f\u9540\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548\u9549\u954a\u954b\u954c\u954d\u954e\u954f\u9550\u9551\u9552\u9553\u9554\u9555\u9556\u9557\u9558\u9559\u955a\u955b\u955c\u955d\u955e\u955f\u9560\u9561\u9562\u9563\u9564\u9565\u9566\u9567\u9568\u9569\u956a\u956b\u956c\u956d\u956e\u956f\u9570\u9571\u9572\u9573\u9574\u9575\u9576\u9577\u9578\u9579\u957a\u957b\u957c\u957d\u957e\u957f\u9580\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588\u9589\u958a\u958b\u958c\u958d\u958e\u958f\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u9598\u9599\u959a\u959b\u959c\u959d\u959e\u959f\u95a0\u95a1\u95a2\u95a3\u95a4\u95a5\u95a6\u95a7\u95a8\u95a9\u95aa\u95ab\u95ac\u95ad\u95ae\u95af\u95b0\u95b1\u95b2\u95b3\u95b4\u95b5\u95b6\u95b7\u95b8\u95b9\u95ba\u95bb\u95bc\u95bd\u95be\u95bf\u95c0\u95c1\u95c2\u95c3\u95c4\u95c5\u95c6\u95c7\u95c8\u95c9\u95ca\u95cb\u95cc\u95cd\u95ce\u95cf\u95d0\u95d1\u95d2\u95d3\u95d4\u95d5\u95d6\u95d7\u95d8\u95d9\u95da\u95db\u95dc\u95dd\u95de\u95df\u95e0\u95e1\u95e2\u95e3\u95e4\u95e5\u95e6\u95e7\u95e8\u95e9\u95ea\u95eb\u95ec\u95ed\u95ee\u95ef\u95f0\u95f1\u95f2\u95f3\u95f4\u95f5\u95f6\u95f7\u95f8\u95f9\u95fa\u95fb\u95fc\u95fd\u95fe\u95ff\u9600\u9601\u9602\u9603\u9604\u9605\u9606\u9607\u9608\u9609\u960a\u960b\u960c\u960d\u960e\u960f\u9610\u9611\u9612\u9613\u9614\u9615\u9616\u9617\u9618\u9619\u961a\u961b\u961c\u961d\u961e\u961f\u9620\u9621\u9622\u9623\u9624\u9625\u9626\u9627\u9628\u9629\u962a\u962b\u962c\u962d\u962e\u962f\u9630\u9631\u9632\u9633\u9634\u9635\u9636\u9637\u9638\u9639\u963a\u963b\u963c\u963d\u963e\u963f\u9640\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648\u9649\u964a\u964b\u964c\u964d\u964e\u964f\u9650\u9651\u9652\u9653\u9654\u9655\u9656\u9657\u9658\u9659\u965a\u965b\u965c\u965d\u965e\u965f\u9660\u9661\u9662\u9663\u9664\u9665\u9666\u9667\u9668\u9669\u966a\u966b\u966c\u966d\u966e\u966f\u9670\u9671\u9672\u9673\u9674\u9675\u9676\u9677\u9678\u9679\u967a\u967b\u967c\u967d\u967e\u967f\u9680\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688\u9689\u968a\u968b\u968c\u968d\u968e\u968f\u9690\u9691\u9692\u9693\u9694\u9695\u9696\u9697\u9698\u9699\u969a\u969b\u969c\u969d\u969e\u969f\u96a0\u96a1\u96a2\u96a3\u96a4\u96a5\u96a6\u96a7\u96a8\u96a9\u96aa\u96ab\u96ac\u96ad\u96ae\u96af\u96b0\u96b1\u96b2\u96b3\u96b4\u96b5\u96b6\u96b7\u96b8\u96b9\u96ba\u96bb\u96bc\u96bd\u96be\u96bf\u96c0\u96c1\u96c2\u96c3\u96c4\u96c5\u96c6\u96c7\u96c8\u96c9\u96ca\u96cb\u96cc\u96cd\u96ce\u96cf\u96d0\u96d1\u96d2\u96d3\u96d4\u96d5\u96d6\u96d7\u96d8\u96d9\u96da\u96db\u96dc\u96dd\u96de\u96df\u96e0\u96e1\u96e2\u96e3\u96e4\u96e5\u96e6\u96e7\u96e8\u96e9\u96ea\u96eb\u96ec\u96ed\u96ee\u96ef\u96f0\u96f1\u96f2\u96f3\u96f4\u96f5\u96f6\u96f7\u96f8\u96f9\u96fa\u96fb\u96fc\u96fd\u96fe\u96ff\u9700\u9701\u9702\u9703\u9704\u9705\u9706\u9707\u9708\u9709\u970a\u970b\u970c\u970d\u970e\u970f\u9710\u9711\u9712\u9713\u9714\u9715\u9716\u9717\u9718\u9719\u971a\u971b\u971c\u971d\u971e\u971f\u9720\u9721\u9722\u9723\u9724\u9725\u9726\u9727\u9728\u9729\u972a\u972b\u972c\u972d\u972e\u972f\u9730\u9731\u9732\u9733\u9734\u9735\u9736\u9737\u9738\u9739\u973a\u973b\u973c\u973d\u973e\u973f\u9740\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748\u9749\u974a\u974b\u974c\u974d\u974e\u974f\u9750\u9751\u9752\u9753\u9754\u9755\u9756\u9757\u9758\u9759\u975a\u975b\u975c\u975d\u975e\u975f\u9760\u9761\u9762\u9763\u9764\u9765\u9766\u9767\u9768\u9769\u976a\u976b\u976c\u976d\u976e\u976f\u9770\u9771\u9772\u9773\u9774\u9775\u9776\u9777\u9778\u9779\u977a\u977b\u977c\u977d\u977e\u977f\u9780\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788\u9789\u978a\u978b\u978c\u978d\u978e\u978f\u9790\u9791\u9792\u9793\u9794\u9795\u9796\u9797\u9798\u9799\u979a\u979b\u979c\u979d\u979e\u979f\u97a0\u97a1\u97a2\u97a3\u97a4\u97a5\u97a6\u97a7\u97a8\u97a9\u97aa\u97ab\u97ac\u97ad\u97ae\u97af\u97b0\u97b1\u97b2\u97b3\u97b4\u97b5\u97b6\u97b7\u97b8\u97b9\u97ba\u97bb\u97bc\u97bd\u97be\u97bf\u97c0\u97c1\u97c2\u97c3\u97c4\u97c5\u97c6\u97c7\u97c8\u97c9\u97ca\u97cb\u97cc\u97cd\u97ce\u97cf\u97d0\u97d1\u97d2\u97d3\u97d4\u97d5\u97d6\u97d7\u97d8\u97d9\u97da\u97db\u97dc\u97dd\u97de\u97df\u97e0\u97e1\u97e2\u97e3\u97e4\u97e5\u97e6\u97e7\u97e8\u97e9\u97ea\u97eb\u97ec\u97ed\u97ee\u97ef\u97f0\u97f1\u97f2\u97f3\u97f4\u97f5\u97f6\u97f7\u97f8\u97f9\u97fa\u97fb\u97fc\u97fd\u97fe\u97ff\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u980a\u980b\u980c\u980d\u980e\u980f\u9810\u9811\u9812\u9813\u9814\u9815\u9816\u9817\u9818\u9819\u981a\u981b\u981c\u981d\u981e\u981f\u9820\u9821\u9822\u9823\u9824\u9825\u9826\u9827\u9828\u9829\u982a\u982b\u982c\u982d\u982e\u982f\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983a\u983b\u983c\u983d\u983e\u983f\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984a\u984b\u984c\u984d\u984e\u984f\u9850\u9851\u9852\u9853\u9854\u9855\u9856\u9857\u9858\u9859\u985a\u985b\u985c\u985d\u985e\u985f\u9860\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868\u9869\u986a\u986b\u986c\u986d\u986e\u986f\u9870\u9871\u9872\u9873\u9874\u9875\u9876\u9877\u9878\u9879\u987a\u987b\u987c\u987d\u987e\u987f\u9880\u9881\u9882\u9883\u9884\u9885\u9886\u9887\u9888\u9889\u988a\u988b\u988c\u988d\u988e\u988f\u9890\u9891\u9892\u9893\u9894\u9895\u9896\u9897\u9898\u9899\u989a\u989b\u989c\u989d\u989e\u989f\u98a0\u98a1\u98a2\u98a3\u98a4\u98a5\u98a6\u98a7\u98a8\u98a9\u98aa\u98ab\u98ac\u98ad\u98ae\u98af\u98b0\u98b1\u98b2\u98b3\u98b4\u98b5\u98b6\u98b7\u98b8\u98b9\u98ba\u98bb\u98bc\u98bd\u98be\u98bf\u98c0\u98c1\u98c2\u98c3\u98c4\u98c5\u98c6\u98c7\u98c8\u98c9\u98ca\u98cb\u98cc\u98cd\u98ce\u98cf\u98d0\u98d1\u98d2\u98d3\u98d4\u98d5\u98d6\u98d7\u98d8\u98d9\u98da\u98db\u98dc\u98dd\u98de\u98df\u98e0\u98e1\u98e2\u98e3\u98e4\u98e5\u98e6\u98e7\u98e8\u98e9\u98ea\u98eb\u98ec\u98ed\u98ee\u98ef\u98f0\u98f1\u98f2\u98f3\u98f4\u98f5\u98f6\u98f7\u98f8\u98f9\u98fa\u98fb\u98fc\u98fd\u98fe\u98ff\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907\u9908\u9909\u990a\u990b\u990c\u990d\u990e\u990f\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991a\u991b\u991c\u991d\u991e\u991f\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929\u992a\u992b\u992c\u992d\u992e\u992f\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993a\u993b\u993c\u993d\u993e\u993f\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947\u9948\u9949\u994a\u994b\u994c\u994d\u994e\u994f\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957\u9958\u9959\u995a\u995b\u995c\u995d\u995e\u995f\u9960\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969\u996a\u996b\u996c\u996d\u996e\u996f\u9970\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979\u997a\u997b\u997c\u997d\u997e\u997f\u9980\u9981\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989\u998a\u998b\u998c\u998d\u998e\u998f\u9990\u9991\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999\u999a\u999b\u999c\u999d\u999e\u999f\u99a0\u99a1\u99a2\u99a3\u99a4\u99a5\u99a6\u99a7\u99a8\u99a9\u99aa\u99ab\u99ac\u99ad\u99ae\u99af\u99b0\u99b1\u99b2\u99b3\u99b4\u99b5\u99b6\u99b7\u99b8\u99b9\u99ba\u99bb\u99bc\u99bd\u99be\u99bf\u99c0\u99c1\u99c2\u99c3\u99c4\u99c5\u99c6\u99c7\u99c8\u99c9\u99ca\u99cb\u99cc\u99cd\u99ce\u99cf\u99d0\u99d1\u99d2\u99d3\u99d4\u99d5\u99d6\u99d7\u99d8\u99d9\u99da\u99db\u99dc\u99dd\u99de\u99df\u99e0\u99e1\u99e2\u99e3\u99e4\u99e5\u99e6\u99e7\u99e8\u99e9\u99ea\u99eb\u99ec\u99ed\u99ee\u99ef\u99f0\u99f1\u99f2\u99f3\u99f4\u99f5\u99f6\u99f7\u99f8\u99f9\u99fa\u99fb\u99fc\u99fd\u99fe\u99ff\u9a00\u9a01\u9a02\u9a03\u9a04\u9a05\u9a06\u9a07\u9a08\u9a09\u9a0a\u9a0b\u9a0c\u9a0d\u9a0e\u9a0f\u9a10\u9a11\u9a12\u9a13\u9a14\u9a15\u9a16\u9a17\u9a18\u9a19\u9a1a\u9a1b\u9a1c\u9a1d\u9a1e\u9a1f\u9a20\u9a21\u9a22\u9a23\u9a24\u9a25\u9a26\u9a27\u9a28\u9a29\u9a2a\u9a2b\u9a2c\u9a2d\u9a2e\u9a2f\u9a30\u9a31\u9a32\u9a33\u9a34\u9a35\u9a36\u9a37\u9a38\u9a39\u9a3a\u9a3b\u9a3c\u9a3d\u9a3e\u9a3f\u9a40\u9a41\u9a42\u9a43\u9a44\u9a45\u9a46\u9a47\u9a48\u9a49\u9a4a\u9a4b\u9a4c\u9a4d\u9a4e\u9a4f\u9a50\u9a51\u9a52\u9a53\u9a54\u9a55\u9a56\u9a57\u9a58\u9a59\u9a5a\u9a5b\u9a5c\u9a5d\u9a5e\u9a5f\u9a60\u9a61\u9a62\u9a63\u9a64\u9a65\u9a66\u9a67\u9a68\u9a69\u9a6a\u9a6b\u9a6c\u9a6d\u9a6e\u9a6f\u9a70\u9a71\u9a72\u9a73\u9a74\u9a75\u9a76\u9a77\u9a78\u9a79\u9a7a\u9a7b\u9a7c\u9a7d\u9a7e\u9a7f\u9a80\u9a81\u9a82\u9a83\u9a84\u9a85\u9a86\u9a87\u9a88\u9a89\u9a8a\u9a8b\u9a8c\u9a8d\u9a8e\u9a8f\u9a90\u9a91\u9a92\u9a93\u9a94\u9a95\u9a96\u9a97\u9a98\u9a99\u9a9a\u9a9b\u9a9c\u9a9d\u9a9e\u9a9f\u9aa0\u9aa1\u9aa2\u9aa3\u9aa4\u9aa5\u9aa6\u9aa7\u9aa8\u9aa9\u9aaa\u9aab\u9aac\u9aad\u9aae\u9aaf\u9ab0\u9ab1\u9ab2\u9ab3\u9ab4\u9ab5\u9ab6\u9ab7\u9ab8\u9ab9\u9aba\u9abb\u9abc\u9abd\u9abe\u9abf\u9ac0\u9ac1\u9ac2\u9ac3\u9ac4\u9ac5\u9ac6\u9ac7\u9ac8\u9ac9\u9aca\u9acb\u9acc\u9acd\u9ace\u9acf\u9ad0\u9ad1\u9ad2\u9ad3\u9ad4\u9ad5\u9ad6\u9ad7\u9ad8\u9ad9\u9ada\u9adb\u9adc\u9add\u9ade\u9adf\u9ae0\u9ae1\u9ae2\u9ae3\u9ae4\u9ae5\u9ae6\u9ae7\u9ae8\u9ae9\u9aea\u9aeb\u9aec\u9aed\u9aee\u9aef\u9af0\u9af1\u9af2\u9af3\u9af4\u9af5\u9af6\u9af7\u9af8\u9af9\u9afa\u9afb\u9afc\u9afd\u9afe\u9aff\u9b00\u9b01\u9b02\u9b03\u9b04\u9b05\u9b06\u9b07\u9b08\u9b09\u9b0a\u9b0b\u9b0c\u9b0d\u9b0e\u9b0f\u9b10\u9b11\u9b12\u9b13\u9b14\u9b15\u9b16\u9b17\u9b18\u9b19\u9b1a\u9b1b\u9b1c\u9b1d\u9b1e\u9b1f\u9b20\u9b21\u9b22\u9b23\u9b24\u9b25\u9b26\u9b27\u9b28\u9b29\u9b2a\u9b2b\u9b2c\u9b2d\u9b2e\u9b2f\u9b30\u9b31\u9b32\u9b33\u9b34\u9b35\u9b36\u9b37\u9b38\u9b39\u9b3a\u9b3b\u9b3c\u9b3d\u9b3e\u9b3f\u9b40\u9b41\u9b42\u9b43\u9b44\u9b45\u9b46\u9b47\u9b48\u9b49\u9b4a\u9b4b\u9b4c\u9b4d\u9b4e\u9b4f\u9b50\u9b51\u9b52\u9b53\u9b54\u9b55\u9b56\u9b57\u9b58\u9b59\u9b5a\u9b5b\u9b5c\u9b5d\u9b5e\u9b5f\u9b60\u9b61\u9b62\u9b63\u9b64\u9b65\u9b66\u9b67\u9b68\u9b69\u9b6a\u9b6b\u9b6c\u9b6d\u9b6e\u9b6f\u9b70\u9b71\u9b72\u9b73\u9b74\u9b75\u9b76\u9b77\u9b78\u9b79\u9b7a\u9b7b\u9b7c\u9b7d\u9b7e\u9b7f\u9b80\u9b81\u9b82\u9b83\u9b84\u9b85\u9b86\u9b87\u9b88\u9b89\u9b8a\u9b8b\u9b8c\u9b8d\u9b8e\u9b8f\u9b90\u9b91\u9b92\u9b93\u9b94\u9b95\u9b96\u9b97\u9b98\u9b99\u9b9a\u9b9b\u9b9c\u9b9d\u9b9e\u9b9f\u9ba0\u9ba1\u9ba2\u9ba3\u9ba4\u9ba5\u9ba6\u9ba7\u9ba8\u9ba9\u9baa\u9bab\u9bac\u9bad\u9bae\u9baf\u9bb0\u9bb1\u9bb2\u9bb3\u9bb4\u9bb5\u9bb6\u9bb7\u9bb8\u9bb9\u9bba\u9bbb\u9bbc\u9bbd\u9bbe\u9bbf\u9bc0\u9bc1\u9bc2\u9bc3\u9bc4\u9bc5\u9bc6\u9bc7\u9bc8\u9bc9\u9bca\u9bcb\u9bcc\u9bcd\u9bce\u9bcf\u9bd0\u9bd1\u9bd2\u9bd3\u9bd4\u9bd5\u9bd6\u9bd7\u9bd8\u9bd9\u9bda\u9bdb\u9bdc\u9bdd\u9bde\u9bdf\u9be0\u9be1\u9be2\u9be3\u9be4\u9be5\u9be6\u9be7\u9be8\u9be9\u9bea\u9beb\u9bec\u9bed\u9bee\u9bef\u9bf0\u9bf1\u9bf2\u9bf3\u9bf4\u9bf5\u9bf6\u9bf7\u9bf8\u9bf9\u9bfa\u9bfb\u9bfc\u9bfd\u9bfe\u9bff\u9c00\u9c01\u9c02\u9c03\u9c04\u9c05\u9c06\u9c07\u9c08\u9c09\u9c0a\u9c0b\u9c0c\u9c0d\u9c0e\u9c0f\u9c10\u9c11\u9c12\u9c13\u9c14\u9c15\u9c16\u9c17\u9c18\u9c19\u9c1a\u9c1b\u9c1c\u9c1d\u9c1e\u9c1f\u9c20\u9c21\u9c22\u9c23\u9c24\u9c25\u9c26\u9c27\u9c28\u9c29\u9c2a\u9c2b\u9c2c\u9c2d\u9c2e\u9c2f\u9c30\u9c31\u9c32\u9c33\u9c34\u9c35\u9c36\u9c37\u9c38\u9c39\u9c3a\u9c3b\u9c3c\u9c3d\u9c3e\u9c3f\u9c40\u9c41\u9c42\u9c43\u9c44\u9c45\u9c46\u9c47\u9c48\u9c49\u9c4a\u9c4b\u9c4c\u9c4d\u9c4e\u9c4f\u9c50\u9c51\u9c52\u9c53\u9c54\u9c55\u9c56\u9c57\u9c58\u9c59\u9c5a\u9c5b\u9c5c\u9c5d\u9c5e\u9c5f\u9c60\u9c61\u9c62\u9c63\u9c64\u9c65\u9c66\u9c67\u9c68\u9c69\u9c6a\u9c6b\u9c6c\u9c6d\u9c6e\u9c6f\u9c70\u9c71\u9c72\u9c73\u9c74\u9c75\u9c76\u9c77\u9c78\u9c79\u9c7a\u9c7b\u9c7c\u9c7d\u9c7e\u9c7f\u9c80\u9c81\u9c82\u9c83\u9c84\u9c85\u9c86\u9c87\u9c88\u9c89\u9c8a\u9c8b\u9c8c\u9c8d\u9c8e\u9c8f\u9c90\u9c91\u9c92\u9c93\u9c94\u9c95\u9c96\u9c97\u9c98\u9c99\u9c9a\u9c9b\u9c9c\u9c9d\u9c9e\u9c9f\u9ca0\u9ca1\u9ca2\u9ca3\u9ca4\u9ca5\u9ca6\u9ca7\u9ca8\u9ca9\u9caa\u9cab\u9cac\u9cad\u9cae\u9caf\u9cb0\u9cb1\u9cb2\u9cb3\u9cb4\u9cb5\u9cb6\u9cb7\u9cb8\u9cb9\u9cba\u9cbb\u9cbc\u9cbd\u9cbe\u9cbf\u9cc0\u9cc1\u9cc2\u9cc3\u9cc4\u9cc5\u9cc6\u9cc7\u9cc8\u9cc9\u9cca\u9ccb\u9ccc\u9ccd\u9cce\u9ccf\u9cd0\u9cd1\u9cd2\u9cd3\u9cd4\u9cd5\u9cd6\u9cd7\u9cd8\u9cd9\u9cda\u9cdb\u9cdc\u9cdd\u9cde\u9cdf\u9ce0\u9ce1\u9ce2\u9ce3\u9ce4\u9ce5\u9ce6\u9ce7\u9ce8\u9ce9\u9cea\u9ceb\u9cec\u9ced\u9cee\u9cef\u9cf0\u9cf1\u9cf2\u9cf3\u9cf4\u9cf5\u9cf6\u9cf7\u9cf8\u9cf9\u9cfa\u9cfb\u9cfc\u9cfd\u9cfe\u9cff\u9d00\u9d01\u9d02\u9d03\u9d04\u9d05\u9d06\u9d07\u9d08\u9d09\u9d0a\u9d0b\u9d0c\u9d0d\u9d0e\u9d0f\u9d10\u9d11\u9d12\u9d13\u9d14\u9d15\u9d16\u9d17\u9d18\u9d19\u9d1a\u9d1b\u9d1c\u9d1d\u9d1e\u9d1f\u9d20\u9d21\u9d22\u9d23\u9d24\u9d25\u9d26\u9d27\u9d28\u9d29\u9d2a\u9d2b\u9d2c\u9d2d\u9d2e\u9d2f\u9d30\u9d31\u9d32\u9d33\u9d34\u9d35\u9d36\u9d37\u9d38\u9d39\u9d3a\u9d3b\u9d3c\u9d3d\u9d3e\u9d3f\u9d40\u9d41\u9d42\u9d43\u9d44\u9d45\u9d46\u9d47\u9d48\u9d49\u9d4a\u9d4b\u9d4c\u9d4d\u9d4e\u9d4f\u9d50\u9d51\u9d52\u9d53\u9d54\u9d55\u9d56\u9d57\u9d58\u9d59\u9d5a\u9d5b\u9d5c\u9d5d\u9d5e\u9d5f\u9d60\u9d61\u9d62\u9d63\u9d64\u9d65\u9d66\u9d67\u9d68\u9d69\u9d6a\u9d6b\u9d6c\u9d6d\u9d6e\u9d6f\u9d70\u9d71\u9d72\u9d73\u9d74\u9d75\u9d76\u9d77\u9d78\u9d79\u9d7a\u9d7b\u9d7c\u9d7d\u9d7e\u9d7f\u9d80\u9d81\u9d82\u9d83\u9d84\u9d85\u9d86\u9d87\u9d88\u9d89\u9d8a\u9d8b\u9d8c\u9d8d\u9d8e\u9d8f\u9d90\u9d91\u9d92\u9d93\u9d94\u9d95\u9d96\u9d97\u9d98\u9d99\u9d9a\u9d9b\u9d9c\u9d9d\u9d9e\u9d9f\u9da0\u9da1\u9da2\u9da3\u9da4\u9da5\u9da6\u9da7\u9da8\u9da9\u9daa\u9dab\u9dac\u9dad\u9dae\u9daf\u9db0\u9db1\u9db2\u9db3\u9db4\u9db5\u9db6\u9db7\u9db8\u9db9\u9dba\u9dbb\u9dbc\u9dbd\u9dbe\u9dbf\u9dc0\u9dc1\u9dc2\u9dc3\u9dc4\u9dc5\u9dc6\u9dc7\u9dc8\u9dc9\u9dca\u9dcb\u9dcc\u9dcd\u9dce\u9dcf\u9dd0\u9dd1\u9dd2\u9dd3\u9dd4\u9dd5\u9dd6\u9dd7\u9dd8\u9dd9\u9dda\u9ddb\u9ddc\u9ddd\u9dde\u9ddf\u9de0\u9de1\u9de2\u9de3\u9de4\u9de5\u9de6\u9de7\u9de8\u9de9\u9dea\u9deb\u9dec\u9ded\u9dee\u9def\u9df0\u9df1\u9df2\u9df3\u9df4\u9df5\u9df6\u9df7\u9df8\u9df9\u9dfa\u9dfb\u9dfc\u9dfd\u9dfe\u9dff\u9e00\u9e01\u9e02\u9e03\u9e04\u9e05\u9e06\u9e07\u9e08\u9e09\u9e0a\u9e0b\u9e0c\u9e0d\u9e0e\u9e0f\u9e10\u9e11\u9e12\u9e13\u9e14\u9e15\u9e16\u9e17\u9e18\u9e19\u9e1a\u9e1b\u9e1c\u9e1d\u9e1e\u9e1f\u9e20\u9e21\u9e22\u9e23\u9e24\u9e25\u9e26\u9e27\u9e28\u9e29\u9e2a\u9e2b\u9e2c\u9e2d\u9e2e\u9e2f\u9e30\u9e31\u9e32\u9e33\u9e34\u9e35\u9e36\u9e37\u9e38\u9e39\u9e3a\u9e3b\u9e3c\u9e3d\u9e3e\u9e3f\u9e40\u9e41\u9e42\u9e43\u9e44\u9e45\u9e46\u9e47\u9e48\u9e49\u9e4a\u9e4b\u9e4c\u9e4d\u9e4e\u9e4f\u9e50\u9e51\u9e52\u9e53\u9e54\u9e55\u9e56\u9e57\u9e58\u9e59\u9e5a\u9e5b\u9e5c\u9e5d\u9e5e\u9e5f\u9e60\u9e61\u9e62\u9e63\u9e64\u9e65\u9e66\u9e67\u9e68\u9e69\u9e6a\u9e6b\u9e6c\u9e6d\u9e6e\u9e6f\u9e70\u9e71\u9e72\u9e73\u9e74\u9e75\u9e76\u9e77\u9e78\u9e79\u9e7a\u9e7b\u9e7c\u9e7d\u9e7e\u9e7f\u9e80\u9e81\u9e82\u9e83\u9e84\u9e85\u9e86\u9e87\u9e88\u9e89\u9e8a\u9e8b\u9e8c\u9e8d\u9e8e\u9e8f\u9e90\u9e91\u9e92\u9e93\u9e94\u9e95\u9e96\u9e97\u9e98\u9e99\u9e9a\u9e9b\u9e9c\u9e9d\u9e9e\u9e9f\u9ea0\u9ea1\u9ea2\u9ea3\u9ea4\u9ea5\u9ea6\u9ea7\u9ea8\u9ea9\u9eaa\u9eab\u9eac\u9ead\u9eae\u9eaf\u9eb0\u9eb1\u9eb2\u9eb3\u9eb4\u9eb5\u9eb6\u9eb7\u9eb8\u9eb9\u9eba\u9ebb\u9ebc\u9ebd\u9ebe\u9ebf\u9ec0\u9ec1\u9ec2\u9ec3\u9ec4\u9ec5\u9ec6\u9ec7\u9ec8\u9ec9\u9eca\u9ecb\u9ecc\u9ecd\u9ece\u9ecf\u9ed0\u9ed1\u9ed2\u9ed3\u9ed4\u9ed5\u9ed6\u9ed7\u9ed8\u9ed9\u9eda\u9edb\u9edc\u9edd\u9ede\u9edf\u9ee0\u9ee1\u9ee2\u9ee3\u9ee4\u9ee5\u9ee6\u9ee7\u9ee8\u9ee9\u9eea\u9eeb\u9eec\u9eed\u9eee\u9eef\u9ef0\u9ef1\u9ef2\u9ef3\u9ef4\u9ef5\u9ef6\u9ef7\u9ef8\u9ef9\u9efa\u9efb\u9efc\u9efd\u9efe\u9eff\u9f00\u9f01\u9f02\u9f03\u9f04\u9f05\u9f06\u9f07\u9f08\u9f09\u9f0a\u9f0b\u9f0c\u9f0d\u9f0e\u9f0f\u9f10\u9f11\u9f12\u9f13\u9f14\u9f15\u9f16\u9f17\u9f18\u9f19\u9f1a\u9f1b\u9f1c\u9f1d\u9f1e\u9f1f\u9f20\u9f21\u9f22\u9f23\u9f24\u9f25\u9f26\u9f27\u9f28\u9f29\u9f2a\u9f2b\u9f2c\u9f2d\u9f2e\u9f2f\u9f30\u9f31\u9f32\u9f33\u9f34\u9f35\u9f36\u9f37\u9f38\u9f39\u9f3a\u9f3b\u9f3c\u9f3d\u9f3e\u9f3f\u9f40\u9f41\u9f42\u9f43\u9f44\u9f45\u9f46\u9f47\u9f48\u9f49\u9f4a\u9f4b\u9f4c\u9f4d\u9f4e\u9f4f\u9f50\u9f51\u9f52\u9f53\u9f54\u9f55\u9f56\u9f57\u9f58\u9f59\u9f5a\u9f5b\u9f5c\u9f5d\u9f5e\u9f5f\u9f60\u9f61\u9f62\u9f63\u9f64\u9f65\u9f66\u9f67\u9f68\u9f69\u9f6a\u9f6b\u9f6c\u9f6d\u9f6e\u9f6f\u9f70\u9f71\u9f72\u9f73\u9f74\u9f75\u9f76\u9f77\u9f78\u9f79\u9f7a\u9f7b\u9f7c\u9f7d\u9f7e\u9f7f\u9f80\u9f81\u9f82\u9f83\u9f84\u9f85\u9f86\u9f87\u9f88\u9f89\u9f8a\u9f8b\u9f8c\u9f8d\u9f8e\u9f8f\u9f90\u9f91\u9f92\u9f93\u9f94\u9f95\u9f96\u9f97\u9f98\u9f99\u9f9a\u9f9b\u9f9c\u9f9d\u9f9e\u9f9f\u9fa0\u9fa1\u9fa2\u9fa3\u9fa4\u9fa5\u9fa6\u9fa7\u9fa8\u9fa9\u9faa\u9fab\u9fac\u9fad\u9fae\u9faf\u9fb0\u9fb1\u9fb2\u9fb3\u9fb4\u9fb5\u9fb6\u9fb7\u9fb8\u9fb9\u9fba\u9fbb\ua000\ua001\ua002\ua003\ua004\ua005\ua006\ua007\ua008\ua009\ua00a\ua00b\ua00c\ua00d\ua00e\ua00f\ua010\ua011\ua012\ua013\ua014\ua016\ua017\ua018\ua019\ua01a\ua01b\ua01c\ua01d\ua01e\ua01f\ua020\ua021\ua022\ua023\ua024\ua025\ua026\ua027\ua028\ua029\ua02a\ua02b\ua02c\ua02d\ua02e\ua02f\ua030\ua031\ua032\ua033\ua034\ua035\ua036\ua037\ua038\ua039\ua03a\ua03b\ua03c\ua03d\ua03e\ua03f\ua040\ua041\ua042\ua043\ua044\ua045\ua046\ua047\ua048\ua049\ua04a\ua04b\ua04c\ua04d\ua04e\ua04f\ua050\ua051\ua052\ua053\ua054\ua055\ua056\ua057\ua058\ua059\ua05a\ua05b\ua05c\ua05d\ua05e\ua05f\ua060\ua061\ua062\ua063\ua064\ua065\ua066\ua067\ua068\ua069\ua06a\ua06b\ua06c\ua06d\ua06e\ua06f\ua070\ua071\ua072\ua073\ua074\ua075\ua076\ua077\ua078\ua079\ua07a\ua07b\ua07c\ua07d\ua07e\ua07f\ua080\ua081\ua082\ua083\ua084\ua085\ua086\ua087\ua088\ua089\ua08a\ua08b\ua08c\ua08d\ua08e\ua08f\ua090\ua091\ua092\ua093\ua094\ua095\ua096\ua097\ua098\ua099\ua09a\ua09b\ua09c\ua09d\ua09e\ua09f\ua0a0\ua0a1\ua0a2\ua0a3\ua0a4\ua0a5\ua0a6\ua0a7\ua0a8\ua0a9\ua0aa\ua0ab\ua0ac\ua0ad\ua0ae\ua0af\ua0b0\ua0b1\ua0b2\ua0b3\ua0b4\ua0b5\ua0b6\ua0b7\ua0b8\ua0b9\ua0ba\ua0bb\ua0bc\ua0bd\ua0be\ua0bf\ua0c0\ua0c1\ua0c2\ua0c3\ua0c4\ua0c5\ua0c6\ua0c7\ua0c8\ua0c9\ua0ca\ua0cb\ua0cc\ua0cd\ua0ce\ua0cf\ua0d0\ua0d1\ua0d2\ua0d3\ua0d4\ua0d5\ua0d6\ua0d7\ua0d8\ua0d9\ua0da\ua0db\ua0dc\ua0dd\ua0de\ua0df\ua0e0\ua0e1\ua0e2\ua0e3\ua0e4\ua0e5\ua0e6\ua0e7\ua0e8\ua0e9\ua0ea\ua0eb\ua0ec\ua0ed\ua0ee\ua0ef\ua0f0\ua0f1\ua0f2\ua0f3\ua0f4\ua0f5\ua0f6\ua0f7\ua0f8\ua0f9\ua0fa\ua0fb\ua0fc\ua0fd\ua0fe\ua0ff\ua100\ua101\ua102\ua103\ua104\ua105\ua106\ua107\ua108\ua109\ua10a\ua10b\ua10c\ua10d\ua10e\ua10f\ua110\ua111\ua112\ua113\ua114\ua115\ua116\ua117\ua118\ua119\ua11a\ua11b\ua11c\ua11d\ua11e\ua11f\ua120\ua121\ua122\ua123\ua124\ua125\ua126\ua127\ua128\ua129\ua12a\ua12b\ua12c\ua12d\ua12e\ua12f\ua130\ua131\ua132\ua133\ua134\ua135\ua136\ua137\ua138\ua139\ua13a\ua13b\ua13c\ua13d\ua13e\ua13f\ua140\ua141\ua142\ua143\ua144\ua145\ua146\ua147\ua148\ua149\ua14a\ua14b\ua14c\ua14d\ua14e\ua14f\ua150\ua151\ua152\ua153\ua154\ua155\ua156\ua157\ua158\ua159\ua15a\ua15b\ua15c\ua15d\ua15e\ua15f\ua160\ua161\ua162\ua163\ua164\ua165\ua166\ua167\ua168\ua169\ua16a\ua16b\ua16c\ua16d\ua16e\ua16f\ua170\ua171\ua172\ua173\ua174\ua175\ua176\ua177\ua178\ua179\ua17a\ua17b\ua17c\ua17d\ua17e\ua17f\ua180\ua181\ua182\ua183\ua184\ua185\ua186\ua187\ua188\ua189\ua18a\ua18b\ua18c\ua18d\ua18e\ua18f\ua190\ua191\ua192\ua193\ua194\ua195\ua196\ua197\ua198\ua199\ua19a\ua19b\ua19c\ua19d\ua19e\ua19f\ua1a0\ua1a1\ua1a2\ua1a3\ua1a4\ua1a5\ua1a6\ua1a7\ua1a8\ua1a9\ua1aa\ua1ab\ua1ac\ua1ad\ua1ae\ua1af\ua1b0\ua1b1\ua1b2\ua1b3\ua1b4\ua1b5\ua1b6\ua1b7\ua1b8\ua1b9\ua1ba\ua1bb\ua1bc\ua1bd\ua1be\ua1bf\ua1c0\ua1c1\ua1c2\ua1c3\ua1c4\ua1c5\ua1c6\ua1c7\ua1c8\ua1c9\ua1ca\ua1cb\ua1cc\ua1cd\ua1ce\ua1cf\ua1d0\ua1d1\ua1d2\ua1d3\ua1d4\ua1d5\ua1d6\ua1d7\ua1d8\ua1d9\ua1da\ua1db\ua1dc\ua1dd\ua1de\ua1df\ua1e0\ua1e1\ua1e2\ua1e3\ua1e4\ua1e5\ua1e6\ua1e7\ua1e8\ua1e9\ua1ea\ua1eb\ua1ec\ua1ed\ua1ee\ua1ef\ua1f0\ua1f1\ua1f2\ua1f3\ua1f4\ua1f5\ua1f6\ua1f7\ua1f8\ua1f9\ua1fa\ua1fb\ua1fc\ua1fd\ua1fe\ua1ff\ua200\ua201\ua202\ua203\ua204\ua205\ua206\ua207\ua208\ua209\ua20a\ua20b\ua20c\ua20d\ua20e\ua20f\ua210\ua211\ua212\ua213\ua214\ua215\ua216\ua217\ua218\ua219\ua21a\ua21b\ua21c\ua21d\ua21e\ua21f\ua220\ua221\ua222\ua223\ua224\ua225\ua226\ua227\ua228\ua229\ua22a\ua22b\ua22c\ua22d\ua22e\ua22f\ua230\ua231\ua232\ua233\ua234\ua235\ua236\ua237\ua238\ua239\ua23a\ua23b\ua23c\ua23d\ua23e\ua23f\ua240\ua241\ua242\ua243\ua244\ua245\ua246\ua247\ua248\ua249\ua24a\ua24b\ua24c\ua24d\ua24e\ua24f\ua250\ua251\ua252\ua253\ua254\ua255\ua256\ua257\ua258\ua259\ua25a\ua25b\ua25c\ua25d\ua25e\ua25f\ua260\ua261\ua262\ua263\ua264\ua265\ua266\ua267\ua268\ua269\ua26a\ua26b\ua26c\ua26d\ua26e\ua26f\ua270\ua271\ua272\ua273\ua274\ua275\ua276\ua277\ua278\ua279\ua27a\ua27b\ua27c\ua27d\ua27e\ua27f\ua280\ua281\ua282\ua283\ua284\ua285\ua286\ua287\ua288\ua289\ua28a\ua28b\ua28c\ua28d\ua28e\ua28f\ua290\ua291\ua292\ua293\ua294\ua295\ua296\ua297\ua298\ua299\ua29a\ua29b\ua29c\ua29d\ua29e\ua29f\ua2a0\ua2a1\ua2a2\ua2a3\ua2a4\ua2a5\ua2a6\ua2a7\ua2a8\ua2a9\ua2aa\ua2ab\ua2ac\ua2ad\ua2ae\ua2af\ua2b0\ua2b1\ua2b2\ua2b3\ua2b4\ua2b5\ua2b6\ua2b7\ua2b8\ua2b9\ua2ba\ua2bb\ua2bc\ua2bd\ua2be\ua2bf\ua2c0\ua2c1\ua2c2\ua2c3\ua2c4\ua2c5\ua2c6\ua2c7\ua2c8\ua2c9\ua2ca\ua2cb\ua2cc\ua2cd\ua2ce\ua2cf\ua2d0\ua2d1\ua2d2\ua2d3\ua2d4\ua2d5\ua2d6\ua2d7\ua2d8\ua2d9\ua2da\ua2db\ua2dc\ua2dd\ua2de\ua2df\ua2e0\ua2e1\ua2e2\ua2e3\ua2e4\ua2e5\ua2e6\ua2e7\ua2e8\ua2e9\ua2ea\ua2eb\ua2ec\ua2ed\ua2ee\ua2ef\ua2f0\ua2f1\ua2f2\ua2f3\ua2f4\ua2f5\ua2f6\ua2f7\ua2f8\ua2f9\ua2fa\ua2fb\ua2fc\ua2fd\ua2fe\ua2ff\ua300\ua301\ua302\ua303\ua304\ua305\ua306\ua307\ua308\ua309\ua30a\ua30b\ua30c\ua30d\ua30e\ua30f\ua310\ua311\ua312\ua313\ua314\ua315\ua316\ua317\ua318\ua319\ua31a\ua31b\ua31c\ua31d\ua31e\ua31f\ua320\ua321\ua322\ua323\ua324\ua325\ua326\ua327\ua328\ua329\ua32a\ua32b\ua32c\ua32d\ua32e\ua32f\ua330\ua331\ua332\ua333\ua334\ua335\ua336\ua337\ua338\ua339\ua33a\ua33b\ua33c\ua33d\ua33e\ua33f\ua340\ua341\ua342\ua343\ua344\ua345\ua346\ua347\ua348\ua349\ua34a\ua34b\ua34c\ua34d\ua34e\ua34f\ua350\ua351\ua352\ua353\ua354\ua355\ua356\ua357\ua358\ua359\ua35a\ua35b\ua35c\ua35d\ua35e\ua35f\ua360\ua361\ua362\ua363\ua364\ua365\ua366\ua367\ua368\ua369\ua36a\ua36b\ua36c\ua36d\ua36e\ua36f\ua370\ua371\ua372\ua373\ua374\ua375\ua376\ua377\ua378\ua379\ua37a\ua37b\ua37c\ua37d\ua37e\ua37f\ua380\ua381\ua382\ua383\ua384\ua385\ua386\ua387\ua388\ua389\ua38a\ua38b\ua38c\ua38d\ua38e\ua38f\ua390\ua391\ua392\ua393\ua394\ua395\ua396\ua397\ua398\ua399\ua39a\ua39b\ua39c\ua39d\ua39e\ua39f\ua3a0\ua3a1\ua3a2\ua3a3\ua3a4\ua3a5\ua3a6\ua3a7\ua3a8\ua3a9\ua3aa\ua3ab\ua3ac\ua3ad\ua3ae\ua3af\ua3b0\ua3b1\ua3b2\ua3b3\ua3b4\ua3b5\ua3b6\ua3b7\ua3b8\ua3b9\ua3ba\ua3bb\ua3bc\ua3bd\ua3be\ua3bf\ua3c0\ua3c1\ua3c2\ua3c3\ua3c4\ua3c5\ua3c6\ua3c7\ua3c8\ua3c9\ua3ca\ua3cb\ua3cc\ua3cd\ua3ce\ua3cf\ua3d0\ua3d1\ua3d2\ua3d3\ua3d4\ua3d5\ua3d6\ua3d7\ua3d8\ua3d9\ua3da\ua3db\ua3dc\ua3dd\ua3de\ua3df\ua3e0\ua3e1\ua3e2\ua3e3\ua3e4\ua3e5\ua3e6\ua3e7\ua3e8\ua3e9\ua3ea\ua3eb\ua3ec\ua3ed\ua3ee\ua3ef\ua3f0\ua3f1\ua3f2\ua3f3\ua3f4\ua3f5\ua3f6\ua3f7\ua3f8\ua3f9\ua3fa\ua3fb\ua3fc\ua3fd\ua3fe\ua3ff\ua400\ua401\ua402\ua403\ua404\ua405\ua406\ua407\ua408\ua409\ua40a\ua40b\ua40c\ua40d\ua40e\ua40f\ua410\ua411\ua412\ua413\ua414\ua415\ua416\ua417\ua418\ua419\ua41a\ua41b\ua41c\ua41d\ua41e\ua41f\ua420\ua421\ua422\ua423\ua424\ua425\ua426\ua427\ua428\ua429\ua42a\ua42b\ua42c\ua42d\ua42e\ua42f\ua430\ua431\ua432\ua433\ua434\ua435\ua436\ua437\ua438\ua439\ua43a\ua43b\ua43c\ua43d\ua43e\ua43f\ua440\ua441\ua442\ua443\ua444\ua445\ua446\ua447\ua448\ua449\ua44a\ua44b\ua44c\ua44d\ua44e\ua44f\ua450\ua451\ua452\ua453\ua454\ua455\ua456\ua457\ua458\ua459\ua45a\ua45b\ua45c\ua45d\ua45e\ua45f\ua460\ua461\ua462\ua463\ua464\ua465\ua466\ua467\ua468\ua469\ua46a\ua46b\ua46c\ua46d\ua46e\ua46f\ua470\ua471\ua472\ua473\ua474\ua475\ua476\ua477\ua478\ua479\ua47a\ua47b\ua47c\ua47d\ua47e\ua47f\ua480\ua481\ua482\ua483\ua484\ua485\ua486\ua487\ua488\ua489\ua48a\ua48b\ua48c\ua800\ua801\ua803\ua804\ua805\ua807\ua808\ua809\ua80a\ua80c\ua80d\ua80e\ua80f\ua810\ua811\ua812\ua813\ua814\ua815\ua816\ua817\ua818\ua819\ua81a\ua81b\ua81c\ua81d\ua81e\ua81f\ua820\ua821\ua822\uac00\uac01\uac02\uac03\uac04\uac05\uac06\uac07\uac08\uac09\uac0a\uac0b\uac0c\uac0d\uac0e\uac0f\uac10\uac11\uac12\uac13\uac14\uac15\uac16\uac17\uac18\uac19\uac1a\uac1b\uac1c\uac1d\uac1e\uac1f\uac20\uac21\uac22\uac23\uac24\uac25\uac26\uac27\uac28\uac29\uac2a\uac2b\uac2c\uac2d\uac2e\uac2f\uac30\uac31\uac32\uac33\uac34\uac35\uac36\uac37\uac38\uac39\uac3a\uac3b\uac3c\uac3d\uac3e\uac3f\uac40\uac41\uac42\uac43\uac44\uac45\uac46\uac47\uac48\uac49\uac4a\uac4b\uac4c\uac4d\uac4e\uac4f\uac50\uac51\uac52\uac53\uac54\uac55\uac56\uac57\uac58\uac59\uac5a\uac5b\uac5c\uac5d\uac5e\uac5f\uac60\uac61\uac62\uac63\uac64\uac65\uac66\uac67\uac68\uac69\uac6a\uac6b\uac6c\uac6d\uac6e\uac6f\uac70\uac71\uac72\uac73\uac74\uac75\uac76\uac77\uac78\uac79\uac7a\uac7b\uac7c\uac7d\uac7e\uac7f\uac80\uac81\uac82\uac83\uac84\uac85\uac86\uac87\uac88\uac89\uac8a\uac8b\uac8c\uac8d\uac8e\uac8f\uac90\uac91\uac92\uac93\uac94\uac95\uac96\uac97\uac98\uac99\uac9a\uac9b\uac9c\uac9d\uac9e\uac9f\uaca0\uaca1\uaca2\uaca3\uaca4\uaca5\uaca6\uaca7\uaca8\uaca9\uacaa\uacab\uacac\uacad\uacae\uacaf\uacb0\uacb1\uacb2\uacb3\uacb4\uacb5\uacb6\uacb7\uacb8\uacb9\uacba\uacbb\uacbc\uacbd\uacbe\uacbf\uacc0\uacc1\uacc2\uacc3\uacc4\uacc5\uacc6\uacc7\uacc8\uacc9\uacca\uaccb\uaccc\uaccd\uacce\uaccf\uacd0\uacd1\uacd2\uacd3\uacd4\uacd5\uacd6\uacd7\uacd8\uacd9\uacda\uacdb\uacdc\uacdd\uacde\uacdf\uace0\uace1\uace2\uace3\uace4\uace5\uace6\uace7\uace8\uace9\uacea\uaceb\uacec\uaced\uacee\uacef\uacf0\uacf1\uacf2\uacf3\uacf4\uacf5\uacf6\uacf7\uacf8\uacf9\uacfa\uacfb\uacfc\uacfd\uacfe\uacff\uad00\uad01\uad02\uad03\uad04\uad05\uad06\uad07\uad08\uad09\uad0a\uad0b\uad0c\uad0d\uad0e\uad0f\uad10\uad11\uad12\uad13\uad14\uad15\uad16\uad17\uad18\uad19\uad1a\uad1b\uad1c\uad1d\uad1e\uad1f\uad20\uad21\uad22\uad23\uad24\uad25\uad26\uad27\uad28\uad29\uad2a\uad2b\uad2c\uad2d\uad2e\uad2f\uad30\uad31\uad32\uad33\uad34\uad35\uad36\uad37\uad38\uad39\uad3a\uad3b\uad3c\uad3d\uad3e\uad3f\uad40\uad41\uad42\uad43\uad44\uad45\uad46\uad47\uad48\uad49\uad4a\uad4b\uad4c\uad4d\uad4e\uad4f\uad50\uad51\uad52\uad53\uad54\uad55\uad56\uad57\uad58\uad59\uad5a\uad5b\uad5c\uad5d\uad5e\uad5f\uad60\uad61\uad62\uad63\uad64\uad65\uad66\uad67\uad68\uad69\uad6a\uad6b\uad6c\uad6d\uad6e\uad6f\uad70\uad71\uad72\uad73\uad74\uad75\uad76\uad77\uad78\uad79\uad7a\uad7b\uad7c\uad7d\uad7e\uad7f\uad80\uad81\uad82\uad83\uad84\uad85\uad86\uad87\uad88\uad89\uad8a\uad8b\uad8c\uad8d\uad8e\uad8f\uad90\uad91\uad92\uad93\uad94\uad95\uad96\uad97\uad98\uad99\uad9a\uad9b\uad9c\uad9d\uad9e\uad9f\uada0\uada1\uada2\uada3\uada4\uada5\uada6\uada7\uada8\uada9\uadaa\uadab\uadac\uadad\uadae\uadaf\uadb0\uadb1\uadb2\uadb3\uadb4\uadb5\uadb6\uadb7\uadb8\uadb9\uadba\uadbb\uadbc\uadbd\uadbe\uadbf\uadc0\uadc1\uadc2\uadc3\uadc4\uadc5\uadc6\uadc7\uadc8\uadc9\uadca\uadcb\uadcc\uadcd\uadce\uadcf\uadd0\uadd1\uadd2\uadd3\uadd4\uadd5\uadd6\uadd7\uadd8\uadd9\uadda\uaddb\uaddc\uaddd\uadde\uaddf\uade0\uade1\uade2\uade3\uade4\uade5\uade6\uade7\uade8\uade9\uadea\uadeb\uadec\uaded\uadee\uadef\uadf0\uadf1\uadf2\uadf3\uadf4\uadf5\uadf6\uadf7\uadf8\uadf9\uadfa\uadfb\uadfc\uadfd\uadfe\uadff\uae00\uae01\uae02\uae03\uae04\uae05\uae06\uae07\uae08\uae09\uae0a\uae0b\uae0c\uae0d\uae0e\uae0f\uae10\uae11\uae12\uae13\uae14\uae15\uae16\uae17\uae18\uae19\uae1a\uae1b\uae1c\uae1d\uae1e\uae1f\uae20\uae21\uae22\uae23\uae24\uae25\uae26\uae27\uae28\uae29\uae2a\uae2b\uae2c\uae2d\uae2e\uae2f\uae30\uae31\uae32\uae33\uae34\uae35\uae36\uae37\uae38\uae39\uae3a\uae3b\uae3c\uae3d\uae3e\uae3f\uae40\uae41\uae42\uae43\uae44\uae45\uae46\uae47\uae48\uae49\uae4a\uae4b\uae4c\uae4d\uae4e\uae4f\uae50\uae51\uae52\uae53\uae54\uae55\uae56\uae57\uae58\uae59\uae5a\uae5b\uae5c\uae5d\uae5e\uae5f\uae60\uae61\uae62\uae63\uae64\uae65\uae66\uae67\uae68\uae69\uae6a\uae6b\uae6c\uae6d\uae6e\uae6f\uae70\uae71\uae72\uae73\uae74\uae75\uae76\uae77\uae78\uae79\uae7a\uae7b\uae7c\uae7d\uae7e\uae7f\uae80\uae81\uae82\uae83\uae84\uae85\uae86\uae87\uae88\uae89\uae8a\uae8b\uae8c\uae8d\uae8e\uae8f\uae90\uae91\uae92\uae93\uae94\uae95\uae96\uae97\uae98\uae99\uae9a\uae9b\uae9c\uae9d\uae9e\uae9f\uaea0\uaea1\uaea2\uaea3\uaea4\uaea5\uaea6\uaea7\uaea8\uaea9\uaeaa\uaeab\uaeac\uaead\uaeae\uaeaf\uaeb0\uaeb1\uaeb2\uaeb3\uaeb4\uaeb5\uaeb6\uaeb7\uaeb8\uaeb9\uaeba\uaebb\uaebc\uaebd\uaebe\uaebf\uaec0\uaec1\uaec2\uaec3\uaec4\uaec5\uaec6\uaec7\uaec8\uaec9\uaeca\uaecb\uaecc\uaecd\uaece\uaecf\uaed0\uaed1\uaed2\uaed3\uaed4\uaed5\uaed6\uaed7\uaed8\uaed9\uaeda\uaedb\uaedc\uaedd\uaede\uaedf\uaee0\uaee1\uaee2\uaee3\uaee4\uaee5\uaee6\uaee7\uaee8\uaee9\uaeea\uaeeb\uaeec\uaeed\uaeee\uaeef\uaef0\uaef1\uaef2\uaef3\uaef4\uaef5\uaef6\uaef7\uaef8\uaef9\uaefa\uaefb\uaefc\uaefd\uaefe\uaeff\uaf00\uaf01\uaf02\uaf03\uaf04\uaf05\uaf06\uaf07\uaf08\uaf09\uaf0a\uaf0b\uaf0c\uaf0d\uaf0e\uaf0f\uaf10\uaf11\uaf12\uaf13\uaf14\uaf15\uaf16\uaf17\uaf18\uaf19\uaf1a\uaf1b\uaf1c\uaf1d\uaf1e\uaf1f\uaf20\uaf21\uaf22\uaf23\uaf24\uaf25\uaf26\uaf27\uaf28\uaf29\uaf2a\uaf2b\uaf2c\uaf2d\uaf2e\uaf2f\uaf30\uaf31\uaf32\uaf33\uaf34\uaf35\uaf36\uaf37\uaf38\uaf39\uaf3a\uaf3b\uaf3c\uaf3d\uaf3e\uaf3f\uaf40\uaf41\uaf42\uaf43\uaf44\uaf45\uaf46\uaf47\uaf48\uaf49\uaf4a\uaf4b\uaf4c\uaf4d\uaf4e\uaf4f\uaf50\uaf51\uaf52\uaf53\uaf54\uaf55\uaf56\uaf57\uaf58\uaf59\uaf5a\uaf5b\uaf5c\uaf5d\uaf5e\uaf5f\uaf60\uaf61\uaf62\uaf63\uaf64\uaf65\uaf66\uaf67\uaf68\uaf69\uaf6a\uaf6b\uaf6c\uaf6d\uaf6e\uaf6f\uaf70\uaf71\uaf72\uaf73\uaf74\uaf75\uaf76\uaf77\uaf78\uaf79\uaf7a\uaf7b\uaf7c\uaf7d\uaf7e\uaf7f\uaf80\uaf81\uaf82\uaf83\uaf84\uaf85\uaf86\uaf87\uaf88\uaf89\uaf8a\uaf8b\uaf8c\uaf8d\uaf8e\uaf8f\uaf90\uaf91\uaf92\uaf93\uaf94\uaf95\uaf96\uaf97\uaf98\uaf99\uaf9a\uaf9b\uaf9c\uaf9d\uaf9e\uaf9f\uafa0\uafa1\uafa2\uafa3\uafa4\uafa5\uafa6\uafa7\uafa8\uafa9\uafaa\uafab\uafac\uafad\uafae\uafaf\uafb0\uafb1\uafb2\uafb3\uafb4\uafb5\uafb6\uafb7\uafb8\uafb9\uafba\uafbb\uafbc\uafbd\uafbe\uafbf\uafc0\uafc1\uafc2\uafc3\uafc4\uafc5\uafc6\uafc7\uafc8\uafc9\uafca\uafcb\uafcc\uafcd\uafce\uafcf\uafd0\uafd1\uafd2\uafd3\uafd4\uafd5\uafd6\uafd7\uafd8\uafd9\uafda\uafdb\uafdc\uafdd\uafde\uafdf\uafe0\uafe1\uafe2\uafe3\uafe4\uafe5\uafe6\uafe7\uafe8\uafe9\uafea\uafeb\uafec\uafed\uafee\uafef\uaff0\uaff1\uaff2\uaff3\uaff4\uaff5\uaff6\uaff7\uaff8\uaff9\uaffa\uaffb\uaffc\uaffd\uaffe\uafff\ub000\ub001\ub002\ub003\ub004\ub005\ub006\ub007\ub008\ub009\ub00a\ub00b\ub00c\ub00d\ub00e\ub00f\ub010\ub011\ub012\ub013\ub014\ub015\ub016\ub017\ub018\ub019\ub01a\ub01b\ub01c\ub01d\ub01e\ub01f\ub020\ub021\ub022\ub023\ub024\ub025\ub026\ub027\ub028\ub029\ub02a\ub02b\ub02c\ub02d\ub02e\ub02f\ub030\ub031\ub032\ub033\ub034\ub035\ub036\ub037\ub038\ub039\ub03a\ub03b\ub03c\ub03d\ub03e\ub03f\ub040\ub041\ub042\ub043\ub044\ub045\ub046\ub047\ub048\ub049\ub04a\ub04b\ub04c\ub04d\ub04e\ub04f\ub050\ub051\ub052\ub053\ub054\ub055\ub056\ub057\ub058\ub059\ub05a\ub05b\ub05c\ub05d\ub05e\ub05f\ub060\ub061\ub062\ub063\ub064\ub065\ub066\ub067\ub068\ub069\ub06a\ub06b\ub06c\ub06d\ub06e\ub06f\ub070\ub071\ub072\ub073\ub074\ub075\ub076\ub077\ub078\ub079\ub07a\ub07b\ub07c\ub07d\ub07e\ub07f\ub080\ub081\ub082\ub083\ub084\ub085\ub086\ub087\ub088\ub089\ub08a\ub08b\ub08c\ub08d\ub08e\ub08f\ub090\ub091\ub092\ub093\ub094\ub095\ub096\ub097\ub098\ub099\ub09a\ub09b\ub09c\ub09d\ub09e\ub09f\ub0a0\ub0a1\ub0a2\ub0a3\ub0a4\ub0a5\ub0a6\ub0a7\ub0a8\ub0a9\ub0aa\ub0ab\ub0ac\ub0ad\ub0ae\ub0af\ub0b0\ub0b1\ub0b2\ub0b3\ub0b4\ub0b5\ub0b6\ub0b7\ub0b8\ub0b9\ub0ba\ub0bb\ub0bc\ub0bd\ub0be\ub0bf\ub0c0\ub0c1\ub0c2\ub0c3\ub0c4\ub0c5\ub0c6\ub0c7\ub0c8\ub0c9\ub0ca\ub0cb\ub0cc\ub0cd\ub0ce\ub0cf\ub0d0\ub0d1\ub0d2\ub0d3\ub0d4\ub0d5\ub0d6\ub0d7\ub0d8\ub0d9\ub0da\ub0db\ub0dc\ub0dd\ub0de\ub0df\ub0e0\ub0e1\ub0e2\ub0e3\ub0e4\ub0e5\ub0e6\ub0e7\ub0e8\ub0e9\ub0ea\ub0eb\ub0ec\ub0ed\ub0ee\ub0ef\ub0f0\ub0f1\ub0f2\ub0f3\ub0f4\ub0f5\ub0f6\ub0f7\ub0f8\ub0f9\ub0fa\ub0fb\ub0fc\ub0fd\ub0fe\ub0ff\ub100\ub101\ub102\ub103\ub104\ub105\ub106\ub107\ub108\ub109\ub10a\ub10b\ub10c\ub10d\ub10e\ub10f\ub110\ub111\ub112\ub113\ub114\ub115\ub116\ub117\ub118\ub119\ub11a\ub11b\ub11c\ub11d\ub11e\ub11f\ub120\ub121\ub122\ub123\ub124\ub125\ub126\ub127\ub128\ub129\ub12a\ub12b\ub12c\ub12d\ub12e\ub12f\ub130\ub131\ub132\ub133\ub134\ub135\ub136\ub137\ub138\ub139\ub13a\ub13b\ub13c\ub13d\ub13e\ub13f\ub140\ub141\ub142\ub143\ub144\ub145\ub146\ub147\ub148\ub149\ub14a\ub14b\ub14c\ub14d\ub14e\ub14f\ub150\ub151\ub152\ub153\ub154\ub155\ub156\ub157\ub158\ub159\ub15a\ub15b\ub15c\ub15d\ub15e\ub15f\ub160\ub161\ub162\ub163\ub164\ub165\ub166\ub167\ub168\ub169\ub16a\ub16b\ub16c\ub16d\ub16e\ub16f\ub170\ub171\ub172\ub173\ub174\ub175\ub176\ub177\ub178\ub179\ub17a\ub17b\ub17c\ub17d\ub17e\ub17f\ub180\ub181\ub182\ub183\ub184\ub185\ub186\ub187\ub188\ub189\ub18a\ub18b\ub18c\ub18d\ub18e\ub18f\ub190\ub191\ub192\ub193\ub194\ub195\ub196\ub197\ub198\ub199\ub19a\ub19b\ub19c\ub19d\ub19e\ub19f\ub1a0\ub1a1\ub1a2\ub1a3\ub1a4\ub1a5\ub1a6\ub1a7\ub1a8\ub1a9\ub1aa\ub1ab\ub1ac\ub1ad\ub1ae\ub1af\ub1b0\ub1b1\ub1b2\ub1b3\ub1b4\ub1b5\ub1b6\ub1b7\ub1b8\ub1b9\ub1ba\ub1bb\ub1bc\ub1bd\ub1be\ub1bf\ub1c0\ub1c1\ub1c2\ub1c3\ub1c4\ub1c5\ub1c6\ub1c7\ub1c8\ub1c9\ub1ca\ub1cb\ub1cc\ub1cd\ub1ce\ub1cf\ub1d0\ub1d1\ub1d2\ub1d3\ub1d4\ub1d5\ub1d6\ub1d7\ub1d8\ub1d9\ub1da\ub1db\ub1dc\ub1dd\ub1de\ub1df\ub1e0\ub1e1\ub1e2\ub1e3\ub1e4\ub1e5\ub1e6\ub1e7\ub1e8\ub1e9\ub1ea\ub1eb\ub1ec\ub1ed\ub1ee\ub1ef\ub1f0\ub1f1\ub1f2\ub1f3\ub1f4\ub1f5\ub1f6\ub1f7\ub1f8\ub1f9\ub1fa\ub1fb\ub1fc\ub1fd\ub1fe\ub1ff\ub200\ub201\ub202\ub203\ub204\ub205\ub206\ub207\ub208\ub209\ub20a\ub20b\ub20c\ub20d\ub20e\ub20f\ub210\ub211\ub212\ub213\ub214\ub215\ub216\ub217\ub218\ub219\ub21a\ub21b\ub21c\ub21d\ub21e\ub21f\ub220\ub221\ub222\ub223\ub224\ub225\ub226\ub227\ub228\ub229\ub22a\ub22b\ub22c\ub22d\ub22e\ub22f\ub230\ub231\ub232\ub233\ub234\ub235\ub236\ub237\ub238\ub239\ub23a\ub23b\ub23c\ub23d\ub23e\ub23f\ub240\ub241\ub242\ub243\ub244\ub245\ub246\ub247\ub248\ub249\ub24a\ub24b\ub24c\ub24d\ub24e\ub24f\ub250\ub251\ub252\ub253\ub254\ub255\ub256\ub257\ub258\ub259\ub25a\ub25b\ub25c\ub25d\ub25e\ub25f\ub260\ub261\ub262\ub263\ub264\ub265\ub266\ub267\ub268\ub269\ub26a\ub26b\ub26c\ub26d\ub26e\ub26f\ub270\ub271\ub272\ub273\ub274\ub275\ub276\ub277\ub278\ub279\ub27a\ub27b\ub27c\ub27d\ub27e\ub27f\ub280\ub281\ub282\ub283\ub284\ub285\ub286\ub287\ub288\ub289\ub28a\ub28b\ub28c\ub28d\ub28e\ub28f\ub290\ub291\ub292\ub293\ub294\ub295\ub296\ub297\ub298\ub299\ub29a\ub29b\ub29c\ub29d\ub29e\ub29f\ub2a0\ub2a1\ub2a2\ub2a3\ub2a4\ub2a5\ub2a6\ub2a7\ub2a8\ub2a9\ub2aa\ub2ab\ub2ac\ub2ad\ub2ae\ub2af\ub2b0\ub2b1\ub2b2\ub2b3\ub2b4\ub2b5\ub2b6\ub2b7\ub2b8\ub2b9\ub2ba\ub2bb\ub2bc\ub2bd\ub2be\ub2bf\ub2c0\ub2c1\ub2c2\ub2c3\ub2c4\ub2c5\ub2c6\ub2c7\ub2c8\ub2c9\ub2ca\ub2cb\ub2cc\ub2cd\ub2ce\ub2cf\ub2d0\ub2d1\ub2d2\ub2d3\ub2d4\ub2d5\ub2d6\ub2d7\ub2d8\ub2d9\ub2da\ub2db\ub2dc\ub2dd\ub2de\ub2df\ub2e0\ub2e1\ub2e2\ub2e3\ub2e4\ub2e5\ub2e6\ub2e7\ub2e8\ub2e9\ub2ea\ub2eb\ub2ec\ub2ed\ub2ee\ub2ef\ub2f0\ub2f1\ub2f2\ub2f3\ub2f4\ub2f5\ub2f6\ub2f7\ub2f8\ub2f9\ub2fa\ub2fb\ub2fc\ub2fd\ub2fe\ub2ff\ub300\ub301\ub302\ub303\ub304\ub305\ub306\ub307\ub308\ub309\ub30a\ub30b\ub30c\ub30d\ub30e\ub30f\ub310\ub311\ub312\ub313\ub314\ub315\ub316\ub317\ub318\ub319\ub31a\ub31b\ub31c\ub31d\ub31e\ub31f\ub320\ub321\ub322\ub323\ub324\ub325\ub326\ub327\ub328\ub329\ub32a\ub32b\ub32c\ub32d\ub32e\ub32f\ub330\ub331\ub332\ub333\ub334\ub335\ub336\ub337\ub338\ub339\ub33a\ub33b\ub33c\ub33d\ub33e\ub33f\ub340\ub341\ub342\ub343\ub344\ub345\ub346\ub347\ub348\ub349\ub34a\ub34b\ub34c\ub34d\ub34e\ub34f\ub350\ub351\ub352\ub353\ub354\ub355\ub356\ub357\ub358\ub359\ub35a\ub35b\ub35c\ub35d\ub35e\ub35f\ub360\ub361\ub362\ub363\ub364\ub365\ub366\ub367\ub368\ub369\ub36a\ub36b\ub36c\ub36d\ub36e\ub36f\ub370\ub371\ub372\ub373\ub374\ub375\ub376\ub377\ub378\ub379\ub37a\ub37b\ub37c\ub37d\ub37e\ub37f\ub380\ub381\ub382\ub383\ub384\ub385\ub386\ub387\ub388\ub389\ub38a\ub38b\ub38c\ub38d\ub38e\ub38f\ub390\ub391\ub392\ub393\ub394\ub395\ub396\ub397\ub398\ub399\ub39a\ub39b\ub39c\ub39d\ub39e\ub39f\ub3a0\ub3a1\ub3a2\ub3a3\ub3a4\ub3a5\ub3a6\ub3a7\ub3a8\ub3a9\ub3aa\ub3ab\ub3ac\ub3ad\ub3ae\ub3af\ub3b0\ub3b1\ub3b2\ub3b3\ub3b4\ub3b5\ub3b6\ub3b7\ub3b8\ub3b9\ub3ba\ub3bb\ub3bc\ub3bd\ub3be\ub3bf\ub3c0\ub3c1\ub3c2\ub3c3\ub3c4\ub3c5\ub3c6\ub3c7\ub3c8\ub3c9\ub3ca\ub3cb\ub3cc\ub3cd\ub3ce\ub3cf\ub3d0\ub3d1\ub3d2\ub3d3\ub3d4\ub3d5\ub3d6\ub3d7\ub3d8\ub3d9\ub3da\ub3db\ub3dc\ub3dd\ub3de\ub3df\ub3e0\ub3e1\ub3e2\ub3e3\ub3e4\ub3e5\ub3e6\ub3e7\ub3e8\ub3e9\ub3ea\ub3eb\ub3ec\ub3ed\ub3ee\ub3ef\ub3f0\ub3f1\ub3f2\ub3f3\ub3f4\ub3f5\ub3f6\ub3f7\ub3f8\ub3f9\ub3fa\ub3fb\ub3fc\ub3fd\ub3fe\ub3ff\ub400\ub401\ub402\ub403\ub404\ub405\ub406\ub407\ub408\ub409\ub40a\ub40b\ub40c\ub40d\ub40e\ub40f\ub410\ub411\ub412\ub413\ub414\ub415\ub416\ub417\ub418\ub419\ub41a\ub41b\ub41c\ub41d\ub41e\ub41f\ub420\ub421\ub422\ub423\ub424\ub425\ub426\ub427\ub428\ub429\ub42a\ub42b\ub42c\ub42d\ub42e\ub42f\ub430\ub431\ub432\ub433\ub434\ub435\ub436\ub437\ub438\ub439\ub43a\ub43b\ub43c\ub43d\ub43e\ub43f\ub440\ub441\ub442\ub443\ub444\ub445\ub446\ub447\ub448\ub449\ub44a\ub44b\ub44c\ub44d\ub44e\ub44f\ub450\ub451\ub452\ub453\ub454\ub455\ub456\ub457\ub458\ub459\ub45a\ub45b\ub45c\ub45d\ub45e\ub45f\ub460\ub461\ub462\ub463\ub464\ub465\ub466\ub467\ub468\ub469\ub46a\ub46b\ub46c\ub46d\ub46e\ub46f\ub470\ub471\ub472\ub473\ub474\ub475\ub476\ub477\ub478\ub479\ub47a\ub47b\ub47c\ub47d\ub47e\ub47f\ub480\ub481\ub482\ub483\ub484\ub485\ub486\ub487\ub488\ub489\ub48a\ub48b\ub48c\ub48d\ub48e\ub48f\ub490\ub491\ub492\ub493\ub494\ub495\ub496\ub497\ub498\ub499\ub49a\ub49b\ub49c\ub49d\ub49e\ub49f\ub4a0\ub4a1\ub4a2\ub4a3\ub4a4\ub4a5\ub4a6\ub4a7\ub4a8\ub4a9\ub4aa\ub4ab\ub4ac\ub4ad\ub4ae\ub4af\ub4b0\ub4b1\ub4b2\ub4b3\ub4b4\ub4b5\ub4b6\ub4b7\ub4b8\ub4b9\ub4ba\ub4bb\ub4bc\ub4bd\ub4be\ub4bf\ub4c0\ub4c1\ub4c2\ub4c3\ub4c4\ub4c5\ub4c6\ub4c7\ub4c8\ub4c9\ub4ca\ub4cb\ub4cc\ub4cd\ub4ce\ub4cf\ub4d0\ub4d1\ub4d2\ub4d3\ub4d4\ub4d5\ub4d6\ub4d7\ub4d8\ub4d9\ub4da\ub4db\ub4dc\ub4dd\ub4de\ub4df\ub4e0\ub4e1\ub4e2\ub4e3\ub4e4\ub4e5\ub4e6\ub4e7\ub4e8\ub4e9\ub4ea\ub4eb\ub4ec\ub4ed\ub4ee\ub4ef\ub4f0\ub4f1\ub4f2\ub4f3\ub4f4\ub4f5\ub4f6\ub4f7\ub4f8\ub4f9\ub4fa\ub4fb\ub4fc\ub4fd\ub4fe\ub4ff\ub500\ub501\ub502\ub503\ub504\ub505\ub506\ub507\ub508\ub509\ub50a\ub50b\ub50c\ub50d\ub50e\ub50f\ub510\ub511\ub512\ub513\ub514\ub515\ub516\ub517\ub518\ub519\ub51a\ub51b\ub51c\ub51d\ub51e\ub51f\ub520\ub521\ub522\ub523\ub524\ub525\ub526\ub527\ub528\ub529\ub52a\ub52b\ub52c\ub52d\ub52e\ub52f\ub530\ub531\ub532\ub533\ub534\ub535\ub536\ub537\ub538\ub539\ub53a\ub53b\ub53c\ub53d\ub53e\ub53f\ub540\ub541\ub542\ub543\ub544\ub545\ub546\ub547\ub548\ub549\ub54a\ub54b\ub54c\ub54d\ub54e\ub54f\ub550\ub551\ub552\ub553\ub554\ub555\ub556\ub557\ub558\ub559\ub55a\ub55b\ub55c\ub55d\ub55e\ub55f\ub560\ub561\ub562\ub563\ub564\ub565\ub566\ub567\ub568\ub569\ub56a\ub56b\ub56c\ub56d\ub56e\ub56f\ub570\ub571\ub572\ub573\ub574\ub575\ub576\ub577\ub578\ub579\ub57a\ub57b\ub57c\ub57d\ub57e\ub57f\ub580\ub581\ub582\ub583\ub584\ub585\ub586\ub587\ub588\ub589\ub58a\ub58b\ub58c\ub58d\ub58e\ub58f\ub590\ub591\ub592\ub593\ub594\ub595\ub596\ub597\ub598\ub599\ub59a\ub59b\ub59c\ub59d\ub59e\ub59f\ub5a0\ub5a1\ub5a2\ub5a3\ub5a4\ub5a5\ub5a6\ub5a7\ub5a8\ub5a9\ub5aa\ub5ab\ub5ac\ub5ad\ub5ae\ub5af\ub5b0\ub5b1\ub5b2\ub5b3\ub5b4\ub5b5\ub5b6\ub5b7\ub5b8\ub5b9\ub5ba\ub5bb\ub5bc\ub5bd\ub5be\ub5bf\ub5c0\ub5c1\ub5c2\ub5c3\ub5c4\ub5c5\ub5c6\ub5c7\ub5c8\ub5c9\ub5ca\ub5cb\ub5cc\ub5cd\ub5ce\ub5cf\ub5d0\ub5d1\ub5d2\ub5d3\ub5d4\ub5d5\ub5d6\ub5d7\ub5d8\ub5d9\ub5da\ub5db\ub5dc\ub5dd\ub5de\ub5df\ub5e0\ub5e1\ub5e2\ub5e3\ub5e4\ub5e5\ub5e6\ub5e7\ub5e8\ub5e9\ub5ea\ub5eb\ub5ec\ub5ed\ub5ee\ub5ef\ub5f0\ub5f1\ub5f2\ub5f3\ub5f4\ub5f5\ub5f6\ub5f7\ub5f8\ub5f9\ub5fa\ub5fb\ub5fc\ub5fd\ub5fe\ub5ff\ub600\ub601\ub602\ub603\ub604\ub605\ub606\ub607\ub608\ub609\ub60a\ub60b\ub60c\ub60d\ub60e\ub60f\ub610\ub611\ub612\ub613\ub614\ub615\ub616\ub617\ub618\ub619\ub61a\ub61b\ub61c\ub61d\ub61e\ub61f\ub620\ub621\ub622\ub623\ub624\ub625\ub626\ub627\ub628\ub629\ub62a\ub62b\ub62c\ub62d\ub62e\ub62f\ub630\ub631\ub632\ub633\ub634\ub635\ub636\ub637\ub638\ub639\ub63a\ub63b\ub63c\ub63d\ub63e\ub63f\ub640\ub641\ub642\ub643\ub644\ub645\ub646\ub647\ub648\ub649\ub64a\ub64b\ub64c\ub64d\ub64e\ub64f\ub650\ub651\ub652\ub653\ub654\ub655\ub656\ub657\ub658\ub659\ub65a\ub65b\ub65c\ub65d\ub65e\ub65f\ub660\ub661\ub662\ub663\ub664\ub665\ub666\ub667\ub668\ub669\ub66a\ub66b\ub66c\ub66d\ub66e\ub66f\ub670\ub671\ub672\ub673\ub674\ub675\ub676\ub677\ub678\ub679\ub67a\ub67b\ub67c\ub67d\ub67e\ub67f\ub680\ub681\ub682\ub683\ub684\ub685\ub686\ub687\ub688\ub689\ub68a\ub68b\ub68c\ub68d\ub68e\ub68f\ub690\ub691\ub692\ub693\ub694\ub695\ub696\ub697\ub698\ub699\ub69a\ub69b\ub69c\ub69d\ub69e\ub69f\ub6a0\ub6a1\ub6a2\ub6a3\ub6a4\ub6a5\ub6a6\ub6a7\ub6a8\ub6a9\ub6aa\ub6ab\ub6ac\ub6ad\ub6ae\ub6af\ub6b0\ub6b1\ub6b2\ub6b3\ub6b4\ub6b5\ub6b6\ub6b7\ub6b8\ub6b9\ub6ba\ub6bb\ub6bc\ub6bd\ub6be\ub6bf\ub6c0\ub6c1\ub6c2\ub6c3\ub6c4\ub6c5\ub6c6\ub6c7\ub6c8\ub6c9\ub6ca\ub6cb\ub6cc\ub6cd\ub6ce\ub6cf\ub6d0\ub6d1\ub6d2\ub6d3\ub6d4\ub6d5\ub6d6\ub6d7\ub6d8\ub6d9\ub6da\ub6db\ub6dc\ub6dd\ub6de\ub6df\ub6e0\ub6e1\ub6e2\ub6e3\ub6e4\ub6e5\ub6e6\ub6e7\ub6e8\ub6e9\ub6ea\ub6eb\ub6ec\ub6ed\ub6ee\ub6ef\ub6f0\ub6f1\ub6f2\ub6f3\ub6f4\ub6f5\ub6f6\ub6f7\ub6f8\ub6f9\ub6fa\ub6fb\ub6fc\ub6fd\ub6fe\ub6ff\ub700\ub701\ub702\ub703\ub704\ub705\ub706\ub707\ub708\ub709\ub70a\ub70b\ub70c\ub70d\ub70e\ub70f\ub710\ub711\ub712\ub713\ub714\ub715\ub716\ub717\ub718\ub719\ub71a\ub71b\ub71c\ub71d\ub71e\ub71f\ub720\ub721\ub722\ub723\ub724\ub725\ub726\ub727\ub728\ub729\ub72a\ub72b\ub72c\ub72d\ub72e\ub72f\ub730\ub731\ub732\ub733\ub734\ub735\ub736\ub737\ub738\ub739\ub73a\ub73b\ub73c\ub73d\ub73e\ub73f\ub740\ub741\ub742\ub743\ub744\ub745\ub746\ub747\ub748\ub749\ub74a\ub74b\ub74c\ub74d\ub74e\ub74f\ub750\ub751\ub752\ub753\ub754\ub755\ub756\ub757\ub758\ub759\ub75a\ub75b\ub75c\ub75d\ub75e\ub75f\ub760\ub761\ub762\ub763\ub764\ub765\ub766\ub767\ub768\ub769\ub76a\ub76b\ub76c\ub76d\ub76e\ub76f\ub770\ub771\ub772\ub773\ub774\ub775\ub776\ub777\ub778\ub779\ub77a\ub77b\ub77c\ub77d\ub77e\ub77f\ub780\ub781\ub782\ub783\ub784\ub785\ub786\ub787\ub788\ub789\ub78a\ub78b\ub78c\ub78d\ub78e\ub78f\ub790\ub791\ub792\ub793\ub794\ub795\ub796\ub797\ub798\ub799\ub79a\ub79b\ub79c\ub79d\ub79e\ub79f\ub7a0\ub7a1\ub7a2\ub7a3\ub7a4\ub7a5\ub7a6\ub7a7\ub7a8\ub7a9\ub7aa\ub7ab\ub7ac\ub7ad\ub7ae\ub7af\ub7b0\ub7b1\ub7b2\ub7b3\ub7b4\ub7b5\ub7b6\ub7b7\ub7b8\ub7b9\ub7ba\ub7bb\ub7bc\ub7bd\ub7be\ub7bf\ub7c0\ub7c1\ub7c2\ub7c3\ub7c4\ub7c5\ub7c6\ub7c7\ub7c8\ub7c9\ub7ca\ub7cb\ub7cc\ub7cd\ub7ce\ub7cf\ub7d0\ub7d1\ub7d2\ub7d3\ub7d4\ub7d5\ub7d6\ub7d7\ub7d8\ub7d9\ub7da\ub7db\ub7dc\ub7dd\ub7de\ub7df\ub7e0\ub7e1\ub7e2\ub7e3\ub7e4\ub7e5\ub7e6\ub7e7\ub7e8\ub7e9\ub7ea\ub7eb\ub7ec\ub7ed\ub7ee\ub7ef\ub7f0\ub7f1\ub7f2\ub7f3\ub7f4\ub7f5\ub7f6\ub7f7\ub7f8\ub7f9\ub7fa\ub7fb\ub7fc\ub7fd\ub7fe\ub7ff\ub800\ub801\ub802\ub803\ub804\ub805\ub806\ub807\ub808\ub809\ub80a\ub80b\ub80c\ub80d\ub80e\ub80f\ub810\ub811\ub812\ub813\ub814\ub815\ub816\ub817\ub818\ub819\ub81a\ub81b\ub81c\ub81d\ub81e\ub81f\ub820\ub821\ub822\ub823\ub824\ub825\ub826\ub827\ub828\ub829\ub82a\ub82b\ub82c\ub82d\ub82e\ub82f\ub830\ub831\ub832\ub833\ub834\ub835\ub836\ub837\ub838\ub839\ub83a\ub83b\ub83c\ub83d\ub83e\ub83f\ub840\ub841\ub842\ub843\ub844\ub845\ub846\ub847\ub848\ub849\ub84a\ub84b\ub84c\ub84d\ub84e\ub84f\ub850\ub851\ub852\ub853\ub854\ub855\ub856\ub857\ub858\ub859\ub85a\ub85b\ub85c\ub85d\ub85e\ub85f\ub860\ub861\ub862\ub863\ub864\ub865\ub866\ub867\ub868\ub869\ub86a\ub86b\ub86c\ub86d\ub86e\ub86f\ub870\ub871\ub872\ub873\ub874\ub875\ub876\ub877\ub878\ub879\ub87a\ub87b\ub87c\ub87d\ub87e\ub87f\ub880\ub881\ub882\ub883\ub884\ub885\ub886\ub887\ub888\ub889\ub88a\ub88b\ub88c\ub88d\ub88e\ub88f\ub890\ub891\ub892\ub893\ub894\ub895\ub896\ub897\ub898\ub899\ub89a\ub89b\ub89c\ub89d\ub89e\ub89f\ub8a0\ub8a1\ub8a2\ub8a3\ub8a4\ub8a5\ub8a6\ub8a7\ub8a8\ub8a9\ub8aa\ub8ab\ub8ac\ub8ad\ub8ae\ub8af\ub8b0\ub8b1\ub8b2\ub8b3\ub8b4\ub8b5\ub8b6\ub8b7\ub8b8\ub8b9\ub8ba\ub8bb\ub8bc\ub8bd\ub8be\ub8bf\ub8c0\ub8c1\ub8c2\ub8c3\ub8c4\ub8c5\ub8c6\ub8c7\ub8c8\ub8c9\ub8ca\ub8cb\ub8cc\ub8cd\ub8ce\ub8cf\ub8d0\ub8d1\ub8d2\ub8d3\ub8d4\ub8d5\ub8d6\ub8d7\ub8d8\ub8d9\ub8da\ub8db\ub8dc\ub8dd\ub8de\ub8df\ub8e0\ub8e1\ub8e2\ub8e3\ub8e4\ub8e5\ub8e6\ub8e7\ub8e8\ub8e9\ub8ea\ub8eb\ub8ec\ub8ed\ub8ee\ub8ef\ub8f0\ub8f1\ub8f2\ub8f3\ub8f4\ub8f5\ub8f6\ub8f7\ub8f8\ub8f9\ub8fa\ub8fb\ub8fc\ub8fd\ub8fe\ub8ff\ub900\ub901\ub902\ub903\ub904\ub905\ub906\ub907\ub908\ub909\ub90a\ub90b\ub90c\ub90d\ub90e\ub90f\ub910\ub911\ub912\ub913\ub914\ub915\ub916\ub917\ub918\ub919\ub91a\ub91b\ub91c\ub91d\ub91e\ub91f\ub920\ub921\ub922\ub923\ub924\ub925\ub926\ub927\ub928\ub929\ub92a\ub92b\ub92c\ub92d\ub92e\ub92f\ub930\ub931\ub932\ub933\ub934\ub935\ub936\ub937\ub938\ub939\ub93a\ub93b\ub93c\ub93d\ub93e\ub93f\ub940\ub941\ub942\ub943\ub944\ub945\ub946\ub947\ub948\ub949\ub94a\ub94b\ub94c\ub94d\ub94e\ub94f\ub950\ub951\ub952\ub953\ub954\ub955\ub956\ub957\ub958\ub959\ub95a\ub95b\ub95c\ub95d\ub95e\ub95f\ub960\ub961\ub962\ub963\ub964\ub965\ub966\ub967\ub968\ub969\ub96a\ub96b\ub96c\ub96d\ub96e\ub96f\ub970\ub971\ub972\ub973\ub974\ub975\ub976\ub977\ub978\ub979\ub97a\ub97b\ub97c\ub97d\ub97e\ub97f\ub980\ub981\ub982\ub983\ub984\ub985\ub986\ub987\ub988\ub989\ub98a\ub98b\ub98c\ub98d\ub98e\ub98f\ub990\ub991\ub992\ub993\ub994\ub995\ub996\ub997\ub998\ub999\ub99a\ub99b\ub99c\ub99d\ub99e\ub99f\ub9a0\ub9a1\ub9a2\ub9a3\ub9a4\ub9a5\ub9a6\ub9a7\ub9a8\ub9a9\ub9aa\ub9ab\ub9ac\ub9ad\ub9ae\ub9af\ub9b0\ub9b1\ub9b2\ub9b3\ub9b4\ub9b5\ub9b6\ub9b7\ub9b8\ub9b9\ub9ba\ub9bb\ub9bc\ub9bd\ub9be\ub9bf\ub9c0\ub9c1\ub9c2\ub9c3\ub9c4\ub9c5\ub9c6\ub9c7\ub9c8\ub9c9\ub9ca\ub9cb\ub9cc\ub9cd\ub9ce\ub9cf\ub9d0\ub9d1\ub9d2\ub9d3\ub9d4\ub9d5\ub9d6\ub9d7\ub9d8\ub9d9\ub9da\ub9db\ub9dc\ub9dd\ub9de\ub9df\ub9e0\ub9e1\ub9e2\ub9e3\ub9e4\ub9e5\ub9e6\ub9e7\ub9e8\ub9e9\ub9ea\ub9eb\ub9ec\ub9ed\ub9ee\ub9ef\ub9f0\ub9f1\ub9f2\ub9f3\ub9f4\ub9f5\ub9f6\ub9f7\ub9f8\ub9f9\ub9fa\ub9fb\ub9fc\ub9fd\ub9fe\ub9ff\uba00\uba01\uba02\uba03\uba04\uba05\uba06\uba07\uba08\uba09\uba0a\uba0b\uba0c\uba0d\uba0e\uba0f\uba10\uba11\uba12\uba13\uba14\uba15\uba16\uba17\uba18\uba19\uba1a\uba1b\uba1c\uba1d\uba1e\uba1f\uba20\uba21\uba22\uba23\uba24\uba25\uba26\uba27\uba28\uba29\uba2a\uba2b\uba2c\uba2d\uba2e\uba2f\uba30\uba31\uba32\uba33\uba34\uba35\uba36\uba37\uba38\uba39\uba3a\uba3b\uba3c\uba3d\uba3e\uba3f\uba40\uba41\uba42\uba43\uba44\uba45\uba46\uba47\uba48\uba49\uba4a\uba4b\uba4c\uba4d\uba4e\uba4f\uba50\uba51\uba52\uba53\uba54\uba55\uba56\uba57\uba58\uba59\uba5a\uba5b\uba5c\uba5d\uba5e\uba5f\uba60\uba61\uba62\uba63\uba64\uba65\uba66\uba67\uba68\uba69\uba6a\uba6b\uba6c\uba6d\uba6e\uba6f\uba70\uba71\uba72\uba73\uba74\uba75\uba76\uba77\uba78\uba79\uba7a\uba7b\uba7c\uba7d\uba7e\uba7f\uba80\uba81\uba82\uba83\uba84\uba85\uba86\uba87\uba88\uba89\uba8a\uba8b\uba8c\uba8d\uba8e\uba8f\uba90\uba91\uba92\uba93\uba94\uba95\uba96\uba97\uba98\uba99\uba9a\uba9b\uba9c\uba9d\uba9e\uba9f\ubaa0\ubaa1\ubaa2\ubaa3\ubaa4\ubaa5\ubaa6\ubaa7\ubaa8\ubaa9\ubaaa\ubaab\ubaac\ubaad\ubaae\ubaaf\ubab0\ubab1\ubab2\ubab3\ubab4\ubab5\ubab6\ubab7\ubab8\ubab9\ubaba\ubabb\ubabc\ubabd\ubabe\ubabf\ubac0\ubac1\ubac2\ubac3\ubac4\ubac5\ubac6\ubac7\ubac8\ubac9\ubaca\ubacb\ubacc\ubacd\ubace\ubacf\ubad0\ubad1\ubad2\ubad3\ubad4\ubad5\ubad6\ubad7\ubad8\ubad9\ubada\ubadb\ubadc\ubadd\ubade\ubadf\ubae0\ubae1\ubae2\ubae3\ubae4\ubae5\ubae6\ubae7\ubae8\ubae9\ubaea\ubaeb\ubaec\ubaed\ubaee\ubaef\ubaf0\ubaf1\ubaf2\ubaf3\ubaf4\ubaf5\ubaf6\ubaf7\ubaf8\ubaf9\ubafa\ubafb\ubafc\ubafd\ubafe\ubaff\ubb00\ubb01\ubb02\ubb03\ubb04\ubb05\ubb06\ubb07\ubb08\ubb09\ubb0a\ubb0b\ubb0c\ubb0d\ubb0e\ubb0f\ubb10\ubb11\ubb12\ubb13\ubb14\ubb15\ubb16\ubb17\ubb18\ubb19\ubb1a\ubb1b\ubb1c\ubb1d\ubb1e\ubb1f\ubb20\ubb21\ubb22\ubb23\ubb24\ubb25\ubb26\ubb27\ubb28\ubb29\ubb2a\ubb2b\ubb2c\ubb2d\ubb2e\ubb2f\ubb30\ubb31\ubb32\ubb33\ubb34\ubb35\ubb36\ubb37\ubb38\ubb39\ubb3a\ubb3b\ubb3c\ubb3d\ubb3e\ubb3f\ubb40\ubb41\ubb42\ubb43\ubb44\ubb45\ubb46\ubb47\ubb48\ubb49\ubb4a\ubb4b\ubb4c\ubb4d\ubb4e\ubb4f\ubb50\ubb51\ubb52\ubb53\ubb54\ubb55\ubb56\ubb57\ubb58\ubb59\ubb5a\ubb5b\ubb5c\ubb5d\ubb5e\ubb5f\ubb60\ubb61\ubb62\ubb63\ubb64\ubb65\ubb66\ubb67\ubb68\ubb69\ubb6a\ubb6b\ubb6c\ubb6d\ubb6e\ubb6f\ubb70\ubb71\ubb72\ubb73\ubb74\ubb75\ubb76\ubb77\ubb78\ubb79\ubb7a\ubb7b\ubb7c\ubb7d\ubb7e\ubb7f\ubb80\ubb81\ubb82\ubb83\ubb84\ubb85\ubb86\ubb87\ubb88\ubb89\ubb8a\ubb8b\ubb8c\ubb8d\ubb8e\ubb8f\ubb90\ubb91\ubb92\ubb93\ubb94\ubb95\ubb96\ubb97\ubb98\ubb99\ubb9a\ubb9b\ubb9c\ubb9d\ubb9e\ubb9f\ubba0\ubba1\ubba2\ubba3\ubba4\ubba5\ubba6\ubba7\ubba8\ubba9\ubbaa\ubbab\ubbac\ubbad\ubbae\ubbaf\ubbb0\ubbb1\ubbb2\ubbb3\ubbb4\ubbb5\ubbb6\ubbb7\ubbb8\ubbb9\ubbba\ubbbb\ubbbc\ubbbd\ubbbe\ubbbf\ubbc0\ubbc1\ubbc2\ubbc3\ubbc4\ubbc5\ubbc6\ubbc7\ubbc8\ubbc9\ubbca\ubbcb\ubbcc\ubbcd\ubbce\ubbcf\ubbd0\ubbd1\ubbd2\ubbd3\ubbd4\ubbd5\ubbd6\ubbd7\ubbd8\ubbd9\ubbda\ubbdb\ubbdc\ubbdd\ubbde\ubbdf\ubbe0\ubbe1\ubbe2\ubbe3\ubbe4\ubbe5\ubbe6\ubbe7\ubbe8\ubbe9\ubbea\ubbeb\ubbec\ubbed\ubbee\ubbef\ubbf0\ubbf1\ubbf2\ubbf3\ubbf4\ubbf5\ubbf6\ubbf7\ubbf8\ubbf9\ubbfa\ubbfb\ubbfc\ubbfd\ubbfe\ubbff\ubc00\ubc01\ubc02\ubc03\ubc04\ubc05\ubc06\ubc07\ubc08\ubc09\ubc0a\ubc0b\ubc0c\ubc0d\ubc0e\ubc0f\ubc10\ubc11\ubc12\ubc13\ubc14\ubc15\ubc16\ubc17\ubc18\ubc19\ubc1a\ubc1b\ubc1c\ubc1d\ubc1e\ubc1f\ubc20\ubc21\ubc22\ubc23\ubc24\ubc25\ubc26\ubc27\ubc28\ubc29\ubc2a\ubc2b\ubc2c\ubc2d\ubc2e\ubc2f\ubc30\ubc31\ubc32\ubc33\ubc34\ubc35\ubc36\ubc37\ubc38\ubc39\ubc3a\ubc3b\ubc3c\ubc3d\ubc3e\ubc3f\ubc40\ubc41\ubc42\ubc43\ubc44\ubc45\ubc46\ubc47\ubc48\ubc49\ubc4a\ubc4b\ubc4c\ubc4d\ubc4e\ubc4f\ubc50\ubc51\ubc52\ubc53\ubc54\ubc55\ubc56\ubc57\ubc58\ubc59\ubc5a\ubc5b\ubc5c\ubc5d\ubc5e\ubc5f\ubc60\ubc61\ubc62\ubc63\ubc64\ubc65\ubc66\ubc67\ubc68\ubc69\ubc6a\ubc6b\ubc6c\ubc6d\ubc6e\ubc6f\ubc70\ubc71\ubc72\ubc73\ubc74\ubc75\ubc76\ubc77\ubc78\ubc79\ubc7a\ubc7b\ubc7c\ubc7d\ubc7e\ubc7f\ubc80\ubc81\ubc82\ubc83\ubc84\ubc85\ubc86\ubc87\ubc88\ubc89\ubc8a\ubc8b\ubc8c\ubc8d\ubc8e\ubc8f\ubc90\ubc91\ubc92\ubc93\ubc94\ubc95\ubc96\ubc97\ubc98\ubc99\ubc9a\ubc9b\ubc9c\ubc9d\ubc9e\ubc9f\ubca0\ubca1\ubca2\ubca3\ubca4\ubca5\ubca6\ubca7\ubca8\ubca9\ubcaa\ubcab\ubcac\ubcad\ubcae\ubcaf\ubcb0\ubcb1\ubcb2\ubcb3\ubcb4\ubcb5\ubcb6\ubcb7\ubcb8\ubcb9\ubcba\ubcbb\ubcbc\ubcbd\ubcbe\ubcbf\ubcc0\ubcc1\ubcc2\ubcc3\ubcc4\ubcc5\ubcc6\ubcc7\ubcc8\ubcc9\ubcca\ubccb\ubccc\ubccd\ubcce\ubccf\ubcd0\ubcd1\ubcd2\ubcd3\ubcd4\ubcd5\ubcd6\ubcd7\ubcd8\ubcd9\ubcda\ubcdb\ubcdc\ubcdd\ubcde\ubcdf\ubce0\ubce1\ubce2\ubce3\ubce4\ubce5\ubce6\ubce7\ubce8\ubce9\ubcea\ubceb\ubcec\ubced\ubcee\ubcef\ubcf0\ubcf1\ubcf2\ubcf3\ubcf4\ubcf5\ubcf6\ubcf7\ubcf8\ubcf9\ubcfa\ubcfb\ubcfc\ubcfd\ubcfe\ubcff\ubd00\ubd01\ubd02\ubd03\ubd04\ubd05\ubd06\ubd07\ubd08\ubd09\ubd0a\ubd0b\ubd0c\ubd0d\ubd0e\ubd0f\ubd10\ubd11\ubd12\ubd13\ubd14\ubd15\ubd16\ubd17\ubd18\ubd19\ubd1a\ubd1b\ubd1c\ubd1d\ubd1e\ubd1f\ubd20\ubd21\ubd22\ubd23\ubd24\ubd25\ubd26\ubd27\ubd28\ubd29\ubd2a\ubd2b\ubd2c\ubd2d\ubd2e\ubd2f\ubd30\ubd31\ubd32\ubd33\ubd34\ubd35\ubd36\ubd37\ubd38\ubd39\ubd3a\ubd3b\ubd3c\ubd3d\ubd3e\ubd3f\ubd40\ubd41\ubd42\ubd43\ubd44\ubd45\ubd46\ubd47\ubd48\ubd49\ubd4a\ubd4b\ubd4c\ubd4d\ubd4e\ubd4f\ubd50\ubd51\ubd52\ubd53\ubd54\ubd55\ubd56\ubd57\ubd58\ubd59\ubd5a\ubd5b\ubd5c\ubd5d\ubd5e\ubd5f\ubd60\ubd61\ubd62\ubd63\ubd64\ubd65\ubd66\ubd67\ubd68\ubd69\ubd6a\ubd6b\ubd6c\ubd6d\ubd6e\ubd6f\ubd70\ubd71\ubd72\ubd73\ubd74\ubd75\ubd76\ubd77\ubd78\ubd79\ubd7a\ubd7b\ubd7c\ubd7d\ubd7e\ubd7f\ubd80\ubd81\ubd82\ubd83\ubd84\ubd85\ubd86\ubd87\ubd88\ubd89\ubd8a\ubd8b\ubd8c\ubd8d\ubd8e\ubd8f\ubd90\ubd91\ubd92\ubd93\ubd94\ubd95\ubd96\ubd97\ubd98\ubd99\ubd9a\ubd9b\ubd9c\ubd9d\ubd9e\ubd9f\ubda0\ubda1\ubda2\ubda3\ubda4\ubda5\ubda6\ubda7\ubda8\ubda9\ubdaa\ubdab\ubdac\ubdad\ubdae\ubdaf\ubdb0\ubdb1\ubdb2\ubdb3\ubdb4\ubdb5\ubdb6\ubdb7\ubdb8\ubdb9\ubdba\ubdbb\ubdbc\ubdbd\ubdbe\ubdbf\ubdc0\ubdc1\ubdc2\ubdc3\ubdc4\ubdc5\ubdc6\ubdc7\ubdc8\ubdc9\ubdca\ubdcb\ubdcc\ubdcd\ubdce\ubdcf\ubdd0\ubdd1\ubdd2\ubdd3\ubdd4\ubdd5\ubdd6\ubdd7\ubdd8\ubdd9\ubdda\ubddb\ubddc\ubddd\ubdde\ubddf\ubde0\ubde1\ubde2\ubde3\ubde4\ubde5\ubde6\ubde7\ubde8\ubde9\ubdea\ubdeb\ubdec\ubded\ubdee\ubdef\ubdf0\ubdf1\ubdf2\ubdf3\ubdf4\ubdf5\ubdf6\ubdf7\ubdf8\ubdf9\ubdfa\ubdfb\ubdfc\ubdfd\ubdfe\ubdff\ube00\ube01\ube02\ube03\ube04\ube05\ube06\ube07\ube08\ube09\ube0a\ube0b\ube0c\ube0d\ube0e\ube0f\ube10\ube11\ube12\ube13\ube14\ube15\ube16\ube17\ube18\ube19\ube1a\ube1b\ube1c\ube1d\ube1e\ube1f\ube20\ube21\ube22\ube23\ube24\ube25\ube26\ube27\ube28\ube29\ube2a\ube2b\ube2c\ube2d\ube2e\ube2f\ube30\ube31\ube32\ube33\ube34\ube35\ube36\ube37\ube38\ube39\ube3a\ube3b\ube3c\ube3d\ube3e\ube3f\ube40\ube41\ube42\ube43\ube44\ube45\ube46\ube47\ube48\ube49\ube4a\ube4b\ube4c\ube4d\ube4e\ube4f\ube50\ube51\ube52\ube53\ube54\ube55\ube56\ube57\ube58\ube59\ube5a\ube5b\ube5c\ube5d\ube5e\ube5f\ube60\ube61\ube62\ube63\ube64\ube65\ube66\ube67\ube68\ube69\ube6a\ube6b\ube6c\ube6d\ube6e\ube6f\ube70\ube71\ube72\ube73\ube74\ube75\ube76\ube77\ube78\ube79\ube7a\ube7b\ube7c\ube7d\ube7e\ube7f\ube80\ube81\ube82\ube83\ube84\ube85\ube86\ube87\ube88\ube89\ube8a\ube8b\ube8c\ube8d\ube8e\ube8f\ube90\ube91\ube92\ube93\ube94\ube95\ube96\ube97\ube98\ube99\ube9a\ube9b\ube9c\ube9d\ube9e\ube9f\ubea0\ubea1\ubea2\ubea3\ubea4\ubea5\ubea6\ubea7\ubea8\ubea9\ubeaa\ubeab\ubeac\ubead\ubeae\ubeaf\ubeb0\ubeb1\ubeb2\ubeb3\ubeb4\ubeb5\ubeb6\ubeb7\ubeb8\ubeb9\ubeba\ubebb\ubebc\ubebd\ubebe\ubebf\ubec0\ubec1\ubec2\ubec3\ubec4\ubec5\ubec6\ubec7\ubec8\ubec9\ubeca\ubecb\ubecc\ubecd\ubece\ubecf\ubed0\ubed1\ubed2\ubed3\ubed4\ubed5\ubed6\ubed7\ubed8\ubed9\ubeda\ubedb\ubedc\ubedd\ubede\ubedf\ubee0\ubee1\ubee2\ubee3\ubee4\ubee5\ubee6\ubee7\ubee8\ubee9\ubeea\ubeeb\ubeec\ubeed\ubeee\ubeef\ubef0\ubef1\ubef2\ubef3\ubef4\ubef5\ubef6\ubef7\ubef8\ubef9\ubefa\ubefb\ubefc\ubefd\ubefe\ubeff\ubf00\ubf01\ubf02\ubf03\ubf04\ubf05\ubf06\ubf07\ubf08\ubf09\ubf0a\ubf0b\ubf0c\ubf0d\ubf0e\ubf0f\ubf10\ubf11\ubf12\ubf13\ubf14\ubf15\ubf16\ubf17\ubf18\ubf19\ubf1a\ubf1b\ubf1c\ubf1d\ubf1e\ubf1f\ubf20\ubf21\ubf22\ubf23\ubf24\ubf25\ubf26\ubf27\ubf28\ubf29\ubf2a\ubf2b\ubf2c\ubf2d\ubf2e\ubf2f\ubf30\ubf31\ubf32\ubf33\ubf34\ubf35\ubf36\ubf37\ubf38\ubf39\ubf3a\ubf3b\ubf3c\ubf3d\ubf3e\ubf3f\ubf40\ubf41\ubf42\ubf43\ubf44\ubf45\ubf46\ubf47\ubf48\ubf49\ubf4a\ubf4b\ubf4c\ubf4d\ubf4e\ubf4f\ubf50\ubf51\ubf52\ubf53\ubf54\ubf55\ubf56\ubf57\ubf58\ubf59\ubf5a\ubf5b\ubf5c\ubf5d\ubf5e\ubf5f\ubf60\ubf61\ubf62\ubf63\ubf64\ubf65\ubf66\ubf67\ubf68\ubf69\ubf6a\ubf6b\ubf6c\ubf6d\ubf6e\ubf6f\ubf70\ubf71\ubf72\ubf73\ubf74\ubf75\ubf76\ubf77\ubf78\ubf79\ubf7a\ubf7b\ubf7c\ubf7d\ubf7e\ubf7f\ubf80\ubf81\ubf82\ubf83\ubf84\ubf85\ubf86\ubf87\ubf88\ubf89\ubf8a\ubf8b\ubf8c\ubf8d\ubf8e\ubf8f\ubf90\ubf91\ubf92\ubf93\ubf94\ubf95\ubf96\ubf97\ubf98\ubf99\ubf9a\ubf9b\ubf9c\ubf9d\ubf9e\ubf9f\ubfa0\ubfa1\ubfa2\ubfa3\ubfa4\ubfa5\ubfa6\ubfa7\ubfa8\ubfa9\ubfaa\ubfab\ubfac\ubfad\ubfae\ubfaf\ubfb0\ubfb1\ubfb2\ubfb3\ubfb4\ubfb5\ubfb6\ubfb7\ubfb8\ubfb9\ubfba\ubfbb\ubfbc\ubfbd\ubfbe\ubfbf\ubfc0\ubfc1\ubfc2\ubfc3\ubfc4\ubfc5\ubfc6\ubfc7\ubfc8\ubfc9\ubfca\ubfcb\ubfcc\ubfcd\ubfce\ubfcf\ubfd0\ubfd1\ubfd2\ubfd3\ubfd4\ubfd5\ubfd6\ubfd7\ubfd8\ubfd9\ubfda\ubfdb\ubfdc\ubfdd\ubfde\ubfdf\ubfe0\ubfe1\ubfe2\ubfe3\ubfe4\ubfe5\ubfe6\ubfe7\ubfe8\ubfe9\ubfea\ubfeb\ubfec\ubfed\ubfee\ubfef\ubff0\ubff1\ubff2\ubff3\ubff4\ubff5\ubff6\ubff7\ubff8\ubff9\ubffa\ubffb\ubffc\ubffd\ubffe\ubfff\uc000\uc001\uc002\uc003\uc004\uc005\uc006\uc007\uc008\uc009\uc00a\uc00b\uc00c\uc00d\uc00e\uc00f\uc010\uc011\uc012\uc013\uc014\uc015\uc016\uc017\uc018\uc019\uc01a\uc01b\uc01c\uc01d\uc01e\uc01f\uc020\uc021\uc022\uc023\uc024\uc025\uc026\uc027\uc028\uc029\uc02a\uc02b\uc02c\uc02d\uc02e\uc02f\uc030\uc031\uc032\uc033\uc034\uc035\uc036\uc037\uc038\uc039\uc03a\uc03b\uc03c\uc03d\uc03e\uc03f\uc040\uc041\uc042\uc043\uc044\uc045\uc046\uc047\uc048\uc049\uc04a\uc04b\uc04c\uc04d\uc04e\uc04f\uc050\uc051\uc052\uc053\uc054\uc055\uc056\uc057\uc058\uc059\uc05a\uc05b\uc05c\uc05d\uc05e\uc05f\uc060\uc061\uc062\uc063\uc064\uc065\uc066\uc067\uc068\uc069\uc06a\uc06b\uc06c\uc06d\uc06e\uc06f\uc070\uc071\uc072\uc073\uc074\uc075\uc076\uc077\uc078\uc079\uc07a\uc07b\uc07c\uc07d\uc07e\uc07f\uc080\uc081\uc082\uc083\uc084\uc085\uc086\uc087\uc088\uc089\uc08a\uc08b\uc08c\uc08d\uc08e\uc08f\uc090\uc091\uc092\uc093\uc094\uc095\uc096\uc097\uc098\uc099\uc09a\uc09b\uc09c\uc09d\uc09e\uc09f\uc0a0\uc0a1\uc0a2\uc0a3\uc0a4\uc0a5\uc0a6\uc0a7\uc0a8\uc0a9\uc0aa\uc0ab\uc0ac\uc0ad\uc0ae\uc0af\uc0b0\uc0b1\uc0b2\uc0b3\uc0b4\uc0b5\uc0b6\uc0b7\uc0b8\uc0b9\uc0ba\uc0bb\uc0bc\uc0bd\uc0be\uc0bf\uc0c0\uc0c1\uc0c2\uc0c3\uc0c4\uc0c5\uc0c6\uc0c7\uc0c8\uc0c9\uc0ca\uc0cb\uc0cc\uc0cd\uc0ce\uc0cf\uc0d0\uc0d1\uc0d2\uc0d3\uc0d4\uc0d5\uc0d6\uc0d7\uc0d8\uc0d9\uc0da\uc0db\uc0dc\uc0dd\uc0de\uc0df\uc0e0\uc0e1\uc0e2\uc0e3\uc0e4\uc0e5\uc0e6\uc0e7\uc0e8\uc0e9\uc0ea\uc0eb\uc0ec\uc0ed\uc0ee\uc0ef\uc0f0\uc0f1\uc0f2\uc0f3\uc0f4\uc0f5\uc0f6\uc0f7\uc0f8\uc0f9\uc0fa\uc0fb\uc0fc\uc0fd\uc0fe\uc0ff\uc100\uc101\uc102\uc103\uc104\uc105\uc106\uc107\uc108\uc109\uc10a\uc10b\uc10c\uc10d\uc10e\uc10f\uc110\uc111\uc112\uc113\uc114\uc115\uc116\uc117\uc118\uc119\uc11a\uc11b\uc11c\uc11d\uc11e\uc11f\uc120\uc121\uc122\uc123\uc124\uc125\uc126\uc127\uc128\uc129\uc12a\uc12b\uc12c\uc12d\uc12e\uc12f\uc130\uc131\uc132\uc133\uc134\uc135\uc136\uc137\uc138\uc139\uc13a\uc13b\uc13c\uc13d\uc13e\uc13f\uc140\uc141\uc142\uc143\uc144\uc145\uc146\uc147\uc148\uc149\uc14a\uc14b\uc14c\uc14d\uc14e\uc14f\uc150\uc151\uc152\uc153\uc154\uc155\uc156\uc157\uc158\uc159\uc15a\uc15b\uc15c\uc15d\uc15e\uc15f\uc160\uc161\uc162\uc163\uc164\uc165\uc166\uc167\uc168\uc169\uc16a\uc16b\uc16c\uc16d\uc16e\uc16f\uc170\uc171\uc172\uc173\uc174\uc175\uc176\uc177\uc178\uc179\uc17a\uc17b\uc17c\uc17d\uc17e\uc17f\uc180\uc181\uc182\uc183\uc184\uc185\uc186\uc187\uc188\uc189\uc18a\uc18b\uc18c\uc18d\uc18e\uc18f\uc190\uc191\uc192\uc193\uc194\uc195\uc196\uc197\uc198\uc199\uc19a\uc19b\uc19c\uc19d\uc19e\uc19f\uc1a0\uc1a1\uc1a2\uc1a3\uc1a4\uc1a5\uc1a6\uc1a7\uc1a8\uc1a9\uc1aa\uc1ab\uc1ac\uc1ad\uc1ae\uc1af\uc1b0\uc1b1\uc1b2\uc1b3\uc1b4\uc1b5\uc1b6\uc1b7\uc1b8\uc1b9\uc1ba\uc1bb\uc1bc\uc1bd\uc1be\uc1bf\uc1c0\uc1c1\uc1c2\uc1c3\uc1c4\uc1c5\uc1c6\uc1c7\uc1c8\uc1c9\uc1ca\uc1cb\uc1cc\uc1cd\uc1ce\uc1cf\uc1d0\uc1d1\uc1d2\uc1d3\uc1d4\uc1d5\uc1d6\uc1d7\uc1d8\uc1d9\uc1da\uc1db\uc1dc\uc1dd\uc1de\uc1df\uc1e0\uc1e1\uc1e2\uc1e3\uc1e4\uc1e5\uc1e6\uc1e7\uc1e8\uc1e9\uc1ea\uc1eb\uc1ec\uc1ed\uc1ee\uc1ef\uc1f0\uc1f1\uc1f2\uc1f3\uc1f4\uc1f5\uc1f6\uc1f7\uc1f8\uc1f9\uc1fa\uc1fb\uc1fc\uc1fd\uc1fe\uc1ff\uc200\uc201\uc202\uc203\uc204\uc205\uc206\uc207\uc208\uc209\uc20a\uc20b\uc20c\uc20d\uc20e\uc20f\uc210\uc211\uc212\uc213\uc214\uc215\uc216\uc217\uc218\uc219\uc21a\uc21b\uc21c\uc21d\uc21e\uc21f\uc220\uc221\uc222\uc223\uc224\uc225\uc226\uc227\uc228\uc229\uc22a\uc22b\uc22c\uc22d\uc22e\uc22f\uc230\uc231\uc232\uc233\uc234\uc235\uc236\uc237\uc238\uc239\uc23a\uc23b\uc23c\uc23d\uc23e\uc23f\uc240\uc241\uc242\uc243\uc244\uc245\uc246\uc247\uc248\uc249\uc24a\uc24b\uc24c\uc24d\uc24e\uc24f\uc250\uc251\uc252\uc253\uc254\uc255\uc256\uc257\uc258\uc259\uc25a\uc25b\uc25c\uc25d\uc25e\uc25f\uc260\uc261\uc262\uc263\uc264\uc265\uc266\uc267\uc268\uc269\uc26a\uc26b\uc26c\uc26d\uc26e\uc26f\uc270\uc271\uc272\uc273\uc274\uc275\uc276\uc277\uc278\uc279\uc27a\uc27b\uc27c\uc27d\uc27e\uc27f\uc280\uc281\uc282\uc283\uc284\uc285\uc286\uc287\uc288\uc289\uc28a\uc28b\uc28c\uc28d\uc28e\uc28f\uc290\uc291\uc292\uc293\uc294\uc295\uc296\uc297\uc298\uc299\uc29a\uc29b\uc29c\uc29d\uc29e\uc29f\uc2a0\uc2a1\uc2a2\uc2a3\uc2a4\uc2a5\uc2a6\uc2a7\uc2a8\uc2a9\uc2aa\uc2ab\uc2ac\uc2ad\uc2ae\uc2af\uc2b0\uc2b1\uc2b2\uc2b3\uc2b4\uc2b5\uc2b6\uc2b7\uc2b8\uc2b9\uc2ba\uc2bb\uc2bc\uc2bd\uc2be\uc2bf\uc2c0\uc2c1\uc2c2\uc2c3\uc2c4\uc2c5\uc2c6\uc2c7\uc2c8\uc2c9\uc2ca\uc2cb\uc2cc\uc2cd\uc2ce\uc2cf\uc2d0\uc2d1\uc2d2\uc2d3\uc2d4\uc2d5\uc2d6\uc2d7\uc2d8\uc2d9\uc2da\uc2db\uc2dc\uc2dd\uc2de\uc2df\uc2e0\uc2e1\uc2e2\uc2e3\uc2e4\uc2e5\uc2e6\uc2e7\uc2e8\uc2e9\uc2ea\uc2eb\uc2ec\uc2ed\uc2ee\uc2ef\uc2f0\uc2f1\uc2f2\uc2f3\uc2f4\uc2f5\uc2f6\uc2f7\uc2f8\uc2f9\uc2fa\uc2fb\uc2fc\uc2fd\uc2fe\uc2ff\uc300\uc301\uc302\uc303\uc304\uc305\uc306\uc307\uc308\uc309\uc30a\uc30b\uc30c\uc30d\uc30e\uc30f\uc310\uc311\uc312\uc313\uc314\uc315\uc316\uc317\uc318\uc319\uc31a\uc31b\uc31c\uc31d\uc31e\uc31f\uc320\uc321\uc322\uc323\uc324\uc325\uc326\uc327\uc328\uc329\uc32a\uc32b\uc32c\uc32d\uc32e\uc32f\uc330\uc331\uc332\uc333\uc334\uc335\uc336\uc337\uc338\uc339\uc33a\uc33b\uc33c\uc33d\uc33e\uc33f\uc340\uc341\uc342\uc343\uc344\uc345\uc346\uc347\uc348\uc349\uc34a\uc34b\uc34c\uc34d\uc34e\uc34f\uc350\uc351\uc352\uc353\uc354\uc355\uc356\uc357\uc358\uc359\uc35a\uc35b\uc35c\uc35d\uc35e\uc35f\uc360\uc361\uc362\uc363\uc364\uc365\uc366\uc367\uc368\uc369\uc36a\uc36b\uc36c\uc36d\uc36e\uc36f\uc370\uc371\uc372\uc373\uc374\uc375\uc376\uc377\uc378\uc379\uc37a\uc37b\uc37c\uc37d\uc37e\uc37f\uc380\uc381\uc382\uc383\uc384\uc385\uc386\uc387\uc388\uc389\uc38a\uc38b\uc38c\uc38d\uc38e\uc38f\uc390\uc391\uc392\uc393\uc394\uc395\uc396\uc397\uc398\uc399\uc39a\uc39b\uc39c\uc39d\uc39e\uc39f\uc3a0\uc3a1\uc3a2\uc3a3\uc3a4\uc3a5\uc3a6\uc3a7\uc3a8\uc3a9\uc3aa\uc3ab\uc3ac\uc3ad\uc3ae\uc3af\uc3b0\uc3b1\uc3b2\uc3b3\uc3b4\uc3b5\uc3b6\uc3b7\uc3b8\uc3b9\uc3ba\uc3bb\uc3bc\uc3bd\uc3be\uc3bf\uc3c0\uc3c1\uc3c2\uc3c3\uc3c4\uc3c5\uc3c6\uc3c7\uc3c8\uc3c9\uc3ca\uc3cb\uc3cc\uc3cd\uc3ce\uc3cf\uc3d0\uc3d1\uc3d2\uc3d3\uc3d4\uc3d5\uc3d6\uc3d7\uc3d8\uc3d9\uc3da\uc3db\uc3dc\uc3dd\uc3de\uc3df\uc3e0\uc3e1\uc3e2\uc3e3\uc3e4\uc3e5\uc3e6\uc3e7\uc3e8\uc3e9\uc3ea\uc3eb\uc3ec\uc3ed\uc3ee\uc3ef\uc3f0\uc3f1\uc3f2\uc3f3\uc3f4\uc3f5\uc3f6\uc3f7\uc3f8\uc3f9\uc3fa\uc3fb\uc3fc\uc3fd\uc3fe\uc3ff\uc400\uc401\uc402\uc403\uc404\uc405\uc406\uc407\uc408\uc409\uc40a\uc40b\uc40c\uc40d\uc40e\uc40f\uc410\uc411\uc412\uc413\uc414\uc415\uc416\uc417\uc418\uc419\uc41a\uc41b\uc41c\uc41d\uc41e\uc41f\uc420\uc421\uc422\uc423\uc424\uc425\uc426\uc427\uc428\uc429\uc42a\uc42b\uc42c\uc42d\uc42e\uc42f\uc430\uc431\uc432\uc433\uc434\uc435\uc436\uc437\uc438\uc439\uc43a\uc43b\uc43c\uc43d\uc43e\uc43f\uc440\uc441\uc442\uc443\uc444\uc445\uc446\uc447\uc448\uc449\uc44a\uc44b\uc44c\uc44d\uc44e\uc44f\uc450\uc451\uc452\uc453\uc454\uc455\uc456\uc457\uc458\uc459\uc45a\uc45b\uc45c\uc45d\uc45e\uc45f\uc460\uc461\uc462\uc463\uc464\uc465\uc466\uc467\uc468\uc469\uc46a\uc46b\uc46c\uc46d\uc46e\uc46f\uc470\uc471\uc472\uc473\uc474\uc475\uc476\uc477\uc478\uc479\uc47a\uc47b\uc47c\uc47d\uc47e\uc47f\uc480\uc481\uc482\uc483\uc484\uc485\uc486\uc487\uc488\uc489\uc48a\uc48b\uc48c\uc48d\uc48e\uc48f\uc490\uc491\uc492\uc493\uc494\uc495\uc496\uc497\uc498\uc499\uc49a\uc49b\uc49c\uc49d\uc49e\uc49f\uc4a0\uc4a1\uc4a2\uc4a3\uc4a4\uc4a5\uc4a6\uc4a7\uc4a8\uc4a9\uc4aa\uc4ab\uc4ac\uc4ad\uc4ae\uc4af\uc4b0\uc4b1\uc4b2\uc4b3\uc4b4\uc4b5\uc4b6\uc4b7\uc4b8\uc4b9\uc4ba\uc4bb\uc4bc\uc4bd\uc4be\uc4bf\uc4c0\uc4c1\uc4c2\uc4c3\uc4c4\uc4c5\uc4c6\uc4c7\uc4c8\uc4c9\uc4ca\uc4cb\uc4cc\uc4cd\uc4ce\uc4cf\uc4d0\uc4d1\uc4d2\uc4d3\uc4d4\uc4d5\uc4d6\uc4d7\uc4d8\uc4d9\uc4da\uc4db\uc4dc\uc4dd\uc4de\uc4df\uc4e0\uc4e1\uc4e2\uc4e3\uc4e4\uc4e5\uc4e6\uc4e7\uc4e8\uc4e9\uc4ea\uc4eb\uc4ec\uc4ed\uc4ee\uc4ef\uc4f0\uc4f1\uc4f2\uc4f3\uc4f4\uc4f5\uc4f6\uc4f7\uc4f8\uc4f9\uc4fa\uc4fb\uc4fc\uc4fd\uc4fe\uc4ff\uc500\uc501\uc502\uc503\uc504\uc505\uc506\uc507\uc508\uc509\uc50a\uc50b\uc50c\uc50d\uc50e\uc50f\uc510\uc511\uc512\uc513\uc514\uc515\uc516\uc517\uc518\uc519\uc51a\uc51b\uc51c\uc51d\uc51e\uc51f\uc520\uc521\uc522\uc523\uc524\uc525\uc526\uc527\uc528\uc529\uc52a\uc52b\uc52c\uc52d\uc52e\uc52f\uc530\uc531\uc532\uc533\uc534\uc535\uc536\uc537\uc538\uc539\uc53a\uc53b\uc53c\uc53d\uc53e\uc53f\uc540\uc541\uc542\uc543\uc544\uc545\uc546\uc547\uc548\uc549\uc54a\uc54b\uc54c\uc54d\uc54e\uc54f\uc550\uc551\uc552\uc553\uc554\uc555\uc556\uc557\uc558\uc559\uc55a\uc55b\uc55c\uc55d\uc55e\uc55f\uc560\uc561\uc562\uc563\uc564\uc565\uc566\uc567\uc568\uc569\uc56a\uc56b\uc56c\uc56d\uc56e\uc56f\uc570\uc571\uc572\uc573\uc574\uc575\uc576\uc577\uc578\uc579\uc57a\uc57b\uc57c\uc57d\uc57e\uc57f\uc580\uc581\uc582\uc583\uc584\uc585\uc586\uc587\uc588\uc589\uc58a\uc58b\uc58c\uc58d\uc58e\uc58f\uc590\uc591\uc592\uc593\uc594\uc595\uc596\uc597\uc598\uc599\uc59a\uc59b\uc59c\uc59d\uc59e\uc59f\uc5a0\uc5a1\uc5a2\uc5a3\uc5a4\uc5a5\uc5a6\uc5a7\uc5a8\uc5a9\uc5aa\uc5ab\uc5ac\uc5ad\uc5ae\uc5af\uc5b0\uc5b1\uc5b2\uc5b3\uc5b4\uc5b5\uc5b6\uc5b7\uc5b8\uc5b9\uc5ba\uc5bb\uc5bc\uc5bd\uc5be\uc5bf\uc5c0\uc5c1\uc5c2\uc5c3\uc5c4\uc5c5\uc5c6\uc5c7\uc5c8\uc5c9\uc5ca\uc5cb\uc5cc\uc5cd\uc5ce\uc5cf\uc5d0\uc5d1\uc5d2\uc5d3\uc5d4\uc5d5\uc5d6\uc5d7\uc5d8\uc5d9\uc5da\uc5db\uc5dc\uc5dd\uc5de\uc5df\uc5e0\uc5e1\uc5e2\uc5e3\uc5e4\uc5e5\uc5e6\uc5e7\uc5e8\uc5e9\uc5ea\uc5eb\uc5ec\uc5ed\uc5ee\uc5ef\uc5f0\uc5f1\uc5f2\uc5f3\uc5f4\uc5f5\uc5f6\uc5f7\uc5f8\uc5f9\uc5fa\uc5fb\uc5fc\uc5fd\uc5fe\uc5ff\uc600\uc601\uc602\uc603\uc604\uc605\uc606\uc607\uc608\uc609\uc60a\uc60b\uc60c\uc60d\uc60e\uc60f\uc610\uc611\uc612\uc613\uc614\uc615\uc616\uc617\uc618\uc619\uc61a\uc61b\uc61c\uc61d\uc61e\uc61f\uc620\uc621\uc622\uc623\uc624\uc625\uc626\uc627\uc628\uc629\uc62a\uc62b\uc62c\uc62d\uc62e\uc62f\uc630\uc631\uc632\uc633\uc634\uc635\uc636\uc637\uc638\uc639\uc63a\uc63b\uc63c\uc63d\uc63e\uc63f\uc640\uc641\uc642\uc643\uc644\uc645\uc646\uc647\uc648\uc649\uc64a\uc64b\uc64c\uc64d\uc64e\uc64f\uc650\uc651\uc652\uc653\uc654\uc655\uc656\uc657\uc658\uc659\uc65a\uc65b\uc65c\uc65d\uc65e\uc65f\uc660\uc661\uc662\uc663\uc664\uc665\uc666\uc667\uc668\uc669\uc66a\uc66b\uc66c\uc66d\uc66e\uc66f\uc670\uc671\uc672\uc673\uc674\uc675\uc676\uc677\uc678\uc679\uc67a\uc67b\uc67c\uc67d\uc67e\uc67f\uc680\uc681\uc682\uc683\uc684\uc685\uc686\uc687\uc688\uc689\uc68a\uc68b\uc68c\uc68d\uc68e\uc68f\uc690\uc691\uc692\uc693\uc694\uc695\uc696\uc697\uc698\uc699\uc69a\uc69b\uc69c\uc69d\uc69e\uc69f\uc6a0\uc6a1\uc6a2\uc6a3\uc6a4\uc6a5\uc6a6\uc6a7\uc6a8\uc6a9\uc6aa\uc6ab\uc6ac\uc6ad\uc6ae\uc6af\uc6b0\uc6b1\uc6b2\uc6b3\uc6b4\uc6b5\uc6b6\uc6b7\uc6b8\uc6b9\uc6ba\uc6bb\uc6bc\uc6bd\uc6be\uc6bf\uc6c0\uc6c1\uc6c2\uc6c3\uc6c4\uc6c5\uc6c6\uc6c7\uc6c8\uc6c9\uc6ca\uc6cb\uc6cc\uc6cd\uc6ce\uc6cf\uc6d0\uc6d1\uc6d2\uc6d3\uc6d4\uc6d5\uc6d6\uc6d7\uc6d8\uc6d9\uc6da\uc6db\uc6dc\uc6dd\uc6de\uc6df\uc6e0\uc6e1\uc6e2\uc6e3\uc6e4\uc6e5\uc6e6\uc6e7\uc6e8\uc6e9\uc6ea\uc6eb\uc6ec\uc6ed\uc6ee\uc6ef\uc6f0\uc6f1\uc6f2\uc6f3\uc6f4\uc6f5\uc6f6\uc6f7\uc6f8\uc6f9\uc6fa\uc6fb\uc6fc\uc6fd\uc6fe\uc6ff\uc700\uc701\uc702\uc703\uc704\uc705\uc706\uc707\uc708\uc709\uc70a\uc70b\uc70c\uc70d\uc70e\uc70f\uc710\uc711\uc712\uc713\uc714\uc715\uc716\uc717\uc718\uc719\uc71a\uc71b\uc71c\uc71d\uc71e\uc71f\uc720\uc721\uc722\uc723\uc724\uc725\uc726\uc727\uc728\uc729\uc72a\uc72b\uc72c\uc72d\uc72e\uc72f\uc730\uc731\uc732\uc733\uc734\uc735\uc736\uc737\uc738\uc739\uc73a\uc73b\uc73c\uc73d\uc73e\uc73f\uc740\uc741\uc742\uc743\uc744\uc745\uc746\uc747\uc748\uc749\uc74a\uc74b\uc74c\uc74d\uc74e\uc74f\uc750\uc751\uc752\uc753\uc754\uc755\uc756\uc757\uc758\uc759\uc75a\uc75b\uc75c\uc75d\uc75e\uc75f\uc760\uc761\uc762\uc763\uc764\uc765\uc766\uc767\uc768\uc769\uc76a\uc76b\uc76c\uc76d\uc76e\uc76f\uc770\uc771\uc772\uc773\uc774\uc775\uc776\uc777\uc778\uc779\uc77a\uc77b\uc77c\uc77d\uc77e\uc77f\uc780\uc781\uc782\uc783\uc784\uc785\uc786\uc787\uc788\uc789\uc78a\uc78b\uc78c\uc78d\uc78e\uc78f\uc790\uc791\uc792\uc793\uc794\uc795\uc796\uc797\uc798\uc799\uc79a\uc79b\uc79c\uc79d\uc79e\uc79f\uc7a0\uc7a1\uc7a2\uc7a3\uc7a4\uc7a5\uc7a6\uc7a7\uc7a8\uc7a9\uc7aa\uc7ab\uc7ac\uc7ad\uc7ae\uc7af\uc7b0\uc7b1\uc7b2\uc7b3\uc7b4\uc7b5\uc7b6\uc7b7\uc7b8\uc7b9\uc7ba\uc7bb\uc7bc\uc7bd\uc7be\uc7bf\uc7c0\uc7c1\uc7c2\uc7c3\uc7c4\uc7c5\uc7c6\uc7c7\uc7c8\uc7c9\uc7ca\uc7cb\uc7cc\uc7cd\uc7ce\uc7cf\uc7d0\uc7d1\uc7d2\uc7d3\uc7d4\uc7d5\uc7d6\uc7d7\uc7d8\uc7d9\uc7da\uc7db\uc7dc\uc7dd\uc7de\uc7df\uc7e0\uc7e1\uc7e2\uc7e3\uc7e4\uc7e5\uc7e6\uc7e7\uc7e8\uc7e9\uc7ea\uc7eb\uc7ec\uc7ed\uc7ee\uc7ef\uc7f0\uc7f1\uc7f2\uc7f3\uc7f4\uc7f5\uc7f6\uc7f7\uc7f8\uc7f9\uc7fa\uc7fb\uc7fc\uc7fd\uc7fe\uc7ff\uc800\uc801\uc802\uc803\uc804\uc805\uc806\uc807\uc808\uc809\uc80a\uc80b\uc80c\uc80d\uc80e\uc80f\uc810\uc811\uc812\uc813\uc814\uc815\uc816\uc817\uc818\uc819\uc81a\uc81b\uc81c\uc81d\uc81e\uc81f\uc820\uc821\uc822\uc823\uc824\uc825\uc826\uc827\uc828\uc829\uc82a\uc82b\uc82c\uc82d\uc82e\uc82f\uc830\uc831\uc832\uc833\uc834\uc835\uc836\uc837\uc838\uc839\uc83a\uc83b\uc83c\uc83d\uc83e\uc83f\uc840\uc841\uc842\uc843\uc844\uc845\uc846\uc847\uc848\uc849\uc84a\uc84b\uc84c\uc84d\uc84e\uc84f\uc850\uc851\uc852\uc853\uc854\uc855\uc856\uc857\uc858\uc859\uc85a\uc85b\uc85c\uc85d\uc85e\uc85f\uc860\uc861\uc862\uc863\uc864\uc865\uc866\uc867\uc868\uc869\uc86a\uc86b\uc86c\uc86d\uc86e\uc86f\uc870\uc871\uc872\uc873\uc874\uc875\uc876\uc877\uc878\uc879\uc87a\uc87b\uc87c\uc87d\uc87e\uc87f\uc880\uc881\uc882\uc883\uc884\uc885\uc886\uc887\uc888\uc889\uc88a\uc88b\uc88c\uc88d\uc88e\uc88f\uc890\uc891\uc892\uc893\uc894\uc895\uc896\uc897\uc898\uc899\uc89a\uc89b\uc89c\uc89d\uc89e\uc89f\uc8a0\uc8a1\uc8a2\uc8a3\uc8a4\uc8a5\uc8a6\uc8a7\uc8a8\uc8a9\uc8aa\uc8ab\uc8ac\uc8ad\uc8ae\uc8af\uc8b0\uc8b1\uc8b2\uc8b3\uc8b4\uc8b5\uc8b6\uc8b7\uc8b8\uc8b9\uc8ba\uc8bb\uc8bc\uc8bd\uc8be\uc8bf\uc8c0\uc8c1\uc8c2\uc8c3\uc8c4\uc8c5\uc8c6\uc8c7\uc8c8\uc8c9\uc8ca\uc8cb\uc8cc\uc8cd\uc8ce\uc8cf\uc8d0\uc8d1\uc8d2\uc8d3\uc8d4\uc8d5\uc8d6\uc8d7\uc8d8\uc8d9\uc8da\uc8db\uc8dc\uc8dd\uc8de\uc8df\uc8e0\uc8e1\uc8e2\uc8e3\uc8e4\uc8e5\uc8e6\uc8e7\uc8e8\uc8e9\uc8ea\uc8eb\uc8ec\uc8ed\uc8ee\uc8ef\uc8f0\uc8f1\uc8f2\uc8f3\uc8f4\uc8f5\uc8f6\uc8f7\uc8f8\uc8f9\uc8fa\uc8fb\uc8fc\uc8fd\uc8fe\uc8ff\uc900\uc901\uc902\uc903\uc904\uc905\uc906\uc907\uc908\uc909\uc90a\uc90b\uc90c\uc90d\uc90e\uc90f\uc910\uc911\uc912\uc913\uc914\uc915\uc916\uc917\uc918\uc919\uc91a\uc91b\uc91c\uc91d\uc91e\uc91f\uc920\uc921\uc922\uc923\uc924\uc925\uc926\uc927\uc928\uc929\uc92a\uc92b\uc92c\uc92d\uc92e\uc92f\uc930\uc931\uc932\uc933\uc934\uc935\uc936\uc937\uc938\uc939\uc93a\uc93b\uc93c\uc93d\uc93e\uc93f\uc940\uc941\uc942\uc943\uc944\uc945\uc946\uc947\uc948\uc949\uc94a\uc94b\uc94c\uc94d\uc94e\uc94f\uc950\uc951\uc952\uc953\uc954\uc955\uc956\uc957\uc958\uc959\uc95a\uc95b\uc95c\uc95d\uc95e\uc95f\uc960\uc961\uc962\uc963\uc964\uc965\uc966\uc967\uc968\uc969\uc96a\uc96b\uc96c\uc96d\uc96e\uc96f\uc970\uc971\uc972\uc973\uc974\uc975\uc976\uc977\uc978\uc979\uc97a\uc97b\uc97c\uc97d\uc97e\uc97f\uc980\uc981\uc982\uc983\uc984\uc985\uc986\uc987\uc988\uc989\uc98a\uc98b\uc98c\uc98d\uc98e\uc98f\uc990\uc991\uc992\uc993\uc994\uc995\uc996\uc997\uc998\uc999\uc99a\uc99b\uc99c\uc99d\uc99e\uc99f\uc9a0\uc9a1\uc9a2\uc9a3\uc9a4\uc9a5\uc9a6\uc9a7\uc9a8\uc9a9\uc9aa\uc9ab\uc9ac\uc9ad\uc9ae\uc9af\uc9b0\uc9b1\uc9b2\uc9b3\uc9b4\uc9b5\uc9b6\uc9b7\uc9b8\uc9b9\uc9ba\uc9bb\uc9bc\uc9bd\uc9be\uc9bf\uc9c0\uc9c1\uc9c2\uc9c3\uc9c4\uc9c5\uc9c6\uc9c7\uc9c8\uc9c9\uc9ca\uc9cb\uc9cc\uc9cd\uc9ce\uc9cf\uc9d0\uc9d1\uc9d2\uc9d3\uc9d4\uc9d5\uc9d6\uc9d7\uc9d8\uc9d9\uc9da\uc9db\uc9dc\uc9dd\uc9de\uc9df\uc9e0\uc9e1\uc9e2\uc9e3\uc9e4\uc9e5\uc9e6\uc9e7\uc9e8\uc9e9\uc9ea\uc9eb\uc9ec\uc9ed\uc9ee\uc9ef\uc9f0\uc9f1\uc9f2\uc9f3\uc9f4\uc9f5\uc9f6\uc9f7\uc9f8\uc9f9\uc9fa\uc9fb\uc9fc\uc9fd\uc9fe\uc9ff\uca00\uca01\uca02\uca03\uca04\uca05\uca06\uca07\uca08\uca09\uca0a\uca0b\uca0c\uca0d\uca0e\uca0f\uca10\uca11\uca12\uca13\uca14\uca15\uca16\uca17\uca18\uca19\uca1a\uca1b\uca1c\uca1d\uca1e\uca1f\uca20\uca21\uca22\uca23\uca24\uca25\uca26\uca27\uca28\uca29\uca2a\uca2b\uca2c\uca2d\uca2e\uca2f\uca30\uca31\uca32\uca33\uca34\uca35\uca36\uca37\uca38\uca39\uca3a\uca3b\uca3c\uca3d\uca3e\uca3f\uca40\uca41\uca42\uca43\uca44\uca45\uca46\uca47\uca48\uca49\uca4a\uca4b\uca4c\uca4d\uca4e\uca4f\uca50\uca51\uca52\uca53\uca54\uca55\uca56\uca57\uca58\uca59\uca5a\uca5b\uca5c\uca5d\uca5e\uca5f\uca60\uca61\uca62\uca63\uca64\uca65\uca66\uca67\uca68\uca69\uca6a\uca6b\uca6c\uca6d\uca6e\uca6f\uca70\uca71\uca72\uca73\uca74\uca75\uca76\uca77\uca78\uca79\uca7a\uca7b\uca7c\uca7d\uca7e\uca7f\uca80\uca81\uca82\uca83\uca84\uca85\uca86\uca87\uca88\uca89\uca8a\uca8b\uca8c\uca8d\uca8e\uca8f\uca90\uca91\uca92\uca93\uca94\uca95\uca96\uca97\uca98\uca99\uca9a\uca9b\uca9c\uca9d\uca9e\uca9f\ucaa0\ucaa1\ucaa2\ucaa3\ucaa4\ucaa5\ucaa6\ucaa7\ucaa8\ucaa9\ucaaa\ucaab\ucaac\ucaad\ucaae\ucaaf\ucab0\ucab1\ucab2\ucab3\ucab4\ucab5\ucab6\ucab7\ucab8\ucab9\ucaba\ucabb\ucabc\ucabd\ucabe\ucabf\ucac0\ucac1\ucac2\ucac3\ucac4\ucac5\ucac6\ucac7\ucac8\ucac9\ucaca\ucacb\ucacc\ucacd\ucace\ucacf\ucad0\ucad1\ucad2\ucad3\ucad4\ucad5\ucad6\ucad7\ucad8\ucad9\ucada\ucadb\ucadc\ucadd\ucade\ucadf\ucae0\ucae1\ucae2\ucae3\ucae4\ucae5\ucae6\ucae7\ucae8\ucae9\ucaea\ucaeb\ucaec\ucaed\ucaee\ucaef\ucaf0\ucaf1\ucaf2\ucaf3\ucaf4\ucaf5\ucaf6\ucaf7\ucaf8\ucaf9\ucafa\ucafb\ucafc\ucafd\ucafe\ucaff\ucb00\ucb01\ucb02\ucb03\ucb04\ucb05\ucb06\ucb07\ucb08\ucb09\ucb0a\ucb0b\ucb0c\ucb0d\ucb0e\ucb0f\ucb10\ucb11\ucb12\ucb13\ucb14\ucb15\ucb16\ucb17\ucb18\ucb19\ucb1a\ucb1b\ucb1c\ucb1d\ucb1e\ucb1f\ucb20\ucb21\ucb22\ucb23\ucb24\ucb25\ucb26\ucb27\ucb28\ucb29\ucb2a\ucb2b\ucb2c\ucb2d\ucb2e\ucb2f\ucb30\ucb31\ucb32\ucb33\ucb34\ucb35\ucb36\ucb37\ucb38\ucb39\ucb3a\ucb3b\ucb3c\ucb3d\ucb3e\ucb3f\ucb40\ucb41\ucb42\ucb43\ucb44\ucb45\ucb46\ucb47\ucb48\ucb49\ucb4a\ucb4b\ucb4c\ucb4d\ucb4e\ucb4f\ucb50\ucb51\ucb52\ucb53\ucb54\ucb55\ucb56\ucb57\ucb58\ucb59\ucb5a\ucb5b\ucb5c\ucb5d\ucb5e\ucb5f\ucb60\ucb61\ucb62\ucb63\ucb64\ucb65\ucb66\ucb67\ucb68\ucb69\ucb6a\ucb6b\ucb6c\ucb6d\ucb6e\ucb6f\ucb70\ucb71\ucb72\ucb73\ucb74\ucb75\ucb76\ucb77\ucb78\ucb79\ucb7a\ucb7b\ucb7c\ucb7d\ucb7e\ucb7f\ucb80\ucb81\ucb82\ucb83\ucb84\ucb85\ucb86\ucb87\ucb88\ucb89\ucb8a\ucb8b\ucb8c\ucb8d\ucb8e\ucb8f\ucb90\ucb91\ucb92\ucb93\ucb94\ucb95\ucb96\ucb97\ucb98\ucb99\ucb9a\ucb9b\ucb9c\ucb9d\ucb9e\ucb9f\ucba0\ucba1\ucba2\ucba3\ucba4\ucba5\ucba6\ucba7\ucba8\ucba9\ucbaa\ucbab\ucbac\ucbad\ucbae\ucbaf\ucbb0\ucbb1\ucbb2\ucbb3\ucbb4\ucbb5\ucbb6\ucbb7\ucbb8\ucbb9\ucbba\ucbbb\ucbbc\ucbbd\ucbbe\ucbbf\ucbc0\ucbc1\ucbc2\ucbc3\ucbc4\ucbc5\ucbc6\ucbc7\ucbc8\ucbc9\ucbca\ucbcb\ucbcc\ucbcd\ucbce\ucbcf\ucbd0\ucbd1\ucbd2\ucbd3\ucbd4\ucbd5\ucbd6\ucbd7\ucbd8\ucbd9\ucbda\ucbdb\ucbdc\ucbdd\ucbde\ucbdf\ucbe0\ucbe1\ucbe2\ucbe3\ucbe4\ucbe5\ucbe6\ucbe7\ucbe8\ucbe9\ucbea\ucbeb\ucbec\ucbed\ucbee\ucbef\ucbf0\ucbf1\ucbf2\ucbf3\ucbf4\ucbf5\ucbf6\ucbf7\ucbf8\ucbf9\ucbfa\ucbfb\ucbfc\ucbfd\ucbfe\ucbff\ucc00\ucc01\ucc02\ucc03\ucc04\ucc05\ucc06\ucc07\ucc08\ucc09\ucc0a\ucc0b\ucc0c\ucc0d\ucc0e\ucc0f\ucc10\ucc11\ucc12\ucc13\ucc14\ucc15\ucc16\ucc17\ucc18\ucc19\ucc1a\ucc1b\ucc1c\ucc1d\ucc1e\ucc1f\ucc20\ucc21\ucc22\ucc23\ucc24\ucc25\ucc26\ucc27\ucc28\ucc29\ucc2a\ucc2b\ucc2c\ucc2d\ucc2e\ucc2f\ucc30\ucc31\ucc32\ucc33\ucc34\ucc35\ucc36\ucc37\ucc38\ucc39\ucc3a\ucc3b\ucc3c\ucc3d\ucc3e\ucc3f\ucc40\ucc41\ucc42\ucc43\ucc44\ucc45\ucc46\ucc47\ucc48\ucc49\ucc4a\ucc4b\ucc4c\ucc4d\ucc4e\ucc4f\ucc50\ucc51\ucc52\ucc53\ucc54\ucc55\ucc56\ucc57\ucc58\ucc59\ucc5a\ucc5b\ucc5c\ucc5d\ucc5e\ucc5f\ucc60\ucc61\ucc62\ucc63\ucc64\ucc65\ucc66\ucc67\ucc68\ucc69\ucc6a\ucc6b\ucc6c\ucc6d\ucc6e\ucc6f\ucc70\ucc71\ucc72\ucc73\ucc74\ucc75\ucc76\ucc77\ucc78\ucc79\ucc7a\ucc7b\ucc7c\ucc7d\ucc7e\ucc7f\ucc80\ucc81\ucc82\ucc83\ucc84\ucc85\ucc86\ucc87\ucc88\ucc89\ucc8a\ucc8b\ucc8c\ucc8d\ucc8e\ucc8f\ucc90\ucc91\ucc92\ucc93\ucc94\ucc95\ucc96\ucc97\ucc98\ucc99\ucc9a\ucc9b\ucc9c\ucc9d\ucc9e\ucc9f\ucca0\ucca1\ucca2\ucca3\ucca4\ucca5\ucca6\ucca7\ucca8\ucca9\uccaa\uccab\uccac\uccad\uccae\uccaf\uccb0\uccb1\uccb2\uccb3\uccb4\uccb5\uccb6\uccb7\uccb8\uccb9\uccba\uccbb\uccbc\uccbd\uccbe\uccbf\uccc0\uccc1\uccc2\uccc3\uccc4\uccc5\uccc6\uccc7\uccc8\uccc9\uccca\ucccb\ucccc\ucccd\uccce\ucccf\uccd0\uccd1\uccd2\uccd3\uccd4\uccd5\uccd6\uccd7\uccd8\uccd9\uccda\uccdb\uccdc\uccdd\uccde\uccdf\ucce0\ucce1\ucce2\ucce3\ucce4\ucce5\ucce6\ucce7\ucce8\ucce9\uccea\ucceb\uccec\ucced\uccee\uccef\uccf0\uccf1\uccf2\uccf3\uccf4\uccf5\uccf6\uccf7\uccf8\uccf9\uccfa\uccfb\uccfc\uccfd\uccfe\uccff\ucd00\ucd01\ucd02\ucd03\ucd04\ucd05\ucd06\ucd07\ucd08\ucd09\ucd0a\ucd0b\ucd0c\ucd0d\ucd0e\ucd0f\ucd10\ucd11\ucd12\ucd13\ucd14\ucd15\ucd16\ucd17\ucd18\ucd19\ucd1a\ucd1b\ucd1c\ucd1d\ucd1e\ucd1f\ucd20\ucd21\ucd22\ucd23\ucd24\ucd25\ucd26\ucd27\ucd28\ucd29\ucd2a\ucd2b\ucd2c\ucd2d\ucd2e\ucd2f\ucd30\ucd31\ucd32\ucd33\ucd34\ucd35\ucd36\ucd37\ucd38\ucd39\ucd3a\ucd3b\ucd3c\ucd3d\ucd3e\ucd3f\ucd40\ucd41\ucd42\ucd43\ucd44\ucd45\ucd46\ucd47\ucd48\ucd49\ucd4a\ucd4b\ucd4c\ucd4d\ucd4e\ucd4f\ucd50\ucd51\ucd52\ucd53\ucd54\ucd55\ucd56\ucd57\ucd58\ucd59\ucd5a\ucd5b\ucd5c\ucd5d\ucd5e\ucd5f\ucd60\ucd61\ucd62\ucd63\ucd64\ucd65\ucd66\ucd67\ucd68\ucd69\ucd6a\ucd6b\ucd6c\ucd6d\ucd6e\ucd6f\ucd70\ucd71\ucd72\ucd73\ucd74\ucd75\ucd76\ucd77\ucd78\ucd79\ucd7a\ucd7b\ucd7c\ucd7d\ucd7e\ucd7f\ucd80\ucd81\ucd82\ucd83\ucd84\ucd85\ucd86\ucd87\ucd88\ucd89\ucd8a\ucd8b\ucd8c\ucd8d\ucd8e\ucd8f\ucd90\ucd91\ucd92\ucd93\ucd94\ucd95\ucd96\ucd97\ucd98\ucd99\ucd9a\ucd9b\ucd9c\ucd9d\ucd9e\ucd9f\ucda0\ucda1\ucda2\ucda3\ucda4\ucda5\ucda6\ucda7\ucda8\ucda9\ucdaa\ucdab\ucdac\ucdad\ucdae\ucdaf\ucdb0\ucdb1\ucdb2\ucdb3\ucdb4\ucdb5\ucdb6\ucdb7\ucdb8\ucdb9\ucdba\ucdbb\ucdbc\ucdbd\ucdbe\ucdbf\ucdc0\ucdc1\ucdc2\ucdc3\ucdc4\ucdc5\ucdc6\ucdc7\ucdc8\ucdc9\ucdca\ucdcb\ucdcc\ucdcd\ucdce\ucdcf\ucdd0\ucdd1\ucdd2\ucdd3\ucdd4\ucdd5\ucdd6\ucdd7\ucdd8\ucdd9\ucdda\ucddb\ucddc\ucddd\ucdde\ucddf\ucde0\ucde1\ucde2\ucde3\ucde4\ucde5\ucde6\ucde7\ucde8\ucde9\ucdea\ucdeb\ucdec\ucded\ucdee\ucdef\ucdf0\ucdf1\ucdf2\ucdf3\ucdf4\ucdf5\ucdf6\ucdf7\ucdf8\ucdf9\ucdfa\ucdfb\ucdfc\ucdfd\ucdfe\ucdff\uce00\uce01\uce02\uce03\uce04\uce05\uce06\uce07\uce08\uce09\uce0a\uce0b\uce0c\uce0d\uce0e\uce0f\uce10\uce11\uce12\uce13\uce14\uce15\uce16\uce17\uce18\uce19\uce1a\uce1b\uce1c\uce1d\uce1e\uce1f\uce20\uce21\uce22\uce23\uce24\uce25\uce26\uce27\uce28\uce29\uce2a\uce2b\uce2c\uce2d\uce2e\uce2f\uce30\uce31\uce32\uce33\uce34\uce35\uce36\uce37\uce38\uce39\uce3a\uce3b\uce3c\uce3d\uce3e\uce3f\uce40\uce41\uce42\uce43\uce44\uce45\uce46\uce47\uce48\uce49\uce4a\uce4b\uce4c\uce4d\uce4e\uce4f\uce50\uce51\uce52\uce53\uce54\uce55\uce56\uce57\uce58\uce59\uce5a\uce5b\uce5c\uce5d\uce5e\uce5f\uce60\uce61\uce62\uce63\uce64\uce65\uce66\uce67\uce68\uce69\uce6a\uce6b\uce6c\uce6d\uce6e\uce6f\uce70\uce71\uce72\uce73\uce74\uce75\uce76\uce77\uce78\uce79\uce7a\uce7b\uce7c\uce7d\uce7e\uce7f\uce80\uce81\uce82\uce83\uce84\uce85\uce86\uce87\uce88\uce89\uce8a\uce8b\uce8c\uce8d\uce8e\uce8f\uce90\uce91\uce92\uce93\uce94\uce95\uce96\uce97\uce98\uce99\uce9a\uce9b\uce9c\uce9d\uce9e\uce9f\ucea0\ucea1\ucea2\ucea3\ucea4\ucea5\ucea6\ucea7\ucea8\ucea9\uceaa\uceab\uceac\ucead\uceae\uceaf\uceb0\uceb1\uceb2\uceb3\uceb4\uceb5\uceb6\uceb7\uceb8\uceb9\uceba\ucebb\ucebc\ucebd\ucebe\ucebf\ucec0\ucec1\ucec2\ucec3\ucec4\ucec5\ucec6\ucec7\ucec8\ucec9\uceca\ucecb\ucecc\ucecd\ucece\ucecf\uced0\uced1\uced2\uced3\uced4\uced5\uced6\uced7\uced8\uced9\uceda\ucedb\ucedc\ucedd\ucede\ucedf\ucee0\ucee1\ucee2\ucee3\ucee4\ucee5\ucee6\ucee7\ucee8\ucee9\uceea\uceeb\uceec\uceed\uceee\uceef\ucef0\ucef1\ucef2\ucef3\ucef4\ucef5\ucef6\ucef7\ucef8\ucef9\ucefa\ucefb\ucefc\ucefd\ucefe\uceff\ucf00\ucf01\ucf02\ucf03\ucf04\ucf05\ucf06\ucf07\ucf08\ucf09\ucf0a\ucf0b\ucf0c\ucf0d\ucf0e\ucf0f\ucf10\ucf11\ucf12\ucf13\ucf14\ucf15\ucf16\ucf17\ucf18\ucf19\ucf1a\ucf1b\ucf1c\ucf1d\ucf1e\ucf1f\ucf20\ucf21\ucf22\ucf23\ucf24\ucf25\ucf26\ucf27\ucf28\ucf29\ucf2a\ucf2b\ucf2c\ucf2d\ucf2e\ucf2f\ucf30\ucf31\ucf32\ucf33\ucf34\ucf35\ucf36\ucf37\ucf38\ucf39\ucf3a\ucf3b\ucf3c\ucf3d\ucf3e\ucf3f\ucf40\ucf41\ucf42\ucf43\ucf44\ucf45\ucf46\ucf47\ucf48\ucf49\ucf4a\ucf4b\ucf4c\ucf4d\ucf4e\ucf4f\ucf50\ucf51\ucf52\ucf53\ucf54\ucf55\ucf56\ucf57\ucf58\ucf59\ucf5a\ucf5b\ucf5c\ucf5d\ucf5e\ucf5f\ucf60\ucf61\ucf62\ucf63\ucf64\ucf65\ucf66\ucf67\ucf68\ucf69\ucf6a\ucf6b\ucf6c\ucf6d\ucf6e\ucf6f\ucf70\ucf71\ucf72\ucf73\ucf74\ucf75\ucf76\ucf77\ucf78\ucf79\ucf7a\ucf7b\ucf7c\ucf7d\ucf7e\ucf7f\ucf80\ucf81\ucf82\ucf83\ucf84\ucf85\ucf86\ucf87\ucf88\ucf89\ucf8a\ucf8b\ucf8c\ucf8d\ucf8e\ucf8f\ucf90\ucf91\ucf92\ucf93\ucf94\ucf95\ucf96\ucf97\ucf98\ucf99\ucf9a\ucf9b\ucf9c\ucf9d\ucf9e\ucf9f\ucfa0\ucfa1\ucfa2\ucfa3\ucfa4\ucfa5\ucfa6\ucfa7\ucfa8\ucfa9\ucfaa\ucfab\ucfac\ucfad\ucfae\ucfaf\ucfb0\ucfb1\ucfb2\ucfb3\ucfb4\ucfb5\ucfb6\ucfb7\ucfb8\ucfb9\ucfba\ucfbb\ucfbc\ucfbd\ucfbe\ucfbf\ucfc0\ucfc1\ucfc2\ucfc3\ucfc4\ucfc5\ucfc6\ucfc7\ucfc8\ucfc9\ucfca\ucfcb\ucfcc\ucfcd\ucfce\ucfcf\ucfd0\ucfd1\ucfd2\ucfd3\ucfd4\ucfd5\ucfd6\ucfd7\ucfd8\ucfd9\ucfda\ucfdb\ucfdc\ucfdd\ucfde\ucfdf\ucfe0\ucfe1\ucfe2\ucfe3\ucfe4\ucfe5\ucfe6\ucfe7\ucfe8\ucfe9\ucfea\ucfeb\ucfec\ucfed\ucfee\ucfef\ucff0\ucff1\ucff2\ucff3\ucff4\ucff5\ucff6\ucff7\ucff8\ucff9\ucffa\ucffb\ucffc\ucffd\ucffe\ucfff\ud000\ud001\ud002\ud003\ud004\ud005\ud006\ud007\ud008\ud009\ud00a\ud00b\ud00c\ud00d\ud00e\ud00f\ud010\ud011\ud012\ud013\ud014\ud015\ud016\ud017\ud018\ud019\ud01a\ud01b\ud01c\ud01d\ud01e\ud01f\ud020\ud021\ud022\ud023\ud024\ud025\ud026\ud027\ud028\ud029\ud02a\ud02b\ud02c\ud02d\ud02e\ud02f\ud030\ud031\ud032\ud033\ud034\ud035\ud036\ud037\ud038\ud039\ud03a\ud03b\ud03c\ud03d\ud03e\ud03f\ud040\ud041\ud042\ud043\ud044\ud045\ud046\ud047\ud048\ud049\ud04a\ud04b\ud04c\ud04d\ud04e\ud04f\ud050\ud051\ud052\ud053\ud054\ud055\ud056\ud057\ud058\ud059\ud05a\ud05b\ud05c\ud05d\ud05e\ud05f\ud060\ud061\ud062\ud063\ud064\ud065\ud066\ud067\ud068\ud069\ud06a\ud06b\ud06c\ud06d\ud06e\ud06f\ud070\ud071\ud072\ud073\ud074\ud075\ud076\ud077\ud078\ud079\ud07a\ud07b\ud07c\ud07d\ud07e\ud07f\ud080\ud081\ud082\ud083\ud084\ud085\ud086\ud087\ud088\ud089\ud08a\ud08b\ud08c\ud08d\ud08e\ud08f\ud090\ud091\ud092\ud093\ud094\ud095\ud096\ud097\ud098\ud099\ud09a\ud09b\ud09c\ud09d\ud09e\ud09f\ud0a0\ud0a1\ud0a2\ud0a3\ud0a4\ud0a5\ud0a6\ud0a7\ud0a8\ud0a9\ud0aa\ud0ab\ud0ac\ud0ad\ud0ae\ud0af\ud0b0\ud0b1\ud0b2\ud0b3\ud0b4\ud0b5\ud0b6\ud0b7\ud0b8\ud0b9\ud0ba\ud0bb\ud0bc\ud0bd\ud0be\ud0bf\ud0c0\ud0c1\ud0c2\ud0c3\ud0c4\ud0c5\ud0c6\ud0c7\ud0c8\ud0c9\ud0ca\ud0cb\ud0cc\ud0cd\ud0ce\ud0cf\ud0d0\ud0d1\ud0d2\ud0d3\ud0d4\ud0d5\ud0d6\ud0d7\ud0d8\ud0d9\ud0da\ud0db\ud0dc\ud0dd\ud0de\ud0df\ud0e0\ud0e1\ud0e2\ud0e3\ud0e4\ud0e5\ud0e6\ud0e7\ud0e8\ud0e9\ud0ea\ud0eb\ud0ec\ud0ed\ud0ee\ud0ef\ud0f0\ud0f1\ud0f2\ud0f3\ud0f4\ud0f5\ud0f6\ud0f7\ud0f8\ud0f9\ud0fa\ud0fb\ud0fc\ud0fd\ud0fe\ud0ff\ud100\ud101\ud102\ud103\ud104\ud105\ud106\ud107\ud108\ud109\ud10a\ud10b\ud10c\ud10d\ud10e\ud10f\ud110\ud111\ud112\ud113\ud114\ud115\ud116\ud117\ud118\ud119\ud11a\ud11b\ud11c\ud11d\ud11e\ud11f\ud120\ud121\ud122\ud123\ud124\ud125\ud126\ud127\ud128\ud129\ud12a\ud12b\ud12c\ud12d\ud12e\ud12f\ud130\ud131\ud132\ud133\ud134\ud135\ud136\ud137\ud138\ud139\ud13a\ud13b\ud13c\ud13d\ud13e\ud13f\ud140\ud141\ud142\ud143\ud144\ud145\ud146\ud147\ud148\ud149\ud14a\ud14b\ud14c\ud14d\ud14e\ud14f\ud150\ud151\ud152\ud153\ud154\ud155\ud156\ud157\ud158\ud159\ud15a\ud15b\ud15c\ud15d\ud15e\ud15f\ud160\ud161\ud162\ud163\ud164\ud165\ud166\ud167\ud168\ud169\ud16a\ud16b\ud16c\ud16d\ud16e\ud16f\ud170\ud171\ud172\ud173\ud174\ud175\ud176\ud177\ud178\ud179\ud17a\ud17b\ud17c\ud17d\ud17e\ud17f\ud180\ud181\ud182\ud183\ud184\ud185\ud186\ud187\ud188\ud189\ud18a\ud18b\ud18c\ud18d\ud18e\ud18f\ud190\ud191\ud192\ud193\ud194\ud195\ud196\ud197\ud198\ud199\ud19a\ud19b\ud19c\ud19d\ud19e\ud19f\ud1a0\ud1a1\ud1a2\ud1a3\ud1a4\ud1a5\ud1a6\ud1a7\ud1a8\ud1a9\ud1aa\ud1ab\ud1ac\ud1ad\ud1ae\ud1af\ud1b0\ud1b1\ud1b2\ud1b3\ud1b4\ud1b5\ud1b6\ud1b7\ud1b8\ud1b9\ud1ba\ud1bb\ud1bc\ud1bd\ud1be\ud1bf\ud1c0\ud1c1\ud1c2\ud1c3\ud1c4\ud1c5\ud1c6\ud1c7\ud1c8\ud1c9\ud1ca\ud1cb\ud1cc\ud1cd\ud1ce\ud1cf\ud1d0\ud1d1\ud1d2\ud1d3\ud1d4\ud1d5\ud1d6\ud1d7\ud1d8\ud1d9\ud1da\ud1db\ud1dc\ud1dd\ud1de\ud1df\ud1e0\ud1e1\ud1e2\ud1e3\ud1e4\ud1e5\ud1e6\ud1e7\ud1e8\ud1e9\ud1ea\ud1eb\ud1ec\ud1ed\ud1ee\ud1ef\ud1f0\ud1f1\ud1f2\ud1f3\ud1f4\ud1f5\ud1f6\ud1f7\ud1f8\ud1f9\ud1fa\ud1fb\ud1fc\ud1fd\ud1fe\ud1ff\ud200\ud201\ud202\ud203\ud204\ud205\ud206\ud207\ud208\ud209\ud20a\ud20b\ud20c\ud20d\ud20e\ud20f\ud210\ud211\ud212\ud213\ud214\ud215\ud216\ud217\ud218\ud219\ud21a\ud21b\ud21c\ud21d\ud21e\ud21f\ud220\ud221\ud222\ud223\ud224\ud225\ud226\ud227\ud228\ud229\ud22a\ud22b\ud22c\ud22d\ud22e\ud22f\ud230\ud231\ud232\ud233\ud234\ud235\ud236\ud237\ud238\ud239\ud23a\ud23b\ud23c\ud23d\ud23e\ud23f\ud240\ud241\ud242\ud243\ud244\ud245\ud246\ud247\ud248\ud249\ud24a\ud24b\ud24c\ud24d\ud24e\ud24f\ud250\ud251\ud252\ud253\ud254\ud255\ud256\ud257\ud258\ud259\ud25a\ud25b\ud25c\ud25d\ud25e\ud25f\ud260\ud261\ud262\ud263\ud264\ud265\ud266\ud267\ud268\ud269\ud26a\ud26b\ud26c\ud26d\ud26e\ud26f\ud270\ud271\ud272\ud273\ud274\ud275\ud276\ud277\ud278\ud279\ud27a\ud27b\ud27c\ud27d\ud27e\ud27f\ud280\ud281\ud282\ud283\ud284\ud285\ud286\ud287\ud288\ud289\ud28a\ud28b\ud28c\ud28d\ud28e\ud28f\ud290\ud291\ud292\ud293\ud294\ud295\ud296\ud297\ud298\ud299\ud29a\ud29b\ud29c\ud29d\ud29e\ud29f\ud2a0\ud2a1\ud2a2\ud2a3\ud2a4\ud2a5\ud2a6\ud2a7\ud2a8\ud2a9\ud2aa\ud2ab\ud2ac\ud2ad\ud2ae\ud2af\ud2b0\ud2b1\ud2b2\ud2b3\ud2b4\ud2b5\ud2b6\ud2b7\ud2b8\ud2b9\ud2ba\ud2bb\ud2bc\ud2bd\ud2be\ud2bf\ud2c0\ud2c1\ud2c2\ud2c3\ud2c4\ud2c5\ud2c6\ud2c7\ud2c8\ud2c9\ud2ca\ud2cb\ud2cc\ud2cd\ud2ce\ud2cf\ud2d0\ud2d1\ud2d2\ud2d3\ud2d4\ud2d5\ud2d6\ud2d7\ud2d8\ud2d9\ud2da\ud2db\ud2dc\ud2dd\ud2de\ud2df\ud2e0\ud2e1\ud2e2\ud2e3\ud2e4\ud2e5\ud2e6\ud2e7\ud2e8\ud2e9\ud2ea\ud2eb\ud2ec\ud2ed\ud2ee\ud2ef\ud2f0\ud2f1\ud2f2\ud2f3\ud2f4\ud2f5\ud2f6\ud2f7\ud2f8\ud2f9\ud2fa\ud2fb\ud2fc\ud2fd\ud2fe\ud2ff\ud300\ud301\ud302\ud303\ud304\ud305\ud306\ud307\ud308\ud309\ud30a\ud30b\ud30c\ud30d\ud30e\ud30f\ud310\ud311\ud312\ud313\ud314\ud315\ud316\ud317\ud318\ud319\ud31a\ud31b\ud31c\ud31d\ud31e\ud31f\ud320\ud321\ud322\ud323\ud324\ud325\ud326\ud327\ud328\ud329\ud32a\ud32b\ud32c\ud32d\ud32e\ud32f\ud330\ud331\ud332\ud333\ud334\ud335\ud336\ud337\ud338\ud339\ud33a\ud33b\ud33c\ud33d\ud33e\ud33f\ud340\ud341\ud342\ud343\ud344\ud345\ud346\ud347\ud348\ud349\ud34a\ud34b\ud34c\ud34d\ud34e\ud34f\ud350\ud351\ud352\ud353\ud354\ud355\ud356\ud357\ud358\ud359\ud35a\ud35b\ud35c\ud35d\ud35e\ud35f\ud360\ud361\ud362\ud363\ud364\ud365\ud366\ud367\ud368\ud369\ud36a\ud36b\ud36c\ud36d\ud36e\ud36f\ud370\ud371\ud372\ud373\ud374\ud375\ud376\ud377\ud378\ud379\ud37a\ud37b\ud37c\ud37d\ud37e\ud37f\ud380\ud381\ud382\ud383\ud384\ud385\ud386\ud387\ud388\ud389\ud38a\ud38b\ud38c\ud38d\ud38e\ud38f\ud390\ud391\ud392\ud393\ud394\ud395\ud396\ud397\ud398\ud399\ud39a\ud39b\ud39c\ud39d\ud39e\ud39f\ud3a0\ud3a1\ud3a2\ud3a3\ud3a4\ud3a5\ud3a6\ud3a7\ud3a8\ud3a9\ud3aa\ud3ab\ud3ac\ud3ad\ud3ae\ud3af\ud3b0\ud3b1\ud3b2\ud3b3\ud3b4\ud3b5\ud3b6\ud3b7\ud3b8\ud3b9\ud3ba\ud3bb\ud3bc\ud3bd\ud3be\ud3bf\ud3c0\ud3c1\ud3c2\ud3c3\ud3c4\ud3c5\ud3c6\ud3c7\ud3c8\ud3c9\ud3ca\ud3cb\ud3cc\ud3cd\ud3ce\ud3cf\ud3d0\ud3d1\ud3d2\ud3d3\ud3d4\ud3d5\ud3d6\ud3d7\ud3d8\ud3d9\ud3da\ud3db\ud3dc\ud3dd\ud3de\ud3df\ud3e0\ud3e1\ud3e2\ud3e3\ud3e4\ud3e5\ud3e6\ud3e7\ud3e8\ud3e9\ud3ea\ud3eb\ud3ec\ud3ed\ud3ee\ud3ef\ud3f0\ud3f1\ud3f2\ud3f3\ud3f4\ud3f5\ud3f6\ud3f7\ud3f8\ud3f9\ud3fa\ud3fb\ud3fc\ud3fd\ud3fe\ud3ff\ud400\ud401\ud402\ud403\ud404\ud405\ud406\ud407\ud408\ud409\ud40a\ud40b\ud40c\ud40d\ud40e\ud40f\ud410\ud411\ud412\ud413\ud414\ud415\ud416\ud417\ud418\ud419\ud41a\ud41b\ud41c\ud41d\ud41e\ud41f\ud420\ud421\ud422\ud423\ud424\ud425\ud426\ud427\ud428\ud429\ud42a\ud42b\ud42c\ud42d\ud42e\ud42f\ud430\ud431\ud432\ud433\ud434\ud435\ud436\ud437\ud438\ud439\ud43a\ud43b\ud43c\ud43d\ud43e\ud43f\ud440\ud441\ud442\ud443\ud444\ud445\ud446\ud447\ud448\ud449\ud44a\ud44b\ud44c\ud44d\ud44e\ud44f\ud450\ud451\ud452\ud453\ud454\ud455\ud456\ud457\ud458\ud459\ud45a\ud45b\ud45c\ud45d\ud45e\ud45f\ud460\ud461\ud462\ud463\ud464\ud465\ud466\ud467\ud468\ud469\ud46a\ud46b\ud46c\ud46d\ud46e\ud46f\ud470\ud471\ud472\ud473\ud474\ud475\ud476\ud477\ud478\ud479\ud47a\ud47b\ud47c\ud47d\ud47e\ud47f\ud480\ud481\ud482\ud483\ud484\ud485\ud486\ud487\ud488\ud489\ud48a\ud48b\ud48c\ud48d\ud48e\ud48f\ud490\ud491\ud492\ud493\ud494\ud495\ud496\ud497\ud498\ud499\ud49a\ud49b\ud49c\ud49d\ud49e\ud49f\ud4a0\ud4a1\ud4a2\ud4a3\ud4a4\ud4a5\ud4a6\ud4a7\ud4a8\ud4a9\ud4aa\ud4ab\ud4ac\ud4ad\ud4ae\ud4af\ud4b0\ud4b1\ud4b2\ud4b3\ud4b4\ud4b5\ud4b6\ud4b7\ud4b8\ud4b9\ud4ba\ud4bb\ud4bc\ud4bd\ud4be\ud4bf\ud4c0\ud4c1\ud4c2\ud4c3\ud4c4\ud4c5\ud4c6\ud4c7\ud4c8\ud4c9\ud4ca\ud4cb\ud4cc\ud4cd\ud4ce\ud4cf\ud4d0\ud4d1\ud4d2\ud4d3\ud4d4\ud4d5\ud4d6\ud4d7\ud4d8\ud4d9\ud4da\ud4db\ud4dc\ud4dd\ud4de\ud4df\ud4e0\ud4e1\ud4e2\ud4e3\ud4e4\ud4e5\ud4e6\ud4e7\ud4e8\ud4e9\ud4ea\ud4eb\ud4ec\ud4ed\ud4ee\ud4ef\ud4f0\ud4f1\ud4f2\ud4f3\ud4f4\ud4f5\ud4f6\ud4f7\ud4f8\ud4f9\ud4fa\ud4fb\ud4fc\ud4fd\ud4fe\ud4ff\ud500\ud501\ud502\ud503\ud504\ud505\ud506\ud507\ud508\ud509\ud50a\ud50b\ud50c\ud50d\ud50e\ud50f\ud510\ud511\ud512\ud513\ud514\ud515\ud516\ud517\ud518\ud519\ud51a\ud51b\ud51c\ud51d\ud51e\ud51f\ud520\ud521\ud522\ud523\ud524\ud525\ud526\ud527\ud528\ud529\ud52a\ud52b\ud52c\ud52d\ud52e\ud52f\ud530\ud531\ud532\ud533\ud534\ud535\ud536\ud537\ud538\ud539\ud53a\ud53b\ud53c\ud53d\ud53e\ud53f\ud540\ud541\ud542\ud543\ud544\ud545\ud546\ud547\ud548\ud549\ud54a\ud54b\ud54c\ud54d\ud54e\ud54f\ud550\ud551\ud552\ud553\ud554\ud555\ud556\ud557\ud558\ud559\ud55a\ud55b\ud55c\ud55d\ud55e\ud55f\ud560\ud561\ud562\ud563\ud564\ud565\ud566\ud567\ud568\ud569\ud56a\ud56b\ud56c\ud56d\ud56e\ud56f\ud570\ud571\ud572\ud573\ud574\ud575\ud576\ud577\ud578\ud579\ud57a\ud57b\ud57c\ud57d\ud57e\ud57f\ud580\ud581\ud582\ud583\ud584\ud585\ud586\ud587\ud588\ud589\ud58a\ud58b\ud58c\ud58d\ud58e\ud58f\ud590\ud591\ud592\ud593\ud594\ud595\ud596\ud597\ud598\ud599\ud59a\ud59b\ud59c\ud59d\ud59e\ud59f\ud5a0\ud5a1\ud5a2\ud5a3\ud5a4\ud5a5\ud5a6\ud5a7\ud5a8\ud5a9\ud5aa\ud5ab\ud5ac\ud5ad\ud5ae\ud5af\ud5b0\ud5b1\ud5b2\ud5b3\ud5b4\ud5b5\ud5b6\ud5b7\ud5b8\ud5b9\ud5ba\ud5bb\ud5bc\ud5bd\ud5be\ud5bf\ud5c0\ud5c1\ud5c2\ud5c3\ud5c4\ud5c5\ud5c6\ud5c7\ud5c8\ud5c9\ud5ca\ud5cb\ud5cc\ud5cd\ud5ce\ud5cf\ud5d0\ud5d1\ud5d2\ud5d3\ud5d4\ud5d5\ud5d6\ud5d7\ud5d8\ud5d9\ud5da\ud5db\ud5dc\ud5dd\ud5de\ud5df\ud5e0\ud5e1\ud5e2\ud5e3\ud5e4\ud5e5\ud5e6\ud5e7\ud5e8\ud5e9\ud5ea\ud5eb\ud5ec\ud5ed\ud5ee\ud5ef\ud5f0\ud5f1\ud5f2\ud5f3\ud5f4\ud5f5\ud5f6\ud5f7\ud5f8\ud5f9\ud5fa\ud5fb\ud5fc\ud5fd\ud5fe\ud5ff\ud600\ud601\ud602\ud603\ud604\ud605\ud606\ud607\ud608\ud609\ud60a\ud60b\ud60c\ud60d\ud60e\ud60f\ud610\ud611\ud612\ud613\ud614\ud615\ud616\ud617\ud618\ud619\ud61a\ud61b\ud61c\ud61d\ud61e\ud61f\ud620\ud621\ud622\ud623\ud624\ud625\ud626\ud627\ud628\ud629\ud62a\ud62b\ud62c\ud62d\ud62e\ud62f\ud630\ud631\ud632\ud633\ud634\ud635\ud636\ud637\ud638\ud639\ud63a\ud63b\ud63c\ud63d\ud63e\ud63f\ud640\ud641\ud642\ud643\ud644\ud645\ud646\ud647\ud648\ud649\ud64a\ud64b\ud64c\ud64d\ud64e\ud64f\ud650\ud651\ud652\ud653\ud654\ud655\ud656\ud657\ud658\ud659\ud65a\ud65b\ud65c\ud65d\ud65e\ud65f\ud660\ud661\ud662\ud663\ud664\ud665\ud666\ud667\ud668\ud669\ud66a\ud66b\ud66c\ud66d\ud66e\ud66f\ud670\ud671\ud672\ud673\ud674\ud675\ud676\ud677\ud678\ud679\ud67a\ud67b\ud67c\ud67d\ud67e\ud67f\ud680\ud681\ud682\ud683\ud684\ud685\ud686\ud687\ud688\ud689\ud68a\ud68b\ud68c\ud68d\ud68e\ud68f\ud690\ud691\ud692\ud693\ud694\ud695\ud696\ud697\ud698\ud699\ud69a\ud69b\ud69c\ud69d\ud69e\ud69f\ud6a0\ud6a1\ud6a2\ud6a3\ud6a4\ud6a5\ud6a6\ud6a7\ud6a8\ud6a9\ud6aa\ud6ab\ud6ac\ud6ad\ud6ae\ud6af\ud6b0\ud6b1\ud6b2\ud6b3\ud6b4\ud6b5\ud6b6\ud6b7\ud6b8\ud6b9\ud6ba\ud6bb\ud6bc\ud6bd\ud6be\ud6bf\ud6c0\ud6c1\ud6c2\ud6c3\ud6c4\ud6c5\ud6c6\ud6c7\ud6c8\ud6c9\ud6ca\ud6cb\ud6cc\ud6cd\ud6ce\ud6cf\ud6d0\ud6d1\ud6d2\ud6d3\ud6d4\ud6d5\ud6d6\ud6d7\ud6d8\ud6d9\ud6da\ud6db\ud6dc\ud6dd\ud6de\ud6df\ud6e0\ud6e1\ud6e2\ud6e3\ud6e4\ud6e5\ud6e6\ud6e7\ud6e8\ud6e9\ud6ea\ud6eb\ud6ec\ud6ed\ud6ee\ud6ef\ud6f0\ud6f1\ud6f2\ud6f3\ud6f4\ud6f5\ud6f6\ud6f7\ud6f8\ud6f9\ud6fa\ud6fb\ud6fc\ud6fd\ud6fe\ud6ff\ud700\ud701\ud702\ud703\ud704\ud705\ud706\ud707\ud708\ud709\ud70a\ud70b\ud70c\ud70d\ud70e\ud70f\ud710\ud711\ud712\ud713\ud714\ud715\ud716\ud717\ud718\ud719\ud71a\ud71b\ud71c\ud71d\ud71e\ud71f\ud720\ud721\ud722\ud723\ud724\ud725\ud726\ud727\ud728\ud729\ud72a\ud72b\ud72c\ud72d\ud72e\ud72f\ud730\ud731\ud732\ud733\ud734\ud735\ud736\ud737\ud738\ud739\ud73a\ud73b\ud73c\ud73d\ud73e\ud73f\ud740\ud741\ud742\ud743\ud744\ud745\ud746\ud747\ud748\ud749\ud74a\ud74b\ud74c\ud74d\ud74e\ud74f\ud750\ud751\ud752\ud753\ud754\ud755\ud756\ud757\ud758\ud759\ud75a\ud75b\ud75c\ud75d\ud75e\ud75f\ud760\ud761\ud762\ud763\ud764\ud765\ud766\ud767\ud768\ud769\ud76a\ud76b\ud76c\ud76d\ud76e\ud76f\ud770\ud771\ud772\ud773\ud774\ud775\ud776\ud777\ud778\ud779\ud77a\ud77b\ud77c\ud77d\ud77e\ud77f\ud780\ud781\ud782\ud783\ud784\ud785\ud786\ud787\ud788\ud789\ud78a\ud78b\ud78c\ud78d\ud78e\ud78f\ud790\ud791\ud792\ud793\ud794\ud795\ud796\ud797\ud798\ud799\ud79a\ud79b\ud79c\ud79d\ud79e\ud79f\ud7a0\ud7a1\ud7a2\ud7a3\uf900\uf901\uf902\uf903\uf904\uf905\uf906\uf907\uf908\uf909\uf90a\uf90b\uf90c\uf90d\uf90e\uf90f\uf910\uf911\uf912\uf913\uf914\uf915\uf916\uf917\uf918\uf919\uf91a\uf91b\uf91c\uf91d\uf91e\uf91f\uf920\uf921\uf922\uf923\uf924\uf925\uf926\uf927\uf928\uf929\uf92a\uf92b\uf92c\uf92d\uf92e\uf92f\uf930\uf931\uf932\uf933\uf934\uf935\uf936\uf937\uf938\uf939\uf93a\uf93b\uf93c\uf93d\uf93e\uf93f\uf940\uf941\uf942\uf943\uf944\uf945\uf946\uf947\uf948\uf949\uf94a\uf94b\uf94c\uf94d\uf94e\uf94f\uf950\uf951\uf952\uf953\uf954\uf955\uf956\uf957\uf958\uf959\uf95a\uf95b\uf95c\uf95d\uf95e\uf95f\uf960\uf961\uf962\uf963\uf964\uf965\uf966\uf967\uf968\uf969\uf96a\uf96b\uf96c\uf96d\uf96e\uf96f\uf970\uf971\uf972\uf973\uf974\uf975\uf976\uf977\uf978\uf979\uf97a\uf97b\uf97c\uf97d\uf97e\uf97f\uf980\uf981\uf982\uf983\uf984\uf985\uf986\uf987\uf988\uf989\uf98a\uf98b\uf98c\uf98d\uf98e\uf98f\uf990\uf991\uf992\uf993\uf994\uf995\uf996\uf997\uf998\uf999\uf99a\uf99b\uf99c\uf99d\uf99e\uf99f\uf9a0\uf9a1\uf9a2\uf9a3\uf9a4\uf9a5\uf9a6\uf9a7\uf9a8\uf9a9\uf9aa\uf9ab\uf9ac\uf9ad\uf9ae\uf9af\uf9b0\uf9b1\uf9b2\uf9b3\uf9b4\uf9b5\uf9b6\uf9b7\uf9b8\uf9b9\uf9ba\uf9bb\uf9bc\uf9bd\uf9be\uf9bf\uf9c0\uf9c1\uf9c2\uf9c3\uf9c4\uf9c5\uf9c6\uf9c7\uf9c8\uf9c9\uf9ca\uf9cb\uf9cc\uf9cd\uf9ce\uf9cf\uf9d0\uf9d1\uf9d2\uf9d3\uf9d4\uf9d5\uf9d6\uf9d7\uf9d8\uf9d9\uf9da\uf9db\uf9dc\uf9dd\uf9de\uf9df\uf9e0\uf9e1\uf9e2\uf9e3\uf9e4\uf9e5\uf9e6\uf9e7\uf9e8\uf9e9\uf9ea\uf9eb\uf9ec\uf9ed\uf9ee\uf9ef\uf9f0\uf9f1\uf9f2\uf9f3\uf9f4\uf9f5\uf9f6\uf9f7\uf9f8\uf9f9\uf9fa\uf9fb\uf9fc\uf9fd\uf9fe\uf9ff\ufa00\ufa01\ufa02\ufa03\ufa04\ufa05\ufa06\ufa07\ufa08\ufa09\ufa0a\ufa0b\ufa0c\ufa0d\ufa0e\ufa0f\ufa10\ufa11\ufa12\ufa13\ufa14\ufa15\ufa16\ufa17\ufa18\ufa19\ufa1a\ufa1b\ufa1c\ufa1d\ufa1e\ufa1f\ufa20\ufa21\ufa22\ufa23\ufa24\ufa25\ufa26\ufa27\ufa28\ufa29\ufa2a\ufa2b\ufa2c\ufa2d\ufa30\ufa31\ufa32\ufa33\ufa34\ufa35\ufa36\ufa37\ufa38\ufa39\ufa3a\ufa3b\ufa3c\ufa3d\ufa3e\ufa3f\ufa40\ufa41\ufa42\ufa43\ufa44\ufa45\ufa46\ufa47\ufa48\ufa49\ufa4a\ufa4b\ufa4c\ufa4d\ufa4e\ufa4f\ufa50\ufa51\ufa52\ufa53\ufa54\ufa55\ufa56\ufa57\ufa58\ufa59\ufa5a\ufa5b\ufa5c\ufa5d\ufa5e\ufa5f\ufa60\ufa61\ufa62\ufa63\ufa64\ufa65\ufa66\ufa67\ufa68\ufa69\ufa6a\ufa70\ufa71\ufa72\ufa73\ufa74\ufa75\ufa76\ufa77\ufa78\ufa79\ufa7a\ufa7b\ufa7c\ufa7d\ufa7e\ufa7f\ufa80\ufa81\ufa82\ufa83\ufa84\ufa85\ufa86\ufa87\ufa88\ufa89\ufa8a\ufa8b\ufa8c\ufa8d\ufa8e\ufa8f\ufa90\ufa91\ufa92\ufa93\ufa94\ufa95\ufa96\ufa97\ufa98\ufa99\ufa9a\ufa9b\ufa9c\ufa9d\ufa9e\ufa9f\ufaa0\ufaa1\ufaa2\ufaa3\ufaa4\ufaa5\ufaa6\ufaa7\ufaa8\ufaa9\ufaaa\ufaab\ufaac\ufaad\ufaae\ufaaf\ufab0\ufab1\ufab2\ufab3\ufab4\ufab5\ufab6\ufab7\ufab8\ufab9\ufaba\ufabb\ufabc\ufabd\ufabe\ufabf\ufac0\ufac1\ufac2\ufac3\ufac4\ufac5\ufac6\ufac7\ufac8\ufac9\ufaca\ufacb\ufacc\ufacd\uface\ufacf\ufad0\ufad1\ufad2\ufad3\ufad4\ufad5\ufad6\ufad7\ufad8\ufad9\ufb1d\ufb1f\ufb20\ufb21\ufb22\ufb23\ufb24\ufb25\ufb26\ufb27\ufb28\ufb2a\ufb2b\ufb2c\ufb2d\ufb2e\ufb2f\ufb30\ufb31\ufb32\ufb33\ufb34\ufb35\ufb36\ufb38\ufb39\ufb3a\ufb3b\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46\ufb47\ufb48\ufb49\ufb4a\ufb4b\ufb4c\ufb4d\ufb4e\ufb4f\ufb50\ufb51\ufb52\ufb53\ufb54\ufb55\ufb56\ufb57\ufb58\ufb59\ufb5a\ufb5b\ufb5c\ufb5d\ufb5e\ufb5f\ufb60\ufb61\ufb62\ufb63\ufb64\ufb65\ufb66\ufb67\ufb68\ufb69\ufb6a\ufb6b\ufb6c\ufb6d\ufb6e\ufb6f\ufb70\ufb71\ufb72\ufb73\ufb74\ufb75\ufb76\ufb77\ufb78\ufb79\ufb7a\ufb7b\ufb7c\ufb7d\ufb7e\ufb7f\ufb80\ufb81\ufb82\ufb83\ufb84\ufb85\ufb86\ufb87\ufb88\ufb89\ufb8a\ufb8b\ufb8c\ufb8d\ufb8e\ufb8f\ufb90\ufb91\ufb92\ufb93\ufb94\ufb95\ufb96\ufb97\ufb98\ufb99\ufb9a\ufb9b\ufb9c\ufb9d\ufb9e\ufb9f\ufba0\ufba1\ufba2\ufba3\ufba4\ufba5\ufba6\ufba7\ufba8\ufba9\ufbaa\ufbab\ufbac\ufbad\ufbae\ufbaf\ufbb0\ufbb1\ufbd3\ufbd4\ufbd5\ufbd6\ufbd7\ufbd8\ufbd9\ufbda\ufbdb\ufbdc\ufbdd\ufbde\ufbdf\ufbe0\ufbe1\ufbe2\ufbe3\ufbe4\ufbe5\ufbe6\ufbe7\ufbe8\ufbe9\ufbea\ufbeb\ufbec\ufbed\ufbee\ufbef\ufbf0\ufbf1\ufbf2\ufbf3\ufbf4\ufbf5\ufbf6\ufbf7\ufbf8\ufbf9\ufbfa\ufbfb\ufbfc\ufbfd\ufbfe\ufbff\ufc00\ufc01\ufc02\ufc03\ufc04\ufc05\ufc06\ufc07\ufc08\ufc09\ufc0a\ufc0b\ufc0c\ufc0d\ufc0e\ufc0f\ufc10\ufc11\ufc12\ufc13\ufc14\ufc15\ufc16\ufc17\ufc18\ufc19\ufc1a\ufc1b\ufc1c\ufc1d\ufc1e\ufc1f\ufc20\ufc21\ufc22\ufc23\ufc24\ufc25\ufc26\ufc27\ufc28\ufc29\ufc2a\ufc2b\ufc2c\ufc2d\ufc2e\ufc2f\ufc30\ufc31\ufc32\ufc33\ufc34\ufc35\ufc36\ufc37\ufc38\ufc39\ufc3a\ufc3b\ufc3c\ufc3d\ufc3e\ufc3f\ufc40\ufc41\ufc42\ufc43\ufc44\ufc45\ufc46\ufc47\ufc48\ufc49\ufc4a\ufc4b\ufc4c\ufc4d\ufc4e\ufc4f\ufc50\ufc51\ufc52\ufc53\ufc54\ufc55\ufc56\ufc57\ufc58\ufc59\ufc5a\ufc5b\ufc5c\ufc5d\ufc5e\ufc5f\ufc60\ufc61\ufc62\ufc63\ufc64\ufc65\ufc66\ufc67\ufc68\ufc69\ufc6a\ufc6b\ufc6c\ufc6d\ufc6e\ufc6f\ufc70\ufc71\ufc72\ufc73\ufc74\ufc75\ufc76\ufc77\ufc78\ufc79\ufc7a\ufc7b\ufc7c\ufc7d\ufc7e\ufc7f\ufc80\ufc81\ufc82\ufc83\ufc84\ufc85\ufc86\ufc87\ufc88\ufc89\ufc8a\ufc8b\ufc8c\ufc8d\ufc8e\ufc8f\ufc90\ufc91\ufc92\ufc93\ufc94\ufc95\ufc96\ufc97\ufc98\ufc99\ufc9a\ufc9b\ufc9c\ufc9d\ufc9e\ufc9f\ufca0\ufca1\ufca2\ufca3\ufca4\ufca5\ufca6\ufca7\ufca8\ufca9\ufcaa\ufcab\ufcac\ufcad\ufcae\ufcaf\ufcb0\ufcb1\ufcb2\ufcb3\ufcb4\ufcb5\ufcb6\ufcb7\ufcb8\ufcb9\ufcba\ufcbb\ufcbc\ufcbd\ufcbe\ufcbf\ufcc0\ufcc1\ufcc2\ufcc3\ufcc4\ufcc5\ufcc6\ufcc7\ufcc8\ufcc9\ufcca\ufccb\ufccc\ufccd\ufcce\ufccf\ufcd0\ufcd1\ufcd2\ufcd3\ufcd4\ufcd5\ufcd6\ufcd7\ufcd8\ufcd9\ufcda\ufcdb\ufcdc\ufcdd\ufcde\ufcdf\ufce0\ufce1\ufce2\ufce3\ufce4\ufce5\ufce6\ufce7\ufce8\ufce9\ufcea\ufceb\ufcec\ufced\ufcee\ufcef\ufcf0\ufcf1\ufcf2\ufcf3\ufcf4\ufcf5\ufcf6\ufcf7\ufcf8\ufcf9\ufcfa\ufcfb\ufcfc\ufcfd\ufcfe\ufcff\ufd00\ufd01\ufd02\ufd03\ufd04\ufd05\ufd06\ufd07\ufd08\ufd09\ufd0a\ufd0b\ufd0c\ufd0d\ufd0e\ufd0f\ufd10\ufd11\ufd12\ufd13\ufd14\ufd15\ufd16\ufd17\ufd18\ufd19\ufd1a\ufd1b\ufd1c\ufd1d\ufd1e\ufd1f\ufd20\ufd21\ufd22\ufd23\ufd24\ufd25\ufd26\ufd27\ufd28\ufd29\ufd2a\ufd2b\ufd2c\ufd2d\ufd2e\ufd2f\ufd30\ufd31\ufd32\ufd33\ufd34\ufd35\ufd36\ufd37\ufd38\ufd39\ufd3a\ufd3b\ufd3c\ufd3d\ufd50\ufd51\ufd52\ufd53\ufd54\ufd55\ufd56\ufd57\ufd58\ufd59\ufd5a\ufd5b\ufd5c\ufd5d\ufd5e\ufd5f\ufd60\ufd61\ufd62\ufd63\ufd64\ufd65\ufd66\ufd67\ufd68\ufd69\ufd6a\ufd6b\ufd6c\ufd6d\ufd6e\ufd6f\ufd70\ufd71\ufd72\ufd73\ufd74\ufd75\ufd76\ufd77\ufd78\ufd79\ufd7a\ufd7b\ufd7c\ufd7d\ufd7e\ufd7f\ufd80\ufd81\ufd82\ufd83\ufd84\ufd85\ufd86\ufd87\ufd88\ufd89\ufd8a\ufd8b\ufd8c\ufd8d\ufd8e\ufd8f\ufd92\ufd93\ufd94\ufd95\ufd96\ufd97\ufd98\ufd99\ufd9a\ufd9b\ufd9c\ufd9d\ufd9e\ufd9f\ufda0\ufda1\ufda2\ufda3\ufda4\ufda5\ufda6\ufda7\ufda8\ufda9\ufdaa\ufdab\ufdac\ufdad\ufdae\ufdaf\ufdb0\ufdb1\ufdb2\ufdb3\ufdb4\ufdb5\ufdb6\ufdb7\ufdb8\ufdb9\ufdba\ufdbb\ufdbc\ufdbd\ufdbe\ufdbf\ufdc0\ufdc1\ufdc2\ufdc3\ufdc4\ufdc5\ufdc6\ufdc7\ufdf0\ufdf1\ufdf2\ufdf3\ufdf4\ufdf5\ufdf6\ufdf7\ufdf8\ufdf9\ufdfa\ufdfb\ufe70\ufe71\ufe72\ufe73\ufe74\ufe76\ufe77\ufe78\ufe79\ufe7a\ufe7b\ufe7c\ufe7d\ufe7e\ufe7f\ufe80\ufe81\ufe82\ufe83\ufe84\ufe85\ufe86\ufe87\ufe88\ufe89\ufe8a\ufe8b\ufe8c\ufe8d\ufe8e\ufe8f\ufe90\ufe91\ufe92\ufe93\ufe94\ufe95\ufe96\ufe97\ufe98\ufe99\ufe9a\ufe9b\ufe9c\ufe9d\ufe9e\ufe9f\ufea0\ufea1\ufea2\ufea3\ufea4\ufea5\ufea6\ufea7\ufea8\ufea9\ufeaa\ufeab\ufeac\ufead\ufeae\ufeaf\ufeb0\ufeb1\ufeb2\ufeb3\ufeb4\ufeb5\ufeb6\ufeb7\ufeb8\ufeb9\ufeba\ufebb\ufebc\ufebd\ufebe\ufebf\ufec0\ufec1\ufec2\ufec3\ufec4\ufec5\ufec6\ufec7\ufec8\ufec9\ufeca\ufecb\ufecc\ufecd\ufece\ufecf\ufed0\ufed1\ufed2\ufed3\ufed4\ufed5\ufed6\ufed7\ufed8\ufed9\ufeda\ufedb\ufedc\ufedd\ufede\ufedf\ufee0\ufee1\ufee2\ufee3\ufee4\ufee5\ufee6\ufee7\ufee8\ufee9\ufeea\ufeeb\ufeec\ufeed\ufeee\ufeef\ufef0\ufef1\ufef2\ufef3\ufef4\ufef5\ufef6\ufef7\ufef8\ufef9\ufefa\ufefb\ufefc\uff66\uff67\uff68\uff69\uff6a\uff6b\uff6c\uff6d\uff6e\uff6f\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff7a\uff7b\uff7c\uff7d\uff7e\uff7f\uff80\uff81\uff82\uff83\uff84\uff85\uff86\uff87\uff88\uff89\uff8a\uff8b\uff8c\uff8d\uff8e\uff8f\uff90\uff91\uff92\uff93\uff94\uff95\uff96\uff97\uff98\uff99\uff9a\uff9b\uff9c\uff9d\uffa0\uffa1\uffa2\uffa3\uffa4\uffa5\uffa6\uffa7\uffa8\uffa9\uffaa\uffab\uffac\uffad\uffae\uffaf\uffb0\uffb1\uffb2\uffb3\uffb4\uffb5\uffb6\uffb7\uffb8\uffb9\uffba\uffbb\uffbc\uffbd\uffbe\uffc2\uffc3\uffc4\uffc5\uffc6\uffc7\uffca\uffcb\uffcc\uffcd\uffce\uffcf\uffd2\uffd3\uffd4\uffd5\uffd6\uffd7\uffda\uffdb\uffdc' + +Lt = u'\u01c5\u01c8\u01cb\u01f2\u1f88\u1f89\u1f8a\u1f8b\u1f8c\u1f8d\u1f8e\u1f8f\u1f98\u1f99\u1f9a\u1f9b\u1f9c\u1f9d\u1f9e\u1f9f\u1fa8\u1fa9\u1faa\u1fab\u1fac\u1fad\u1fae\u1faf\u1fbc\u1fcc\u1ffc' + +Lu = u'ABCDEFGHIJKLMNOPQRSTUVWXYZ\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189\u018a\u018b\u018e\u018f\u0190\u0191\u0193\u0194\u0196\u0197\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1\u01b2\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6\u01f7\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0386\u0388\u0389\u038a\u038c\u038e\u038f\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03d2\u03d3\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd\u03fe\u03ff\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\u040d\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053a\u053b\u053c\u053d\u053e\u053f\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054a\u054b\u054c\u054d\u054e\u054f\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u10a0\u10a1\u10a2\u10a3\u10a4\u10a5\u10a6\u10a7\u10a8\u10a9\u10aa\u10ab\u10ac\u10ad\u10ae\u10af\u10b0\u10b1\u10b2\u10b3\u10b4\u10b5\u10b6\u10b7\u10b8\u10b9\u10ba\u10bb\u10bc\u10bd\u10be\u10bf\u10c0\u10c1\u10c2\u10c3\u10c4\u10c5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1f08\u1f09\u1f0a\u1f0b\u1f0c\u1f0d\u1f0e\u1f0f\u1f18\u1f19\u1f1a\u1f1b\u1f1c\u1f1d\u1f28\u1f29\u1f2a\u1f2b\u1f2c\u1f2d\u1f2e\u1f2f\u1f38\u1f39\u1f3a\u1f3b\u1f3c\u1f3d\u1f3e\u1f3f\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68\u1f69\u1f6a\u1f6b\u1f6c\u1f6d\u1f6e\u1f6f\u1fb8\u1fb9\u1fba\u1fbb\u1fc8\u1fc9\u1fca\u1fcb\u1fd8\u1fd9\u1fda\u1fdb\u1fe8\u1fe9\u1fea\u1feb\u1fec\u1ff8\u1ff9\u1ffa\u1ffb\u2102\u2107\u210b\u210c\u210d\u2110\u2111\u2112\u2115\u2119\u211a\u211b\u211c\u211d\u2124\u2126\u2128\u212a\u212b\u212c\u212d\u2130\u2131\u2133\u213e\u213f\u2145\u2c00\u2c01\u2c02\u2c03\u2c04\u2c05\u2c06\u2c07\u2c08\u2c09\u2c0a\u2c0b\u2c0c\u2c0d\u2c0e\u2c0f\u2c10\u2c11\u2c12\u2c13\u2c14\u2c15\u2c16\u2c17\u2c18\u2c19\u2c1a\u2c1b\u2c1c\u2c1d\u2c1e\u2c1f\u2c20\u2c21\u2c22\u2c23\u2c24\u2c25\u2c26\u2c27\u2c28\u2c29\u2c2a\u2c2b\u2c2c\u2c2d\u2c2e\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\uff21\uff22\uff23\uff24\uff25\uff26\uff27\uff28\uff29\uff2a\uff2b\uff2c\uff2d\uff2e\uff2f\uff30\uff31\uff32\uff33\uff34\uff35\uff36\uff37\uff38\uff39\uff3a' + +Mc = u'\u0903\u093e\u093f\u0940\u0949\u094a\u094b\u094c\u0982\u0983\u09be\u09bf\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e\u0a3f\u0a40\u0a83\u0abe\u0abf\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6\u0bc7\u0bc8\u0bca\u0bcb\u0bcc\u0bd7\u0c01\u0c02\u0c03\u0c41\u0c42\u0c43\u0c44\u0c82\u0c83\u0cbe\u0cc0\u0cc1\u0cc2\u0cc3\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e\u0d3f\u0d40\u0d46\u0d47\u0d48\u0d4a\u0d4b\u0d4c\u0d57\u0d82\u0d83\u0dcf\u0dd0\u0dd1\u0dd8\u0dd9\u0dda\u0ddb\u0ddc\u0ddd\u0dde\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102c\u1031\u1038\u1056\u1057\u17b6\u17be\u17bf\u17c0\u17c1\u17c2\u17c3\u17c4\u17c5\u17c7\u17c8\u1923\u1924\u1925\u1926\u1929\u192a\u192b\u1930\u1931\u1933\u1934\u1935\u1936\u1937\u1938\u19b0\u19b1\u19b2\u19b3\u19b4\u19b5\u19b6\u19b7\u19b8\u19b9\u19ba\u19bb\u19bc\u19bd\u19be\u19bf\u19c0\u19c8\u19c9\u1a19\u1a1a\u1a1b\ua802\ua823\ua824\ua827' + +Me = u'\u0488\u0489\u06de\u20dd\u20de\u20df\u20e0\u20e2\u20e3\u20e4' + +Mn = u'\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030a\u030b\u030c\u030d\u030e\u030f\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031a\u031b\u031c\u031d\u031e\u031f\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032a\u032b\u032c\u032d\u032e\u032f\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033a\u033b\u033c\u033d\u033e\u033f\u0340\u0341\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349\u034a\u034b\u034c\u034d\u034e\u034f\u0350\u0351\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359\u035a\u035b\u035c\u035d\u035e\u035f\u0360\u0361\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036a\u036b\u036c\u036d\u036e\u036f\u0483\u0484\u0485\u0486\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059a\u059b\u059c\u059d\u059e\u059f\u05a0\u05a1\u05a2\u05a3\u05a4\u05a5\u05a6\u05a7\u05a8\u05a9\u05aa\u05ab\u05ac\u05ad\u05ae\u05af\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05b9\u05bb\u05bc\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610\u0611\u0612\u0613\u0614\u0615\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659\u065a\u065b\u065c\u065d\u065e\u0670\u06d6\u06d7\u06d8\u06d9\u06da\u06db\u06dc\u06df\u06e0\u06e1\u06e2\u06e3\u06e4\u06e7\u06e8\u06ea\u06eb\u06ec\u06ed\u0711\u0730\u0731\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739\u073a\u073b\u073c\u073d\u073e\u073f\u0740\u0741\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749\u074a\u07a6\u07a7\u07a8\u07a9\u07aa\u07ab\u07ac\u07ad\u07ae\u07af\u07b0\u0901\u0902\u093c\u0941\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u094d\u0951\u0952\u0953\u0954\u0962\u0963\u0981\u09bc\u09c1\u09c2\u09c3\u09c4\u09cd\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a4d\u0a70\u0a71\u0a81\u0a82\u0abc\u0ac1\u0ac2\u0ac3\u0ac4\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3f\u0b41\u0b42\u0b43\u0b4d\u0b56\u0b82\u0bc0\u0bcd\u0c3e\u0c3f\u0c40\u0c46\u0c47\u0c48\u0c4a\u0c4b\u0c4c\u0c4d\u0c55\u0c56\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0d41\u0d42\u0d43\u0d4d\u0dca\u0dd2\u0dd3\u0dd4\u0dd6\u0e31\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0eb1\u0eb4\u0eb5\u0eb6\u0eb7\u0eb8\u0eb9\u0ebb\u0ebc\u0ec8\u0ec9\u0eca\u0ecb\u0ecc\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71\u0f72\u0f73\u0f74\u0f75\u0f76\u0f77\u0f78\u0f79\u0f7a\u0f7b\u0f7c\u0f7d\u0f7e\u0f80\u0f81\u0f82\u0f83\u0f84\u0f86\u0f87\u0f90\u0f91\u0f92\u0f93\u0f94\u0f95\u0f96\u0f97\u0f99\u0f9a\u0f9b\u0f9c\u0f9d\u0f9e\u0f9f\u0fa0\u0fa1\u0fa2\u0fa3\u0fa4\u0fa5\u0fa6\u0fa7\u0fa8\u0fa9\u0faa\u0fab\u0fac\u0fad\u0fae\u0faf\u0fb0\u0fb1\u0fb2\u0fb3\u0fb4\u0fb5\u0fb6\u0fb7\u0fb8\u0fb9\u0fba\u0fbb\u0fbc\u0fc6\u102d\u102e\u102f\u1030\u1032\u1036\u1037\u1039\u1058\u1059\u135f\u1712\u1713\u1714\u1732\u1733\u1734\u1752\u1753\u1772\u1773\u17b7\u17b8\u17b9\u17ba\u17bb\u17bc\u17bd\u17c6\u17c9\u17ca\u17cb\u17cc\u17cd\u17ce\u17cf\u17d0\u17d1\u17d2\u17d3\u17dd\u180b\u180c\u180d\u18a9\u1920\u1921\u1922\u1927\u1928\u1932\u1939\u193a\u193b\u1a17\u1a18\u1dc0\u1dc1\u1dc2\u1dc3\u20d0\u20d1\u20d2\u20d3\u20d4\u20d5\u20d6\u20d7\u20d8\u20d9\u20da\u20db\u20dc\u20e1\u20e5\u20e6\u20e7\u20e8\u20e9\u20ea\u20eb\u302a\u302b\u302c\u302d\u302e\u302f\u3099\u309a\ua806\ua80b\ua825\ua826\ufb1e\ufe00\ufe01\ufe02\ufe03\ufe04\ufe05\ufe06\ufe07\ufe08\ufe09\ufe0a\ufe0b\ufe0c\ufe0d\ufe0e\ufe0f\ufe20\ufe21\ufe22\ufe23' + +Nd = u'0123456789\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u0a66\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f\u0be6\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0c66\u0c67\u0c68\u0c69\u0c6a\u0c6b\u0c6c\u0c6d\u0c6e\u0c6f\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0d66\u0d67\u0d68\u0d69\u0d6a\u0d6b\u0d6c\u0d6d\u0d6e\u0d6f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u17e0\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u1810\u1811\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819\u1946\u1947\u1948\u1949\u194a\u194b\u194c\u194d\u194e\u194f\u19d0\u19d1\u19d2\u19d3\u19d4\u19d5\u19d6\u19d7\u19d8\u19d9\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19' + +Nl = u'\u16ee\u16ef\u16f0\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216a\u216b\u216c\u216d\u216e\u216f\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217a\u217b\u217c\u217d\u217e\u217f\u2180\u2181\u2182\u2183\u3007\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u3038\u3039\u303a' + +No = u'\xb2\xb3\xb9\xbc\xbd\xbe\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u0bf0\u0bf1\u0bf2\u0f2a\u0f2b\u0f2c\u0f2d\u0f2e\u0f2f\u0f30\u0f31\u0f32\u0f33\u1369\u136a\u136b\u136c\u136d\u136e\u136f\u1370\u1371\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379\u137a\u137b\u137c\u17f0\u17f1\u17f2\u17f3\u17f4\u17f5\u17f6\u17f7\u17f8\u17f9\u2070\u2074\u2075\u2076\u2077\u2078\u2079\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2153\u2154\u2155\u2156\u2157\u2158\u2159\u215a\u215b\u215c\u215d\u215e\u215f\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246a\u246b\u246c\u246d\u246e\u246f\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477\u2478\u2479\u247a\u247b\u247c\u247d\u247e\u247f\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2488\u2489\u248a\u248b\u248c\u248d\u248e\u248f\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249a\u249b\u24ea\u24eb\u24ec\u24ed\u24ee\u24ef\u24f0\u24f1\u24f2\u24f3\u24f4\u24f5\u24f6\u24f7\u24f8\u24f9\u24fa\u24fb\u24fc\u24fd\u24fe\u24ff\u2776\u2777\u2778\u2779\u277a\u277b\u277c\u277d\u277e\u277f\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787\u2788\u2789\u278a\u278b\u278c\u278d\u278e\u278f\u2790\u2791\u2792\u2793\u2cfd\u3192\u3193\u3194\u3195\u3220\u3221\u3222\u3223\u3224\u3225\u3226\u3227\u3228\u3229\u3251\u3252\u3253\u3254\u3255\u3256\u3257\u3258\u3259\u325a\u325b\u325c\u325d\u325e\u325f\u3280\u3281\u3282\u3283\u3284\u3285\u3286\u3287\u3288\u3289\u32b1\u32b2\u32b3\u32b4\u32b5\u32b6\u32b7\u32b8\u32b9\u32ba\u32bb\u32bc\u32bd\u32be\u32bf' + +Pc = u'_\u203f\u2040\u2054\ufe33\ufe34\ufe4d\ufe4e\ufe4f\uff3f' + +Pd = u'-\u058a\u1806\u2010\u2011\u2012\u2013\u2014\u2015\u2e17\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d' + +Pe = u')]}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u232a\u23b5\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3f\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63' + +Pf = u'\xbb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d' + +Pi = u'\xab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c' + +Po = u'!"#%&\'*,./:;?@\\\xa1\xb7\xbf\u037e\u0387\u055a\u055b\u055c\u055d\u055e\u055f\u0589\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u060c\u060d\u061b\u061e\u061f\u066a\u066b\u066c\u066d\u06d4\u0700\u0701\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709\u070a\u070b\u070c\u070d\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04\u0f05\u0f06\u0f07\u0f08\u0f09\u0f0a\u0f0b\u0f0c\u0f0d\u0f0e\u0f0f\u0f10\u0f11\u0f12\u0f85\u0fd0\u0fd1\u104a\u104b\u104c\u104d\u104e\u104f\u10fb\u1361\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u166d\u166e\u16eb\u16ec\u16ed\u1735\u1736\u17d4\u17d5\u17d6\u17d8\u17d9\u17da\u1800\u1801\u1802\u1803\u1804\u1805\u1807\u1808\u1809\u180a\u1944\u1945\u19de\u19df\u1a1e\u1a1f\u2016\u2017\u2020\u2021\u2022\u2023\u2024\u2025\u2026\u2027\u2030\u2031\u2032\u2033\u2034\u2035\u2036\u2037\u2038\u203b\u203c\u203d\u203e\u2041\u2042\u2043\u2047\u2048\u2049\u204a\u204b\u204c\u204d\u204e\u204f\u2050\u2051\u2053\u2055\u2056\u2057\u2058\u2059\u205a\u205b\u205c\u205d\u205e\u23b6\u2cf9\u2cfa\u2cfb\u2cfc\u2cfe\u2cff\u2e00\u2e01\u2e06\u2e07\u2e08\u2e0b\u2e0e\u2e0f\u2e10\u2e11\u2e12\u2e13\u2e14\u2e15\u2e16\u3001\u3002\u3003\u303d\u30fb\ufe10\ufe11\ufe12\ufe13\ufe14\ufe15\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49\ufe4a\ufe4b\ufe4c\ufe50\ufe51\ufe52\ufe54\ufe55\ufe56\ufe57\ufe5f\ufe60\ufe61\ufe68\ufe6a\ufe6b\uff01\uff02\uff03\uff05\uff06\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65' + +Ps = u'([{\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2329\u23b4\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3e\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62' + +Sc = u'$\xa2\xa3\xa4\xa5\u060b\u09f2\u09f3\u0af1\u0bf9\u0e3f\u17db\u20a0\u20a1\u20a2\u20a3\u20a4\u20a5\u20a6\u20a7\u20a8\u20a9\u20aa\u20ab\u20ac\u20ad\u20ae\u20af\u20b0\u20b1\u20b2\u20b3\u20b4\u20b5\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6' + +Sk = u'^`\xa8\xaf\xb4\xb8\u02c2\u02c3\u02c4\u02c5\u02d2\u02d3\u02d4\u02d5\u02d6\u02d7\u02d8\u02d9\u02da\u02db\u02dc\u02dd\u02de\u02df\u02e5\u02e6\u02e7\u02e8\u02e9\u02ea\u02eb\u02ec\u02ed\u02ef\u02f0\u02f1\u02f2\u02f3\u02f4\u02f5\u02f6\u02f7\u02f8\u02f9\u02fa\u02fb\u02fc\u02fd\u02fe\u02ff\u0374\u0375\u0384\u0385\u1fbd\u1fbf\u1fc0\u1fc1\u1fcd\u1fce\u1fcf\u1fdd\u1fde\u1fdf\u1fed\u1fee\u1fef\u1ffd\u1ffe\u309b\u309c\ua700\ua701\ua702\ua703\ua704\ua705\ua706\ua707\ua708\ua709\ua70a\ua70b\ua70c\ua70d\ua70e\ua70f\ua710\ua711\ua712\ua713\ua714\ua715\ua716\uff3e\uff40\uffe3' + +Sm = u'+<=>|~\xac\xb1\xd7\xf7\u03f6\u2044\u2052\u207a\u207b\u207c\u208a\u208b\u208c\u2140\u2141\u2142\u2143\u2144\u214b\u2190\u2191\u2192\u2193\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4\u21f5\u21f6\u21f7\u21f8\u21f9\u21fa\u21fb\u21fc\u21fd\u21fe\u21ff\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207\u2208\u2209\u220a\u220b\u220c\u220d\u220e\u220f\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217\u2218\u2219\u221a\u221b\u221c\u221d\u221e\u221f\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227\u2228\u2229\u222a\u222b\u222c\u222d\u222e\u222f\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237\u2238\u2239\u223a\u223b\u223c\u223d\u223e\u223f\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247\u2248\u2249\u224a\u224b\u224c\u224d\u224e\u224f\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257\u2258\u2259\u225a\u225b\u225c\u225d\u225e\u225f\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267\u2268\u2269\u226a\u226b\u226c\u226d\u226e\u226f\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277\u2278\u2279\u227a\u227b\u227c\u227d\u227e\u227f\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287\u2288\u2289\u228a\u228b\u228c\u228d\u228e\u228f\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297\u2298\u2299\u229a\u229b\u229c\u229d\u229e\u229f\u22a0\u22a1\u22a2\u22a3\u22a4\u22a5\u22a6\u22a7\u22a8\u22a9\u22aa\u22ab\u22ac\u22ad\u22ae\u22af\u22b0\u22b1\u22b2\u22b3\u22b4\u22b5\u22b6\u22b7\u22b8\u22b9\u22ba\u22bb\u22bc\u22bd\u22be\u22bf\u22c0\u22c1\u22c2\u22c3\u22c4\u22c5\u22c6\u22c7\u22c8\u22c9\u22ca\u22cb\u22cc\u22cd\u22ce\u22cf\u22d0\u22d1\u22d2\u22d3\u22d4\u22d5\u22d6\u22d7\u22d8\u22d9\u22da\u22db\u22dc\u22dd\u22de\u22df\u22e0\u22e1\u22e2\u22e3\u22e4\u22e5\u22e6\u22e7\u22e8\u22e9\u22ea\u22eb\u22ec\u22ed\u22ee\u22ef\u22f0\u22f1\u22f2\u22f3\u22f4\u22f5\u22f6\u22f7\u22f8\u22f9\u22fa\u22fb\u22fc\u22fd\u22fe\u22ff\u2308\u2309\u230a\u230b\u2320\u2321\u237c\u239b\u239c\u239d\u239e\u239f\u23a0\u23a1\u23a2\u23a3\u23a4\u23a5\u23a6\u23a7\u23a8\u23a9\u23aa\u23ab\u23ac\u23ad\u23ae\u23af\u23b0\u23b1\u23b2\u23b3\u25b7\u25c1\u25f8\u25f9\u25fa\u25fb\u25fc\u25fd\u25fe\u25ff\u266f\u27c0\u27c1\u27c2\u27c3\u27c4\u27d0\u27d1\u27d2\u27d3\u27d4\u27d5\u27d6\u27d7\u27d8\u27d9\u27da\u27db\u27dc\u27dd\u27de\u27df\u27e0\u27e1\u27e2\u27e3\u27e4\u27e5\u27f0\u27f1\u27f2\u27f3\u27f4\u27f5\u27f6\u27f7\u27f8\u27f9\u27fa\u27fb\u27fc\u27fd\u27fe\u27ff\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907\u2908\u2909\u290a\u290b\u290c\u290d\u290e\u290f\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917\u2918\u2919\u291a\u291b\u291c\u291d\u291e\u291f\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927\u2928\u2929\u292a\u292b\u292c\u292d\u292e\u292f\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937\u2938\u2939\u293a\u293b\u293c\u293d\u293e\u293f\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947\u2948\u2949\u294a\u294b\u294c\u294d\u294e\u294f\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957\u2958\u2959\u295a\u295b\u295c\u295d\u295e\u295f\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967\u2968\u2969\u296a\u296b\u296c\u296d\u296e\u296f\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977\u2978\u2979\u297a\u297b\u297c\u297d\u297e\u297f\u2980\u2981\u2982\u2999\u299a\u299b\u299c\u299d\u299e\u299f\u29a0\u29a1\u29a2\u29a3\u29a4\u29a5\u29a6\u29a7\u29a8\u29a9\u29aa\u29ab\u29ac\u29ad\u29ae\u29af\u29b0\u29b1\u29b2\u29b3\u29b4\u29b5\u29b6\u29b7\u29b8\u29b9\u29ba\u29bb\u29bc\u29bd\u29be\u29bf\u29c0\u29c1\u29c2\u29c3\u29c4\u29c5\u29c6\u29c7\u29c8\u29c9\u29ca\u29cb\u29cc\u29cd\u29ce\u29cf\u29d0\u29d1\u29d2\u29d3\u29d4\u29d5\u29d6\u29d7\u29dc\u29dd\u29de\u29df\u29e0\u29e1\u29e2\u29e3\u29e4\u29e5\u29e6\u29e7\u29e8\u29e9\u29ea\u29eb\u29ec\u29ed\u29ee\u29ef\u29f0\u29f1\u29f2\u29f3\u29f4\u29f5\u29f6\u29f7\u29f8\u29f9\u29fa\u29fb\u29fe\u29ff\u2a00\u2a01\u2a02\u2a03\u2a04\u2a05\u2a06\u2a07\u2a08\u2a09\u2a0a\u2a0b\u2a0c\u2a0d\u2a0e\u2a0f\u2a10\u2a11\u2a12\u2a13\u2a14\u2a15\u2a16\u2a17\u2a18\u2a19\u2a1a\u2a1b\u2a1c\u2a1d\u2a1e\u2a1f\u2a20\u2a21\u2a22\u2a23\u2a24\u2a25\u2a26\u2a27\u2a28\u2a29\u2a2a\u2a2b\u2a2c\u2a2d\u2a2e\u2a2f\u2a30\u2a31\u2a32\u2a33\u2a34\u2a35\u2a36\u2a37\u2a38\u2a39\u2a3a\u2a3b\u2a3c\u2a3d\u2a3e\u2a3f\u2a40\u2a41\u2a42\u2a43\u2a44\u2a45\u2a46\u2a47\u2a48\u2a49\u2a4a\u2a4b\u2a4c\u2a4d\u2a4e\u2a4f\u2a50\u2a51\u2a52\u2a53\u2a54\u2a55\u2a56\u2a57\u2a58\u2a59\u2a5a\u2a5b\u2a5c\u2a5d\u2a5e\u2a5f\u2a60\u2a61\u2a62\u2a63\u2a64\u2a65\u2a66\u2a67\u2a68\u2a69\u2a6a\u2a6b\u2a6c\u2a6d\u2a6e\u2a6f\u2a70\u2a71\u2a72\u2a73\u2a74\u2a75\u2a76\u2a77\u2a78\u2a79\u2a7a\u2a7b\u2a7c\u2a7d\u2a7e\u2a7f\u2a80\u2a81\u2a82\u2a83\u2a84\u2a85\u2a86\u2a87\u2a88\u2a89\u2a8a\u2a8b\u2a8c\u2a8d\u2a8e\u2a8f\u2a90\u2a91\u2a92\u2a93\u2a94\u2a95\u2a96\u2a97\u2a98\u2a99\u2a9a\u2a9b\u2a9c\u2a9d\u2a9e\u2a9f\u2aa0\u2aa1\u2aa2\u2aa3\u2aa4\u2aa5\u2aa6\u2aa7\u2aa8\u2aa9\u2aaa\u2aab\u2aac\u2aad\u2aae\u2aaf\u2ab0\u2ab1\u2ab2\u2ab3\u2ab4\u2ab5\u2ab6\u2ab7\u2ab8\u2ab9\u2aba\u2abb\u2abc\u2abd\u2abe\u2abf\u2ac0\u2ac1\u2ac2\u2ac3\u2ac4\u2ac5\u2ac6\u2ac7\u2ac8\u2ac9\u2aca\u2acb\u2acc\u2acd\u2ace\u2acf\u2ad0\u2ad1\u2ad2\u2ad3\u2ad4\u2ad5\u2ad6\u2ad7\u2ad8\u2ad9\u2ada\u2adb\u2adc\u2add\u2ade\u2adf\u2ae0\u2ae1\u2ae2\u2ae3\u2ae4\u2ae5\u2ae6\u2ae7\u2ae8\u2ae9\u2aea\u2aeb\u2aec\u2aed\u2aee\u2aef\u2af0\u2af1\u2af2\u2af3\u2af4\u2af5\u2af6\u2af7\u2af8\u2af9\u2afa\u2afb\u2afc\u2afd\u2afe\u2aff\ufb29\ufe62\ufe64\ufe65\ufe66\uff0b\uff1c\uff1d\uff1e\uff5c\uff5e\uffe2\uffe9\uffea\uffeb\uffec' + +So = u'\xa6\xa7\xa9\xae\xb0\xb6\u0482\u060e\u060f\u06e9\u06fd\u06fe\u09fa\u0b70\u0bf3\u0bf4\u0bf5\u0bf6\u0bf7\u0bf8\u0bfa\u0f01\u0f02\u0f03\u0f13\u0f14\u0f15\u0f16\u0f17\u0f1a\u0f1b\u0f1c\u0f1d\u0f1e\u0f1f\u0f34\u0f36\u0f38\u0fbe\u0fbf\u0fc0\u0fc1\u0fc2\u0fc3\u0fc4\u0fc5\u0fc7\u0fc8\u0fc9\u0fca\u0fcb\u0fcc\u0fcf\u1360\u1390\u1391\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399\u1940\u19e0\u19e1\u19e2\u19e3\u19e4\u19e5\u19e6\u19e7\u19e8\u19e9\u19ea\u19eb\u19ec\u19ed\u19ee\u19ef\u19f0\u19f1\u19f2\u19f3\u19f4\u19f5\u19f6\u19f7\u19f8\u19f9\u19fa\u19fb\u19fc\u19fd\u19fe\u19ff\u2100\u2101\u2103\u2104\u2105\u2106\u2108\u2109\u2114\u2116\u2117\u2118\u211e\u211f\u2120\u2121\u2122\u2123\u2125\u2127\u2129\u212e\u2132\u213a\u213b\u214a\u214c\u2195\u2196\u2197\u2198\u2199\u219c\u219d\u219e\u219f\u21a1\u21a2\u21a4\u21a5\u21a7\u21a8\u21a9\u21aa\u21ab\u21ac\u21ad\u21af\u21b0\u21b1\u21b2\u21b3\u21b4\u21b5\u21b6\u21b7\u21b8\u21b9\u21ba\u21bb\u21bc\u21bd\u21be\u21bf\u21c0\u21c1\u21c2\u21c3\u21c4\u21c5\u21c6\u21c7\u21c8\u21c9\u21ca\u21cb\u21cc\u21cd\u21d0\u21d1\u21d3\u21d5\u21d6\u21d7\u21d8\u21d9\u21da\u21db\u21dc\u21dd\u21de\u21df\u21e0\u21e1\u21e2\u21e3\u21e4\u21e5\u21e6\u21e7\u21e8\u21e9\u21ea\u21eb\u21ec\u21ed\u21ee\u21ef\u21f0\u21f1\u21f2\u21f3\u2300\u2301\u2302\u2303\u2304\u2305\u2306\u2307\u230c\u230d\u230e\u230f\u2310\u2311\u2312\u2313\u2314\u2315\u2316\u2317\u2318\u2319\u231a\u231b\u231c\u231d\u231e\u231f\u2322\u2323\u2324\u2325\u2326\u2327\u2328\u232b\u232c\u232d\u232e\u232f\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337\u2338\u2339\u233a\u233b\u233c\u233d\u233e\u233f\u2340\u2341\u2342\u2343\u2344\u2345\u2346\u2347\u2348\u2349\u234a\u234b\u234c\u234d\u234e\u234f\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357\u2358\u2359\u235a\u235b\u235c\u235d\u235e\u235f\u2360\u2361\u2362\u2363\u2364\u2365\u2366\u2367\u2368\u2369\u236a\u236b\u236c\u236d\u236e\u236f\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377\u2378\u2379\u237a\u237b\u237d\u237e\u237f\u2380\u2381\u2382\u2383\u2384\u2385\u2386\u2387\u2388\u2389\u238a\u238b\u238c\u238d\u238e\u238f\u2390\u2391\u2392\u2393\u2394\u2395\u2396\u2397\u2398\u2399\u239a\u23b7\u23b8\u23b9\u23ba\u23bb\u23bc\u23bd\u23be\u23bf\u23c0\u23c1\u23c2\u23c3\u23c4\u23c5\u23c6\u23c7\u23c8\u23c9\u23ca\u23cb\u23cc\u23cd\u23ce\u23cf\u23d0\u23d1\u23d2\u23d3\u23d4\u23d5\u23d6\u23d7\u23d8\u23d9\u23da\u23db\u2400\u2401\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409\u240a\u240b\u240c\u240d\u240e\u240f\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419\u241a\u241b\u241c\u241d\u241e\u241f\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244a\u249c\u249d\u249e\u249f\u24a0\u24a1\u24a2\u24a3\u24a4\u24a5\u24a6\u24a7\u24a8\u24a9\u24aa\u24ab\u24ac\u24ad\u24ae\u24af\u24b0\u24b1\u24b2\u24b3\u24b4\u24b5\u24b6\u24b7\u24b8\u24b9\u24ba\u24bb\u24bc\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c5\u24c6\u24c7\u24c8\u24c9\u24ca\u24cb\u24cc\u24cd\u24ce\u24cf\u24d0\u24d1\u24d2\u24d3\u24d4\u24d5\u24d6\u24d7\u24d8\u24d9\u24da\u24db\u24dc\u24dd\u24de\u24df\u24e0\u24e1\u24e2\u24e3\u24e4\u24e5\u24e6\u24e7\u24e8\u24e9\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507\u2508\u2509\u250a\u250b\u250c\u250d\u250e\u250f\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517\u2518\u2519\u251a\u251b\u251c\u251d\u251e\u251f\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527\u2528\u2529\u252a\u252b\u252c\u252d\u252e\u252f\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537\u2538\u2539\u253a\u253b\u253c\u253d\u253e\u253f\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547\u2548\u2549\u254a\u254b\u254c\u254d\u254e\u254f\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255a\u255b\u255c\u255d\u255e\u255f\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256a\u256b\u256c\u256d\u256e\u256f\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577\u2578\u2579\u257a\u257b\u257c\u257d\u257e\u257f\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u2589\u258a\u258b\u258c\u258d\u258e\u258f\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597\u2598\u2599\u259a\u259b\u259c\u259d\u259e\u259f\u25a0\u25a1\u25a2\u25a3\u25a4\u25a5\u25a6\u25a7\u25a8\u25a9\u25aa\u25ab\u25ac\u25ad\u25ae\u25af\u25b0\u25b1\u25b2\u25b3\u25b4\u25b5\u25b6\u25b8\u25b9\u25ba\u25bb\u25bc\u25bd\u25be\u25bf\u25c0\u25c2\u25c3\u25c4\u25c5\u25c6\u25c7\u25c8\u25c9\u25ca\u25cb\u25cc\u25cd\u25ce\u25cf\u25d0\u25d1\u25d2\u25d3\u25d4\u25d5\u25d6\u25d7\u25d8\u25d9\u25da\u25db\u25dc\u25dd\u25de\u25df\u25e0\u25e1\u25e2\u25e3\u25e4\u25e5\u25e6\u25e7\u25e8\u25e9\u25ea\u25eb\u25ec\u25ed\u25ee\u25ef\u25f0\u25f1\u25f2\u25f3\u25f4\u25f5\u25f6\u25f7\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607\u2608\u2609\u260a\u260b\u260c\u260d\u260e\u260f\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617\u2618\u2619\u261a\u261b\u261c\u261d\u261e\u261f\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627\u2628\u2629\u262a\u262b\u262c\u262d\u262e\u262f\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637\u2638\u2639\u263a\u263b\u263c\u263d\u263e\u263f\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647\u2648\u2649\u264a\u264b\u264c\u264d\u264e\u264f\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657\u2658\u2659\u265a\u265b\u265c\u265d\u265e\u265f\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667\u2668\u2669\u266a\u266b\u266c\u266d\u266e\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677\u2678\u2679\u267a\u267b\u267c\u267d\u267e\u267f\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687\u2688\u2689\u268a\u268b\u268c\u268d\u268e\u268f\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697\u2698\u2699\u269a\u269b\u269c\u26a0\u26a1\u26a2\u26a3\u26a4\u26a5\u26a6\u26a7\u26a8\u26a9\u26aa\u26ab\u26ac\u26ad\u26ae\u26af\u26b0\u26b1\u2701\u2702\u2703\u2704\u2706\u2707\u2708\u2709\u270c\u270d\u270e\u270f\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717\u2718\u2719\u271a\u271b\u271c\u271d\u271e\u271f\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727\u2729\u272a\u272b\u272c\u272d\u272e\u272f\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739\u273a\u273b\u273c\u273d\u273e\u273f\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747\u2748\u2749\u274a\u274b\u274d\u274f\u2750\u2751\u2752\u2756\u2758\u2759\u275a\u275b\u275c\u275d\u275e\u2761\u2762\u2763\u2764\u2765\u2766\u2767\u2794\u2798\u2799\u279a\u279b\u279c\u279d\u279e\u279f\u27a0\u27a1\u27a2\u27a3\u27a4\u27a5\u27a6\u27a7\u27a8\u27a9\u27aa\u27ab\u27ac\u27ad\u27ae\u27af\u27b1\u27b2\u27b3\u27b4\u27b5\u27b6\u27b7\u27b8\u27b9\u27ba\u27bb\u27bc\u27bd\u27be\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u280d\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819\u281a\u281b\u281c\u281d\u281e\u281f\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859\u285a\u285b\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286d\u286e\u286f\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u28d1\u28d2\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28da\u28db\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28ea\u28eb\u28ec\u28ed\u28ee\u28ef\u28f0\u28f1\u28f2\u28f3\u28f4\u28f5\u28f6\u28f7\u28f8\u28f9\u28fa\u28fb\u28fc\u28fd\u28fe\u28ff\u2b00\u2b01\u2b02\u2b03\u2b04\u2b05\u2b06\u2b07\u2b08\u2b09\u2b0a\u2b0b\u2b0c\u2b0d\u2b0e\u2b0f\u2b10\u2b11\u2b12\u2b13\u2ce5\u2ce6\u2ce7\u2ce8\u2ce9\u2cea\u2e80\u2e81\u2e82\u2e83\u2e84\u2e85\u2e86\u2e87\u2e88\u2e89\u2e8a\u2e8b\u2e8c\u2e8d\u2e8e\u2e8f\u2e90\u2e91\u2e92\u2e93\u2e94\u2e95\u2e96\u2e97\u2e98\u2e99\u2e9b\u2e9c\u2e9d\u2e9e\u2e9f\u2ea0\u2ea1\u2ea2\u2ea3\u2ea4\u2ea5\u2ea6\u2ea7\u2ea8\u2ea9\u2eaa\u2eab\u2eac\u2ead\u2eae\u2eaf\u2eb0\u2eb1\u2eb2\u2eb3\u2eb4\u2eb5\u2eb6\u2eb7\u2eb8\u2eb9\u2eba\u2ebb\u2ebc\u2ebd\u2ebe\u2ebf\u2ec0\u2ec1\u2ec2\u2ec3\u2ec4\u2ec5\u2ec6\u2ec7\u2ec8\u2ec9\u2eca\u2ecb\u2ecc\u2ecd\u2ece\u2ecf\u2ed0\u2ed1\u2ed2\u2ed3\u2ed4\u2ed5\u2ed6\u2ed7\u2ed8\u2ed9\u2eda\u2edb\u2edc\u2edd\u2ede\u2edf\u2ee0\u2ee1\u2ee2\u2ee3\u2ee4\u2ee5\u2ee6\u2ee7\u2ee8\u2ee9\u2eea\u2eeb\u2eec\u2eed\u2eee\u2eef\u2ef0\u2ef1\u2ef2\u2ef3\u2f00\u2f01\u2f02\u2f03\u2f04\u2f05\u2f06\u2f07\u2f08\u2f09\u2f0a\u2f0b\u2f0c\u2f0d\u2f0e\u2f0f\u2f10\u2f11\u2f12\u2f13\u2f14\u2f15\u2f16\u2f17\u2f18\u2f19\u2f1a\u2f1b\u2f1c\u2f1d\u2f1e\u2f1f\u2f20\u2f21\u2f22\u2f23\u2f24\u2f25\u2f26\u2f27\u2f28\u2f29\u2f2a\u2f2b\u2f2c\u2f2d\u2f2e\u2f2f\u2f30\u2f31\u2f32\u2f33\u2f34\u2f35\u2f36\u2f37\u2f38\u2f39\u2f3a\u2f3b\u2f3c\u2f3d\u2f3e\u2f3f\u2f40\u2f41\u2f42\u2f43\u2f44\u2f45\u2f46\u2f47\u2f48\u2f49\u2f4a\u2f4b\u2f4c\u2f4d\u2f4e\u2f4f\u2f50\u2f51\u2f52\u2f53\u2f54\u2f55\u2f56\u2f57\u2f58\u2f59\u2f5a\u2f5b\u2f5c\u2f5d\u2f5e\u2f5f\u2f60\u2f61\u2f62\u2f63\u2f64\u2f65\u2f66\u2f67\u2f68\u2f69\u2f6a\u2f6b\u2f6c\u2f6d\u2f6e\u2f6f\u2f70\u2f71\u2f72\u2f73\u2f74\u2f75\u2f76\u2f77\u2f78\u2f79\u2f7a\u2f7b\u2f7c\u2f7d\u2f7e\u2f7f\u2f80\u2f81\u2f82\u2f83\u2f84\u2f85\u2f86\u2f87\u2f88\u2f89\u2f8a\u2f8b\u2f8c\u2f8d\u2f8e\u2f8f\u2f90\u2f91\u2f92\u2f93\u2f94\u2f95\u2f96\u2f97\u2f98\u2f99\u2f9a\u2f9b\u2f9c\u2f9d\u2f9e\u2f9f\u2fa0\u2fa1\u2fa2\u2fa3\u2fa4\u2fa5\u2fa6\u2fa7\u2fa8\u2fa9\u2faa\u2fab\u2fac\u2fad\u2fae\u2faf\u2fb0\u2fb1\u2fb2\u2fb3\u2fb4\u2fb5\u2fb6\u2fb7\u2fb8\u2fb9\u2fba\u2fbb\u2fbc\u2fbd\u2fbe\u2fbf\u2fc0\u2fc1\u2fc2\u2fc3\u2fc4\u2fc5\u2fc6\u2fc7\u2fc8\u2fc9\u2fca\u2fcb\u2fcc\u2fcd\u2fce\u2fcf\u2fd0\u2fd1\u2fd2\u2fd3\u2fd4\u2fd5\u2ff0\u2ff1\u2ff2\u2ff3\u2ff4\u2ff5\u2ff6\u2ff7\u2ff8\u2ff9\u2ffa\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196\u3197\u3198\u3199\u319a\u319b\u319c\u319d\u319e\u319f\u31c0\u31c1\u31c2\u31c3\u31c4\u31c5\u31c6\u31c7\u31c8\u31c9\u31ca\u31cb\u31cc\u31cd\u31ce\u31cf\u3200\u3201\u3202\u3203\u3204\u3205\u3206\u3207\u3208\u3209\u320a\u320b\u320c\u320d\u320e\u320f\u3210\u3211\u3212\u3213\u3214\u3215\u3216\u3217\u3218\u3219\u321a\u321b\u321c\u321d\u321e\u322a\u322b\u322c\u322d\u322e\u322f\u3230\u3231\u3232\u3233\u3234\u3235\u3236\u3237\u3238\u3239\u323a\u323b\u323c\u323d\u323e\u323f\u3240\u3241\u3242\u3243\u3250\u3260\u3261\u3262\u3263\u3264\u3265\u3266\u3267\u3268\u3269\u326a\u326b\u326c\u326d\u326e\u326f\u3270\u3271\u3272\u3273\u3274\u3275\u3276\u3277\u3278\u3279\u327a\u327b\u327c\u327d\u327e\u327f\u328a\u328b\u328c\u328d\u328e\u328f\u3290\u3291\u3292\u3293\u3294\u3295\u3296\u3297\u3298\u3299\u329a\u329b\u329c\u329d\u329e\u329f\u32a0\u32a1\u32a2\u32a3\u32a4\u32a5\u32a6\u32a7\u32a8\u32a9\u32aa\u32ab\u32ac\u32ad\u32ae\u32af\u32b0\u32c0\u32c1\u32c2\u32c3\u32c4\u32c5\u32c6\u32c7\u32c8\u32c9\u32ca\u32cb\u32cc\u32cd\u32ce\u32cf\u32d0\u32d1\u32d2\u32d3\u32d4\u32d5\u32d6\u32d7\u32d8\u32d9\u32da\u32db\u32dc\u32dd\u32de\u32df\u32e0\u32e1\u32e2\u32e3\u32e4\u32e5\u32e6\u32e7\u32e8\u32e9\u32ea\u32eb\u32ec\u32ed\u32ee\u32ef\u32f0\u32f1\u32f2\u32f3\u32f4\u32f5\u32f6\u32f7\u32f8\u32f9\u32fa\u32fb\u32fc\u32fd\u32fe\u3300\u3301\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309\u330a\u330b\u330c\u330d\u330e\u330f\u3310\u3311\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319\u331a\u331b\u331c\u331d\u331e\u331f\u3320\u3321\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329\u332a\u332b\u332c\u332d\u332e\u332f\u3330\u3331\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339\u333a\u333b\u333c\u333d\u333e\u333f\u3340\u3341\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349\u334a\u334b\u334c\u334d\u334e\u334f\u3350\u3351\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359\u335a\u335b\u335c\u335d\u335e\u335f\u3360\u3361\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369\u336a\u336b\u336c\u336d\u336e\u336f\u3370\u3371\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379\u337a\u337b\u337c\u337d\u337e\u337f\u3380\u3381\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389\u338a\u338b\u338c\u338d\u338e\u338f\u3390\u3391\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399\u339a\u339b\u339c\u339d\u339e\u339f\u33a0\u33a1\u33a2\u33a3\u33a4\u33a5\u33a6\u33a7\u33a8\u33a9\u33aa\u33ab\u33ac\u33ad\u33ae\u33af\u33b0\u33b1\u33b2\u33b3\u33b4\u33b5\u33b6\u33b7\u33b8\u33b9\u33ba\u33bb\u33bc\u33bd\u33be\u33bf\u33c0\u33c1\u33c2\u33c3\u33c4\u33c5\u33c6\u33c7\u33c8\u33c9\u33ca\u33cb\u33cc\u33cd\u33ce\u33cf\u33d0\u33d1\u33d2\u33d3\u33d4\u33d5\u33d6\u33d7\u33d8\u33d9\u33da\u33db\u33dc\u33dd\u33de\u33df\u33e0\u33e1\u33e2\u33e3\u33e4\u33e5\u33e6\u33e7\u33e8\u33e9\u33ea\u33eb\u33ec\u33ed\u33ee\u33ef\u33f0\u33f1\u33f2\u33f3\u33f4\u33f5\u33f6\u33f7\u33f8\u33f9\u33fa\u33fb\u33fc\u33fd\u33fe\u33ff\u4dc0\u4dc1\u4dc2\u4dc3\u4dc4\u4dc5\u4dc6\u4dc7\u4dc8\u4dc9\u4dca\u4dcb\u4dcc\u4dcd\u4dce\u4dcf\u4dd0\u4dd1\u4dd2\u4dd3\u4dd4\u4dd5\u4dd6\u4dd7\u4dd8\u4dd9\u4dda\u4ddb\u4ddc\u4ddd\u4dde\u4ddf\u4de0\u4de1\u4de2\u4de3\u4de4\u4de5\u4de6\u4de7\u4de8\u4de9\u4dea\u4deb\u4dec\u4ded\u4dee\u4def\u4df0\u4df1\u4df2\u4df3\u4df4\u4df5\u4df6\u4df7\u4df8\u4df9\u4dfa\u4dfb\u4dfc\u4dfd\u4dfe\u4dff\ua490\ua491\ua492\ua493\ua494\ua495\ua496\ua497\ua498\ua499\ua49a\ua49b\ua49c\ua49d\ua49e\ua49f\ua4a0\ua4a1\ua4a2\ua4a3\ua4a4\ua4a5\ua4a6\ua4a7\ua4a8\ua4a9\ua4aa\ua4ab\ua4ac\ua4ad\ua4ae\ua4af\ua4b0\ua4b1\ua4b2\ua4b3\ua4b4\ua4b5\ua4b6\ua4b7\ua4b8\ua4b9\ua4ba\ua4bb\ua4bc\ua4bd\ua4be\ua4bf\ua4c0\ua4c1\ua4c2\ua4c3\ua4c4\ua4c5\ua4c6\ua828\ua829\ua82a\ua82b\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd' + +Zl = u'\u2028' + +Zp = u'\u2029' + +Zs = u' \xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000' + +cats = ['Cc', 'Cf', 'Cn', 'Co', 'Cs', 'Ll', 'Lm', 'Lo', 'Lt', 'Lu', 'Mc', 'Me', 'Mn', 'Nd', 'Nl', 'No', 'Pc', 'Pd', 'Pe', 'Pf', 'Pi', 'Po', 'Ps', 'Sc', 'Sk', 'Sm', 'So', 'Zl', 'Zp', 'Zs'] + +def combine(*args): + return u''.join([globals()[cat] for cat in args]) + +xid_start = u'\u0041-\u005A\u005F\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01BA\u01BB\u01BC-\u01BF\u01C0-\u01C3\u01C4-\u0241\u0250-\u02AF\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EE\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03F5\u03F7-\u0481\u048A-\u04CE\u04D0-\u04F9\u0500-\u050F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0640\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06E5-\u06E6\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u076D\u0780-\u07A5\u07B1\u0904-\u0939\u093D\u0950\u0958-\u0961\u097D\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60-\u0D61\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E40-\u0E45\u0E46\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6A\u0F88-\u0F8B\u1000-\u1021\u1023-\u1027\u1029-\u102A\u1050-\u1055\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1159\u115F-\u11A2\u11A8-\u11F9\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u1676\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1842\u1843\u1844-\u1877\u1880-\u18A8\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19A9\u19C1-\u19C7\u1A00-\u1A16\u1D00-\u1D2B\u1D2C-\u1D61\u1D62-\u1D77\u1D78\u1D79-\u1D9A\u1D9B-\u1DBF\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u2094\u2102\u2107\u210A-\u2113\u2115\u2118\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212E\u212F-\u2131\u2133-\u2134\u2135-\u2138\u2139\u213C-\u213F\u2145-\u2149\u2160-\u2183\u2C00-\u2C2E\u2C30-\u2C5E\u2C80-\u2CE4\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005\u3006\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303A\u303B\u303C\u3041-\u3096\u309D-\u309E\u309F\u30A1-\u30FA\u30FC-\u30FE\u30FF\u3105-\u312C\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FBB\uA000-\uA014\uA015\uA016-\uA48C\uA800-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFF6F\uFF70\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' + +xid_continue = u'\u0030-\u0039\u0041-\u005A\u005F\u0061-\u007A\u00AA\u00B5\u00B7\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01BA\u01BB\u01BC-\u01BF\u01C0-\u01C3\u01C4-\u0241\u0250-\u02AF\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EE\u0300-\u036F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03F5\u03F7-\u0481\u0483-\u0486\u048A-\u04CE\u04D0-\u04F9\u0500-\u050F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05B9\u05BB-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u0615\u0621-\u063A\u0640\u0641-\u064A\u064B-\u065E\u0660-\u0669\u066E-\u066F\u0670\u0671-\u06D3\u06D5\u06D6-\u06DC\u06DF-\u06E4\u06E5-\u06E6\u06E7-\u06E8\u06EA-\u06ED\u06EE-\u06EF\u06F0-\u06F9\u06FA-\u06FC\u06FF\u0710\u0711\u0712-\u072F\u0730-\u074A\u074D-\u076D\u0780-\u07A5\u07A6-\u07B0\u07B1\u0901-\u0902\u0903\u0904-\u0939\u093C\u093D\u093E-\u0940\u0941-\u0948\u0949-\u094C\u094D\u0950\u0951-\u0954\u0958-\u0961\u0962-\u0963\u0966-\u096F\u097D\u0981\u0982-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC\u09BD\u09BE-\u09C0\u09C1-\u09C4\u09C7-\u09C8\u09CB-\u09CC\u09CD\u09CE\u09D7\u09DC-\u09DD\u09DF-\u09E1\u09E2-\u09E3\u09E6-\u09EF\u09F0-\u09F1\u0A01-\u0A02\u0A03\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A40\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A70-\u0A71\u0A72-\u0A74\u0A81-\u0A82\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC\u0ABD\u0ABE-\u0AC0\u0AC1-\u0AC5\u0AC7-\u0AC8\u0AC9\u0ACB-\u0ACC\u0ACD\u0AD0\u0AE0-\u0AE1\u0AE2-\u0AE3\u0AE6-\u0AEF\u0B01\u0B02-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41-\u0B43\u0B47-\u0B48\u0B4B-\u0B4C\u0B4D\u0B56\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BBF\u0BC0\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BCD\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C40\u0C41-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0-\u0CC4\u0CC6\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CCC-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D40\u0D41-\u0D43\u0D46-\u0D48\u0D4A-\u0D4C\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F\u0D82-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD1\u0DD2-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2-\u0DF3\u0E01-\u0E30\u0E31\u0E32-\u0E33\u0E34-\u0E3A\u0E40-\u0E45\u0E46\u0E47-\u0E4E\u0E50-\u0E59\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB1\u0EB2-\u0EB3\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDD\u0F00\u0F18-\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F3F\u0F40-\u0F47\u0F49-\u0F6A\u0F71-\u0F7E\u0F7F\u0F80-\u0F84\u0F86-\u0F87\u0F88-\u0F8B\u0F90-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1021\u1023-\u1027\u1029-\u102A\u102C\u102D-\u1030\u1031\u1032\u1036-\u1037\u1038\u1039\u1040-\u1049\u1050-\u1055\u1056-\u1057\u1058-\u1059\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1159\u115F-\u11A2\u11A8-\u11F9\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u1676\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1712-\u1714\u1720-\u1731\u1732-\u1734\u1740-\u1751\u1752-\u1753\u1760-\u176C\u176E-\u1770\u1772-\u1773\u1780-\u17B3\u17B6\u17B7-\u17BD\u17BE-\u17C5\u17C6\u17C7-\u17C8\u17C9-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1842\u1843\u1844-\u1877\u1880-\u18A8\u18A9\u1900-\u191C\u1920-\u1922\u1923-\u1926\u1927-\u1928\u1929-\u192B\u1930-\u1931\u1932\u1933-\u1938\u1939-\u193B\u1946-\u194F\u1950-\u196D\u1970-\u1974\u1980-\u19A9\u19B0-\u19C0\u19C1-\u19C7\u19C8-\u19C9\u19D0-\u19D9\u1A00-\u1A16\u1A17-\u1A18\u1A19-\u1A1B\u1D00-\u1D2B\u1D2C-\u1D61\u1D62-\u1D77\u1D78\u1D79-\u1D9A\u1D9B-\u1DBF\u1DC0-\u1DC3\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F-\u2040\u2054\u2071\u207F\u2090-\u2094\u20D0-\u20DC\u20E1\u20E5-\u20EB\u2102\u2107\u210A-\u2113\u2115\u2118\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212E\u212F-\u2131\u2133-\u2134\u2135-\u2138\u2139\u213C-\u213F\u2145-\u2149\u2160-\u2183\u2C00-\u2C2E\u2C30-\u2C5E\u2C80-\u2CE4\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005\u3006\u3007\u3021-\u3029\u302A-\u302F\u3031-\u3035\u3038-\u303A\u303B\u303C\u3041-\u3096\u3099-\u309A\u309D-\u309E\u309F\u30A1-\u30FA\u30FC-\u30FE\u30FF\u3105-\u312C\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FBB\uA000-\uA014\uA015\uA016-\uA48C\uA800-\uA801\uA802\uA803-\uA805\uA806\uA807-\uA80A\uA80B\uA80C-\uA822\uA823-\uA824\uA825-\uA826\uA827\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1E\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE00-\uFE0F\uFE20-\uFE23\uFE33-\uFE34\uFE4D-\uFE4F\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFF6F\uFF70\uFF71-\uFF9D\uFF9E-\uFF9F\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' + +def allexcept(*args): + newcats = cats[:] + for arg in args: + newcats.remove(arg) + return u''.join([globals()[cat] for cat in newcats]) + +if __name__ == '__main__': + import unicodedata + + categories = {} + + f = open(__file__.rstrip('co')) + try: + content = f.read() + finally: + f.close() + + header = content[:content.find('Cc =')] + footer = content[content.find("def combine("):] + + for code in range(65535): + c = unichr(code) + cat = unicodedata.category(c) + categories.setdefault(cat, []).append(c) + + f = open(__file__, 'w') + f.write(header) + + for cat in sorted(categories): + val = u''.join(categories[cat]) + if cat == 'Cs': + # Jython can't handle isolated surrogates + f.write("""\ +try: + Cs = eval(r"%r") +except UnicodeDecodeError: + Cs = '' # Jython can't handle isolated surrogates\n\n""" % val) + else: + f.write('%s = %r\n\n' % (cat, val)) + f.write('cats = %r\n\n' % sorted(categories.keys())) + + f.write(footer) + f.close() diff --git a/src/buildlib/jinja2-py3.egg/jinja2/bccache.py b/src/buildlib/jinja2-py3.egg/jinja2/bccache.py new file mode 100644 index 0000000000..09ff845028 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/bccache.py @@ -0,0 +1,337 @@ +# -*- coding: utf-8 -*- +""" + jinja2.bccache + ~~~~~~~~~~~~~~ + + This module implements the bytecode cache system Jinja is optionally + using. This is useful if you have very complex template situations and + the compiliation of all those templates slow down your application too + much. + + Situations where this is useful are often forking web applications that + are initialized on the first request. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD. +""" +from os import path, listdir +import os +import sys +import errno +import marshal +import tempfile +import fnmatch +from hashlib import sha1 +from jinja2.utils import open_if_exists +from jinja2._compat import BytesIO, pickle, PY2, text_type + + +# marshal works better on 3.x, one hack less required +if not PY2: + marshal_dump = marshal.dump + marshal_load = marshal.load +else: + + def marshal_dump(code, f): + if isinstance(f, file): + marshal.dump(code, f) + else: + f.write(marshal.dumps(code)) + + def marshal_load(f): + if isinstance(f, file): + return marshal.load(f) + return marshal.loads(f.read()) + + +bc_version = 2 + +# magic version used to only change with new jinja versions. With 2.6 +# we change this to also take Python version changes into account. The +# reason for this is that Python tends to segfault if fed earlier bytecode +# versions because someone thought it would be a good idea to reuse opcodes +# or make Python incompatible with earlier versions. +bc_magic = 'j2'.encode('ascii') + \ + pickle.dumps(bc_version, 2) + \ + pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1]) + + +class Bucket(object): + """Buckets are used to store the bytecode for one template. It's created + and initialized by the bytecode cache and passed to the loading functions. + + The buckets get an internal checksum from the cache assigned and use this + to automatically reject outdated cache material. Individual bytecode + cache subclasses don't have to care about cache invalidation. + """ + + def __init__(self, environment, key, checksum): + self.environment = environment + self.key = key + self.checksum = checksum + self.reset() + + def reset(self): + """Resets the bucket (unloads the bytecode).""" + self.code = None + + def load_bytecode(self, f): + """Loads bytecode from a file or file like object.""" + # make sure the magic header is correct + magic = f.read(len(bc_magic)) + if magic != bc_magic: + self.reset() + return + # the source code of the file changed, we need to reload + checksum = pickle.load(f) + if self.checksum != checksum: + self.reset() + return + self.code = marshal_load(f) + + def write_bytecode(self, f): + """Dump the bytecode into the file or file like object passed.""" + if self.code is None: + raise TypeError('can\'t write empty bucket') + f.write(bc_magic) + pickle.dump(self.checksum, f, 2) + marshal_dump(self.code, f) + + def bytecode_from_string(self, string): + """Load bytecode from a string.""" + self.load_bytecode(BytesIO(string)) + + def bytecode_to_string(self): + """Return the bytecode as string.""" + out = BytesIO() + self.write_bytecode(out) + return out.getvalue() + + +class BytecodeCache(object): + """To implement your own bytecode cache you have to subclass this class + and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of + these methods are passed a :class:`~jinja2.bccache.Bucket`. + + A very basic bytecode cache that saves the bytecode on the file system:: + + from os import path + + class MyCache(BytecodeCache): + + def __init__(self, directory): + self.directory = directory + + def load_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + if path.exists(filename): + with open(filename, 'rb') as f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + with open(filename, 'wb') as f: + bucket.write_bytecode(f) + + A more advanced version of a filesystem based bytecode cache is part of + Jinja2. + """ + + def load_bytecode(self, bucket): + """Subclasses have to override this method to load bytecode into a + bucket. If they are not able to find code in the cache for the + bucket, it must not do anything. + """ + raise NotImplementedError() + + def dump_bytecode(self, bucket): + """Subclasses have to override this method to write the bytecode + from a bucket back to the cache. If it unable to do so it must not + fail silently but raise an exception. + """ + raise NotImplementedError() + + def clear(self): + """Clears the cache. This method is not used by Jinja2 but should be + implemented to allow applications to clear the bytecode cache used + by a particular environment. + """ + + def get_cache_key(self, name, filename=None): + """Returns the unique hash key for this template name.""" + hash = sha1(name.encode('utf-8')) + if filename is not None: + filename = '|' + filename + if isinstance(filename, text_type): + filename = filename.encode('utf-8') + hash.update(filename) + return hash.hexdigest() + + def get_source_checksum(self, source): + """Returns a checksum for the source.""" + return sha1(source.encode('utf-8')).hexdigest() + + def get_bucket(self, environment, name, filename, source): + """Return a cache bucket for the given template. All arguments are + mandatory but filename may be `None`. + """ + key = self.get_cache_key(name, filename) + checksum = self.get_source_checksum(source) + bucket = Bucket(environment, key, checksum) + self.load_bytecode(bucket) + return bucket + + def set_bucket(self, bucket): + """Put the bucket into the cache.""" + self.dump_bytecode(bucket) + + +class FileSystemBytecodeCache(BytecodeCache): + """A bytecode cache that stores bytecode on the filesystem. It accepts + two arguments: The directory where the cache items are stored and a + pattern string that is used to build the filename. + + If no directory is specified a default cache directory is selected. On + Windows the user's temp directory is used, on UNIX systems a directory + is created for the user in the system temp directory. + + The pattern can be used to have multiple separate caches operate on the + same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s`` + is replaced with the cache key. + + >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache') + + This bytecode cache supports clearing of the cache using the clear method. + """ + + def __init__(self, directory=None, pattern='__jinja2_%s.cache'): + if directory is None: + directory = self._get_default_cache_dir() + self.directory = directory + self.pattern = pattern + + def _get_default_cache_dir(self): + tmpdir = tempfile.gettempdir() + + # On windows the temporary directory is used specific unless + # explicitly forced otherwise. We can just use that. + if os.name == 'n': + return tmpdir + if not hasattr(os, 'getuid'): + raise RuntimeError('Cannot determine safe temp directory. You ' + 'need to explicitly provide one.') + + dirname = '_jinja2-cache-%d' % os.getuid() + actual_dir = os.path.join(tmpdir, dirname) + try: + # 448 == 0700 + os.mkdir(actual_dir, 448) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + return actual_dir + + def _get_cache_filename(self, bucket): + return path.join(self.directory, self.pattern % bucket.key) + + def load_bytecode(self, bucket): + f = open_if_exists(self._get_cache_filename(bucket), 'rb') + if f is not None: + try: + bucket.load_bytecode(f) + finally: + f.close() + + def dump_bytecode(self, bucket): + f = open(self._get_cache_filename(bucket), 'wb') + try: + bucket.write_bytecode(f) + finally: + f.close() + + def clear(self): + # imported lazily here because google app-engine doesn't support + # write access on the file system and the function does not exist + # normally. + from os import remove + files = fnmatch.filter(listdir(self.directory), self.pattern % '*') + for filename in files: + try: + remove(path.join(self.directory, filename)) + except OSError: + pass + + +class MemcachedBytecodeCache(BytecodeCache): + """This class implements a bytecode cache that uses a memcache cache for + storing the information. It does not enforce a specific memcache library + (tummy's memcache or cmemcache) but will accept any class that provides + the minimal interface required. + + Libraries compatible with this class: + + - `werkzeug `_.contrib.cache + - `python-memcached `_ + - `cmemcache `_ + + (Unfortunately the django cache interface is not compatible because it + does not support storing binary data, only unicode. You can however pass + the underlying cache client to the bytecode cache which is available + as `django.core.cache.cache._client`.) + + The minimal interface for the client passed to the constructor is this: + + .. class:: MinimalClientInterface + + .. method:: set(key, value[, timeout]) + + Stores the bytecode in the cache. `value` is a string and + `timeout` the timeout of the key. If timeout is not provided + a default timeout or no timeout should be assumed, if it's + provided it's an integer with the number of seconds the cache + item should exist. + + .. method:: get(key) + + Returns the value for the cache key. If the item does not + exist in the cache the return value must be `None`. + + The other arguments to the constructor are the prefix for all keys that + is added before the actual cache key and the timeout for the bytecode in + the cache system. We recommend a high (or no) timeout. + + This bytecode cache does not support clearing of used items in the cache. + The clear method is a no-operation function. + + .. versionadded:: 2.7 + Added support for ignoring memcache errors through the + `ignore_memcache_errors` parameter. + """ + + def __init__(self, client, prefix='jinja2/bytecode/', timeout=None, + ignore_memcache_errors=True): + self.client = client + self.prefix = prefix + self.timeout = timeout + self.ignore_memcache_errors = ignore_memcache_errors + + def load_bytecode(self, bucket): + try: + code = self.client.get(self.prefix + bucket.key) + except Exception: + if not self.ignore_memcache_errors: + raise + code = None + if code is not None: + bucket.bytecode_from_string(code) + + def dump_bytecode(self, bucket): + args = (self.prefix + bucket.key, bucket.bytecode_to_string()) + if self.timeout is not None: + args += (self.timeout,) + try: + self.client.set(*args) + except Exception: + if not self.ignore_memcache_errors: + raise diff --git a/src/buildlib/jinja2-py3.egg/jinja2/compiler.py b/src/buildlib/jinja2-py3.egg/jinja2/compiler.py new file mode 100644 index 0000000000..75a60b8d2d --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/compiler.py @@ -0,0 +1,1640 @@ +# -*- coding: utf-8 -*- +""" + jinja2.compiler + ~~~~~~~~~~~~~~~ + + Compiles nodes into python code. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +from itertools import chain +from copy import deepcopy +from keyword import iskeyword as is_python_keyword +from jinja2 import nodes +from jinja2.nodes import EvalContext +from jinja2.visitor import NodeVisitor +from jinja2.exceptions import TemplateAssertionError +from jinja2.utils import Markup, concat, escape +from jinja2._compat import range_type, next, text_type, string_types, \ + iteritems, NativeStringIO, imap + + +operators = { + 'eq': '==', + 'ne': '!=', + 'gt': '>', + 'gteq': '>=', + 'lt': '<', + 'lteq': '<=', + 'in': 'in', + 'notin': 'not in' +} + +# what method to iterate over items do we want to use for dict iteration +# in generated code? on 2.x let's go with iteritems, on 3.x with items +if hasattr(dict, 'iteritems'): + dict_item_iter = 'iteritems' +else: + dict_item_iter = 'items' + + +# does if 0: dummy(x) get us x into the scope? +def unoptimize_before_dead_code(): + x = 42 + def f(): + if 0: dummy(x) + return f + +# The getattr is necessary for pypy which does not set this attribute if +# no closure is on the function +unoptimize_before_dead_code = bool( + getattr(unoptimize_before_dead_code(), '__closure__', None)) + + +def generate(node, environment, name, filename, stream=None, + defer_init=False): + """Generate the python source for a node tree.""" + if not isinstance(node, nodes.Template): + raise TypeError('Can\'t compile non template nodes') + generator = CodeGenerator(environment, name, filename, stream, defer_init) + generator.visit(node) + if stream is None: + return generator.stream.getvalue() + + +def has_safe_repr(value): + """Does the node have a safe representation?""" + if value is None or value is NotImplemented or value is Ellipsis: + return True + if isinstance(value, (bool, int, float, complex, range_type, + Markup) + string_types): + return True + if isinstance(value, (tuple, list, set, frozenset)): + for item in value: + if not has_safe_repr(item): + return False + return True + elif isinstance(value, dict): + for key, value in iteritems(value): + if not has_safe_repr(key): + return False + if not has_safe_repr(value): + return False + return True + return False + + +def find_undeclared(nodes, names): + """Check if the names passed are accessed undeclared. The return value + is a set of all the undeclared names from the sequence of names found. + """ + visitor = UndeclaredNameVisitor(names) + try: + for node in nodes: + visitor.visit(node) + except VisitorExit: + pass + return visitor.undeclared + + +class Identifiers(object): + """Tracks the status of identifiers in frames.""" + + def __init__(self): + # variables that are known to be declared (probably from outer + # frames or because they are special for the frame) + self.declared = set() + + # undeclared variables from outer scopes + self.outer_undeclared = set() + + # names that are accessed without being explicitly declared by + # this one or any of the outer scopes. Names can appear both in + # declared and undeclared. + self.undeclared = set() + + # names that are declared locally + self.declared_locally = set() + + # names that are declared by parameters + self.declared_parameter = set() + + def add_special(self, name): + """Register a special name like `loop`.""" + self.undeclared.discard(name) + self.declared.add(name) + + def is_declared(self, name): + """Check if a name is declared in this or an outer scope.""" + if name in self.declared_locally or name in self.declared_parameter: + return True + return name in self.declared + + def copy(self): + return deepcopy(self) + + +class Frame(object): + """Holds compile time information for us.""" + + def __init__(self, eval_ctx, parent=None): + self.eval_ctx = eval_ctx + self.identifiers = Identifiers() + + # a toplevel frame is the root + soft frames such as if conditions. + self.toplevel = False + + # the root frame is basically just the outermost frame, so no if + # conditions. This information is used to optimize inheritance + # situations. + self.rootlevel = False + + # in some dynamic inheritance situations the compiler needs to add + # write tests around output statements. + self.require_output_check = parent and parent.require_output_check + + # inside some tags we are using a buffer rather than yield statements. + # this for example affects {% filter %} or {% macro %}. If a frame + # is buffered this variable points to the name of the list used as + # buffer. + self.buffer = None + + # the name of the block we're in, otherwise None. + self.block = parent and parent.block or None + + # a set of actually assigned names + self.assigned_names = set() + + # the parent of this frame + self.parent = parent + + if parent is not None: + self.identifiers.declared.update( + parent.identifiers.declared | + parent.identifiers.declared_parameter | + parent.assigned_names + ) + self.identifiers.outer_undeclared.update( + parent.identifiers.undeclared - + self.identifiers.declared + ) + self.buffer = parent.buffer + + def copy(self): + """Create a copy of the current one.""" + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.identifiers = object.__new__(self.identifiers.__class__) + rv.identifiers.__dict__.update(self.identifiers.__dict__) + return rv + + def inspect(self, nodes): + """Walk the node and check for identifiers. If the scope is hard (eg: + enforce on a python level) overrides from outer scopes are tracked + differently. + """ + visitor = FrameIdentifierVisitor(self.identifiers) + for node in nodes: + visitor.visit(node) + + def find_shadowed(self, extra=()): + """Find all the shadowed names. extra is an iterable of variables + that may be defined with `add_special` which may occour scoped. + """ + i = self.identifiers + return (i.declared | i.outer_undeclared) & \ + (i.declared_locally | i.declared_parameter) | \ + set(x for x in extra if i.is_declared(x)) + + def inner(self): + """Return an inner frame.""" + return Frame(self.eval_ctx, self) + + def soft(self): + """Return a soft frame. A soft frame may not be modified as + standalone thing as it shares the resources with the frame it + was created of, but it's not a rootlevel frame any longer. + """ + rv = self.copy() + rv.rootlevel = False + return rv + + __copy__ = copy + + +class VisitorExit(RuntimeError): + """Exception used by the `UndeclaredNameVisitor` to signal a stop.""" + + +class DependencyFinderVisitor(NodeVisitor): + """A visitor that collects filter and test calls.""" + + def __init__(self): + self.filters = set() + self.tests = set() + + def visit_Filter(self, node): + self.generic_visit(node) + self.filters.add(node.name) + + def visit_Test(self, node): + self.generic_visit(node) + self.tests.add(node.name) + + def visit_Block(self, node): + """Stop visiting at blocks.""" + + +class UndeclaredNameVisitor(NodeVisitor): + """A visitor that checks if a name is accessed without being + declared. This is different from the frame visitor as it will + not stop at closure frames. + """ + + def __init__(self, names): + self.names = set(names) + self.undeclared = set() + + def visit_Name(self, node): + if node.ctx == 'load' and node.name in self.names: + self.undeclared.add(node.name) + if self.undeclared == self.names: + raise VisitorExit() + else: + self.names.discard(node.name) + + def visit_Block(self, node): + """Stop visiting a blocks.""" + + +class FrameIdentifierVisitor(NodeVisitor): + """A visitor for `Frame.inspect`.""" + + def __init__(self, identifiers): + self.identifiers = identifiers + + def visit_Name(self, node): + """All assignments to names go through this function.""" + if node.ctx == 'store': + self.identifiers.declared_locally.add(node.name) + elif node.ctx == 'param': + self.identifiers.declared_parameter.add(node.name) + elif node.ctx == 'load' and not \ + self.identifiers.is_declared(node.name): + self.identifiers.undeclared.add(node.name) + + def visit_If(self, node): + self.visit(node.test) + real_identifiers = self.identifiers + + old_names = real_identifiers.declared_locally | \ + real_identifiers.declared_parameter + + def inner_visit(nodes): + if not nodes: + return set() + self.identifiers = real_identifiers.copy() + for subnode in nodes: + self.visit(subnode) + rv = self.identifiers.declared_locally - old_names + # we have to remember the undeclared variables of this branch + # because we will have to pull them. + real_identifiers.undeclared.update(self.identifiers.undeclared) + self.identifiers = real_identifiers + return rv + + body = inner_visit(node.body) + else_ = inner_visit(node.else_ or ()) + + # the differences between the two branches are also pulled as + # undeclared variables + real_identifiers.undeclared.update(body.symmetric_difference(else_) - + real_identifiers.declared) + + # remember those that are declared. + real_identifiers.declared_locally.update(body | else_) + + def visit_Macro(self, node): + self.identifiers.declared_locally.add(node.name) + + def visit_Import(self, node): + self.generic_visit(node) + self.identifiers.declared_locally.add(node.target) + + def visit_FromImport(self, node): + self.generic_visit(node) + for name in node.names: + if isinstance(name, tuple): + self.identifiers.declared_locally.add(name[1]) + else: + self.identifiers.declared_locally.add(name) + + def visit_Assign(self, node): + """Visit assignments in the correct order.""" + self.visit(node.node) + self.visit(node.target) + + def visit_For(self, node): + """Visiting stops at for blocks. However the block sequence + is visited as part of the outer scope. + """ + self.visit(node.iter) + + def visit_CallBlock(self, node): + self.visit(node.call) + + def visit_FilterBlock(self, node): + self.visit(node.filter) + + def visit_Scope(self, node): + """Stop visiting at scopes.""" + + def visit_Block(self, node): + """Stop visiting at blocks.""" + + +class CompilerExit(Exception): + """Raised if the compiler encountered a situation where it just + doesn't make sense to further process the code. Any block that + raises such an exception is not further processed. + """ + + +class CodeGenerator(NodeVisitor): + + def __init__(self, environment, name, filename, stream=None, + defer_init=False): + if stream is None: + stream = NativeStringIO() + self.environment = environment + self.name = name + self.filename = filename + self.stream = stream + self.created_block_context = False + self.defer_init = defer_init + + # aliases for imports + self.import_aliases = {} + + # a registry for all blocks. Because blocks are moved out + # into the global python scope they are registered here + self.blocks = {} + + # the number of extends statements so far + self.extends_so_far = 0 + + # some templates have a rootlevel extends. In this case we + # can safely assume that we're a child template and do some + # more optimizations. + self.has_known_extends = False + + # the current line number + self.code_lineno = 1 + + # registry of all filters and tests (global, not block local) + self.tests = {} + self.filters = {} + + # the debug information + self.debug_info = [] + self._write_debug_info = None + + # the number of new lines before the next write() + self._new_lines = 0 + + # the line number of the last written statement + self._last_line = 0 + + # true if nothing was written so far. + self._first_write = True + + # used by the `temporary_identifier` method to get new + # unique, temporary identifier + self._last_identifier = 0 + + # the current indentation + self._indentation = 0 + + # -- Various compilation helpers + + def fail(self, msg, lineno): + """Fail with a :exc:`TemplateAssertionError`.""" + raise TemplateAssertionError(msg, lineno, self.name, self.filename) + + def temporary_identifier(self): + """Get a new unique identifier.""" + self._last_identifier += 1 + return 't_%d' % self._last_identifier + + def buffer(self, frame): + """Enable buffering for the frame from that point onwards.""" + frame.buffer = self.temporary_identifier() + self.writeline('%s = []' % frame.buffer) + + def return_buffer_contents(self, frame): + """Return the buffer contents of the frame.""" + if frame.eval_ctx.volatile: + self.writeline('if context.eval_ctx.autoescape:') + self.indent() + self.writeline('return Markup(concat(%s))' % frame.buffer) + self.outdent() + self.writeline('else:') + self.indent() + self.writeline('return concat(%s)' % frame.buffer) + self.outdent() + elif frame.eval_ctx.autoescape: + self.writeline('return Markup(concat(%s))' % frame.buffer) + else: + self.writeline('return concat(%s)' % frame.buffer) + + def indent(self): + """Indent by one.""" + self._indentation += 1 + + def outdent(self, step=1): + """Outdent by step.""" + self._indentation -= step + + def start_write(self, frame, node=None): + """Yield or write into the frame buffer.""" + if frame.buffer is None: + self.writeline('yield ', node) + else: + self.writeline('%s.append(' % frame.buffer, node) + + def end_write(self, frame): + """End the writing process started by `start_write`.""" + if frame.buffer is not None: + self.write(')') + + def simple_write(self, s, frame, node=None): + """Simple shortcut for start_write + write + end_write.""" + self.start_write(frame, node) + self.write(s) + self.end_write(frame) + + def blockvisit(self, nodes, frame): + """Visit a list of nodes as block in a frame. If the current frame + is no buffer a dummy ``if 0: yield None`` is written automatically + unless the force_generator parameter is set to False. + """ + if frame.buffer is None: + self.writeline('if 0: yield None') + else: + self.writeline('pass') + try: + for node in nodes: + self.visit(node, frame) + except CompilerExit: + pass + + def write(self, x): + """Write a string into the output stream.""" + if self._new_lines: + if not self._first_write: + self.stream.write('\n' * self._new_lines) + self.code_lineno += self._new_lines + if self._write_debug_info is not None: + self.debug_info.append((self._write_debug_info, + self.code_lineno)) + self._write_debug_info = None + self._first_write = False + self.stream.write(' ' * self._indentation) + self._new_lines = 0 + self.stream.write(x) + + def writeline(self, x, node=None, extra=0): + """Combination of newline and write.""" + self.newline(node, extra) + self.write(x) + + def newline(self, node=None, extra=0): + """Add one or more newlines before the next write.""" + self._new_lines = max(self._new_lines, 1 + extra) + if node is not None and node.lineno != self._last_line: + self._write_debug_info = node.lineno + self._last_line = node.lineno + + def signature(self, node, frame, extra_kwargs=None): + """Writes a function call to the stream for the current node. + A leading comma is added automatically. The extra keyword + arguments may not include python keywords otherwise a syntax + error could occour. The extra keyword arguments should be given + as python dict. + """ + # if any of the given keyword arguments is a python keyword + # we have to make sure that no invalid call is created. + kwarg_workaround = False + for kwarg in chain((x.key for x in node.kwargs), extra_kwargs or ()): + if is_python_keyword(kwarg): + kwarg_workaround = True + break + + for arg in node.args: + self.write(', ') + self.visit(arg, frame) + + if not kwarg_workaround: + for kwarg in node.kwargs: + self.write(', ') + self.visit(kwarg, frame) + if extra_kwargs is not None: + for key, value in iteritems(extra_kwargs): + self.write(', %s=%s' % (key, value)) + if node.dyn_args: + self.write(', *') + self.visit(node.dyn_args, frame) + + if kwarg_workaround: + if node.dyn_kwargs is not None: + self.write(', **dict({') + else: + self.write(', **{') + for kwarg in node.kwargs: + self.write('%r: ' % kwarg.key) + self.visit(kwarg.value, frame) + self.write(', ') + if extra_kwargs is not None: + for key, value in iteritems(extra_kwargs): + self.write('%r: %s, ' % (key, value)) + if node.dyn_kwargs is not None: + self.write('}, **') + self.visit(node.dyn_kwargs, frame) + self.write(')') + else: + self.write('}') + + elif node.dyn_kwargs is not None: + self.write(', **') + self.visit(node.dyn_kwargs, frame) + + def pull_locals(self, frame): + """Pull all the references identifiers into the local scope.""" + for name in frame.identifiers.undeclared: + self.writeline('l_%s = context.resolve(%r)' % (name, name)) + + def pull_dependencies(self, nodes): + """Pull all the dependencies.""" + visitor = DependencyFinderVisitor() + for node in nodes: + visitor.visit(node) + for dependency in 'filters', 'tests': + mapping = getattr(self, dependency) + for name in getattr(visitor, dependency): + if name not in mapping: + mapping[name] = self.temporary_identifier() + self.writeline('%s = environment.%s[%r]' % + (mapping[name], dependency, name)) + + def unoptimize_scope(self, frame): + """Disable Python optimizations for the frame.""" + # XXX: this is not that nice but it has no real overhead. It + # mainly works because python finds the locals before dead code + # is removed. If that breaks we have to add a dummy function + # that just accepts the arguments and does nothing. + if frame.identifiers.declared: + self.writeline('%sdummy(%s)' % ( + unoptimize_before_dead_code and 'if 0: ' or '', + ', '.join('l_' + name for name in frame.identifiers.declared) + )) + + def push_scope(self, frame, extra_vars=()): + """This function returns all the shadowed variables in a dict + in the form name: alias and will write the required assignments + into the current scope. No indentation takes place. + + This also predefines locally declared variables from the loop + body because under some circumstances it may be the case that + + `extra_vars` is passed to `Frame.find_shadowed`. + """ + aliases = {} + for name in frame.find_shadowed(extra_vars): + aliases[name] = ident = self.temporary_identifier() + self.writeline('%s = l_%s' % (ident, name)) + to_declare = set() + for name in frame.identifiers.declared_locally: + if name not in aliases: + to_declare.add('l_' + name) + if to_declare: + self.writeline(' = '.join(to_declare) + ' = missing') + return aliases + + def pop_scope(self, aliases, frame): + """Restore all aliases and delete unused variables.""" + for name, alias in iteritems(aliases): + self.writeline('l_%s = %s' % (name, alias)) + to_delete = set() + for name in frame.identifiers.declared_locally: + if name not in aliases: + to_delete.add('l_' + name) + if to_delete: + # we cannot use the del statement here because enclosed + # scopes can trigger a SyntaxError: + # a = 42; b = lambda: a; del a + self.writeline(' = '.join(to_delete) + ' = missing') + + def function_scoping(self, node, frame, children=None, + find_special=True): + """In Jinja a few statements require the help of anonymous + functions. Those are currently macros and call blocks and in + the future also recursive loops. As there is currently + technical limitation that doesn't allow reading and writing a + variable in a scope where the initial value is coming from an + outer scope, this function tries to fall back with a common + error message. Additionally the frame passed is modified so + that the argumetns are collected and callers are looked up. + + This will return the modified frame. + """ + # we have to iterate twice over it, make sure that works + if children is None: + children = node.iter_child_nodes() + children = list(children) + func_frame = frame.inner() + func_frame.inspect(children) + + # variables that are undeclared (accessed before declaration) and + # declared locally *and* part of an outside scope raise a template + # assertion error. Reason: we can't generate reasonable code from + # it without aliasing all the variables. + # this could be fixed in Python 3 where we have the nonlocal + # keyword or if we switch to bytecode generation + overridden_closure_vars = ( + func_frame.identifiers.undeclared & + func_frame.identifiers.declared & + (func_frame.identifiers.declared_locally | + func_frame.identifiers.declared_parameter) + ) + if overridden_closure_vars: + self.fail('It\'s not possible to set and access variables ' + 'derived from an outer scope! (affects: %s)' % + ', '.join(sorted(overridden_closure_vars)), node.lineno) + + # remove variables from a closure from the frame's undeclared + # identifiers. + func_frame.identifiers.undeclared -= ( + func_frame.identifiers.undeclared & + func_frame.identifiers.declared + ) + + # no special variables for this scope, abort early + if not find_special: + return func_frame + + func_frame.accesses_kwargs = False + func_frame.accesses_varargs = False + func_frame.accesses_caller = False + func_frame.arguments = args = ['l_' + x.name for x in node.args] + + undeclared = find_undeclared(children, ('caller', 'kwargs', 'varargs')) + + if 'caller' in undeclared: + func_frame.accesses_caller = True + func_frame.identifiers.add_special('caller') + args.append('l_caller') + if 'kwargs' in undeclared: + func_frame.accesses_kwargs = True + func_frame.identifiers.add_special('kwargs') + args.append('l_kwargs') + if 'varargs' in undeclared: + func_frame.accesses_varargs = True + func_frame.identifiers.add_special('varargs') + args.append('l_varargs') + return func_frame + + def macro_body(self, node, frame, children=None): + """Dump the function def of a macro or call block.""" + frame = self.function_scoping(node, frame, children) + # macros are delayed, they never require output checks + frame.require_output_check = False + args = frame.arguments + # XXX: this is an ugly fix for the loop nesting bug + # (tests.test_old_bugs.test_loop_call_bug). This works around + # a identifier nesting problem we have in general. It's just more + # likely to happen in loops which is why we work around it. The + # real solution would be "nonlocal" all the identifiers that are + # leaking into a new python frame and might be used both unassigned + # and assigned. + if 'loop' in frame.identifiers.declared: + args = args + ['l_loop=l_loop'] + self.writeline('def macro(%s):' % ', '.join(args), node) + self.indent() + self.buffer(frame) + self.pull_locals(frame) + self.blockvisit(node.body, frame) + self.return_buffer_contents(frame) + self.outdent() + return frame + + def macro_def(self, node, frame): + """Dump the macro definition for the def created by macro_body.""" + arg_tuple = ', '.join(repr(x.name) for x in node.args) + name = getattr(node, 'name', None) + if len(node.args) == 1: + arg_tuple += ',' + self.write('Macro(environment, macro, %r, (%s), (' % + (name, arg_tuple)) + for arg in node.defaults: + self.visit(arg, frame) + self.write(', ') + self.write('), %r, %r, %r)' % ( + bool(frame.accesses_kwargs), + bool(frame.accesses_varargs), + bool(frame.accesses_caller) + )) + + def position(self, node): + """Return a human readable position for the node.""" + rv = 'line %d' % node.lineno + if self.name is not None: + rv += ' in ' + repr(self.name) + return rv + + # -- Statement Visitors + + def visit_Template(self, node, frame=None): + assert frame is None, 'no root frame allowed' + eval_ctx = EvalContext(self.environment, self.name) + + from jinja2.runtime import __all__ as exported + self.writeline('from __future__ import division') + self.writeline('from jinja2.runtime import ' + ', '.join(exported)) + if not unoptimize_before_dead_code: + self.writeline('dummy = lambda *x: None') + + # if we want a deferred initialization we cannot move the + # environment into a local name + envenv = not self.defer_init and ', environment=environment' or '' + + # do we have an extends tag at all? If not, we can save some + # overhead by just not processing any inheritance code. + have_extends = node.find(nodes.Extends) is not None + + # find all blocks + for block in node.find_all(nodes.Block): + if block.name in self.blocks: + self.fail('block %r defined twice' % block.name, block.lineno) + self.blocks[block.name] = block + + # find all imports and import them + for import_ in node.find_all(nodes.ImportedName): + if import_.importname not in self.import_aliases: + imp = import_.importname + self.import_aliases[imp] = alias = self.temporary_identifier() + if '.' in imp: + module, obj = imp.rsplit('.', 1) + self.writeline('from %s import %s as %s' % + (module, obj, alias)) + else: + self.writeline('import %s as %s' % (imp, alias)) + + # add the load name + self.writeline('name = %r' % self.name) + + # generate the root render function. + self.writeline('def root(context%s):' % envenv, extra=1) + + # process the root + frame = Frame(eval_ctx) + frame.inspect(node.body) + frame.toplevel = frame.rootlevel = True + frame.require_output_check = have_extends and not self.has_known_extends + self.indent() + if have_extends: + self.writeline('parent_template = None') + if 'self' in find_undeclared(node.body, ('self',)): + frame.identifiers.add_special('self') + self.writeline('l_self = TemplateReference(context)') + self.pull_locals(frame) + self.pull_dependencies(node.body) + self.blockvisit(node.body, frame) + self.outdent() + + # make sure that the parent root is called. + if have_extends: + if not self.has_known_extends: + self.indent() + self.writeline('if parent_template is not None:') + self.indent() + self.writeline('for event in parent_template.' + 'root_render_func(context):') + self.indent() + self.writeline('yield event') + self.outdent(2 + (not self.has_known_extends)) + + # at this point we now have the blocks collected and can visit them too. + for name, block in iteritems(self.blocks): + block_frame = Frame(eval_ctx) + block_frame.inspect(block.body) + block_frame.block = name + self.writeline('def block_%s(context%s):' % (name, envenv), + block, 1) + self.indent() + undeclared = find_undeclared(block.body, ('self', 'super')) + if 'self' in undeclared: + block_frame.identifiers.add_special('self') + self.writeline('l_self = TemplateReference(context)') + if 'super' in undeclared: + block_frame.identifiers.add_special('super') + self.writeline('l_super = context.super(%r, ' + 'block_%s)' % (name, name)) + self.pull_locals(block_frame) + self.pull_dependencies(block.body) + self.blockvisit(block.body, block_frame) + self.outdent() + + self.writeline('blocks = {%s}' % ', '.join('%r: block_%s' % (x, x) + for x in self.blocks), + extra=1) + + # add a function that returns the debug info + self.writeline('debug_info = %r' % '&'.join('%s=%s' % x for x + in self.debug_info)) + + def visit_Block(self, node, frame): + """Call a block and register it for the template.""" + level = 1 + if frame.toplevel: + # if we know that we are a child template, there is no need to + # check if we are one + if self.has_known_extends: + return + if self.extends_so_far > 0: + self.writeline('if parent_template is None:') + self.indent() + level += 1 + context = node.scoped and 'context.derived(locals())' or 'context' + self.writeline('for event in context.blocks[%r][0](%s):' % ( + node.name, context), node) + self.indent() + self.simple_write('event', frame) + self.outdent(level) + + def visit_Extends(self, node, frame): + """Calls the extender.""" + if not frame.toplevel: + self.fail('cannot use extend from a non top-level scope', + node.lineno) + + # if the number of extends statements in general is zero so + # far, we don't have to add a check if something extended + # the template before this one. + if self.extends_so_far > 0: + + # if we have a known extends we just add a template runtime + # error into the generated code. We could catch that at compile + # time too, but i welcome it not to confuse users by throwing the + # same error at different times just "because we can". + if not self.has_known_extends: + self.writeline('if parent_template is not None:') + self.indent() + self.writeline('raise TemplateRuntimeError(%r)' % + 'extended multiple times') + + # if we have a known extends already we don't need that code here + # as we know that the template execution will end here. + if self.has_known_extends: + raise CompilerExit() + else: + self.outdent() + + self.writeline('parent_template = environment.get_template(', node) + self.visit(node.template, frame) + self.write(', %r)' % self.name) + self.writeline('for name, parent_block in parent_template.' + 'blocks.%s():' % dict_item_iter) + self.indent() + self.writeline('context.blocks.setdefault(name, []).' + 'append(parent_block)') + self.outdent() + + # if this extends statement was in the root level we can take + # advantage of that information and simplify the generated code + # in the top level from this point onwards + if frame.rootlevel: + self.has_known_extends = True + + # and now we have one more + self.extends_so_far += 1 + + def visit_Include(self, node, frame): + """Handles includes.""" + if node.with_context: + self.unoptimize_scope(frame) + if node.ignore_missing: + self.writeline('try:') + self.indent() + + func_name = 'get_or_select_template' + if isinstance(node.template, nodes.Const): + if isinstance(node.template.value, string_types): + func_name = 'get_template' + elif isinstance(node.template.value, (tuple, list)): + func_name = 'select_template' + elif isinstance(node.template, (nodes.Tuple, nodes.List)): + func_name = 'select_template' + + self.writeline('template = environment.%s(' % func_name, node) + self.visit(node.template, frame) + self.write(', %r)' % self.name) + if node.ignore_missing: + self.outdent() + self.writeline('except TemplateNotFound:') + self.indent() + self.writeline('pass') + self.outdent() + self.writeline('else:') + self.indent() + + if node.with_context: + self.writeline('for event in template.root_render_func(' + 'template.new_context(context.parent, True, ' + 'locals())):') + else: + self.writeline('for event in template.module._body_stream:') + + self.indent() + self.simple_write('event', frame) + self.outdent() + + if node.ignore_missing: + self.outdent() + + def visit_Import(self, node, frame): + """Visit regular imports.""" + if node.with_context: + self.unoptimize_scope(frame) + self.writeline('l_%s = ' % node.target, node) + if frame.toplevel: + self.write('context.vars[%r] = ' % node.target) + self.write('environment.get_template(') + self.visit(node.template, frame) + self.write(', %r).' % self.name) + if node.with_context: + self.write('make_module(context.parent, True, locals())') + else: + self.write('module') + if frame.toplevel and not node.target.startswith('_'): + self.writeline('context.exported_vars.discard(%r)' % node.target) + frame.assigned_names.add(node.target) + + def visit_FromImport(self, node, frame): + """Visit named imports.""" + self.newline(node) + self.write('included_template = environment.get_template(') + self.visit(node.template, frame) + self.write(', %r).' % self.name) + if node.with_context: + self.write('make_module(context.parent, True)') + else: + self.write('module') + + var_names = [] + discarded_names = [] + for name in node.names: + if isinstance(name, tuple): + name, alias = name + else: + alias = name + self.writeline('l_%s = getattr(included_template, ' + '%r, missing)' % (alias, name)) + self.writeline('if l_%s is missing:' % alias) + self.indent() + self.writeline('l_%s = environment.undefined(%r %% ' + 'included_template.__name__, ' + 'name=%r)' % + (alias, 'the template %%r (imported on %s) does ' + 'not export the requested name %s' % ( + self.position(node), + repr(name) + ), name)) + self.outdent() + if frame.toplevel: + var_names.append(alias) + if not alias.startswith('_'): + discarded_names.append(alias) + frame.assigned_names.add(alias) + + if var_names: + if len(var_names) == 1: + name = var_names[0] + self.writeline('context.vars[%r] = l_%s' % (name, name)) + else: + self.writeline('context.vars.update({%s})' % ', '.join( + '%r: l_%s' % (name, name) for name in var_names + )) + if discarded_names: + if len(discarded_names) == 1: + self.writeline('context.exported_vars.discard(%r)' % + discarded_names[0]) + else: + self.writeline('context.exported_vars.difference_' + 'update((%s))' % ', '.join(imap(repr, discarded_names))) + + def visit_For(self, node, frame): + # when calculating the nodes for the inner frame we have to exclude + # the iterator contents from it + children = node.iter_child_nodes(exclude=('iter',)) + if node.recursive: + loop_frame = self.function_scoping(node, frame, children, + find_special=False) + else: + loop_frame = frame.inner() + loop_frame.inspect(children) + + # try to figure out if we have an extended loop. An extended loop + # is necessary if the loop is in recursive mode if the special loop + # variable is accessed in the body. + extended_loop = node.recursive or 'loop' in \ + find_undeclared(node.iter_child_nodes( + only=('body',)), ('loop',)) + + # if we don't have an recursive loop we have to find the shadowed + # variables at that point. Because loops can be nested but the loop + # variable is a special one we have to enforce aliasing for it. + if not node.recursive: + aliases = self.push_scope(loop_frame, ('loop',)) + + # otherwise we set up a buffer and add a function def + else: + self.writeline('def loop(reciter, loop_render_func, depth=0):', node) + self.indent() + self.buffer(loop_frame) + aliases = {} + + # make sure the loop variable is a special one and raise a template + # assertion error if a loop tries to write to loop + if extended_loop: + self.writeline('l_loop = missing') + loop_frame.identifiers.add_special('loop') + for name in node.find_all(nodes.Name): + if name.ctx == 'store' and name.name == 'loop': + self.fail('Can\'t assign to special loop variable ' + 'in for-loop target', name.lineno) + + self.pull_locals(loop_frame) + if node.else_: + iteration_indicator = self.temporary_identifier() + self.writeline('%s = 1' % iteration_indicator) + + # Create a fake parent loop if the else or test section of a + # loop is accessing the special loop variable and no parent loop + # exists. + if 'loop' not in aliases and 'loop' in find_undeclared( + node.iter_child_nodes(only=('else_', 'test')), ('loop',)): + self.writeline("l_loop = environment.undefined(%r, name='loop')" % + ("'loop' is undefined. the filter section of a loop as well " + "as the else block don't have access to the special 'loop'" + " variable of the current loop. Because there is no parent " + "loop it's undefined. Happened in loop on %s" % + self.position(node))) + + self.writeline('for ', node) + self.visit(node.target, loop_frame) + self.write(extended_loop and ', l_loop in LoopContext(' or ' in ') + + # if we have an extened loop and a node test, we filter in the + # "outer frame". + if extended_loop and node.test is not None: + self.write('(') + self.visit(node.target, loop_frame) + self.write(' for ') + self.visit(node.target, loop_frame) + self.write(' in ') + if node.recursive: + self.write('reciter') + else: + self.visit(node.iter, loop_frame) + self.write(' if (') + test_frame = loop_frame.copy() + self.visit(node.test, test_frame) + self.write('))') + + elif node.recursive: + self.write('reciter') + else: + self.visit(node.iter, loop_frame) + + if node.recursive: + self.write(', loop_render_func, depth):') + else: + self.write(extended_loop and '):' or ':') + + # tests in not extended loops become a continue + if not extended_loop and node.test is not None: + self.indent() + self.writeline('if not ') + self.visit(node.test, loop_frame) + self.write(':') + self.indent() + self.writeline('continue') + self.outdent(2) + + self.indent() + self.blockvisit(node.body, loop_frame) + if node.else_: + self.writeline('%s = 0' % iteration_indicator) + self.outdent() + + if node.else_: + self.writeline('if %s:' % iteration_indicator) + self.indent() + self.blockvisit(node.else_, loop_frame) + self.outdent() + + # reset the aliases if there are any. + if not node.recursive: + self.pop_scope(aliases, loop_frame) + + # if the node was recursive we have to return the buffer contents + # and start the iteration code + if node.recursive: + self.return_buffer_contents(loop_frame) + self.outdent() + self.start_write(frame, node) + self.write('loop(') + self.visit(node.iter, frame) + self.write(', loop)') + self.end_write(frame) + + def visit_If(self, node, frame): + if_frame = frame.soft() + self.writeline('if ', node) + self.visit(node.test, if_frame) + self.write(':') + self.indent() + self.blockvisit(node.body, if_frame) + self.outdent() + if node.else_: + self.writeline('else:') + self.indent() + self.blockvisit(node.else_, if_frame) + self.outdent() + + def visit_Macro(self, node, frame): + macro_frame = self.macro_body(node, frame) + self.newline() + if frame.toplevel: + if not node.name.startswith('_'): + self.write('context.exported_vars.add(%r)' % node.name) + self.writeline('context.vars[%r] = ' % node.name) + self.write('l_%s = ' % node.name) + self.macro_def(node, macro_frame) + frame.assigned_names.add(node.name) + + def visit_CallBlock(self, node, frame): + children = node.iter_child_nodes(exclude=('call',)) + call_frame = self.macro_body(node, frame, children) + self.writeline('caller = ') + self.macro_def(node, call_frame) + self.start_write(frame, node) + self.visit_Call(node.call, call_frame, forward_caller=True) + self.end_write(frame) + + def visit_FilterBlock(self, node, frame): + filter_frame = frame.inner() + filter_frame.inspect(node.iter_child_nodes()) + aliases = self.push_scope(filter_frame) + self.pull_locals(filter_frame) + self.buffer(filter_frame) + self.blockvisit(node.body, filter_frame) + self.start_write(frame, node) + self.visit_Filter(node.filter, filter_frame) + self.end_write(frame) + self.pop_scope(aliases, filter_frame) + + def visit_ExprStmt(self, node, frame): + self.newline(node) + self.visit(node.node, frame) + + def visit_Output(self, node, frame): + # if we have a known extends statement, we don't output anything + # if we are in a require_output_check section + if self.has_known_extends and frame.require_output_check: + return + + if self.environment.finalize: + finalize = lambda x: text_type(self.environment.finalize(x)) + else: + finalize = text_type + + # if we are inside a frame that requires output checking, we do so + outdent_later = False + if frame.require_output_check: + self.writeline('if parent_template is None:') + self.indent() + outdent_later = True + + # try to evaluate as many chunks as possible into a static + # string at compile time. + body = [] + for child in node.nodes: + try: + const = child.as_const(frame.eval_ctx) + except nodes.Impossible: + body.append(child) + continue + # the frame can't be volatile here, becaus otherwise the + # as_const() function would raise an Impossible exception + # at that point. + try: + if frame.eval_ctx.autoescape: + if hasattr(const, '__html__'): + const = const.__html__() + else: + const = escape(const) + const = finalize(const) + except Exception: + # if something goes wrong here we evaluate the node + # at runtime for easier debugging + body.append(child) + continue + if body and isinstance(body[-1], list): + body[-1].append(const) + else: + body.append([const]) + + # if we have less than 3 nodes or a buffer we yield or extend/append + if len(body) < 3 or frame.buffer is not None: + if frame.buffer is not None: + # for one item we append, for more we extend + if len(body) == 1: + self.writeline('%s.append(' % frame.buffer) + else: + self.writeline('%s.extend((' % frame.buffer) + self.indent() + for item in body: + if isinstance(item, list): + val = repr(concat(item)) + if frame.buffer is None: + self.writeline('yield ' + val) + else: + self.writeline(val + ', ') + else: + if frame.buffer is None: + self.writeline('yield ', item) + else: + self.newline(item) + close = 1 + if frame.eval_ctx.volatile: + self.write('(context.eval_ctx.autoescape and' + ' escape or to_string)(') + elif frame.eval_ctx.autoescape: + self.write('escape(') + else: + self.write('to_string(') + if self.environment.finalize is not None: + self.write('environment.finalize(') + close += 1 + self.visit(item, frame) + self.write(')' * close) + if frame.buffer is not None: + self.write(', ') + if frame.buffer is not None: + # close the open parentheses + self.outdent() + self.writeline(len(body) == 1 and ')' or '))') + + # otherwise we create a format string as this is faster in that case + else: + format = [] + arguments = [] + for item in body: + if isinstance(item, list): + format.append(concat(item).replace('%', '%%')) + else: + format.append('%s') + arguments.append(item) + self.writeline('yield ') + self.write(repr(concat(format)) + ' % (') + idx = -1 + self.indent() + for argument in arguments: + self.newline(argument) + close = 0 + if frame.eval_ctx.volatile: + self.write('(context.eval_ctx.autoescape and' + ' escape or to_string)(') + close += 1 + elif frame.eval_ctx.autoescape: + self.write('escape(') + close += 1 + if self.environment.finalize is not None: + self.write('environment.finalize(') + close += 1 + self.visit(argument, frame) + self.write(')' * close + ', ') + self.outdent() + self.writeline(')') + + if outdent_later: + self.outdent() + + def visit_Assign(self, node, frame): + self.newline(node) + # toplevel assignments however go into the local namespace and + # the current template's context. We create a copy of the frame + # here and add a set so that the Name visitor can add the assigned + # names here. + if frame.toplevel: + assignment_frame = frame.copy() + assignment_frame.toplevel_assignments = set() + else: + assignment_frame = frame + self.visit(node.target, assignment_frame) + self.write(' = ') + self.visit(node.node, frame) + + # make sure toplevel assignments are added to the context. + if frame.toplevel: + public_names = [x for x in assignment_frame.toplevel_assignments + if not x.startswith('_')] + if len(assignment_frame.toplevel_assignments) == 1: + name = next(iter(assignment_frame.toplevel_assignments)) + self.writeline('context.vars[%r] = l_%s' % (name, name)) + else: + self.writeline('context.vars.update({') + for idx, name in enumerate(assignment_frame.toplevel_assignments): + if idx: + self.write(', ') + self.write('%r: l_%s' % (name, name)) + self.write('})') + if public_names: + if len(public_names) == 1: + self.writeline('context.exported_vars.add(%r)' % + public_names[0]) + else: + self.writeline('context.exported_vars.update((%s))' % + ', '.join(imap(repr, public_names))) + + # -- Expression Visitors + + def visit_Name(self, node, frame): + if node.ctx == 'store' and frame.toplevel: + frame.toplevel_assignments.add(node.name) + self.write('l_' + node.name) + frame.assigned_names.add(node.name) + + def visit_Const(self, node, frame): + val = node.value + if isinstance(val, float): + self.write(str(val)) + else: + self.write(repr(val)) + + def visit_TemplateData(self, node, frame): + try: + self.write(repr(node.as_const(frame.eval_ctx))) + except nodes.Impossible: + self.write('(context.eval_ctx.autoescape and Markup or identity)(%r)' + % node.data) + + def visit_Tuple(self, node, frame): + self.write('(') + idx = -1 + for idx, item in enumerate(node.items): + if idx: + self.write(', ') + self.visit(item, frame) + self.write(idx == 0 and ',)' or ')') + + def visit_List(self, node, frame): + self.write('[') + for idx, item in enumerate(node.items): + if idx: + self.write(', ') + self.visit(item, frame) + self.write(']') + + def visit_Dict(self, node, frame): + self.write('{') + for idx, item in enumerate(node.items): + if idx: + self.write(', ') + self.visit(item.key, frame) + self.write(': ') + self.visit(item.value, frame) + self.write('}') + + def binop(operator, interceptable=True): + def visitor(self, node, frame): + if self.environment.sandboxed and \ + operator in self.environment.intercepted_binops: + self.write('environment.call_binop(context, %r, ' % operator) + self.visit(node.left, frame) + self.write(', ') + self.visit(node.right, frame) + else: + self.write('(') + self.visit(node.left, frame) + self.write(' %s ' % operator) + self.visit(node.right, frame) + self.write(')') + return visitor + + def uaop(operator, interceptable=True): + def visitor(self, node, frame): + if self.environment.sandboxed and \ + operator in self.environment.intercepted_unops: + self.write('environment.call_unop(context, %r, ' % operator) + self.visit(node.node, frame) + else: + self.write('(' + operator) + self.visit(node.node, frame) + self.write(')') + return visitor + + visit_Add = binop('+') + visit_Sub = binop('-') + visit_Mul = binop('*') + visit_Div = binop('/') + visit_FloorDiv = binop('//') + visit_Pow = binop('**') + visit_Mod = binop('%') + visit_And = binop('and', interceptable=False) + visit_Or = binop('or', interceptable=False) + visit_Pos = uaop('+') + visit_Neg = uaop('-') + visit_Not = uaop('not ', interceptable=False) + del binop, uaop + + def visit_Concat(self, node, frame): + if frame.eval_ctx.volatile: + func_name = '(context.eval_ctx.volatile and' \ + ' markup_join or unicode_join)' + elif frame.eval_ctx.autoescape: + func_name = 'markup_join' + else: + func_name = 'unicode_join' + self.write('%s((' % func_name) + for arg in node.nodes: + self.visit(arg, frame) + self.write(', ') + self.write('))') + + def visit_Compare(self, node, frame): + self.visit(node.expr, frame) + for op in node.ops: + self.visit(op, frame) + + def visit_Operand(self, node, frame): + self.write(' %s ' % operators[node.op]) + self.visit(node.expr, frame) + + def visit_Getattr(self, node, frame): + self.write('environment.getattr(') + self.visit(node.node, frame) + self.write(', %r)' % node.attr) + + def visit_Getitem(self, node, frame): + # slices bypass the environment getitem method. + if isinstance(node.arg, nodes.Slice): + self.visit(node.node, frame) + self.write('[') + self.visit(node.arg, frame) + self.write(']') + else: + self.write('environment.getitem(') + self.visit(node.node, frame) + self.write(', ') + self.visit(node.arg, frame) + self.write(')') + + def visit_Slice(self, node, frame): + if node.start is not None: + self.visit(node.start, frame) + self.write(':') + if node.stop is not None: + self.visit(node.stop, frame) + if node.step is not None: + self.write(':') + self.visit(node.step, frame) + + def visit_Filter(self, node, frame): + self.write(self.filters[node.name] + '(') + func = self.environment.filters.get(node.name) + if func is None: + self.fail('no filter named %r' % node.name, node.lineno) + if getattr(func, 'contextfilter', False): + self.write('context, ') + elif getattr(func, 'evalcontextfilter', False): + self.write('context.eval_ctx, ') + elif getattr(func, 'environmentfilter', False): + self.write('environment, ') + + # if the filter node is None we are inside a filter block + # and want to write to the current buffer + if node.node is not None: + self.visit(node.node, frame) + elif frame.eval_ctx.volatile: + self.write('(context.eval_ctx.autoescape and' + ' Markup(concat(%s)) or concat(%s))' % + (frame.buffer, frame.buffer)) + elif frame.eval_ctx.autoescape: + self.write('Markup(concat(%s))' % frame.buffer) + else: + self.write('concat(%s)' % frame.buffer) + self.signature(node, frame) + self.write(')') + + def visit_Test(self, node, frame): + self.write(self.tests[node.name] + '(') + if node.name not in self.environment.tests: + self.fail('no test named %r' % node.name, node.lineno) + self.visit(node.node, frame) + self.signature(node, frame) + self.write(')') + + def visit_CondExpr(self, node, frame): + def write_expr2(): + if node.expr2 is not None: + return self.visit(node.expr2, frame) + self.write('environment.undefined(%r)' % ('the inline if-' + 'expression on %s evaluated to false and ' + 'no else section was defined.' % self.position(node))) + + self.write('(') + self.visit(node.expr1, frame) + self.write(' if ') + self.visit(node.test, frame) + self.write(' else ') + write_expr2() + self.write(')') + + def visit_Call(self, node, frame, forward_caller=False): + if self.environment.sandboxed: + self.write('environment.call(context, ') + else: + self.write('context.call(') + self.visit(node.node, frame) + extra_kwargs = forward_caller and {'caller': 'caller'} or None + self.signature(node, frame, extra_kwargs) + self.write(')') + + def visit_Keyword(self, node, frame): + self.write(node.key + '=') + self.visit(node.value, frame) + + # -- Unused nodes for extensions + + def visit_MarkSafe(self, node, frame): + self.write('Markup(') + self.visit(node.expr, frame) + self.write(')') + + def visit_MarkSafeIfAutoescape(self, node, frame): + self.write('(context.eval_ctx.autoescape and Markup or identity)(') + self.visit(node.expr, frame) + self.write(')') + + def visit_EnvironmentAttribute(self, node, frame): + self.write('environment.' + node.name) + + def visit_ExtensionAttribute(self, node, frame): + self.write('environment.extensions[%r].%s' % (node.identifier, node.name)) + + def visit_ImportedName(self, node, frame): + self.write(self.import_aliases[node.importname]) + + def visit_InternalName(self, node, frame): + self.write(node.name) + + def visit_ContextReference(self, node, frame): + self.write('context') + + def visit_Continue(self, node, frame): + self.writeline('continue', node) + + def visit_Break(self, node, frame): + self.writeline('break', node) + + def visit_Scope(self, node, frame): + scope_frame = frame.inner() + scope_frame.inspect(node.iter_child_nodes()) + aliases = self.push_scope(scope_frame) + self.pull_locals(scope_frame) + self.blockvisit(node.body, scope_frame) + self.pop_scope(aliases, scope_frame) + + def visit_EvalContextModifier(self, node, frame): + for keyword in node.options: + self.writeline('context.eval_ctx.%s = ' % keyword.key) + self.visit(keyword.value, frame) + try: + val = keyword.value.as_const(frame.eval_ctx) + except nodes.Impossible: + frame.eval_ctx.volatile = True + else: + setattr(frame.eval_ctx, keyword.key, val) + + def visit_ScopedEvalContextModifier(self, node, frame): + old_ctx_name = self.temporary_identifier() + safed_ctx = frame.eval_ctx.save() + self.writeline('%s = context.eval_ctx.save()' % old_ctx_name) + self.visit_EvalContextModifier(node, frame) + for child in node.body: + self.visit(child, frame) + frame.eval_ctx.revert(safed_ctx) + self.writeline('context.eval_ctx.revert(%s)' % old_ctx_name) diff --git a/src/buildlib/jinja2-py3.egg/jinja2/constants.py b/src/buildlib/jinja2-py3.egg/jinja2/constants.py new file mode 100644 index 0000000000..cab203cc77 --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/constants.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +""" + jinja.constants + ~~~~~~~~~~~~~~~ + + Various constants. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" + + +#: list of lorem ipsum words used by the lipsum() helper function +LOREM_IPSUM_WORDS = u'''\ +a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at +auctor augue bibendum blandit class commodo condimentum congue consectetuer +consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus +diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend +elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames +faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac +hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum +justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem +luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie +mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non +nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque +penatibus per pharetra phasellus placerat platea porta porttitor posuere +potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus +ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit +sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor +tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices +ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus +viverra volutpat vulputate''' diff --git a/src/buildlib/jinja2-py3.egg/jinja2/debug.py b/src/buildlib/jinja2-py3.egg/jinja2/debug.py new file mode 100644 index 0000000000..815cc18a4f --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/debug.py @@ -0,0 +1,337 @@ +# -*- coding: utf-8 -*- +""" + jinja2.debug + ~~~~~~~~~~~~ + + Implements the debug interface for Jinja. This module does some pretty + ugly stuff with the Python traceback system in order to achieve tracebacks + with correct line numbers, locals and contents. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +import sys +import traceback +from types import TracebackType +from jinja2.utils import missing, internal_code +from jinja2.exceptions import TemplateSyntaxError +from jinja2._compat import iteritems, reraise, code_type + +# on pypy we can take advantage of transparent proxies +try: + from __pypy__ import tproxy +except ImportError: + tproxy = None + + +# how does the raise helper look like? +try: + exec("raise TypeError, 'foo'") +except SyntaxError: + raise_helper = 'raise __jinja_exception__[1]' +except TypeError: + raise_helper = 'raise __jinja_exception__[0], __jinja_exception__[1]' + + +class TracebackFrameProxy(object): + """Proxies a traceback frame.""" + + def __init__(self, tb): + self.tb = tb + self._tb_next = None + + @property + def tb_next(self): + return self._tb_next + + def set_next(self, next): + if tb_set_next is not None: + try: + tb_set_next(self.tb, next and next.tb or None) + except Exception: + # this function can fail due to all the hackery it does + # on various python implementations. We just catch errors + # down and ignore them if necessary. + pass + self._tb_next = next + + @property + def is_jinja_frame(self): + return '__jinja_template__' in self.tb.tb_frame.f_globals + + def __getattr__(self, name): + return getattr(self.tb, name) + + +def make_frame_proxy(frame): + proxy = TracebackFrameProxy(frame) + if tproxy is None: + return proxy + def operation_handler(operation, *args, **kwargs): + if operation in ('__getattribute__', '__getattr__'): + return getattr(proxy, args[0]) + elif operation == '__setattr__': + proxy.__setattr__(*args, **kwargs) + else: + return getattr(proxy, operation)(*args, **kwargs) + return tproxy(TracebackType, operation_handler) + + +class ProcessedTraceback(object): + """Holds a Jinja preprocessed traceback for printing or reraising.""" + + def __init__(self, exc_type, exc_value, frames): + assert frames, 'no frames for this traceback?' + self.exc_type = exc_type + self.exc_value = exc_value + self.frames = frames + + # newly concatenate the frames (which are proxies) + prev_tb = None + for tb in self.frames: + if prev_tb is not None: + prev_tb.set_next(tb) + prev_tb = tb + prev_tb.set_next(None) + + def render_as_text(self, limit=None): + """Return a string with the traceback.""" + lines = traceback.format_exception(self.exc_type, self.exc_value, + self.frames[0], limit=limit) + return ''.join(lines).rstrip() + + def render_as_html(self, full=False): + """Return a unicode string with the traceback as rendered HTML.""" + from jinja2.debugrenderer import render_traceback + return u'%s\n\n' % ( + render_traceback(self, full=full), + self.render_as_text().decode('utf-8', 'replace') + ) + + @property + def is_template_syntax_error(self): + """`True` if this is a template syntax error.""" + return isinstance(self.exc_value, TemplateSyntaxError) + + @property + def exc_info(self): + """Exception info tuple with a proxy around the frame objects.""" + return self.exc_type, self.exc_value, self.frames[0] + + @property + def standard_exc_info(self): + """Standard python exc_info for re-raising""" + tb = self.frames[0] + # the frame will be an actual traceback (or transparent proxy) if + # we are on pypy or a python implementation with support for tproxy + if type(tb) is not TracebackType: + tb = tb.tb + return self.exc_type, self.exc_value, tb + + +def make_traceback(exc_info, source_hint=None): + """Creates a processed traceback object from the exc_info.""" + exc_type, exc_value, tb = exc_info + if isinstance(exc_value, TemplateSyntaxError): + exc_info = translate_syntax_error(exc_value, source_hint) + initial_skip = 0 + else: + initial_skip = 1 + return translate_exception(exc_info, initial_skip) + + +def translate_syntax_error(error, source=None): + """Rewrites a syntax error to please traceback systems.""" + error.source = source + error.translated = True + exc_info = (error.__class__, error, None) + filename = error.filename + if filename is None: + filename = '' + return fake_exc_info(exc_info, filename, error.lineno) + + +def translate_exception(exc_info, initial_skip=0): + """If passed an exc_info it will automatically rewrite the exceptions + all the way down to the correct line numbers and frames. + """ + tb = exc_info[2] + frames = [] + + # skip some internal frames if wanted + for x in range(initial_skip): + if tb is not None: + tb = tb.tb_next + initial_tb = tb + + while tb is not None: + # skip frames decorated with @internalcode. These are internal + # calls we can't avoid and that are useless in template debugging + # output. + if tb.tb_frame.f_code in internal_code: + tb = tb.tb_next + continue + + # save a reference to the next frame if we override the current + # one with a faked one. + next = tb.tb_next + + # fake template exceptions + template = tb.tb_frame.f_globals.get('__jinja_template__') + if template is not None: + lineno = template.get_corresponding_lineno(tb.tb_lineno) + tb = fake_exc_info(exc_info[:2] + (tb,), template.filename, + lineno)[2] + + frames.append(make_frame_proxy(tb)) + tb = next + + # if we don't have any exceptions in the frames left, we have to + # reraise it unchanged. + # XXX: can we backup here? when could this happen? + if not frames: + reraise(exc_info[0], exc_info[1], exc_info[2]) + + return ProcessedTraceback(exc_info[0], exc_info[1], frames) + + +def fake_exc_info(exc_info, filename, lineno): + """Helper for `translate_exception`.""" + exc_type, exc_value, tb = exc_info + + # figure the real context out + if tb is not None: + real_locals = tb.tb_frame.f_locals.copy() + ctx = real_locals.get('context') + if ctx: + locals = ctx.get_all() + else: + locals = {} + for name, value in iteritems(real_locals): + if name.startswith('l_') and value is not missing: + locals[name[2:]] = value + + # if there is a local called __jinja_exception__, we get + # rid of it to not break the debug functionality. + locals.pop('__jinja_exception__', None) + else: + locals = {} + + # assamble fake globals we need + globals = { + '__name__': filename, + '__file__': filename, + '__jinja_exception__': exc_info[:2], + + # we don't want to keep the reference to the template around + # to not cause circular dependencies, but we mark it as Jinja + # frame for the ProcessedTraceback + '__jinja_template__': None + } + + # and fake the exception + code = compile('\n' * (lineno - 1) + raise_helper, filename, 'exec') + + # if it's possible, change the name of the code. This won't work + # on some python environments such as google appengine + try: + if tb is None: + location = 'template' + else: + function = tb.tb_frame.f_code.co_name + if function == 'root': + location = 'top-level template code' + elif function.startswith('block_'): + location = 'block "%s"' % function[6:] + else: + location = 'template' + code = code_type(0, code.co_nlocals, code.co_stacksize, + code.co_flags, code.co_code, code.co_consts, + code.co_names, code.co_varnames, filename, + location, code.co_firstlineno, + code.co_lnotab, (), ()) + except: + pass + + # execute the code and catch the new traceback + try: + exec(code, globals, locals) + except: + exc_info = sys.exc_info() + new_tb = exc_info[2].tb_next + + # return without this frame + return exc_info[:2] + (new_tb,) + + +def _init_ugly_crap(): + """This function implements a few ugly things so that we can patch the + traceback objects. The function returned allows resetting `tb_next` on + any python traceback object. Do not attempt to use this on non cpython + interpreters + """ + import ctypes + from types import TracebackType + + # figure out side of _Py_ssize_t + if hasattr(ctypes.pythonapi, 'Py_InitModule4_64'): + _Py_ssize_t = ctypes.c_int64 + else: + _Py_ssize_t = ctypes.c_int + + # regular python + class _PyObject(ctypes.Structure): + pass + _PyObject._fields_ = [ + ('ob_refcnt', _Py_ssize_t), + ('ob_type', ctypes.POINTER(_PyObject)) + ] + + # python with trace + if hasattr(sys, 'getobjects'): + class _PyObject(ctypes.Structure): + pass + _PyObject._fields_ = [ + ('_ob_next', ctypes.POINTER(_PyObject)), + ('_ob_prev', ctypes.POINTER(_PyObject)), + ('ob_refcnt', _Py_ssize_t), + ('ob_type', ctypes.POINTER(_PyObject)) + ] + + class _Traceback(_PyObject): + pass + _Traceback._fields_ = [ + ('tb_next', ctypes.POINTER(_Traceback)), + ('tb_frame', ctypes.POINTER(_PyObject)), + ('tb_lasti', ctypes.c_int), + ('tb_lineno', ctypes.c_int) + ] + + def tb_set_next(tb, next): + """Set the tb_next attribute of a traceback object.""" + if not (isinstance(tb, TracebackType) and + (next is None or isinstance(next, TracebackType))): + raise TypeError('tb_set_next arguments must be traceback objects') + obj = _Traceback.from_address(id(tb)) + if tb.tb_next is not None: + old = _Traceback.from_address(id(tb.tb_next)) + old.ob_refcnt -= 1 + if next is None: + obj.tb_next = ctypes.POINTER(_Traceback)() + else: + next = _Traceback.from_address(id(next)) + next.ob_refcnt += 1 + obj.tb_next = ctypes.pointer(next) + + return tb_set_next + + +# try to get a tb_set_next implementation if we don't have transparent +# proxies. +tb_set_next = None +if tproxy is None: + try: + tb_set_next = _init_ugly_crap() + except: + pass + del _init_ugly_crap diff --git a/src/buildlib/jinja2-py3.egg/jinja2/defaults.py b/src/buildlib/jinja2-py3.egg/jinja2/defaults.py new file mode 100644 index 0000000000..a27cb80cbf --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/defaults.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +""" + jinja2.defaults + ~~~~~~~~~~~~~~~ + + Jinja default filters and tags. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +from jinja2._compat import range_type +from jinja2.utils import generate_lorem_ipsum, Cycler, Joiner + + +# defaults for the parser / lexer +BLOCK_START_STRING = '{%' +BLOCK_END_STRING = '%}' +VARIABLE_START_STRING = '{{' +VARIABLE_END_STRING = '}}' +COMMENT_START_STRING = '{#' +COMMENT_END_STRING = '#}' +LINE_STATEMENT_PREFIX = None +LINE_COMMENT_PREFIX = None +TRIM_BLOCKS = False +LSTRIP_BLOCKS = False +NEWLINE_SEQUENCE = '\n' +KEEP_TRAILING_NEWLINE = False + + +# default filters, tests and namespace +from jinja2.filters import FILTERS as DEFAULT_FILTERS +from jinja2.tests import TESTS as DEFAULT_TESTS +DEFAULT_NAMESPACE = { + 'range': range_type, + 'dict': lambda **kw: kw, + 'lipsum': generate_lorem_ipsum, + 'cycler': Cycler, + 'joiner': Joiner +} + + +# export all constants +__all__ = tuple(x for x in locals().keys() if x.isupper()) diff --git a/src/buildlib/jinja2-py3.egg/jinja2/environment.py b/src/buildlib/jinja2-py3.egg/jinja2/environment.py new file mode 100644 index 0000000000..45fabada2e --- /dev/null +++ b/src/buildlib/jinja2-py3.egg/jinja2/environment.py @@ -0,0 +1,1191 @@ +# -*- coding: utf-8 -*- +""" + jinja2.environment + ~~~~~~~~~~~~~~~~~~ + + Provides a class that holds runtime and parsing time options. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +import os +import sys +from jinja2 import nodes +from jinja2.defaults import BLOCK_START_STRING, \ + BLOCK_END_STRING, VARIABLE_START_STRING, VARIABLE_END_STRING, \ + COMMENT_START_STRING, COMMENT_END_STRING, LINE_STATEMENT_PREFIX, \ + LINE_COMMENT_PREFIX, TRIM_BLOCKS, NEWLINE_SEQUENCE, \ + DEFAULT_FILTERS, DEFAULT_TESTS, DEFAULT_NAMESPACE, \ + KEEP_TRAILING_NEWLINE, LSTRIP_BLOCKS +from jinja2.lexer import get_lexer, TokenStream +from jinja2.parser import Parser +from jinja2.nodes import EvalContext +from jinja2.optimizer import optimize +from jinja2.compiler import generate +from jinja2.runtime import Undefined, new_context +from jinja2.exceptions import TemplateSyntaxError, TemplateNotFound, \ + TemplatesNotFound, TemplateRuntimeError +from jinja2.utils import import_string, LRUCache, Markup, missing, \ + concat, consume, internalcode +from jinja2._compat import imap, ifilter, string_types, iteritems, \ + text_type, reraise, implements_iterator, implements_to_string, \ + get_next, encode_filename, PY2, PYPY +from functools import reduce + + +# for direct template usage we have up to ten living environments +_spontaneous_environments = LRUCache(10) + +# the function to create jinja traceback objects. This is dynamically +# imported on the first exception in the exception handler. +_make_traceback = None + + +def get_spontaneous_environment(*args): + """Return a new spontaneous environment. A spontaneous environment is an + unnamed and unaccessible (in theory) environment that is used for + templates generated from a string and not from the file system. + """ + try: + env = _spontaneous_environments.get(args) + except TypeError: + return Environment(*args) + if env is not None: + return env + _spontaneous_environments[args] = env = Environment(*args) + env.shared = True + return env + + +def create_cache(size): + """Return the cache class for the given size.""" + if size == 0: + return None + if size < 0: + return {} + return LRUCache(size) + + +def copy_cache(cache): + """Create an empty copy of the given cache.""" + if cache is None: + return None + elif type(cache) is dict: + return {} + return LRUCache(cache.capacity) + + +def load_extensions(environment, extensions): + """Load the extensions from the list and bind it to the environment. + Returns a dict of instantiated environments. + """ + result = {} + for extension in extensions: + if isinstance(extension, string_types): + extension = import_string(extension) + result[extension.identifier] = extension(environment) + return result + + +def _environment_sanity_check(environment): + """Perform a sanity check on the environment.""" + assert issubclass(environment.undefined, Undefined), 'undefined must ' \ + 'be a subclass of undefined because filters depend on it.' + assert environment.block_start_string != \ + environment.variable_start_string != \ + environment.comment_start_string, 'block, variable and comment ' \ + 'start strings must be different' + assert environment.newline_sequence in ('\r', '\r\n', '\n'), \ + 'newline_sequence set to unknown line ending string.' + return environment + + +class Environment(object): + r"""The core component of Jinja is the `Environment`. It contains + important shared variables like configuration, filters, tests, + globals and others. Instances of this class may be modified if + they are not shared and if no template was loaded so far. + Modifications on environments after the first template was loaded + will lead to surprising effects and undefined behavior. + + Here the possible initialization parameters: + + `block_start_string` + The string marking the begin of a block. Defaults to ``'{%'``. + + `block_end_string` + The string marking the end of a block. Defaults to ``'%}'``. + + `variable_start_string` + The string marking the begin of a print statement. + Defaults to ``'{{'``. + + `variable_end_string` + The string marking the end of a print statement. Defaults to + ``'}}'``. + + `comment_start_string` + The string marking the begin of a comment. Defaults to ``'{#'``. + + `comment_end_string` + The string marking the end of a comment. Defaults to ``'#}'``. + + `line_statement_prefix` + If given and a string, this will be used as prefix for line based + statements. See also :ref:`line-statements`. + + `line_comment_prefix` + If given and a string, this will be used as prefix for line based + based comments. See also :ref:`line-statements`. + + .. versionadded:: 2.2 + + `trim_blocks` + If this is set to ``True`` the first newline after a block is + removed (block, not variable tag!). Defaults to `False`. + + `lstrip_blocks` + If this is set to ``True`` leading spaces and tabs are stripped + from the start of a line to a block. Defaults to `False`. + + `newline_sequence` + The sequence that starts a newline. Must be one of ``'\r'``, + ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a + useful default for Linux and OS X systems as well as web + applications. + + `keep_trailing_newline` + Preserve the trailing newline when rendering templates. + The default is ``False``, which causes a single newline, + if present, to be stripped from the end of the template. + + .. versionadded:: 2.7 + + `extensions` + List of Jinja extensions to use. This can either be import paths + as strings or extension classes. For more information have a + look at :ref:`the extensions documentation `. + + `optimized` + should the optimizer be enabled? Default is `True`. + + `undefined` + :class:`Undefined` or a subclass of it that is used to represent + undefined values in the template. + + `finalize` + A callable that can be used to process the result of a variable + expression before it is output. For example one can convert + `None` implicitly into an empty string here. + + `autoescape` + If set to true the XML/HTML autoescaping feature is enabled by + default. For more details about auto escaping see + :class:`~jinja2.utils.Markup`. As of Jinja 2.4 this can also + be a callable that is passed the template name and has to + return `True` or `False` depending on autoescape should be + enabled by default. + + .. versionchanged:: 2.4 + `autoescape` can now be a function + + `loader` + The template loader for this environment. + + `cache_size` + The size of the cache. Per default this is ``50`` which means + that if more than 50 templates are loaded the loader will clean + out the least recently used template. If the cache size is set to + ``0`` templates are recompiled all the time, if the cache size is + ``-1`` the cache will not be cleaned. + + `auto_reload` + Some loaders load templates from locations where the template + sources may change (ie: file system or database). If + `auto_reload` is set to `True` (default) every time a template is + requested the loader checks if the source changed and if yes, it + will reload the template. For higher performance it's possible to + disable that. + + `bytecode_cache` + If set to a bytecode cache object, this object will provide a + cache for the internal Jinja bytecode so that templates don't + have to be parsed if they were not changed. + + See :ref:`bytecode-cache` for more information. + """ + + #: if this environment is sandboxed. Modifying this variable won't make + #: the environment sandboxed though. For a real sandboxed environment + #: have a look at jinja2.sandbox. This flag alone controls the code + #: generation by the compiler. + sandboxed = False + + #: True if the environment is just an overlay + overlayed = False + + #: the environment this environment is linked to if it is an overlay + linked_to = None + + #: shared environments have this set to `True`. A shared environment + #: must not be modified + shared = False + + #: these are currently EXPERIMENTAL undocumented features. + exception_handler = None + exception_formatter = None + + def __init__(self, + block_start_string=BLOCK_START_STRING, + block_end_string=BLOCK_END_STRING, + variable_start_string=VARIABLE_START_STRING, + variable_end_string=VARIABLE_END_STRING, + comment_start_string=COMMENT_START_STRING, + comment_end_string=COMMENT_END_STRING, + line_statement_prefix=LINE_STATEMENT_PREFIX, + line_comment_prefix=LINE_COMMENT_PREFIX, + trim_blocks=TRIM_BLOCKS, + lstrip_blocks=LSTRIP_BLOCKS, + newline_sequence=NEWLINE_SEQUENCE, + keep_trailing_newline=KEEP_TRAILING_NEWLINE, + extensions=(), + optimized=True, + undefined=Undefined, + finalize=None, + autoescape=False, + loader=None, + cache_size=50, + auto_reload=True, + bytecode_cache=None): + # !!Important notice!! + # The constructor accepts quite a few arguments that should be + # passed by keyword rather than position. However it's important to + # not change the order of arguments because it's used at least + # internally in those cases: + # - spontaneous environments (i18n extension and Template) + # - unittests + # If parameter changes are required only add parameters at the end + # and don't change the arguments (or the defaults!) of the arguments + # existing already. + + # lexer / parser information + self.block_start_string = block_start_string + self.block_end_string = block_end_string + self.variable_start_string = variable_start_string + self.variable_end_string = variable_end_string + self.comment_start_string = comment_start_string + self.comment_end_string = comment_end_string + self.line_statement_prefix = line_statement_prefix + self.line_comment_prefix = line_comment_prefix + self.trim_blocks = trim_blocks + self.lstrip_blocks = lstrip_blocks + self.newline_sequence = newline_sequence + self.keep_trailing_newline = keep_trailing_newline + + # runtime information + self.undefined = undefined + self.optimized = optimized + self.finalize = finalize + self.autoescape = autoescape + + # defaults + self.filters = DEFAULT_FILTERS.copy() + self.tests = DEFAULT_TESTS.copy() + self.globals = DEFAULT_NAMESPACE.copy() + + # set the loader provided + self.loader = loader + self.cache = create_cache(cache_size) + self.bytecode_cache = bytecode_cache + self.auto_reload = auto_reload + + # load extensions + self.extensions = load_extensions(self, extensions) + + _environment_sanity_check(self) + + def add_extension(self, extension): + """Adds an extension after the environment was created. + + .. versionadded:: 2.5 + """ + self.extensions.update(load_extensions(self, [extension])) + + def extend(self, **attributes): + """Add the items to the instance of the environment if they do not exist + yet. This is used by :ref:`extensions ` to register + callbacks and configuration values without breaking inheritance. + """ + for key, value in iteritems(attributes): + if not hasattr(self, key): + setattr(self, key, value) + + def overlay(self, block_start_string=missing, block_end_string=missing, + variable_start_string=missing, variable_end_string=missing, + comment_start_string=missing, comment_end_string=missing, + line_statement_prefix=missing, line_comment_prefix=missing, + trim_blocks=missing, lstrip_blocks=missing, + extensions=missing, optimized=missing, + undefined=missing, finalize=missing, autoescape=missing, + loader=missing, cache_size=missing, auto_reload=missing, + bytecode_cache=missing): + """Create a new overlay environment that shares all the data with the + current environment except of cache and the overridden attributes. + Extensions cannot be removed for an overlayed environment. An overlayed + environment automatically gets all the extensions of the environment it + is linked to plus optional extra extensions. + + Creating overlays should happen after the initial environment was set + up completely. Not all attributes are truly linked, some are just + copied over so modifications on the original environment may not shine + through. + """ + args = dict(locals()) + del args['self'], args['cache_size'], args['extensions'] + + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.overlayed = True + rv.linked_to = self + + for key, value in iteritems(args): + if value is not missing: + setattr(rv, key, value) + + if cache_size is not missing: + rv.cache = create_cache(cache_size) + else: + rv.cache = copy_cache(self.cache) + + rv.extensions = {} + for key, value in iteritems(self.extensions): + rv.extensions[key] = value.bind(rv) + if extensions is not missing: + rv.extensions.update(load_extensions(rv, extensions)) + + return _environment_sanity_check(rv) + + lexer = property(get_lexer, doc="The lexer for this environment.") + + def iter_extensions(self): + """Iterates over the extensions by priority.""" + return iter(sorted(self.extensions.values(), + key=lambda x: x.priority)) + + def getitem(self, obj, argument): + """Get an item or attribute of an object but prefer the item.""" + try: + return obj[argument] + except (TypeError, LookupError): + if isinstance(argument, string_types): + try: + attr = str(argument) + except Exception: + pass + else: + try: + return getattr(obj, attr) + except AttributeError: + pass + return self.undefined(obj=obj, name=argument) + + def getattr(self, obj, attribute): + """Get an item or attribute of an object but prefer the attribute. + Unlike :meth:`getitem` the attribute *must* be a bytestring. + """ + try: + return getattr(obj, attribute) + except AttributeError: + pass + try: + return obj[attribute] + except (TypeError, LookupError, AttributeError): + return self.undefined(obj=obj, name=attribute) + + def call_filter(self, name, value, args=None, kwargs=None, + context=None, eval_ctx=None): + """Invokes a filter on a value the same way the compiler does it. + + .. versionadded:: 2.7 + """ + func = self.filters.get(name) + if func is None: + raise TemplateRuntimeError('no filter named %r' % name) + args = [value] + list(args or ()) + if getattr(func, 'contextfilter', False): + if context is None: + raise TemplateRuntimeError('Attempted to invoke context ' + 'filter without context') + args.insert(0, context) + elif getattr(func, 'evalcontextfilter', False): + if eval_ctx is None: + if context is not None: + eval_ctx = context.eval_ctx + else: + eval_ctx = EvalContext(self) + args.insert(0, eval_ctx) + elif getattr(func, 'environmentfilter', False): + args.insert(0, self) + return func(*args, **(kwargs or {})) + + def call_test(self, name, value, args=None, kwargs=None): + """Invokes a test on a value the same way the compiler does it. + + .. versionadded:: 2.7 + """ + func = self.tests.get(name) + if func is None: + raise TemplateRuntimeError('no test named %r' % name) + return func(value, *(args or ()), **(kwargs or {})) + + @internalcode + def parse(self, source, name=None, filename=None): + """Parse the sourcecode and return the abstract syntax tree. This + tree of nodes is used by the compiler to convert the template into + executable source- or bytecode. This is useful for debugging or to + extract information from templates. + + If you are :ref:`developing Jinja2 extensions ` + this gives you a good overview of the node tree generated. + """ + try: + return self._parse(source, name, filename) + except TemplateSyntaxError: + exc_info = sys.exc_info() + self.handle_exception(exc_info, source_hint=source) + + def _parse(self, source, name, filename): + """Internal parsing function used by `parse` and `compile`.""" + return Parser(self, source, name, encode_filename(filename)).parse() + + def lex(self, source, name=None, filename=None): + """Lex the given sourcecode and return a generator that yields + tokens as tuples in the form ``(lineno, token_type, value)``. + This can be useful for :ref:`extension development ` + and debugging templates. + + This does not perform preprocessing. If you want the preprocessing + of the extensions to be applied you have to filter source through + the :meth:`preprocess` method. + """ + source = text_type(source) + try: + return self.lexer.tokeniter(source, name, filename) + except TemplateSyntaxError: + exc_info = sys.exc_info() + self.handle_exception(exc_info, source_hint=source) + + def preprocess(self, source, name=None, filename=None): + """Preprocesses the source with all extensions. This is automatically + called for all parsing and compiling methods but *not* for :meth:`lex` + because there you usually only want the actual source tokenized. + """ + return reduce(lambda s, e: e.preprocess(s, name, filename), + self.iter_extensions(), text_type(source)) + + def _tokenize(self, source, name, filename=None, state=None): + """Called by the parser to do the preprocessing and filtering + for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. + """ + source = self.preprocess(source, name, filename) + stream = self.lexer.tokenize(source, name, filename, state) + for ext in self.iter_extensions(): + stream = ext.filter_stream(stream) + if not isinstance(stream, TokenStream): + stream = TokenStream(stream, name, filename) + return stream + + def _generate(self, source, name, filename, defer_init=False): + """Internal hook that can be overridden to hook a different generate + method in. + + .. versionadded:: 2.5 + """ + return generate(source, self, name, filename, defer_init=defer_init) + + def _compile(self, source, filename): + """Internal hook that can be overridden to hook a different compile + method in. + + .. versionadded:: 2.5 + """ + return compile(source, filename, 'exec') + + @internalcode + def compile(self, source, name=None, filename=None, raw=False, + defer_init=False): + """Compile a node or template source code. The `name` parameter is + the load name of the template after it was joined using + :meth:`join_path` if necessary, not the filename on the file system. + the `filename` parameter is the estimated filename of the template on + the file system. If the template came from a database or memory this + can be omitted. + + The return value of this method is a python code object. If the `raw` + parameter is `True` the return value will be a string with python + code equivalent to the bytecode returned otherwise. This method is + mainly used internally. + + `defer_init` is use internally to aid the module code generator. This + causes the generated code to be able to import without the global + environment variable to be set. + + .. versionadded:: 2.4 + `defer_init` parameter added. + """ + source_hint = None + try: + if isinstance(source, string_types): + source_hint = source + source = self._parse(source, name, filename) + if self.optimized: + source = optimize(source, self) + source = self._generate(source, name, filename, + defer_init=defer_init) + if raw: + return source + if filename is None: + filename = '