[CARBONDATA-2015] Restricted maximum length of bytes per column Validation for number of bytes for a column is added.
We have limited the number of characters per column to 32000. For example, a single unicode character takes 3 bytes. So in this case, if my column has 30,000 unicode characters, then 32000 * 3 exceeds the short range. So, load will fail. This closes #1785 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/943588d1 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/943588d1 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/943588d1 Branch: refs/heads/fgdatamap Commit: 943588d1f07d8eb64b1ebcf84bdc7216049a182c Parents: a324e5d Author: dhatchayani <[email protected]> Authored: Wed Jan 10 16:29:14 2018 +0530 Committer: manishgupta88 <[email protected]> Committed: Mon Jan 15 10:46:42 2018 +0530 ---------------------------------------------------------------------- .../core/constants/CarbonCommonConstants.java | 4 ++ .../core/writer/CarbonDictionaryWriterImpl.java | 5 +++ .../src/test/resources/unicodechar.csv | 1 + .../dataload/TestLoadDataGeneral.scala | 47 ++++++++++++++++++++ .../carbondata/spark/util/CarbonScalaUtil.scala | 6 +-- .../impl/NonDictionaryFieldConverterImpl.java | 13 ++++-- .../loading/csvinput/CSVInputFormat.java | 5 +-- 7 files changed, 71 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/943588d1/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java b/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java index b58f42a..cd7abe0 100644 --- a/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java +++ b/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java @@ -1514,6 +1514,10 @@ public final class CarbonCommonConstants { "carbon.read.partition.hive.direct"; public static final String CARBON_READ_PARTITION_HIVE_DIRECT_DEFAULT = "true"; + // As Short data type is used for storing the length of a column during data processing hence + // the maximum characters that can be supported should be less than Short max value + public static final int MAX_CHARS_PER_COLUMN_DEFAULT = 32000; + private CarbonCommonConstants() { } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/943588d1/core/src/main/java/org/apache/carbondata/core/writer/CarbonDictionaryWriterImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/writer/CarbonDictionaryWriterImpl.java b/core/src/main/java/org/apache/carbondata/core/writer/CarbonDictionaryWriterImpl.java index 4014cb4..82baccc 100644 --- a/core/src/main/java/org/apache/carbondata/core/writer/CarbonDictionaryWriterImpl.java +++ b/core/src/main/java/org/apache/carbondata/core/writer/CarbonDictionaryWriterImpl.java @@ -149,6 +149,11 @@ public class CarbonDictionaryWriterImpl implements CarbonDictionaryWriter { init(); isFirstTime = false; } + + if (value.length > CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT) { + throw new IOException("Dataload failed, String size cannot exceed " + + CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT + " bytes"); + } // if one chunk size is equal to list size then write the data to file checkAndWriteDictionaryChunkToFile(); oneDictionaryChunkList.add(ByteBuffer.wrap(value)); http://git-wip-us.apache.org/repos/asf/carbondata/blob/943588d1/integration/spark-common-test/src/test/resources/unicodechar.csv ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/resources/unicodechar.csv b/integration/spark-common-test/src/test/resources/unicodechar.csv new file mode 100644 index 0000000..90e1317 --- /dev/null +++ b/integration/spark-common-test/src/test/resources/unicodechar.csv @@ -0,0 +1 @@ +ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â° â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0 ⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââ ââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0Ç ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳ⠰´â°µâ°¶â°·â°¸â°¹â°ºâ°»â°¼â°½â°¾â°¿2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯ â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬® ⬯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆ ÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â° â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0â®°â®± ⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââ ââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵ⠰¶â°·â°¸â°¹â°ºâ°»â°¼â°½â°¾â°¿2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯ 2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â® â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B3 0⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆ ÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â° â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳ ⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââ ââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷ⠰¸â°¹â°ºâ°»â°¼â°½â°¾â°¿2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0â ¯ ⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â® â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿20â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⠬´â¬µâ¬¶â¬·â¬¸â¬¹â¬ºâ¬»â¬¼â¬½â¬¾â¬¿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆ ÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C0â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â° â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹ ⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡ â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ 01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽ⠰¾â°¿2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⠯¦â¯§â¯¨â¯©â¯ªâ¯«â¯¬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â® 2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬠·â¬¸â¬¹â¬ºâ¬»â¬¼â¬½â¬¾â¬¿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0 Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â° â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻ ⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£ â¤â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤ ǥǦǧǨǩǪǫǬÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â± â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⠯«â¯¬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ01A0Æ Æ¡Æ¢Æ£Æ¤Æ¥Æ¦Æ§Æ¨Æ©ÆªÆ«Æ¬ÆÆ®Æ¯01B0ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ01C0ÇÇÇÇÇÇ ÇÇÇÇÇÇÇÇÇÇ01D0ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ01E0Ç Ç¡Ç¢Ç£Ç¤Ç¥Ç¦Ç§Ç¨Ç©ÇªÇ«Ç¬ÇǮǯ01F0ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬â¬â¬®â¬¯2B30⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿2B40ââââââ ââââââââââ2B50ââââââââââââââââ2B60â â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯2B70â°â±â²â³â´âµâ¶â·â¸â¹âºâ»â¼â½â¾â¿2B80â®â®â®â®â®â® â®â®â®â®â®â®â®â®â®â®2B90â®â®â®â ®â®â®â®â®â®â®â®â®â®â®â®â®2BA0⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬â®â®®â®¯2BB0⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿2BC0â¯â¯â¯â¯â¯â¯ â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BD0â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯â¯2BE0⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬â¯â¯®â¯¯2BF0⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿2C00â°â°â°â°â°â° â°â°â°â°â°â°â°â°â°â°2C10â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°â°2C20ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬâ°â°®â°¯2C30ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ2C40â±â±â±â±â±â± â±â±â±â±â±â±â±â±â±â±2C50â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±â±ââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââ ââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââ \ No newline at end of file http://git-wip-us.apache.org/repos/asf/carbondata/blob/943588d1/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/dataload/TestLoadDataGeneral.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/dataload/TestLoadDataGeneral.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/dataload/TestLoadDataGeneral.scala index 49f3c5e..0be0b6d 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/dataload/TestLoadDataGeneral.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/dataload/TestLoadDataGeneral.scala @@ -187,7 +187,54 @@ class TestLoadDataGeneral extends QueryTest with BeforeAndAfterAll { } catch { case _:Exception => assert(true) } + } + + test("test load / insert / update with data more than 32000 bytes - dictionary_exclude") { + val testdata = s"$resourcesPath/unicodechar.csv" + sql("drop table if exists load32000bytes") + sql("create table load32000bytes(name string) stored by 'carbondata'") + sql("insert into table load32000bytes select 'aaa'") + + assert(intercept[Exception] { + sql(s"load data local inpath '$testdata' into table load32000bytes OPTIONS ('FILEHEADER'='name')") + }.getMessage.contains("DataLoad failure: Dataload failed, String size cannot exceed 32000 bytes")) + + val source = scala.io.Source.fromFile(testdata) + val data = source.mkString + + intercept[Exception] { + sql(s"insert into load32000bytes values('$data')") + } + + intercept[Exception] { + sql(s"update load32000bytes set(name)= ('$data')").show() + } + + sql("drop table if exists load32000bytes") + } + + test("test load / insert / update with data more than 32000 bytes - dictionary_include") { + val testdata = s"$resourcesPath/unicodechar.csv" + sql("drop table if exists load32000bytes") + sql("create table load32000bytes(name string) stored by 'carbondata' TBLPROPERTIES('DICTIONARY_INCLUDE'='name')") + sql("insert into table load32000bytes select 'aaa'") + + assert(intercept[Exception] { + sql(s"load data local inpath '$testdata' into table load32000bytes OPTIONS ('FILEHEADER'='name')") + }.getMessage.contains("generate global dictionary failed, Dataload failed, String size cannot exceed 32000 bytes")) + + val source = scala.io.Source.fromFile(testdata) + val data = source.mkString + + intercept[Exception] { + sql(s"insert into load32000bytes values('$data')") + } + + intercept[Exception] { + sql(s"update load32000bytes set(name)= ('$data')").show() + } + sql("drop table if exists load32000bytes") } test("test if stale folders are deleting on data load") { http://git-wip-us.apache.org/repos/asf/carbondata/blob/943588d1/integration/spark-common/src/main/scala/org/apache/carbondata/spark/util/CarbonScalaUtil.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common/src/main/scala/org/apache/carbondata/spark/util/CarbonScalaUtil.scala b/integration/spark-common/src/main/scala/org/apache/carbondata/spark/util/CarbonScalaUtil.scala index 67a29f0..6c8a6b0 100644 --- a/integration/spark-common/src/main/scala/org/apache/carbondata/spark/util/CarbonScalaUtil.scala +++ b/integration/spark-common/src/main/scala/org/apache/carbondata/spark/util/CarbonScalaUtil.scala @@ -32,7 +32,7 @@ import org.apache.carbondata.core.constants.{CarbonCommonConstants, CarbonLoadOp import org.apache.carbondata.core.metadata.datatype.{DataType => CarbonDataType, DataTypes => CarbonDataTypes, StructField => CarbonStructField} import org.apache.carbondata.core.metadata.schema.table.CarbonTable import org.apache.carbondata.core.metadata.schema.table.column.CarbonColumn -import org.apache.carbondata.core.util.CarbonSessionInfo +import org.apache.carbondata.core.util.{ByteUtil, CarbonSessionInfo} import org.apache.carbondata.processing.loading.csvinput.CSVInputFormat object CarbonScalaUtil { @@ -110,9 +110,9 @@ object CarbonScalaUtil { serializationNullFormat } else { value match { - case s: String => if (s.length > CSVInputFormat.MAX_CHARS_PER_COLUMN_DEFAULT) { + case s: String => if (s.length > CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT) { throw new Exception("Dataload failed, String length cannot exceed " + - CSVInputFormat.MAX_CHARS_PER_COLUMN_DEFAULT + " characters") + CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT + " characters") } else { s } http://git-wip-us.apache.org/repos/asf/carbondata/blob/943588d1/processing/src/main/java/org/apache/carbondata/processing/loading/converter/impl/NonDictionaryFieldConverterImpl.java ---------------------------------------------------------------------- diff --git a/processing/src/main/java/org/apache/carbondata/processing/loading/converter/impl/NonDictionaryFieldConverterImpl.java b/processing/src/main/java/org/apache/carbondata/processing/loading/converter/impl/NonDictionaryFieldConverterImpl.java index 8f15e2e..504d2f5 100644 --- a/processing/src/main/java/org/apache/carbondata/processing/loading/converter/impl/NonDictionaryFieldConverterImpl.java +++ b/processing/src/main/java/org/apache/carbondata/processing/loading/converter/impl/NonDictionaryFieldConverterImpl.java @@ -25,6 +25,7 @@ import org.apache.carbondata.core.util.DataTypeUtil; import org.apache.carbondata.processing.loading.DataField; import org.apache.carbondata.processing.loading.converter.BadRecordLogHolder; import org.apache.carbondata.processing.loading.converter.FieldConverter; +import org.apache.carbondata.processing.loading.exception.CarbonDataLoadingException; import org.apache.carbondata.processing.util.CarbonDataProcessorUtil; public class NonDictionaryFieldConverterImpl implements FieldConverter { @@ -67,9 +68,15 @@ public class NonDictionaryFieldConverterImpl implements FieldConverter { dateFormat = dataField.getTimestampFormat(); } try { - row.update(DataTypeUtil - .getBytesBasedOnDataTypeForNoDictionaryColumn(dimensionValue, dataType, - dateFormat), index); + byte[] value = DataTypeUtil + .getBytesBasedOnDataTypeForNoDictionaryColumn(dimensionValue, dataType, dateFormat); + if (dataType == DataTypes.STRING) { + assert value.length <= CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT; + } + row.update(value, index); + } catch (AssertionError ae) { + throw new CarbonDataLoadingException("Dataload failed, String size cannot exceed " + + CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT + " bytes"); } catch (Throwable ex) { if (dimensionValue.length() > 0 || (dimensionValue.length() == 0 && isEmptyBadRecord)) { String message = logHolder.getColumnMessageMap().get(column.getColName()); http://git-wip-us.apache.org/repos/asf/carbondata/blob/943588d1/processing/src/main/java/org/apache/carbondata/processing/loading/csvinput/CSVInputFormat.java ---------------------------------------------------------------------- diff --git a/processing/src/main/java/org/apache/carbondata/processing/loading/csvinput/CSVInputFormat.java b/processing/src/main/java/org/apache/carbondata/processing/loading/csvinput/CSVInputFormat.java index 203b61b..259b6da 100644 --- a/processing/src/main/java/org/apache/carbondata/processing/loading/csvinput/CSVInputFormat.java +++ b/processing/src/main/java/org/apache/carbondata/processing/loading/csvinput/CSVInputFormat.java @@ -75,9 +75,6 @@ public class CSVInputFormat extends FileInputFormat<NullWritable, StringArrayWri public static final String NUMBER_OF_COLUMNS = "carbon.csvinputformat.number.of.columns"; public static final int DEFAULT_MAX_NUMBER_OF_COLUMNS_FOR_PARSING = 2000; public static final int THRESHOLD_MAX_NUMBER_OF_COLUMNS_FOR_PARSING = 20000; - // As Short data type is used for storing the length of a column during data processing hence - // the maximum characters that can be supported should be less than Short max value - public static final int MAX_CHARS_PER_COLUMN_DEFAULT = 32000; private static LogService LOGGER = LogServiceFactory.getLogService(CSVInputFormat.class.toString()); @@ -207,7 +204,7 @@ public class CSVInputFormat extends FileInputFormat<NullWritable, StringArrayWri parserSettings.setSkipEmptyLines( Boolean.valueOf(job.get(SKIP_EMPTY_LINE, CarbonCommonConstants.CARBON_SKIP_EMPTY_LINE_DEFAULT))); - parserSettings.setMaxCharsPerColumn(MAX_CHARS_PER_COLUMN_DEFAULT); + parserSettings.setMaxCharsPerColumn(CarbonCommonConstants.MAX_CHARS_PER_COLUMN_DEFAULT); String maxColumns = job.get(MAX_COLUMNS, "" + DEFAULT_MAX_NUMBER_OF_COLUMNS_FOR_PARSING); parserSettings.setMaxColumns(Integer.parseInt(maxColumns)); parserSettings.getFormat().setQuote(job.get(QUOTE, QUOTE_DEFAULT).charAt(0));
