From 624d40021ef3b8963a478534191db5d1fb6d344d Mon Sep 17 00:00:00 2001 From: gitlost Date: Sun, 10 Apr 2022 11:12:18 +0100 Subject: [PATCH] ECI: Update ECIs to AIM ITS/04-023:2022, adding UTF-16BE (was USC-2BE), UTF-16LE, GBK, separate GB18030, UTF-32BE, UTF-32LE add examples to tests for DATAMATRIX, HANXIN, QRCODE HANXIN: Remove alternating filler in function information; GB 18030 now ECI 32 (previously used ECI 29); fix gate-posts on codeword limits use new ZXing-C++ HanXin detector (diagnostics2 branch) for tests check against ISO/IEC 20830:2021 (no substantive changes) backend_tcl: update ECIs; NOTE: changed names "unicode" -> "utf-16be", "euc-cn" -> "gb2312" GRIDMATRIX/HANXIN/QRCODE/RMQR: warn if auto-conversion (i.e. no ECI given) occurs to resp. specialized char sets (GB 2312/GB 18030/Shift JIS) --- ChangeLog | 9 + backend/eci.c | 81 +- backend/eci_sb.h | 92 +- backend/gb18030.c | 13 +- backend/gb18030.h | 11 +- backend/gridmtx.c | 14 +- backend/hanxin.c | 67 +- backend/qr.c | 19 +- .../tests/data/tif/hanxin_v84_l4_scale2.tif | Bin 6308 -> 6304 bytes backend/tests/test_2of5.c | 9 +- backend/tests/test_aztec.c | 9 +- backend/tests/test_code.c | 9 +- backend/tests/test_code128.c | 9 +- backend/tests/test_dmatrix.c | 1456 ++++++++++- backend/tests/test_dotcode.c | 9 +- backend/tests/test_eci.c | 340 ++- backend/tests/test_gb18030.c | 70 +- backend/tests/test_gridmtx.c | 45 +- backend/tests/test_hanxin.c | 2178 +++++++++++++++-- backend/tests/test_maxicode.c | 9 +- backend/tests/test_medical.c | 9 +- backend/tests/test_pdf417.c | 9 +- backend/tests/test_qr.c | 1734 ++++++++++++- backend/tests/test_rss.c | 13 +- backend/tests/test_upcean.c | 13 +- backend/tests/testcommon.c | 81 +- backend/tests/testcommon.h | 17 +- .../tests/tools/bwipp_dump-barcode.ps.diff | 110 +- backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 124308 -> 124268 bytes backend/tests/tools/run_zxingcpp_tests.sh | 3 +- backend_qt/qzint.cpp | 13 +- backend_qt/tests/test_qzint.cpp | 13 +- backend_tcl/zint.c | 20 +- docs/manual.txt | 35 +- frontend/main.c | 18 +- frontend/tests/test_args.c | 15 +- frontend_qt/mainWindow.ui | 35 +- frontend_qt/mainwindow.cpp | 9 +- 38 files changed, 5761 insertions(+), 835 deletions(-) diff --git a/ChangeLog b/ChangeLog index c39f548d..2b77bd8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,10 @@ Version 2.10.0.9 (dev) not released yet - Matrix symbols: horizontal boundary bars appear outside any vertical whitespace NOTE: previously appeared inside vertical whitespace +- ECI 29 now GB 2312 only; GB 18030 is new ECI 32 + NOTE: previously ECI 29 was GB 18030 for HANXIN, GB 2312 otherwise +- GRIDMATRIX, HANXIN, QRCODE/RMQR now warn when convert to GB 2312, GB 18030, + Shift JIS resp. and no ECI given Changes ------- @@ -53,6 +57,10 @@ Changes - Matrix symbols: change horizontal boundary bars to appear outside any vertical whitespace, as they're decorative rather than functional (#247) - FIM: Add support for FIM E +- Updated ECIs to AIM ITS/04-023:2022 (ECI Part 3: Register) +- HANXIN: removed alternating filler in function information +- GRIDMATRIX/HANXIN/QRCODE/RMQR: warn if auto-conversion (i.e. no ECI given) + occurs to resp. specialized char sets (GB 2312/GB 18030/Shift JIS) Bugs ---- @@ -76,6 +84,7 @@ Bugs props Alex Geller - DATAMATRIX: fix mis-encoding of FNC1/GS in EDIFACT in GS1 mode - Allow for dot overspill in height of vertical box sides (dotty mode) +- HANXIN: fix gate-posts on codeword limits Version 2.10.0 2021-08-14 diff --git a/backend/eci.c b/backend/eci.c index 5fd89f63..eb9b434b 100644 --- a/backend/eci.c +++ b/backend/eci.c @@ -1,7 +1,7 @@ /* eci.c - Extended Channel Interpretations libzint - the open source barcode library - Copyright (C) 2009 - 2021 Robin Stuart + Copyright (C) 2009-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #ifdef _MSC_VER #include @@ -40,6 +39,7 @@ #include "big5.h" #include "gb2312.h" #include "ksx1001.h" +#include "gb18030.h" /* ECI 20 Shift JIS */ static int sjis_wctomb(unsigned char *r, const unsigned int wc) { @@ -126,6 +126,47 @@ static int euc_kr_wctomb(unsigned char *r, const unsigned int wc) { return 0; } +/* ECI 31 GBK Chinese */ +static int gbk_wctomb(unsigned char *r, const unsigned int wc) { + unsigned int c; + + if (wc < 0x80) { + *r = (unsigned char) wc; + return 1; + } + if (gbk_wctomb_zint(&c, wc)) { + r[0] = (unsigned char) (c >> 8); + r[1] = (unsigned char) (c & 0xff); + return 2; + } + return 0; +} + +/* ECI 32 GB 18030 Chinese */ +static int gb18030_wctomb(unsigned char *r, const unsigned int wc) { + unsigned int c1, c2; + int ret; + + if (wc < 0x80) { + *r = (unsigned char) wc; + return 1; + } + ret = gb18030_wctomb_zint(&c1, &c2, wc); + if (ret == 2) { + r[0] = (unsigned char) (c1 >> 8); + r[1] = (unsigned char) (c1 & 0xff); + return 2; + } + if (ret == 4) { + r[0] = (unsigned char) (c1 >> 8); + r[1] = (unsigned char) (c1 & 0xff); + r[2] = (unsigned char) (c2 >> 8); + r[3] = (unsigned char) (c2 & 0xff); + return 4; + } + return 0; +} + /* Helper to count the number of chars in a string within a range */ static int chr_range_cnt(const unsigned char string[], const int length, const unsigned char c1, const unsigned char c2) { @@ -149,8 +190,8 @@ static int chr_range_cnt(const unsigned char string[], const int length, const u /* Is ECI convertible from UTF-8? */ INTERNAL int is_eci_convertible(const int eci) { - if (eci == 26 || (eci > 30 && eci != 170)) { /* Exclude ECI 170 - ASCII Invariant */ - /* UTF-8 (26) or 8-bit binary data (899) or undefined (> 30 and < 899) or not character set (> 899) */ + if (eci == 26 || (eci > 35 && eci != 170)) { /* Exclude ECI 170 - ASCII Invariant */ + /* UTF-8 (26) or 8-bit binary data (899) or undefined (> 35 and < 899) or not character set (> 899) */ return 0; } return 1; @@ -162,16 +203,21 @@ INTERNAL int get_eci_length(const int eci, const unsigned char source[], int len /* Only ASCII backslash (reverse solidus) exceeds UTF-8 length */ length += chr_cnt(source, length, '\\'); - } else if (eci == 25) { /* UCS-2BE */ + } else if (eci == 25 || eci == 33) { /* UTF-16 */ /* All ASCII chars take 2 bytes */ length += chr_range_cnt(source, length, 0, 0x7F); + /* Surrogate pairs are 4 UTF-8 bytes long so fit */ - } else if (eci == 29) { /* GB 2312 (and GB 18030 if Han Xin) */ - /* Not needed for GB 2312 but allow for GB 18030 4 byters */ + } else if (eci == 32) { /* GB 18030 */ + /* Allow for GB 18030 4 byters */ length *= 2; + + } else if (eci == 34 || eci == 35) { /* UTF-32 */ + /* Quadruple-up ASCII and double-up non-ASCII */ + length += chr_range_cnt(source, length, 0, 0x7F) * 2 + length; } - /* Big5 and EUC-KR fit in UTF-8 length */ + /* Big5, GB 2312, EUC-KR and GBK fit in UTF-8 length */ return length; } @@ -180,14 +226,15 @@ INTERNAL int get_eci_length(const int eci, const unsigned char source[], int len INTERNAL int utf8_to_eci(const int eci, const unsigned char source[], unsigned char dest[], int *p_length) { typedef int (*eci_func_t)(unsigned char *r, const unsigned int wc); - static const eci_func_t eci_funcs[31] = { - NULL, NULL, NULL, NULL, iso8859_2_wctosb, - iso8859_3_wctosb, iso8859_4_wctosb, iso8859_5_wctosb, iso8859_6_wctosb, iso8859_7_wctosb, - iso8859_8_wctosb, iso8859_9_wctosb, iso8859_10_wctosb, iso8859_11_wctosb, NULL, - iso8859_13_wctosb, iso8859_14_wctosb, iso8859_15_wctosb, iso8859_16_wctosb, NULL, - sjis_wctomb, cp1250_wctosb, cp1251_wctosb, cp1252_wctosb, cp1256_wctosb, - ucs2be_wctomb, NULL, ascii_wctosb, big5_wctomb, gb2312_wctomb, - euc_kr_wctomb, + static const eci_func_t eci_funcs[36] = { + NULL, NULL, NULL, NULL, iso8859_2_wctosb, /*0-4*/ + iso8859_3_wctosb, iso8859_4_wctosb, iso8859_5_wctosb, iso8859_6_wctosb, iso8859_7_wctosb, /*5-9*/ + iso8859_8_wctosb, iso8859_9_wctosb, iso8859_10_wctosb, iso8859_11_wctosb, NULL, /*10-14*/ + iso8859_13_wctosb, iso8859_14_wctosb, iso8859_15_wctosb, iso8859_16_wctosb, NULL, /*15-19*/ + sjis_wctomb, cp1250_wctosb, cp1251_wctosb, cp1252_wctosb, cp1256_wctosb, /*20-24*/ + utf16be_wctomb, NULL, ascii_wctosb, big5_wctomb, gb2312_wctomb, /*25-29*/ + euc_kr_wctomb, gbk_wctomb, gb18030_wctomb, utf16le_wctomb, utf32be_wctomb, /*30-34*/ + utf32le_wctomb, }; eci_func_t eci_func; unsigned int codepoint, state; @@ -277,3 +324,5 @@ INTERNAL int get_best_eci(const unsigned char source[], int length) { return 26; // If all of these fail, use Unicode! } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/eci_sb.h b/backend/eci_sb.h index 00841cc4..bfe766f9 100644 --- a/backend/eci_sb.h +++ b/backend/eci_sb.h @@ -1,7 +1,7 @@ -/* eci_sb.h - Extended Channel Interpretations single-byte and UCS-2 BE +/* eci_sb.h - Extended Channel Interpretations single-byte and UTF-16/32 libzint - the open source barcode library - Copyright (C) 2021 Robin Stuart + Copyright (C) 2021-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,10 +28,9 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -#ifndef ECI_SB_H -#define ECI_SB_H +#ifndef Z_ECI_SB_H +#define Z_ECI_SB_H /* * Adapted from GNU LIBICONV library */ @@ -1116,17 +1115,84 @@ static int cp1256_wctosb(unsigned char *r, const unsigned int wc) { } /* - * UCS-2 (libiconv-1.16/lib/ucs2.h) + * UTF-16BE (libiconv-1.16/lib/utf16be.h) */ -/* ECI 25 UC2-2 Big Endian (ISO/IEC 10646) */ -static int ucs2be_wctomb(unsigned char *r, const unsigned int wc) { - if (wc < 0x10000 && wc != 0xfffe && !(wc >= 0xd800 && wc < 0xe000)) { - r[0] = (unsigned char) (wc >> 8); - r[1] = (unsigned char) (wc & 0xff); - return 2; +/* ECI 25 UTF-16 Big Endian (ISO/IEC 10646) */ +static int utf16be_wctomb(unsigned char *r, const unsigned int wc) { + if (!(wc >= 0xd800 && wc < 0xe000)) { + if (wc < 0x10000) { + r[0] = (unsigned char) (wc >> 8); + r[1] = (unsigned char) (wc & 0xff); + return 2; + } else if (wc < 0x110000) { + unsigned int wc1 = 0xd800 + ((wc - 0x10000) >> 10); + unsigned int wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); + r[0] = (unsigned char) (wc1 >> 8); + r[1] = (unsigned char) (wc1 & 0xff); + r[2] = (unsigned char) (wc2 >> 8); + r[3] = (unsigned char) (wc2 & 0xff); + return 4; + } } return 0; } -#endif /* ECI_SB_H */ +/* + * UTF-16LE (libiconv-1.16/lib/utf16le.h) + */ + +/* ECI 33 UTF-16 Little Endian (ISO/IEC 10646) */ +static int utf16le_wctomb(unsigned char *r, const unsigned int wc) { + if (!(wc >= 0xd800 && wc < 0xe000)) { + if (wc < 0x10000) { + r[0] = (unsigned char) (wc & 0xff); + r[1] = (unsigned char) (wc >> 8); + return 2; + } else if (wc < 0x110000) { + unsigned int wc1 = 0xd800 + ((wc - 0x10000) >> 10); + unsigned int wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); + r[0] = (unsigned char) (wc1 & 0xff); + r[1] = (unsigned char) (wc1 >> 8); + r[2] = (unsigned char) (wc2 & 0xff); + r[3] = (unsigned char) (wc2 >> 8); + return 4; + } + } + return 0; +} + +/* + * UTF-32BE (libiconv-1.16/lib/utf32be.h) + */ + +/* ECI 34 UTF-32 Big Endian (ISO/IEC 10646) */ +static int utf32be_wctomb(unsigned char *r, const unsigned int wc) { + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + r[0] = 0; + r[1] = (unsigned char) (wc >> 16); + r[2] = (unsigned char) (wc >> 8); + r[3] = (unsigned char) (wc & 0xff); + return 4; + } + return 0; +} + +/* + * UTF-32LE (libiconv-1.16/lib/utf32le.h) + */ + +/* ECI 35 UTF-32 Little Endian (ISO/IEC 10646) */ +static int utf32le_wctomb(unsigned char *r, const unsigned int wc) { + if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { + r[0] = (unsigned char) (wc & 0xff); + r[1] = (unsigned char) (wc >> 8); + r[2] = (unsigned char) (wc >> 16); + r[3] = 0; + return 4; + } + return 0; +} + +/* vim: set ts=4 sw=4 et : */ +#endif /* Z_ECI_SB_H */ diff --git a/backend/gb18030.c b/backend/gb18030.c index 6efdfbd4..411dc4a9 100644 --- a/backend/gb18030.c +++ b/backend/gb18030.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019-2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* * Adapted from GNU LIBICONV library and patched to allow 2 duplicate mappings * for compatibility with GB 2312 (GB2312.TXT): @@ -2422,7 +2421,7 @@ static int gbkext_inv_wctomb(unsigned int *r, const unsigned int wc) { * GBK (libiconv-1.16/lib/gbk.h) */ -static int gbk_wctomb(unsigned int *r, const unsigned int wc) { +INTERNAL int gbk_wctomb_zint(unsigned int *r, const unsigned int wc) { int ret; /* ZINT: Note these mappings U+30FB and U+2015 different from GB 2312 */ @@ -2551,7 +2550,7 @@ static const unsigned short gb18030ext_pagefe[16] = { 0xa6ed, 0xa6f3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ }; -static int gb18030ext_wctomb(unsigned int *r, const unsigned int wc) { +STATIC_UNLESS_ZINT_TEST int gb18030ext_wctomb(unsigned int *r, const unsigned int wc) { unsigned short c = 0; if (wc == 0x01f9) { c = 0xa8bf; @@ -2725,7 +2724,7 @@ static const unsigned short gb18030uni_ranges[206] = { 25994, 25998, 26012, 26016, 26110, 26116 }; -static int gb18030uni_wctomb(unsigned int *r1, unsigned int *r2, const unsigned int wc) { +STATIC_UNLESS_ZINT_TEST int gb18030uni_wctomb(unsigned int *r1, unsigned int *r2, const unsigned int wc) { unsigned int i = wc; if (i >= 0x0080 && i <= 0xffff) { if (i == 0xe7c7) { @@ -2806,7 +2805,7 @@ INTERNAL int gb18030_wctomb_zint(unsigned int *r1, unsigned int *r2, const unsig } /* Code set 1 (GBK extended) */ - ret = gbk_wctomb(r1, wc); + ret = gbk_wctomb_zint(r1, wc); if (ret) { return ret; } @@ -2973,3 +2972,5 @@ INTERNAL void gb18030_cpy(const unsigned char source[], int *p_length, unsigned } } } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/gb18030.h b/backend/gb18030.h index 0f14db79..d6d0dbba 100644 --- a/backend/gb18030.h +++ b/backend/gb18030.h @@ -1,7 +1,7 @@ /* gb18030.h - Unicode to GB 18030 libzint - the open source barcode library - Copyright (C) 2009-2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,15 +28,15 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -#ifndef GB18030_H -#define GB18030_H +#ifndef Z_GB18030_H +#define Z_GB18030_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ +INTERNAL int gbk_wctomb_zint(unsigned int *r, const unsigned int wc); INTERNAL int gb18030_wctomb_zint(unsigned int *r1, unsigned int *r2, const unsigned int wc); INTERNAL int gb18030_utf8(struct zint_symbol *symbol, const unsigned char source[], int *p_length, unsigned int *gbdata); @@ -49,4 +49,5 @@ INTERNAL void gb18030_cpy(const unsigned char source[], int *p_length, unsigned } #endif /* __cplusplus */ -#endif /* GB18030_H */ +/* vim: set ts=4 sw=4 et : */ +#endif /* Z_GB18030_H */ diff --git a/backend/gridmtx.c b/backend/gridmtx.c index 84d8040a..aadf1372 100644 --- a/backend/gridmtx.c +++ b/backend/gridmtx.c @@ -1,7 +1,7 @@ /* gridmtx.c - Grid Matrix libzint - the open source barcode library - Copyright (C) 2009-2021 Robin Stuart + Copyright (C) 2009-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* This file implements Grid Matrix as specified in AIM Global Document Number AIMD014 Rev. 1.63 Revised 9 Dec 2008 */ @@ -1011,6 +1010,7 @@ static void place_layer_id(char *grid, int size, int layers, int modules, int ec } INTERNAL int gridmatrix(struct zint_symbol *symbol, unsigned char source[], int length) { + int warn_number = 0; int size, modules, error_number; int auto_layers, min_layers, layers, auto_ecc_level, min_ecc_level, ecc_level; int x, y, i; @@ -1038,7 +1038,7 @@ INTERNAL int gridmatrix(struct zint_symbol *symbol, unsigned char source[], int gb2312_cpy(source, &length, gbdata, full_multibyte); } else { int done = 0; - if (symbol->eci != 29) { /* Unless ECI 29 (GB) */ + if (symbol->eci != 29) { /* Unless ECI 29 (GB 2312) */ /* Try other conversions (ECI 0 defaults to ISO/IEC 8859-1) */ error_number = gb2312_utf8_to_eci(symbol->eci, source, &length, gbdata, full_multibyte); if (error_number == 0) { @@ -1054,6 +1054,10 @@ INTERNAL int gridmatrix(struct zint_symbol *symbol, unsigned char source[], int if (error_number != 0) { return error_number; } + if (symbol->eci != 29) { + strcpy(symbol->errtxt, "540: Converted to GB 2312 but no ECI specified"); + warn_number = ZINT_WARN_NONCOMPLIANT; + } } } @@ -1237,5 +1241,7 @@ INTERNAL int gridmatrix(struct zint_symbol *symbol, unsigned char source[], int } symbol->height = size; - return 0; + return warn_number; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/hanxin.c b/backend/hanxin.c index 0ab00a94..9720bd30 100644 --- a/backend/hanxin.c +++ b/backend/hanxin.c @@ -1,7 +1,7 @@ /* hanxin.c - Han Xin Code libzint - the open source barcode library - Copyright (C) 2009-2021 Robin Stuart + Copyright (C) 2009-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,10 +28,9 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -/* This code attempts to implement Han Xin Code according to ISO/IEC 20830 (draft 2019-10-10) - * (previously AIMD-015:2010 (Rev 0.8)) */ +/* This code attempts to implement Han Xin Code according to ISO/IEC 20830:2021 + * (previously ISO/IEC 20830 (draft 2019-10-10) and AIMD-015:2010 (Rev 0.8)) */ #include #ifdef _MSC_VER @@ -630,7 +629,7 @@ static void calculate_binary(char binary[], const char mode[], unsigned int sour bp = bin_append_posn(block_length + double_byte, 13, binary, bp); if (debug & ZINT_DEBUG_PRINT) { - printf("Binary (length %d)\n", block_length + double_byte); + printf("Binary Mode (%d):", block_length + double_byte); } i = 0; @@ -641,7 +640,7 @@ static void calculate_binary(char binary[], const char mode[], unsigned int sour bp = bin_append_posn(source[i + position], source[i + position] > 0xFF ? 16 : 8, binary, bp); if (debug & ZINT_DEBUG_PRINT) { - printf("%d ", (int) source[i + position]); + printf(" %02x", (int) source[i + position]); } i++; @@ -1142,14 +1141,11 @@ static void hx_set_function_info(unsigned char *grid, const int size, const int bp = bin_append_posn(fi_ecc[i], 4, function_information, bp); } - /* This alternating filler pattern at end not mentioned in ISO/IEC 20830 (draft 2019-10-10) and does not appear - * in Figure 1 or the figures in Annex K but does appear in Figure 2 and Figures 4-9 */ + /* Previously added alternating filler pattern here (as does BWIPP) but not mentioned in ISO/IEC 20830:2021 and + does not appear in Figure 1 nor in the figures in Annex K (although does appear in Figure 2 and Figures 4-9) + nor in the AIM ITS/04-023:2022 examples: so just clear */ for (i = 28; i < 34; i++) { - if (i & 1) { - function_information[i] = '1'; - } else { - function_information[i] = '0'; - } + function_information[i] = '0'; } if (debug & ZINT_DEBUG_PRINT) { @@ -1293,7 +1289,7 @@ static int hx_evaluate(const unsigned char *local, const int size) { * position of the module.” - however i being the length of the run of the * same colour (i.e. "block" below) in the same fashion as ISO/IEC 18004 * makes more sense. -- Confirmed by Wang Yi */ - /* Fixed in ISO/IEC 20830 (draft 2019-10-10) section 5.8.3.2 "In Table 12 below, i refers to the modules with + /* Fixed in ISO/IEC 20830 section 5.8.4.3 "In Table, i refers to the modules with same color." */ /* Vertical */ @@ -1341,8 +1337,8 @@ static int hx_evaluate(const unsigned char *local, const int size) { } /* Apply the four possible bitmasks for evaluation */ -/* TODO: Haven't been able to replicate (or even get close to) the penalty scores in ISO/IEC 20830 - * (draft 2019-10-10) Annex K examples; however they don't use alternating filler pattern on structural info */ +/* TODO: Haven't been able to replicate (or even get close to) the penalty scores in ISO/IEC 20830:2021 + * Annex K examples */ static void hx_apply_bitmask(unsigned char *grid, const int size, const int version, const int ecc_level, const int user_mask, const int debug) { int x, y; @@ -1447,6 +1443,7 @@ static void hx_apply_bitmask(unsigned char *grid, const int size, const int vers /* Han Xin Code - main */ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int length) { + int warn_number = 0; int est_binlen; int ecc_level = symbol->option_1; int i, j, j_max, version; @@ -1482,7 +1479,7 @@ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int leng gb18030_cpy(source, &length, gbdata, full_multibyte); } else { int done = 0; - if (symbol->eci != 29) { /* Unless ECI 29 (GB) */ + if (symbol->eci != 32) { /* Unless ECI 32 (GB 18030) */ /* Try other conversions (ECI 0 defaults to ISO/IEC 8859-1) */ int error_number = gb18030_utf8_to_eci(symbol->eci, source, &length, gbdata, full_multibyte); if (error_number == 0) { @@ -1498,6 +1495,10 @@ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int leng if (error_number != 0) { return error_number; } + if (symbol->eci != 32) { + strcpy(symbol->errtxt, "543: Converted to GB 18030 but no ECI specified"); + warn_number = ZINT_WARN_NONCOMPLIANT; + } } } @@ -1520,30 +1521,33 @@ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int leng if (bin_len & 0x07) { codewords++; } + if (symbol->debug & ZINT_DEBUG_PRINT) { + printf("Num. of codewords: %d\n", codewords); + } version = 85; for (i = 84; i > 0; i--) { switch (ecc_level) { case 1: - if (hx_data_codewords_L1[i - 1] > codewords) { + if (hx_data_codewords_L1[i - 1] >= codewords) { version = i; data_codewords = hx_data_codewords_L1[i - 1]; } break; case 2: - if (hx_data_codewords_L2[i - 1] > codewords) { + if (hx_data_codewords_L2[i - 1] >= codewords) { version = i; data_codewords = hx_data_codewords_L2[i - 1]; } break; case 3: - if (hx_data_codewords_L3[i - 1] > codewords) { + if (hx_data_codewords_L3[i - 1] >= codewords) { version = i; data_codewords = hx_data_codewords_L3[i - 1]; } break; case 4: - if (hx_data_codewords_L4[i - 1] > codewords) { + if (hx_data_codewords_L4[i - 1] >= codewords) { version = i; data_codewords = hx_data_codewords_L4[i - 1]; } @@ -1576,17 +1580,17 @@ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int leng /* Unless explicitly specified (within min/max bounds) by user */ if (symbol->option_1 == -1 || symbol->option_1 != ecc_level) { - if ((ecc_level == 1) && (codewords < hx_data_codewords_L2[version - 1])) { + if ((ecc_level == 1) && (codewords <= hx_data_codewords_L2[version - 1])) { ecc_level = 2; data_codewords = hx_data_codewords_L2[version - 1]; } - if ((ecc_level == 2) && (codewords < hx_data_codewords_L3[version - 1])) { + if ((ecc_level == 2) && (codewords <= hx_data_codewords_L3[version - 1])) { ecc_level = 3; data_codewords = hx_data_codewords_L3[version - 1]; } - if ((ecc_level == 3) && (codewords < hx_data_codewords_L4[version - 1])) { + if ((ecc_level == 3) && (codewords <= hx_data_codewords_L4[version - 1])) { ecc_level = 4; data_codewords = hx_data_codewords_L4[version - 1]; } @@ -1616,8 +1620,7 @@ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int leng } if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Datastream length: %d\n", data_codewords); - printf("Datastream:\n"); + printf("Datastream (%d): ", data_codewords); for (i = 0; i < data_codewords; i++) { printf("%.2x ", datastream[i]); } @@ -1631,6 +1634,14 @@ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int leng hx_add_ecc(fullstream, datastream, data_codewords, version, ecc_level); + if (symbol->debug & ZINT_DEBUG_PRINT) { + printf("Fullstream (%d): ", hx_total_codewords[version - 1]); + for (i = 0; i < hx_total_codewords[version - 1]; i++) { + printf("%.2x ", fullstream[i]); + } + printf("\n"); + } + make_picket_fence(fullstream, picket_fence, hx_total_codewords[version - 1]); /* Populate grid */ @@ -1665,5 +1676,7 @@ INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int leng } symbol->height = size; - return 0; + return warn_number; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/qr.c b/backend/qr.c index 383d2851..0f88869b 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -1,7 +1,7 @@ /* qr.c Handles QR Code, Micro QR Code, UPNQR and rMQR libzint - the open source barcode library - Copyright (C) 2009 - 2021 Robin Stuart + Copyright (C) 2009-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #ifdef _MSC_VER @@ -1541,6 +1540,7 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i } INTERNAL int qrcode(struct zint_symbol *symbol, unsigned char source[], int length) { + int warn_number = 0; int i, j, est_binlen, prev_est_binlen; int ecc_level, autosize, version, max_cw, target_codewords, blocks, size; int bitmask, gs1; @@ -1593,6 +1593,10 @@ INTERNAL int qrcode(struct zint_symbol *symbol, unsigned char source[], int leng if (error_number != 0) { return error_number; } + if (symbol->eci != 20) { + strcpy(symbol->errtxt, "543: Converted to Shift JIS but no ECI specified"); + warn_number = ZINT_WARN_NONCOMPLIANT; + } } } @@ -1832,7 +1836,7 @@ INTERNAL int qrcode(struct zint_symbol *symbol, unsigned char source[], int leng } symbol->height = size; - return 0; + return warn_number; } static int micro_qr_m1(struct zint_symbol *symbol, char binary_data[], int bp) { @@ -2967,6 +2971,7 @@ static void setup_rmqr_grid(unsigned char *grid, const int h_size, const int v_s /* rMQR according to 2018 draft standard */ INTERNAL int rmqr(struct zint_symbol *symbol, unsigned char source[], int length) { + int warn_number = 0; int i, j, est_binlen; int ecc_level, autosize, version, max_cw, target_codewords, blocks, h_size, v_size; int gs1; @@ -3011,6 +3016,10 @@ INTERNAL int rmqr(struct zint_symbol *symbol, unsigned char source[], int length if (error_number != 0) { return error_number; } + if (symbol->eci != 20) { + strcpy(symbol->errtxt, "544: Converted to Shift JIS but no ECI specified"); + warn_number = ZINT_WARN_NONCOMPLIANT; + } } } @@ -3214,5 +3223,7 @@ INTERNAL int rmqr(struct zint_symbol *symbol, unsigned char source[], int length } symbol->height = v_size; - return 0; + return warn_number; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/data/tif/hanxin_v84_l4_scale2.tif b/backend/tests/data/tif/hanxin_v84_l4_scale2.tif index c908cb18b5db858d022b3b76e108f8a396a2c616..a69ee30bc645d631b3170ad0f48161a2edb3e778 100644 GIT binary patch delta 896 zcmV-`1AqLaF`zL8Nl7XI%CQB(0e{r;G?VQF=Pfhbu|dPL`vE}F60H>i&eHVpI6mx~ z(>Koa#U&k56rD3SR1f_-O+a*wOG?o6ZBNPQR(yk};EJ`G#kk zA=$=znq@C8TcKt;CU>J}Ie+2}bV_UN_L6DJo}&h@I(k2;>KbmVscU+o>#IC^?z6A! zn&!!`E*k@>v+R3L&9`cseD%3dyQKlNZhOY-2E^2^{lD-SM+3p|oAv#|@f=Pc#c`Z$ z2HDae*hjgh0~K^puhZnPdA=9>GjZkzUbG(*X8+=08XcRpUtO*ha5yXhxO%W_{OjQuUr-Ux; zLr$zFk48uv?-|DId@}^Yk%V^x$LuS=8$ps2f5{$5tQ=_|B{9rcfj)6^B^Aa|467?5 z62x0A%ZPNnEleo1u<}MyB##BnajH!;O%i0=C`l8VbvP^Yls7%jv*g~d&NEc~H&BzL z{}D%1Dk_mgG8GhxQItffN1}9$r2JBdjV%~YNev7DQ}qmtog@*BIYCp^9aASH)fHI4 zYSgjZPgE?`bbOdr)ullSR#6poT)CAcRa)3}+;Lu@%I%b|Aog14X4%$dlW48hot<{9Y#0Cl8UY0W0RR91kQe{}8vz9X z0RR91m>2*6C;=lr-k24wcj#Dl-0?9iphNYy~Z`~-M!E6R(CslWz9ny z`wu#AJuV5z_Ox**6rtD3)aLrUV)jRB>YkW-b)Tg$d zR$F;%W3PSF2@Ja_<~ud@<}}yNnCsh27srNeo4YptTK3=h*|*D%wlm${&bvClJ}Q8B zcJWaoN#Hs>zp1N>%XW^aDr7dl-Z+L3nc@!^wUhVoZ^l7cS`BU?vsOfvYD7xz5&t1@}JoadPH#1u=W!pSN=ujagevhH2e`tw-&+_asG45y_3+_ZJR;w`rBndv+0pEWO1xEZo+-@}Z53s$}=$ojluPu0Ga z%U?%rdcDSK*1zo=vro4jxRgCx$#d1)s&}`yW<{4h-uUMBlCQgUt!=J-%9nm3?SCnT zpY`CqIqJNJKYV{Lc=Y3paOvZpB!lbsYSk<{e)2P4zs{o1y64U2I>!8RJhxp|Nc_T= z-u*t4zFL$kb6x)?oS%I2V*?Y@W*=rT;d+JXe!gu@|94f|Y&>tj{CeiMAAi5~XE47t zd-}HWAOD?&4}KruKfLV2uJ^CJ{vXia6!Yic1R0)5jsia7?AGtraP%M26gu{EB1 z>kdzN#V+8YpJG$tGEvK9qC)v<`s+;l~; z$yvo?IyEyT)h`$Ax9}^Ta@k5lc#FO2`Qj@#wV zV(QlPkbp2&R|!sbrR)V;*xn6hBn+RfQFzx~~v z<5l+cbdl?}TY|+==Dg?2W4EOq6}&5U>3Ck;^wyPCcf_aOua7f}-OsC?!NI`Az`)4N zz{tSB@P!G;1hOaJ5!cA{kzimDV`KqKgaIYRfox77T>uo9Vq^u2PXV%}q3k(8wg%K7 zpgCZ`0VI8y85nl4GBCseIp2VG&EjQX&=O!^SSiH7kSfZ+;5s>1LS7^TsKo=Q8srQZ F4FK-?ml^;7 diff --git a/backend/tests/test_2of5.c b/backend/tests/test_2of5.c index 7bdeb903..fa66e4f5 100644 --- a/backend/tests/test_2of5.c +++ b/backend/tests/test_2of5.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2020 - 2021 Robin Stuart + Copyright (C) 2020-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -349,11 +348,11 @@ static void test_encode(int index, int generate, int debug) { assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[8192 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -486,3 +485,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_aztec.c b/backend/tests/test_aztec.c index 33434925..851ceeda 100644 --- a/backend/tests/test_aztec.c +++ b/backend/tests/test_aztec.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2020 - 2021 Robin Stuart + Copyright (C) 2020-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -2440,11 +2439,11 @@ static void test_encode(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[22801 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -3022,3 +3021,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_code.c b/backend/tests/test_code.c index 42374641..d7fe073a 100644 --- a/backend/tests/test_code.c +++ b/backend/tests/test_code.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2020 - 2021 Robin Stuart + Copyright (C) 2020-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -464,11 +463,11 @@ static void test_encode(int index, int generate, int debug) { assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[8192 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -605,3 +604,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_code128.c b/backend/tests/test_code128.c index 29296312..e2da4079 100644 --- a/backend/tests/test_code128.c +++ b/backend/tests/test_code128.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2020 - 2021 Robin Stuart + Copyright (C) 2020-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* Note BARCODE_GS1_128, BARCODE_EAN14, BARCODE_NVE18 also tested in test_gs1.c */ @@ -831,11 +830,11 @@ static void test_encode(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[17984 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -972,3 +971,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_dmatrix.c b/backend/tests/test_dmatrix.c index 2c1217ff..2775d2cb 100644 --- a/backend/tests/test_dmatrix.c +++ b/backend/tests/test_dmatrix.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" #include "../gs1.h" @@ -976,11 +975,11 @@ static void test_input(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, modules_dump); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[144 * 144 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -1054,6 +1053,7 @@ static void test_encode(int index, int generate, int debug) { int option_2; int option_3; char *data; + int length; int ret; int expected_rows; @@ -1063,10 +1063,10 @@ static void test_encode(int index, int generate, int debug) { int expected_diff; // Difference between default minimal encodation and ISO encodation (FAST_MODE) char *expected; }; - // Verified manually against ISO/IEC 16022:2006, ISO/IEC 21471:2020, GS1 General Specifications 21.0.1 (GGS), ANSI/HIBC LIC 2.6-2016 (HIBC/LIC) and - // ANSI/HIBC PAS 1.3-2010 (HIBC/PAS), with noted exceptions + // Verified manually against ISO/IEC 16022:2006, ISO/IEC 21471:2020, GS1 General Specifications 21.0.1 (GGS), ANSI/HIBC LIC 2.6-2016 (HIBC/LIC), + // ANSI/HIBC PAS 1.3-2010 (HIBC/PAS) and AIM ITS/04-023:2022 (ECI Part 3: Register), with noted exceptions struct item data[] = { - /* 0*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "1234abcd", 0, 14, 14, 1, "", 0, + /* 0*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "1234abcd", -1, 0, 14, 14, 1, "", 0, "10101010101010" "11001010001111" "11000101100100" @@ -1082,7 +1082,7 @@ static void test_encode(int index, int generate, int debug) { "10011111000100" "11111111111111" }, - /* 1*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "1234abcd", 0, 14, 14, 1, "", 0, + /* 1*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "1234abcd", -1, 0, 14, 14, 1, "", 0, "10101010101010" "11001010001111" "11000101100100" @@ -1098,7 +1098,7 @@ static void test_encode(int index, int generate, int debug) { "10011111000100" "11111111111111" }, - /* 2*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "A1B2C3D4E5F6G7H8I9J0K1L2", 0, 18, 18, 1, "16022:2006 Figure 1", 0, + /* 2*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "A1B2C3D4E5F6G7H8I9J0K1L2", -1, 0, 18, 18, 1, "16022:2006 Figure 1", 0, "101010101010101010" "101000101010001111" "101100000111000010" @@ -1118,7 +1118,7 @@ static void test_encode(int index, int generate, int debug) { "100011000000100100" "111111111111111111" }, - /* 3*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "A1B2C3D4E5F6G7H8I9J0K1L2", 0, 18, 18, 1, "16022:2006 Figure 1", 0, + /* 3*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "A1B2C3D4E5F6G7H8I9J0K1L2", -1, 0, 18, 18, 1, "16022:2006 Figure 1", 0, "101010101010101010" "101000101010001111" "101100000111000010" @@ -1138,7 +1138,7 @@ static void test_encode(int index, int generate, int debug) { "100011000000100100" "111111111111111111" }, - /* 4*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "123456", 0, 10, 10, 1, "16022:2006 Figure O.2", 0, + /* 4*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "123456", -1, 0, 10, 10, 1, "16022:2006 Figure O.2", 0, "1010101010" "1100101101" "1100000100" @@ -1150,7 +1150,7 @@ static void test_encode(int index, int generate, int debug) { "1001110100" "1111111111" }, - /* 5*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "123456", 0, 10, 10, 1, "16022:2006 Figure O.2", 0, + /* 5*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "123456", -1, 0, 10, 10, 1, "16022:2006 Figure O.2", 0, "1010101010" "1100101101" "1100000100" @@ -1162,7 +1162,7 @@ static void test_encode(int index, int generate, int debug) { "1001110100" "1111111111" }, - /* 6*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "30Q324343430794\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", 0, 20, 20, 1, "HIBC/PAS 1.3-2010 Section 2.2 Patient Id Macro, same", 0, + /* 48*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, "[)>\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", -1, 0, 20, 20, 1, "HIBC/PAS 1.3-2010 Section 2.2 Patient Id Macro, same", 0, "10101010101010101010" "10000000001110001111" "11010101001010011100" @@ -2084,7 +2084,7 @@ static void test_encode(int index, int generate, int debug) { "11100110001010111010" "11111111111111111111" }, - /* 49*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", 0, 20, 20, 0, "HIBC/PAS 1.3-2010 Section 2.2 Patient Id Macro **NOT SAME** (see FAST_MODE); BWIPP same as FAST_MODE", 0, + /* 49*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R06\\G+/ACMRN123456/V2009121908334\\R\\E", -1, 0, 20, 20, 0, "HIBC/PAS 1.3-2010 Section 2.2 Patient Id Macro **NOT SAME** (see FAST_MODE); BWIPP same as FAST_MODE", 0, "10101010101010101010" "11111011001110001111" "11100100001010011100" @@ -2106,7 +2106,7 @@ static void test_encode(int index, int generate, int debug) { "11011111001010100010" "11111111111111111111" }, - /* 50*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/EO523201", 0, 14, 14, 1, "HIBC/PAS Section 2.2 Purchase Order, same", 0, + /* 50*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/EO523201", -1, 0, 14, 14, 1, "HIBC/PAS Section 2.2 Purchase Order, same", 0, "10101010101010" "10011001010101" "11101000011010" @@ -2122,7 +2122,7 @@ static void test_encode(int index, int generate, int debug) { "10010010000100" "11111111111111" }, - /* 51*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/EO523201", 0, 14, 14, 1, "HIBC/PAS Section 2.2 Purchase Order, same", 0, + /* 51*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/EO523201", -1, 0, 14, 14, 1, "HIBC/PAS Section 2.2 Purchase Order, same", 0, "10101010101010" "10011001010101" "11101000011010" @@ -2138,7 +2138,7 @@ static void test_encode(int index, int generate, int debug) { "10010010000100" "11111111111111" }, - /* 52*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, DM_SQUARE, "/EU720060FF0/O523201", 0, 18, 18, 1, "HIBC/PAS Section 2.2 2nd Purchase Order, same", 0, + /* 52*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, DM_SQUARE, "/EU720060FF0/O523201", -1, 0, 18, 18, 1, "HIBC/PAS Section 2.2 2nd Purchase Order, same", 0, "101010101010101010" "100110010100100001" "111011110110010110" @@ -2158,7 +2158,7 @@ static void test_encode(int index, int generate, int debug) { "111000010011001010" "111111111111111111" }, - /* 53*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_SQUARE, "/EU720060FF0/O523201", 0, 18, 18, 1, "HIBC/PAS Section 2.2 2nd Purchase Order, same", 0, + /* 53*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_SQUARE, "/EU720060FF0/O523201", -1, 0, 18, 18, 1, "HIBC/PAS Section 2.2 2nd Purchase Order, same", 0, "101010101010101010" "100110010100100001" "111011110110010110" @@ -2178,7 +2178,7 @@ static void test_encode(int index, int generate, int debug) { "111000010011001010" "111111111111111111" }, - /* 54*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/EU720060FF0/O523201/Z34H159/M9842431340", 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (left), same", 0, + /* 54*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/EU720060FF0/O523201/Z34H159/M9842431340", -1, 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (left), same", 0, "1010101010101010101010" "1001100101001000000011" "1110111101100001111010" @@ -2202,7 +2202,7 @@ static void test_encode(int index, int generate, int debug) { "1010110000010001001000" "1111111111111111111111" }, - /* 55*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/EU720060FF0/O523201/Z34H159/M9842431340", 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (left), same", 0, + /* 55*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/EU720060FF0/O523201/Z34H159/M9842431340", -1, 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (left), same", 0, "1010101010101010101010" "1001100101001000000011" "1110111101100001111010" @@ -2226,7 +2226,7 @@ static void test_encode(int index, int generate, int debug) { "1010110000010001001000" "1111111111111111111111" }, - /* 56*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, "[)>\\R06\\G+/EU720060FF0/O523201/Z34H159/M9842431340V\\R\\E", 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (right), same", 0, + /* 56*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, "[)>\\R06\\G+/EU720060FF0/O523201/Z34H159/M9842431340V\\R\\E", -1, 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (right), same", 0, "1010101010101010101010" "1000000000111010011101" "1101011100101001011100" @@ -2250,7 +2250,7 @@ static void test_encode(int index, int generate, int debug) { "1001110110011101101000" "1111111111111111111111" }, - /* 57*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R06\\G+/EU720060FF0/O523201/Z34H159/M9842431340V\\R\\E", 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (right), same", 0, + /* 57*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R06\\G+/EU720060FF0/O523201/Z34H159/M9842431340V\\R\\E", -1, 0, 22, 22, 1, "HIBC/PAS Section 2.2 3rd Purchase Order (right), same", 0, "1010101010101010101010" "1000000000111010011101" "1101011100101001011100" @@ -2274,7 +2274,7 @@ static void test_encode(int index, int generate, int debug) { "1001110110011101101000" "1111111111111111111111" }, - /* 58*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/E+/KN12345", 0, 16, 16, 1, "HIBC/PAS Section 2.2 Asset Tag **NOT SAME** check digit 'A' in figure is for '/KN12345', but actual data is as given here, when check digit is 'J'", 0, + /* 58*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/E+/KN12345", -1, 0, 16, 16, 1, "HIBC/PAS Section 2.2 Asset Tag **NOT SAME** check digit 'A' in figure is for '/KN12345', but actual data is as given here, when check digit is 'J'", 0, "1010101010101010" "1001101010001111" "1110001000101100" @@ -2292,7 +2292,7 @@ static void test_encode(int index, int generate, int debug) { "1001000000000010" "1111111111111111" }, - /* 59*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/E+/KN12345", 0, 16, 16, 0, "HIBC/PAS Section 2.2 Asset Tag **NOT SAME** see above; BWIPP same as FAST_MODE", 0, + /* 59*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/E+/KN12345", -1, 0, 16, 16, 0, "HIBC/PAS Section 2.2 Asset Tag **NOT SAME** see above; BWIPP same as FAST_MODE", 0, "1010101010101010" "1100011011001011" "1101100111000110" @@ -2310,7 +2310,7 @@ static void test_encode(int index, int generate, int debug) { "1001111001100010" "1111111111111111" }, - /* 60*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/LAH123/NC903", 0, 16, 16, 1, "HIBC/PAS Section 2.2 Surgical Instrument, same", 0, + /* 60*/ { BARCODE_HIBC_DM, FAST_MODE, -1, -1, -1, -1, "/LAH123/NC903", -1, 0, 16, 16, 1, "HIBC/PAS Section 2.2 Surgical Instrument, same", 0, "1010101010101010" "1001010001010001" "1110010100000100" @@ -2328,7 +2328,7 @@ static void test_encode(int index, int generate, int debug) { "1100000101010010" "1111111111111111" }, - /* 61*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/LAH123/NC903", 0, 16, 16, 0, "HIBC/PAS Section 2.2 Surgical Instrument **NOT SAME** (see FAST_MODE); BWIPP same as FAST_MODE", 0, + /* 61*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, "/LAH123/NC903", -1, 0, 16, 16, 0, "HIBC/PAS Section 2.2 Surgical Instrument **NOT SAME** (see FAST_MODE); BWIPP same as FAST_MODE", 0, "1010101010101010" "1111000001001111" "1110010001010110" @@ -2346,7 +2346,7 @@ static void test_encode(int index, int generate, int debug) { "1110011111101010" "1111111111111111" }, - /* 62*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, 7, -1, "[)>\\R06\\G18VD89536\\G1P8902A\\GS3122A02965\\R\\E", 0, 22, 22, 1, "ANSI MH10.8.17-2017 Figure 4 Macro06 **NOT SAME** 253-state randomising of padding in figure seems incorrect", 0, + /* 62*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, 7, -1, "[)>\\R06\\G18VD89536\\G1P8902A\\GS3122A02965\\R\\E", -1, 0, 22, 22, 1, "ANSI MH10.8.17-2017 Figure 4 Macro06 **NOT SAME** 253-state randomising of padding in figure seems incorrect", 0, "1010101010101010101010" "1101110000111001011011" "1010111010001010001110" @@ -2370,7 +2370,7 @@ static void test_encode(int index, int generate, int debug) { "1000001010010010110100" "1111111111111111111111" }, - /* 63*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, 7, -1, "[)>\\R06\\G18VD89536\\G1P8902A\\GS3122A02965\\R\\E", 0, 22, 22, 1, "ANSI MH10.8.17-2017 Figure 4 Macro06 **NOT SAME** 253-state randomising of padding in figure seems incorrect", 0, + /* 63*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, 7, -1, "[)>\\R06\\G18VD89536\\G1P8902A\\GS3122A02965\\R\\E", -1, 0, 22, 22, 1, "ANSI MH10.8.17-2017 Figure 4 Macro06 **NOT SAME** 253-state randomising of padding in figure seems incorrect", 0, "1010101010101010101010" "1101110000111001011011" "1010111010001010001110" @@ -2394,7 +2394,7 @@ static void test_encode(int index, int generate, int debug) { "1000001010010010110100" "1111111111111111111111" }, - /* 64*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, "[)>\\R06\\G25S0614141MH80312\\R\\E", 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B7", 0, + /* 64*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, "[)>\\R06\\G25S0614141MH80312\\R\\E", -1, 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B7", 0, "1010101010101010" "1101000010101111" "1011100001011100" @@ -2412,7 +2412,7 @@ static void test_encode(int index, int generate, int debug) { "1010101010001010" "1111111111111111" }, - /* 65*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R06\\G25S0614141MH80312\\R\\E", 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B7", 0, + /* 65*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R06\\G25S0614141MH80312\\R\\E", -1, 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B7", 0, "1010101010101010" "1101000010101111" "1011100001011100" @@ -2430,7 +2430,7 @@ static void test_encode(int index, int generate, int debug) { "1010101010001010" "1111111111111111" }, - /* 66*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, "[)>\\R05\\G80040614141MH80312\\R\\E", 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B8", 0, + /* 66*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, "[)>\\R05\\G80040614141MH80312\\R\\E", -1, 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B8", 0, "1010101010101010" "1111100010001111" "1010100001100100" @@ -2448,7 +2448,7 @@ static void test_encode(int index, int generate, int debug) { "1010000010101010" "1111111111111111" }, - /* 67*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R05\\G80040614141MH80312\\R\\E", 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B8", 0, + /* 67*/ { BARCODE_DATAMATRIX, DATA_MODE | ESCAPE_MODE, -1, -1, -1, -1, "[)>\\R05\\G80040614141MH80312\\R\\E", -1, 0, 16, 16, 1, "ANSI MH10.8.17-2017 Table B.1 B8", 0, "1010101010101010" "1111100010001111" "1010100001100100" @@ -2466,7 +2466,1217 @@ static void test_encode(int index, int generate, int debug) { "1010000010101010" "1111111111111111" }, - /* 68*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, 3, -1, -1, -1, "\101\300", 0, 12, 12, 1, "AÀ", 0, + /* 68*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 3, -1, -1, -1, "sn:7QPB4MN", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 3 Example 1", 0, + "1010101010101010" + "1001001011100001" + "1000111110110000" + "1100100110000001" + "1000110111101010" + "1100100110001111" + "1000010110000110" + "1000010000000001" + "1001101001111110" + "1001100011010111" + "1011100110011110" + "1000010111011101" + "1101000010001110" + "1110101001000101" + "1001011001111010" + "1111111111111111" + }, + /* 69*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 3, -1, -1, -1, "price:£20.00", -1, 0, 12, 26, 1, "AIM ITS/04-023:2022 ECI 3 Example 2", 0, + "10101010101010101010101010" + "10000111010111000110110001" + "10000101101010010011011000" + "11001010011000000101110111" + "10010101000100111011110110" + "11100111000100111100000001" + "11100101111110001101011100" + "10000011101101110011110011" + "11011100101111100110010110" + "10101101100110000001001011" + "11100101010110100111011000" + "11111111111111111111111111" + }, + /* 70*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 3, -1, -1, -1, "C:\\DOCS\\EXAMPLE.TXT", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 3 Example 3", 0, + "101010101010101010" + "100000001010011011" + "100010111000011100" + "110010001000010111" + "100011100110001110" + "110001010100010001" + "101000000010110100" + "111000000111100111" + "100010101110101110" + "111101011100000111" + "101101110100111010" + "110000101011100001" + "100110010100111110" + "100000000100010101" + "111011010100011000" + "101111000111101111" + "100110001010000100" + "111111111111111111" + }, + /* 71*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 4, -1, -1, -1, "Študentska št. 2198390", -1, 0, 20, 20, 0, "AIM ITS/04-023:2022 ECI 4 Example 1; BWIPP same as FAST_MODE", 0, + "10101010101010101010" + "10001110100110101111" + "10001101000001010110" + "11011010011101011001" + "10111110101000101110" + "11010110111111100111" + "10011001111111100000" + "10011111111111010001" + "11000110110101100100" + "11101101010011000011" + "10111110101011001110" + "10100100100110000101" + "10111010000001010010" + "10011010111010000001" + "10100010001110111000" + "10001101001000100111" + "10110101100001100110" + "11111110001010111101" + "11010000001001011010" + "11111111111111111111" + }, + /* 72*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 4, -1, 10, -1, "Szczegółowe dane kontaktowe:+48 22 694 60 00", -1, 0, 32, 32, 0, "AIM ITS/04-023:2022 ECI 4 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, + "10101010101010101010101010101010" + "10010010111100111011110110001111" + "10001111110010101000001000100000" + "11011101001100111001111111000101" + "10011101100110001100001101011110" + "11101101011101011001100000100101" + "11000111000010101110001010011110" + "11010100010000011000001100101111" + "11100010001100101001011100110110" + "11101011010001011001110000000001" + "10000101111001001011000111011000" + "10000110001011111011010001001111" + "10010101010000101001101110111000" + "10011001000101011111000011101101" + "11011111100011101100010000000010" + "11111111111111111111111111111111" + "10101010101010101010101010101010" + "10011011100000011001000100011101" + "11011100111100001111011111100100" + "11011011110010011111110101100011" + "11101111000110101101001000001000" + "10110101101110011111100100010011" + "10011001101101101001001000100000" + "10101010111010111100000011000111" + "10011011001000101010001001000010" + "10011101101000111010100010100101" + "11100000000001001110111100101110" + "10011011100010111011101110011101" + "11101101111111101110111001010100" + "10001010101011111111110010011101" + "11001100101101101010010101100000" + "11111111111111111111111111111111" + }, + /* 73*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 5, -1, -1, DM_SQUARE, "Liĥtenŝtejno", -1, 0, 18, 18, 0, "AIM ITS/04-023:2022 ECI 5 Example 1; BWIPP different encodation", 0, + "101010101010101010" + "100101101010111011" + "100011010100011110" + "111010101110110111" + "100001111010000110" + "111100110100011001" + "111111110000101000" + "110111110111011111" + "101101101001101110" + "101011010001100011" + "110100011000000110" + "111101010011111011" + "101010100110001100" + "100010001100010111" + "110101100101101010" + "100010011100100101" + "110001011101010110" + "111111111111111111" + }, + /* 74*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 6, -1, -1, DM_SQUARE, "Lietuvą", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 6 Example 1", 0, + "1010101010101010" + "1001011011110111" + "1000010100001110" + "1111100101001101" + "1001110010001110" + "1111010011100111" + "1110100001010110" + "1100000101010001" + "1101101001001100" + "1110101111100011" + "1101111011100110" + "1011100001101101" + "1011000111011100" + "1100101001001101" + "1100100101110010" + "1111111111111111" + }, + /* 75*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 7, -1, -1, DM_SQUARE, "Россия", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 7 Example 1", 0, + "1010101010101010" + "1001110110001111" + "1001101010110100" + "1000101100100101" + "1001100010101000" + "1110010011110111" + "1100000001110110" + "1111100110000001" + "1010001010001110" + "1001110101110011" + "1011111000110000" + "1011011010100111" + "1101110011100110" + "1000011010101101" + "1010110001000010" + "1111111111111111" + }, + /* 76*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 7, -1, -1, DM_SQUARE, "Монголулс", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 7 Example 2", 0, + "101010101010101010" + "100111100010010101" + "100110000111111110" + "100010111010101111" + "100100001110101110" + "111000111100001001" + "110000100010111110" + "110100010111111111" + "101110001001110010" + "100011100101100111" + "110001001010011100" + "100101010001110101" + "100111110110111000" + "101001010101111001" + "110011000110000000" + "101111110101011001" + "110100011110000100" + "111111111111111111" + }, + /* 77*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 8, -1, -1, DM_SQUARE, "جواز السفر", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 8 Example 1", 0, + "101010101010101010" + "100111100010000001" + "100110001111110010" + "100111111010101111" + "100100001010101110" + "111010111100010001" + "110100100010111010" + "111100100111011001" + "111011111001110010" + "101111001111111001" + "110010100101010100" + "101110100110100011" + "111100100010101110" + "110010000001110111" + "100000010011010100" + "101111111100011101" + "101100011100001010" + "111111111111111111" + }, + /* 78*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 8, -1, -1, -1, "المنشأ: المملكة العربية السعودية", -1, 0, 24, 24, 1, "AIM ITS/04-023:2022 ECI 8 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + "101010101010101010101010" + "100111010010111011001011" + "100110111100000010010000" + "100111000000111111001101" + "100101110011111110100010" + "111001010001001001101111" + "111101010101110101101110" + "111100001011010001101001" + "101011110001111111000110" + "100011100010010100001011" + "101011100111000111010010" + "111101010101001011010111" + "100000001011111111110110" + "110010000011010101000101" + "101010110001010010010010" + "111011000011110111111011" + "111100001100000111000110" + "111100010101100000100011" + "101111110010011001101110" + "100001110110010001100101" + "101010101000001101111100" + "110101100100100111001101" + "100111000101101010110010" + "111111111111111111111111" + }, + /* 79*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 9, -1, -1, DM_SQUARE, "Μέρος #. α123", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 9 Example 1", 0, + "101010101010101010" + "100111100100000011" + "100110001111001100" + "101011100001110111" + "100100011010100110" + "110111001000011001" + "101110100000101000" + "101110010110111101" + "101111101000101100" + "100000110010100111" + "111010011011010100" + "110101010110001101" + "111110011101000010" + "101100110111110101" + "101011110001111000" + "111110011110011011" + "111100011110101000" + "111111111111111111" + }, + /* 80*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 10, -1, -1, -1, "דרכון", -1, 0, 8, 32, 1, "AIM ITS/04-023:2022 ECI 10 Example 1", 0, + "10101010101010101010101010101010" + "10011101110010011001011101110101" + "10011110001001001011101011110100" + "10110010001000011011100111101101" + "11011110000110101111101011010010" + "11111110111110011001000100101111" + "11010100010001101010000011101010" + "11111111111111111111111111111111" + }, + /* 81*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 10, -1, -1, -1, "מספר חלק: A20200715001", -1, 0, 20, 20, 0, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + "10101010101010101010" + "10011110011111000111" + "10011101101010101110" + "10110111101100111001" + "10010101111010010100" + "11110010110001000001" + "10011011101000111110" + "10110010000111000011" + "10011111010101010000" + "10111100110011010101" + "11001000110110100100" + "10111100100000111101" + "10101001000011001110" + "11000110100101000001" + "10011110101101011000" + "10000110110111011111" + "10110001001101110100" + "11100100101110010101" + "11000111100100101010" + "11111111111111111111" + }, + /* 82*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 10, -1, -1, -1, "מספר חלק: A20200715001", -1, 0, 20, 20, 1, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** different encodation", 0, + "10101010101010101010" + "10011101100001000111" + "10011111111110010110" + "10110111101101001001" + "10010101111011010100" + "11110010110100101101" + "10011011101101111010" + "10110010001101100011" + "10011110001010100010" + "10111101001110011101" + "11001000111010000100" + "10110001001011000101" + "10000101101011001010" + "11110110001101010101" + "10010111111001100100" + "10011101010100110111" + "10111011001110011010" + "11110101100100001101" + "11000111010001111010" + "11111111111111111111" + }, + /* 83*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 11, -1, -1, -1, "Amerika Birleşik Devletleri", -1, 0, 22, 22, 0, "AIM ITS/04-023:2022 ECI 11 Example 1 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + "1010101010101010101010" + "1000101011001011000001" + "1001111101111001101100" + "1100101110111111111011" + "1001111000001110111000" + "1111011101001001000011" + "1110110000001101101010" + "1010011101010101100111" + "1110010001101000110110" + "1001000101111010101001" + "1110011011110111010000" + "1100110101100001100011" + "1100110000000000101010" + "1001011001011010011101" + "1101011110000110010010" + "1100111000110011110101" + "1011010110110111000010" + "1011111110101100100001" + "1110100000001110110100" + "1101100010010110011111" + "1110010000010000011110" + "1111111111111111111111" + }, + /* 84*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 11, -1, -1, -1, "Amerika Birleşik Devletleri", -1, 0, 22, 22, 1, "AIM ITS/04-023:2022 ECI 11 Example 1 **NOT SAME** different encodation", 0, + "1010101010101010101010" + "1001110011001011001001" + "1001111001111001110100" + "1100000110111110100011" + "1001011000001110110000" + "1111011101001000110011" + "1110110000001101001000" + "1010011101010101110111" + "1110010001101011101110" + "1001000101111000001001" + "1110011011110011000100" + "1100110101100100101111" + "1100110000000101011010" + "1001011001100001100001" + "1101011110100001100100" + "1100111001000111011101" + "1011011100010000111010" + "1011110101000111110001" + "1110110111010111100000" + "1101110111000000010011" + "1110111101000010011110" + "1111111111111111111111" + }, + /* 85*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 11, -1, -1, -1, "Biniş kartı #120921039", -1, 0, 20, 20, 0, "AIM ITS/04-023:2022 ECI 11 Example 2; BWIPP different encodation", 0, + "10101010101010101010" + "10001110101011111111" + "10010101011000110110" + "11001010110110010001" + "10011111100000111010" + "11101010111000111011" + "11010100101001000000" + "10101010001011000001" + "11110110110010001010" + "10010000100110111011" + "11001001111000001110" + "10010100000101101111" + "11101111000001110100" + "11000001110100111111" + "10101110011101100000" + "11111011111011101101" + "11010011001001110000" + "10101100011011001101" + "10000100110101011010" + "11111111111111111111" + }, + /* 86*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 12, -1, -1, -1, "Kūrybiškumą", -1, 0, 12, 26, 0, "AIM ITS/04-023:2022 ECI 12 Example 1 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + "10101010101010101010101010" + "10010010000111001101100011" + "10011111110110110110111000" + "11011100100001101101111111" + "10011100000110010100001110" + "11000100011101011100010001" + "10000100101011100011011010" + "10100101000001111110101001" + "11010001001001001000011100" + "10111001001111010000000101" + "10011101110100000011000100" + "11111111111111111111111111" + }, + /* 87*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 12, -1, -1, -1, "Kūrybiškumą", -1, 0, 12, 26, 1, "AIM ITS/04-023:2022 ECI 12 Example 1 **NOT SAME** different encodation", 0, + "10101010101010101010101010" + "10011110000111001010011111" + "10010001010110110011110000" + "11011100100001101000000111" + "10011110000110000000100110" + "11000100011100111011101001" + "10000100101011000010101010" + "10100101000100100110000001" + "11010010001010110101011000" + "11111001101111110000010001" + "11000101010100110000011010" + "11111111111111111111111111" + }, + /* 88*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 13, -1, -1, -1, "บาร๋แค่ด", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 13 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + "1010101010101010" + "1001110100011001" + "1001101111101000" + "1110100100111111" + "1001110111011110" + "1101001000100111" + "1110001010011110" + "1110111010010001" + "1111111001100010" + "1001000000100101" + "1100101010000100" + "1100010011100011" + "1100000011101000" + "1000011111010101" + "1001010001001010" + "1111111111111111" + }, + /* 89*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 15, -1, -1, -1, "uzņēmums", -1, 0, 16, 16, 0, "AIM ITS/04-023:2022 ECI 15 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + "1010101010101010" + "1001101111101001" + "1010110111010100" + "1000101010000001" + "1001011110010000" + "1111001100011111" + "1101110101111110" + "1010111001100001" + "1111100011000010" + "1011100000101111" + "1101000010001000" + "1110000111000111" + "1001010000011010" + "1101001001100101" + "1110011001011010" + "1111111111111111" + }, + /* 90*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 16, -1, -1, -1, "ṁórṡáċ", -1, 0, 8, 32, 1, "AIM ITS/04-023:2022 ECI 16 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010101010101010101010" + "10011101001100111111001100100101" + "10101011110110101011000000111100" + "10011001010000111001101100000001" + "11010010010000001010011001001110" + "11110110101100011111111110011101" + "11101100010001001001011110100100" + "11111111111111111111111111111111" + }, + /* 91*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 17, -1, -1, -1, "Price: €13.50", -1, 0, 12, 26, 1, "AIM ITS/04-023:2022 ECI 17 Example 1", 0, + "10101010101010101010101010" + "10000111000111101110001001" + "10100101110010111101000010" + "10101011110111010110100111" + "10010101011010010000100110" + "11100000110001000100010001" + "11100100110010110111101100" + "10000001101110111010011011" + "11011100101111110001001110" + "10101101110001111000111101" + "10100111000100011110100110" + "11111111111111111111111111" + }, + /* 92*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 18, -1, -1, -1, "Te słowa są głębokie", -1, 0, 22, 22, 0, "AIM ITS/04-023:2022 ECI 18 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + "1010101010101010101010" + "1001011001001010011011" + "1010001101110111011000" + "1011100010011110110111" + "1001001100010100000100" + "1111011101010000101101" + "1110010000110101100100" + "1000110111110101011111" + "1110000000001000110110" + "1111110111111001001001" + "1110010001111100101010" + "1110100011100100111111" + "1101011101010010001010" + "1011011000011101110111" + "1100001001111010101110" + "1011000111000111100101" + "1000001001000010111110" + "1010010010111111100001" + "1100110001011001111000" + "1110101010111001011011" + "1011000010010101000110" + "1111111111111111111111" + }, + /* 93*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 20, -1, -1, -1, "バーコード", -1, 0, 12, 26, 0, "AIM ITS/04-023:2022 ECI 20 Example 1 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + "10101010101010101010101010" + "10011110011111011010110101" + "10100100010101100010110110" + "11011010011110110101110111" + "10111111011000110101101110" + "11110110100001110010111001" + "10001000110010011001110110" + "11100110101110111000101101" + "10100100101011100010101100" + "11100010001011010011110111" + "11000110001100101101001010" + "11111111111111111111111111" + }, + /* 94*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 20, -1, -1, DM_SQUARE, "東京都", -1, 0, 16, 16, 0, "AIM ITS/04-023:2022 ECI 20 Example 2 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + "1010101010101010" + "1001110111101011" + "1010011001101010" + "1101111100001101" + "1000111010111110" + "1100110011010111" + "1011000011111110" + "1000100111111001" + "1111100000001010" + "1111000101101011" + "1010110001100000" + "1110010000001001" + "1001011000001110" + "1110111011010101" + "1010010001000010" + "1111111111111111" + }, + /* 95*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 21, -1, -1, -1, "Študentska št. 2198390", -1, 0, 20, 20, 0, "AIM ITS/04-023:2022 ECI 21 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + "10101010101010101010" + "10001100100001100111" + "10100101100110111110" + "11101100001010110001" + "10111011100101011110" + "11101101000100110001" + "11111011100011001110" + "11000000111110011001" + "11100111111110101000" + "11000111111000011001" + "11011011010111011110" + "11100101100111011011" + "11111011111100110010" + "11010100101010011001" + "11101100100010111110" + "11110000011100100001" + "10011011000111010100" + "11111100011000100101" + "11010010011010100010" + "11111111111111111111" + }, + /* 96*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 22, -1, -1, DM_SQUARE, "Россия", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 22 Example 1", 0, + "1010101010101010" + "1001110111011111" + "1010101011100000" + "1111111101000011" + "1001100010101000" + "1111010011011111" + "1000000001100110" + "1011100100000001" + "1010101000111000" + "1001111010011001" + "1101100010010000" + "1011011010001001" + "1110100000111100" + "1001011100110101" + "1011010001101010" + "1111111111111111" + }, + /* 97*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 22, -1, -1, DM_SQUARE, "Монголулс", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 22 Example 2", 0, + "101010101010101010" + "100111100100010101" + "101010000001111110" + "111111111010101111" + "100100010110101110" + "111100111100011001" + "100001000010111100" + "100110010111100101" + "101000111000100010" + "100011110100101111" + "111011111000101000" + "100111100001100101" + "100011110010101010" + "100000110010101001" + "110111010111100000" + "100110011101011001" + "101100011000000110" + "111111111111111111" + }, + /* 98*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 23, -1, -1, -1, "bœuf", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 23 Example 1", 0, + "10101010101010" + "10001110110001" + "10110001110100" + "10000110111101" + "10011010110010" + "11110101110101" + "11110010010000" + "10001111000111" + "11110111110110" + "10000001100001" + "11010110100000" + "10010000100111" + "11000001001110" + "11111111111111" + }, + /* 99*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 24, -1, -1, DM_SQUARE, "جواز السفر", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 24 Example 1", 0, + "101010101010101010" + "100111100010000001" + "101110001110110010" + "100111111110101111" + "100100001010101110" + "111010111100011001" + "110000010010100010" + "111101110110110001" + "111011011001101010" + "101111100101000111" + "110000010001000010" + "101111110011000011" + "110001010110100110" + "110010011100010111" + "111110101000110000" + "101111100010001011" + "110100011110001010" + "111111111111111111" + }, + /*100*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 24, -1, -1, -1, "المنشأ: المملكة العربية السعودية", -1, 0, 24, 24, 1, "AIM ITS/04-023:2022 ECI 24 Example 2", 0, + "101010101010101010101010" + "100111010010001001001011" + "101110111100001110010010" + "100111000000111111011011" + "100101110011101110101110" + "111001010001001001101111" + "110111010100010101101110" + "111100001001000110001001" + "111011111001111100101010" + "100011100010010101011111" + "101011100111100110010100" + "111101010101101010010011" + "100000001011110011010100" + "110010000001000011100101" + "101010110101010110001010" + "111011110111011101000001" + "100100011011100100110010" + "111100001100111100001111" + "101110101011010110101110" + "100001100100001100100001" + "101110110011010001010110" + "110001111011100111011101" + "101111000110001010111010" + "111111111111111111111111" + }, + /*101*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, -1, -1, -1, "条码", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 25 Example 1", 0, + "10101010101010" + "10000010011111" + "10110101011100" + "10101111001101" + "10000011101100" + "11000000010111" + "10010000010100" + "10000100010111" + "10101101011110" + "11001100011001" + "11111010000010" + "10011010101101" + "10011101010100" + "11111111111111" + }, + /*102*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 25, -1, -1, -1, "バーコード", -1, 0, 12, 26, 1, "AIM ITS/04-023:2022 ECI 25 Example 2", 0, + "10101010101010101010101010" + "10011110010000001001101001" + "10110000101111001011001010" + "10100111011011101110100111" + "10011000011000010000110110" + "11010010110001100111100001" + "11010110110011000110001100" + "10110011101011011111000001" + "10010111101001011101001100" + "11100100000101010101100011" + "11000100100011011100111100" + "11111111111111111111111111" + }, + /*103*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, -1, -1, -1, "바코드", -1, 0, 8, 32, 1, "AIM ITS/04-023:2022 ECI 25 Example 3 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010101010101010101010" + "10011101000111111101100100000101" + "10111011100010101000011111001100" + "10101011100111111110100111110101" + "11100001000110001100000000111010" + "11010111110011111111000101100111" + "11110100011001101010111111010110" + "11111111111111111111111111111111" + }, + /*104*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, DM_SQUARE, "条码", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 26 Example 1", 0, + "1010101010101010" + "1001110111110101" + "1011111011000100" + "1011010100111001" + "1000010010010100" + "1101110011001111" + "1011100000010110" + "1110100111001001" + "1010111100111110" + "1110010111011111" + "1100111010000100" + "1011111101000011" + "1111111101100100" + "1000011100010101" + "1001110001111010" + "1111111111111111" + }, + /*105*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, -1, "バーコード", -1, 0, 20, 20, 1, "AIM ITS/04-023:2022 ECI 26 Example 2", 0, + "10101010101010101010" + "10011110001010000111" + "10111111000100111110" + "10110011010001010001" + "10001110001111011010" + "11000011100100001011" + "10101010000101000000" + "10110001001001100101" + "10001010000000001000" + "11110010000011010101" + "10001010010001011010" + "11100001110010000001" + "10110010011000110000" + "10011010010111000111" + "11111111110100000110" + "11010100111101001001" + "11001010010001101000" + "11101000000101101101" + "11000101001001010010" + "11111111111111111111" + }, + /*106*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, DM_SQUARE, "바코드", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 26 Example 3", 0, + "101010101010101010" + "100111100000010101" + "101111000110111110" + "101101010101101111" + "100011101010101110" + "111100111100001001" + "100100110010110010" + "101010010110000111" + "100101011000001010" + "100100001110010001" + "100011010111100000" + "100011100010101101" + "111111010100001010" + "110010001001001001" + "100111011011000110" + "100110110111011111" + "101100010110000100" + "111111111111111111" + }, + /*107*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 27, -1, -1, -1, "sn:7QPB4MN", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 27 Example 1", 0, + "1010101010101010" + "1001001011000001" + "1011111111011000" + "1100100111101001" + "1000110111011100" + "1100100110000111" + "1000010110101110" + "1000010011010001" + "1001101001110110" + "1001100011110011" + "1011000000011110" + "1000110001100001" + "1110101111011010" + "1110001011011101" + "1001011001110010" + "1111111111111111" + }, + /*108*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 28, -1, -1, -1, "條碼", -1, 0, 14, 14, 0, "AIM ITS/04-023:2022 ECI 28 Example 1 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example except does not set explicit BASE256 byte count", 0, + "10101010101010" + "10011101101111" + "10111001001100" + "11010111110001" + "10011010100010" + "11111111100101" + "11010001010100" + "11000100010111" + "10110010111110" + "10011001011001" + "10000111110010" + "11110001100001" + "10101101000110" + "11111111111111" + }, + /*109*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 29, -1, -1, -1, "条码", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 29 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010" + "10011101000111" + "10111011101100" + "11101111110101" + "10010001000000" + "11110000101001" + "11111100101110" + "11100000001111" + "11011110100110" + "10000000101001" + "10111010101110" + "10100011110101" + "11001101000100" + "11111111111111" + }, + /*110*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 29, -1, -1, -1, "北京", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 29 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010" + "10011101000101" + "10111011100110" + "11100110001111" + "10001011110100" + "11110000010111" + "11011111000000" + "11000100101111" + "11001101001110" + "10100100101001" + "10000101101110" + "10011001110001" + "10101101000110" + "11111111111111" + }, + /*111*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 30, -1, -1, -1, "바코드", -1, 0, 8, 32, 1, "AIM ITS/04-023:2022 ECI 30 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010101010101010101010" + "10011101010000111110011110001101" + "10111011100001101011001100110000" + "11111001111110111010010000010001" + "11011010110111101010001000101010" + "11011111001011111001111111100111" + "11011100010101101110100010101010" + "11111111111111111111111111111111" + }, + /*112*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 30, -1, -1, -1, "서울", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 30 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010" + "10011101010111" + "10111011100110" + "11111011101101" + "10000000001100" + "11101010010111" + "11111000111000" + "11000111001111" + "11101101011110" + "11110110000001" + "10110010011110" + "11011101100001" + "11001101000110" + "11111111111111" + }, + /*113*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "条码", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 31 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010" + "10011101010111" + "11001011110100" + "10001111000101" + "10010001011100" + "11110011111001" + "11111010101000" + "11110100011111" + "11001001011110" + "10011000100001" + "11100001000110" + "11000111110101" + "11000111000100" + "11111111111111" + }, + /*114*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "北京", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 31 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010" + "10011101010101" + "11001011111110" + "10000110111111" + "10001011101000" + "11110011000111" + "11011001000110" + "11010000111111" + "11011010110110" + "10111100100001" + "11011110000110" + "11111101110001" + "10100111000110" + "11111111111111" + }, + /*115*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 31, -1, -1, -1, "條碼", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 31 Example 3 **NOT SAME** different encodation (example uses binary)", 0, + "10101010101010" + "10001101110001" + "11000100010000" + "10001011110011" + "10111011000000" + "11101111000101" + "10011100000110" + "11010101100111" + "10101011010110" + "10000111111001" + "11000110110000" + "11001111101011" + "10110111010010" + "11111111111111" + }, + /*116*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "条码", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 32 Example 1 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010" + "10011101011111" + "11001011111000" + "10011110010101" + "10010000011000" + "11110011000001" + "11111001000010" + "11100101010111" + "11011110110110" + "10010011011001" + "10001110010010" + "10110101101101" + "11000001000100" + "11111111111111" + }, + /*117*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "北京", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 32 Example 2 **NOT SAME** example sets explicit BASE256 byte count", 0, + "10101010101010" + "10011101011101" + "11001011110010" + "10010111101111" + "10001010101100" + "11110011111111" + "11011010101100" + "11000001110111" + "11001101011110" + "10110111011001" + "10110001010010" + "10001111101001" + "10100001000110" + "11111111111111" + }, + /*118*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, -1, "條碼", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 32 Example 3 **NOT SAME** different encodation (example uses binary)", 0, + "10101010101010" + "10001101111001" + "11000100011100" + "10011010100011" + "10111010000100" + "11101111111101" + "10011111101100" + "11000100101111" + "10111100111110" + "10001100000001" + "10101001100100" + "10111101110011" + "10110001010010" + "11111111111111" + }, + /*119*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "པེ་ཅིང།", -1, 0, 24, 24, 0, "AIM ITS/04-023:2022 ECI 32 Example 4 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + "101010101010101010101010" + "100111110000011010000101" + "110001010011101011111000" + "100110100010001000000001" + "101010111101111000100010" + "111100101011010111001111" + "101001001000011100000110" + "101000101100101001110001" + "100001001111101011100100" + "111010001100111101101101" + "100011010001011011110000" + "110010010111110001101011" + "101101111000101100010010" + "110000111010011001110111" + "101111000010001111001100" + "101001000110000010101101" + "101011101110010001100100" + "100101000100111011001101" + "111101101010011000011010" + "111110011100101001001111" + "100010111101101000111100" + "111001111000001100100101" + "110001000101110010010010" + "111111111111111111111111" + }, + /*120*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "バーコード", -1, 0, 18, 18, 1, "AIM ITS/04-023:2022 ECI 32 Example 5", 0, + "101010101010101010" + "100111100000000001" + "110010001111110010" + "100101001110101111" + "100100110010101110" + "110100010000010001" + "110100100010100110" + "100101110111001001" + "101001001001110100" + "111011101000110011" + "110101001000010110" + "100010101000110001" + "110111110111101000" + "111011011001100101" + "101001011011110000" + "101111010001101001" + "101100011101111000" + "111111111111111111" + }, + /*121*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, -1, -1, DM_SQUARE, "바코드", -1, 0, 18, 18, 0, "AIM ITS/04-023:2022 ECI 32 Example 6 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + "101010101010101010" + "100111100000001111" + "110001010011000100" + "100110100011110111" + "101011111110100110" + "111100110100011001" + "100100100000100000" + "101000110111110001" + "101001001000001000" + "111100011010000111" + "100001001010100000" + "111011011010000111" + "111010101010001010" + "101001100101100111" + "101101011010111010" + "110111110000100111" + "101100010101010110" + "111111111111111111" + }, + /*122*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, -1, "条码", -1, 0, 14, 14, 1, "AIM ITS/04-023:2022 ECI 33 Example 1", 0, + "10101010101010" + "10001010110111" + "11000000010100" + "10100000001001" + "10010101100000" + "11111000100001" + "10001100000010" + "10011110011111" + "10101010010110" + "10101011001001" + "10110010011110" + "11110100111101" + "10010001000100" + "11111111111111" + }, + /*123*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, DM_SQUARE, "バーコード", -1, 0, 18, 18, 0, "AIM ITS/04-023:2022 ECI 33 Example 2 **NOT SAME** Zint switches to ASCII 1 char before end; BWIPP same as example", 0, + "101010101010101010" + "100111100010010001" + "110010000100110010" + "101011100010101111" + "101010011010101110" + "111100110000011001" + "100101010010100100" + "110000100110100001" + "100001011001010010" + "111000011111011101" + "111001011000110110" + "111001011110000111" + "111110001110011010" + "111101110110011101" + "110111001100001000" + "110111010110011001" + "111100010111101010" + "111111111111111111" + }, + /*124*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, -1, -1, -1, "바코드", -1, 0, 8, 32, 0, "AIM ITS/04-023:2022 ECI 33 Example 3 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + "10101010101010101010101010101010" + "10010110001111011011011000110101" + "11001111111100101000100000101000" + "10101010110011011010101011101001" + "11001001010111101111001001100010" + "11111001001000011000100000000011" + "11110010110110101110001111110110" + "11111111111111111111111111111111" + }, + /*125*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 33, -1, -1, -1, "바코드", -1, 0, 8, 32, 1, "AIM ITS/04-023:2022 ECI 33 Example 3 **NOT SAME** different encodation", 0, + "10101010101010101010101010101010" + "10011101001111011010111110010101" + "11000011111111101000110111000100" + "10100000110010111111011010110001" + "11000001010111001000101111100010" + "11111111000000011001110101101111" + "11110100011100101110011010101000" + "11111111111111111111111111111111" + }, + /*126*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, -1, "条码", -1, 0, 8, 32, 1, "AIM ITS/04-023:2022 ECI 34 Example 1", 0, + "10101010101010101010101010101010" + "10000100000001011001100100101101" + "11000100100001001101100101100100" + "10111010000110111100110000101101" + "11010000001011001000011010110010" + "11100000010100111100110101101011" + "11010000001111101100000001100110" + "11111111111111111111111111111111" + }, + /*127*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, -1, "バーコード", -1, 0, 22, 22, 0, "AIM ITS/04-023:2022 ECI 34 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, + "1010101010101010101010" + "1000010001011111000001" + "1100000010110010010000" + "1011110000010011001001" + "1011001000111010010010" + "1110010000101001001011" + "1011101110111101010000" + "1011111000010101100111" + "1010110110101000110110" + "1010000011111001101001" + "1000100111111111110100" + "1011101011101111100011" + "1101100101100000011000" + "1100011000010100101011" + "1111001010000011111100" + "1111000101010110000011" + "1110001011000011100110" + "1110010101000001110101" + "1010101000111011110110" + "1000001001000110011101" + "1101110000000101011100" + "1111111111111111111111" + }, + /*128*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, -1, -1, DM_SQUARE, "바코드", -1, 0, 18, 18, 0, "AIM ITS/04-023:2022 ECI 34 Example 3 **NOT SAME** different encodation; BWIPP same as FAST_MODE", 0, + "101010101010101010" + "100001000101111111" + "110011001011000000" + "101110001001110111" + "101011101110110110" + "110010000000010001" + "111001110000111010" + "110111010111011001" + "100011011001110010" + "101000000111010001" + "100000101011011110" + "101100011100110111" + "101100010100110000" + "111111100111000001" + "100001000011011000" + "100000101110010011" + "101000000011010110" + "111111111111111111" + }, + /*129*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 34, -1, -1, DM_SQUARE, "바코드", -1, 0, 18, 18, 0, "AIM ITS/04-023:2022 ECI 34 Example 3 **NOT SAME** different encodation", 0, + "101010101010101010" + "100111100101111111" + "110011011011000000" + "101110101001110111" + "101010001110110110" + "110000000000011001" + "110101110000111010" + "110111010110100001" + "100011011000011110" + "101000011000101111" + "100011011111111000" + "101110111100011111" + "101101011010001000" + "110111011110011001" + "111000001110001000" + "100111100000010111" + "101100011111010100" + "111111111111111111" + }, + /*130*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, -1, "条码", -1, 0, 8, 32, 1, "AIM ITS/04-023:2022 ECI 35 Example 1", 0, + "10101010101010101010101010101010" + "10001010101001011001011111111101" + "11000000011111001011101110100000" + "11000000000110111000110111011101" + "11000010001110001111001100111110" + "11000010101100011100010000001011" + "11001100011110001000101111100010" + "11111111111111111111111111111111" + }, + /*131*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, -1, "バーコード", -1, 0, 22, 22, 0, "AIM ITS/04-023:2022 ECI 35 Example 2 **NOT SAME** different encodation; BWIPP different encodation", 0, + "1010101010101010101010" + "1001111010111100010001" + "1100100000010110000000" + "1100111001000110010101" + "1010100000110100011010" + "1111001100101000111011" + "1001010110011101101100" + "1110011011010101011111" + "1000010010101011011110" + "1000000111111000011001" + "1111100111110011001000" + "1111110011101010000001" + "1100000101000111111000" + "1100111000001001100101" + "1011101010011011100000" + "1101000100111000010101" + "1010000001011110010100" + "1000010110001001000101" + "1000011101101100111000" + "1001011111010100100111" + "1000011100010000111100" + "1111111111111111111111" + }, + /*132*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, -1, -1, DM_SQUARE, "바코드", -1, 0, 18, 18, 0, "AIM ITS/04-023:2022 ECI 35 Example 3 **NOT SAME** different encodation; BWIPP different encodation", 0, + "101010101010101010" + "100101100010110001" + "110011111110000010" + "110011000101000111" + "100010100010001110" + "111110110000011001" + "101101010000110000" + "111101100111001101" + "100100011001111100" + "110111100000101011" + "101001011010101000" + "111111001010001101" + "110001011011010100" + "111100111001011101" + "111011010101100100" + "110000000111111111" + "110010110111000000" + "111111111111111111" + }, + /*133*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 170, -1, -1, -1, "sn:7QPB4MN", -1, 0, 16, 16, 1, "AIM ITS/04-023:2022 ECI 170 Example 1", 0, + "1010101010101010" + "1101001101000101" + "1000011000100000" + "1000101000101001" + "1011111101000010" + "1110000100111111" + "1011011000011110" + "1010011011010001" + "1000111011000100" + "1110001110110001" + "1000111001111000" + "1000100110001001" + "1101001101010000" + "1010000010100101" + "1101110101101010" + "1111111111111111" + }, + /*134*/ { BARCODE_DATAMATRIX, DATA_MODE, 899, -1, -1, -1, "\000\001\002\133\134\135\375\376\377", 9, 0, 12, 26, 0, "AIM ITS/04-023:2022 ECI 899 Example 1 **NOT SAME** different encodation; BWIPP different encodation", 0, + "10101010101010101010101010" + "11001100001001010101010111" + "10000000111000111010100110" + "10110001100110100000111111" + "10000101001011001101100110" + "11000011110001000000110001" + "11011011110011111011110000" + "11101110101110100010110101" + "10001101101001001110101110" + "10010110100111110011110111" + "10010010000010011010010100" + "11111111111111111111111111" + }, + /*135*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, 3, -1, -1, -1, "\101\300", -1, 0, 12, 12, 1, "AÀ", 0, "101010101010" "100010101111" "100001011110" @@ -2480,7 +3690,7 @@ static void test_encode(int index, int generate, int debug) { "100011011010" "111111111111" }, - /* 69*/ { BARCODE_DATAMATRIX, DATA_MODE, 3, -1, -1, -1, "\101\300", 0, 12, 12, 1, "AÀ", 0, + /*136*/ { BARCODE_DATAMATRIX, DATA_MODE, 3, -1, -1, -1, "\101\300", -1, 0, 12, 12, 1, "AÀ", 0, "101010101010" "100010101111" "100001011110" @@ -2494,7 +3704,7 @@ static void test_encode(int index, int generate, int debug) { "100011011010" "111111111111" }, - /* 70*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 26, -1, -1, -1, "AÀ", 0, 14, 14, 1, "AÀ", 0, + /*137*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, 26, -1, -1, -1, "AÀ", -1, 0, 14, 14, 1, "AÀ", 0, "10101010101010" "10001010100001" "10110101100100" @@ -2510,7 +3720,7 @@ static void test_encode(int index, int generate, int debug) { "11000110001100" "11111111111111" }, - /* 71*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, -1, "AÀ", 0, 14, 14, 1, "AÀ", 0, + /*138*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, -1, -1, "AÀ", -1, 0, 14, 14, 1, "AÀ", 0, "10101010101010" "10001010100001" "10110101100100" @@ -2526,7 +3736,7 @@ static void test_encode(int index, int generate, int debug) { "11000110001100" "11111111111111" }, - /* 72*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", 0, 16, 16, 1, "TEX last_shift 2, symbols_left 1, process_p 1", 0, + /*139*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", -1, 0, 16, 16, 1, "TEX last_shift 2, symbols_left 1, process_p 1", 0, "1010101010101010" "1010011011101001" "1011001010010010" @@ -2544,7 +3754,7 @@ static void test_encode(int index, int generate, int debug) { "1101110101001010" "1111111111111111" }, - /* 73*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", 0, 14, 14, 0, "ATTTTTTTT; BWIPP same as FAST_MODE", 1, + /*140*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, DM_SQUARE, "abcdefgh+", -1, 0, 14, 14, 0, "ATTTTTTTT; BWIPP same as FAST_MODE", 1, "10101010101010" "11100001010101" "11010101001000" @@ -2560,7 +3770,7 @@ static void test_encode(int index, int generate, int debug) { "10111011000100" "11111111111111" }, - /* 74*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", 0, 8, 32, 1, "7 BASE256s, 1 pad", 0, + /*141*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, "7 BASE256s, 1 pad", 0, "10101010101010101010101010101010" "10000101000011011000110100100001" "11100111110101001011101110100010" @@ -2570,7 +3780,7 @@ static void test_encode(int index, int generate, int debug) { "11010000111100001010011101100100" "11111111111111111111111111111111" }, - /* 75*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", 0, 8, 32, 1, "7 BASE256s, 1 pad", 0, + /*142*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, "7 BASE256s, 1 pad", 0, "10101010101010101010101010101010" "10000101000011011000110100100001" "11100111110101001011101110100010" @@ -2580,7 +3790,7 @@ static void test_encode(int index, int generate, int debug) { "11010000111100001010011101100100" "11111111111111111111111111111111" }, - /* 76*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", 0, 8, 32, 1, "8 BASE256s, no padding", 0, + /*143*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, "8 BASE256s, no padding", 0, "10101010101010101010101010101010" "10000101000011011111001101000001" "11010111110101001001011001100010" @@ -2590,7 +3800,7 @@ static void test_encode(int index, int generate, int debug) { "11010000110010001001010001111000" "11111111111111111111111111111111" }, - /* 77*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", 0, 8, 32, 1, "8 BASE256s, no padding", 0, + /*144*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200", -1, 0, 8, 32, 1, "8 BASE256s, no padding", 0, "10101010101010101010101010101010" "10000101000011011111001101000001" "11010111110101001001011001100010" @@ -2600,7 +3810,7 @@ static void test_encode(int index, int generate, int debug) { "11010000110010001001010001111000" "11111111111111111111111111111111" }, - /* 78*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", 0, 16, 16, 1, "8 BASE256s, square, no padding", 0, + /*145*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, "8 BASE256s, square, no padding", 0, "1010101010101010" "1000010100001101" "1101011111101110" @@ -2618,7 +3828,7 @@ static void test_encode(int index, int generate, int debug) { "1111000011111010" "1111111111111111" }, - /* 79*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", 0, 16, 16, 1, "8 BASE256s, square, no padding", 0, + /*146*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_SQUARE, "\200\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, "8 BASE256s, square, no padding", 0, "1010101010101010" "1000010100001101" "1101011111101110" @@ -2636,7 +3846,7 @@ static void test_encode(int index, int generate, int debug) { "1111000011111010" "1111111111111111" }, - /* 80*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", 0, 16, 16, 1, "9 BASE256s, 1 pad", 0, + /*147*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, "9 BASE256s, 1 pad", 0, "1010101010101010" "1000010101001101" "1110011111000010" @@ -2654,7 +3864,7 @@ static void test_encode(int index, int generate, int debug) { "1100000011011010" "1111111111111111" }, - /* 81*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", 0, 16, 16, 1, "9 BASE256s, 1 pad", 0, + /*148*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200", -1, 0, 16, 16, 1, "9 BASE256s, 1 pad", 0, "1010101010101010" "1000010101001101" "1110011111000010" @@ -2672,7 +3882,7 @@ static void test_encode(int index, int generate, int debug) { "1100000011011010" "1111111111111111" }, - /* 82*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", 0, 22, 22, 1, "22 BASE256s, 6 pads", 0, + /*149*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 22, 22, 1, "22 BASE256s, 6 pads", 0, "1010101010101010101010" "1010010100011100010101" "1000011110111110001100" @@ -2696,7 +3906,7 @@ static void test_encode(int index, int generate, int debug) { "1111101000110111010100" "1111111111111111111111" }, - /* 83*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", 0, 22, 22, 1, "22 BASE256s, 6 pads", 0, + /*150*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 22, 22, 1, "22 BASE256s, 6 pads", 0, "1010101010101010101010" "1010010100011100010101" "1000011110111110001100" @@ -2720,7 +3930,7 @@ static void test_encode(int index, int generate, int debug) { "1111101000110111010100" "1111111111111111111111" }, - /* 84*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", 0, 8, 64, 1, "22 BASE256s, no padding", 0, + /*151*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 8, 64, 1, "22 BASE256s, no padding", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010101100011101010101011101111110100100110011100010011010111" "1101011110001010110000001110001010001011010111001010101101100000" @@ -2730,7 +3940,7 @@ static void test_encode(int index, int generate, int debug) { "1101000011001010111101101101110010111100111101001010010011001000" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 85*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", 0, 8, 64, 1, "22 BASE256s, no padding", 0, + /*152*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, DM_DMRE, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 8, 64, 1, "22 BASE256s, no padding", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010101100011101010101011101111110100100110011100010011010111" "1101011110001010110000001110001010001011010111001010101101100000" @@ -2740,7 +3950,7 @@ static void test_encode(int index, int generate, int debug) { "1101000011001010111101101101110010111100111101001010010011001000" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 86*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", 0, 64, 64, 1, "249 BASE256s + 6 ASCII (3 double-digits)", 0, + /*153*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, "249 BASE256s + 6 ASCII (3 double-digits)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -2806,7 +4016,7 @@ static void test_encode(int index, int generate, int debug) { "1000001101010100110010010110101010000000001010101100100011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 87*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", 0, 64, 64, 1, "249 BASE256s + 6 ASCII (3 double-digits)", 0, + /*154*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, "249 BASE256s + 6 ASCII (3 double-digits)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -2872,7 +4082,7 @@ static void test_encode(int index, int generate, int debug) { "1000001101010100110010010110101010000000001010101100100011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 88*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", 0, 64, 64, 0, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, + /*155*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -2938,7 +4148,7 @@ static void test_encode(int index, int generate, int debug) { "1000001101010100110100010100101010001100001000101100101001101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 89*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", 0, 64, 64, 0, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, + /*156*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, "249 BASE256s + 8 ASCII (Sh A80 + 3 double-digits); BWIPP uses 2nd B256 length byte instead of ASCII shift (same no. of codewords)", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1000010100011101100000010111100110100010110111011011111010000001" "1100011110111110100110111101111010101101000010001101001011001100" @@ -3004,7 +4214,7 @@ static void test_encode(int index, int generate, int debug) { "1000001101010100110100010100101010001100001000101100101001101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 90*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", 0, 64, 64, 1, "10 ASCII + 251 BASE256s + 6 ASCII", 0, + /*157*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 1, "10 ASCII + 251 BASE256s + 6 ASCII", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1010011010011101100000010111100110100010110111011011111010000001" "1011001010111110100110111101111010101101000010001101001011001100" @@ -3070,7 +4280,7 @@ static void test_encode(int index, int generate, int debug) { "1001010101010100111010010100101010000010001011001100101011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 91*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", 0, 64, 64, 0, "10 ASCII + 251 BASE256s + 6 ASCII; BWIPP same as FAST_MODE", 0, + /*158*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 64, 64, 0, "10 ASCII + 251 BASE256s + 6 ASCII; BWIPP same as FAST_MODE", 0, "1010101010101010101010101010101010101010101010101010101010101010" "1010011010011101100000010111100110100010110111011011111010000001" "1011001010111110100110111101111010101101000010001101001011001100" @@ -3136,7 +4346,7 @@ static void test_encode(int index, int generate, int debug) { "1001010101010100111110010100001010001100001000001100100011101010" "1111111111111111111111111111111111111111111111111111111111111111" }, - /* 92*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", 0, 88, 88, 1, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII", 0, + /*159*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066", -1, 0, 88, 88, 1, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -3226,7 +4436,7 @@ static void test_encode(int index, int generate, int debug) { "1101010100110101110000110100001000100000101010010010101110100111001111100010001001001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /* 93*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\061\062\063\064\065\066", 0, 88, 88, 0, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII; BWIPP same as FAST_MODE", 0, + /*160*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\061\062\063\064\065\066", -1, 0, 88, 88, 0, "10 ASCII + 252 BASE256s + 10 ASCII + 253 BASE256 + 6 ASCII; BWIPP same as FAST_MODE", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -3316,7 +4526,7 @@ static void test_encode(int index, int generate, int debug) { "1101010100110101110000110100101000010000100010110010111110101011001111100010000101001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /* 94*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", 0, 88, 88, 1, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding", 0, + /*161*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 88, 88, 1, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -3406,7 +4616,7 @@ static void test_encode(int index, int generate, int debug) { "1101010100110101100000110110001000001000101011110010001110100101001111000010001111001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /* 95*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", 0, 88, 88, 0, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding; BWIPP same as FAST_MODE", 0, + /*162*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "\101\102\103\104\105\106\107\110\111\112\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\061\062\063\064\065\066\067\070\071\060\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200", -1, 0, 88, 88, 0, "10 ASCII + 252 BASE256s + 10 ASCII + 304 BASE256, no padding; BWIPP same as FAST_MODE", 0, "1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "1010011010011100000001110111100010001011011111001111101000000110011111111000100110101111" "1011001010111110011010111101111010110100001010010100101100110010101011111110101001100000" @@ -3496,7 +4706,7 @@ static void test_encode(int index, int generate, int debug) { "1101010100110101100000110110101000111000100011010010011110101001001111000010000011001100" "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /* 96*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@_", 0, 8, 32, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, + /*163*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@_", -1, 0, 8, 32, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, "10101010101010101010101010101010" "10000000001001111001101100001101" "10000000000001001001110011001100" @@ -3506,7 +4716,7 @@ static void test_encode(int index, int generate, int debug) { "11000000000000001001000001011010" "11111111111111111111111111111111" }, - /* 97*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@_", 0, 8, 32, 0, "EDI **NOT SAME** (see FAST_MODE); BWIPP uses different encodation", 0, + /*164*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@_", -1, 0, 8, 32, 0, "EDI **NOT SAME** (see FAST_MODE); BWIPP uses different encodation", 0, "10101010101010101010101010101010" "11100000000000011000100100101001" "11100000000000001010011101001000" @@ -3516,7 +4726,7 @@ static void test_encode(int index, int generate, int debug) { "10000000000001001010010000010000" "11111111111111111111111111111111" }, - /* 98*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@_", 0, 16, 16, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 3 chars, not last 4 like Zint", 0, + /*165*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@_", -1, 0, 16, 16, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 3 chars, not last 4 like Zint", 0, "1010101010101010" "1000000001000001" "1000000000111110" @@ -3534,7 +4744,7 @@ static void test_encode(int index, int generate, int debug) { "1010100000010010" "1111111111111111" }, - /* 99*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@_", 0, 8, 32, 0, "AAEEEEEEEEA; BWIPP uses different encodation, see above", 1, + /*166*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@_", -1, 0, 8, 32, 0, "AAEEEEEEEEA; BWIPP uses different encodation, see above", 1, "10101010101010101010101010101010" "10100000000000111000110101111001" "10000000000001001000100100011000" @@ -3544,7 +4754,7 @@ static void test_encode(int index, int generate, int debug) { "10000110001100001001010000001110" "11111111111111111111111111111111" }, - /*100*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@_", 0, 16, 16, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 4 chars, not last 1 like Zint", 0, + /*167*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@_", -1, 0, 16, 16, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 4 chars, not last 1 like Zint", 0, "1010101010101010" "1000000001000001" "1000000000001100" @@ -3562,7 +4772,7 @@ static void test_encode(int index, int generate, int debug) { "1000100000100010" "1111111111111111" }, - /*101*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@_", 0, 16, 16, 0, "AAAEEEEEEEEA; BWIPP uses different encodation, see above", 0, + /*168*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@_", -1, 0, 16, 16, 0, "AAAEEEEEEEEA; BWIPP uses different encodation, see above", 0, "1010101010101010" "1010011101000001" "1000000000101000" @@ -3580,7 +4790,7 @@ static void test_encode(int index, int generate, int debug) { "1011000011010010" "1111111111111111" }, - /*102*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@_", 0, 16, 16, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 5 chars, not last 2 like Zint", 0, + /*169*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@_", -1, 0, 16, 16, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 5 chars, not last 2 like Zint", 0, "1010101010101010" "1000000000100001" "1000000000111000" @@ -3598,7 +4808,7 @@ static void test_encode(int index, int generate, int debug) { "1011100000010010" "1111111111111111" }, - /*103*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@_", 0, 16, 16, 0, "EEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, + /*170*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@_", -1, 0, 16, 16, 0, "EEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, "1010101010101010" "1000000001100001" "1000000000110100" @@ -3616,7 +4826,7 @@ static void test_encode(int index, int generate, int debug) { "1000000000100010" "1111111111111111" }, - /*104*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@@_", 0, 12, 26, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, + /*171*/ { BARCODE_DATAMATRIX, FAST_MODE, -1, -1, -1, -1, "@@@@@@@@@@@@@_", -1, 0, 12, 26, 0, "EDI; BWIPP uses different encodation, switching to ASC for last 2 chars, not last 3 like Zint", 0, "10101010101010101010101010" "10000000001001100100101011" "10000000000010000000111000" @@ -3630,7 +4840,7 @@ static void test_encode(int index, int generate, int debug) { "10000001000001101011010000" "11111111111111111111111111" }, - /*105*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@@_", 0, 16, 16, 0, "AEEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, + /*172*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, "@@@@@@@@@@@@@_", -1, 0, 16, 16, 0, "AEEEEEEEEEEEEA; BWIPP uses different encodation, see above", 1, "1010101010101010" "1110000001000001" "1110000001000000" @@ -3648,7 +4858,7 @@ static void test_encode(int index, int generate, int debug) { "1001100000111010" "1111111111111111" }, - /*106*/ { BARCODE_DATAMATRIX, FAST_MODE, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@é", 0, 24, 24, 0, "Mix of modes TEX ASC C40 ASC EDI BAS; BWIPP uses different encodation", 0, + /*173*/ { BARCODE_DATAMATRIX, FAST_MODE, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@é", -1, 0, 24, 24, 0, "Mix of modes TEX ASC C40 ASC EDI BAS; BWIPP uses different encodation", 0, "101010101010101010101010" "100111011110011101000101" "101111001100101101101000" @@ -3674,7 +4884,7 @@ static void test_encode(int index, int generate, int debug) { "111101010110111111111010" "111111111111111111111111" }, - /*107*/ { BARCODE_DATAMATRIX, -1, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@é", 0, 24, 24, 0, "TTTTTTTTTAAAACCCCCCCCCAAAAAEEEEEEEAA; BWIPP uses different encodation", 0, + /*174*/ { BARCODE_DATAMATRIX, -1, 26, -1, -1, -1, "abcdefghi1234FGHIJKLMNabc@@@@@@@@@é", -1, 0, 24, 24, 0, "TTTTTTTTTAAAACCCCCCCCCAAAAAEEEEEEEAA; BWIPP uses different encodation", 0, "101010101010101010101010" "100111011110011100000101" "101111001100101100111100" @@ -3700,7 +4910,7 @@ static void test_encode(int index, int generate, int debug) { "111011010111011111010010" "111111111111111111111111" }, - /*108*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", 0, 132, 132, 0, "Mixed modes (except B256); BWIPP different encodation", 0, + /*175*/ { BARCODE_DATAMATRIX, DATA_MODE | FAST_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", -1, 0, 132, 132, 0, "Mixed modes (except B256); BWIPP different encodation", 0, "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "101001101001010011000111100011111001011001011010011010010111111101110111100110110110000111110000111000011100111110111010111110010101" "101100101010110110010011000010100000111010101111010100001111001010100011010100110101000010101011010001111011001010111111011000100110" @@ -3834,7 +5044,7 @@ static void test_encode(int index, int generate, int debug) { "110101010100010111111010100000000000110011101101010011010100111010111011101111011111110010101110001010101110001010111111010011111110" "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - /*109*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", 0, 120, 120, 0, "Mixed modes (except B256); BWIPP uses different encodation", 13, + /*176*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, -1, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;<>@[]_`~!||()?{}'123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678912345678912345678912345678900001234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^;<>@[]_`~!||()?{}'\001\002\003\004\005\006...............\015\015\015\015\015\015\015\015abcdefghijklmnopqrstuvwxyz\015\015\015\015\015\015\015\015...............\001\002\003\004\005\006ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz&,:#-.$/+%*=^...............", -1, 0, 120, 120, 0, "Mixed modes (except B256); BWIPP uses different encodation", 13, "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010" "101001101001010011011001100011111001011110010010011011010111111101001110101111111010000001101101101110110111111011101011" "101100101010110110001101000010100000111010101111010101000000110001110101001100101001111100111000101011100101101011001100" @@ -3978,17 +5188,19 @@ static void test_encode(int index, int generate, int debug) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, -1 /*option_1*/, data[i].option_2, data[i].option_3, data[i].output_options, data[i].data, -1, debug); + length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, + -1 /*option_1*/, data[i].option_2, data[i].option_3, data[i].output_options, + data[i].data, data[i].length, debug); ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret); if (generate) { - printf(" /*%3d*/ { %s, %s, %d, %s, %d, %s, \"%s\", %s, %d, %d, %d, \"%s\", %d,\n", + printf(" /*%3d*/ { %s, %s, %d, %s, %d, %s, \"%s\", %d, %s, %d, %d, %d, \"%s\", %d,\n", i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].eci, testUtilOutputOptionsName(data[i].output_options), data[i].option_2, testUtilOption3Name(data[i].option_3), - testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), + testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), data[i].length, testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].bwipp_cmp, data[i].comment, data[i].expected_diff); testUtilModulesPrint(symbol, " ", "\n"); @@ -4015,11 +5227,11 @@ static void test_encode(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[144 * 144 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -5352,3 +6564,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_dotcode.c b/backend/tests/test_dotcode.c index 3562f265..6f1bbf56 100644 --- a/backend/tests/test_dotcode.c +++ b/backend/tests/test_dotcode.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -1016,14 +1015,14 @@ static void test_encode(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { if (!data[i].zxingcpp_cmp) { if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not ZXing-C++ compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment); } else { int cmp_len, ret_len; char modules_dump[16384]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -1251,3 +1250,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_eci.c b/backend/tests/test_eci.c index 299deb11..d12f5da6 100644 --- a/backend/tests/test_eci.c +++ b/backend/tests/test_eci.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et norl : */ #include "testcommon.h" #include "../eci.h" @@ -204,7 +203,7 @@ static void test_reduced_charset_input(int index, int debug) { /* 64*/ { BARCODE_PDF417, UNICODE_MODE, 25, "ကက", 0, 25, "In UCS-2BE" }, /* 65*/ { BARCODE_PDF417, UNICODE_MODE, 25, "12", 0, 25, "UCS-2BE ASCII" }, /* 66*/ { BARCODE_PDF417, UNICODE_MODE, 0, "𐀀", ZINT_WARN_USES_ECI, 26, "Not in any single-byte page" }, - /* 67*/ { BARCODE_PDF417, UNICODE_MODE, 25, "𐀀", ZINT_ERROR_INVALID_DATA, -1, "Not in UCS-2BE (in Supplementary Plane)" }, + /* 67*/ { BARCODE_PDF417, UNICODE_MODE, 25, "𐀀", 0, 25, "UTF-16BE (in Supplementary Plane)" }, /* 68*/ { BARCODE_PDF417, UNICODE_MODE, 0, "テ", ZINT_WARN_USES_ECI, 26, "Defaults to UTF-8 if not in any ISO 8859 or Win page" }, /* 69*/ { BARCODE_PDF417, UNICODE_MODE, 26, "テ", 0, 26, "" }, /* 70*/ { BARCODE_PDF417, UNICODE_MODE, 26, "テテ", 0, 26, "" }, @@ -762,29 +761,37 @@ static void test_utf8_to_eci_ascii(void) { assert_zero(memcmp(data[i].data, dest, length), "i:%d memcmp != 0\n", i); } } -}; +} -static void test_utf8_to_eci_ucs2be(void) { +static void test_utf8_to_eci_utf16be(void) { struct item { - int eci; char *data; int length; int ret; int expected_length; + char *expected; }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { 25, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 * 2 }, - /* 1*/ { 25, " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 * 2 }, - /* 2*/ { 25, "\302\200\357\277\277", -1, 0, 4 }, // U+0080 U+FFFF - /* 3*/ { 25, "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed - /* 4*/ { 25, "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 * 2, NULL }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 * 2, NULL }, + /* 2*/ { "\302\200\357\277\277", -1, 0, 4, "\000\200\377\377" }, // U+0080 U+FFFF + /* 3*/ { "\357\277\276", -1, 0, 2, "\377\376" }, // U+FFFE (reversed BOM) allowed + /* 4*/ { "\357\273\277", -1, 0, 2, "\376\377" }, // U+FEFF (BOM) allowed + /* 5*/ { "\355\237\277", -1, 0, 2, "\327\377" }, // U+D7FF (ed9fbf) + /* 6*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+D800 (eda080) surrogate half not allowed + /* 7*/ { "\355\277\277", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+DFFF (edbfbf) surrogate half not allowed + /* 8*/ { "\356\200\200", -1, 0, 2, "\340\000" }, // U+E000 (ee8080) + /* 9*/ { "\360\220\200\200", -1, 0, 4, "\330\000\334\000" }, // U+10000 maps to surrogate pair + /* 10*/ { "\364\217\277\277", -1, 0, 4, "\333\377\337\377" }, // U+10FFFF maps to surrogate pair + /* 11*/ { "\364\220\200\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // Non-Unicode 0x110000 not allowed }; int data_size = ARRAY_SIZE(data); int i, length, ret; + const int eci = 25; - testStart("test_utf8_to_eci_ucs2be"); + testStart("test_utf8_to_eci_utf16be"); for (i = 0; i < data_size; i++) { int out_length, eci_length; @@ -792,22 +799,209 @@ static void test_utf8_to_eci_ucs2be(void) { length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); out_length = length; - eci_length = get_eci_length(data[i].eci, (const unsigned char *) data[i].data, length); + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); - ret = utf8_to_eci(data[i].eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); + if (data[i].expected) { + ret = memcmp(dest, data[i].expected, data[i].expected_length); + assert_zero(ret, "i:%d memcmp() %d != 0\n", i, ret); + } else { + int j; + for (j = 0; j < length; j++) { + assert_zero(dest[j * 2], "i:%d dest[%d] %d != 0\n", i, j * 2, dest[j * 2]); + assert_equal(dest[j * 2 + 1], data[i].data[j], "i:%d dest[%d] %d != data[%d] %d\n", i, j * 2 + 1, dest[j * 2 + 1], j, data[i].data[j]); + } + } } } -}; +} + +static void test_utf8_to_eci_utf16le(void) { + + struct item { + char *data; + int length; + int ret; + int expected_length; + char *expected; + }; + // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) + struct item data[] = { + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 * 2, NULL }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 * 2, NULL }, + /* 2*/ { "\302\200\357\277\277", -1, 0, 4, "\200\000\377\377" }, // U+0080 U+FFFF + /* 3*/ { "\357\277\276", -1, 0, 2, "\376\377" }, // U+FFFE (reversed BOM) allowed + /* 4*/ { "\357\273\277", -1, 0, 2, "\377\376" }, // U+FEFF (BOM) allowed + /* 5*/ { "\355\237\277", -1, 0, 2, "\377\327" }, // U+D7FF (ed9fbf) + /* 6*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+D800 (eda080) surrogate half not allowed + /* 7*/ { "\355\277\277", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+DFFF (edbfbf) surrogate half not allowed + /* 8*/ { "\356\200\200", -1, 0, 2, "\000\340" }, // U+E000 (ee8080) + /* 9*/ { "\360\220\200\200", -1, 0, 4, "\000\330\000\334" }, // U+10000 maps to surrogate pair + /* 10*/ { "\364\217\277\277", -1, 0, 4, "\377\333\377\337" }, // U+10FFFF maps to surrogate pair + /* 11*/ { "\364\220\200\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // Non-Unicode 0x110000 not allowed + }; + int data_size = ARRAY_SIZE(data); + int i, length, ret; + const int eci = 33; + + testStart("test_utf8_to_eci_utf16le"); + + for (i = 0; i < data_size; i++) { + int out_length, eci_length; + char dest[1024]; + + length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); + out_length = length; + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); + + assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); + if (ret == 0) { + assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); + assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); + if (data[i].expected) { + ret = memcmp(dest, data[i].expected, data[i].expected_length); + assert_zero(ret, "i:%d memcmp() %d != 0\n", i, ret); + } else { + int j; + for (j = 0; j < length; j++) { + assert_equal(dest[j * 2], data[i].data[j], "i:%d dest[%d] %d != data[%d] %d\n", i, j * 2, dest[j * 2], j, data[i].data[j]); + assert_zero(dest[j * 2 + 1], "i:%d dest[%d] %d != 0\n", i, j * 2 + 1, dest[j * 2 + 1]); + } + } + } + } +} + +static void test_utf8_to_eci_utf32be(void) { + + struct item { + char *data; + int length; + int ret; + int expected_length; + char *expected; + }; + // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) + struct item data[] = { + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 * 4, NULL }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 * 4, NULL }, + /* 2*/ { "\302\200\357\277\277", -1, 0, 8, "\000\000\000\200\000\000\377\377" }, // U+0080 U+FFFF + /* 3*/ { "\357\277\276", -1, 0, 4, "\000\000\377\376" }, // U+FFFE (reversed BOM) allowed + /* 4*/ { "\357\273\277", -1, 0, 4, "\000\000\376\377" }, // U+FEFF (BOM) allowed + /* 5*/ { "\355\237\277", -1, 0, 4, "\000\000\327\377" }, // U+D7FF (ed9fbf) + /* 6*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+D800 (eda080) surrogate half not allowed + /* 7*/ { "\355\277\277", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+DFFF (edbfbf) surrogate half not allowed + /* 8*/ { "\356\200\200", -1, 0, 4, "\000\000\340\000" }, // U+E000 (ee8080) + /* 9*/ { "\360\220\200\200", -1, 0, 4, "\000\001\000\000" }, // U+10000 + /* 10*/ { "\364\217\277\277", -1, 0, 4, "\000\020\377\377" }, // U+10FFFF + /* 11*/ { "\364\220\200\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // Non-Unicode 0x110000 not allowed + }; + int data_size = ARRAY_SIZE(data); + int i, length, ret; + const int eci = 34; + + testStart("test_utf8_to_eci_utf32be"); + + for (i = 0; i < data_size; i++) { + int out_length, eci_length; + char dest[1024]; + + length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); + out_length = length; + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); + + assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); + if (ret == 0) { + assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); + assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); + if (data[i].expected) { + ret = memcmp(dest, data[i].expected, data[i].expected_length); + assert_zero(ret, "i:%d memcmp() %d != 0\n", i, ret); + } else { + int j; + for (j = 0; j < length; j++) { + assert_zero(dest[j * 4], "i:%d dest[%d] %d != 0\n", i, j * 4, dest[j * 4]); + assert_zero(dest[j * 4 + 1], "i:%d dest[%d] %d != 0\n", i, j * 4 + 1, dest[j * 4 + 1]); + assert_zero(dest[j * 4 + 2], "i:%d dest[%d] %d != 0\n", i, j * 4 + 2, dest[j * 4 + 2]); + assert_equal(dest[j * 4 + 3], data[i].data[j], "i:%d dest[%d] %d != data[%d] %d\n", i, j * 4 + 3, dest[j * 4 + 3], j, data[i].data[j]); + } + } + } + } +} + +static void test_utf8_to_eci_utf32le(void) { + + struct item { + char *data; + int length; + int ret; + int expected_length; + char *expected; + }; + // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) + struct item data[] = { + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 * 4, NULL }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 * 4, NULL }, + /* 2*/ { "\302\200\357\277\277", -1, 0, 8, "\200\000\000\000\377\377\000\000" }, // U+0080 U+FFFF + /* 3*/ { "\357\277\276", -1, 0, 4, "\376\377\000\000" }, // U+FFFE (reversed BOM) allowed + /* 4*/ { "\357\273\277", -1, 0, 4, "\377\376\000\000" }, // U+FEFF (BOM) allowed + /* 5*/ { "\355\237\277", -1, 0, 4, "\377\327\000\000" }, // U+D7FF (ed9fbf) + /* 6*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+D800 (eda080) surrogate half not allowed + /* 7*/ { "\355\277\277", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // U+DFFF (edbfbf) surrogate half not allowed + /* 8*/ { "\356\200\200", -1, 0, 4, "\000\340\000\000" }, // U+E000 (ee8080) + /* 9*/ { "\360\220\200\200", -1, 0, 4, "\000\000\001\000" }, // U+10000 + /* 10*/ { "\364\217\277\277", -1, 0, 4, "\377\377\020\000" }, // U+10FFFF + /* 11*/ { "\364\220\200\200", -1, ZINT_ERROR_INVALID_DATA, -1, NULL }, // Non-Unicode 0x110000 not allowed + }; + int data_size = ARRAY_SIZE(data); + int i, length, ret; + const int eci = 35; + + testStart("test_utf8_to_eci_utf32le"); + + for (i = 0; i < data_size; i++) { + int out_length, eci_length; + char dest[1024]; + + length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); + out_length = length; + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); + + assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); + if (ret == 0) { + assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); + assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); + if (data[i].expected) { + ret = memcmp(dest, data[i].expected, data[i].expected_length); + assert_zero(ret, "i:%d memcmp() %d != 0\n", i, ret); + } else { + int j; + for (j = 0; j < length; j++) { + assert_equal(dest[j * 4], data[i].data[j], "i:%d dest[%d] %d != data[%d] %d\n", i, j * 4, dest[j * 4], j, data[i].data[j]); + assert_zero(dest[j * 4 + 1], "i:%d dest[%d] %d != 0\n", i, j * 4 + 1, dest[j * 4 + 1]); + assert_zero(dest[j * 4 + 2], "i:%d dest[%d] %d != 0\n", i, j * 4 + 2, dest[j * 4 + 2]); + assert_zero(dest[j * 4 + 3], "i:%d dest[%d] %d != 0\n", i, j * 4 + 3, dest[j * 4 + 3]); + } + } + } + } +} static void test_utf8_to_eci_sjis(void) { struct item { - int eci; char *data; int length; int ret; @@ -815,26 +1009,27 @@ static void test_utf8_to_eci_sjis(void) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { 20, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, - /* 1*/ { 20, " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}\177", 95, 0, 95 + 1 }, // Backslash goes to 2 byte - /* 2*/ { 20, "~", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for tilde - /* 3*/ { 20, "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 - /* 4*/ { 20, "\302\241", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00A1 Inverted exclaimation mark - /* 5*/ { 20, "\302\245", -1, 0, 1 }, // U+00A5 Yen goes to backslash - /* 6*/ { 20, "\302\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00BF Inverted question mark - /* 7*/ { 20, "\303\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00C0 À - /* 8*/ { 20, "\303\251", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00E9 é - /* 9*/ { 20, "\312\262", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+03B2 β - /* 10*/ { 20, "\342\272\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+2E80 CJK RADICAL REPEAT - /* 11*/ { 20, "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE - /* 12*/ { 20, "\343\200\204", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+3004 JAPANESE INDUSTRIAL STANDARD SYMBOL - /* 13*/ { 20, "\343\201\201", -1, 0, 2 }, //U+3041 HIRAGANA LETTER SMALL A - /* 14*/ { 20, "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF - /* 15*/ { 20, "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed - /* 16*/ { 20, "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}\177", 95, 0, 95 + 1 }, // Backslash goes to 2 byte + /* 2*/ { "~", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for tilde + /* 3*/ { "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 + /* 4*/ { "\302\241", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00A1 Inverted exclaimation mark + /* 5*/ { "\302\245", -1, 0, 1 }, // U+00A5 Yen goes to backslash + /* 6*/ { "\302\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00BF Inverted question mark + /* 7*/ { "\303\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00C0 À + /* 8*/ { "\303\251", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+00E9 é + /* 9*/ { "\312\262", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+03B2 β + /* 10*/ { "\342\272\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+2E80 CJK RADICAL REPEAT + /* 11*/ { "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE + /* 12*/ { "\343\200\204", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+3004 JAPANESE INDUSTRIAL STANDARD SYMBOL + /* 13*/ { "\343\201\201", -1, 0, 2 }, //U+3041 HIRAGANA LETTER SMALL A + /* 14*/ { "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF + /* 15*/ { "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed + /* 16*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed }; int data_size = ARRAY_SIZE(data); int i, length, ret; + const int eci = 20; testStart("test_utf8_to_eci_sjis"); @@ -844,22 +1039,21 @@ static void test_utf8_to_eci_sjis(void) { length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); out_length = length; - eci_length = get_eci_length(data[i].eci, (const unsigned char *) data[i].data, length); + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); - ret = utf8_to_eci(data[i].eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); } } -}; +} static void test_utf8_to_eci_big5(void) { struct item { - int eci; char *data; int length; int ret; @@ -867,16 +1061,17 @@ static void test_utf8_to_eci_big5(void) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { 28, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, - /* 1*/ { 28, " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 }, - /* 2*/ { 28, "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 - /* 3*/ { 28, "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE - /* 4*/ { 28, "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF - /* 5*/ { 28, "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed - /* 6*/ { 28, "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 }, + /* 2*/ { "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 + /* 3*/ { "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE + /* 4*/ { "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF + /* 5*/ { "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed + /* 6*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed }; int data_size = ARRAY_SIZE(data); int i, length, ret; + const int eci = 28; testStart("test_utf8_to_eci_big5"); @@ -886,22 +1081,21 @@ static void test_utf8_to_eci_big5(void) { length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); out_length = length; - eci_length = get_eci_length(data[i].eci, (const unsigned char *) data[i].data, length); + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); - ret = utf8_to_eci(data[i].eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); } } -}; +} static void test_utf8_to_eci_gb2312(void) { struct item { - int eci; char *data; int length; int ret; @@ -909,16 +1103,17 @@ static void test_utf8_to_eci_gb2312(void) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { 29, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, - /* 1*/ { 29, " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 }, - /* 2*/ { 29, "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 - /* 3*/ { 29, "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE - /* 4*/ { 29, "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF - /* 5*/ { 29, "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed - /* 6*/ { 29, "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 }, + /* 2*/ { "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 + /* 3*/ { "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE + /* 4*/ { "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF + /* 5*/ { "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed + /* 6*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed }; int data_size = ARRAY_SIZE(data); int i, length, ret; + const int eci = 29; testStart("test_utf8_to_eci_gb2312"); @@ -928,22 +1123,21 @@ static void test_utf8_to_eci_gb2312(void) { length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); out_length = length; - eci_length = get_eci_length(data[i].eci, (const unsigned char *) data[i].data, length); + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); - ret = utf8_to_eci(data[i].eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); } } -}; +} static void test_utf8_to_eci_euc_kr(void) { struct item { - int eci; char *data; int length; int ret; @@ -951,16 +1145,17 @@ static void test_utf8_to_eci_euc_kr(void) { }; // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) struct item data[] = { - /* 0*/ { 30, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, - /* 1*/ { 30, " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 }, - /* 2*/ { 30, "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 - /* 3*/ { 30, "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE - /* 4*/ { 30, "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF - /* 5*/ { 30, "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed - /* 6*/ { 30, "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed + /* 0*/ { "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037", 32, 0, 32 }, + /* 1*/ { " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177", 96, 0, 96 }, + /* 2*/ { "\302\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+0080 + /* 3*/ { "\343\200\200", -1, 0, 2 }, // U+3000 IDEOGRAPHIC SPACE + /* 4*/ { "\357\277\277", -1, ZINT_ERROR_INVALID_DATA, -1 }, // No mapping for U+FFFF + /* 5*/ { "\357\277\276", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+FFFE (reversed BOM) not allowed + /* 6*/ { "\355\240\200", -1, ZINT_ERROR_INVALID_DATA, -1 }, // U+D800 surrogate not allowed }; int data_size = ARRAY_SIZE(data); int i, length, ret; + const int eci = 30; testStart("test_utf8_to_eci_euc_kr"); @@ -970,17 +1165,17 @@ static void test_utf8_to_eci_euc_kr(void) { length = data[i].length != -1 ? data[i].length : (int) strlen(data[i].data); out_length = length; - eci_length = get_eci_length(data[i].eci, (const unsigned char *) data[i].data, length); + eci_length = get_eci_length(eci, (const unsigned char *) data[i].data, length); assert_nonzero(eci_length + 1 <= 1024, "i:%d eci_length %d + 1 > 1024\n", i, eci_length); - ret = utf8_to_eci(data[i].eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); + ret = utf8_to_eci(eci, (const unsigned char *) data[i].data, (unsigned char *) dest, &out_length); assert_equal(ret, data[i].ret, "i:%d utf8_to_eci ret %d != %d\n", i, ret, data[i].ret); if (ret == 0) { assert_equal(out_length, data[i].expected_length, "i:%d length %d != %d\n", i, out_length, data[i].expected_length); assert_nonzero(out_length <= eci_length, "i:%d out_length %d > eci_length %d\n", i, out_length, eci_length); } } -}; +} static void test_get_best_eci(int index) { @@ -1026,7 +1221,10 @@ int main(int argc, char *argv[]) { { "test_reduced_charset_input", test_reduced_charset_input, 1, 0, 1 }, { "test_utf8_to_eci_sb", test_utf8_to_eci_sb, 1, 0, 0 }, { "test_utf8_to_eci_ascii", test_utf8_to_eci_ascii, 0, 0, 0 }, - { "test_utf8_to_eci_ucs2be", test_utf8_to_eci_ucs2be, 0, 0, 0 }, + { "test_utf8_to_eci_utf16be", test_utf8_to_eci_utf16be, 0, 0, 0 }, + { "test_utf8_to_eci_utf16le", test_utf8_to_eci_utf16le, 0, 0, 0 }, + { "test_utf8_to_eci_utf32be", test_utf8_to_eci_utf32be, 0, 0, 0 }, + { "test_utf8_to_eci_utf32le", test_utf8_to_eci_utf32le, 0, 0, 0 }, { "test_utf8_to_eci_sjis", test_utf8_to_eci_sjis, 0, 0, 0 }, { "test_utf8_to_eci_big5", test_utf8_to_eci_big5, 0, 0, 0 }, { "test_utf8_to_eci_gb2312", test_utf8_to_eci_gb2312, 0, 0, 0 }, @@ -1040,3 +1238,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et norl : */ diff --git a/backend/tests/test_gb18030.c b/backend/tests/test_gb18030.c index 4c3dcb33..15c93fe5 100644 --- a/backend/tests/test_gb18030.c +++ b/backend/tests/test_gb18030.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" #include "test_gb18030_tab.h" @@ -388,6 +387,70 @@ static void test_gb18030_cpy(int index) { testFinish(); } +/* For testing GBK, to exclude GB 18030 extensions */ +STATIC_UNLESS_ZINT_TEST int gb18030ext_wctomb(unsigned int *r, const unsigned int wc); +STATIC_UNLESS_ZINT_TEST int gb18030uni_wctomb(unsigned int *r1, unsigned int *r2, const unsigned int wc); + +/* Control for GBK */ +static int gbk_wctomb_zint2(unsigned int *r, unsigned int wc) { + unsigned int c; + int tab_length, start_i, end_i; + int i; + unsigned int r1, r2; + + if (gb18030ext_wctomb(&r1, wc)) { + return 0; + } + if (wc >= 0xe000 && wc <= 0xe864) { + return 0; + } + if (gb18030uni_wctomb(&r1, &r2, wc)) { + return 0; + } + + tab_length = ARRAY_SIZE(test_gb18030_tab); + start_i = test_gb18030_tab_ind[wc >> 10]; + end_i = start_i + 0x800 > tab_length ? tab_length : start_i + 0x800; + for (i = start_i; i < end_i; i += 2) { + if (test_gb18030_tab[i + 1] == wc) { + c = test_gb18030_tab[i]; + if (c <= 0xFFFF) { + *r = c; + return c <= 0xFF ? 1 : 2; + } + return 0; + } + } + return 0; +} + +static void test_gbk_wctomb_zint(void) { + + int ret, ret2; + unsigned int val, val2; + unsigned int i; + + testStart("test_gbk_wctomb_zint"); + + for (i = 0; i < 0xFFFE; i++) { + if (i < 0x80) { // ASCII is straight through and not dealt with by gbk_wctomb_zint() + continue; + } + if (i >= 0xD800 && i <= 0xDFFF) { // UTF-16 surrogates + continue; + } + val = val2 = 0; + ret = gbk_wctomb_zint(&val, i); + ret2 = gbk_wctomb_zint2(&val2, i); + assert_equal(ret, ret2, "i:%d 0x%04X ret %d != ret2 %d, val 0x%04X, val2 0x%04X\n", (int) i, i, ret, ret2, val, val2); + if (ret2) { + assert_equal(val, val2, "i:%d 0x%04X val 0x%04X != val2 0x%04X\n", (int) i, i, val, val2); + } + } + + testFinish(); +} + int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */ @@ -395,6 +458,7 @@ int main(int argc, char *argv[]) { { "test_gb18030_utf8", test_gb18030_utf8, 1, 0, 0 }, { "test_gb18030_utf8_to_eci", test_gb18030_utf8_to_eci, 1, 0, 0 }, { "test_gb18030_cpy", test_gb18030_cpy, 1, 0, 0 }, + { "test_gbk_wctomb_zint", test_gbk_wctomb_zint, 0, 0, 0 }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); @@ -403,3 +467,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_gridmtx.c b/backend/tests/test_gridmtx.c index df4a0f67..6cbffd9c 100644 --- a/backend/tests/test_gridmtx.c +++ b/backend/tests/test_gridmtx.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019-2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et norl : */ #include "testcommon.h" @@ -196,7 +195,7 @@ static void test_input(int index, int generate, int debug) { /* 5*/ { DATA_MODE, 0, -1, -1, { 0, 0, "" }, "é", 0, 0, "30 03 43 54 40", "B2 (UTF-8)" }, /* 6*/ { DATA_MODE, 0, -1, ZINT_FULL_MULTIBYTE, { 0, 0, "" }, "é", 0, 0, "0A 51 1F 78 00", "H1 (UTF-8) (full multibyte)" }, /* 7*/ { DATA_MODE, 0, -1, -1, { 0, 0, "" }, "\351", 0, 0, "30 01 69 00", "B1 (ISO 8859-1) (0xE9)" }, - /* 8*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "β", 0, 0, "08 40 2F 78 00", "H1 (GB 2312)" }, + /* 8*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "β", ZINT_WARN_NONCOMPLIANT, 0, "Warning 08 40 2F 78 00", "H1 (GB 2312)" }, /* 9*/ { UNICODE_MODE, 9, -1, -1, { 0, 0, "" }, "β", 0, 9, "60 04 58 00 71 00", "ECI-9 B1 (ISO 8859-7)" }, /* 10*/ { UNICODE_MODE, 29, -1, -1, { 0, 0, "" }, "β", 0, 29, "60 0E 44 20 17 7C 00", "ECI-29 H1 (GB 2312)" }, /* 11*/ { UNICODE_MODE, 26, -1, -1, { 0, 0, "" }, "β", 0, 26, "60 0D 18 01 67 2C 40", "ECI-26 H1 (UTF-8)" }, @@ -205,7 +204,7 @@ static void test_input(int index, int generate, int debug) { /* 14*/ { DATA_MODE, 0, -1, ZINT_FULL_MULTIBYTE, { 0, 0, "" }, "β", 0, 0, "0B 56 2F 78 00", "H1 (UTF-8) (full multibyte)" }, /* 15*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "ÿ", 0, 0, "30 01 7F 00", "B1 (ISO 8859-1)" }, /* 16*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "ÿÿÿ", 0, 0, "30 05 7F 7F 7F 60", "B3 (ISO 8859-1)" }, - /* 17*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "㈩一", 0, 0, "08 15 68 0E 7F 70 00", "H2 (GB 2312)" }, + /* 17*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "㈩一", ZINT_WARN_NONCOMPLIANT, 0, "Warning 08 15 68 0E 7F 70 00", "H2 (GB 2312)" }, /* 18*/ { UNICODE_MODE, 29, -1, -1, { 0, 0, "" }, "㈩一", 0, 29, "60 0E 44 0A 74 07 3F 78 00", "ECI-29 H2 (GB 2312)" }, /* 19*/ { DATA_MODE, 0, -1, -1, { 0, 0, "" }, "\177\177", 0, 0, "30 02 7F 3F 40", "B2 (ASCII)" }, /* 20*/ { DATA_MODE, 0, -1, -1, { 0, 0, "" }, "\177\177\177", 0, 0, "30 04 7F 3F 5F 60", "B3 (ASCII)" }, @@ -227,27 +226,27 @@ static void test_input(int index, int generate, int debug) { /* 36*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "ABCDE\011F", 0, 0, "20 01 08 32 3E 49 17 30", "U7 (ASCII)" }, /* 37*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "1 1234ABCD12.2abcd-12", 0, 0, "13 7A 23 41 2A 3F 68 01 08 3E 4F 66 1E 5F 70 00 44 1F 2F 6E 0F 0F 74", "N6 U4 N4 L4 N3 (ASCII)" }, /* 38*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "1 123ABCDE12.2abcd-12", 0, 0, "28 1F 40 42 06 28 59 43 27 01 05 7D 56 42 49 16 34 7F 6D 30 08 2F 60", "M21 (ASCII)" }, - /* 39*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "国外通信教材 Matlab6.5", 0, 0, "09 63 27 20 4E 24 1F 05 21 58 22 13 7E 1E 4C 78 09 56 00 3D 3F 4A 45 3F 50", "H6 U2 L5 N3 (GB 2312) (Same as D.2 example)" }, + /* 39*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "国外通信教材 Matlab6.5", ZINT_WARN_NONCOMPLIANT, 0, "Warning 09 63 27 20 4E 24 1F 05 21 58 22 13 7E 1E 4C 78 09 56 00 3D 3F 4A 45 3F 50", "H6 U2 L5 N3 (GB 2312) (Same as D.2 example)" }, /* 40*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "AAT", 0, 0, "20 00 4F 30", "U3 (ASCII)" }, /* 41*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "aat", 0, 0, "18 00 4F 30", "L3 (ASCII)" }, /* 42*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "AAT2556", 0, 0, "20 00 4F 58 7F 65 47 7A", "U3 N4 (ASCII) (note same bit count as M7)" }, /* 43*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "AAT2556 ", 0, 0, "29 22 4E 42 0A 14 37 6F 60", "M8 (ASCII)" }, - /* 44*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "AAT2556 电", 0, 0, "29 22 4E 42 0A 14 37 6F 62 2C 1F 7E 00", "M8 H1 (GB 2312)" }, + /* 44*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "AAT2556 电", ZINT_WARN_NONCOMPLIANT, 0, "Warning 29 22 4E 42 0A 14 37 6F 62 2C 1F 7E 00", "M8 H1 (GB 2312)" }, /* 45*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, " 200", 0, 0, "11 7A 06 23 7D 00", "N4 (ASCII)" }, - /* 46*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, " 200mA至", 0, 0, "2F 60 40 00 60 2B 78 63 41 7F 40", "M6 H1 (GB 2312)" }, + /* 46*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, " 200mA至", ZINT_WARN_NONCOMPLIANT, 0, "Warning 2F 60 40 00 60 2B 78 63 41 7F 40", "M6 H1 (GB 2312)" }, /* 47*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "2A tel:86 019 82512738", 0, 0, "28 22 5F 4F 29 48 5F 6D 7E 6F 55 57 1F 28 63 0F 5A 11 64 0F 74", "M2 L5(with control) N15 (ASCII)" }, - /* 48*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "至2A tel:86 019 82512738", 0, 0, "30 07 56 60 4C 48 13 6A 32 17 7B 3F 5B 75 35 67 6A 18 63 76 44 39 03 7D 00", "B4 L5(with control) N15 (GB 2312)" }, - /* 49*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "AAT2556 电池充电器+降压转换器 200mA至2A tel:86 019 82512738", 0, 0, "(62) 29 22 22 1C 4E 41 42 7E 0A 40 14 00 37 7E 6F 00 62 7E 2C 00 1C 7E 4B 00 41 7E 18 00", "M8 H11 M6 B4 L5(with control) N15 (GB 2312) (*NOT SAME* as D3 example Figure D.1, M8 H11 M6 H1 M3 L4(with control) N15, which uses a few more bits)" }, + /* 48*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "至2A tel:86 019 82512738", ZINT_WARN_NONCOMPLIANT, 0, "Warning 30 07 56 60 4C 48 13 6A 32 17 7B 3F 5B 75 35 67 6A 18 63 76 44 39 03 7D 00", "B4 L5(with control) N15 (GB 2312)" }, + /* 49*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "AAT2556 电池充电器+降压转换器 200mA至2A tel:86 019 82512738", ZINT_WARN_NONCOMPLIANT, 0, "Warning (62) 29 22 22 1C 4E 41 42 7E 0A 40 14 00 37 7E 6F 00 62 7E 2C 00 1C 7E 4B 00 41 7E 18 00", "M8 H11 M6 B4 L5(with control) N15 (GB 2312) (*NOT SAME* as D3 example Figure D.1, M8 H11 M6 H1 M3 L4(with control) N15, which uses a few more bits)" }, /* 50*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", 0, 0, "(588) 37 68 68 68 68 68 74 7E 74 74 74 74 74 3A 3A 3A 3A 3A 3A 3A 1D 1D 1D 1D 1D 1D 1D 0E", "B512 (ASCII)" }, /* 51*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\177", 0, 0, "(591) 37 68 68 68 68 68 74 7E 74 74 74 74 74 3A 3A 3A 3A 3A 3A 3A 1D 1D 1D 1D 1D 1D 1D 0E", "B513 (ASCII)" }, - /* 52*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::至", 0, 0, "(591) 37 68 68 68 68 68 74 7C 74 74 74 74 74 3A 3A 3A 3A 3A 3A 3A 1D 1D 1D 1D 1D 1D 1D 0E", "B511 H1 (GB 2312)" }, - /* 53*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::至:", 0, 0, "(592) 37 68 68 68 68 68 74 7E 74 74 74 74 74 3A 3A 3A 3A 3A 3A 3A 1D 1D 1D 1D 1D 1D 1D 0E", "B513 (GB 2312)" }, - /* 54*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电123456", 0, 0, "09 30 72 61 7F 70 41 76 72 1F 68", "H2 (GB 2312) N6" }, - /* 55*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电abcdef", 0, 0, "09 30 72 61 7F 71 00 08 43 10 5D 40", "H2 (GB 2312) L6" }, - /* 56*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电电电电\011\011\011", 0, 0, "09 30 72 61 65 43 4B 07 16 0F 7F 14 02 04 42 21 10", "H5 (GB 2312) B3" }, - /* 57*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "1234567电电", 0, 0, "14 1E 6E 22 5E 3F 59 30 72 61 7F 70 00", "N7 H2 (GB 2312)" }, + /* 52*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::至", ZINT_WARN_NONCOMPLIANT, 0, "Warning (591) 37 68 68 68 68 68 74 7C 74 74 74 74 74 3A 3A 3A 3A 3A 3A 3A 1D 1D 1D 1D 1D 1D 1D 0E", "B511 H1 (GB 2312)" }, + /* 53*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::至:", ZINT_WARN_NONCOMPLIANT, 0, "Warning (592) 37 68 68 68 68 68 74 7E 74 74 74 74 74 3A 3A 3A 3A 3A 3A 3A 1D 1D 1D 1D 1D 1D 1D 0E", "B513 (GB 2312)" }, + /* 54*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电123456", ZINT_WARN_NONCOMPLIANT, 0, "Warning 09 30 72 61 7F 70 41 76 72 1F 68", "H2 (GB 2312) N6" }, + /* 55*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电abcdef", ZINT_WARN_NONCOMPLIANT, 0, "Warning 09 30 72 61 7F 71 00 08 43 10 5D 40", "H2 (GB 2312) L6" }, + /* 56*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电电电电\011\011\011", ZINT_WARN_NONCOMPLIANT, 0, "Warning 09 30 72 61 65 43 4B 07 16 0F 7F 14 02 04 42 21 10", "H5 (GB 2312) B3" }, + /* 57*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "1234567电电", ZINT_WARN_NONCOMPLIANT, 0, "Warning 14 1E 6E 22 5E 3F 59 30 72 61 7F 70 00", "N7 H2 (GB 2312)" }, /* 58*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "12345678mA 2", 0, 0, "12 1E 6E 23 06 3F 76 02 5F 02 7E 00", "N8 M4" }, - /* 59*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "ABCDEFG电电", 0, 0, "20 01 08 32 0A 37 05 43 4B 07 7F 40", "U7 H2 (GB 2312)" }, + /* 59*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "ABCDEFG电电", ZINT_WARN_NONCOMPLIANT, 0, "Warning 20 01 08 32 0A 37 05 43 4B 07 7F 40", "U7 H2 (GB 2312)" }, /* 60*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "ABCDEFGHIJ8mA 2", 0, 0, "20 01 08 32 0A 31 68 27 70 46 02 5F 02 7E 00", "U10 M5" }, /* 61*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "ABCDEFGHIJ\011\011\011\011", 0, 0, "20 01 08 32 0A 31 68 27 78 03 04 42 21 10 48 00", "U10 B4" }, /* 62*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "8mA B123456789", 0, 0, "29 0C 05 3E 17 7C 40 7B 39 0C 2B 7E 40", "M5 N9" }, @@ -255,8 +254,8 @@ static void test_input(int index, int generate, int debug) { /* 64*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "\011\011\011\011123456", 0, 0, "30 06 09 04 42 21 12 03 6D 64 3F 50", "B4 N6" }, /* 65*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "\011\011\011\011ABCDEF", 0, 0, "30 06 09 04 42 21 14 00 11 06 21 3B", "B4 U6" }, /* 66*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "\011\011\011\0118mA 2", 0, 0, "30 06 09 04 42 21 15 11 40 57 60 5F 40", "B4 M5" }, - /* 67*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电电电电\015\012", 0, 0, "09 30 72 61 65 43 4B 07 16 0F 73 03 7E 00", "H7 (GB 2312)" }, - /* 68*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电电电电12", 0, 0, "09 30 72 61 65 43 4B 07 16 0F 7B 37 7E 00", "H7 (GB 2312)" }, + /* 67*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电电电电\015\012", ZINT_WARN_NONCOMPLIANT, 0, "Warning 09 30 72 61 65 43 4B 07 16 0F 73 03 7E 00", "H7 (GB 2312)" }, + /* 68*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "电电电电电12", ZINT_WARN_NONCOMPLIANT, 0, "Warning 09 30 72 61 65 43 4B 07 16 0F 7B 37 7E 00", "H7 (GB 2312)" }, /* 69*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "1234567.8\015\012123456", 0, 0, "10 1E 6E 23 79 30 67 77 0F 37 11 7E 40", "N17" }, /* 70*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "˘", ZINT_WARN_USES_ECI, 4, "Warning 60 02 18 00 51 00", "ECI-4 B1 (ISO 8859-2)" }, /* 71*/ { UNICODE_MODE, 4, -1, -1, { 0, 0, "" }, "˘", 0, 4, "60 02 18 00 51 00", "ECI-4 B1 (ISO 8859-2)" }, @@ -266,11 +265,11 @@ static void test_input(int index, int generate, int debug) { /* 75*/ { UNICODE_MODE, 7, -1, -1, { 0, 0, "" }, "Ж", 0, 7, "60 03 58 00 5B 00", "ECI-7 B1 (ISO 8859-5)" }, /* 76*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "Ș", ZINT_WARN_USES_ECI, 18, "Warning 60 09 18 00 55 00", "ECI-18 B1 (ISO 8859-16)" }, /* 77*/ { UNICODE_MODE, 18, -1, -1, { 0, 0, "" }, "Ș", 0, 18, "60 09 18 00 55 00", "ECI-18 B1 (ISO 8859-16)" }, - /* 78*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "テ", 0, 0, "08 34 6F 78 00", "H1 (GB 2312)" }, + /* 78*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "テ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 08 34 6F 78 00", "H1 (GB 2312)" }, /* 79*/ { UNICODE_MODE, 20, -1, -1, { 0, 0, "" }, "テ", 0, 20, "60 0A 18 01 41 59 20", "ECI-20 B2 (SHIFT JIS)" }, /* 80*/ { UNICODE_MODE, 20, -1, -1, { 0, 0, "" }, "テテ", 0, 20, "60 0A 18 03 41 59 30 36 28 00", "ECI-20 B4 (SHIFT JIS)" }, /* 81*/ { UNICODE_MODE, 20, -1, -1, { 0, 0, "" }, "\\\\", 0, 20, "60 0A 18 03 40 57 70 15 78 00", "ECI-20 B4 (SHIFT JIS)" }, - /* 82*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "…", 0, 0, "08 01 5F 78 00", "H1 (GB 2312)" }, + /* 82*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "…", ZINT_WARN_NONCOMPLIANT, 0, "Warning 08 01 5F 78 00", "H1 (GB 2312)" }, /* 83*/ { UNICODE_MODE, 21, -1, -1, { 0, 0, "" }, "…", 0, 21, "60 0A 58 00 42 40", "ECI-21 B1 (Win 1250)" }, /* 84*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "Ґ", ZINT_WARN_USES_ECI, 22, "Warning 60 0B 18 00 52 40", "ECI-22 B1 (Win 1251)" }, /* 85*/ { UNICODE_MODE, 22, -1, -1, { 0, 0, "" }, "Ґ", 0, 22, "60 0B 18 00 52 40", "ECI-22 B1 (Win 1251)" }, @@ -285,7 +284,7 @@ static void test_input(int index, int generate, int debug) { /* 94*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "龘", ZINT_WARN_USES_ECI, 26, "Warning 60 0D 18 02 74 6F 53 00", "ECI-26 B3 (UTF-8)" }, /* 95*/ { UNICODE_MODE, 28, -1, -1, { 0, 0, "" }, "龘", 0, 28, "60 0E 18 01 7C 75 20", "ECI-28 B2 (Big5)" }, /* 96*/ { UNICODE_MODE, 28, -1, -1, { 0, 0, "" }, "龘龘", 0, 28, "60 0E 18 03 7C 75 3F 1D 28 00", "ECI-28 B4 (Big5)" }, - /* 97*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "齄", 0, 0, "0F 4B 6F 78 00", "H1 (GB 2312)" }, + /* 97*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "齄", ZINT_WARN_NONCOMPLIANT, 0, "Warning 0F 4B 6F 78 00", "H1 (GB 2312)" }, /* 98*/ { UNICODE_MODE, 29, -1, -1, { 0, 0, "" }, "齄", 0, 29, "60 0E 47 65 77 7C 00", "ECI-29 H1 (GB 2312)" }, /* 99*/ { UNICODE_MODE, 29, -1, -1, { 0, 0, "" }, "齄齄", 0, 29, "60 0E 47 65 77 4B 6F 78 00", "ECI-29 H2 (GB 2312)" }, /*100*/ { UNICODE_MODE, 0, -1, -1, { 0, 0, "" }, "가", ZINT_WARN_USES_ECI, 26, "Warning 60 0D 18 02 75 2C 10 00", "ECI-26 B3 (UTF-8)" }, @@ -416,7 +415,7 @@ static void test_encode(int index, int generate, int debug) { "101111010010100001010010110111" "111111000000111111000000111111" }, - /* 2*/ { "AAT2556 电池充电器+降压转换器 200mA至2A tel:86 019 82512738", UNICODE_MODE, 3, 3, 0, 42, 42, "AIMD014 Figure D.1 **NOT SAME** different encodation, see test_input dataset", + /* 2*/ { "AAT2556 电池充电器+降压转换器 200mA至2A tel:86 019 82512738", UNICODE_MODE, 3, 3, ZINT_WARN_NONCOMPLIANT, 42, 42, "AIMD014 Figure D.1 **NOT SAME** different encodation, see test_input dataset", "111111000000111111000000111111000000111111" "101101001100101111001010101011001100101101" "110001011010110101010000100011000000100001" @@ -603,3 +602,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et norl : */ diff --git a/backend/tests/test_hanxin.c b/backend/tests/test_hanxin.c index 571addb5..33537263 100644 --- a/backend/tests/test_hanxin.c +++ b/backend/tests/test_hanxin.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et norl : */ #include "testcommon.h" @@ -46,22 +45,22 @@ static void test_large(int index, int debug) { struct item data[] = { /* 0*/ { -1, -1, "1", 7827, 0, 189, 189 }, /* 1*/ { -1, -1, "1", 7828, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 2*/ { -1, -1, "A", 4349, 0, 189, 189 }, // TODO: should be 4350 according to spec, investigate - /* 3*/ { -1, -1, "A", 4350, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 4*/ { -1, -1, "\200", 3260, 0, 189, 189 }, // TODO: should be 3261 according to spec, investigate - /* 5*/ { -1, -1, "\200", 3261, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 6*/ { -1, 1, "1", 42, 0, 23, 23 }, - /* 7*/ { -1, 1, "1", 43, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 8*/ { -1, 1, "A", 25, 0, 23, 23 }, - /* 9*/ { -1, 1, "A", 26, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 10*/ { -1, 1, "\200", 17, 0, 23, 23 }, - /* 11*/ { -1, 1, "\200", 18, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 12*/ { 2, 1, "A", 19, 0, 23, 23 }, - /* 13*/ { 2, 1, "A", 20, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 14*/ { 3, 1, "A", 14, 0, 23, 23 }, - /* 15*/ { 3, 1, "A", 15, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 16*/ { 4, 1, "A", 9, 0, 23, 23 }, - /* 17*/ { 4, 1, "A", 10, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 2*/ { -1, -1, "A", 4350, 0, 189, 189 }, + /* 3*/ { -1, -1, "A", 4351, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 4*/ { -1, -1, "\200", 3261, 0, 189, 189 }, + /* 5*/ { -1, -1, "\200", 3262, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 6*/ { -1, 1, "1", 45, 0, 23, 23 }, + /* 7*/ { -1, 1, "1", 46, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 8*/ { -1, 1, "A", 26, 0, 23, 23 }, + /* 9*/ { -1, 1, "A", 27, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 10*/ { -1, 1, "\200", 18, 0, 23, 23 }, + /* 11*/ { -1, 1, "\200", 19, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 12*/ { 2, 1, "A", 21, 0, 23, 23 }, + /* 13*/ { 2, 1, "A", 22, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 14*/ { 3, 1, "A", 15, 0, 23, 23 }, + /* 15*/ { 3, 1, "A", 16, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 16*/ { 4, 1, "A", 10, 0, 23, 23 }, + /* 17*/ { 4, 1, "A", 11, ZINT_ERROR_TOO_LONG, -1, -1 }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -114,13 +113,13 @@ static void test_options(int index, int debug) { /* 2*/ { -1, 2, "12345", 0, 0, 25 }, /* 3*/ { -1, 85, "12345", 0, 0, 23 }, // Version > max version 85 so ignored /* 4*/ { -1, 84, "12345", 0, 0, 189 }, - /* 5*/ { 1, 1, "1234567890123456789012345678901234567890123", ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 5*/ { 1, 1, "1234567890123456789012345678901234567890123456", ZINT_ERROR_TOO_LONG, -1, -1 }, /* 6*/ { 4, 1, "1234567890123456", ZINT_ERROR_TOO_LONG, -1, -1 }, /* 7*/ { 4, 2, "12345678901234567", 0, 0, 25 }, /* 8*/ { 4, -1, "12345678901234567", 0, 0, 25 }, // Version auto-set to 2 /* 9*/ { -1, -1, "12345678901234567", 0, 0, 23 }, // Version auto-set to 1, ECC auto-set to 3 /* 10*/ { 5, -1, "12345678901234567", 0, 0, 23 }, // ECC > max ECC 4 so ignored and auto-settings version 1, ECC 3 used - /* 11*/ { -1, -1, "1234567890123456789012345678901234567890123", 0, 0, 25 }, // Version auto-set to 2, ECC auto-set to 2 + /* 11*/ { -1, -1, "1234567890123456789012345678901234567890123456", 0, 0, 25 }, // Version auto-set to 2, ECC auto-set to 2 }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -178,85 +177,89 @@ static void test_input(int index, int generate, int debug) { struct item data[] = { /* 0*/ { UNICODE_MODE, 0, -1, "é", -1, 0, 0, "30 00 F4 80 00 00 00 00 00", "B1 (ISO 8859-1)" }, /* 1*/ { UNICODE_MODE, 3, -1, "é", -1, 0, 3, "80 33 00 0F 48 00 00 00 00", "ECI-3 B1 (ISO 8859-1)" }, - /* 2*/ { UNICODE_MODE, 29, -1, "é", -1, 0, 29, "81 D4 FC FF FF 00 00 00 00", "ECI-29 H(1)1 (GB 18030) (Region One)" }, - /* 3*/ { UNICODE_MODE, 26, -1, "é", -1, 0, 26, "81 A3 00 16 1D 48 00 00 00", "ECI-26 B2 (UTF-8)" }, - /* 4*/ { UNICODE_MODE, 26, ZINT_FULL_MULTIBYTE, "é", -1, 0, 26, "81 A4 70 2F FF 00 00 00 00", "ECI-26 H(1)1 (Region One) (UTF-8) (full multibyte)" }, - /* 5*/ { DATA_MODE, 0, -1, "é", -1, 0, 0, "30 01 61 D4 80 00 00 00 00", "B2 (UTF-8)" }, - /* 6*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "é", -1, 0, 0, "47 02 FF F0 00 00 00 00 00", "H(1)1 (UTF-8) (Region One) (full multibyte)" }, - /* 7*/ { DATA_MODE, 0, -1, "\351", -1, 0, 0, "30 00 F4 80 00 00 00 00 00", "B1 (ISO 8859-1) (0xE9)" }, - /* 8*/ { UNICODE_MODE, 0, -1, "β", -1, 0, 0, "30 01 53 61 00 00 00 00 00", "B2 (GB 18030) (2-byte Region)" }, - /* 9*/ { UNICODE_MODE, 9, -1, "β", -1, 0, 9, "80 93 00 0F 10 00 00 00 00", "ECI-9 B1 (ISO 8859-7)" }, - /* 10*/ { UNICODE_MODE, 29, -1, "β", -1, 0, 29, "81 D3 00 15 36 10 00 00 00", "ECI-29 B2 (GB 18030) (2-byte Region)" }, - /* 11*/ { UNICODE_MODE, 26, -1, "β", -1, 0, 26, "81 A3 00 16 75 90 00 00 00", "ECI-26 B2 (UTF-8)" }, - /* 12*/ { UNICODE_MODE, 26, ZINT_FULL_MULTIBYTE, "β", -1, 0, 26, "81 A4 B1 5F FF 00 00 00 00", "ECI-26 B2 (UTF-8) (full multibyte)" }, - /* 13*/ { DATA_MODE, 0, -1, "β", -1, 0, 0, "30 01 67 59 00 00 00 00 00", "B2 (UTF-8)" }, - /* 14*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "β", -1, 0, 0, "4B 15 FF F0 00 00 00 00 00", "H(1)1 (UTF-8) (Region One) (full multibyte)" }, - /* 15*/ { UNICODE_MODE, 0, -1, "ÿ", -1, 0, 0, "30 00 FF 80 00 00 00 00 00", "B1 (ISO 8859-1)" }, - /* 16*/ { UNICODE_MODE, 0, -1, "ÿÿÿ", -1, 0, 0, "30 01 FF FF FF 80 00 00 00", "B3 (ISO 8859-1)" }, - /* 17*/ { UNICODE_MODE, 0, -1, "\302\200", -1, 0, 0, "70 00 00 00 00 00 00 00 00", "H(f)1 (GB 18030) (4-byte Region) (not DATA_MODE so GB 18030 mapping)" }, - /* 18*/ { UNICODE_MODE, 0, ZINT_FULL_MULTIBYTE, "\302\200", -1, 0, 0, "70 00 00 00 00 00 00 00 00", "H(f)1 (GB 18030) (4-byte Region)" }, - /* 19*/ { DATA_MODE, 0, 0, "\302\200", -1, 0, 0, "30 01 61 40 00 00 00 00 00", "B2 (UTF-8)" }, - /* 20*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "\302\200", -1, 0, 0, "30 01 61 40 00 00 00 00 00", "B2 (UTF-8) (full multibyte)" }, - /* 21*/ { UNICODE_MODE, 0, -1, "\302\200�", -1, 0, 0, "70 00 00 38 26 7E 40 00 00", "H(f)2 (GB 18030) (both 4-byte Region) (not DATA_MODE so GB 18030 mapping)" }, - /* 22*/ { UNICODE_MODE, 0, ZINT_FULL_MULTIBYTE, "\302\200�", -1, 0, 0, "70 00 00 38 26 7E 40 00 00", "H(f)2 (GB 18030) (both 4-byte Region)" }, - /* 23*/ { UNICODE_MODE, 0, -1, "啊亍齄丂\302\200", -1, 0, 0, "64 68 50 3C AC 28 80 00 FF FE E0 00 00 00 00 00 00", "H(d)4 H(f)1 (GB 18030)" }, - /* 24*/ { DATA_MODE, 0, -1, "\177\177", -1, 0, 0, "2F BD F7 F0 00 00 00 00 00", "T2 (ASCII)" }, - /* 25*/ { DATA_MODE, 0, -1, "\177\177\177", -1, 0, 0, "2F BD F7 DF C0 00 00 00 00", "T3 (ASCII)" }, - /* 26*/ { UNICODE_MODE, 0, -1, "123", -1, 0, 0, "11 EF FF 00 00 00 00 00 00", "N3 (ASCII)" }, - /* 27*/ { UNICODE_MODE, 0, -1, "12345", -1, 0, 0, "11 EC 2D FF 80 00 00 00 00", "N5 (ASCII)" }, - /* 28*/ { UNICODE_MODE, 0, -1, "Aa%$Bb9", -1, 0, 0, "22 A4 FA 18 3E 2E 52 7F 00", "T7 (ASCII)" }, - /* 29*/ { UNICODE_MODE, 0, -1, "Summer Palace Ticket for 6 June 2015 13:00;2015年6月6日夜01時00分PM頤和園のチケット;2015년6월6일13시오후여름궁전티켓.2015年6月6号下午13:00的颐和园门票;", -1, 0, 0, "(189) 27 38 C3 0A 35 F9 CF 99 92 F9 26 A3 E7 3E 76 C9 AE A3 7F CC 08 04 0C CD EE 44 06 C4", "T20 B64 N4 H(f)1 T1 H(f)1 T1 H(f)1 T2 H(f)9 B35 (GB 18030)" }, - /* 30*/ { DATA_MODE, 0, -1, "Summer Palace Ticket for 6 June 2015 13:00;2015年6月6日夜01時00分PM頤和園のチケット;2015년6월6일13시오후여름궁전티켓.2015年6月6号下午13:00的颐和园门票;", -1, 0, 0, "(209) 27 38 C3 0A 35 F9 CF 99 92 F9 26 A3 E7 3E 76 C9 AE A3 7F CC 15 04 0C CD EE 44 06 C4", "T20 B117 (UTF-8)" }, - /* 31*/ { UNICODE_MODE, 0, -1, "\000\014\033 #/059:<@AMZ", 15, 0, 0, "2F 80 31 B7 1F AF E0 05 27 EB 2E CB E2 96 8F F0 00", "T15 (ASCII)" }, - /* 32*/ { UNICODE_MODE, 0, -1, "Z[\\`alz{~\177", -1, 0, 0, "28 FE CF 4E 3E 92 FF 7E E7 CF 7F 00 00", "T10 (ASCII)" }, - /* 33*/ { DATA_MODE, 26, ZINT_FULL_MULTIBYTE, "\202\061\203\063", -1, 0, 26, "81 A7 01 B1 D8 00 00 00 00", "ECI-26 H(f)1 (GB 18030) (Invalid UTF-8, forces GB 2312/18030 utf8tosb() difference) NOTE: 2021-01-10 now UTF-8 is checked and mode -> DATA_MODE this test no longer shows difference" }, - /* 34*/ { UNICODE_MODE, 128, 0, "A", -1, 0, 128, "88 08 02 2B F0 00 00 00 00", "ECI > 127" }, - /* 35*/ { UNICODE_MODE, 16364, 0, "A", -1, 0, 16364, "8B FE C2 2B F0 00 00 00 00", "ECI > 16363" }, - /* 36*/ { UNICODE_MODE, 0, -1, "啊啊啊亍", -1, 0, 0, "40 00 00 00 00 FF E0 00 FF F0 00 00 00", "Region 1 (FFE terminator) -> Region 2 (no indicator)" }, - /* 37*/ { UNICODE_MODE, 0, -1, "亍亍亍啊", -1, 0, 0, "50 00 00 00 00 FF E0 00 FF F0 00 00 00", "Region 2 (FFE terminator) -> Region 1 (no indicator)" }, - /* 38*/ { UNICODE_MODE, 0, -1, "啊啊啊啊亍亍啊", -1, 0, 0, "40 00 00 00 00 00 0F FE 00 00 00 FF E0 00 FF F0 00", "Region 1 (FFE) -> Region 2 (FFE) -> Region 1" }, - /* 39*/ { UNICODE_MODE, 0, -1, "亍亍亍亍啊啊亍", -1, 0, 0, "50 00 00 00 00 00 0F FE 00 00 00 FF E0 00 FF F0 00", "Region 2 (FFE) -> Region 1 (FFE) -> Region 2" }, - /* 40*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE | (2 << 8), "é", -1, 0, 0, "47 02 FF F0 00 00 00 00 00", "H(1)1 (UTF-8) (Region One) (full multibyte with mask)" }, - /* 41*/ { UNICODE_MODE, 0, -1, "˘", -1, 0, 0, "70 01 16 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 42*/ { UNICODE_MODE, 4, -1, "˘", -1, 0, 4, "80 43 00 0D 10 00 00 00 00", "ECI-4 B1 (ISO 8859-2)" }, - /* 43*/ { UNICODE_MODE, 0, -1, "Ħ", -1, 0, 0, "70 00 47 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 44*/ { UNICODE_MODE, 5, -1, "Ħ", -1, 0, 5, "80 53 00 0D 08 00 00 00 00", "ECI-5 B1 (ISO 8859-3)" }, - /* 45*/ { UNICODE_MODE, 0, -1, "ĸ", -1, 0, 0, "70 00 50 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 46*/ { UNICODE_MODE, 6, -1, "ĸ", -1, 0, 6, "80 63 00 0D 10 00 00 00 00", "ECI-6 B1 (ISO 8859-4)" }, - /* 47*/ { UNICODE_MODE, 0, -1, "Ж", -1, 0, 0, "30 01 53 D4 00 00 00 00 00", "B2 (GB 18030)" }, - /* 48*/ { UNICODE_MODE, 7, -1, "Ж", -1, 0, 7, "80 73 00 0D B0 00 00 00 00", "ECI-7 B1 (ISO 8859-5)" }, - /* 49*/ { UNICODE_MODE, 0, -1, "Ș", -1, 0, 0, "70 00 B9 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 50*/ { UNICODE_MODE, 18, -1, "Ș", -1, 0, 18, "81 23 00 0D 50 00 00 00 00", "ECI-18 B1 (ISO 8859-16)" }, - /* 51*/ { UNICODE_MODE, 0, -1, "テ", -1, 0, 0, "30 01 52 E3 00 00 00 00 00", "B2 (GB 18030)" }, - /* 52*/ { UNICODE_MODE, 20, -1, "テ", -1, 0, 20, "81 43 00 14 1B 28 00 00 00", "ECI-20 B2 (SHIFT JIS)" }, - /* 53*/ { UNICODE_MODE, 20, -1, "テテ", -1, 0, 20, "81 43 00 24 1B 2C 1B 28 00", "ECI-20 B4 (SHIFT JIS)" }, - /* 54*/ { UNICODE_MODE, 20, -1, "\\\\", -1, 0, 20, "81 43 00 24 0A FC 0A F8 00", "ECI-20 B4 (SHIFT JIS)" }, - /* 55*/ { UNICODE_MODE, 0, -1, "…", -1, 0, 0, "4E BC FF F0 00 00 00 00 00", "H(1)1 (GB 18030)" }, - /* 56*/ { UNICODE_MODE, 21, -1, "…", -1, 0, 21, "81 53 00 0C 28 00 00 00 00", "ECI-21 B1 (Win 1250)" }, - /* 57*/ { UNICODE_MODE, 0, -1, "Ґ", -1, 0, 0, "70 01 B9 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 58*/ { UNICODE_MODE, 22, -1, "Ґ", -1, 0, 22, "81 63 00 0D 28 00 00 00 00", "ECI-22 B1 (Win 1251)" }, - /* 59*/ { UNICODE_MODE, 0, -1, "˜", -1, 0, 0, "70 01 18 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 60*/ { UNICODE_MODE, 23, -1, "˜", -1, 0, 23, "81 73 00 0C C0 00 00 00 00", "ECI-23 B1 (Win 1252)" }, - /* 61*/ { UNICODE_MODE, 24, -1, "پ", -1, 0, 24, "81 83 00 0C 08 00 00 00 00", "ECI-24 B1 (Win 1256)" }, - /* 62*/ { UNICODE_MODE, 0, -1, "က", -1, 0, 0, "70 07 71 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 63*/ { UNICODE_MODE, 25, -1, "က", -1, 0, 25, "81 92 F9 00 3F 00 00 00 00", "ECI-25 T2 (UCS-2BE)" }, - /* 64*/ { UNICODE_MODE, 25, -1, "ကက", -1, 0, 25, "81 92 F9 00 10 03 F0 00 00", "ECI-25 T4 (UCS-2BE)" }, - /* 65*/ { UNICODE_MODE, 25, -1, "12", -1, 0, 25, "81 93 00 20 01 88 01 90 00", "ECI-25 B4 (UCS-2BE ASCII)" }, - /* 66*/ { UNICODE_MODE, 27, -1, "@", -1, 0, 27, "81 B2 FB 2F C0 00 00 00 00", "ECI-27 T1 (ASCII)" }, - /* 67*/ { UNICODE_MODE, 0, -1, "龘", -1, 0, 0, "30 01 7E C9 80 00 00 00 00", "B2 (GB 18030)" }, - /* 68*/ { UNICODE_MODE, 28, -1, "龘", -1, 0, 28, "81 C3 00 17 CE A8 00 00 00", "ECI-28 B2 (Big5)" }, - /* 69*/ { UNICODE_MODE, 28, -1, "龘龘", -1, 0, 28, "81 C3 00 27 CE AF CE A8 00", "ECI-28 B4 (Big5)" }, - /* 70*/ { UNICODE_MODE, 0, -1, "齄", -1, 0, 0, "5B BF FF F0 00 00 00 00 00", "H(2)1 (GB 18030)" }, - /* 71*/ { UNICODE_MODE, 29, -1, "齄", -1, 0, 29, "81 D5 BB FF FF 00 00 00 00", "ECI-29 H(2)1 (GB 2312)" }, - /* 72*/ { UNICODE_MODE, 29, -1, "齄齄", -1, 0, 29, "81 D5 BB FB BF FF F0 00 00", "ECI-29 H(2)2 (GB 2312)" }, - /* 73*/ { UNICODE_MODE, 0, -1, "가", -1, 0, 0, "70 2B 5E 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, - /* 74*/ { UNICODE_MODE, 30, -1, "가", -1, 0, 30, "81 E3 00 15 85 08 00 00 00", "ECI-30 T2 (EUC-KR)" }, - /* 75*/ { UNICODE_MODE, 30, -1, "가가", -1, 0, 30, "81 E3 00 25 85 0D 85 08 00", "ECI-30 B4 (EUC-KR)" }, - /* 76*/ { UNICODE_MODE, 170, -1, "?", -1, 0, 170, "88 0A A2 FB 1F C0 00 00 00", "ECI-170 L1 (ASCII invariant)" }, - /* 77*/ { DATA_MODE, 899, -1, "\200", -1, 0, 899, "88 38 33 00 0C 00 00 00 00", "ECI-899 B1 (8-bit binary)" }, - /* 78*/ { UNICODE_MODE, 900, -1, "é", -1, 0, 900, "88 38 43 00 16 1D 48 00 00", "ECI-900 B2 (no conversion)" }, - /* 79*/ { UNICODE_MODE, 16384, -1, "é", -1, 0, 16384, "8C 04 00 03 00 16 1D 48 00", "ECI-16384 B2 (no conversion)" }, - /* 80*/ { UNICODE_MODE, 3, -1, "β", -1, ZINT_ERROR_INVALID_DATA, 3, "Error 545: Invalid character in input data for ECI 3", "" }, + /* 2*/ { UNICODE_MODE, 29, -1, "é", -1, 0, 29, "81 D3 00 15 45 30 00 00 00", "ECI-29 B2 (GB 2312)" }, + /* 3*/ { UNICODE_MODE, 32, -1, "é", -1, 0, 32, "82 04 FC FF FF 00 00 00 00", "ECI-32 H(1)1 (GB 18030) (Region One)" }, + /* 4*/ { UNICODE_MODE, 26, -1, "é", -1, 0, 26, "81 A3 00 16 1D 48 00 00 00", "ECI-26 B2 (UTF-8)" }, + /* 5*/ { UNICODE_MODE, 26, ZINT_FULL_MULTIBYTE, "é", -1, 0, 26, "81 A4 70 2F FF 00 00 00 00", "ECI-26 H(1)1 (Region One) (UTF-8) (full multibyte)" }, + /* 6*/ { DATA_MODE, 0, -1, "é", -1, 0, 0, "30 01 61 D4 80 00 00 00 00", "B2 (UTF-8)" }, + /* 7*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "é", -1, 0, 0, "47 02 FF F0 00 00 00 00 00", "H(1)1 (UTF-8) (Region One) (full multibyte)" }, + /* 8*/ { DATA_MODE, 0, -1, "\351", -1, 0, 0, "30 00 F4 80 00 00 00 00 00", "B1 (ISO 8859-1) (0xE9)" }, + /* 9*/ { UNICODE_MODE, 0, -1, "β", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 30 01 53 61 00 00 00 00 00", "B2 (GB 18030) (2-byte Region)" }, + /* 10*/ { UNICODE_MODE, 9, -1, "β", -1, 0, 9, "80 93 00 0F 10 00 00 00 00", "ECI-9 B1 (ISO 8859-7)" }, + /* 11*/ { UNICODE_MODE, 29, -1, "β", -1, 0, 29, "81 D3 00 15 36 10 00 00 00", "ECI-29 B2 (GB 2312)" }, + /* 12*/ { UNICODE_MODE, 32, -1, "β", -1, 0, 32, "82 03 00 15 36 10 00 00 00", "ECI-32 B2 (GB 18030) (2-byte Region)" }, + /* 13*/ { UNICODE_MODE, 26, -1, "β", -1, 0, 26, "81 A3 00 16 75 90 00 00 00", "ECI-26 B2 (UTF-8)" }, + /* 14*/ { UNICODE_MODE, 26, ZINT_FULL_MULTIBYTE, "β", -1, 0, 26, "81 A4 B1 5F FF 00 00 00 00", "ECI-26 B2 (UTF-8) (full multibyte)" }, + /* 15*/ { DATA_MODE, 0, -1, "β", -1, 0, 0, "30 01 67 59 00 00 00 00 00", "B2 (UTF-8)" }, + /* 16*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "β", -1, 0, 0, "4B 15 FF F0 00 00 00 00 00", "H(1)1 (UTF-8) (Region One) (full multibyte)" }, + /* 17*/ { UNICODE_MODE, 0, -1, "ÿ", -1, 0, 0, "30 00 FF 80 00 00 00 00 00", "B1 (ISO 8859-1)" }, + /* 18*/ { UNICODE_MODE, 0, -1, "ÿÿÿ", -1, 0, 0, "30 01 FF FF FF 80 00 00 00", "B3 (ISO 8859-1)" }, + /* 19*/ { UNICODE_MODE, 0, -1, "\302\200", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 00 00 00 00 00 00 00 00", "H(f)1 (GB 18030) (4-byte Region) (not DATA_MODE so GB 18030 mapping)" }, + /* 20*/ { UNICODE_MODE, 0, ZINT_FULL_MULTIBYTE, "\302\200", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 00 00 00 00 00 00 00 00", "H(f)1 (GB 18030) (4-byte Region)" }, + /* 21*/ { DATA_MODE, 0, 0, "\302\200", -1, 0, 0, "30 01 61 40 00 00 00 00 00", "B2 (UTF-8)" }, + /* 22*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "\302\200", -1, 0, 0, "30 01 61 40 00 00 00 00 00", "B2 (UTF-8) (full multibyte)" }, + /* 23*/ { UNICODE_MODE, 0, -1, "\302\200�", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 00 00 38 26 7E 40 00 00", "H(f)2 (GB 18030) (both 4-byte Region) (not DATA_MODE so GB 18030 mapping)" }, + /* 24*/ { UNICODE_MODE, 0, ZINT_FULL_MULTIBYTE, "\302\200�", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 00 00 38 26 7E 40 00 00", "H(f)2 (GB 18030) (both 4-byte Region)" }, + /* 25*/ { UNICODE_MODE, 0, -1, "啊亍齄丂\302\200", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 64 68 50 3C AC 28 80 00 FF FE E0 00 00", "H(d)4 H(f)1 (GB 18030)" }, + /* 26*/ { DATA_MODE, 0, -1, "\177\177", -1, 0, 0, "2F BD F7 F0 00 00 00 00 00", "T2 (ASCII)" }, + /* 27*/ { DATA_MODE, 0, -1, "\177\177\177", -1, 0, 0, "2F BD F7 DF C0 00 00 00 00", "T3 (ASCII)" }, + /* 28*/ { UNICODE_MODE, 0, -1, "123", -1, 0, 0, "11 EF FF 00 00 00 00 00 00", "N3 (ASCII)" }, + /* 29*/ { UNICODE_MODE, 0, -1, "12345", -1, 0, 0, "11 EC 2D FF 80 00 00 00 00", "N5 (ASCII)" }, + /* 30*/ { UNICODE_MODE, 0, -1, "Aa%$Bb9", -1, 0, 0, "22 A4 FA 18 3E 2E 52 7F 00", "T7 (ASCII)" }, + /* 31*/ { UNICODE_MODE, 0, -1, "Summer Palace Ticket for 6 June 2015 13:00;2015年6月6日夜01時00分PM頤和園のチケット;2015년6월6일13시오후여름궁전티켓.2015年6月6号下午13:00的颐和园门票;", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning (171) 27 38 C3 0A 35 F9 CF 99 92 F9 26 A3 E7 3E 76 C9 AE A3 7F CC 08 04 0C CD EE 44 06 C4", "T20 B64 N4 H(f)1 T1 H(f)1 T1 H(f)1 T2 H(f)9 B35 (GB 18030)" }, + /* 32*/ { DATA_MODE, 0, -1, "Summer Palace Ticket for 6 June 2015 13:00;2015年6月6日夜01時00分PM頤和園のチケット;2015년6월6일13시오후여름궁전티켓.2015年6月6号下午13:00的颐和园门票;", -1, 0, 0, "(209) 27 38 C3 0A 35 F9 CF 99 92 F9 26 A3 E7 3E 76 C9 AE A3 7F CC 15 04 0C CD EE 44 06 C4", "T20 B117 (UTF-8)" }, + /* 33*/ { UNICODE_MODE, 0, -1, "\000\014\033 #/059:<@AMZ", 15, 0, 0, "2F 80 31 B7 1F AF E0 05 27 EB 2E CB E2 96 8F F0 00", "T15 (ASCII)" }, + /* 34*/ { UNICODE_MODE, 0, -1, "Z[\\`alz{~\177", -1, 0, 0, "28 FE CF 4E 3E 92 FF 7E E7 CF 7F 00 00", "T10 (ASCII)" }, + /* 35*/ { DATA_MODE, 26, ZINT_FULL_MULTIBYTE, "\202\061\203\063", -1, 0, 26, "81 A7 01 B1 D8 00 00 00 00", "ECI-26 H(f)1 (GB 18030) (Invalid UTF-8, forces GB 2312/18030 utf8tosb() difference) NOTE: 2021-01-10 now UTF-8 is checked and mode -> DATA_MODE this test no longer shows difference" }, + /* 36*/ { UNICODE_MODE, 128, 0, "A", -1, 0, 128, "88 08 02 2B F0 00 00 00 00", "ECI > 127" }, + /* 37*/ { UNICODE_MODE, 16364, 0, "A", -1, 0, 16364, "8B FE C2 2B F0 00 00 00 00", "ECI > 16363" }, + /* 38*/ { UNICODE_MODE, 0, -1, "啊啊啊亍", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 40 00 00 00 00 FF E0 00 FF F0 00 00 00", "Region 1 (FFE terminator) -> Region 2 (no indicator)" }, + /* 39*/ { UNICODE_MODE, 0, -1, "亍亍亍啊", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 50 00 00 00 00 FF E0 00 FF F0 00 00 00", "Region 2 (FFE terminator) -> Region 1 (no indicator)" }, + /* 40*/ { UNICODE_MODE, 0, -1, "啊啊啊啊亍亍啊", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 40 00 00 00 00 00 0F FE 00 00 00 FF E0 00 FF F0 00", "Region 1 (FFE) -> Region 2 (FFE) -> Region 1" }, + /* 41*/ { UNICODE_MODE, 0, -1, "亍亍亍亍啊啊亍", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 50 00 00 00 00 00 0F FE 00 00 00 FF E0 00 FF F0 00", "Region 2 (FFE) -> Region 1 (FFE) -> Region 2" }, + /* 42*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE | (2 << 8), "é", -1, 0, 0, "47 02 FF F0 00 00 00 00 00", "H(1)1 (UTF-8) (Region One) (full multibyte with mask)" }, + /* 43*/ { UNICODE_MODE, 0, -1, "˘", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 01 16 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 44*/ { UNICODE_MODE, 4, -1, "˘", -1, 0, 4, "80 43 00 0D 10 00 00 00 00", "ECI-4 B1 (ISO 8859-2)" }, + /* 45*/ { UNICODE_MODE, 0, -1, "Ħ", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 00 47 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 46*/ { UNICODE_MODE, 5, -1, "Ħ", -1, 0, 5, "80 53 00 0D 08 00 00 00 00", "ECI-5 B1 (ISO 8859-3)" }, + /* 47*/ { UNICODE_MODE, 0, -1, "ĸ", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 00 50 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 48*/ { UNICODE_MODE, 6, -1, "ĸ", -1, 0, 6, "80 63 00 0D 10 00 00 00 00", "ECI-6 B1 (ISO 8859-4)" }, + /* 49*/ { UNICODE_MODE, 0, -1, "Ж", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 30 01 53 D4 00 00 00 00 00", "B2 (GB 18030)" }, + /* 50*/ { UNICODE_MODE, 7, -1, "Ж", -1, 0, 7, "80 73 00 0D B0 00 00 00 00", "ECI-7 B1 (ISO 8859-5)" }, + /* 51*/ { UNICODE_MODE, 0, -1, "Ș", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 00 B9 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 52*/ { UNICODE_MODE, 18, -1, "Ș", -1, 0, 18, "81 23 00 0D 50 00 00 00 00", "ECI-18 B1 (ISO 8859-16)" }, + /* 53*/ { UNICODE_MODE, 0, -1, "テ", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 30 01 52 E3 00 00 00 00 00", "B2 (GB 18030)" }, + /* 54*/ { UNICODE_MODE, 20, -1, "テ", -1, 0, 20, "81 43 00 14 1B 28 00 00 00", "ECI-20 B2 (SHIFT JIS)" }, + /* 55*/ { UNICODE_MODE, 20, -1, "テテ", -1, 0, 20, "81 43 00 24 1B 2C 1B 28 00", "ECI-20 B4 (SHIFT JIS)" }, + /* 56*/ { UNICODE_MODE, 20, -1, "\\\\", -1, 0, 20, "81 43 00 24 0A FC 0A F8 00", "ECI-20 B4 (SHIFT JIS)" }, + /* 57*/ { UNICODE_MODE, 0, -1, "…", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 4E BC FF F0 00 00 00 00 00", "H(1)1 (GB 18030)" }, + /* 58*/ { UNICODE_MODE, 21, -1, "…", -1, 0, 21, "81 53 00 0C 28 00 00 00 00", "ECI-21 B1 (Win 1250)" }, + /* 59*/ { UNICODE_MODE, 0, -1, "Ґ", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 01 B9 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 60*/ { UNICODE_MODE, 22, -1, "Ґ", -1, 0, 22, "81 63 00 0D 28 00 00 00 00", "ECI-22 B1 (Win 1251)" }, + /* 61*/ { UNICODE_MODE, 0, -1, "˜", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 01 18 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 62*/ { UNICODE_MODE, 23, -1, "˜", -1, 0, 23, "81 73 00 0C C0 00 00 00 00", "ECI-23 B1 (Win 1252)" }, + /* 63*/ { UNICODE_MODE, 24, -1, "پ", -1, 0, 24, "81 83 00 0C 08 00 00 00 00", "ECI-24 B1 (Win 1256)" }, + /* 64*/ { UNICODE_MODE, 0, -1, "က", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 07 71 00 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 65*/ { UNICODE_MODE, 25, -1, "က", -1, 0, 25, "81 92 F9 00 3F 00 00 00 00", "ECI-25 T2 (UCS-2BE)" }, + /* 66*/ { UNICODE_MODE, 25, -1, "ကက", -1, 0, 25, "81 92 F9 00 10 03 F0 00 00", "ECI-25 T4 (UCS-2BE)" }, + /* 67*/ { UNICODE_MODE, 25, -1, "12", -1, 0, 25, "81 93 00 20 01 88 01 90 00", "ECI-25 B4 (UCS-2BE ASCII)" }, + /* 68*/ { UNICODE_MODE, 27, -1, "@", -1, 0, 27, "81 B2 FB 2F C0 00 00 00 00", "ECI-27 T1 (ASCII)" }, + /* 69*/ { UNICODE_MODE, 0, -1, "龘", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 30 01 7E C9 80 00 00 00 00", "B2 (GB 18030)" }, + /* 70*/ { UNICODE_MODE, 28, -1, "龘", -1, 0, 28, "81 C3 00 17 CE A8 00 00 00", "ECI-28 B2 (Big5)" }, + /* 71*/ { UNICODE_MODE, 28, -1, "龘龘", -1, 0, 28, "81 C3 00 27 CE AF CE A8 00", "ECI-28 B4 (Big5)" }, + /* 72*/ { UNICODE_MODE, 0, -1, "齄", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 5B BF FF F0 00 00 00 00 00", "H(2)1 (GB 18030)" }, + /* 73*/ { UNICODE_MODE, 29, -1, "齄", -1, 0, 29, "81 D3 00 17 BF F0 00 00 00", "ECI-29 B2 (GB 2312)" }, + /* 74*/ { UNICODE_MODE, 32, -1, "齄", -1, 0, 32, "82 05 BB FF FF 00 00 00 00", "ECI-32 H(2)1 (GB 2312)" }, + /* 75*/ { UNICODE_MODE, 29, -1, "齄齄", -1, 0, 29, "81 D3 00 27 BF F7 BF F0 00", "ECI-29 B4 (GB 2312)" }, + /* 76*/ { UNICODE_MODE, 32, -1, "齄齄", -1, 0, 32, "82 05 BB FB BF FF F0 00 00", "ECI-32 H(2)2 (GB 2312)" }, + /* 77*/ { UNICODE_MODE, 0, -1, "가", -1, ZINT_WARN_NONCOMPLIANT, 0, "Warning 70 2B 5E 80 00 00 00 00 00", "H(f)1 (GB 18030)" }, + /* 78*/ { UNICODE_MODE, 30, -1, "가", -1, 0, 30, "81 E3 00 15 85 08 00 00 00", "ECI-30 T2 (EUC-KR)" }, + /* 79*/ { UNICODE_MODE, 30, -1, "가가", -1, 0, 30, "81 E3 00 25 85 0D 85 08 00", "ECI-30 B4 (EUC-KR)" }, + /* 80*/ { UNICODE_MODE, 170, -1, "?", -1, 0, 170, "88 0A A2 FB 1F C0 00 00 00", "ECI-170 L1 (ASCII invariant)" }, + /* 81*/ { DATA_MODE, 899, -1, "\200", -1, 0, 899, "88 38 33 00 0C 00 00 00 00", "ECI-899 B1 (8-bit binary)" }, + /* 82*/ { UNICODE_MODE, 900, -1, "é", -1, 0, 900, "88 38 43 00 16 1D 48 00 00", "ECI-900 B2 (no conversion)" }, + /* 83*/ { UNICODE_MODE, 16384, -1, "é", -1, 0, 16384, "8C 04 00 03 00 16 1D 48 00", "ECI-16384 B2 (no conversion)" }, + /* 84*/ { UNICODE_MODE, 3, -1, "β", -1, ZINT_ERROR_INVALID_DATA, 3, "Error 545: Invalid character in input data for ECI 3", "" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -302,10 +305,12 @@ static void test_encode(int index, int generate, int debug) { struct item { int input_mode; + int eci; int option_1; int option_2; int option_3; char *data; + int length; int ret; int expected_rows; @@ -314,7 +319,7 @@ static void test_encode(int index, int generate, int debug) { char *expected; }; struct item data[] = { - /* 0*/ { UNICODE_MODE, -1, -1, -1, "1234", 0, 23, 23, "Mode nnnn, mask 10", + /* 0*/ { UNICODE_MODE, -1, -1, -1, -1, "1234", -1, 0, 23, 23, "Mode nnnn, mask 10", "11111110101011001111111" "10000000000000100000001" "10111110111011101111101" @@ -323,13 +328,13 @@ static void test_encode(int index, int generate, int debug) { "10101110000101001110101" "10101110111001101110101" "00000000100000000000000" - "00010101101110000010101" + "00010101101110000000000" "01010110110001011011101" "00100011000100100100101" "01110111111110001000111" "01001001110000001001000" "00100101001111110010000" - "10101000011110110101000" + "00000000011110110101000" "00000000001011100000000" "11111110110111101110101" "00000010011010001110101" @@ -339,7 +344,105 @@ static void test_encode(int index, int generate, int debug) { "11101010111111000000001" "11101010000100101111111" }, - /* 1*/ { UNICODE_MODE, 1, 1, -1, "1234567890", 0, 23, 23, "ISO 20830 Draft K.1 Figure K8 (& K5) same (mask 01), except no alternating filler in structural info in figure", + /* 1*/ { UNICODE_MODE, -1, 2, -1, -1, "Hanxin Code symbol", -1, 0, 25, 25, "ISO 20830 Figure 1 same", + "1111111010110110101111111" + "1000000000111101100000001" + "1011111011100101101111101" + "1010000010110010100000101" + "1010111000110100101110101" + "1010111001110110101110101" + "1010111010101001001110101" + "0000000011010101000000000" + "0001011001010001010000000" + "0110100011111001010001011" + "0011001010100011101101011" + "1000000000001101111111100" + "0000011000011000100100110" + "1101100011110010010011101" + "1010001101011111111100011" + "1010011001100100100010111" + "0000000100010101001101000" + "0000000000011111100000000" + "1111111000100100101110101" + "0000001011001111001110101" + "1111101010011001001110101" + "0000101010100100100000101" + "1110101011100100101111101" + "1110101010000010000000001" + "1110101011000100101111111" + }, + /* 2*/ { UNICODE_MODE, -1, -1, 24, 3 << 8, "汉信码标准\015\012中国物品编码中心\015\012北京网路畅想科技发展有限公司\015\012张成海、赵楠、黄燕滨、罗秋科、王毅、张铎、王越\015\012施煜、边峥、修兴强\015\012汉信码标准\015\012中国物品编码中心\015\012北京网路畅想科技发展有限公司", -1, ZINT_WARN_NONCOMPLIANT, 69, 69, "ISO 20830 Figure 2 **NOT SAME** different encodation, Binary mode not used by figure", + "111111100000010101011111111111111111000001110110100100011010101111111" + "100000001000101000000000000000000010100000101100000001101001100000001" + "101111100010110110110000010011001010001011001011111000011101001111101" + "101000001101000000011101000001111011111011100100111011110111100000101" + "101011100011110001100101001011100010111111001000111100100100101110101" + "101011100111101110110010000000000011101010010011101100010110001110101" + "101011101010101010011011010010010010010010010010010010010010001110101" + "000000001010001100000001110111011011010111111011100110110110100000000" + "001011001111000111100001011111111010110011111101011111001110010000000" + "110010110010111110111011010101001011101101111100111000010011011101101" + "101110110110101010111111111000001011000000011011110111001110011000110" + "101111000000000110111110011011011010010000100011111111111111111111111" + "110010010000101100011100110011011011000110111101000011101000101011001" + "100010100000100100100101000001110011100101000011011011110000000001110" + "100111000011001010001111101011100011100111110111110011100000011111111" + "100000110101001110001001110001110011000100110100010100011010110110110" + "110011011011110101001001001001001011001001001001001000001111111101000" + "111111111111111111001111011011111011111111111111111101111110011110101" + "000000000000000001100011001011111000000000000000000110010001010000000" + "110110011110001101011100110001011111000010110000100111001001001010101" + "101101111100100001001001111011001001001001011100110100010110000011100" + "011110010100101001111000101100000000010110100101000100111001011001011" + "111001001001001001001001001001001001110000101101010110011000000011001" + "100101011011010101001010000011001000110100111001010100001010011000101" + "100000000100100101111000011010110011000101110110100111110100010001001" + "001111101111001001100011101100001110101100100000100111011000100101111" + "011111011011000001000101100010011110101100010111110111111111111111111" + "010010010111001001000010000111000001111011101010000111101100111111110" + "110111011000101001100001010100010001010110110111010111000011010000010" + "101100010001010001001001100101110101001000011100100111000101010000101" + "100010011001001001111111110000001110011111100010110101111101101010000" + "010011110010110001101001001001001001001001000110110101100000100101100" + "100100011010110001110111000100110110011010000111100111111000110110001" + "000111000101011101001010010000001000101101011110110100100010110000100" + "100001110000101001111111111111111110101011101111100111111111111111111" + "000010011101101000000000000000000011110101101011110000000000000000001" + "101110101101101011000001000011001011010011111100011110110101001000001" + "101001001001001001001001111111100011010111110000100100111110101110001" + "111010111101101011100001010101100010000001011000111111010101110001101" + "110101101101100111110000010100100011000110100101101101101110001011101" + "110111111001111011011000111001101011100010001010010011010010000010101" + "111011110110100000001101000000001011000011111111111111111111111110001" + "101101100110000110110010000011111011101101011010110111001111010001001" + "110100010111011011000100000001110010110111101000111010101100010111101" + "110101000101110010100011111001000010011111111001011010001111000101001" + "111100110010110100110000111001111011101110110010101110100111001011101" + "100100101010010001001001001001001011001000110000010110101010100000001" + "100000100000010101001100101001111010110100000101100000111100011100001" + "111101001111100101011110011001100011001010001001110101111111011001001" + "111000110000111001100101000010110011001010001110110100010110101111101" + "100111001001010101110001010011110011011111111110000001100111111111100" + "111111111111111111010010010010011011111111111111111101100010000111001" + "000000000000000001110011001010110000000000000000000110101011111101000" + "001010010101010001010011101100101101010110000101110111010011101010111" + "000000101111101101011110000110011001100110000111000101010011000010100" + "110000010111110101011100101110000111110000001110010111011001000111001" + "010001011000000101001111001010101111111111111111110111111110010110101" + "001110100110111101101101110011010000101111100110000111100011000111111" + "110111101011110101000001101000011001000111000100110100010101101110001" + "001010010111110001101110111111000010010101101011110101000100001011100" + "000000010100000101101001100011110110000111101011110110111101100110100" + "000000001110100001111111001001001001001001001001000101001100100000000" + "111111100000001101101111110101111101000000111010000101110001101110101" + "000000100010001101101110011011101000001000000111110110010011001110101" + "111110101110111001110110010111000001010100011111010100010110001110101" + "000010101101010001101101011100110110111100100000010100100100100000101" + "111010100001110001011110100111100101101101100011010101011011001111101" + "111010101000100001010101001001000000010001001001000101001001100000001" + "111010101111111101111111111111111010111111111111110111111111001111111" + }, + /* 3*/ { UNICODE_MODE, -1, 1, 1, -1, "1234567890", -1, 0, 23, 23, "ISO 20830 K.2 Figure K.8 (& K.5) same (mask 01)", "11111110001000001111111" "10000000110001100000001" "10111110001010101111101" @@ -348,13 +451,13 @@ static void test_encode(int index, int generate, int debug) { "10101110110101001110101" "10101110001100001110101" "00000000011101100000000" - "00010101001010011010101" + "00010101001010011000000" "01001101111101010101110" "10101010101010100101101" "01010010111101010101010" "10101010101010101010100" "10000011010101000011110" - "10101011001010010101000" + "00000011001010010101000" "00000000110100000000000" "11111110011110001110101" "00000010010101101110101" @@ -364,7 +467,7 @@ static void test_encode(int index, int generate, int debug) { "11101010110101100000001" "11101010001010001111111" }, - /* 2*/ { UNICODE_MODE, 1, 1, 1 << 8, "1234567890", 0, 23, 23, "ISO 20830 Draft K.1 Figure K4, with explicit mask pattern 00, same except no alternating filler in figure", + /* 4*/ { UNICODE_MODE, -1, 1, 1, 1 << 8, "1234567890", -1, 0, 23, 23, "ISO 20830 K.2 Figure K.4, with explicit mask pattern 00", "11111110100010101111111" "10000000000100100000001" "10111110000000101111101" @@ -373,13 +476,13 @@ static void test_encode(int index, int generate, int debug) { "10101110000000001110101" "10101110000110001110101" "00000000001000100000000" - "00010101000000100010101" + "00010101000000100000000" "00011000101000000000100" "00000000000000001111000" "00000111101000000000000" "00000000000000000000001" "11010110000000010110100" - "10101000100000010101000" + "00000000100000010101000" "00000000100001000000000" "11111110010100001110101" "00000010000000001110101" @@ -389,7 +492,7 @@ static void test_encode(int index, int generate, int debug) { "11101010100000000000001" "11101010100000101111111" }, - /* 3*/ { UNICODE_MODE, 1, 1, 3 << 8, "1234567890", 0, 23, 23, "ISO 20830 Draft K.1 Figure K6, with explicit mask pattern 10, same except no alternating filler in figure", + /* 5*/ { UNICODE_MODE, -1, 1, 1, 3 << 8, "1234567890", -1, 0, 23, 23, "ISO 20830 K.2 Figure K.6, with explicit mask pattern 10", "11111110001011101111111" "10000000100000000000001" "10111110011111001111101" @@ -398,13 +501,13 @@ static void test_encode(int index, int generate, int debug) { "10101110011111101110101" "10101110101111101110101" "00000000001100000000000" - "00010101011111010010101" + "00010101011111010000000" "01010001100001001001101" "00100100100100101011100" "11111000010111111111111" "01001001001001001001000" "11110010100100110010000" - "10101001011111010101000" + "00000001011111010101000" "00000000001000000000000" "11111110110000101110101" "00000010111111001110101" @@ -414,7 +517,7 @@ static void test_encode(int index, int generate, int debug) { "11101010001001100000001" "11101010100100001111111" }, - /* 4*/ { UNICODE_MODE, 1, 1, 4 << 8, "1234567890", 0, 23, 23, "ISO 20830 Draft K.1 Figure K7, with explicit mask pattern 11, same except no alternating filler in figure", + /* 6*/ { UNICODE_MODE, -1, 1, 1, 4 << 8, "1234567890", -1, 0, 23, 23, "ISO 20830 K.2 Figure K.7, with explicit mask pattern 11", "11111110101111001111111" "10000000000011000000001" "10111110000000001111101" @@ -423,13 +526,13 @@ static void test_encode(int index, int generate, int debug) { "10101110100111101110101" "10101110111111101110101" "00000000001111000000000" - "00010101000111101010101" + "00010101000111101000000" "00000010110000111000011" "10011010011111001000011" "11000010000111000111000" "01000101101110111000110" "00010001101101010001100" - "10101010110010010101000" + "00000010110010010101000" "00000000010011000000000" "11111110100110101110101" "00000010101101101110101" @@ -439,7 +542,7 @@ static void test_encode(int index, int generate, int debug) { "11101010011010000000001" "11101010011010101111111" }, - /* 5*/ { UNICODE_MODE, 3, 10, -1, "1234567890ABCDEFGabcdefg,Han Xin Code", 0, 41, 41, "ISO 20830 Draft K.2 Figure K16 (& K14) (happens to use same mask pattern 10), same except for alternating filler", + /* 7*/ { UNICODE_MODE, -1, 3, 10, -1, "1234567890ABCDEFGabcdefg,Han Xin Code", -1, 0, 41, 41, "ISO 20830 K.3 Figure K.16 (& K.14) (happens to use same mask pattern 10)", "11111110001011000000100000010101101111111" "10000000001011110010000000011010100000001" "10111110111111111010111011101111101111101" @@ -448,7 +551,7 @@ static void test_encode(int index, int generate, int debug) { "10101110010111110111111011101100101110101" "10101110101111001001011101110011001110101" "00000000011001100100100100100100100000000" - "00011110111111111111111001101111110010101" + "00011110111111111111111001101111110000000" "10110011011100110010001001100000001001001" "11001100100100100100100100100100100100100" "11111111001110101101011011110011011110110" @@ -472,7 +575,7 @@ static void test_encode(int index, int generate, int debug) { "11111111111110110000111000110000110000101" "00000001001001001000101011011100000100101" "00100100100100100100100100100100101011111" - "10101001100101110100111011100010101111000" + "00000001100101110100111011100010101111000" "00000000110001001000101001001111000000000" "11111110001011100100100100100100101110101" "00000010111111111110111111111111001110101" @@ -482,7 +585,7 @@ static void test_encode(int index, int generate, int debug) { "11101010101001001000101001001001000000001" "11101010100100100100111111111111001111111" }, - /* 6*/ { UNICODE_MODE, 3, 10, 1 << 8, "1234567890ABCDEFGabcdefg,Han Xin Code", 0, 41, 41, "ISO 20830 Draft K.2 Figure K12 explicit mask pattern 00, same except for alternating filler", + /* 8*/ { UNICODE_MODE, -1, 3, 10, 1 << 8, "1234567890ABCDEFGabcdefg,Han Xin Code", -1, 0, 41, 41, "ISO 20830 K.3 Figure K.12 explicit mask pattern 00", "11111110100010001000101001011100101111111" "10000000101111010110000100111110000000001" "10111110100000000101000100010000001111101" @@ -491,7 +594,7 @@ static void test_encode(int index, int generate, int debug) { "10101110001000001000000100010011001110101" "10101110000110000000010100111010101110101" "00000000011101000000000000000000000000000" - "00011110100000000000000110010000000010101" + "00011110100000000000000110010000000000000" "11111010010101111011000000101001000000000" "11101000000000000000000000000000000000000" "10000000110001010010100100001100100001001" @@ -515,7 +618,7 @@ static void test_encode(int index, int generate, int debug) { "00000000000001001110100111001111001111010" "01001000000000000000100010010101001101100" "00000000000000000000100000000000001111011" - "10101000011010001010100100011101101111000" + "00000000011010001010100100011101101111000" "00000000011000000000100000000110000000000" "11111110101111000000100000000000001110101" "00000010000000000000100000000000001110101" @@ -525,7 +628,7 @@ static void test_encode(int index, int generate, int debug) { "11101010000000000000100000000000100000001" "11101010100000000000111111111111101111111" }, - /* 7*/ { UNICODE_MODE, 3, 10, 2 << 8, "1234567890ABCDEFGabcdefg,Han Xin Code", 0, 41, 41, "ISO 20830 Draft K.2 Figure K13 explicit mask pattern 01, same except for alternating filler", + /* 9*/ { UNICODE_MODE, -1, 3, 10, 2 << 8, "1234567890ABCDEFGabcdefg,Han Xin Code", -1, 0, 41, 41, "ISO 20830 K.3 Figure K.13 explicit mask pattern 01", "11111110001000100010100011110110001111111" "10000000011010000010000001101011000000001" "10111110101010101111101110111010001111101" @@ -534,7 +637,7 @@ static void test_encode(int index, int generate, int debug) { "10101110111101011101010001000110001110101" "10101110001100101010111110010000101110101" "00000000001000010101010101010101000000000" - "00011110101010101010101100111010111010101" + "00011110101010101010101100111010111000000" "10101111000000101110010101111100010101010" "11000010101010101010101010101010101010101" "11010101100100000111110001011001110100011" @@ -558,7 +661,7 @@ static void test_encode(int index, int generate, int debug) { "01010101010100011010110010011010011010000" "11100010101010101010101000111111100111001" "01010101010101010100110101010101011010001" - "10101011110000100000101110110111101111000" + "00000011110000100000101110110111101111000" "00000000001101010100110101010011000000000" "11111110100101101010101010101010001110101" "00000010010101010100110101010101101110101" @@ -568,7 +671,7 @@ static void test_encode(int index, int generate, int debug) { "11101010010101010100110101010101000000001" "11101010001010101010111111111111001111111" }, - /* 8*/ { UNICODE_MODE, 3, 10, 4 << 8, "1234567890ABCDEFGabcdefg,Han Xin Code", 0, 41, 41, "ISO 20830 Draft K.2 Figure K15 explicit mask pattern 11, same except for alternating filler", + /* 10*/ { UNICODE_MODE, -1, 3, 10, 4 << 8, "1234567890ABCDEFGabcdefg,Han Xin Code", -1, 0, 41, 41, "ISO 20830 K.3 Figure K.15 explicit mask pattern 11", "11111110101111100100100100110001001111111" "10000000101000010000000011111001100000001" "10111110100000000101000100010000101111101" @@ -577,7 +680,7 @@ static void test_encode(int index, int generate, int debug) { "10101110101111001111000011010100101110101" "10101110111111000111101100011101001110101" "00000000011010000111000111000111100000000" - "00011110100111000000111110010111001010101" + "00011110100111000000111110010111001000000" "11100000001101000011111000010001111000111" "11110010011111000111011000111000000111000" "11000101011110010101100011001011100110001" @@ -601,7 +704,7 @@ static void test_encode(int index, int generate, int debug) { "11000111100110000010101010100000001000010" "00001111100111001100101111111011110101011" "11000111100111001100101101101101001000011" - "10101010001010111000110110001111101111000" + "00000010001010111000110110001111101111000" "00000000101000111010110010010100000000000" "11111110011111111010110010010010101110101" "00000010101111000100101101101101101110101" @@ -611,7 +714,7 @@ static void test_encode(int index, int generate, int debug) { "11101010110010111000110010010010100000001" "11101010010010111000111111111111101111111" }, - /* 9*/ { UNICODE_MODE, 2, 17, -1, "Summer Palace Ticket for 6 June 2015 13:00;2015年6月6日夜01時00分PM頤和園のチケット;2015년6월6일13시오후여름궁전티켓.2015年6月6号下午13:00的颐和园门票;", 0, 55, 55, "**NOT SAME** as ISO 20830 Draft K.3 Figure K23, different encoding modes; if same encoding modes forced, uses mask pattern 01 instead of pattern 10, but matches pattern 01 example Figure K20 (excluding alternating filler) (forced encoding mode: ttttttttttttttttttttttttttttttttttttttttttttttt1t1t11ttdtt1ttddddddddtttttfftfftffttffffffffffffffffffttttt1t1t111ttttt111111t)", + /* 11*/ { UNICODE_MODE, -1, 2, 17, -1, "Summer Palace Ticket for 6 June 2015 13:00;2015年6月6日夜01時00分PM頤和園のチケット;2015년6월6일13시오후여름궁전티켓.2015年6月6号下午13:00的颐和园门票;", -1, ZINT_WARN_NONCOMPLIANT, 55, 55, "**NOT SAME** as ISO 20830 K.4 Figure K.23, different encodation; if same encoding modes forced, uses mask pattern 01 instead of pattern 10, but matches pattern 01 example Figure K.20 (forced encoding mode: ttttttttttttttttttttttttttttttttttttttttttttttt1t1t11ttdtt1ttddddddddtttttfftfftffttffffffffffffffffffttttt1t1t111ttttt111111t)", "1111111001111111111011100100110101101010101100101111111" "1000000000000000001100011000011001000010101111100000001" "1011111011110010101110010110100000111010101101101111101" @@ -620,7 +723,7 @@ static void test_encode(int index, int generate, int debug) { "1010111011010101001101010100001010011001000110001110101" "1010111001101001001001110010001001100100001001001110101" "0000000011100111101101111010001010001100110011000000000" - "0010010101010100001100111100101010101111010001101010101" + "0010010101010100001100111100101010101111010001101000000" "1111111011101110101000110010100010000101010101010101010" "1010100111011011001101110110100101100011101000111110110" "0011100111010001101001111011100001001111110010000011001" @@ -658,7 +761,7 @@ static void test_encode(int index, int generate, int debug) { "0001110000001011001100000011111101010101010101010101001" "1010011101001101001101011101000010010100010000001110101" "1101100101011001101001000100010000001101111001000111001" - "1010101010110101101010010110010011001111101011010100100" + "0000001010110101101010010110010011001111101011010100100" "0000000000000100001001100011100100010101010101100000000" "1111111000101010101010101110111100111011011111001110101" "0000001000101011001010000100010101001110001111101110101" @@ -668,7 +771,7 @@ static void test_encode(int index, int generate, int debug) { "1110101011010101001101010101010101000000001010000000001" "1110101011010001001111111111111111101000001110001111111" }, - /* 10*/ { UNICODE_MODE, -1, -1, -1, "汉信码标准", 0, 23, 23, "ISO 20830 Draft Figure 4, **NOT SAME**, uses mask 11 instead of 10 (note figure includes alternating filler)", + /* 12*/ { UNICODE_MODE, -1, -1, -1, -1, "汉信码标准", -1, ZINT_WARN_NONCOMPLIANT, 23, 23, "ISO 20830 Figure 4, **NOT SAME**, Zint uses mask 11 instead of 10 (note figure includes alternating filler)", "11111110000101001111111" "10000000001000100000001" "10111110110001001111101" @@ -677,13 +780,13 @@ static void test_encode(int index, int generate, int debug) { "10101110111101101110101" "10101110101100101110101" "00000000011001100000000" - "00010101110110000010101" + "00010101110110000000000" "01010010101111101111001" "11110010001011001101110" "01010110010010010011001" "11110011100000000111000" "11100110010101000010101" - "10101000010010110101000" + "00000000010010110101000" "00000000110011000000000" "11111110111011101110101" "00000010101101101110101" @@ -693,7 +796,7 @@ static void test_encode(int index, int generate, int debug) { "11101010111010000000001" "11101010011010001111111" }, - /* 11*/ { UNICODE_MODE, -1, -1, 3 << 8, "汉信码标准", 0, 23, 23, "ISO 20830 Draft Figure 4, explict mask 10, same", + /* 13*/ { UNICODE_MODE, -1, -1, -1, 3 << 8, "汉信码标准", -1, ZINT_WARN_NONCOMPLIANT, 23, 23, "ISO 20830 Figure 4, explict mask 10, same except no alternating filler", "11111110100001101111111" "10000000101011100000001" "10111110101110001111101" @@ -702,13 +805,13 @@ static void test_encode(int index, int generate, int debug) { "10101110000101101110101" "10101110111100101110101" "00000000011010100000000" - "00010101101110111010101" + "00010101101110111000000" "00000001111110011110111" "01001100110000101110001" "01101100000010101011110" "11111111000111110110110" "00000101011100100001001" - "10101011111111110101000" + "00000011111111110101000" "00000000101000000000000" "11111110101101101110101" "00000010111111001110101" @@ -718,69 +821,69 @@ static void test_encode(int index, int generate, int debug) { "11101010101001100000001" "11101010100100101111111" }, - /* 12*/ { UNICODE_MODE | ESCAPE_MODE, -1, 4, -1, "汉信码标准\015\012中国物品编码中心", 0, 29, 29, "ISO 20830 Draft Figure 5, **NOT SAME** uses mask 11 instead of 01", - "11111110000100101110101111111" - "10000000101110001001000000001" - "10111110111111111110001111101" - "10100000100100110100100000101" - "10101110001110001100101110101" - "10101110101111110111101110101" - "10101110111001111001101110101" - "00000000001000101101000000000" - "00011000111000000111100010101" - "10111010011011110000101001011" - "11100001011111000101000011011" - "10100000100100111100011010000" - "11001111001110010000001111100" - "11100000010111100111111000100" - "11111111111111101010110110101" - "00000000000000110101011111100" - "01111101011000101100111000101" - "01110101111110101110000100110" - "00000010111010111000111000110" - "00111111000100100010010110111" - "10101000100000111111100011000" - "00000000011110100101000000000" - "11111110100010100000101110101" - "00000010111100101101101110101" - "11111010101110110010001110101" - "00001010100000110011100000101" - "11101010011000100111101111101" - "11101010010110100010100000001" - "11101010111000111111001111111" + /* 14*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, 4, -1, "汉信码标准\015\012中国物品编码中心", -1, ZINT_WARN_NONCOMPLIANT, 29, 29, "ISO 20830 Figure 5, **NOT SAME** Zint uses mask 00 instead of 10", + "11111110001000100011001111111" + "10000000101000001110100000001" + "10111110111111111110101111101" + "10100000011100001100000000101" + "10101110010110001010101110101" + "10101110001000110000001110101" + "10101110000000111110001110101" + "00000000001111101010100000000" + "00011000111111000111101000000" + "10100000000011001000010001100" + "11111011000000000010011011100" + "11100101001011111011011101000" + "10001010100000101000110110100" + "10100111111010100000111111100" + "11111111111111101101110001101" + "00000000000000101101100111000" + "11101101001010110011111111101" + "10111010110010100001000011110" + "01001101110110110110000000001" + "11111000001000101111010001111" + "00000010110010101101100011000" + "00000000100100110111000000000" + "11111110011000110010001110101" + "00000010011000100000001110101" + "11111010101010111111001110101" + "00001010000110111110000000101" + "11101010100000110101101111101" + "11101010101110110000100000001" + "11101010000000111111001111111" }, - /* 13*/ { UNICODE_MODE | ESCAPE_MODE, -1, 4, 2 << 8, "汉信码标准\015\012中国物品编码中心", 0, 29, 29, "ISO 20830 Draft Figure 5, explicit mask 01, same", - "11111110100010101001101111111" - "10000000011100001011100000001" - "10111110110101010100101111101" - "10100000101001011001100000101" - "10101110111100100000101110101" - "10101110111101100101001110101" - "10101110001010010100001110101" - "00000000011010111111100000000" - "00011000110101101101010010101" - "11110101010110011101000100110" - "11010001101010101000110001001" - "10110000011110101110001000010" - "10100000001010000010011100001" - "11110010101111110101101010100" - "11111111111111100111011011001" - "00000000000000111000110010000" - "01000111100000111001010101000" - "11101111100110110100010110100" - "11100111011100111100101010100" - "10101101011100111010000100101" - "10101001011000100111100011000" - "00000000110000100010000000000" - "11111110010010111000001110101" - "00000010001100110101101110101" - "11111010100000110101101110101" - "00001010110010101011100000101" - "11101010101010111111101111101" - "11101010111010100101000000001" - "11101010101010111111101111111" + /* 15*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, 4, 3 << 8, "汉信码标准\015\012中国物品编码中心", -1, ZINT_WARN_NONCOMPLIANT, 29, 29, "ISO 20830 Figure 5, explicit mask 10, same except no alternating filler", + "11111110100000101010001111111" + "10000000001100001010000000001" + "10111110100000000001001111101" + "10100000010101000101000000101" + "10101110110010101110101110101" + "10101110010111001111101110101" + "10101110101001110111101110101" + "00000000001011001110000000000" + "00011000100000111000011000000" + "11101001001010000001011000101" + "11011111100100100110111111000" + "10011010110100000100100010111" + "11000011101001100001111111101" + "10000011011110000100011011000" + "11111111111111110010001110001" + "00000000000000100100101110000" + "11001001101110110111011011001" + "01000101001100111110111100001" + "00000100111110111111001001000" + "11011100101100101011110101011" + "00000011001100110010100011000" + "00000000001100111110000000000" + "11111110111100110110101110101" + "00000010100110111111001110101" + "11111010100010110110101110101" + "00001010000010111010000000101" + "11101010011110101010101111101" + "11101010000110111001000000001" + "11101010000100111111101111111" }, - /* 14*/ { UNICODE_MODE | ESCAPE_MODE, -1, 24, -1, "汉信码标准\015\012中国物品编码中心\015\012北京网路畅想科技发展有限公司\015\012张成海、赵楠、黄燕滨、罗秋科、王毅、张铎、王越\015\012施煜、边峥、修兴强\015\012汉信码标准\015\012中国物品编码中心\015\012北京网路畅想科技发展有限公司", 0, 69, 69, "ISO 20830 Draft Figure 6 **NOT SAME** different encodation, Region 1 FFE terminators not used in figure", + /* 16*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, 24, -1, "汉信码标准\015\012中国物品编码中心\015\012北京网路畅想科技发展有限公司\015\012张成海、赵楠、黄燕滨、罗秋科、王毅、张铎、王越\015\012施煜、边峥、修兴强\015\012汉信码标准\015\012中国物品编码中心\015\012北京网路畅想科技发展有限公司", -1, ZINT_WARN_NONCOMPLIANT, 69, 69, "ISO 20830 Figure 6 **NOT SAME** different encodation, Binary mode not used by figure", "111111100000101101011111111111111111111001001110010100100010001111111" "100000001100110100000000000000000010111100110000010001110101000000001" "101111100111100011100101000110011011011110011110101101001000101111101" @@ -789,7 +892,7 @@ static void test_encode(int index, int generate, int debug) { "101011101101000100011000101010101011000000111001000110111100101110101" "101011100010010010100011101010101010101010101010101010101010101110101" "000000001110010000011101101011000011001011100111111010101010000000000" - "001011001010010010110100001010101011100110101000001010011011011010101" + "001011001010010010110100001010101011100110101000001010011011011000000" "110101110101111001111100010010001010101010111011111111010100011010101" "101101010101001001011100011011101010100011111000010100101101111011010" "100101101010101100010100110001110010111010001001010101010101010101010" @@ -841,7 +944,7 @@ static void test_encode(int index, int generate, int debug) { "001001100001111001101010110100010111101000100001000100100100000000111" "010100001000010101100010001011111010100100100111010111110110001101101" "100000111101011001000100010101101000111111000001010111101110100001001" - "101010110100111101010001011011001110111111010011000110000101100110100" + "000000110100111101010001011011001110111111010011000110000101100110100" "000000000010111101100011010101010101010101010101010101010000100000000" "111111101101011001111010100000101000010101101111010100100100001110101" "000000101101001001101001011100101111001111000000110101010100101110101" @@ -851,7 +954,7 @@ static void test_encode(int index, int generate, int debug) { "111010100100111101001001010101011000001101010101010101010101100000001" "111010100010101001111111111111111010101010101010100111111111001111111" }, - /* 15*/ { UNICODE_MODE | ESCAPE_MODE, -1, 40, -1, "本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40\015\012", 0, 101, 101, "ISO 20830 Draft Figure 7 **NOT SAME** different encodation, Binary mode not used by figure", + /* 17*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, 40, -1, "本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40\015\012", -1, ZINT_WARN_NONCOMPLIANT, 101, 101, "ISO 20830 Figure 7 **NOT SAME** different encodation, Binary mode not used by figure", "11111110111111111111100010101000011101101011111111111111111110101100101110110110101100011000101111111" "10000000100000000000100101011001001001000000000000000000000011000001111101100010001100010100100000001" "10111110110100010100111000101101010111011101101110011000011010100101110001010110001001010010101111101" @@ -860,7 +963,7 @@ static void test_encode(int index, int generate, int debug) { "10101110110111101000100011100000001010010101101010001101001010001111001000100001101111110110001110101" "10101110000101010100110000111111110101101010110101000111100010110010010001000101111001110011101110101" "00000000111000000000110111110101101001111101010101101011010011000100101100101111000110010101100000000" - "00111100101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + "00111100101010101010101010101010101010101010101010101010101010101010101010101010101010101010101000000" "01010101010101010100110101010101010101101000101110100000110011000101101010000010101111010100000100001" "10001101000100110010100010000000110000011011010011011001011011000011100100000110110001111011001100000" "00111110111011110000101011100010001000000000110110111110110010101010110110011011010111100010111110100" @@ -944,7 +1047,7 @@ static void test_encode(int index, int generate, int debug) { "00000011000110101010101010101011000000100100001101100001101010111110001111010001001010101001010101101" "00111001011010110000101010101010101010100011101010101010101010101010101010101010101010101010101010101" "01010101010101010100110101010101010101010101010101010101010011010101010101010101000111111011110011001" - "10101010100000010010100110100110011011111010001111111101111011010111011111110100111010101000100111100" + "00000010100000010010100110100110011011111010001111111101111011010111011111110100111010101000100111100" "00000000110000000000110101001111001001011111000010100110001010111011110011000101000111001110100000000" "11111110110001100000111101111110000101000111011100100000101010000000101111110101100100111001001110101" "00000010010110100000100110100110110000110110001111010110010011111001000101101100000100010110101110101" @@ -954,7 +1057,7 @@ static void test_encode(int index, int generate, int debug) { "11101010110101010100110101010101010101000001010101010101010011010101010101010100000101010101100000001" "11101010101010101010111111111111111111101010101010101010101011111111111111111110101010101010101111111" }, - /* 16*/ { UNICODE_MODE | ESCAPE_MODE, -1, 62, -1, "本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法RS、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 122", 0, 145, 145, "ISO 20830 Draft Figure 8 **NOT SAME** different encodation, Binary mode not used by figure", + /* 18*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, 62, -1, "本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法RS、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 122", -1, ZINT_WARN_NONCOMPLIANT, 145, 145, "ISO 20830 Figure 8 **NOT SAME** different encodation, Binary mode not used by figure", "1111111000001010101011111111111111111000011101101011001011111111111111111010111011011001101011111111111111111100111110101001101010010010101111111" "1000000001000001100000000000000000001111011000100111000000000000000000001101101011101010000000000000000000001111010010101000100011101101000000001" "1011111001100110000110100101110001001101100010010100100110110000011000101000000110000011100000011011000001001101000000001001100111010111101111101" @@ -963,7 +1066,7 @@ static void test_encode(int index, int generate, int debug) { "1010111010000001011111010110100111101101010101101011110110101000101001101110001000100010010111010101011001101100001110010000001010000011001110101" "1010111000011001100010111101000001101010011111100001001000001101111111101100101000000000001110110111100100001011111010000101101111100110101110101" "0000000010111000010011011110110111101000000101111010001010111101010001101110111100110110011110111110011101101001110000101101101010110001100000000" - "0101001011111011001010111001100111101011011111100001011100100110011100101111110010100000110000111100101111101011111100000110010010100010100010101" + "0101001011111011001010111001100111101011011111100001011100100110011100101111110010100000110000111100101111101011111100000110010010100010100000000" "1101101100001100000110111000011010101101111101010000101101000000111100001110110110101010101000111010001010101010110011110100111010101101010010001" "1010110100111000011010100110000000101001101001100000101010000110000000001001111001010001010010011011111000001101010000111110011011101010100110011" "1100001100110110101100111010011000101000011001101000011100011010011001101100010000010101000000001000011110001101010101010101010101010101010101010" @@ -1091,7 +1194,7 @@ static void test_encode(int index, int generate, int debug) { "1100000010000110001100000010010011010011001101111101001001111111101111101011101111111010001111010101000100000000010101001111001010010111110000101" "0011000101110111101001100010100011100111010001100001101101111110000101000111011100100000101010000000101111110101100100111001101011010000001101001" "1011000011011000101111010110010111100100010110110000001100010110110111100111110110000100001001000110111010010010101101011101001100100100001100110" - "1010100010001100001010011100111001000111110101110111001101110000110101010100110101100011001110010101001000000011111001110111101111110110101001010" + "0000000010001100001010011100111001000111110101110111001101110000110101010100110101100011001110010101001000000011111001110111101111110110101001010" "0000000011101001001011000110010011001001010010001111001111011010010111111111101000010110101100110111001101010010110110100010101011011111100000000" "1111111011110010001010101011010010000001001111100100001101001110111001100111001001110011101100110011111001011101100010001110101111101101001110101" "0000001001111011001110111010001101101101000001011010101111100100100110101001100011100100001110010110100111111000010111111011101000110000101110101" @@ -1101,7 +1204,7 @@ static void test_encode(int index, int generate, int debug) { "1110101000010110101111100111011100000010111011110111001101000101010111000001011011001010101011010000000110000011001001000011001101010101000000001" "1110101010101010101111111111111111101010101010101010101111111111111111101010101010101010101111111111111111101010101010101010101111111111001111111" }, - /* 17*/ { UNICODE_MODE | ESCAPE_MODE, -1, 84, -1, "本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:84\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:84\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方" "法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:84\015\012", 0, 189, 189, "ISO 20830 Draft Figure 9 **NOT SAME** different encodation, Binary mode not used by figure", + /* 19*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, 84, -1, "本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:84\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:84\015\012本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:40本标准规定了一种矩阵式二维条码——汉信码的码制以及编译码方法。本标准中对汉信码的码图方" "案、信息编码方法、纠错编译码算法、信息排布方法、参考译码算法等内容进行了详细的描述,汉信码可高效表示《GB 18030—2000 信息技术 信息交换用汉字编码字符集基本集的扩充》中的汉字信息,并具有数据容量大、抗畸变和抗污损能力强、外观美观等特点,适合于在我国各行业的广泛应用。 测试文本,测试人:施煜,边峥,修兴强,袁娲,测试目的:汉字表示,测试版本:84\015\012", -1, ZINT_WARN_NONCOMPLIANT, 189, 189, "ISO 20830 Figure 9 **NOT SAME** different encodation, Binary mode not used by figure", "111111100111111111100010101000011101011111111111111111000111101110100101111111111111111111100101100001010111111111111111101100011011101001011111111111111110100111001010010101111010101111111" "100000001000000000111000010110101000000000000000000011110111100101100000000000000000001000111110110011000000000000000000110001110111000100000000000000000010001110000000010001110110100000001" "101111100010010100101110011110110011111011110000000011110101010100001011100010110000001010100001111001101000000101101000110110001100001101001011001001110011110001101000100110111010001111101" @@ -1110,7 +1213,7 @@ static void test_encode(int index, int generate, int debug) { "101011101001111100111001000001111101110001001000100011100100001111101010001010000001101010010011111010010000001011100000100100000000001111010101000101110010111010001100011100000111101110101" "101011100001011000111100011101111011110101110110000010111000010111101010000000010011101101111010110100001101111000100000111100100110010001010111011011010011011101010100100100011110101110101" "000000001111101000111111110010010110101000010011001011001110111111111101100000101011001101101110001001001111111110001110110000101010100110111100001001001010110001001110010100100000100000000" - "011010001111110110110110001010011000001010100000111010011000101111000000101111011010001111000111010011110010100110010000100111110001010001011110001001111010100001110010000001000011001010101" + "011010001111110110110110001010011000001010100000111010011000101111000000101111011010001111000111010011110010100110010000100111110001010001011110001001111010100001110010000001000011001000000" "001111101110101100100011110101010111001111110101100011010010001011001011000111101011001011100101001111011001000000111010110000100011111010110001001101001010110001101100001100110100011011011" "000110010011010000110100001010001101100010101010110010011011010111101001110101110100001000000110010000110101000001010100101101000000010001110100000111110011000100010010101011000011100111000" "110111100011011000101100101100111001111111000101101011111011100111010011000001100010001100111011011001000100001101000000110101100011011101100101100011001011001110101010110100000110101110001" @@ -1282,7 +1385,7 @@ static void test_encode(int index, int generate, int debug) { "001010101100100110110001000001101000110011011000100010101110110111101111001010101011101011010010111000000110010100000110100000001001001101011001100010011010101011000010001101100100000000001" "001110001001110000100110110001000110010001000111110010110011000001011100111101100110001001010011001110111100011111010110111011011010010100100000001001001010000101100110010010000011101001001" "101000110011001110110100111000000111011001011011011011010111000001011101000011111000101010101100011010111110010011110010110001010010111010100111110111111010111100110000100101111001000001101" - "101010100101110000100000101111000100100011010101001011010010001100001000110000111011101111101010111000111011101110010010110110110001010010011001111001101010001011100000110011011110100010110" + "000000100101110000100000101111000100100011010101001011010010001100001000110000111011101111101010111000111011101110010010110110110001010010011001111001101010001011100000110011011110100010110" "000000001100001110111001010000001011001011000010000011100111101000000110011001111110101010000001100010111110000001000100111101110011100000010110010100100010101011111011110101000000100000000" "111111101111100110101011101111100101011100001000111011011010010110001011010100000101101111000110100111001111111011011010110111000000110010100001010101010010110100101100010100000011001110101" "000000101010100010110000100011101010110011110001100010010111100010001010111010100000101001010011111100101110101000101110110101000101000011101101110111000011100100111100110010100111101110101" @@ -1292,7 +1395,7 @@ static void test_encode(int index, int generate, int debug) { "111010101011011100110101010010111000001100010010111011010101010101010001010101010101001101010101010101000101010101010100110101010101010100010101010101010011010101010101010001010101100000001" "111010101010101010111111111111111101001010101010101011111111111111110100101010101010101111111111111111010010101010101010111111111111111101001010101010101011111111111111110100101010001111111" }, - /* 18*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, 4 << 8, "汉信码(Chinese-Sensible Code)是一种能够有效表示汉字、图像等信息的二维条码。它的主要技术特色是:1. 具有高度的汉字表示能力和汉字压缩效率。2. 信息容量大。 3. 编码范围广,可以将照片、指纹、掌纹、签字、声音、文字等凡可数字化的信息进行编码。4. 支持加密技术。5.抗污损和畸变能力强。6.修正错误能力强。7 .可供用户选择的纠错能力。8.容易制作且成本低。9.汉信码支持84个版本,可以由用户自主进行选择,最小码仅有指甲大小。10. 外形美观。", 0, 67, 67, "Previous draft Figure 1 **NOT SAME** different encodation, Binary mode not used by figure", + /* 20*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, -1, 4 << 8, "汉信码(Chinese-Sensible Code)是一种能够有效表示汉字、图像等信息的二维条码。它的主要技术特色是:1. 具有高度的汉字表示能力和汉字压缩效率。2. 信息容量大。 3. 编码范围广,可以将照片、指纹、掌纹、签字、声音、文字等凡可数字化的信息进行编码。4. 支持加密技术。5.抗污损和畸变能力强。6.修正错误能力强。7 .可供用户选择的纠错能力。8.容易制作且成本低。9.汉信码支持84个版本,可以由用户自主进行选择,最小码仅有指甲大小。10. 外形美观。", -1, ZINT_WARN_NONCOMPLIANT, 67, 67, "Previous draft Figure 1 **NOT SAME** different encodation, Binary mode not used by figure", "1111111000010101011111111111111110001011011110010101111111001111111" "1000000010000100000000000000000010100011101001010001101110000000001" "1011111001100100110100001101111011111100101010000111111111101111101" @@ -1301,7 +1404,7 @@ static void test_encode(int index, int generate, int debug) { "1010111011110000000100000101110011100011100011100011110100101110101" "1010111011000110000011001011001011110110001010100101101111001110101" "0000000000010011100110010011011011000111101101001111111101000000000" - "0010101100110010001100111111010011001110010110000110100100111010101" + "0010101100110010001100111111010011001110010110000110100100111000000" "1100010010001111111101001101001011111010010100110011001010010001100" "1110001011001110000010010100101010110010010010111010001000000101000" "1000010011000111111001000011111011101100011010010111110011110110111" @@ -1351,7 +1454,7 @@ static void test_encode(int index, int generate, int debug) { "0011011001010101001111011111001101101100101101010100101111001111110" "0001101100100101011100001110111010011110010010100100100001000101001" "1001011100010001101010010110011000110110111100000101110110000010000" - "1010101111000101011011011010010110000010111000110100011001011010100" + "0000001111000101011011011010010110000010111000110100011001011010100" "0000000001101101011110101100001101100101100001110110110111000000000" "1111111000111101000010111100100101111011111010010110011101101110101" "0000001010111001111001001100110011010101111100110100010010101110101" @@ -1361,7 +1464,7 @@ static void test_encode(int index, int generate, int debug) { "1110101001101001000100110010101000000101000110010110110110100000001" "1110101000010001111111111111111010010111110110110111111111001111111" }, - /* 19*/ { DATA_MODE, -1, -1, ZINT_FULL_MULTIBYTE, "é", 0, 23, 23, "Mask automatic (01)", + /* 21*/ { DATA_MODE, -1, -1, -1, ZINT_FULL_MULTIBYTE, "é", -1, 0, 23, 23, "Mask automatic (01)", "11111110100010101111111" "10000000001010000000001" "10111110111010001111101" @@ -1370,13 +1473,13 @@ static void test_encode(int index, int generate, int debug) { "10101110110100101110101" "10101110011101001110101" "00000000101010100000000" - "00010101101101001010101" + "00010101101101001000000" "00001011010010000111010" "10100010010010101010010" "10110101010101100010110" "10101000010110101010100" "10011111000110000101000" - "10101010000001110101000" + "00000010000001110101000" "00000000101001100000000" "11111110001000001110101" "00000010110000101110101" @@ -1386,7 +1489,7 @@ static void test_encode(int index, int generate, int debug) { "11101010001001000000001" "11101010101010101111111" }, - /* 20*/ { DATA_MODE, -1, -1, ZINT_FULL_MULTIBYTE | (1 << 8), "é", 0, 23, 23, "Mask 00", + /* 22*/ { DATA_MODE, -1, -1, -1, ZINT_FULL_MULTIBYTE | (1 << 8), "é", -1, 0, 23, 23, "Mask 00", "11111110001000001111111" "10000000111111000000001" "10111110110000001111101" @@ -1395,13 +1498,13 @@ static void test_encode(int index, int generate, int debug) { "10101110000001101110101" "10101110010111001110101" "00000000111111100000000" - "00010101100111110010101" + "00010101100111110000000" "01011110000111010010000" "00001000111000000000111" "11100000000000110111100" "00000010111100000000001" "11001010010011010000010" - "10101001101011110101000" + "00000001101011110101000" "00000000111100100000000" "11111110000010001110101" "00000010100101001110101" @@ -1411,7 +1514,7 @@ static void test_encode(int index, int generate, int debug) { "11101010011100100000001" "11101010000000001111111" }, - /* 21*/ { DATA_MODE, -1, -1, ZINT_FULL_MULTIBYTE | (4 << 8), "é", 0, 23, 23, "Mask 11", + /* 23*/ { DATA_MODE, -1, -1, -1, ZINT_FULL_MULTIBYTE | (4 << 8), "é", -1, 0, 23, 23, "Mask 11", "11111110000101101111111" "10000000111000100000001" "10111110110000101111101" @@ -1420,13 +1523,13 @@ static void test_encode(int index, int generate, int debug) { "10101110100110001110101" "10101110101110101110101" "00000000111000000000000" - "00010101100000111010101" + "00010101100000111000000" "01000100011111101010111" "10010010100111000111100" "00100101101111110000100" "01000111010010111000110" "00001101111110010111010" - "10101011111001110101000" + "00000011111001110101000" "00000000001110100000000" "11111110110000101110101" "00000010001000101110101" @@ -1436,7 +1539,7 @@ static void test_encode(int index, int generate, int debug) { "11101010100110100000001" "11101010111010001111111" }, - /* 22*/ { DATA_MODE, -1, -1, ZINT_FULL_MULTIBYTE | (5 << 8), "é", 0, 23, 23, "Mask > 11 ignored", + /* 24*/ { DATA_MODE, -1, -1, -1, ZINT_FULL_MULTIBYTE | ((4 + 1) << 8), "é", -1, 0, 23, 23, "Mask > 11 ignored", "11111110100010101111111" "10000000001010000000001" "10111110111010001111101" @@ -1445,13 +1548,13 @@ static void test_encode(int index, int generate, int debug) { "10101110110100101110101" "10101110011101001110101" "00000000101010100000000" - "00010101101101001010101" + "00010101101101001000000" "00001011010010000111010" "10100010010010101010010" "10110101010101100010110" "10101000010110101010100" "10011111000110000101000" - "10101010000001110101000" + "00000010000001110101000" "00000000101001100000000" "11111110001000001110101" "00000010110000101110101" @@ -1461,12 +1564,1616 @@ static void test_encode(int index, int generate, int debug) { "11101010001001000000001" "11101010101010101111111" }, + /* 25*/ { UNICODE_MODE, 3, 2, -1, 2 << 8, "sn:7QPB4MN", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 3 Example 1 same with explicit mask 01 (auto 11)", + "11111110011010101111111" + "10000000010101100000001" + "10111110001010001111101" + "10100000110110100000101" + "10101110001110001110101" + "10101110110101101110101" + "10101110001100001110101" + "00000000101110000000000" + "00010101001010100000000" + "01010110101101010100000" + "01100011010101010010011" + "00000110111001011111100" + "11001111110100100001101" + "01100101110111101110100" + "00000000111000010101000" + "00000000001001100000000" + "11111110000011001110101" + "00000010101010101110101" + "11111010010011001110101" + "00001010111111100000101" + "11101010001010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 26*/ { UNICODE_MODE, 3, -1, -1, -1, "price:£20.00", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 3 Example 2 same", + "11111110011010101111111" + "10000000010100100000001" + "10111110010010001111101" + "10100000100110100000101" + "10101110001101001110101" + "10101110110101101110101" + "10101110000010001110101" + "00000000110101000000000" + "00010101011010100000000" + "01011001001101010100010" + "10010011000100111001010" + "11101111000010101100010" + "11000110010011100000110" + "01011010111111101011101" + "00000000101001010101000" + "00000000010011100000000" + "11111110001110001110101" + "00000010111100101110101" + "11111010001001001110101" + "00001010110001100000101" + "11101010001110001111101" + "11101010110100000000001" + "11101010101010001111111" + }, + /* 27*/ { UNICODE_MODE, 3, -1, -1, 2 << 8, "C:\\DOCS\\EXAMPLE.TXT", -1, 0, 25, 25, "AIM ITS/04-023:2022 ECI 3 Example 3 same with explicit mask 01 (auto 11)", + "1111111011101010001111111" + "1000000001110000000000001" + "1011111011111110001111101" + "1010000000000110000000101" + "1010111000111001101110101" + "1010111011000001001110101" + "1010111001000100101110101" + "0000000011100110100000000" + "0001011000000011011000000" + "1000101010100000100010100" + "0111000110011110000000011" + "0110011010100100100110110" + "1010100111110011001011000" + "0111010100110110111011111" + "0100110110010101101001011" + "1110100011110101010101010" + "0000001100101101001101000" + "0000000010110101100000000" + "1111111010101101001110101" + "0000001000011001101110101" + "1111101011011110001110101" + "0000101001010101000000101" + "1110101000100011101111101" + "1110101001101100000000001" + "1110101000001010101111111" + }, + /* 28*/ { UNICODE_MODE, 4, 2, 3, 2 << 8, "Študentska št. 2198390", -1, 0, 27, 27, "AIM ITS/04-023:2022 ECI 4 Example 1 **NOT SAME** different encodation, example Binary only, Zint uses Numeric also", + "111111100110101010001111111" + "100000000101110001100000001" + "101111100010101110101111101" + "101000000111000001000000101" + "101011100011001010001110101" + "101011101000010101001110101" + "101011100010111110001110101" + "000000001001010101100000000" + "000101110100111100110000000" + "010101001110000110101110000" + "101110101010011001101110000" + "111011011101010101111010000" + "001001101010101010101010011" + "101000000010011000110101010" + "010011111000100111010000101" + "010101110111110000001100100" + "101110111111000101110110011" + "010101110101100000100100000" + "000000011011010101011101000" + "000000001011110110100000000" + "111111100111001101001110101" + "000000100111001110101110101" + "111110100110101010001110101" + "000010100101010000000000101" + "111010101001110010001111101" + "111010101101010011000000001" + "111010100010001010001111111" + }, + /* 29*/ { UNICODE_MODE, 4, 2, 5, 2 << 8, "Szczegółowe dane kontaktowe:+48 22 694 60 00", -1, 0, 31, 31, "AIM ITS/04-023:2022 ECI 4 Example 2 **NOT SAME** example corrupt??", + "1111111011101010101001001111111" + "1000000010001000010011100000001" + "1011111011011100100101101111101" + "1010000010010100011010000000101" + "1010111010000010111111001110101" + "1010111011000111011000101110101" + "1010111000111001111111101110101" + "0000000010100110011100100000000" + "0001100101001100101100101000000" + "1110111011110100011111011100110" + "1010011100110010011001000110101" + "1100110111101110101101111010000" + "1000011100001101011011000100000" + "1111110111100110010001000001010" + "1110110110110000010100001110110" + "1100110101001101001111100110000" + "1111111111111110101001110010101" + "0000000000000010100101001111000" + "1110001010001010011100001010001" + "0101010100110011101000101110111" + "0000101001101010101011010001000" + "1000111001101011000100111001001" + "0000001011011011100011010011000" + "0000000010001011100100100000000" + "1111111011101011101110001110101" + "0000001010111010111111101110101" + "1111101001001011010001101110101" + "0000101000010010001111100000101" + "1110101010101011000110101111101" + "1110101011111011001010100000001" + "1110101001101011111111101111111" + }, + /* 30*/ { UNICODE_MODE, 5, 2, -1, 2 << 8, "Liĥtenŝtejno", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 5 Example 1 **NOT SAME** example uses Binary only, Zint uses Text mode also", + "11111110011010101111111" + "10000000010111100000001" + "10111110010110001111101" + "10100000110000100000101" + "10101110001101001110101" + "10101110101100101110101" + "10101110000010001110101" + "00000000110101000000000" + "00010101010101100000000" + "01010010000101010101100" + "10011100000111100111111" + "11101000110011110010000" + "00100111011111100000011" + "10001101101110111010110" + "00000000110100010101000" + "00000000010010100000000" + "11111110011011001110101" + "00000010110011101110101" + "11111010010100001110101" + "00001010101001100000101" + "11101010010000001111101" + "11101010110000000000001" + "11101010101010001111111" + }, + /* 31*/ { UNICODE_MODE, 6, 2, -1, -1, "Lietuvą", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 6 Example 1 same", + "11111110011010101111111" + "10000000010101100000001" + "10111110001010001111101" + "10100000110011100000101" + "10101110001110001110101" + "10101110110101101110101" + "10101110001000001110101" + "00000000100011000000000" + "00010101001010100000000" + "01001100000101010101001" + "11011110100001001001111" + "01110001101010111111001" + "10011000100110101010100" + "11101111001110010001110" + "00000000101110010101000" + "00000000010111100000000" + "11111110000000001110101" + "00000010110101101110101" + "11111010001010001110101" + "00001010110011100000101" + "11101010000010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 32*/ { UNICODE_MODE, 7, 2, -1, -1, "Россия", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 7 Example 1 **NOT SAME** different encodation, figure uses Region 1", + "11111110011010101111111" + "10000000010101100000001" + "10111110001010001111101" + "10100000110010100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010011100101010101010" + "11001011101001011101000" + "11110101001011011101110" + "10010011000001011011010" + "11101111101001011011110" + "00000000101010010101000" + "00000000010100100000000" + "11111110001010001110101" + "00000010110101101110101" + "11111010001011001110101" + "00001010111010100000101" + "11101010001010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 33*/ { UNICODE_MODE, 7, 2, -1, -1, "Монголулс", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 7 Example 2 same", + "11111110011010101111111" + "10000000010101100000001" + "10111110001010001111101" + "10100000110010100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01011100111101010100100" + "11000101001001011100101" + "00011010001000011010100" + "11010000110101010111000" + "11101100111010111000110" + "00000000101001010101000" + "00000000001110100000000" + "11111110001010001110101" + "00000010101000101110101" + "11111010010100001110101" + "00001010110001100000101" + "11101010010010001111101" + "11101010111101000000001" + "11101010101010001111111" + }, + /* 34*/ { UNICODE_MODE, 8, 2, -1, 4 << 8, "جواز السفر", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 8 Example 1 same with explicit mask 11 (auto 01)", + "11111110111101101111111" + "10000000100101000000001" + "10111110000100101111101" + "10100000110000100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00010000101000111000001" + "11100100100110000001100" + "00000100010010010100110" + "00000001000101111001010" + "01010101110010100010001" + "00000001010110010101000" + "00000000101000100000000" + "11111110110001101110101" + "00000010000100101110101" + "11111010010010101110101" + "00001010111111100000101" + "11101010101010001111101" + "11101010010100100000001" + "11101010111010101111111" + }, + /* 35*/ { UNICODE_MODE, 8, 2, -1, 3 << 8, "المنشأ: المملكة العربية السعودية", -1, 0, 29, 29, "AIM ITS/04-023:2022 ECI 8 Example 2 **NOT SAME** example corrupt??", + "11111110011000101001101111111" + "10000000100000000011100000001" + "10111110010110110011101111101" + "10100000001111011100100000101" + "10101110110000100010101110101" + "10101110010100001111001110101" + "10101110100101110100101110101" + "00000000101000111000000000000" + "00011000011111011010001000000" + "10111010110101111010001000101" + "10000011101101000000111100011" + "10001110000101100001010011001" + "11101110011011010101110111001" + "11000110011000100010110101000" + "11111111111111110101000111001" + "00000000000000111111000110100" + "10011011011100110001110111100" + "01100110101000110101101111100" + "01110000111010101101010100100" + "11110101000110111100100100100" + "00000010000110111111000011000" + "00000000000100100001100000000" + "11111110111000100100101110101" + "00000010011110110001001110101" + "11111010101010110110101110101" + "00001010101110101001000000101" + "11101010100100110000001111101" + "11101010100000110001100000001" + "11101010100100111111001111111" + }, + /* 36*/ { UNICODE_MODE, 9, 1, -1, -1, "Μέρος #. α123", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 9 Example 1 **NOT SAME** example uses Binary only, Zint uses Numeric mode also", + "11111110011010001111111" + "10000000110101100000001" + "10111110001110101111101" + "10100000111100100000101" + "10101110001101101110101" + "10101110110110001110101" + "10101110010010001110101" + "00000000010101100000000" + "00010101000101011000000" + "10111111100010100101100" + "11001010101001000101101" + "01010001001011010101011" + "01010110101010001110110" + "01101001010101101001101" + "00000011001001010101000" + "00000000110010000000000" + "11111110011111001110101" + "00000010010010101110101" + "11111010101001001110101" + "00001010100101100000101" + "11101010101010001111101" + "11101010110010100000001" + "11101010001010001111111" + }, + /* 37*/ { UNICODE_MODE, 10, 2, -1, -1, "דרכון", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 10 Example 1 same", + "11111110011010101111111" + "10000000010101100000001" + "10111110001010001111101" + "10100000111111100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010000101101010101011" + "01010101111101101101110" + "00101111101010010110110" + "00010111101001110100100" + "11111011010101001001111" + "00000000101010010101000" + "00000000010110100000000" + "11111110011000001110101" + "00000010100101101110101" + "11111010001011001110101" + "00001010111011100000101" + "11101010001010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 38*/ { UNICODE_MODE, 10, 2, 3, -1, "מספר חלק: A20200715001", -1, 0, 27, 27, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** example uses Binary only, Zint uses Numeric mode also", + "111111100110010010101111111" + "100000000001000001000000001" + "101111100111111110001111101" + "101000001000101000100000101" + "101011100000101000001110101" + "101011100111111111101110101" + "101011101011110001101110101" + "000000001101001001000000000" + "000101110011001101111000000" + "010010010011111000101100110" + "001001001001011000011110010" + "011000110111111111011011001" + "011101011001010010010011101" + "101100000111001001001001001" + "001111110011111000000000111" + "010010100100110010101100010" + "000010111000110110000110111" + "111111100101001101000011001" + "000000111001110010011101000" + "000000000001010101100000000" + "111111101011101100101110101" + "000000101100101011001110101" + "111110100001001000001110101" + "000010101101110100100000101" + "111010100000011010001111101" + "111010100001001101000000001" + "111010101001111111001111111" + }, + /* 39*/ { UNICODE_MODE, 11, 2, 3, -1, "Amerika Birleşik Devletleri", -1, 0, 27, 27, "AIM ITS/04-023:2022 ECI 11 Example 1 **NOT SAME** example uses 2-byte Region mode", + "111111100110101011001111111" + "100000000110110010100000001" + "101111100000100000101111101" + "101000000110101110000000101" + "101011100011101100001110101" + "101011101011111110001110101" + "101011100000001101001110101" + "000000001101111110100000000" + "000101110011001111110000000" + "011010101010010101000000101" + "010100101010101111101001111" + "110011110101010101011101000" + "011000000111111010101010101" + "001010000110011101010101010" + "001001001001010110001000101" + "010100111110010011010101111" + "111110001011001100101011111" + "011011010100101011010110011" + "000000011010110001011101000" + "000000001010100110100000000" + "111111100110001100001110101" + "000000100101110100101110101" + "111110100000100111001110101" + "000010100001000101000000101" + "111010101100001101001111101" + "111010101000101000000000001" + "111010100111001010001111111" + }, + /* 40*/ { UNICODE_MODE, 11, 2, 3, -1, "Biniş kartı #120921039", -1, 0, 27, 27, "AIM ITS/04-023:2022 ECI 11 Example 2 **NOT SAME** example uses Binary only, Zint uses Numeric mode also", + "111111100110101011001111111" + "100000000111001001100000001" + "101111100010101101101111101" + "101000000111101110000000101" + "101011100011010111001110101" + "101011101100010101001110101" + "101011100011101010001110101" + "000000001001010101100000000" + "000101110010101000110000000" + "010101001010010110000001011" + "001010101010000001111011100" + "100100101101010101000110111" + "100001101101101010101001101" + "110110110010110001010101010" + "101111101110010111100101101" + "010100000111001011011010101" + "010011001011101011101010010" + "010101001110111101110011111" + "000000011111001010011101000" + "000000001101010001100000000" + "111111100100101101001110101" + "000000100101011110101110101" + "111110100010101010001110101" + "000010100011100011000000101" + "111010101000110010001111101" + "111010101101011000000000001" + "111010100010101010001111111" + }, + /* 41*/ { UNICODE_MODE, 12, 2, -1, 2 << 8, "Kūrybiškumą", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 12 Example 1 same with explicit mask 01 (auto 10)", + "11111110011010101111111" + "10000000010100100000001" + "10111110011100001111101" + "10100000101001100000101" + "10101110001101001110101" + "10101110110111101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01011110000101010101111" + "01110101010101011001000" + "01010001110011100000101" + "10000100000010101110011" + "00010111110011110111100" + "00000000110000010101000" + "00000000011000100000000" + "11111110000000001110101" + "00000010110000101110101" + "11111010011100001110101" + "00001010101011100000101" + "11101010010111001111101" + "11101010111110000000001" + "11101010101010001111111" + }, + /* 42*/ { UNICODE_MODE, 13, 2, -1, -1, "บาร๋แค่ด", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 13 Example 1 **NOT SAME** example uses Region 1", + "11111110011010101111111" + "10000000010101100000001" + "10111110001010001111101" + "10100000111000100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01011101111101010100111" + "11000010011100111100100" + "01101101101010101111111" + "11010111111110101001111" + "01110101000110110001110" + "00000000100010010101000" + "00000000000001100000000" + "11111110000100001110101" + "00000010101111101110101" + "11111010001011001110101" + "00001010101101100000101" + "11101010010010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 43*/ { UNICODE_MODE, 15, 2, -1, -1, "uzņēmums", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 15 Example 1 same", + "11111110011010101111111" + "10000000010101100000001" + "10111110001010001111101" + "10100000111010100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01011101001101010100000" + "00011011100001111101110" + "11011001111010111010010" + "01000101000000110000010" + "11000000000000101001101" + "00000000100111010101000" + "00000000011001100000000" + "11111110011010001110101" + "00000010101100101110101" + "11111010011011001110101" + "00001010100110100000101" + "11101010000010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 44*/ { UNICODE_MODE, 16, 2, -1, -1, "ṁórṡáċ", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 16 Example 1 same with explicit mask 11 (auto 10)", + "11111110011001001111111" + "10000000000000000000001" + "10111110011111101111101" + "10100000001001000000101" + "10101110000010001110101" + "10101110011111001110101" + "10101110101001101110101" + "00000000100100100000000" + "00010101011111101000000" + "01001111100001001000011" + "11011111001010111111110" + "10011011010101010101000" + "10110111010001001010010" + "11111000110000111101001" + "00000010111111010101000" + "00000000101001100000000" + "11111110100111101110101" + "00000010011111001110101" + "11111010001000001110101" + "00001010001100000000101" + "11101010101111001111101" + "11101010001001000000001" + "11101010000100001111111" + }, + /* 45*/ { UNICODE_MODE, 17, -1, -1, 2 << 8, "Price: €13.50", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 17 Example 1 same with explicit mask 01 (auto 10)", + "11111110011010101111111" + "10000000010011100000001" + "10111110000110001111101" + "10100000100100100000101" + "10101110001100001110101" + "10101110101001101110101" + "10101110000010001110101" + "00000000110101000000000" + "00010101011111100000000" + "01111000000001010100010" + "10010100011100111001100" + "10010111000010001010110" + "11000100111100100000110" + "00010010111101100110110" + "00000000101010010101000" + "00000000000011100000000" + "11111110001010001110101" + "00000010100111101110101" + "11111010001000001110101" + "00001010111100100000101" + "11101010011110001111101" + "11101010111100000000001" + "11101010101010001111111" + }, + /* 46*/ { UNICODE_MODE, 18, -1, -1, -1, "Te słowa są głębokie", -1, 0, 25, 25, "AIM ITS/04-023:2022 ECI 18 Example 1 **NOT SAME** example uses Binary only, Zint uses Text mode also", + "1111111001000000101111111" + "1000000011100111000000001" + "1011111010111110001111101" + "1010000010100010100000101" + "1010111010011000101110101" + "1010111001000101001110101" + "1010111000011110101110101" + "0000000010000000100000000" + "0001011000000001100000000" + "1001101110111101000111101" + "0110011010100011100111111" + "0111010001010011110100100" + "0100110000001101001011001" + "0010010011101100101011111" + "0100100110111101011010001" + "0000111101101010001010001" + "0000000010110111001101000" + "0000000010111111100000000" + "1111111011000000001110101" + "0000001000000000001110101" + "1111101010010010101110101" + "0000101010000000100000101" + "1110101000000001101111101" + "1110101001010000100000001" + "1110101011100000001111111" + }, + /* 47*/ { UNICODE_MODE, 20, -1, -1, -1, "バーコード", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 20 Example 1 **NOT SAME** example uses 2-byte Region mode", + "11111110011010101111111" + "10000000010000100000001" + "10111110001010001111101" + "10100000110001100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01011111110101010101011" + "00010111001011010110100" + "01100101000001111001101" + "11011011010000101100000" + "00011110011111011101111" + "00000000101011010101000" + "00000000011111100000000" + "11111110011000001110101" + "00000010101000101110101" + "11111010010010001110101" + "00001010100001100000101" + "11101010010010001111101" + "11101010101110000000001" + "11101010101010001111111" + }, + /* 48*/ { UNICODE_MODE, 20, -1, -1, -1, "東京都", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 20 Example 2 **NOT SAME** example uses 2-byte Region mode", + "11111110111010001111111" + "10000000110000000000001" + "10111110100100101111101" + "10100000110001000000101" + "10101110001101001110101" + "10101110110111001110101" + "10101110000010001110101" + "00000000010101000000000" + "00010101111001110000000" + "01110011110011001010011" + "01101110110011001110101" + "10010111101100111000001" + "01111011101110001100010" + "01010100011001011011011" + "00000001101010110101000" + "00000000010110000000000" + "11111110000101001110101" + "00000010010101101110101" + "11111010001011001110101" + "00001010000010100000101" + "11101010111010101111101" + "11101010010101100000001" + "11101010001010101111111" + }, + /* 49*/ { UNICODE_MODE, 21, -1, -1, -1, "Študentska št. 2198390", -1, 0, 25, 25, "AIM ITS/04-023:2022 ECI 21 Example 1 **NOT SAME** different encodation, example Binary only, Zint uses Numeric also", + "1111111001000000101111111" + "1000000011000010000000001" + "1011111010111101001111101" + "1010000010000101100000101" + "1010111010011000101110101" + "1010111000010010001110101" + "1010111000100000101110101" + "0000000010000000100000000" + "0001011001101001100000000" + "1110101110111110010100001" + "1111010001010011011100011" + "0011001101000110000000000" + "0001011010101110011011100" + "0001100100011011110100011" + "0010001010110011100011000" + "0010111001100000001110110" + "0000000011010100001101000" + "0000000010111111100000000" + "1111111011110011001110101" + "0000001001010110001110101" + "1111101010110111101110101" + "0000101010000000100000101" + "1110101000101101101111101" + "1110101001011010100000001" + "1110101010000000001111111" + }, + /* 50*/ { UNICODE_MODE, 22, 2, -1, -1, "Россия", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 22 Example 1 same", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000110011100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010011100101010100010" + "11010000100111011101011" + "01101001001010111101000" + "10010110010001111011010" + "11010000101001001110110" + "00000000101010010101000" + "00000000010101100000000" + "11111110010010001110101" + "00000010100101101110101" + "11111010001010001110101" + "00001010100100100000101" + "11101010011010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 51*/ { UNICODE_MODE, 22, 2, -1, 4 << 8, "Монголулс", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 22 Example 1 same with explicit mask 11 (auto 01)", + "11111110111101101111111" + "10000000100011000000001" + "10111110000000101111101" + "10100000111110100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00010011101000111000001" + "11101101011010110000110" + "00100110110000100110100" + "00111010101011100101000" + "10111001000010101001100" + "00000001000001010101000" + "00000000101111100000000" + "11111110111100101110101" + "00000010001000101110101" + "11111010010010101110101" + "00001010111110100000101" + "11101010111110001111101" + "11101010010010100000001" + "11101010111010101111111" + }, + /* 52*/ { UNICODE_MODE, 23, 2, -1, 4 << 8, "bœuf", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 23 Example 1 same with explicit mask 11 (auto 01)", + "11111110111101101111111" + "10000000100011000000001" + "10111110000000101111101" + "10100000111111100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00011110000000111000110" + "11010001010000100100101" + "01010000111001110101100" + "10000101100110111000111" + "10010101101101000010101" + "00000001010010010101000" + "00000000110001100000000" + "11111110100001101110101" + "00000010001101101110101" + "11111010001100101110101" + "00001010101010100000101" + "11101010101010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 53*/ { UNICODE_MODE, 24, -1, -1, -1, "جواز السفر", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 24 Example 1 same", + "11111110011010101111111" + "10000000010011100000001" + "10111110001110001111101" + "10100000111101100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01011111100101010101100" + "11011100000110011100110" + "00000100101000111100000" + "11101101011101101011001" + "10001111001010111010010" + "00000000101011010101000" + "00000000001110100000000" + "11111110000011001110101" + "00000010101100101110101" + "11111010010110001110101" + "00001010100010100000101" + "11101010011101001111101" + "11101010111011000000001" + "11101010101010001111111" + }, + /* 54*/ { UNICODE_MODE, 24, 2, -1, 4 << 8, "المنشأ: المملكة العربية السعودية", -1, 0, 29, 29, "AIM ITS/04-023:2022 ECI 24 Example 2 **NOT SAME** example corrupt??", + "11111110111100101100001111111" + "10000000000110001000100000001" + "10111110001001001000101111101" + "10100000101110010100000000101" + "10101110011100000000101110101" + "10101110100000110111001110101" + "10101110110100010001101110101" + "00000000110101010111000000000" + "00011000000111100011110000000" + "11101001100100010100111001011" + "10010100011100101100010100000" + "10111010010101011001101010010" + "11001010111100100101100111010" + "11100110010001000001001010100" + "11111111111111101011011111101" + "00000000000000111110110111000" + "00101111100100110110010100000" + "11110110100010101001111111011" + "01110101111110101010111010001" + "00010110101110110101000111100" + "00000001101000100010000011000" + "00000000010110111010100000000" + "11111110100110110010101110101" + "00000010000110110010101110101" + "11111010100110110010001110101" + "00001010001010110001100000101" + "11101010111110101011001111101" + "11101010111110110010000000001" + "11101010011000111111101111111" + }, + /* 55*/ { UNICODE_MODE, 25, 2, -1, -1, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 25 Example 1 same", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000111100100000101" + "10101110001110001110101" + "10101110110101101110101" + "10101110001111001110101" + "00000000111111000000000" + "00010101001010100000000" + "01011100100101010100101" + "01001100010110101101010" + "01000010110100011111110" + "10101011110111101010101" + "10011011010101010011010" + "00000000101010010101000" + "00000000010110100000000" + "11111110010010001110101" + "00000010100101101110101" + "11111010001011001110101" + "00001010111101100000101" + "11101010011010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 56*/ { UNICODE_MODE, 25, 2, -1, 3 << 8, "バーコード", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 25 Example 2 same with explicit mask 10 (auto 01)", + "11111110011001001111111" + "10000000000001000000001" + "10111110011011101111101" + "10100000000000000000101" + "10101110000010001110101" + "10101110011111001110101" + "10101110101001101110101" + "00000000100100100000000" + "00010101011111101000000" + "01000011000001001000001" + "01000100001010100101101" + "00101011110000010011100" + "11001101110000101000010" + "10100011101000011101100" + "00000010101111010101000" + "00000000110100100000000" + "11111110101100101110101" + "00000010000001001110101" + "11111010001011001110101" + "00001010010001000000101" + "11101010100011001111101" + "11101010001111000000001" + "11101010000100001111111" + }, + /* 57*/ { UNICODE_MODE, 25, 2, -1, -1, "바코드", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 25 Example 3 same", + "11111110111101101111111" + "10000000100011000000001" + "10111110000000101111101" + "10100000110001100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00011100110000111001001" + "10010001101101100001010" + "00000110011010011110010" + "11010011101001010001011" + "01110110011101000101111" + "00000001010010010101000" + "00000000110010100000000" + "11111110101100101110101" + "00000010011101101110101" + "11111010001101101110101" + "00001010100001100000101" + "11101010110010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 58*/ { UNICODE_MODE, 26, 2, -1, -1, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 26 Example 1 **NOT SAME** example uses 2-byte Region mode", + "11111110111101101111111" + "10000000100011000000001" + "10111110000000101111101" + "10100000110010100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00011100100000111000100" + "11010111111100101010011" + "00100101110001101011100" + "10110011001100111001110" + "11110111101001011011011" + "00000001010010010101000" + "00000000110010100000000" + "11111110100001101110101" + "00000010011101101110101" + "11111010001100101110101" + "00001010100010100000101" + "11101010100010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 59*/ { UNICODE_MODE, 26, 2, -1, 4 << 8, "バーコード", -1, 0, 25, 25, "AIM ITS/04-023:2022 ECI 26 Example 2 same with explicit mask 11 (auto 01)", + "1111111001110110001111111" + "1000000011011011100000001" + "1011111010000100101111101" + "1010000001001001000000101" + "1010111011111000101110101" + "1010111011101011101110101" + "1010111011010000001110101" + "0000000010011100000000000" + "0001011001101111101000000" + "1001110101011100000000000" + "0001111101100000011010101" + "0111100110000100111000011" + "1101001110100111100011110" + "1010011101010100011101110" + "0101000110011010011101100" + "0000110010101001100100011" + "0000001011001010001101000" + "0000000001110110100000000" + "1111111000110101101110101" + "0000001011000010101110101" + "1111101011100011101110101" + "0000101001101001000000101" + "1110101010100110101111101" + "1110101011110011100000001" + "1110101001010110001111111" + }, + /* 60*/ { UNICODE_MODE, 26, 2, -1, -1, "바코드", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 26 Example 3 same", + "11111110111101101111111" + "10000000100011000000001" + "10111110000000101111101" + "10100000110010100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00010011100000111000010" + "01000110110001000011011" + "00111000100000111100001" + "11010011001010000011111" + "11001010111110101001011" + "00000001011001010101000" + "00000000100001100000000" + "11111110111010101110101" + "00000010010100101110101" + "11111010010100101110101" + "00001010101111100000101" + "11101010101101001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 61*/ { UNICODE_MODE, 27, 2, -1, 3 << 8, "sn:7QPB4MN", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 27 Example 1 same with explicit mask 10 (auto 11)", + "11111110011001001111111" + "10000000000000000000001" + "10111110011111101111101" + "10100000000010000000101" + "10101110000000001110101" + "10101110011111001110101" + "10101110101111101110101" + "00000000111111100000000" + "00010101011111101000000" + "01001010110001001000011" + "11100001011011011100101" + "11001100010011101001101" + "00101100011010000010001" + "01011110000110001100110" + "00000010101101010101000" + "00000000110110100000000" + "11111110110101101110101" + "00000010000000001110101" + "11111010010001001110101" + "00001010000001000000101" + "11101010101111001111101" + "11101010001001000000001" + "11101010000100001111111" + }, + /* 62*/ { UNICODE_MODE, 28, 2, -1, -1, "條碼", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 28 Example 1 same", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000111001100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010001111101010100010" + "01011000111101101111111" + "00010010000000001010101" + "10101001011010101010101" + "01100111010101011001010" + "00000000101010010101000" + "00000000010111100000000" + "11111110011010001110101" + "00000010100101101110101" + "11111010001010001110101" + "00001010111011100000101" + "11101010011010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 63*/ { UNICODE_MODE, 29, 2, -1, -1, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 29 Example 1 **NOT SAME** example uses Region 1 mode", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000111000100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010001100101010101100" + "11011111110100000100011" + "00110101111011110100111" + "11001011011001101010100" + "10110111010101000100100" + "00000000101010010101000" + "00000000010101100000000" + "11111110000010001110101" + "00000010110101101110101" + "11111010001011001110101" + "00001010111110100000101" + "11101010000010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 64*/ { UNICODE_MODE, 29, 2, -1, -1, "北京", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 29 Example 2 **NOT SAME** example uses Region 1 mode", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000111000100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010001111101010100010" + "01111010001100100111001" + "01011010111110000010111" + "10001011100010101010100" + "01011111010101000110101" + "00000000101010010101000" + "00000000010110100000000" + "11111110001001001110101" + "00000010110101101110101" + "11111010001011001110101" + "00001010100110100000101" + "11101010010010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 65*/ { UNICODE_MODE, 30, 2, -1, -1, "바코드", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 30 Example 1 **NOT SAME** example uses Region 1 mode", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000111011100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010011111101010100110" + "01001111011001100100100" + "11011100011000100010101" + "11111111001110000001010" + "01111101000001011100010" + "00000000101010010101000" + "00000000010101100000000" + "11111110001111001110101" + "00000010100101101110101" + "11111010001011001110101" + "00001010100001100000101" + "11101010010010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 66*/ { UNICODE_MODE, 30, 2, -1, -1, "서울", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 30 Example 2 **NOT SAME** example uses Region 1 mode", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000111011100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010001111101010100100" + "11110001000111000111110" + "10111010101011100100011" + "01001011010111101010100" + "00111111010101000101101" + "00000000101010010101000" + "00000000010100100000000" + "11111110010100001110101" + "00000010100101101110101" + "11111010001010001110101" + "00001010101011100000101" + "11101010000010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 67*/ { UNICODE_MODE, 31, 2, -1, -1, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 31 Example 1 **NOT SAME** example uses Region 1 mode", + "11111110011010101111111" + "10000000010001100000001" + "10111110001010001111101" + "10100000111010100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010001100101010101100" + "11010000010000000100100" + "11111101111010110010011" + "11001010010100101010100" + "00111011010101001010101" + "00000000101010010101000" + "00000000010101100000000" + "11111110010111001110101" + "00000010100101101110101" + "11111010001011001110101" + "00001010100111100000101" + "11101010010010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 68*/ { UNICODE_MODE, 31, 2, -1, -1, "北京", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 31 Example 2 **NOT SAME** example uses Region 1 mode", + "11111110011001001111111" + "10000000000000000000001" + "10111110011111101111101" + "10100000000110000000101" + "10101110000010001110101" + "10101110011111001110101" + "10101110101001101110101" + "00000000100100100000000" + "00010101011111101000000" + "01001101100001001000001" + "11111011100110101001111" + "00111000010101101110110" + "01101001001100001001000" + "10100010100100111001010" + "00000010111111010101000" + "00000000101010100000000" + "11111110110010101110101" + "00000010001111001110101" + "11111010001000001110101" + "00001010001110000000101" + "11101010110111001111101" + "11101010001001000000001" + "11101010000100001111111" + }, + /* 69*/ { UNICODE_MODE, 31, 2, -1, -1, "條碼", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 31 Example 3 **NOT SAME** example uses 2-byte Region mode", + "11111110011001001111111" + "10000000000000000000001" + "10111110011111101111101" + "10100000000110000000101" + "10101110000010001110101" + "10101110011111001110101" + "10101110101001101110101" + "00000000100100100000000" + "00010101011111101000000" + "01001101101001001000010" + "10011010011001000001111" + "01010010111001010010011" + "01101000101111001001000" + "00100100100100101100100" + "00000010111111010101000" + "00000000101011100000000" + "11111110110011101110101" + "00000010001111001110101" + "11111010001000001110101" + "00001010010101000000101" + "11101010101111001111101" + "11101010001001000000001" + "11101010000100001111111" + }, + /* 70*/ { UNICODE_MODE, 32, 2, -1, 2 << 8, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 32 Example 1 same with explicit mask 01 (auto 10)", + "11111110011010101111111" + "10000000011101100000001" + "10111110001010001111101" + "10100000110101100000101" + "10101110000010001110101" + "10101110110101101110101" + "10101110001111001110101" + "00000000111100000000000" + "00010101001010100000000" + "01001101100101010100100" + "11001100001101010101110" + "10000010110100001100110" + "10101010111000101010100" + "10110111010101010101110" + "00000000101010010101000" + "00000000010101100000000" + "11111110000100001110101" + "00000010100101101110101" + "11111010001010001110101" + "00001010100110100000101" + "11101010010010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 71*/ { UNICODE_MODE, 32, 2, -1, 4 << 8, "北京", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 32 Example 2 same with explicit mask 11 (auto 01)", + "11111110111101101111111" + "10000000101111000000001" + "10111110000000101111101" + "10100000111000100000101" + "10101110110000001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100001100000000" + "00010101000111010000000" + "00000110110000111000101" + "01010010100000111000001" + "11000010001111000000000" + "01000111001001111000110" + "11101011101101010111010" + "00000001010010010101000" + "00000000110010100000000" + "11111110111000101110101" + "00000010011101101110101" + "11111010001100101110101" + "00001010101001100000101" + "11101010110010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 72*/ { UNICODE_MODE, 32, 2, -1, -1, "條碼", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 32 Example 3 **NOT SAME** example uses 2-byte Region mode", + "11111110011001001111111" + "10000000001100000000001" + "10111110011111101111101" + "10100000001001000000101" + "10101110000010001110101" + "10101110011111001110101" + "10101110101001101110101" + "00000000100100100000000" + "00010101011111101000000" + "01001101101001001000010" + "10011010001001000001100" + "11010010111000110101111" + "01101011010110001001000" + "11000100100100110010100" + "00000010111111010101000" + "00000000101001100000000" + "11111110111011101110101" + "00000010011111001110101" + "11111010001001001110101" + "00001010011110000000101" + "11101010100111001111101" + "11101010001001000000001" + "11101010000100001111111" + }, + /* 73*/ { UNICODE_MODE, 32, 2, -1, 2 << 8, "པེ་ཅིང།", -1, 0, 25, 25, "AIM ITS/04-023:2022 ECI 32 Example 4 same with explicit mask 01 (auto 10)", + "1111111011101011001111111" + "1000000001011100000000001" + "1011111011000010001111101" + "1010000001100101000000101" + "1010111000010001101110101" + "1010111010010111001110101" + "1010111000111110101110101" + "0000000011010101100000000" + "0001011000101001011000000" + "1100000111101101110000000" + "1011110000011001100100100" + "0001110001010101010100111" + "1001111001001100100011111" + "0011111011011001101101011" + "0101011010101010101111010" + "0101011000100010111101111" + "0000001101110001001101000" + "0000000011111011100000000" + "1111111010101100001110101" + "0000001000111010101110101" + "1111101011101010001110101" + "0000101001010101000000101" + "1110101000101101101111101" + "1110101001100100000000001" + "1110101001001010101111111" + }, + /* 74*/ { UNICODE_MODE, 32, 2, -1, -1, "バーコード", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 32 Example 5 same", + "11111110111101101111111" + "10000000101100000000001" + "10111110000000101111101" + "10100000111000100000101" + "10101110110100001110101" + "10101110100111001110101" + "10101110111000101110101" + "00000000110001100000000" + "00010101000111010000000" + "00001011101000111000000" + "11101100001110000111010" + "11001011011101101010001" + "00000010100010001111101" + "01011101101100101000101" + "00000001011111010101000" + "00000000110010100000000" + "11111110101010101110101" + "00000010011100101110101" + "11111010010010101110101" + "00001010100100100000101" + "11101010110101001111101" + "11101010000101100000001" + "11101010111010101111111" + }, + /* 75*/ { UNICODE_MODE, 32, 2, -1, -1, "바코드", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 32 Example 6 same", + "11111110111101101111111" + "10000000101111000000001" + "10111110000000101111101" + "10100000111000100000101" + "10101110110110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100100100000000" + "00010101000111010000000" + "00011100101000111001111" + "00101010111101000110111" + "01101010111110011001101" + "01010000101011001000111" + "00101100110010111001111" + "00000001010100010101000" + "00000000111001100000000" + "11111110100110101110101" + "00000010001101101110101" + "11111010001101101110101" + "00001010110001100000101" + "11101010111010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 76*/ { UNICODE_MODE, 33, 2, -1, 4 << 8, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 33 Example 1 same with explicit mask 11 (auto 10)", + "11111110111101101111111" + "10000000101111000000001" + "10111110000000101111101" + "10100000111001100000101" + "10101110111100001110101" + "10101110100111001110101" + "10101110111101101110101" + "00000000110101100000000" + "00010101000111010000000" + "00001111100000111001111" + "10001100010100111100110" + "10011000010001010001111" + "01000111011101111000111" + "00101101101101010011100" + "00000001010010010101000" + "00000000110001100000000" + "11111110100110101110101" + "00000010001101101110101" + "11111010001100101110101" + "00001010111000100000101" + "11101010110010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 77*/ { UNICODE_MODE, 33, 2, -1, -1, "バーコード", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 33 Example 2 same", + "11111110111101101111111" + "10000000101101000000001" + "10111110000000101111101" + "10100000111001100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00010000101000111001111" + "10001110100101000000101" + "11110010101101101100010" + "01010001001000011110100" + "10111010101110110111100" + "00000001001110010101000" + "00000000110111100000000" + "11111110111010101110101" + "00000010000101101110101" + "11111010000001101110101" + "00001010100010100000101" + "11101010101000001111101" + "11101010010011100000001" + "11101010111010101111111" + }, + /* 78*/ { UNICODE_MODE, 33, 2, -1, 2 << 8, "바코드", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 33 Example 3 same with explicit mask 01 (auto 11)", + "11111110011010101111111" + "10000000011101100000001" + "10111110001010001111101" + "10100000110100100000101" + "10101110001100001110101" + "10101110110101101110101" + "10101110001010001110101" + "00000000110101000000000" + "00010101001010100000000" + "01010011010101010100000" + "11110010100101001000000" + "10110000011001101011111" + "01010010011011010011111" + "00101000000101001000100" + "00000000101010010101000" + "00000000010101100000000" + "11111110001101001110101" + "00000010110101101110101" + "11111010001010001110101" + "00001010111011100000101" + "11101010001010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 79*/ { UNICODE_MODE, 34, 2, -1, 4 << 8, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 34 Example 1 same with explicit mask 11 (auto 10)", + "11111110111101101111111" + "10000000101111000000001" + "10111110000000101111101" + "10100000111010100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00010010011000111000111" + "10010000001111000100011" + "00101100011001110101100" + "01100101010010111000111" + "00101011101100111101010" + "00000001001010010101000" + "00000000110001100000000" + "11111110101101101110101" + "00000010011101101110101" + "11111010011101101110101" + "00001010101000100000101" + "11101010111010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 80*/ { UNICODE_MODE, 34, 2, -1, 2 << 8, "バーコード", -1, 0, 25, 25, "AIM ITS/04-023:2022 ECI 34 Example 2 same with explicit mask 01 (auto 10)", + "1111111011101011001111111" + "1000000001010101000000001" + "1011111010001110001111101" + "1010000001100111000000101" + "1010111000110110101110101" + "1010111011000010001110101" + "1010111000000000101110101" + "0000000011010101100000000" + "0001011001100110011000000" + "0010011010000101010101010" + "0010010010101010101010110" + "0011001101010110010110111" + "0110000010110001001010101" + "0010000101010101010101111" + "1000101010101010101110000" + "0111010101100101100100110" + "0000001101111010001101000" + "0000000010100001100000000" + "1111111011101011001110101" + "0000001000000110101110101" + "1111101011101010001110101" + "0000101001010101000000101" + "1110101000101010101111101" + "1110101001110101000000001" + "1110101000101010101111111" + }, + /* 81*/ { UNICODE_MODE, 34, 2, -1, 4 << 8, "바코드", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 34 Example 3 same with explicit mask 11 (auto 01)", + "11111110111101101111111" + "10000000101111000000001" + "10111110000010101111101" + "10100000101010100000101" + "10101110111111001110101" + "10101110101110001110101" + "10101110101001101110101" + "00000000100111100000000" + "00010101011011010000000" + "00010110011000111000111" + "10010011010011000010011" + "11000010101111101110110" + "11000101110101111000111" + "00011111101110010110011" + "00000001011101010101000" + "00000000111010100000000" + "11111110110011101110101" + "00000010000111101110101" + "11111010001100101110101" + "00001010111111100000101" + "11101010100010001111101" + "11101010011010100000001" + "11101010111010101111111" + }, + /* 82*/ { UNICODE_MODE, 35, 2, -1, 2 << 8, "条码", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 35 Example 1 same with explicit mask 01 (auto 11)", + "11111110011010101111111" + "10000000011101100000001" + "10111110001010001111101" + "10100000110110100000101" + "10101110001110001110101" + "10101110110101101110101" + "10101110001110001110101" + "00000000100111000000000" + "00010101001010100000000" + "01000000101101010100010" + "10100000111110101010000" + "01110101101011000001100" + "01000111010101010100100" + "00111001010101010110000" + "00000000101101010101000" + "00000000001011100000000" + "11111110010001001110101" + "00000010100101101110101" + "11111010001010001110101" + "00001010110011100000101" + "11101010000010001111101" + "11101010110101000000001" + "11101010101010001111111" + }, + /* 83*/ { UNICODE_MODE, 35, 2, -1, -1, "バーコード", -1, 0, 25, 25, "AIM ITS/04-023:2022 ECI 35 Example 2 same", + "1111111011101011001111111" + "1000000001110101000000001" + "1011111010100100001111101" + "1010000001000110000000101" + "1010111000110010101110101" + "1010111011010100001110101" + "1010111000011010101110101" + "0000000011010101100000000" + "0001011000101001011000000" + "1100100000000110001001011" + "0000011100101011001010101" + "0010100001010101010101000" + "0010001010101010101100001" + "0010010101101111000110001" + "0010010010110010101010111" + "0010010101010101010010101" + "0000001101001010001101000" + "0000000011010101100000000" + "1111111010101010001110101" + "0000001000101001101110101" + "1111101010100000001110101" + "0000101001010101000000101" + "1110101001100110101111101" + "1110101000101100000000001" + "1110101000001010101111111" + }, + /* 84*/ { UNICODE_MODE, 35, 2, -1, 4 << 8, "바코드", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 35 Example 3 same with explicit mask 11 (auto 01)", + "11111110111101101111111" + "10000000101101000000001" + "10111110010000101111101" + "10100000111011100000101" + "10101110111110001110101" + "10101110100111001110101" + "10101110111001101110101" + "00000000100111100000000" + "00010101000111010000000" + "00010110011000111001101" + "11001101000100100111100" + "01110101101110001001100" + "01001101111100010001011" + "00111111010001000000011" + "00000001010010010101000" + "00000000110011100000000" + "11111110100111101110101" + "00000010011101101110101" + "11111010000000101110101" + "00001010111001100000101" + "11101010110101001111101" + "11101010011111100000001" + "11101010111010101111111" + }, + /* 85*/ { UNICODE_MODE, 170, 2, -1, -1, "sn:7QPB4MN", -1, 0, 23, 23, "AIM ITS/04-023:2022 ECI 170 Example 1 same", + "11111110111100101111111" + "10000000100111000000001" + "10111110000000101111101" + "10100000111000100000101" + "10101110101100001110101" + "10101110100111001110101" + "10101110111100101110101" + "00000000100101100000000" + "00010101000111010000000" + "00000001000000111000110" + "01101000001101101011010" + "10011010011110101000101" + "10011110000111011110101" + "11100101111011010011101" + "00000001011010010101000" + "00000000100100100000000" + "11111110100101101110101" + "00000010010100101110101" + "11111010000011101110101" + "00001010101010100000101" + "11101010111101001111101" + "11101010000110100000001" + "11101010111010101111111" + }, + /* 86*/ { DATA_MODE, 899, 2, -1, -1, "\000\001\002\133\134\135\375\376\377", 9, 0, 23, 23, "AIM ITS/04-023:2022 ECI 899 Example 1 same", + "11111110011011101111111" + "10000000010110100000001" + "10111110010110001111101" + "10100000110110100000101" + "10101110011010001110101" + "10101110110101101110101" + "10101110001011001110101" + "00000000100110000000000" + "00010101001010100000000" + "01010101010101010101110" + "00100111001010101010010" + "11110101000100110000110" + "11100000101110011100001" + "11011110100100001000001" + "00000000110111010101000" + "00000000001011100000000" + "11111110010000001110101" + "00000010111011101110101" + "11111010010100001110101" + "00001010100100100000101" + "11101010000101001111101" + "11101010100010000000001" + "11101010101010001111111" + }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; struct zint_symbol *symbol; char escaped[8192]; + char cmp_buf[32768]; + char cmp_msg[1024]; + + int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); // Only do ZXing-C++ test if asked, too slow otherwise testStart("test_encode"); @@ -1477,16 +3184,19 @@ static void test_encode(int index, int generate, int debug) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - length = testUtilSetSymbol(symbol, BARCODE_HANXIN, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, data[i].data, -1, debug); + length = testUtilSetSymbol(symbol, BARCODE_HANXIN, data[i].input_mode, data[i].eci, + data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, + data[i].data, data[i].length, debug); ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { - printf(" /*%3d*/ { %s, %d, %d, %s, \"%s\", %s, %d, %d, \"%s\",\n", - i, testUtilInputModeName(data[i].input_mode), data[i].option_1, data[i].option_2, testUtilOption3Name(data[i].option_3), - testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), testUtilErrorName(data[i].ret), - symbol->rows, symbol->width, data[i].comment); + printf(" /*%3d*/ { %s, %d, %d, %d, %s, \"%s\", %d, %s, %d, %d, \"%s\",\n", + i, testUtilInputModeName(data[i].input_mode), data[i].eci, + data[i].option_1, data[i].option_2, testUtilOption3Name(data[i].option_3), + testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), data[i].length, + testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].comment); testUtilModulesPrint(symbol, " ", "\n"); printf(" },\n"); } else { @@ -1497,6 +3207,18 @@ static void test_encode(int index, int generate, int debug) { ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row); assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data); + + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { + int cmp_len, ret_len; + char modules_dump[49152]; + assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); + assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n", + i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped); + } } } @@ -1623,3 +3345,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et norl : */ diff --git a/backend/tests/test_maxicode.c b/backend/tests/test_maxicode.c index ef277ebd..7915d9aa 100644 --- a/backend/tests/test_maxicode.c +++ b/backend/tests/test_maxicode.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -937,11 +936,11 @@ static void test_encode(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[17984 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, data[i].primary, escaped, &ret_len); @@ -1186,3 +1185,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_medical.c b/backend/tests/test_medical.c index 36e56d72..c02d964f 100644 --- a/backend/tests/test_medical.c +++ b/backend/tests/test_medical.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2020 - 2021 Robin Stuart + Copyright (C) 2020-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -302,11 +301,11 @@ static void test_encode(int index, int generate, int debug) { assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[8192 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -337,3 +336,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_pdf417.c b/backend/tests/test_pdf417.c index c179f90d..91900f12 100644 --- a/backend/tests/test_pdf417.c +++ b/backend/tests/test_pdf417.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -1701,11 +1700,11 @@ static void test_encode(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[2710 * 8 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -2172,3 +2171,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_qr.c b/backend/tests/test_qr.c index a53a43c6..1b3a57ef 100644 --- a/backend/tests/test_qr.c +++ b/backend/tests/test_qr.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et norl : */ #include "testcommon.h" @@ -164,7 +163,7 @@ static void test_qr_input(int index, int generate, int debug) { /* 3*/ { UNICODE_MODE, 26, -1, "é", 0, 26, "71 A4 02 C3 A9 00 EC 11 EC", "ECI-26 B2 (UTF-8)" }, /* 4*/ { DATA_MODE, 0, -1, "é", 0, 0, "40 2C 3A 90 EC 11 EC 11 EC", "B2 (UTF-8)" }, /* 5*/ { DATA_MODE, 0, -1, "\351", 0, 0, "40 1E 90 EC 11 EC 11 EC 11", "B1 (ISO 8859-1)" }, - /* 6*/ { UNICODE_MODE, 0, -1, "β", 0, 0, "80 11 00 00 EC 11 EC 11 EC", "K1 (Shift JIS)" }, + /* 6*/ { UNICODE_MODE, 0, -1, "β", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 11 00 00 EC 11 EC 11 EC", "K1 (Shift JIS)" }, /* 7*/ { UNICODE_MODE, 9, -1, "β", 0, 9, "70 94 01 E2 00 EC 11 EC 11", "ECI-9 B1 (ISO 8859-7)" }, /* 8*/ { UNICODE_MODE, 20, -1, "β", 0, 20, "71 48 01 10 00 00 EC 11 EC", "ECI-20 K1 (Shift JIS)" }, /* 9*/ { UNICODE_MODE, 26, -1, "β", 0, 26, "71 A4 02 CE B2 00 EC 11 EC", "ECI-26 B2 (UTF-8)" }, @@ -174,7 +173,7 @@ static void test_qr_input(int index, int generate, int debug) { /* 13*/ { UNICODE_MODE, 20, -1, "ก", ZINT_ERROR_INVALID_DATA, -1, "Error 800: Invalid character in input data", "ก not in Shift JIS" }, /* 14*/ { UNICODE_MODE, 26, -1, "ก", 0, 26, "71 A4 03 E0 B8 81 00 EC 11", "ECI-26 B3 (UTF-8)" }, /* 15*/ { DATA_MODE, 0, -1, "ก", 0, 0, "40 3E 0B 88 10 EC 11 EC 11", "B3 (UTF-8)" }, - /* 16*/ { UNICODE_MODE, 0, -1, "Ж", 0, 0, "80 11 23 80 EC 11 EC 11 EC", "K1 (Shift JIS)" }, + /* 16*/ { UNICODE_MODE, 0, -1, "Ж", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 11 23 80 EC 11 EC 11 EC", "K1 (Shift JIS)" }, /* 17*/ { UNICODE_MODE, 7, -1, "Ж", 0, 7, "70 74 01 B6 00 EC 11 EC 11", "ECI-7 B1 (ISO 8859-5)" }, /* 18*/ { UNICODE_MODE, 20, -1, "Ж", 0, 20, "71 48 01 12 38 00 EC 11 EC", "ECI-20 K1 (Shift JIS)" }, /* 19*/ { UNICODE_MODE, 26, -1, "Ж", 0, 26, "71 A4 02 D0 96 00 EC 11 EC", "ECI-26 B2 (UTF-8)" }, @@ -192,7 +191,7 @@ static void test_qr_input(int index, int generate, int debug) { /* 31*/ { UNICODE_MODE, 20, -1, "¥", 0, 20, "71 44 01 5C 00 EC 11 EC 11", "ECI-20 B1 (Shift JIS) (to single-byte backslash codepoint 5C, so byte mode)" }, /* 32*/ { UNICODE_MODE, 26, -1, "¥", 0, 26, "71 A4 02 C2 A5 00 EC 11 EC", "ECI-26 B2 (UTF-8)" }, /* 33*/ { DATA_MODE, 0, -1, "¥", 0, 0, "40 2C 2A 50 EC 11 EC 11 EC", "B2 (UTF-8)" }, - /* 34*/ { UNICODE_MODE, 0, -1, "・", 0, 0, "40 1A 50 EC 11 EC 11 EC 11", "B1 (Shift JIS) single-byte codepoint A5 (same bytes as ¥ ISO 8859-1 above, so ambiguous)" }, + /* 34*/ { UNICODE_MODE, 0, -1, "・", ZINT_WARN_NONCOMPLIANT, 0, "Warning 40 1A 50 EC 11 EC 11 EC 11", "B1 (Shift JIS) single-byte codepoint A5 (same bytes as ¥ ISO 8859-1 above, so ambiguous)" }, /* 35*/ { UNICODE_MODE, 3, -1, "・", ZINT_ERROR_INVALID_DATA, -1, "Error 575: Invalid character in input data for ECI 3", "" }, /* 36*/ { UNICODE_MODE, 20, -1, "・", 0, 20, "71 44 01 A5 00 EC 11 EC 11", "ECI-20 B1 (Shift JIS) single-byte codepoint A5" }, /* 37*/ { UNICODE_MODE, 26, -1, "・", 0, 26, "71 A4 03 EF BD A5 00 EC 11", "ECI-26 B3 (UTF-8)" }, @@ -202,7 +201,7 @@ static void test_qr_input(int index, int generate, int debug) { /* 41*/ { UNICODE_MODE, 20, -1, "¿", ZINT_ERROR_INVALID_DATA, -1, "Error 800: Invalid character in input data", "¿ not in Shift JIS" }, /* 42*/ { UNICODE_MODE, 26, -1, "¿", 0, 26, "71 A4 02 C2 BF 00 EC 11 EC", "ECI-26 B2 (UTF-8)" }, /* 43*/ { DATA_MODE, 0, -1, "¿", 0, 0, "40 2C 2B F0 EC 11 EC 11 EC", "B2 (UTF-8)" }, - /* 44*/ { UNICODE_MODE, 0, -1, "ソ", 0, 0, "40 1B F0 EC 11 EC 11 EC 11", "B1 (Shift JIS) single-byte codepoint BF (same bytes as ¿ ISO 8859-1 above, so ambiguous)" }, + /* 44*/ { UNICODE_MODE, 0, -1, "ソ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 40 1B F0 EC 11 EC 11 EC 11", "B1 (Shift JIS) single-byte codepoint BF (same bytes as ¿ ISO 8859-1 above, so ambiguous)" }, /* 45*/ { UNICODE_MODE, 3, -1, "ソ", ZINT_ERROR_INVALID_DATA, -1, "Error 575: Invalid character in input data for ECI 3", "" }, /* 46*/ { UNICODE_MODE, 20, -1, "ソ", 0, 20, "71 44 01 BF 00 EC 11 EC 11", "ECI-20 B1 (Shift JIS) single-byte codepoint BF" }, /* 47*/ { UNICODE_MODE, 26, -1, "ソ", 0, 26, "71 A4 03 EF BD BF 00 EC 11", "ECI-26 B3 (UTF-8)" }, @@ -210,30 +209,30 @@ static void test_qr_input(int index, int generate, int debug) { /* 49*/ { UNICODE_MODE, 0, -1, "~", 0, 0, "40 17 E0 EC 11 EC 11 EC 11", "B1 (ASCII) (same bytes as ‾ Shift JIS below, so ambiguous)" }, /* 50*/ { UNICODE_MODE, 3, -1, "~", 0, 3, "70 34 01 7E 00 EC 11 EC 11", "ECI-3 B1 (ASCII)" }, /* 51*/ { UNICODE_MODE, 20, -1, "~", ZINT_ERROR_INVALID_DATA, -1, "Error 800: Invalid character in input data", "tilde not in Shift JIS (codepoint used for overline)" }, - /* 52*/ { UNICODE_MODE, 0, -1, "‾", 0, 0, "40 17 E0 EC 11 EC 11 EC 11", "B1 (Shift JIS) single-byte codepoint 7E (same bytes as ~ ASCII above, so ambiguous)" }, + /* 52*/ { UNICODE_MODE, 0, -1, "‾", ZINT_WARN_NONCOMPLIANT, 0, "Warning 40 17 E0 EC 11 EC 11 EC 11", "B1 (Shift JIS) single-byte codepoint 7E (same bytes as ~ ASCII above, so ambiguous)" }, /* 53*/ { UNICODE_MODE, 3, -1, "‾", ZINT_ERROR_INVALID_DATA, -1, "Error 575: Invalid character in input data for ECI 3", "" }, /* 54*/ { UNICODE_MODE, 20, -1, "‾", 0, 20, "71 44 01 7E 00 EC 11 EC 11", "ECI-20 B1 (Shift JIS) (to single-byte tilde codepoint 7E, so byte mode)" }, /* 55*/ { UNICODE_MODE, 26, -1, "‾", 0, 26, "71 A4 03 E2 80 BE 00 EC 11", "ECI-26 B3 (UTF-8)" }, /* 56*/ { DATA_MODE, 0, -1, "‾", 0, 0, "40 3E 28 0B E0 EC 11 EC 11", "B3 (UTF-8)" }, - /* 57*/ { UNICODE_MODE, 0, -1, "点", 0, 0, "80 16 CF 80 EC 11 EC 11 EC", "K1 (Shift JIS)" }, + /* 57*/ { UNICODE_MODE, 0, -1, "点", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 16 CF 80 EC 11 EC 11 EC", "K1 (Shift JIS)" }, /* 58*/ { UNICODE_MODE, 3, -1, "点", ZINT_ERROR_INVALID_DATA, -1, "Error 575: Invalid character in input data for ECI 3", "" }, /* 59*/ { UNICODE_MODE, 20, -1, "点", 0, 20, "71 48 01 6C F8 00 EC 11 EC", "ECI-20 K1 (Shift JIS)" }, /* 60*/ { UNICODE_MODE, 26, -1, "点", 0, 26, "71 A4 03 E7 82 B9 00 EC 11", "ECI-26 B3 (UTF-8)" }, /* 61*/ { DATA_MODE, 0, -1, "点", 0, 0, "40 3E 78 2B 90 EC 11 EC 11", "B3 (UTF-8)" }, /* 62*/ { DATA_MODE, 0, -1, "\223\137", 0, 0, "40 29 35 F0 EC 11 EC 11 EC", "B2 (Shift JIS) (not full multibyte)" }, /* 63*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "\223\137", 0, 0, "80 16 CF 80 EC 11 EC 11 EC", "K1 (Shift JIS)" }, - /* 64*/ { UNICODE_MODE, 0, -1, "¥・点", 0, 0, "40 45 CA 59 35 F0 EC 11 EC", "B4 (Shift JIS) (optimized to byte mode only)" }, + /* 64*/ { UNICODE_MODE, 0, -1, "¥・点", ZINT_WARN_NONCOMPLIANT, 0, "Warning 40 45 CA 59 35 F0 EC 11 EC", "B4 (Shift JIS) (optimized to byte mode only)" }, /* 65*/ { UNICODE_MODE, 3, -1, "¥・点", ZINT_ERROR_INVALID_DATA, -1, "Error 575: Invalid character in input data for ECI 3", "" }, /* 66*/ { UNICODE_MODE, 20, -1, "¥・点", 0, 20, "71 44 04 5C A5 93 5F 00 EC", "ECI-20 B4 (Shift JIS)" }, /* 67*/ { UNICODE_MODE, 26, -1, "¥・点", 0, 26, "71 A4 08 C2 A5 EF BD A5 E7 82 B9 00 EC", "ECI-26 B8 (UTF-8)" }, /* 68*/ { DATA_MODE, 0, -1, "\134\245\223\137", 0, 0, "40 45 CA 59 35 F0 EC 11 EC", "B8 (Shift JIS)" }, /* 69*/ { DATA_MODE, 0, -1, "¥・点", 0, 0, "40 8C 2A 5E FB DA 5E 78 2B 90 EC 11 EC", "B8 (UTF-8)" }, - /* 70*/ { UNICODE_MODE, 0, -1, "点茗", 0, 0, "80 26 CF EA A8 00 EC 11 EC", "K2 (Shift JIS)" }, - /* 71*/ { UNICODE_MODE, 0, -1, "点茗テ", 0, 0, "80 36 CF EA A8 34 A0 EC 11", "K3 (Shift JIS)" }, - /* 72*/ { UNICODE_MODE, 0, -1, "点茗テ点", 0, 0, "80 46 CF EA A8 34 AD 9F 00", "K4 (Shift JIS)" }, - /* 73*/ { UNICODE_MODE, 0, -1, "点茗テ点茗", 0, 0, "80 56 CF EA A8 34 AD 9F D5 50 00 EC 11", "K5 (Shift JIS)" }, - /* 74*/ { UNICODE_MODE, 0, -1, "点茗テ点茗テ", 0, 0, "80 66 CF EA A8 34 AD 9F D5 50 69 40 EC", "K6 (Shift JIS)" }, - /* 75*/ { UNICODE_MODE, 0, -1, "点茗テ点茗テソ", 0, 0, "80 66 CF EA A8 34 AD 9F D5 50 69 50 06 FC 00 EC", "K6 B1 (Shift JIS)" }, + /* 70*/ { UNICODE_MODE, 0, -1, "点茗", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 26 CF EA A8 00 EC 11 EC", "K2 (Shift JIS)" }, + /* 71*/ { UNICODE_MODE, 0, -1, "点茗テ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 36 CF EA A8 34 A0 EC 11", "K3 (Shift JIS)" }, + /* 72*/ { UNICODE_MODE, 0, -1, "点茗テ点", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 46 CF EA A8 34 AD 9F 00", "K4 (Shift JIS)" }, + /* 73*/ { UNICODE_MODE, 0, -1, "点茗テ点茗", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 56 CF EA A8 34 AD 9F D5 50 00 EC 11", "K5 (Shift JIS)" }, + /* 74*/ { UNICODE_MODE, 0, -1, "点茗テ点茗テ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 66 CF EA A8 34 AD 9F D5 50 69 40 EC", "K6 (Shift JIS)" }, + /* 75*/ { UNICODE_MODE, 0, -1, "点茗テ点茗テソ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 66 CF EA A8 34 AD 9F D5 50 69 50 06 FC 00 EC", "K6 B1 (Shift JIS)" }, /* 76*/ { DATA_MODE, 0, -1, "\223\137\344\252\203\145\223\137\344\252\203\145\277", 0, 0, "40 D9 35 FE 4A A8 36 59 35 FE 4A A8 36 5B F0 EC", "B13 (Shift JIS)" }, /* 77*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "\223\137\344\252\203\145\223\137\344\252\203\145\277", 0, 0, "80 66 CF EA A8 34 AD 9F D5 50 69 50 06 FC 00 EC", "K6 B1 (Shift JIS) (full multibyte)" }, /* 78*/ { DATA_MODE, 0, -1, "点茗テ点茗テソ", 0, 0, "41 5E 78 2B 9E 88 C9 7E 38 38 6E 78 2B 9E 88 C9 7E 38 38 6E FB DB F0 EC 11 EC 11 EC", "B21 (UTF-8)" }, @@ -256,11 +255,11 @@ static void test_qr_input(int index, int generate, int debug) { /* 95*/ { UNICODE_MODE, 6, -1, "ĸ", 0, 6, "70 64 01 A2 00 EC 11 EC 11", "ECI-6 B1 (ISO 8859-4)" }, /* 96*/ { UNICODE_MODE, 0, -1, "Ș", ZINT_WARN_USES_ECI, 18, "Warning 71 24 01 AA 00 EC 11 EC 11", "ECI-18 B1 (ISO 8859-16)" }, /* 97*/ { UNICODE_MODE, 18, -1, "Ș", 0, 18, "71 24 01 AA 00 EC 11 EC 11", "ECI-18 B1 (ISO 8859-16)" }, - /* 98*/ { UNICODE_MODE, 0, -1, "テ", 0, 0, "80 10 D2 80 EC 11 EC 11 EC", "K1 (SHIFT JIS)" }, + /* 98*/ { UNICODE_MODE, 0, -1, "テ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 10 D2 80 EC 11 EC 11 EC", "K1 (SHIFT JIS)" }, /* 99*/ { UNICODE_MODE, 20, -1, "テ", 0, 20, "71 48 01 0D 28 00 EC 11 EC", "ECI-20 K1 (SHIFT JIS)" }, /*100*/ { UNICODE_MODE, 20, -1, "テテ", 0, 20, "71 48 02 0D 28 69 40 EC 11", "ECI-20 K2 (SHIFT JIS)" }, /*101*/ { UNICODE_MODE, 20, -1, "\\\\", 0, 20, "71 48 02 00 F8 07 C0 EC 11", "ECI-20 K2 (SHIFT JIS)" }, - /*102*/ { UNICODE_MODE, 0, -1, "…", 0, 0, "80 10 11 80 EC 11 EC 11 EC", "K1 (SHIFT JIS)" }, + /*102*/ { UNICODE_MODE, 0, -1, "…", ZINT_WARN_NONCOMPLIANT, 0, "Warning 80 10 11 80 EC 11 EC 11 EC", "K1 (SHIFT JIS)" }, /*103*/ { UNICODE_MODE, 21, -1, "…", 0, 21, "71 54 01 85 00 EC 11 EC 11", "ECI-21 B1 (Win 1250)" }, /*104*/ { UNICODE_MODE, 0, -1, "Ґ", ZINT_WARN_USES_ECI, 22, "Warning 71 64 01 A5 00 EC 11 EC 11", "ECI-22 B1 (Win 1251)" }, /*105*/ { UNICODE_MODE, 22, -1, "Ґ", 0, 22, "71 64 01 A5 00 EC 11 EC 11", "ECI-22 B1 (Win 1251)" }, @@ -403,7 +402,7 @@ static void test_qr_optimize(int index, int generate, int debug) { /* 2*/ { UNICODE_MODE, -1, "0123456789", 0, "10 28 0C 56 6A 69 00 EC 11", " N10 (nayuki.io - pure numeric)" }, /* 3*/ { UNICODE_MODE, -1, "ABCDEF", 0, "20 31 CD 45 2A 14 00 EC 11", "A6 (nayuki.io - pure alphanumeric)" }, /* 4*/ { UNICODE_MODE, -1, "wxyz", 0, "40 47 77 87 97 A0 EC 11 EC", "B4 (nayuki.io - pure byte)" }, - /* 5*/ { UNICODE_MODE, 1, "「魔法少女まどか☆マギカ」って、 ИАИ desu κα?", 0, "(55) 81 D0 1A C0 09 F8 0A ED 56 B8 57 02 8E 12 90 2C 86 F4 31 A1 8A 01 B0 50 42 88 00 10", "K29 (nayuki.io - pure kanji)" }, + /* 5*/ { UNICODE_MODE, 1, "「魔法少女まどか☆マギカ」って、 ИАИ desu κα?", ZINT_WARN_NONCOMPLIANT, "Warning (55) 81 D0 1A C0 09 F8 0A ED 56 B8 57 02 8E 12 90 2C 86 F4 31 A1 8A 01 B0 50 42 88 00 10", "K29 (nayuki.io - pure kanji)" }, /* 6*/ { UNICODE_MODE, -1, "012345A", 0, "20 38 01 0B A2 E4 A0 EC 11", "A7 (nayuki.io - alpha/numeric)" }, /* 7*/ { UNICODE_MODE, -1, "0123456A", 0, "10 1C 0C 56 58 80 25 00 EC", "N7 A1 (nayuki.io - alpha/numeric) (note same bits as A8)" }, /* 8*/ { UNICODE_MODE, -1, "012a", 0, "40 43 03 13 26 10 EC 11 EC", "B4 (nayuki.io - numeric/byte)" }, @@ -411,23 +410,23 @@ static void test_qr_optimize(int index, int generate, int debug) { /* 10*/ { UNICODE_MODE, -1, "ABCDEa", 0, "40 64 14 24 34 44 56 10 EC", "B6 (nayuki.io - alphanumeric/byte)" }, /* 11*/ { UNICODE_MODE, -1, "ABCDEFa", 0, "20 31 CD 45 2A 15 00 58 40", "A6 B1 (nayuki.io - alphanumeric/byte)" }, /* 12*/ { UNICODE_MODE, 1, "THE SQUARE ROOT OF 2 IS 1.41421356237309504880168872420969807856967187537694807317667973799", 0, "(55) 20 D5 2A 53 54 1A A8 4C DC DF 14 29 EC 47 CA D9 9A 88 05 71 10 59 E3 56 32 5D 45 F0", " A26 N65 (nayuki.io - alpha/numeric)" }, - /* 13*/ { UNICODE_MODE, 1, "Golden ratio φ = 1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374......", 0, "(80) 41 44 76 F6 C6 46 56 E2 07 26 17 46 96 F2 08 3D 32 03 D2 03 12 E1 19 26 A0 87 DC BB", "B20 N100 A6 (nayuki.io - alpha/numeric/byte)" }, - /* 14*/ { UNICODE_MODE, 1, "こんにちwa、世界! αβγδ", 0, "(34) 41 B8 2B 18 2F 18 2C 98 2B F7 76 18 14 19 0A 28 A4 58 14 92 08 3B F8 3C 08 3C 18 3C", "B27 (nayuki.io - kanji/european **NOT SAME** K4 B2 K4 A1 K4, less bits as nayuki (1.5.0) miscounting byte-mode input as UTF-8)" }, - /* 15*/ { UNICODE_MODE, 1, "こんにちテwa、世界! αβγδ", 0, "(34) 80 50 98 85 C4 29 21 3F 0D 2A 09 BB B0 C0 A0 C8 51 45 22 C0 A4 90 41 DF C1 E0 41 E0", "K5 B19 (nayuki.io - kanji/european + extra leading kanji **NOT SAME** K5 B2 K4 A1 K4, same reason as above)" }, + /* 13*/ { UNICODE_MODE, 1, "Golden ratio φ = 1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374......", ZINT_WARN_NONCOMPLIANT, "Warning (80) 41 44 76 F6 C6 46 56 E2 07 26 17 46 96 F2 08 3D 32 03 D2 03 12 E1 19 26 A0 87 DC BB", "B20 N100 A6 (nayuki.io - alpha/numeric/byte)" }, + /* 14*/ { UNICODE_MODE, 1, "こんにちwa、世界! αβγδ", ZINT_WARN_NONCOMPLIANT, "Warning (34) 41 B8 2B 18 2F 18 2C 98 2B F7 76 18 14 19 0A 28 A4 58 14 92 08 3B F8 3C 08 3C 18 3C", "B27 (nayuki.io - kanji/european **NOT SAME** K4 B2 K4 A1 K4, less bits as nayuki (1.5.0) miscounting byte-mode input as UTF-8)" }, + /* 15*/ { UNICODE_MODE, 1, "こんにちテwa、世界! αβγδ", ZINT_WARN_NONCOMPLIANT, "Warning (34) 80 50 98 85 C4 29 21 3F 0D 2A 09 BB B0 C0 A0 C8 51 45 22 C0 A4 90 41 DF C1 E0 41 E0", "K5 B19 (nayuki.io - kanji/european + extra leading kanji **NOT SAME** K5 B2 K4 A1 K4, same reason as above)" }, /* 16*/ { UNICODE_MODE, 1, "67128177921547861663com.acme35584af52fa3-88d0-093b-6c14-b37ddafb59c528908608sg.com.dash.www0530329356521790265903SG.COM.NETS46968696003522G33250183309051017567088693441243693268766948304B2AE13344004SG.SGQR209710339366720B439682.63667470805057501195235502733744600368027857918629797829126902859SG8236HELLO FOO2517Singapore3272B815", 0, "(232) 10 52 9F 46 70 B3 5D DE 9A 1F A1 7B 1B 7B 69 73 0B 1B 6B 29 99 A9 A9 C1 A3 0B 31 A9", "N20 B47 N9 B15 N22 A11 N14 A1 N47 A19 N15 A8 N65 A20 B8 A8 (nayuki.io - SGQR alpha/numeric/byte)" }, /* 17*/ { UNICODE_MODE, -1, "纪", ZINT_WARN_USES_ECI, "Warning 71 A4 03 E7 BA AA 00 EC 11", "ECI-26 B3 (UTF-8 E7BAAA, U+7EAA, not in Shift JIS)" }, /* 18*/ { DATA_MODE, -1, "纪", 0, "40 3E 7B AA A0 EC 11 EC 11", "B3 (UTF-8 or Shift JIS, note ambiguous as 0xE7BA 0xAA happens to be valid Shift JIS 郤ェ as well)" }, - /* 19*/ { UNICODE_MODE, -1, "郤ェ", 0, "40 3E 7B AA A0 EC 11 EC 11", "B3 (Shift JIS or UTF-8 E7BAAA 纪, see above)" }, + /* 19*/ { UNICODE_MODE, -1, "郤ェ", ZINT_WARN_NONCOMPLIANT, "Warning 40 3E 7B AA A0 EC 11 EC 11", "B3 (Shift JIS or UTF-8 E7BAAA 纪, see above)" }, /* 20*/ { UNICODE_MODE, 1, "2004年大西洋颶風季是有纪录以来造成人员伤亡和财产损失最为惨重的大西洋飓风季之一,于2004年6月1日正式开始,同年11月30日结束,传统上这样的日期界定了一年中绝大多数热带气旋在大西洋形成的时间段lll ku", ZINT_WARN_USES_ECI, "Warning (324) 71 A1 00 43 21 10 04 4B 96 E6 D3 96 92 9F A2 96 FF 9A D2 2F A6 8A DB A6 8A A3 96 B6", "ECI-26 N4 B274 (nayuki.io - kanji/byte/numeric **NOT SAME* N4 K9 B6 K5 etc mixing Shift JIS and UTF-8)" }, /* 21*/ { UNICODE_MODE, -1, "AB123456A", 0, "20 49 CD 05 E2 2C 73 94 00", "A9" }, /* 22*/ { UNICODE_MODE, -1, "AB1234567890A", 0, "20 69 CD 05 E2 2C 73 94 33 2A 50 00 EC", "A13" }, /* 23*/ { UNICODE_MODE, -1, "AB123456789012A", 0, "20 79 CD 05 E2 2C 73 94 33 2A 0B CA 00", "A15" }, /* 24*/ { UNICODE_MODE, -1, "AB1234567890123A", 0, "20 11 CD 10 34 7B 72 31 50 30 C8 02 50", "A2 N13 A1" }, - /* 25*/ { UNICODE_MODE, -1, "テaABCD1", 0, "40 88 36 56 14 14 24 34 43 10 EC 11 EC", "B8" }, - /* 26*/ { UNICODE_MODE, -1, "テaABCDE1", 0, "40 38 36 56 12 03 1C D4 52 9D C0 EC 11", "B3 A6" }, + /* 25*/ { UNICODE_MODE, -1, "テaABCD1", ZINT_WARN_NONCOMPLIANT, "Warning 40 88 36 56 14 14 24 34 43 10 EC 11 EC", "B8" }, + /* 26*/ { UNICODE_MODE, -1, "テaABCDE1", ZINT_WARN_NONCOMPLIANT, "Warning 40 38 36 56 12 03 1C D4 52 9D C0 EC 11", "B3 A6" }, /* 27*/ { UNICODE_MODE, -1, "テéaABCDE1", ZINT_WARN_USES_ECI, "Warning 71 A4 06 E3 83 86 C3 A9 61 20 31 CD 45 29 DC 00", "B6 A6" }, - /* 28*/ { UNICODE_MODE, -1, "貫やぐ識禁ぱい再2間変字全ノレ没無8裁", 0, "(44) 80 83 A8 85 88 25 CA 2F 40 B0 53 C2 44 98 41 00 4A 02 0E A8 F8 F5 0D 30 4C 35 A1 CC", "K8 N1 K8 B3" }, - /* 29*/ { UNICODE_MODE, -1, "貫やぐ識禁ぱい再2間変字全ノレ没無8裁花ほゃ過法ひなご札17能つーびれ投覧マ勝動エヨ額界よみ作皇ナヲニ打題ヌルヲ掲布益フが。入35能ト権話しこを断兆モヘ細情おじ名4減エヘイハ側機はょが意見想ハ業独案ユヲウ患職ヲ平美さ毎放どぽたけ家没べお化富べ町大シ情魚ッでれ一冬すぼめり。社ト可化モマ試音ばじご育青康演ぴぎ権型固スで能麩ぜらもほ河都しちほラ収90作の年要とだむ部動ま者断チ第41一1米索焦茂げむしれ。測フ物使だて目月国スリカハ夏検にいへ児72告物ゆは載核ロアメヱ登輸どべゃ催行アフエハ議歌ワ河倫剖だ。記タケウ因載ヒイホヤ禁3輩彦関トえび肝区勝ワリロ成禁ぼよ界白ウヒキレ中島べせぜい各安うしぽリ覧生テ基一でむしゃ中新トヒキソ声碁スしび起田ア信大未ゅもばち。", 0, "(589) 80 20 EA 21 62 09 72 8B D0 2C 14 F0 91 26 10 40 04 A0 08 3A A3 E3 D4 34 C1 30 D6 87", "K8 N1 K8 N1 K10 N2 K33 N2 K16 N1 K89 N2 K14 B5 K28 N2 K40 N1 K65" }, + /* 28*/ { UNICODE_MODE, -1, "貫やぐ識禁ぱい再2間変字全ノレ没無8裁", ZINT_WARN_NONCOMPLIANT, "Warning (44) 80 83 A8 85 88 25 CA 2F 40 B0 53 C2 44 98 41 00 4A 02 0E A8 F8 F5 0D 30 4C 35 A1 CC", "K8 N1 K8 B3" }, + /* 29*/ { UNICODE_MODE, -1, "貫やぐ識禁ぱい再2間変字全ノレ没無8裁花ほゃ過法ひなご札17能つーびれ投覧マ勝動エヨ額界よみ作皇ナヲニ打題ヌルヲ掲布益フが。入35能ト権話しこを断兆モヘ細情おじ名4減エヘイハ側機はょが意見想ハ業独案ユヲウ患職ヲ平美さ毎放どぽたけ家没べお化富べ町大シ情魚ッでれ一冬すぼめり。社ト可化モマ試音ばじご育青康演ぴぎ権型固スで能麩ぜらもほ河都しちほラ収90作の年要とだむ部動ま者断チ第41一1米索焦茂げむしれ。測フ物使だて目月国スリカハ夏検にいへ児72告物ゆは載核ロアメヱ登輸どべゃ催行アフエハ議歌ワ河倫剖だ。記タケウ因載ヒイホヤ禁3輩彦関トえび肝区勝ワリロ成禁ぼよ界白ウヒキレ中島べせぜい各安うしぽリ覧生テ基一でむしゃ中新トヒキソ声碁スしび起田ア信大未ゅもばち。", ZINT_WARN_NONCOMPLIANT, "Warning (589) 80 20 EA 21 62 09 72 8B D0 2C 14 F0 91 26 10 40 04 A0 08 3A A3 E3 D4 34 C1 30 D6 87", "K8 N1 K8 N1 K10 N2 K33 N2 K16 N1 K89 N2 K14 B5 K28 N2 K40 N1 K65" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -471,11 +470,13 @@ static void test_qr_encode(int index, int generate, int debug) { struct item { int symbology; int input_mode; + int eci; int option_1; int option_2; int option_3; struct zint_structapp structapp; char *data; + int length; int ret; int expected_rows; @@ -486,7 +487,7 @@ static void test_qr_encode(int index, int generate, int debug) { }; // や U+3084 kanji, in Shift JIS 0x82E2 (\202\342), UTF-8 E38284; its 2nd byte 0xE2 + 0x40-FC also form Shift JIS struct item data[] = { - /* 0*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, "QR Code Symbol", 0, 21, 21, 0, "ISO 18004 Figure 1 **NOT SAME** uses mask 110 instead of 101; BWIPP uses 101", + /* 0*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1, -1, -1, { 0, 0, "" }, "QR Code Symbol", -1, 0, 21, 21, 0, "ISO 18004 Figure 1 **NOT SAME** uses mask 110 instead of 101; BWIPP uses 101", "111111101001101111111" "100000101001101000001" "101110101100101011101" @@ -509,7 +510,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100001101111111" "111111101001011000000" }, - /* 1*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1, 6 << 8, { 0, 0, "" }, "QR Code Symbol", 0, 21, 21, 1, "ISO 18004 Figure 1, explicit mask 101, same", + /* 1*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1, -1, 6 << 8, { 0, 0, "" }, "QR Code Symbol", -1, 0, 21, 21, 1, "ISO 18004 Figure 1, explicit mask 101, same", "111111100001101111111" "100000101001101000001" "101110101110101011101" @@ -532,7 +533,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100001110111100" "111111101011001010010" }, - /* 2*/ { BARCODE_QRCODE, UNICODE_MODE, 2, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0, 33, 33, 1, "ISO 18004 Figure 29 (top), same (mask 100)", + /* 2*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", -1, 0, 33, 33, 1, "ISO 18004 Figure 29 (top), same (mask 100)", "111111101100110010010010101111111" "100000100010111010111000101000001" "101110100000001101101100001011101" @@ -567,7 +568,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100010110111000110101001001" "111111101101101011010000111100011" }, - /* 3*/ { BARCODE_QRCODE, UNICODE_MODE, 2, -1, -1, { 1, 4, "1" }, "ABCDEFGHIJKLMN", 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 1st), same", + /* 3*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, -1, -1, { 1, 4, "1" }, "ABCDEFGHIJKLMN", -1, 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 1st), same", "111111100110001111111" "100000101001101000001" "101110100010001011101" @@ -590,7 +591,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100101110000001" "111111101000110110101" }, - /* 4*/ { BARCODE_QRCODE, UNICODE_MODE, 2, -1, 8 << 8, { 2, 4, "1" }, "OPQRSTUVWXYZ0123", 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 2nd), same with explicit mask 111 (auto 011)", + /* 4*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, -1, 8 << 8, { 2, 4, "1" }, "OPQRSTUVWXYZ0123", -1, 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 2nd), same with explicit mask 111 (auto 011)", "111111100011101111111" "100000100001101000001" "101110100001101011101" @@ -613,7 +614,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100111100011111" "111111101011011110100" }, - /* 5*/ { BARCODE_QRCODE, UNICODE_MODE, 2, -1, -1, { 3, 4, "1" }, "456789ABCDEFGHIJ", 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 3rd), same", + /* 5*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, -1, -1, { 3, 4, "1" }, "456789ABCDEFGHIJ", -1, 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 3rd), same", "111111100101001111111" "100000100011101000001" "101110100010101011101" @@ -636,7 +637,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100011100101011" "111111101011000011000" }, - /* 6*/ { BARCODE_QRCODE, UNICODE_MODE, 2, -1, -1, { 4, 4, "1" }, "KLMNOPQRSTUVWXYZ", 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 4th), same", + /* 6*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, -1, -1, { 4, 4, "1" }, "KLMNOPQRSTUVWXYZ", -1, 0, 21, 21, 1, "ISO 18004 Figure 29 (bottom 4th), same", "111111101011101111111" "100000101010101000001" "101110100011001011101" @@ -659,7 +660,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100010110010010" "111111101110110101110" }, - /* 7*/ { BARCODE_QRCODE, UNICODE_MODE, 2, 1, -1, { 0, 0, "" }, "01234567", 0, 21, 21, 0, "ISO 18004 Annex I I.2, same (mask 010); BWIPP uses mask 000", + /* 7*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, 1, -1, { 0, 0, "" }, "01234567", -1, 0, 21, 21, 0, "ISO 18004 Annex I I.2, same (mask 010); BWIPP uses mask 000", "111111100101101111111" "100000100111101000001" "101110101000001011101" @@ -682,7 +683,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100000000110110" "111111101111010010100" }, - /* 8*/ { BARCODE_QRCODE, UNICODE_MODE, 2, 1, 1 << 8, { 0, 0, "" }, "01234567", 0, 21, 21, 1, "ISO 18004 Annex I Figure I.2, explicit mask 000, same as BWIPP", + /* 8*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, 1, 1 << 8, { 0, 0, "" }, "01234567", -1, 0, 21, 21, 1, "ISO 18004 Annex I Figure I.2, explicit mask 000, same as BWIPP", "111111100011101111111" "100000101110001000001" "101110100110001011101" @@ -705,7 +706,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100001110111000" "111111101001011100101" }, - /* 9*/ { BARCODE_QRCODE, GS1_MODE, 1, -1, -1, { 0, 0, "" }, "[01]09501101530003[8200]http://example.com", 0, 25, 25, 0, "GS1 General Specifications 21.0.1 Figure 5.1-7 **NOT SAME** figure uses Byte encodation only; BWIPP uses mask 001", + /* 9*/ { BARCODE_QRCODE, GS1_MODE, -1, 1, -1, -1, { 0, 0, "" }, "[01]09501101530003[8200]http://example.com", -1, 0, 25, 25, 0, "GS1 General Specifications 21.0.1 Figure 5.1-7 **NOT SAME** figure uses Byte encodation only; BWIPP uses mask 001", "1111111001101101001111111" "1000001010010101001000001" "1011101011111010101011101" @@ -732,7 +733,7 @@ static void test_qr_encode(int index, int generate, int debug) { "1000001010110101100111010" "1111111011101100010010111" }, - /* 10*/ { BARCODE_QRCODE, GS1_MODE, 1, -1, 2 << 8, { 0, 0, "" }, "[01]09501101530003[8200]http://example.com", 0, 25, 25, 1, "GS1 General Specifications 21.0.1 Figure 5.1-7, explicit mask 001, same as BWIPP", + /* 10*/ { BARCODE_QRCODE, GS1_MODE, -1, 1, -1, 2 << 8, { 0, 0, "" }, "[01]09501101530003[8200]http://example.com", -1, 0, 25, 25, 1, "GS1 General Specifications 21.0.1 Figure 5.1-7, explicit mask 001, same as BWIPP", "1111111010111000001111111" "1000001011100100101000001" "1011101000111101101011101" @@ -759,7 +760,7 @@ static void test_qr_encode(int index, int generate, int debug) { "1000001011110010100000010" "1111111010111001000111101" }, - /* 11*/ { BARCODE_QRCODE, GS1_MODE, 2, -1, -1, { 0, 0, "" }, "[01]00857674002010[8200]http://www.gs1.org/", 0, 29, 29, 0, "GS1 General Specifications 21.0.1 Figure 5.7.3-1, same (mask 011); BWIPP uses mask 101", + /* 11*/ { BARCODE_QRCODE, GS1_MODE, -1, 2, -1, -1, { 0, 0, "" }, "[01]00857674002010[8200]http://www.gs1.org/", -1, 0, 29, 29, 0, "GS1 General Specifications 21.0.1 Figure 5.7.3-1, same (mask 011); BWIPP uses mask 101", "11111110100101110101001111111" "10000010111101001000001000001" "10111010010000001110001011101" @@ -790,7 +791,7 @@ static void test_qr_encode(int index, int generate, int debug) { "10000010010111010001110010100" "11111110101111111011110100110" }, - /* 12*/ { BARCODE_QRCODE, GS1_MODE, 2, -1, 6 << 8, { 0, 0, "" }, "[01]00857674002010[8200]http://www.gs1.org/", 0, 29, 29, 1, "GS1 General Specifications 21.0.1 Figure 5.7.3-1, explicit mask 101, same as BWIPP", + /* 12*/ { BARCODE_QRCODE, GS1_MODE, -1, 2, -1, 6 << 8, { 0, 0, "" }, "[01]00857674002010[8200]http://www.gs1.org/", -1, 0, 29, 29, 1, "GS1 General Specifications 21.0.1 Figure 5.7.3-1, explicit mask 101, same as BWIPP", "11111110001000011000101111111" "10000010111011101110101000001" "10111010101011010101001011101" @@ -821,7 +822,7 @@ static void test_qr_encode(int index, int generate, int debug) { "10000010001111101001001010011" "11111110111001001101000010000" }, - /* 13*/ { BARCODE_HIBC_QR, -1, 2, -1, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 21, 21, 1, "ANSI/HIBC 2.6 - 2016 Figure C5 same (mask 001)", + /* 13*/ { BARCODE_HIBC_QR, -1, 0, 2, -1, -1, { 0, 0, "" }, "H123ABC01234567890", -1, 0, 21, 21, 1, "ANSI/HIBC 2.6 - 2016 Figure C5 same (mask 001)", "111111101010001111111" "100000100100101000001" "101110101011001011101" @@ -844,7 +845,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100100101111001" "111111101111011001111" }, - /* 14*/ { BARCODE_HIBC_QR, -1, 2, -1, -1, { 0, 0, "" }, "/EU720060FF0/O523201", 0, 25, 25, 0, "HIBC/PAS Section 2.2 2nd Purchase Order **NOT SAME** uses mask 100 instead of 011; BWIPP uses mask 011", + /* 14*/ { BARCODE_HIBC_QR, -1, 0, 2, -1, -1, { 0, 0, "" }, "/EU720060FF0/O523201", -1, 0, 25, 25, 0, "HIBC/PAS Section 2.2 2nd Purchase Order **NOT SAME** uses mask 100 instead of 011; BWIPP uses mask 011", "1111111011011110101111111" "1000001001001111001000001" "1011101001010010001011101" @@ -871,7 +872,7 @@ static void test_qr_encode(int index, int generate, int debug) { "1000001000010100100011111" "1111111010101101111000001" }, - /* 15*/ { BARCODE_HIBC_QR, -1, 2, -1, 4 << 8, { 0, 0, "" }, "/EU720060FF0/O523201", 0, 25, 25, 1, "HIBC/PAS Section 2.2 2nd Purchase Order same, explicit mask 011", + /* 15*/ { BARCODE_HIBC_QR, -1, 0, 2, -1, 4 << 8, { 0, 0, "" }, "/EU720060FF0/O523201", -1, 0, 25, 25, 1, "HIBC/PAS Section 2.2 2nd Purchase Order same, explicit mask 011", "1111111010011001101111111" "1000001011010011001000001" "1011101000000111001011101" @@ -898,7 +899,7 @@ static void test_qr_encode(int index, int generate, int debug) { "1000001001000001110110101" "1111111011101010111111001" }, - /* 16*/ { BARCODE_HIBC_QR, -1, 2, -1, -1, { 0, 0, "" }, "/KN12345", 0, 21, 21, 1, "HIBC/PAS Section 2.2 Asset Tag **NOT SAME** uses mask 000 instead of 100", + /* 16*/ { BARCODE_HIBC_QR, -1, 0, 2, -1, -1, { 0, 0, "" }, "/KN12345", -1, 0, 21, 21, 1, "HIBC/PAS Section 2.2 Asset Tag **NOT SAME** uses mask 000 instead of 100", "111111100000101111111" "100000101010101000001" "101110100011001011101" @@ -921,7 +922,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100100001100111" "111111101000101110101" }, - /* 17*/ { BARCODE_HIBC_QR, -1, 2, -1, 5 << 8, { 0, 0, "" }, "/KN12345", 0, 21, 21, 1, "HIBC/PAS Section 2.2 Asset Tag, same, explicit mask 100", + /* 17*/ { BARCODE_HIBC_QR, -1, 0, 2, -1, 5 << 8, { 0, 0, "" }, "/KN12345", -1, 0, 21, 21, 1, "HIBC/PAS Section 2.2 Asset Tag, same, explicit mask 100", "111111101010101111111" "100000100111001000001" "101110100110101011101" @@ -944,7 +945,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100110011110101" "111111101010111100111" }, - /* 18*/ { BARCODE_QRCODE, UNICODE_MODE, 1, -1, -1, { 0, 0, "" }, "12345678901234567890123456789012345678901", 0, 21, 21, 1, "Max capacity ECC 1 Version 1 41 numbers", + /* 18*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 1, -1, -1, { 0, 0, "" }, "12345678901234567890123456789012345678901", -1, 0, 21, 21, 1, "Max capacity ECC 1 Version 1 41 numbers", "111111101001001111111" "100000101100101000001" "101110101011101011101" @@ -967,7 +968,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000101000101001010" "111111101010110000111" }, - /* 19*/ { BARCODE_QRCODE, UNICODE_MODE, 2, -1, -1, { 0, 0, "" }, "12345678901234567890123456789012345678901", 0, 25, 25, 1, "ECC 2 auto-sets version 2", + /* 19*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, -1, -1, { 0, 0, "" }, "12345678901234567890123456789012345678901", -1, 0, 25, 25, 1, "ECC 2 auto-sets version 2", "1111111011001110101111111" "1000001001000000001000001" "1011101011001111101011101" @@ -994,7 +995,7 @@ static void test_qr_encode(int index, int generate, int debug) { "1000001000000100111010110" "1111111010011100001100111" }, - /* 20*/ { BARCODE_QRCODE, UNICODE_MODE, 4, 10, -1, { 0, 0, "" }, "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点", 0, 57, 57, 1, "Max capacity ECC 4 Version 10 74 kanji", + /* 20*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 4, 10, -1, { 0, 0, "" }, "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点", -1, ZINT_WARN_NONCOMPLIANT, 57, 57, 1, "Max capacity ECC 4 Version 10 74 kanji", "111111100111100000011001000011111100010010011011001111111" "100000100011100101110000101000101001101111000001001000001" "101110101001011100010001111110111100101001100011001011101" @@ -1053,7 +1054,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100110011101110011001101110110101010001101000011011" "111111100010001101010110001001000001001011001001011001011" }, - /* 21*/ { BARCODE_QRCODE, UNICODE_MODE, 4, 27, -1, { 0, 0, "" }, "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点", 0, 125, 125, 1, "Max capacity ECC 4 Version 27 385 kanji", + /* 21*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 4, 27, -1, { 0, 0, "" }, "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点", -1, ZINT_WARN_NONCOMPLIANT, 125, 125, 1, "Max capacity ECC 4 Version 27 385 kanji", "11111110101001001100111100100011110001010011110000001100010110100011101010111000011101101001011111001111101101101001101111111" "10000010110001101110011001101111000101001011011001100110101000101010011110000000101000100101101110110000011110100110001000001" "10111010100000000100000101000101111001011001010100100100100000000101100011010001100111101010010101101101101101101101001011101" @@ -1180,7 +1181,7 @@ static void test_qr_encode(int index, int generate, int debug) { "10000010010111001111010001100001010001010110110001100000111101011100000010010111101001001100101101111011011001000001101001110" "11111110000000010001110110000001010111011111000000111111010101110100101000110111000101101011001100000101101101101001100111111" }, - /* 22*/ { BARCODE_QRCODE, UNICODE_MODE, 4, 40, -1, { 0, 0, "" }, "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点" "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点", 0, 177, 177, 1, "Max capacity ECC 4 Version 40 784 kanji", + /* 22*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 4, 40, -1, { 0, 0, "" }, "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点" "点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点", -1, ZINT_WARN_NONCOMPLIANT, 177, 177, 1, "Max capacity ECC 4 Version 40 784 kanji", "111111101010001111111101101110111010110111001110101000010001011011011101001110110011111011010000010101001010011110010000010110111111001001011111101000010010111111001010001111111" "100000101010110001001000101111011001001100100110110000000111110101111011110001101110000111000100101111010011001111100111111001001011011011110011011111111001000010010010101000001" "101110101001001101111001110010010100000000111001001011111000001001111111101010000111011010011010010001111010111001100011000011110100101110001010110001011110011011011010001011101" @@ -1359,7 +1360,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100000010000101110000100011000011110011100010100000011111110010100001100010010001001110010000000110010100111101101010110111111001000101010011011011000011110111110000000000" "111111100000001110110110101010011010010100111111101001111101110111010110101111000111011001110100010111000100111000011011001011010011010011010101111010000011100001000011111011001" }, - /* 23*/ { BARCODE_QRCODE, UNICODE_MODE, 4, -1, ZINT_FULL_MULTIBYTE, { 0, 0, "" }, "áA", 0, 21, 21, 1, "Mask automatic (001)", + /* 23*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 4, -1, ZINT_FULL_MULTIBYTE, { 0, 0, "" }, "áA", -1, 0, 21, 21, 1, "Mask automatic (001)", "111111100101101111111" "100000101001101000001" "101110101010101011101" @@ -1382,7 +1383,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100100111010000" "111111100011001000110" }, - /* 24*/ { BARCODE_QRCODE, UNICODE_MODE, 4, -1, ZINT_FULL_MULTIBYTE | (8 << 8), { 0, 0, "" }, "áA", 0, 21, 21, 1, "Mask 111", + /* 24*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 4, -1, ZINT_FULL_MULTIBYTE | (8 << 8), { 0, 0, "" }, "áA", -1, 0, 21, 21, 1, "Mask 111", "111111101000101111111" "100000101110101000001" "101110100110101011101" @@ -1405,7 +1406,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100011111101000" "111111100111010100101" }, - /* 25*/ { BARCODE_QRCODE, UNICODE_MODE, 4, -1, ZINT_FULL_MULTIBYTE | (9 << 8), { 0, 0, "" }, "áA", 0, 21, 21, 1, "Mask > 111 ignored", + /* 25*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 4, -1, ZINT_FULL_MULTIBYTE | (9 << 8), { 0, 0, "" }, "áA", -1, 0, 21, 21, 1, "Mask > 111 ignored", "111111100101101111111" "100000101001101000001" "101110101010101011101" @@ -1428,7 +1429,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100100111010000" "111111100011001000110" }, - /* 26*/ { BARCODE_QRCODE, UNICODE_MODE, 2, 1, -1, { 0, 0, "" }, "1234567890", 0, 21, 21, 0, "test_print example, automatic mask 001 (same score as mask 010); BWIPP uses mask 010", + /* 26*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, 1, -1, { 0, 0, "" }, "1234567890", -1, 0, 21, 21, 0, "test_print example, automatic mask 001 (same score as mask 010); BWIPP uses mask 010", "111111101001101111111" "100000100100101000001" "101110101001001011101" @@ -1451,7 +1452,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100001011000010" "111111101011111111111" }, - /* 27*/ { BARCODE_QRCODE, UNICODE_MODE, 2, 1, 3 << 8, { 0, 0, "" }, "1234567890", 0, 21, 21, 1, "test_print example, explicit mask 010", + /* 27*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 2, 1, 3 << 8, { 0, 0, "" }, "1234567890", -1, 0, 21, 21, 1, "test_print example, explicit mask 010", "111111100010101111111" "100000100000001000001" "101110101010001011101" @@ -1474,7 +1475,7 @@ static void test_qr_encode(int index, int generate, int debug) { "100000100101111100110" "111111101000100100100" }, - /* 28*/ { BARCODE_QRCODE, UNICODE_MODE, 1, 2, 2 << 8, { 0, 0, "" }, "?ややややwやややや ややややや", 0, 25, 25, 1, "Data with Shift JIS '2nd byte 1st byte' matches; explicit mask 001 (auto 000) to match BWIPP", + /* 28*/ { BARCODE_QRCODE, UNICODE_MODE, -1, 1, 2, 2 << 8, { 0, 0, "" }, "?ややややwやややや ややややや", -1, ZINT_WARN_NONCOMPLIANT, 25, 25, 1, "Data with Shift JIS '2nd byte 1st byte' matches; explicit mask 001 (auto 000) to match BWIPP", "1111111010111110001111111" "1000001011100101001000001" "1011101000111110101011101" @@ -1501,6 +1502,1523 @@ static void test_qr_encode(int index, int generate, int debug) { "1000001010100110000011100" "1111111011001111010111001" }, + /* 29*/ { BARCODE_QRCODE, UNICODE_MODE, 3, 2, -1, -1, { 0, 0, "" }, "sn:7QPB4MN", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 3 Example 1 **NOT SAME** different encodation; BWIPP same encodation as example but uses mask 001 instead of 011", + "111111101111101111111" + "100000101000101000001" + "101110100011001011101" + "101110101001001011101" + "101110100001001011101" + "100000100011101000001" + "111111101010101111111" + "000000001001100000000" + "101101110101101001011" + "101110000011110001101" + "000000110101000100101" + "010111000001000110010" + "001011110000111111000" + "000000001101010110001" + "111111101001110010100" + "100000101000011101011" + "101110100010111111101" + "101110101000001100010" + "101110101000111000000" + "100000100011000001010" + "111111101010111110000" + }, + /* 30*/ { BARCODE_QRCODE, UNICODE_MODE, 3, 2, -1, -1, { 0, 0, "" }, "price:£20.00", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 3 Example 2", + "111111101111101111111" + "100000101101001000001" + "101110100001101011101" + "101110101100101011101" + "101110100101001011101" + "100000100000001000001" + "111111101010101111111" + "000000001101000000000" + "101101110000001001011" + "000010001100101111100" + "101011110111000010110" + "101000010101110100010" + "010100101010111100100" + "000000001101001100001" + "111111101010001111100" + "100000101101000110111" + "101110100001000101101" + "101110101000110101010" + "101110101011011100000" + "100000100101101011110" + "111111101100010111000" + }, + /* 31*/ { BARCODE_QRCODE, UNICODE_MODE, 3, 1, -1, -1, { 0, 0, "" }, "C:\\DOCS\\EXAMPLE.TXT", -1, 0, 25, 25, 0, "AIM ITS/04-023:2022 ECI 3 Example 3 **NOT SAME** different encodation; BWIPP same encodation as Zint but uses mask 000 instead of 100", + "1111111011101001001111111" + "1000001011100010101000001" + "1011101010110001001011101" + "1011101011010111101011101" + "1011101000000100001011101" + "1000001010011100101000001" + "1111111010101010101111111" + "0000000001001001000000000" + "1100111000010110100101111" + "1001100001101010001000010" + "0010111100011110110100010" + "1111000100110100011101010" + "1110111100101101101000111" + "1000000010000110001111001" + "0001011110100001000100111" + "0011010001101011100100010" + "1110001111110110111110001" + "0000000010101001100011001" + "1111111000111110101011100" + "1000001010010101100010101" + "1011101011001101111110001" + "1011101001000111100001001" + "1011101001100001111001110" + "1000001011001010011000001" + "1111111011010111011011111" + }, + /* 32*/ { BARCODE_QRCODE, UNICODE_MODE, 4, 1, -1, -1, { 0, 0, "" }, "Študentska št. 2198390", -1, 0, 25, 25, 0, "AIM ITS/04-023:2022 ECI 4 Example 1 **NOT SAME** different encodation; BWIPP same encodation as Zint but uses mask 011 instead of 100", + "1111111010000110001111111" + "1000001010011110101000001" + "1011101011001111101011101" + "1011101011101011101011101" + "1011101001101010001011101" + "1000001011100100001000001" + "1111111010101010101111111" + "0000000000110110100000000" + "1100111000101010000101111" + "1111100110000001110111011" + "1110111101100010100110011" + "0000000111001010111100111" + "1010101010010110000110000" + "1110110000101000110011010" + "0010001010011011000110001" + "0001100010110000011100110" + "1110011100101110111111001" + "0000000011000111100011001" + "1111111000100001101011000" + "1000001011001001100010110" + "1011101010010111111110011" + "1011101000101011101101001" + "1011101001111111000111010" + "1000001011110101110010101" + "1111111010101100000011011" + }, + /* 33*/ { BARCODE_QRCODE, UNICODE_MODE, 4, 1, -1, -1, { 0, 0, "" }, "Szczegółowe dane kontaktowe:+48 22 694 60 00", -1, 0, 29, 29, 0, "AIM ITS/04-023:2022 ECI 4 Example 2 **NOT SAME** different encodation; BWIPP same encodation as example but uses mask 100 instead of 111", + "11111110000111011111001111111" + "10000010011001101100101000001" + "10111010000010110011101011101" + "10111010100010100010101011101" + "10111010110001101001101011101" + "10000010000111011101001000001" + "11111110101010101010101111111" + "00000000001100110111100000000" + "11000111010100010110100011000" + "11100000010010101001011111100" + "10010111001000101101010000111" + "11001101110010001001101110011" + "10000110010110110101011000001" + "01101101110001100011000111011" + "11001111001111001101000101110" + "10111100100100001111000110011" + "00001010101101001100000100100" + "10010001001011011000000101011" + "11110110011100110001101101010" + "10001101011010000001001111010" + "10110111101010010100111111010" + "00000000111000100001100011101" + "11111110110110010100101010100" + "10000010111100011011100011000" + "10111010001001100101111110001" + "10111010010011011000100101100" + "10111010000001100111000011110" + "10000010110011101010011100110" + "11111110101010100011111001100" + }, + /* 34*/ { BARCODE_QRCODE, UNICODE_MODE, 5, 1, -1, -1, { 0, 0, "" }, "Liĥtenŝtejno", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 5 Example 1; BWIPP uses mask 011 instead of 101", + "111111100111101111111" + "100000100101001000001" + "101110100100001011101" + "101110101111001011101" + "101110101010101011101" + "100000100010101000001" + "111111101010101111111" + "000000000110100000000" + "110001110100100011000" + "111011000001010001101" + "100100111011011010111" + "100101010110011011000" + "100011101010110011111" + "000000001100010101100" + "111111101001011000010" + "100000101010011000011" + "101110100011100001110" + "101110100000010000000" + "101110100111010010011" + "100000101010010111111" + "111111101011110000010" + }, + /* 35*/ { BARCODE_QRCODE, UNICODE_MODE, 6, 1, -1, -1, { 0, 0, "" }, "Lietuvą", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 6 Example 1", + "111111101000101111111" + "100000101010001000001" + "101110100000101011101" + "101110100000001011101" + "101110101111101011101" + "100000101101101000001" + "111111101010101111111" + "000000001000100000000" + "111001101010011110011" + "111111001101001011011" + "100011101001100011101" + "000011011001000111100" + "110100101001101011111" + "000000001110000101000" + "111111100010011011001" + "100000101010100110101" + "101110100110011010101" + "101110100001011001000" + "101110101101110011011" + "100000101011011111011" + "111111101111111010101" + }, + /* 36*/ { BARCODE_QRCODE, UNICODE_MODE, 7, 1, -1, -1, { 0, 0, "" }, "Россия", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 7 Example 1", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "101000010001010010111" + "110010110011011110101" + "101011010000111110011" + "100001101011001100101" + "000000001010011110100" + "111111101001101000110" + "100000100110001000101" + "101110100000111110001" + "101110101010011001111" + "101110100111011010001" + "100000101011100101011" + "111111101100010100110" + }, + /* 37*/ { BARCODE_QRCODE, UNICODE_MODE, 7, 1, -1, -1, { 0, 0, "" }, "Монголулс", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 7 Example 2; BWIPP uses mask 000 instead of 111", + "111111100101101111111" + "100000101101001000001" + "101110101100101011101" + "101110100101001011101" + "101110101000101011101" + "100000101001101000001" + "111111101010101111111" + "000000001111100000000" + "110100110110001110110" + "111110010000001011100" + "010110100010110011010" + "100000011011011001111" + "000011110010110100101" + "000000001101011100100" + "111111101010010100110" + "100000100001111000101" + "101110100001000110001" + "101110101110000011111" + "101110100110100011101" + "100000101011000010111" + "111111101001110100110" + }, + /* 38*/ { BARCODE_QRCODE, UNICODE_MODE, 8, 1, -1, -1, { 0, 0, "" }, "جواز السفر", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 8 Example 1", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "010000010011001010111" + "100011101101010100110" + "111110010000101101111" + "100010100111001100101" + "000000001101011110100" + "111111101011110011010" + "100000100001010111110" + "101110100010100000110" + "101110101011000111111" + "101110100000100010101" + "100000101110000010011" + "111111101000010100010" + }, + /* 39*/ { BARCODE_QRCODE, UNICODE_MODE, 8, 1, -1, -1, { 0, 0, "" }, "المنشأ: المملكة العربية السعودية", -1, 0, 29, 29, 0, "AIM ITS/04-023:2022 ECI 8 Example 2; BWIPP uses mask 000 instead of 010", + "11111110001011110110001111111" + "10000010101001111101001000001" + "10111010000011010110101011101" + "10111010111010110111101011101" + "10111010010000011110001011101" + "10000010110110000000101000001" + "11111110101010101010101111111" + "00000000011100101110100000000" + "11111011110100000011110101010" + "10000100101011110000000111110" + "11110011101001110111101000100" + "10001100000011010010111101011" + "00001011111010111011000011001" + "00000001110000010110100111101" + "01101010010110000000001000100" + "01101100101100111011111101010" + "00001111001100000101100100101" + "10110100000011100101110111110" + "10001110001001100100001011010" + "10000101111011001010111101011" + "10011010001010101001111110010" + "00000000110000001110100011110" + "11111110110110000000101010000" + "10000010001100111000100010010" + "10111010101100000110111111111" + "10111010101011110100110010010" + "10111010100001100000001011110" + "10000010100011001101001000101" + "11111110110010101010110010100" + }, + /* 40*/ { BARCODE_QRCODE, UNICODE_MODE, 9, 1, -1, -1, { 0, 0, "" }, "Μέρος #. α123", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 9 Example 1 **NOT SAME** example uses mask 111 instead of 000", + "111111100100101111111" + "100000100111001000001" + "101110101100101011101" + "101110100101001011101" + "101110100011001011101" + "100000100001101000001" + "111111101010101111111" + "000000001100100000000" + "111011111111111000100" + "101100010001010100111" + "101101101011000010100" + "100010000101010110110" + "010111101110110010101" + "000000001001010110110" + "111111101000100011111" + "100000101000001010100" + "101110101100100101100" + "101110100010010010110" + "101110101010100101001" + "100000101111110111001" + "111111101101001101111" + }, + /* 41*/ { BARCODE_QRCODE, UNICODE_MODE, 9, 1, -1, 8 << 8, { 0, 0, "" }, "Μέρος #. α123", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 9 Example 1 with explicit mask 111; BWIPP uses mask 000", + "111111100100101111111" + "100000101101001000001" + "101110101101101011101" + "101110100101001011101" + "101110101001001011101" + "100000101000101000001" + "111111101010101111111" + "000000001110100000000" + "110100110110101110110" + "101100010001010100111" + "111111111001010000110" + "101011001100011111111" + "010111101110110010101" + "000000001011000100100" + "111111101001101010110" + "100000100000001010100" + "101110100110110111110" + "101110101011011011111" + "101110100010100101001" + "100000101101100101011" + "111111101100000100110" + }, + /* 42*/ { BARCODE_QRCODE, UNICODE_MODE, 10, 1, -1, -1, { 0, 0, "" }, "דרכון", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 10 Example 1; BWIPP uses mask 000 instead of 101", + "111111100000101111111" + "100000100010101000001" + "101110100011101011101" + "101110101010101011101" + "101110101100101011101" + "100000100101001000001" + "111111101010101111111" + "000000000000000000000" + "110001110001000011000" + "101110010001110011011" + "001110111110101100010" + "011100010001111000100" + "010100111101111110011" + "000000001100100111000" + "111111101111010011010" + "100000101100001000000" + "101110100001010010101" + "101110100101111101000" + "101110100001110011011" + "100000101111111010011" + "111111101110100011010" + }, + /* 43*/ { BARCODE_QRCODE, UNICODE_MODE, 10, 1, -1, -1, { 0, 0, "" }, "מספר חלק: A20200715001", -1, 0, 25, 25, 0, "AIM ITS/04-023:2022 ECI 10 Example 2 **NOT SAME** different encodation; BWIPP uses mask 000 instead of 100", + "1111111011101100001111111" + "1000001011100001001000001" + "1011101010110001001011101" + "1011101011010000001011101" + "1011101000000110001011101" + "1000001010011010001000001" + "1111111010101010101111111" + "0000000001001001100000000" + "1100111000010110000101111" + "1011100011101011010011100" + "0001001000011110110110001" + "0111110010110101001111111" + "1001111010101101000111010" + "1001010100000110100001110" + "0011011100100000110010011" + "0001110001101010111110110" + "1111011000010110111110001" + "0000000010101000100011101" + "1111111001111111101010000" + "1000001010010101100011011" + "1011101010001100111110000" + "1011101001000111001000001" + "1011101001000001110101010" + "1000001011001010100011101" + "1111111011010110001000011" + }, + /* 44*/ { BARCODE_QRCODE, UNICODE_MODE, 11, 1, -1, -1, { 0, 0, "" }, "Amerika Birleşik Devletleri", -1, 0, 25, 25, 1, "AIM ITS/04-023:2022 ECI 11 Example 1", + "1111111000111100101111111" + "1000001001101101001000001" + "1011101000001000101011101" + "1011101010000010001011101" + "1011101011001001001011101" + "1000001000011011001000001" + "1111111010101010101111111" + "0000000000110001100000000" + "1100011101001011000011000" + "1010000001011011001011111" + "0101111100100110111011101" + "0011010001010001101001101" + "1000001111010100011010101" + "1110010010000010100001010" + "1001101010001111011011100" + "1001000001110001000111111" + "1011111100001111111110001" + "0000000010100000100011001" + "1111111011001001101010001" + "1000001010110101100010010" + "1011101001101010111111100" + "1011101000100010000101101" + "1011101001000110011011101" + "1000001010110000111010110" + "1111111010110101100010101" + }, + /* 45*/ { BARCODE_QRCODE, UNICODE_MODE, 11, 1, -1, -1, { 0, 0, "" }, "Biniş kartı #120921039", -1, 0, 25, 25, 0, "AIM ITS/04-023:2022 ECI 11 Example 2 **NOT SAME** different encodation; BWIPP same encodation as Zint but uses mask 101 instead of 111", + "1111111000100110101111111" + "1000001011100110001000001" + "1011101010000001001011101" + "1011101001001011001011101" + "1011101011101110101011101" + "1000001010101101001000001" + "1111111010101010101111111" + "0000000010110000100000000" + "1101001100011100101110110" + "0011000111011101000100011" + "1111101100011000111100101" + "0101010011111101011011100" + "0001011110110010001101111" + "0101100100010100111010100" + "1011001100010110101010000" + "0111000011010000001000110" + "1110001000101100111110101" + "0000000010101111100010000" + "1111111010011010101010011" + "1000001001001011100011001" + "1011101000100000111111110" + "1011101010010011100100110" + "1011101000100000001111101" + "1000001011100010011100111" + "1111111010001001010010011" + }, + /* 46*/ { BARCODE_QRCODE, UNICODE_MODE, 12, 1, -1, -1, { 0, 0, "" }, "Kūrybiškumą", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 12 Example 1; BWIPP uses mask 111 instead of 100", + "111111101111101111111" + "100000101010101000001" + "101110101000001011101" + "101110101111001011101" + "101110100000101011101" + "100000101101001000001" + "111111101010101111111" + "000000000111100000000" + "110011100101000101111" + "100110001010110101100" + "010011100011011101001" + "000000001101001101100" + "001101101010110101011" + "000000001101101010011" + "111111100101001110110" + "100000101100101100100" + "101110101110000100000" + "101110100111101101111" + "101110100100111100100" + "100000101011110001011" + "111111101001101100001" + }, + /* 47*/ { BARCODE_QRCODE, UNICODE_MODE, 13, 1, -1, -1, { 0, 0, "" }, "บาร๋แค่ด", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 13 Example 1; BWIPP uses mask 001 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "011110001111001101110" + "101100111101010101010" + "001101001100110110111" + "010011101111001000001" + "000000001100001010100" + "111111101111111010110" + "100000100110000111000" + "101110100010111110000" + "101110101000011011111" + "101110100111001000101" + "100000101011100101011" + "111111101010000100010" + }, + /* 48*/ { BARCODE_QRCODE, UNICODE_MODE, 15, 1, -1, -1, { 0, 0, "" }, "uzņēmums", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 15 Example 1; BWIPP uses mask 011 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "110000001011000000010" + "000011101101010101010" + "011011001110100011011" + "000010110011011111101" + "000000001100010010000" + "111111101101111100010" + "100000100000010111101" + "101110100110100100000" + "101110101110011011111" + "101110100111001111001" + "100000101111100101011" + "111111101000000101010" + }, + /* 49*/ { BARCODE_QRCODE, UNICODE_MODE, 16, 1, -1, -1, { 0, 0, "" }, "ṁórṡáċ", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 16 Example 1; BWIPP uses mask 001 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "000100000111010001111" + "011010111101011101001" + "001001001000111111011" + "110111110011001001101" + "000000001100011010100" + "111111101001101010010" + "100000100010001111010" + "101110100100111111011" + "101110101000011011001" + "101110100111011101001" + "100000101101100001011" + "111111101010010001010" + }, + /* 50*/ { BARCODE_QRCODE, UNICODE_MODE, 17, 1, -1, -1, { 0, 0, "" }, "Price: €13.50", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 17 Example 1", + "111111100100101111111" + "100000101101001000001" + "101110101101101011101" + "101110100101001011101" + "101110101000101011101" + "100000101000001000001" + "111111101010101111111" + "000000001110100000000" + "110100110111101110110" + "100010000000010110000" + "100010101001110011100" + "101110010101111010011" + "011001111010101010101" + "000000001101101010000" + "111111101000001110010" + "100000100111100111000" + "101110100110111100011" + "101110101011111011001" + "101110100100110010001" + "100000101000100101111" + "111111101101110110110" + }, + /* 51*/ { BARCODE_QRCODE, UNICODE_MODE, 18, 1, -1, -1, { 0, 0, "" }, "Te słowa są głębokie", -1, 0, 25, 25, 0, "AIM ITS/04-023:2022 ECI 18 Example 1; BWIPP uses mask 001 instead of 100", + "1111111010000111001111111" + "1000001010011000001000001" + "1011101011001100001011101" + "1011101011101111001011101" + "1011101001101100101011101" + "1000001011100001101000001" + "1111111010101010101111111" + "0000000000110100000000000" + "1100111000101011100101111" + "0001100010000101011111001" + "1010101111100111010011000" + "1010100011001100111100100" + "1101011110010111101001011" + "1001100100101101101010001" + "0011101111111111100111000" + "0011100111110000001101100" + "1100101100101100111110001" + "0000000011100100100011001" + "1111111000100001101010000" + "1000001010001001100011111" + "1011101011010110111111101" + "1011101001101010101000111" + "1011101000011111101110010" + "1000001011110101011011101" + "1111111010001100000011111" + }, + /* 52*/ { BARCODE_QRCODE, UNICODE_MODE, 20, 1, -1, -1, { 0, 0, "" }, "バーコード", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 20 Example 1; BWIPP uses mask 011 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "101011011011011001000" + "110011111001000000101" + "000111011100111101111" + "100111110011001011101" + "000000001000011110000" + "111111101101110110001" + "100000100110000111110" + "101110100110111000101" + "101110101000011010001" + "101110100011001010101" + "100000101011100110011" + "111111101010000101010" + }, + /* 53*/ { BARCODE_QRCODE, UNICODE_MODE, 20, 1, -1, -1, { 0, 0, "" }, "東京都", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 20 Example 2; BWIPP uses mask 000 instead of 100", + "111111101111101111111" + "100000101010101000001" + "101110101000001011101" + "101110101111001011101" + "101110100000101011101" + "100000101101001000001" + "111111101010101111111" + "000000000111100000000" + "110011100101000101111" + "011110011101100001100" + "111011100111001111100" + "101110011100011110100" + "010010111000111000011" + "000000001100111011111" + "111111100000110011101" + "100000101001100101000" + "101110101101001101101" + "101110100011100111001" + "101110100101001100100" + "100000101010011010011" + "111111101100111011001" + }, + /* 54*/ { BARCODE_QRCODE, UNICODE_MODE, 21, 1, -1, -1, { 0, 0, "" }, "Študentska št. 2198390", -1, 0, 25, 25, 1, "AIM ITS/04-023:2022 ECI 21 Example 1 **NOT SAME** different encodation", + "1111111010000110001111111" + "1000001010011110101000001" + "1011101011001111101011101" + "1011101011101011101011101" + "1011101001101010001011101" + "1000001011100100001000001" + "1111111010101010101111111" + "0000000000110110100000000" + "1100111000101010000101111" + "1000000010000001110111000" + "1001011011100010100110011" + "0110100101001010111100110" + "1111111100010110000110000" + "1011000111101000110011010" + "0000001011011011000110001" + "0011000100010000011100110" + "1101101101001110111111001" + "0000000011000110100011001" + "1111111001100000101011000" + "1000001011001001100010100" + "1011101011110111111110011" + "1011101001001011001101011" + "1011101001011111000111010" + "1000001010010101110010101" + "1111111010101100000011011" + }, + /* 55*/ { BARCODE_QRCODE, UNICODE_MODE, 22, 1, -1, -1, { 0, 0, "" }, "Россия", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 22 Example 1", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "101000001111010010111" + "011101110101011111101" + "110011010010111010011" + "101010101111001100101" + "000000001000011110100" + "111111101001101001010" + "100000100010001110111" + "101110100000111110001" + "101110101010011001101" + "101110100011011011001" + "100000101001100001011" + "111111101100010100110" + }, + /* 56*/ { BARCODE_QRCODE, UNICODE_MODE, 22, 1, -1, -1, { 0, 0, "" }, "Монголулс", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 22 Example 2; BWIPP uses mask 000 instead of 100", + "111111101111101111111" + "100000101010101000001" + "101110101000001011101" + "101110101111001011101" + "101110100000101011101" + "100000101101001000001" + "111111101010101111111" + "000000000111100000000" + "110011100101000101111" + "110010000001100111001" + "101001110101011101001" + "011011001100000100100" + "110110111100100110111" + "000000001100100011011" + "111111100000101001110" + "100000101011101100101" + "101110101111000110001" + "101110100110100111001" + "101110100101011111100" + "100000101001000100111" + "111111101000101111101" + }, + /* 57*/ { BARCODE_QRCODE, UNICODE_MODE, 23, 1, -1, -1, { 0, 0, "" }, "bœuf", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 23 Example 1; BWIPP uses mask 000 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "010001001111010100010" + "010001100011001110001" + "111111001100111110011" + "010100110101011100001" + "000000001010011111100" + "111111101011101010110" + "100000100100001100101" + "101110100110111000101" + "101110101100011111001" + "101110100101011111001" + "100000101001100100011" + "111111101000010110110" + }, + /* 58*/ { BARCODE_QRCODE, UNICODE_MODE, 24, 1, -1, -1, { 0, 0, "" }, "جواز السفر", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 24 Example 1", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "001010011111001010111" + "101100101101000110100" + "100010010001110100110" + "100111110011011100101" + "000000001011001100110" + "111111101010111010011" + "100000101001010110010" + "101110101110110010000" + "101110100010001110100" + "101110101100111010101" + "100000101010001000001" + "111111101101011101011" + }, + /* 59*/ { BARCODE_QRCODE, UNICODE_MODE, 24, 1, -1, -1, { 0, 0, "" }, "المنشأ: المملكة العربية السعودية", -1, 0, 29, 29, 0, "AIM ITS/04-023:2022 ECI 24 Example 2; BWIPP uses mask 000 instead of 100", + "11111110111010000111101111111" + "10000010111000001100101000001" + "10111010101101011000101011101" + "10111010110100111111101011101" + "10111010000001101101101011101" + "10000010100111110001001000001" + "11111110101010101010101111111" + "00000000010010100000100000000" + "11001110000101110010100101111" + "10011100111010000000111010010" + "10011111000111111001100110111" + "11111101101101011100110010010" + "01010011101011001010000110011" + "01100001000001100111111010011" + "01001010010000001110000110101" + "01111000100010110101110011011" + "10100011111101111100000101111" + "11111101001010001100010110000" + "00010110111111101010000101011" + "00001000110101000100101011010" + "11101010100011011010111111100" + "00000000110001111101100010000" + "11111110000000001110101010001" + "10000010110010110110100010011" + "10111010111101110111111110001" + "10111010011010011101011011110" + "10111010010111111110000101111" + "10000010111101000011000110100" + "11111110111011010111000011010" + }, + /* 60*/ { BARCODE_QRCODE, UNICODE_MODE, 25, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 25 Example 1", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "000001010011010100010" + "010011110001011100011" + "100001001011110110010" + "001100101101011101001" + "000000001100001100010" + "111111101010100010011" + "100000101110001101000" + "101110101100101011100" + "101110100001010000000" + "101110101001011011001" + "100000101011110101101" + "111111101111011010111" + }, + /* 61*/ { BARCODE_QRCODE, UNICODE_MODE, 25, 1, -1, -1, { 0, 0, "" }, "バーコード", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 25 Example 2; BWIPP uses mask 000 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "011011010111010011011" + "110010110011000001010" + "111100010110111010011" + "000001100011001000101" + "000000001001011110100" + "111111101001111010110" + "100000100001001011000" + "101110100100111000110" + "101110101001011100001" + "101110100000010101001" + "100000101001000001011" + "111111101110000101110" + }, + /* 62*/ { BARCODE_QRCODE, UNICODE_MODE, 25, 1, -1, -1, { 0, 0, "" }, "바코드", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 25 Example 3", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "011011000011010101111" + "110010110001001101011" + "011111001111110000110" + "100010110011001100101" + "000000001100001101010" + "111111101100100111111" + "100000101100001010000" + "101110101010101000100" + "101110100001010100100" + "101110101011011110101" + "100000101101110000101" + "111111101001011111011" + }, + /* 63*/ { BARCODE_QRCODE, UNICODE_MODE, 26, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 26 Example 1; BWIPP uses mask 000 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "010111001111010000111" + "111010100011011000001" + "111010010000111101011" + "011001110101001000001" + "000000001100011111100" + "111111101111101010110" + "100000100110001110111" + "101110100010111011110" + "101110101110011010101" + "101110100011011110001" + "100000101111100101011" + "111111101110010100110" + }, + /* 64*/ { BARCODE_QRCODE, UNICODE_MODE, 26, 2, -1, -1, { 0, 0, "" }, "バーコード", -1, 0, 25, 25, 0, "AIM ITS/04-023:2022 ECI 26 Example 2; BWIPP uses mask 101 instead of 010", + "1111111001111101001111111" + "1000001001001111001000001" + "1011101011101101001011101" + "1011101011111011101011101" + "1011101010011001001011101" + "1000001010100000001000001" + "1111111010101010101111111" + "0000000010100011000000000" + "1011111001011000101111100" + "0000010010010110000001110" + "0110001111000111000001001" + "1010010010111101010011000" + "1111111010111010101110110" + "1000110001100000010001110" + "1001011111111001010010010" + "1010100110110010100111001" + "1010101001110000111111001" + "0000000011001111100010101" + "1111111001000111101011111" + "1000001011001100100011000" + "1011101010101010111110100" + "1011101011100000101001111" + "1011101010011001110111001" + "1000001001110010100111010" + "1111111010110001001010111" + }, + /* 65*/ { BARCODE_QRCODE, UNICODE_MODE, 26, 2, -1, -1, { 0, 0, "" }, "바코드", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 26 Example 3; BWIPP uses mask 111 instead of 001", + "111111101011001111111" + "100000100001001000001" + "101110101100101011101" + "101110100001001011101" + "101110100111101011101" + "100000101001101000001" + "111111101010101111111" + "000000000110100000000" + "101000110110000100101" + "111001010101011001110" + "110010100011110011010" + "010000010011001100100" + "010101100111100100011" + "000000001110001100100" + "111111101110001000001" + "100000100010100110001" + "101110100110000101110" + "101110100100001000110" + "101110101011101000111" + "100000100010011011011" + "111111101011111001101" + }, + /* 66*/ { BARCODE_QRCODE, UNICODE_MODE, 27, 2, -1, -1, { 0, 0, "" }, "sn:7QPB4MN", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 27 Example 1 **NOT SAME** different encodation; BWIPP same encodation as example but uses mask 111 instead of 010", + "111111101010101111111" + "100000101111101000001" + "101110100110001011101" + "101110101110101011101" + "101110100101001011101" + "100000100011101000001" + "111111101010101111111" + "000000001101100000000" + "101101110111101001011" + "000110001101110001101" + "100000100001000100101" + "100111000011000110010" + "010011101010111111000" + "000000001011010110001" + "111111101101110010100" + "100000101100011101011" + "101110100010111111100" + "101110101010001100000" + "101110101110111000000" + "100000100011000001010" + "111111101000111110000" + }, + /* 67*/ { BARCODE_QRCODE, UNICODE_MODE, 28, 1, -1, -1, { 0, 0, "" }, "條碼", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 28 Example 1", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "000101001011010101110" + "000000101101011101011" + "100101001011110111010" + "010001100101011101101" + "000000001000001100110" + "111111101000100011011" + "100000101110001101110" + "101110101100101010110" + "101110100011010101100" + "101110101001011001001" + "100000101101110000101" + "111111101101011111111" + }, + /* 68*/ { BARCODE_QRCODE, UNICODE_MODE, 29, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 29 Example 1", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "100001010001010100110" + "110111111101011100111" + "000011001001110110110" + "001101101111011100101" + "000000001000001100110" + "111111101100100011011" + "100000101110001100000" + "101110101000101011110" + "101110100011010010100" + "101110101101011000101" + "100000101111110111001" + "111111101101011100011" + }, + /* 69*/ { BARCODE_QRCODE, UNICODE_MODE, 29, 1, -1, -1, { 0, 0, "" }, "北京", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 29 Example 2", + "111111100100101111111" + "100000101001001000001" + "101110100100001011101" + "101110101001001011101" + "101110100011101011101" + "100000101110101000001" + "111111101010101111111" + "000000000011100000000" + "111110111100110101010" + "001011001010100100000" + "010100101111010011010" + "011101010100000110100" + "001010110001010011100" + "000000001101111100000" + "111111101010101101010" + "100000100111111100110" + "101110101100100101111" + "101110101000100000010" + "101110101101010111000" + "100000101100000111011" + "111111101011010110010" + }, + /* 70*/ { BARCODE_QRCODE, UNICODE_MODE, 30, 1, -1, -1, { 0, 0, "" }, "바코드", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 30 Example 1; BWIPP uses mask 000 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "000010000001010001111" + "000111110001011101001" + "001010010010111110111" + "100110110111001101101" + "000000001000011010100" + "111111101101101110110" + "100000100110001011111" + "101110100010111011100" + "101110101110011111101" + "101110100001011000101" + "100000101001100010011" + "111111101110010101110" + }, + /* 71*/ { BARCODE_QRCODE, UNICODE_MODE, 30, 1, -1, -1, { 0, 0, "" }, "서울", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 30 Example 2", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "110000001101010101110" + "011011110001011101011" + "100111001111110110110" + "000000101101011100101" + "000000001100001101110" + "111111101000100010011" + "100000101110001100111" + "101110101100101011110" + "101110100001010011100" + "101110101001011101001" + "100000101001110110101" + "111111101011011101011" + }, + /* 72*/ { BARCODE_QRCODE, UNICODE_MODE, 31, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 31 Example 1", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "100011011101010100110" + "001000101111011100111" + "111101011011110110110" + "011100111111011100101" + "000000001100001100110" + "111111101010100011011" + "100000101000001100001" + "101110101010101011110" + "101110100011010010100" + "101110101001011000101" + "100000101011110111001" + "111111101101011100011" + }, + /* 73*/ { BARCODE_QRCODE, UNICODE_MODE, 31, 1, -1, -1, { 0, 0, "" }, "北京", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 31 Example 2; BWIPP uses mask 011 instead of 010", + "111111100100101111111" + "100000101001001000001" + "101110100100001011101" + "101110101001001011101" + "101110100011101011101" + "100000101110101000001" + "111111101010101111111" + "000000000011100000000" + "111110111100110101010" + "001001000110100100000" + "101011111101010011010" + "100011000110000110100" + "011011100001010011100" + "000000001001111100000" + "111111101100101101010" + "100000100001111100111" + "101110101110100101111" + "101110101000100000010" + "101110101001010111000" + "100000101000000111011" + "111111101011010110010" + }, + /* 74*/ { BARCODE_QRCODE, UNICODE_MODE, 31, 1, -1, -1, { 0, 0, "" }, "條碼", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 31 Example 3", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "000100011111010101110" + "000100110101011101111" + "011101011001110110010" + "110010111001011101001" + "000000001000001100010" + "111111101010100010011" + "100000101010001100101" + "101110101110101010110" + "101110100001010001100" + "101110101101011011001" + "100000101001110110001" + "111111101111011110111" + }, + /* 75*/ { BARCODE_QRCODE, UNICODE_MODE, 32, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 32 Example 1", + "111111100100101111111" + "100000101001001000001" + "101110100100001011101" + "101110101001001011101" + "101110100011101011101" + "100000101110101000001" + "111111101010101111111" + "000000000011100000000" + "111110111100110101010" + "100111001100100101000" + "110011110101010010110" + "101111010110000111000" + "100010101001010010100" + "000000001101111101000" + "111111101000101101010" + "100000100111111101100" + "101110101010100101100" + "101110101110100011001" + "101110101011010110100" + "100000101100000110111" + "111111101111010010010" + }, + /* 76*/ { BARCODE_QRCODE, UNICODE_MODE, 32, 1, -1, -1, { 0, 0, "" }, "北京", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 32 Example 2; BWIPP uses mask 011 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "001101010111010101110" + "000010110101001111001" + "111000000010111110011" + "100101110111011101101" + "000000001010011111100" + "111111101111101010010" + "100000100110001101010" + "101110100100111001111" + "101110101100011000110" + "101110100011011001001" + "100000101101100100111" + "111111101000010001010" + }, + /* 77*/ { BARCODE_QRCODE, UNICODE_MODE, 32, 1, -1, -1, { 0, 0, "" }, "條碼", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 32 Example 3; BWIPP uses mask 011 instead of 001", + "111111101111101111111" + "100000101101101000001" + "101110100111001011101" + "101110100101101011101" + "101110101000101011101" + "100000101010001000001" + "111111101010101111111" + "000000001111000000000" + "111001101111111110011" + "100100001010000000100" + "100100110100001000101" + "101011010000100011000" + "010111110100001000011" + "000000001101011001000" + "111111100011110111001" + "100000101001011001100" + "101110100101111111111" + "101110100000000100101" + "101110101100001110011" + "100000101010100011011" + "111111101110001011101" + }, + /* 78*/ { BARCODE_QRCODE, UNICODE_MODE, 32, 1, -1, -1, { 0, 0, "" }, "པེ་ཅིང།", -1, 0, 25, 25, 1, "AIM ITS/04-023:2022 ECI 32 Example 4", + "1111111011110110001111111" + "1000001000011010101000001" + "1011101010110101101011101" + "1011101011000001101011101" + "1011101011010001101011101" + "1000001001010001101000001" + "1111111010101010101111111" + "0000000001001001100000000" + "1111001010010001110011101" + "0101100111011100000101011" + "1111001000011100111101110" + "0011010100010111100100100" + "1000111001000101101001100" + "0111000001110000000111110" + "0100101011000000100011011" + "1001000110001111010111011" + "0000111000000011111110010" + "0000000011110001100010100" + "1111111001100001101010111" + "1000001001100011100010110" + "1011101001001100111110100" + "1011101011110010101011100" + "1011101011100110011010010" + "1000001010111111111010111" + "1111111010011101100000011" + }, + /* 79*/ { BARCODE_QRCODE, UNICODE_MODE, 32, 1, -1, -1, { 0, 0, "" }, "バーコード", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 32 Example 5; BWIPP uses mask 011 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "110111001101011011111" + "101101100111010000010" + "000110011000110011011" + "111110100101011001101" + "000000001011010010100" + "111111101101101110110" + "100000100011010111010" + "101110100000111010111" + "101110101011010100110" + "101110100010000010001" + "100000101001010101111" + "111111101110010110110" + }, + /* 80*/ { BARCODE_QRCODE, UNICODE_MODE, 32, 1, -1, -1, { 0, 0, "" }, "바코드", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 32 Example 6; BWIPP uses mask 011 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101110101011101" + "100000101110001000001" + "111111101010101111111" + "000000001001000000000" + "110100110011101110110" + "100110010010101101110" + "100011100010110100100" + "111110001111101010011" + "101000110100111011001" + "000000001111100001000" + "111111101110111010010" + "100000100010111101010" + "101110100000001010111" + "101110101001010001110" + "101110100100001011001" + "100000101110100001011" + "111111101101101010110" + }, + /* 81*/ { BARCODE_QRCODE, UNICODE_MODE, 33, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 33 Example 1; BWIPP uses mask 111 instead of 010", + "111111100100101111111" + "100000101001001000001" + "101110100100001011101" + "101110101001001011101" + "101110100011101011101" + "100000101110101000001" + "111111101010101111111" + "000000000011100000000" + "111110111100110101010" + "110010000100100101100" + "000001111101010010010" + "110101000100000110100" + "001111101111010011100" + "000000001011111101100" + "111111101000101100010" + "100000100001111101110" + "101110101110100101000" + "101110101010100100101" + "101110101111010110100" + "100000101010000010111" + "111111101101010001110" + }, + /* 82*/ { BARCODE_QRCODE, UNICODE_MODE, 33, 1, -1, -1, { 0, 0, "" }, "バーコード", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 33 Example 2", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100101101011101" + "100000100111001000001" + "111111101010101111111" + "000000001010000000000" + "111011111010111000100" + "011110010011001100111" + "111100101001010011100" + "010000011111101011010" + "010000111111001010101" + "000000001101010011010" + "111111101100110011011" + "100000101101010011000" + "101110101110101000101" + "101110100101001100111" + "101110101100101011001" + "100000101100111010101" + "111111101110111010111" + }, + /* 83*/ { BARCODE_QRCODE, UNICODE_MODE, 33, 1, -1, -1, { 0, 0, "" }, "바코드", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 33 Example 3; BWIPP uses mask 000 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "111111011101010101011" + "010100100001011101101" + "101101001110111011011" + "001101111001001000101" + "000000001110011111100" + "111111101001101100010" + "100000100110001000100" + "101110100010111110111" + "101110101100011011010" + "101110100101011101101" + "100000101111100110011" + "111111101000010101110" + }, + /* 84*/ { BARCODE_QRCODE, UNICODE_MODE, 34, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 34 Example 1", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "001000011111000101010" + "000111110001000000110" + "010001000010110100011" + "000000111011001010101" + "000000001110000111000" + "111111101101100011110" + "100000100000010101011" + "101110100000101000111" + "101110101110011001010" + "101110100011001010001" + "100000101011100100011" + "111111101110000110010" + }, + /* 85*/ { BARCODE_QRCODE, UNICODE_MODE, 34, 1, -1, -1, { 0, 0, "" }, "バーコード", -1, 0, 25, 25, 1, "AIM ITS/04-023:2022 ECI 34 Example 2", + "1111111000100010001111111" + "1000001001000100101000001" + "1011101010010011001011101" + "1011101001001100001011101" + "1011101001001010101011101" + "1000001000111101101000001" + "1111111010101010101111111" + "0000000010010100000000000" + "1110111110001010111000100" + "1101000011011101010011010" + "1111111100111110101100101" + "1001010011101111010011010" + "0011101010110010101010101" + "0110100100110001010101010" + "1011101001100000101101011" + "0100110111010001010101000" + "1011111001101010111110101" + "0000000010111110100010110" + "1111111010111011101011111" + "1000001011001101100011011" + "1011101010010010111110101" + "1011101001110000110101011" + "1011101011000100001010101" + "1000001010110001010101001" + "1111111010001000110010111" + }, + /* 86*/ { BARCODE_QRCODE, UNICODE_MODE, 34, 1, -1, -1, { 0, 0, "" }, "바코드", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 34 Example 3", + "111111100010101111111" + "100000100000101000001" + "101110101010001011101" + "101110100000101011101" + "101110100100101011101" + "100000100111001000001" + "111111101010101111111" + "000000001011000000000" + "111011111010111000100" + "001101000001001101010" + "101010100101001010110" + "010101011000001101010" + "100001100001010010101" + "000000001001000101010" + "111111101001111010111" + "100000101010100101011" + "101110101110001010101" + "101110100001010101111" + "101110101000101111001" + "100000101101010000101" + "111111101010101010111" + }, + /* 87*/ { BARCODE_QRCODE, UNICODE_MODE, 35, 1, -1, -1, { 0, 0, "" }, "条码", -1, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 35 Example 1", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101111101011101" + "100000101110001000001" + "111111101010101111111" + "000000001000000000000" + "110100110011101110110" + "000011001001010100010" + "000000100001011010010" + "111010000100111010011" + "111110100011001111101" + "000000001000000010000" + "111111101011100011010" + "100000100010010100001" + "101110100010111001011" + "101110101000011100010" + "101110100011001010101" + "100000101011100111011" + "111111101110000011110" + }, + /* 88*/ { BARCODE_QRCODE, UNICODE_MODE, 35, 1, -1, -1, { 0, 0, "" }, "バーコード", -1, 0, 25, 25, 1, "AIM ITS/04-023:2022 ECI 35 Example 2", + "1111111000100110101111111" + "1000001001000111001000001" + "1011101010010110101011101" + "1011101001001101001011101" + "1011101001001000101011101" + "1000001000111001001000001" + "1111111010101010101111111" + "0000000010010111000000000" + "1110111110001010111000100" + "0111100101011101010101010" + "1111111010111010000011001" + "1100110101101100001101000" + "1111001010110010101010110" + "0101100100110101101101010" + "1001011110000011001010111" + "0101010100010100101101000" + "1010001101101011111110101" + "0000000011111101100011010" + "1111111011011010101010111" + "1000001011001101100011001" + "1011101011010010111110101" + "1011101001010001010100111" + "1011101011100100101011001" + "1000001010110001010010101" + "1111111011001000101010111" + }, + /* 89*/ { BARCODE_QRCODE, UNICODE_MODE, 35, 1, -1, -1, { 0, 0, "" }, "바코드", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 35 Example 3; BWIPP uses mask 011 instead of 111", + "111111100010101111111" + "100000101010101000001" + "101110101011001011101" + "101110100000101011101" + "101110101110101011101" + "100000101110001000001" + "111111101010101111111" + "000000001001000000000" + "110100110011101110110" + "011011011001010011010" + "100001110010111111100" + "001111010100011101011" + "111011100110101100101" + "000000001101000111100" + "111111101111100110010" + "100000100001010000101" + "101110100110111100111" + "101110101100000100010" + "101110100111111010101" + "100000101000111111011" + "111111101101000011110" + }, + /* 90*/ { BARCODE_QRCODE, UNICODE_MODE, 170, 1, -1, -1, { 0, 0, "" }, "sn:7QPB4MN", -1, 0, 21, 21, 0, "AIM ITS/04-023:2022 ECI 170 Example 1 **NOT SAME** different encodation; BWIPP same encodation as example but uses mask 011 instead of 111", + "111111101100101111111" + "100000100100101000001" + "101110101010101011101" + "101110101001001011101" + "101110101110001011101" + "100000100000001000001" + "111111101010101111111" + "000000000110000000000" + "111100101010010011101" + "100111011110101010100" + "001010111010111001011" + "010110010100100010011" + "111011100011010010001" + "000000001011011110000" + "111111100100011111111" + "100000100010110100100" + "101110100101110100101" + "101110101100101011010" + "101110101100000100001" + "100000101000110010110" + "111111101011100010100" + }, + /* 91*/ { BARCODE_QRCODE, DATA_MODE, 899, 1, -1, -1, { 0, 0, "" }, "\000\001\002\133\134\135\375\376\377", 9, 0, 21, 21, 1, "AIM ITS/04-023:2022 ECI 899 Example 1", + "111111101111101111111" + "100000101101101000001" + "101110100111001011101" + "101110100101101011101" + "101110101000101011101" + "100000101010001000001" + "111111101010101111111" + "000000001111000000000" + "111001101111111110011" + "101010000100010000000" + "110000111010001001101" + "001100010100111100111" + "010100101010001010111" + "000000001000011110000" + "111111100011100101110" + "100000101000011100011" + "101110100011101011111" + "101110100101111010000" + "101110101100000111110" + "100000101111111000011" + "111111101000010110101" + }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -1523,7 +3041,9 @@ static void test_qr_encode(int index, int generate, int debug) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, data[i].data, -1, debug); + length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, + data[i].option_1, data[i].option_2, data[i].option_3, -1 /*output_options*/, + data[i].data, data[i].length, debug); if (data[i].structapp.count) { symbol->structapp = data[i].structapp; } @@ -1532,11 +3052,11 @@ static void test_qr_encode(int index, int generate, int debug) { assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); if (generate) { - printf(" /*%3d*/ { %s, %s, %d, %d, %s, { %d, %d, \"%s\" }, \"%s\", %s, %d, %d, %d, \"%s\",\n", + printf(" /*%3d*/ { %s, %s, %d, %d, %d, %s, { %d, %d, \"%s\" }, \"%s\", %d, %s, %d, %d, %d, \"%s\",\n", i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), - data[i].option_1, data[i].option_2, testUtilOption3Name(data[i].option_3), + data[i].eci, data[i].option_1, data[i].option_2, testUtilOption3Name(data[i].option_3), data[i].structapp.index, data[i].structapp.count, data[i].structapp.id, - testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), testUtilErrorName(data[i].ret), + testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), data[i].length, testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].bwipp_cmp, data[i].comment); testUtilModulesPrint(symbol, " ", "\n"); printf(" },\n"); @@ -1561,11 +3081,11 @@ static void test_qr_encode(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[32768]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -2677,9 +4197,9 @@ static void test_rmqr_options(int index, int debug) { /* 13*/ { "\177\177\177\177\177", 4, 11, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, /* 14*/ { "\177\177\177\177\177\177", 2, 11, 0, 0, 11, 27 }, // Max capacity ECC M, version 11, 6 bytes /* 15*/ { "\177\177\177\177\177\177\177", 2, 11, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 16*/ { "点茗", 4, 11, 0, 0, 11, 27 }, // Max capacity ECC H, version 11, 2 kanji + /* 16*/ { "点茗", 4, 11, ZINT_WARN_NONCOMPLIANT, 0, 11, 27 }, // Max capacity ECC H, version 11, 2 kanji /* 17*/ { "点茗点", 4, 11, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 18*/ { "点茗点", 2, 11, 0, 0, 11, 27 }, // Max capacity ECC M, version 11, 3 kanji + /* 18*/ { "点茗点", 2, 11, ZINT_WARN_NONCOMPLIANT, 0, 11, 27 }, // Max capacity ECC M, version 11, 3 kanji /* 19*/ { "点茗点茗", 2, 11, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, /* 20*/ { "12345", -1, 1, 0, 0, 7, 43 }, // ECC auto-set to M, version 1 (R7x43) /* 21*/ { "12345", 2, 1, 0, 0, 7, 43 }, @@ -2695,41 +4215,41 @@ static void test_rmqr_options(int index, int debug) { /* 31*/ { "\177\177\177", 4, 1, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, /* 32*/ { "\177\177\177\177\177", 2, 1, 0, 0, 7, 43 }, // Max capacity ECC M, version 1, 5 bytes /* 33*/ { "\177\177\177\177\177\177", 2, 1, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 34*/ { "点", 4, 1, 0, 0, 7, 43 }, // Max capacity ECC H, version 1, 1 kanji + /* 34*/ { "点", 4, 1, ZINT_WARN_NONCOMPLIANT, 0, 7, 43 }, // Max capacity ECC H, version 1, 1 kanji /* 35*/ { "点茗", 4, 1, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 36*/ { "点茗点", 2, 1, 0, 0, 7, 43 }, // Max capacity ECC M, version 1, 3 kanji + /* 36*/ { "点茗点", 2, 1, ZINT_WARN_NONCOMPLIANT, 0, 7, 43 }, // Max capacity ECC M, version 1, 3 kanji /* 37*/ { "点茗点茗", 2, 1, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, /* 38*/ { "12345678901234567890123", 4, 7, 0, 0, 9, 59 }, // Max capacity ECC H, version 7 (R9x59), 23 numbers /* 39*/ { "123456789012345678901234", 4, 7, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 40*/ { "点茗点茗点茗", 4, 7, 0, 0, 9, 59 }, // Max capacity ECC H, version 7, 6 kanji + /* 40*/ { "点茗点茗点茗", 4, 7, ZINT_WARN_NONCOMPLIANT, 0, 9, 59 }, // Max capacity ECC H, version 7, 6 kanji /* 41*/ { "点茗点茗点茗点", 4, 7, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 42*/ { "点茗点茗点茗点茗", 4, 13, 0, 0, 11, 59 }, // Max capacity ECC H, version 13 (R11x59), 8 kanji + /* 42*/ { "点茗点茗点茗点茗", 4, 13, ZINT_WARN_NONCOMPLIANT, 0, 11, 59 }, // Max capacity ECC H, version 13 (R11x59), 8 kanji /* 43*/ { "点茗点茗点茗点茗点", 4, 13, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 44*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点", 4, 20, 0, 0, 13, 77 }, // Max capacity ECC H, version 20 (R13x77), 17 kanji + /* 44*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点", 4, 20, ZINT_WARN_NONCOMPLIANT, 0, 13, 77 }, // Max capacity ECC H, version 20 (R13x77), 17 kanji /* 45*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, 20, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 46*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点点茗点茗点茗点点茗点茗", 4, 26, 0, 0, 15, 99 }, // Max capacity ECC H, version 26 (R15x99), 28 kanji + /* 46*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点点茗点茗点茗点点茗点茗", 4, 26, ZINT_WARN_NONCOMPLIANT, 0, 15, 99 }, // Max capacity ECC H, version 26 (R15x99), 28 kanji /* 47*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点", 4, 26, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 48*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, 32, 0, 0, 17, 139 }, // Max capacity ECC H, version 32 (R17x139), 46 kanji + /* 48*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, 32, ZINT_WARN_NONCOMPLIANT, 0, 17, 139 }, // Max capacity ECC H, version 32 (R17x139), 46 kanji /* 49*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点", 4, 32, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 50*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", -1, 32, 0, 0, 17, 139 }, // Max capacity ECC M, version 32, 92 kanji + /* 50*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", -1, 32, ZINT_WARN_NONCOMPLIANT, 0, 17, 139 }, // Max capacity ECC M, version 32, 92 kanji /* 51*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点", 4, 32, ZINT_ERROR_TOO_LONG, -1, 0, 0 }, - /* 52*/ { "点茗点", -1, 33, 0, 0, 7, 43 }, // ECC auto-set to M, version 33 (R7xAuto-width) auto-sets R7x43 - /* 53*/ { "点茗点", 4, 33, 0, 0, 7, 59 }, // ECC set to H, version 33 (R7xAuto-width) auto-sets R7x59 - /* 54*/ { "点茗点", -1, 34, 0, 0, 9, 43 }, // ECC auto-set to H, version 34 (R9xAuto-width) auto-sets R9x43 - /* 55*/ { "点茗点", -1, 35, 0, 0, 11, 27 }, // ECC auto-set to M, version 35 (R11xAuto-width) auto-sets R11x27 - /* 56*/ { "点茗点茗点茗点", 4, 35, 0, 0, 11, 59 }, // ECC set to H, version 35 (R11xAuto-width) auto-sets R11x59 - /* 57*/ { "点茗点茗点茗点", -1, 35, 0, 0, 11, 43 }, // ECC auto-set to M, version 35 (R11xAuto-width) auto-sets R11x43 - /* 58*/ { "点茗点茗点茗点茗", -1, 36, 0, 0, 13, 43 }, // ECC auto-set to M, version 36 (R13xAuto-width) auto-sets R13x43 - /* 59*/ { "点茗点茗点茗点茗", 4, 36, 0, 0, 13, 59 }, // ECC set to H, version 36 (R13xAuto-width) auto-sets R13x59 - /* 60*/ { "点茗点茗点茗点茗点", -1, 37, 0, 0, 15, 43 }, // ECC auto-set to M, version 37 (R15xAuto-width) auto-sets R15x43 - /* 61*/ { "点茗点茗点茗点茗点", 4, 37, 0, 0, 15, 59 }, // ECC set to H, version 37 (R15xAuto-width) auto-sets R15x59 - /* 62*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗", -1, 38, 0, 0, 17, 43 }, // ECC auto-set to M, version 38 (R17xAuto-width) auto-sets R17x43 - /* 63*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, 38, 0, 0, 17, 77 }, // ECC set to H, version 38 (R17xAuto-width) auto-sets R17x77 + /* 52*/ { "点茗点", -1, 33, ZINT_WARN_NONCOMPLIANT, 0, 7, 43 }, // ECC auto-set to M, version 33 (R7xAuto-width) auto-sets R7x43 + /* 53*/ { "点茗点", 4, 33, ZINT_WARN_NONCOMPLIANT, 0, 7, 59 }, // ECC set to H, version 33 (R7xAuto-width) auto-sets R7x59 + /* 54*/ { "点茗点", -1, 34, ZINT_WARN_NONCOMPLIANT, 0, 9, 43 }, // ECC auto-set to H, version 34 (R9xAuto-width) auto-sets R9x43 + /* 55*/ { "点茗点", -1, 35, ZINT_WARN_NONCOMPLIANT, 0, 11, 27 }, // ECC auto-set to M, version 35 (R11xAuto-width) auto-sets R11x27 + /* 56*/ { "点茗点茗点茗点", 4, 35, ZINT_WARN_NONCOMPLIANT, 0, 11, 59 }, // ECC set to H, version 35 (R11xAuto-width) auto-sets R11x59 + /* 57*/ { "点茗点茗点茗点", -1, 35, ZINT_WARN_NONCOMPLIANT, 0, 11, 43 }, // ECC auto-set to M, version 35 (R11xAuto-width) auto-sets R11x43 + /* 58*/ { "点茗点茗点茗点茗", -1, 36, ZINT_WARN_NONCOMPLIANT, 0, 13, 43 }, // ECC auto-set to M, version 36 (R13xAuto-width) auto-sets R13x43 + /* 59*/ { "点茗点茗点茗点茗", 4, 36, ZINT_WARN_NONCOMPLIANT, 0, 13, 59 }, // ECC set to H, version 36 (R13xAuto-width) auto-sets R13x59 + /* 60*/ { "点茗点茗点茗点茗点", -1, 37, ZINT_WARN_NONCOMPLIANT, 0, 15, 43 }, // ECC auto-set to M, version 37 (R15xAuto-width) auto-sets R15x43 + /* 61*/ { "点茗点茗点茗点茗点", 4, 37, ZINT_WARN_NONCOMPLIANT, 0, 15, 59 }, // ECC set to H, version 37 (R15xAuto-width) auto-sets R15x59 + /* 62*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗", -1, 38, ZINT_WARN_NONCOMPLIANT, 0, 17, 43 }, // ECC auto-set to M, version 38 (R17xAuto-width) auto-sets R17x43 + /* 63*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, 38, ZINT_WARN_NONCOMPLIANT, 0, 17, 77 }, // ECC set to H, version 38 (R17xAuto-width) auto-sets R17x77 /* 64*/ { "点茗点", -1, 39, ZINT_ERROR_INVALID_OPTION, -1, 0, 0 }, - /* 65*/ { "点茗点", 4, -1, 0, 0, 13, 27 }, // ECC set to H, auto-sets R13x27 - /* 66*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, -1, 0, 0, 15, 99 }, // ECC set to H, auto-sets R15x99 (max capacity) - /* 67*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点", 4, -1, 0, 0, 17, 99 }, // ECC set to H, auto-sets R17x99 - /* 68*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, -1, 0, 0, 17, 139 }, // ECC set to H, auto-sets R17x139 (max capacity) + /* 65*/ { "点茗点", 4, -1, ZINT_WARN_NONCOMPLIANT, 0, 13, 27 }, // ECC set to H, auto-sets R13x27 + /* 66*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, -1, ZINT_WARN_NONCOMPLIANT, 0, 15, 99 }, // ECC set to H, auto-sets R15x99 (max capacity) + /* 67*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点", 4, -1, ZINT_WARN_NONCOMPLIANT, 0, 17, 99 }, // ECC set to H, auto-sets R17x99 + /* 68*/ { "点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗点茗", 4, -1, ZINT_WARN_NONCOMPLIANT, 0, 17, 139 }, // ECC set to H, auto-sets R17x139 (max capacity) }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -2783,7 +4303,7 @@ static void test_rmqr_input(int index, int generate, int debug) { /* 3*/ { UNICODE_MODE, 26, -1, "é", 0, 26, "71 A6 B0 EA 40", "ECI-26 B2 (UTF-8)" }, /* 4*/ { DATA_MODE, 0, -1, "é", 0, 0, "6B 0E A4 00 EC", "B2 (UTF-8)" }, /* 5*/ { DATA_MODE, 0, -1, "\351", 0, 0, "67 A4 00 EC 11", "B1 (ISO 8859-1)" }, - /* 6*/ { UNICODE_MODE, 0, -1, "β", 0, 0, "88 80 00 EC 11", "K1 (Shift JIS)" }, + /* 6*/ { UNICODE_MODE, 0, -1, "β", ZINT_WARN_NONCOMPLIANT, 0, "Warning 88 80 00 EC 11", "K1 (Shift JIS)" }, /* 7*/ { UNICODE_MODE, 9, -1, "β", 0, 9, "70 96 78 80 EC", "ECI-9 B1 (ISO 8859-7)" }, /* 8*/ { UNICODE_MODE, 20, -1, "β", 0, 20, "71 48 88 00 00", "ECI-20 K1 (Shift JIS)" }, /* 9*/ { UNICODE_MODE, 26, -1, "β", 0, 26, "71 A6 B3 AC 80", "ECI-26 B2 (UTF-8)" }, @@ -2793,7 +4313,7 @@ static void test_rmqr_input(int index, int generate, int debug) { /* 13*/ { UNICODE_MODE, 20, -1, "ก", ZINT_ERROR_INVALID_DATA, -1, "Error 800: Invalid character in input data", "ก not in Shift JIS" }, /* 14*/ { UNICODE_MODE, 26, -1, "ก", 0, 26, "71 A6 F8 2E 20 40 EC", "ECI-26 B3 (UTF-8)" }, /* 15*/ { DATA_MODE, 0, -1, "ก", 0, 0, "6F 82 E2 04 00", "B3 (UTF-8)" }, - /* 16*/ { UNICODE_MODE, 0, -1, "Ж", 0, 0, "88 91 C0 EC 11", "K1 (Shift JIS)" }, + /* 16*/ { UNICODE_MODE, 0, -1, "Ж", ZINT_WARN_NONCOMPLIANT, 0, "Warning 88 91 C0 EC 11", "K1 (Shift JIS)" }, /* 17*/ { UNICODE_MODE, 7, -1, "Ж", 0, 7, "70 76 6D 80 EC", "ECI-7 B1 (ISO 8859-5)" }, /* 18*/ { UNICODE_MODE, 20, -1, "Ж", 0, 20, "71 48 89 1C 00", "ECI-20 K1 (Shift JIS)" }, /* 19*/ { UNICODE_MODE, 26, -1, "Ж", 0, 26, "71 A6 B4 25 80", "ECI-26 B2 (UTF-8)" }, @@ -2811,7 +4331,7 @@ static void test_rmqr_input(int index, int generate, int debug) { /* 31*/ { UNICODE_MODE, 20, -1, "¥", 0, 20, "71 46 57 00 EC", "ECI-20 B1 (Shift JIS) (to single-byte backslash codepoint 5C, so byte mode)" }, /* 32*/ { UNICODE_MODE, 26, -1, "¥", 0, 26, "71 A6 B0 A9 40", "ECI-26 B2 (UTF-8)" }, /* 33*/ { DATA_MODE, 0, -1, "¥", 0, 0, "6B 0A 94 00 EC", "B2 (UTF-8)" }, - /* 34*/ { UNICODE_MODE, 0, -1, "・", 0, 0, "66 94 00 EC 11", "B1 (Shift JIS) single-byte codepoint A5 (same bytes as ¥ ISO 8859-1 above, so ambiguous)" }, + /* 34*/ { UNICODE_MODE, 0, -1, "・", ZINT_WARN_NONCOMPLIANT, 0, "Warning 66 94 00 EC 11", "B1 (Shift JIS) single-byte codepoint A5 (same bytes as ¥ ISO 8859-1 above, so ambiguous)" }, /* 35*/ { UNICODE_MODE, 3, -1, "・", ZINT_ERROR_INVALID_DATA, -1, "Error 564: Invalid character in input data for ECI 3", "" }, /* 36*/ { UNICODE_MODE, 20, -1, "・", 0, 20, "71 46 69 40 EC", "ECI-20 B1 (Shift JIS) single-byte codepoint A5" }, /* 37*/ { UNICODE_MODE, 26, -1, "・", 0, 26, "71 A6 FB EF 69 40 EC", "ECI-26 B3 (UTF-8)" }, @@ -2821,7 +4341,7 @@ static void test_rmqr_input(int index, int generate, int debug) { /* 41*/ { UNICODE_MODE, 20, -1, "¿", ZINT_ERROR_INVALID_DATA, -1, "Error 800: Invalid character in input data", "¿ not in Shift JIS" }, /* 42*/ { UNICODE_MODE, 26, -1, "¿", 0, 26, "71 A6 B0 AF C0", "ECI-26 B2 (UTF-8)" }, /* 43*/ { DATA_MODE, 0, -1, "¿", 0, 0, "6B 0A FC 00 EC", "B2 (UTF-8)" }, - /* 44*/ { UNICODE_MODE, 0, -1, "ソ", 0, 0, "66 FC 00 EC 11", "B1 (Shift JIS) single-byte codepoint BF (same bytes as ¿ ISO 8859-1 above, so ambiguous)" }, + /* 44*/ { UNICODE_MODE, 0, -1, "ソ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 66 FC 00 EC 11", "B1 (Shift JIS) single-byte codepoint BF (same bytes as ¿ ISO 8859-1 above, so ambiguous)" }, /* 45*/ { UNICODE_MODE, 3, -1, "ソ", ZINT_ERROR_INVALID_DATA, -1, "Error 564: Invalid character in input data for ECI 3", "" }, /* 46*/ { UNICODE_MODE, 20, -1, "ソ", 0, 20, "71 46 6F C0 EC", "ECI-20 B1 (Shift JIS) single-byte codepoint BF" }, /* 47*/ { UNICODE_MODE, 26, -1, "ソ", 0, 26, "71 A6 FB EF 6F C0 EC", "ECI-26 B3 (UTF-8)" }, @@ -2829,26 +4349,26 @@ static void test_rmqr_input(int index, int generate, int debug) { /* 49*/ { UNICODE_MODE, 0, -1, "~", 0, 0, "65 F8 00 EC 11", "B1 (ASCII) (same bytes as ‾ Shift JIS below, so ambiguous)" }, /* 50*/ { UNICODE_MODE, 3, -1, "~", 0, 3, "70 36 5F 80 EC", "ECI-3 B1 (ASCII)" }, /* 51*/ { UNICODE_MODE, 20, -1, "~", ZINT_ERROR_INVALID_DATA, -1, "Error 800: Invalid character in input data", "tilde not in Shift JIS (codepoint used for overline)" }, - /* 52*/ { UNICODE_MODE, 0, -1, "‾", 0, 0, "65 F8 00 EC 11", "B1 (Shift JIS) single-byte codepoint 7E (same bytes as ~ ASCII above, so ambiguous)" }, + /* 52*/ { UNICODE_MODE, 0, -1, "‾", ZINT_WARN_NONCOMPLIANT, 0, "Warning 65 F8 00 EC 11", "B1 (Shift JIS) single-byte codepoint 7E (same bytes as ~ ASCII above, so ambiguous)" }, /* 53*/ { UNICODE_MODE, 3, -1, "‾", ZINT_ERROR_INVALID_DATA, -1, "Error 564: Invalid character in input data for ECI 3", "" }, /* 54*/ { UNICODE_MODE, 20, -1, "‾", 0, 20, "71 46 5F 80 EC", "ECI-20 B1 (Shift JIS) (to single-byte tilde codepoint 7E, so byte mode)" }, /* 55*/ { UNICODE_MODE, 26, -1, "‾", 0, 26, "71 A6 F8 A0 2F 80 EC", "ECI-26 B3 (UTF-8)" }, /* 56*/ { DATA_MODE, 0, -1, "‾", 0, 0, "6F 8A 02 F8 00", "B3 (UTF-8)" }, - /* 57*/ { UNICODE_MODE, 0, -1, "点", 0, 0, "8B 67 C0 EC 11", "K1 (Shift JIS)" }, + /* 57*/ { UNICODE_MODE, 0, -1, "点", ZINT_WARN_NONCOMPLIANT, 0, "Warning 8B 67 C0 EC 11", "K1 (Shift JIS)" }, /* 58*/ { UNICODE_MODE, 3, -1, "点", ZINT_ERROR_INVALID_DATA, -1, "Error 564: Invalid character in input data for ECI 3", "" }, /* 59*/ { UNICODE_MODE, 20, -1, "点", 0, 20, "71 48 B6 7C 00", "ECI-20 K1 (Shift JIS)" }, /* 60*/ { UNICODE_MODE, 26, -1, "点", 0, 26, "71 A6 F9 E0 AE 40 EC", "ECI-26 B3 (UTF-8)" }, /* 61*/ { DATA_MODE, 0, -1, "点", 0, 0, "6F 9E 0A E4 00", "B3 (UTF-8)" }, /* 62*/ { DATA_MODE, 0, -1, "\223\137", 0, 0, "6A 4D 7C 00 EC", "B2 (Shift JIS) (not full multibyte)" }, /* 63*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "\223\137", 0, 0, "8B 67 C0 EC 11", "K1 (Shift JIS)" }, - /* 64*/ { UNICODE_MODE, 0, -1, "¥・点", 0, 0, "71 72 96 4D 7C", "B4 (Shift JIS) (optimized to byte mode only)" }, + /* 64*/ { UNICODE_MODE, 0, -1, "¥・点", ZINT_WARN_NONCOMPLIANT, 0, "Warning 71 72 96 4D 7C", "B4 (Shift JIS) (optimized to byte mode only)" }, /* 65*/ { UNICODE_MODE, 3, -1, "¥・点", ZINT_ERROR_INVALID_DATA, -1, "Error 564: Invalid character in input data for ECI 3", "" }, /* 66*/ { UNICODE_MODE, 20, -1, "¥・点", 0, 20, "71 47 17 29 64 D7 C0", "ECI-20 B4 (Shift JIS)" }, /* 67*/ { UNICODE_MODE, 26, -1, "¥・点", 0, 26, "71 A7 18 54 BD F7 B4 BC F0 57 20 EC", "ECI-26 B8 (UTF-8)" }, /* 68*/ { DATA_MODE, 0, -1, "\134\245\223\137", 0, 0, "71 72 96 4D 7C", "B8 (Shift JIS)" }, /* 69*/ { DATA_MODE, 0, -1, "¥・点", 0, 0, "71 85 4B DF 7B 4B CF 05 72 00 EC 11", "B8 (UTF-8)" }, - /* 70*/ { UNICODE_MODE, 0, -1, "点茗", 0, 0, "93 67 F5 54 00", "K2 (Shift JIS)" }, - /* 71*/ { UNICODE_MODE, 0, -1, "点茗テ点茗テソ", 0, 0, "8C D9 FD 55 06 95 B3 FA AA 0D 2B 0D F8 EC 11 EC 11 EC 11", "K6 B1 (Shift JIS)" }, + /* 70*/ { UNICODE_MODE, 0, -1, "点茗", ZINT_WARN_NONCOMPLIANT, 0, "Warning 93 67 F5 54 00", "K2 (Shift JIS)" }, + /* 71*/ { UNICODE_MODE, 0, -1, "点茗テ点茗テソ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 8C D9 FD 55 06 95 B3 FA AA 0D 2B 0D F8 EC 11 EC 11 EC 11", "K6 B1 (Shift JIS)" }, /* 72*/ { DATA_MODE, 0, -1, "\223\137\344\252\203\145\223\137\344\252\203\145\277", 0, 0, "6D 93 5F E4 AA 83 65 93 5F E4 AA 83 65 BF 00 EC 11 EC 11", "B13 (Shift JIS)" }, /* 73*/ { DATA_MODE, 0, ZINT_FULL_MULTIBYTE, "\223\137\344\252\203\145\223\137\344\252\203\145\277", 0, 0, "8C D9 FD 55 06 95 B3 FA AA 0D 2B 0D F8 EC 11 EC 11 EC 11", "K6 B1 (Shift JIS) (full multibyte)" }, /* 74*/ { UNICODE_MODE, 0, -1, "áA", 0, 0, "6B 85 04 00 EC", "B2 (ISO 8859-1)" }, @@ -2862,11 +4382,11 @@ static void test_rmqr_input(int index, int generate, int debug) { /* 82*/ { UNICODE_MODE, 6, -1, "ĸ", 0, 6, "70 66 68 80 EC", "ECI-6 B1 (ISO 8859-4)" }, /* 83*/ { UNICODE_MODE, 0, -1, "Ș", ZINT_WARN_USES_ECI, 18, "Warning 71 26 6A 80 EC", "ECI-18 B1 (ISO 8859-16)" }, /* 84*/ { UNICODE_MODE, 18, -1, "Ș", 0, 18, "71 26 6A 80 EC", "ECI-18 B1 (ISO 8859-16)" }, - /* 85*/ { UNICODE_MODE, 0, -1, "テ", 0, 0, "88 69 40 EC 11", "K1 (SHIFT JIS)" }, + /* 85*/ { UNICODE_MODE, 0, -1, "テ", ZINT_WARN_NONCOMPLIANT, 0, "Warning 88 69 40 EC 11", "K1 (SHIFT JIS)" }, /* 86*/ { UNICODE_MODE, 20, -1, "テ", 0, 20, "71 48 86 94 00", "ECI-20 K1 (SHIFT JIS)" }, /* 87*/ { UNICODE_MODE, 20, -1, "テテ", 0, 20, "71 49 06 94 34 A0 EC", "ECI-20 K2 (SHIFT JIS)" }, /* 88*/ { UNICODE_MODE, 20, -1, "\\\\", 0, 20, "71 49 00 7C 03 E0 EC", "ECI-20 K2 (SHIFT JIS)" }, - /* 89*/ { UNICODE_MODE, 0, -1, "…", 0, 0, "88 08 C0 EC 11", "K1 (SHIFT JIS)" }, + /* 89*/ { UNICODE_MODE, 0, -1, "…", ZINT_WARN_NONCOMPLIANT, 0, "Warning 88 08 C0 EC 11", "K1 (SHIFT JIS)" }, /* 90*/ { UNICODE_MODE, 21, -1, "…", 0, 21, "71 56 61 40 EC", "ECI-21 B1 (Win 1250)" }, /* 91*/ { UNICODE_MODE, 0, -1, "Ґ", ZINT_WARN_USES_ECI, 22, "Warning 71 66 69 40 EC", "ECI-22 B1 (Win 1251)" }, /* 92*/ { UNICODE_MODE, 22, -1, "Ґ", 0, 22, "71 66 69 40 EC", "ECI-22 B1 (Win 1251)" }, @@ -3007,7 +4527,7 @@ static void test_rmqr_optimize(int index, int generate, int debug) { /* 2*/ { UNICODE_MODE, "0123456789", -1, 0, "34 06 2B 35 34 80 EC", "N10 (nayuki.io - pure numeric)" }, /* 3*/ { UNICODE_MODE, "ABCDEF", -1, 0, "4C 73 51 4A 85 00 EC", "A6 (nayuki.io - pure alphanumeric)" }, /* 4*/ { UNICODE_MODE, "wxyz", -1, 0, "71 DD E1 E5 E8", "B4 (nayuki.io - pure byte)" }, - /* 5*/ { UNICODE_MODE, "「魔法少女まどか☆マギカ」って、 ИАИ desu κα?", -1, 0, "(53) 8E 80 D6 00 4F C0 57 6A B5 C2 B8 14 70 94 81 64 37 A1 8D 0C 50 0D 82 82 14 40 00 80", "K29 (nayuki.io - pure kanji)" }, + /* 5*/ { UNICODE_MODE, "「魔法少女まどか☆マギカ」って、 ИАИ desu κα?", -1, ZINT_WARN_NONCOMPLIANT, "Warning (53) 8E 80 D6 00 4F C0 57 6A B5 C2 B8 14 70 94 81 64 37 A1 8D 0C 50 0D 82 82 14 40 00 80", "K29 (nayuki.io - pure kanji)" }, /* 6*/ { UNICODE_MODE, "012A", -1, 0, "48 00 43 20 EC", "A4" }, /* 7*/ { UNICODE_MODE, "0123A", -1, 0, "28 06 1A 12 80", "N4 A1 (nayuki.io - alpha/numeric)" }, /* 8*/ { UNICODE_MODE, "0a", -1, 0, "68 C1 84 00 EC", "B2 (nayuki.io - numeric/byte)" }, @@ -3015,15 +4535,15 @@ static void test_rmqr_optimize(int index, int generate, int debug) { /* 10*/ { UNICODE_MODE, "ABCa", -1, 0, "71 05 09 0D 84", "B4 (nayuki.io - alphanumeric/byte)" }, /* 11*/ { UNICODE_MODE, "ABCDa", -1, 0, "48 73 51 4B 2C 20 EC", "A4 B1 (same bits as B5)" }, /* 12*/ { UNICODE_MODE, "THE SQUARE ROOT OF 2 IS 1.41421356237309504880168872420969807856967187537694807317667973799", -1, 0, "(48) 46 A9 52 9A A0 D5 42 66 E6 F8 A1 4F 62 3E 56 CC D4 40 2B 98 2C F1 AB 19 2E A2 F8 61", " A26 N65 (nayuki.io - alpha/numeric)" }, - /* 13*/ { UNICODE_MODE, "Golden ratio φ = 1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374......", -1, 0, "(73) 65 11 DB DB 19 19 5B 88 1C 98 5D 1A 5B C8 20 F4 C8 0F 48 0C 4B 8B 24 D4 10 FB 97 6E", "B20 N100 A6 (nayuki.io - alpha/numeric/byte)" }, - /* 14*/ { UNICODE_MODE, "こんにちwa、世界! αβγδ", -1, 0, "84 09 88 5C 42 92 13 F6 B7 76 18 14 19 0A 28 A4 58 14 92 08 40 FF 88 00 40 22 02", "K4 B7 K4 (nayuki.io - kanji/european)" }, + /* 13*/ { UNICODE_MODE, "Golden ratio φ = 1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374......", -1, ZINT_WARN_NONCOMPLIANT, "Warning (73) 65 11 DB DB 19 19 5B 88 1C 98 5D 1A 5B C8 20 F4 C8 0F 48 0C 4B 8B 24 D4 10 FB 97 6E", "B20 N100 A6 (nayuki.io - alpha/numeric/byte)" }, + /* 14*/ { UNICODE_MODE, "こんにちwa、世界! αβγδ", -1, ZINT_WARN_NONCOMPLIANT, "Warning 84 09 88 5C 42 92 13 F6 B7 76 18 14 19 0A 28 A4 58 14 92 08 40 FF 88 00 40 22 02", "K4 B7 K4 (nayuki.io - kanji/european)" }, /* 15*/ { UNICODE_MODE, "6547861663com.acme35584af52fa3-88d0-093b-6c14-b37ddafb59c528908608sg.com.dash.www05303790265903SG.COM.NETS46967004B2AE13344004SG.SGQR209710339382.6359SG8236HELLO FOO2517Singapore3272B815", -1, 0, "(152) 20 AA 3B 12 29 8D 97 B1 B7 B6 97 30 B1 B6 B2 99 9A 9A 9C 1A 30 B3 1A 99 33 30 99 96", "N10 B47 N9 B15 N14 A38 N12 A25 B8 A8 (nayuki.io - SGQR alpha/numeric/byte)" }, - /* 16*/ { UNICODE_MODE, "2004年大西洋颶風季是有以来造成人失惨重的大季之一,于2004年6月1日正式始,同年11月30日束,上的日期界定了一年中大多数气旋在大西洋形成的段lll ku", -1, 0, "(127) 20 43 21 21 87 27 32 95 77 90 AD F0 33 D5 CF 0E BA 58 46 17 22 19 0C 62 5D 62 DB 14", "N4 K24 N4 B6 K7 B6 K26 B6 (nayuki.io - kanji/byte/numeric, non-Shift JIS removed)" }, + /* 16*/ { UNICODE_MODE, "2004年大西洋颶風季是有以来造成人失惨重的大季之一,于2004年6月1日正式始,同年11月30日束,上的日期界定了一年中大多数气旋在大西洋形成的段lll ku", -1, ZINT_WARN_NONCOMPLIANT, "Warning (127) 20 43 21 21 87 27 32 95 77 90 AD F0 33 D5 CF 0E BA 58 46 17 22 19 0C 62 5D 62 DB 14", "N4 K24 N4 B6 K7 B6 K26 B6 (nayuki.io - kanji/byte/numeric, non-Shift JIS removed)" }, /* 17*/ { UNICODE_MODE, "AB1234567A", -1, 0, "4A 39 A0 BC 45 8E 72 8A 00 EC 11 EC", "A10" }, /* 18*/ { UNICODE_MODE, "AB12345678A", -1, 0, "42 39 A5 03 DB 91 39 04 A0 EC 11 EC", "A2 N8 A1" }, - /* 19*/ { UNICODE_MODE, "テaA1", -1, 0, "76 0D 95 85 04 C4 00", "B4" }, - /* 20*/ { UNICODE_MODE, "テaAB1", -1, 0, "6E 0D 95 85 19 CD 04", "B3 A3" }, - /* 21*/ { UNICODE_MODE, "貫やぐ識禁ぱい再2間変字全ノレ没無8裁花ほゃ過法ひなご札17能つーびれ投覧マ勝動エヨ額界よみ作皇ナヲニ打題ヌルヲ掲布益フが。入35能ト権話しこを断兆モヘ細情おじ名4減エヘイハ側機", -1, 0, "(152) 82 0E A2 16 20 97 28 BD 02 C1 4F 09 12 61 08 04 A0 83 AA 3E 3D 43 4C 13 0D 68 73 1F", "K8 N1 K8 N1 K10 N2 K33 N2 K16 N1 K7" }, + /* 19*/ { UNICODE_MODE, "テaA1", -1, ZINT_WARN_NONCOMPLIANT, "Warning 76 0D 95 85 04 C4 00", "B4" }, + /* 20*/ { UNICODE_MODE, "テaAB1", -1, ZINT_WARN_NONCOMPLIANT, "Warning 6E 0D 95 85 19 CD 04", "B3 A3" }, + /* 21*/ { UNICODE_MODE, "貫やぐ識禁ぱい再2間変字全ノレ没無8裁花ほゃ過法ひなご札17能つーびれ投覧マ勝動エヨ額界よみ作皇ナヲニ打題ヌルヲ掲布益フが。入35能ト権話しこを断兆モヘ細情おじ名4減エヘイハ側機", -1, ZINT_WARN_NONCOMPLIANT, "Warning (152) 82 0E A2 16 20 97 28 BD 02 C1 4F 09 12 61 08 04 A0 83 AA 3E 3D 43 4C 13 0D 68 73 1F", "K8 N1 K8 N1 K10 N2 K33 N2 K16 N1 K7" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -3220,7 +4740,7 @@ static void test_rmqr_encode(int index, int generate, int debug) { "1000001011111011101110111110000111111010001" "1111111010101010101011101010101010101011111" }, - /* 12*/ { UNICODE_MODE, 2, 1, "点茗点", 0, 7, 43, 1, "R7x43-M with max 3 Kanji", + /* 12*/ { UNICODE_MODE, 2, 1, "点茗点", ZINT_WARN_NONCOMPLIANT, 7, 43, 1, "R7x43-M with max 3 Kanji", "1111111010101010101011101010101010101010111" "1000001001011000100010101001010001111000101" "1011101010110101110111111001011101111111111" @@ -3539,3 +5059,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et norl : */ diff --git a/backend/tests/test_rss.c b/backend/tests/test_rss.c index 05d341a6..0c78b7e1 100644 --- a/backend/tests/test_rss.c +++ b/backend/tests/test_rss.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -173,11 +172,11 @@ static void test_binary_div_modulo_divisor(int index, int generate, int debug) { assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[8192 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -913,11 +912,11 @@ static void test_examples(int index, int generate, int debug) { i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[8192 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -1510,3 +1509,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/test_upcean.c b/backend/tests/test_upcean.c index 0f49d5ee..cd7f4630 100644 --- a/backend/tests/test_upcean.c +++ b/backend/tests/test_upcean.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -129,11 +128,11 @@ static void test_upce_input(int index, int debug) { assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, modules_dump); } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[8192 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].hrt, (int) strlen(data[i].hrt), NULL /*primary*/, escaped, &ret_len); @@ -960,11 +959,11 @@ static void test_encode(int index, int generate, int debug) { assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, data[i].expected); } - if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, debug)) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { int cmp_len, ret_len; char modules_dump[8192 + 1]; assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilZXingCPP(i, symbol, data[i].data, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len); assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len); @@ -1156,3 +1155,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index a35de9c6..16e808b2 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* * Adapted from qrencode/tests/common.c * Copyright (C) 2006-2017 Kentaro Fukuchi @@ -1608,8 +1607,8 @@ int testUtilCmpEpss(const char *eps1, const char *eps2) { char buf1[1024]; char buf2[1024]; size_t len1 = 0, len2 = 0; - char first_line[] = "%!PS-Adobe-3.0 EPSF-3.0\n"; - char second_line_start[] = "%%Creator: Zint "; + static char first_line[] = "%!PS-Adobe-3.0 EPSF-3.0\n"; + static char second_line_start[] = "%%Creator: Zint "; fp1 = fopen(eps1, "r"); if (!fp1) { @@ -2170,7 +2169,7 @@ static char *testUtilBwippEscape(char *bwipp_data, int bwipp_data_size, const ch while (b < be && d < de) { /* Have to escape double quote otherwise Ghostscript gives "Unterminated quote in @-file" for some reason */ /* Escape single quote also to avoid having to do proper shell escaping TODO: proper shell escaping */ - if (*d < 0x20 || *d >= 0x7F || *d == '^' || *d == '"' || *d == '\'') { + if (*d < 0x20 || *d >= 0x7F || *d == '^' || *d == '"' || *d == '\'' || (!zint_escape_mode && *d == '\\')) { if (b + 4 >= be) { fprintf(stderr, "testUtilBwippEscape: double quote bwipp_data buffer full (%d)\n", bwipp_data_size); return NULL; @@ -2244,14 +2243,15 @@ static void testUtilISBNHyphenate(char *bwipp_data, int addon_posn) { /* Create bwipp_dump.ps command and run */ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size) { - const char *cmd_fmt = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s' backend/tests/tools/bwipp_dump.ps"; - const char *cmd_opts_fmt = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s' -so='%s'" - " backend/tests/tools/bwipp_dump.ps"; + static const char cmd_fmt[] = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s'" + " backend/tests/tools/bwipp_dump.ps"; + static const char cmd_opts_fmt[] = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s' -so='%s'" + " backend/tests/tools/bwipp_dump.ps"; // If data > 2K - const char *cmd_fmt2 = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%.2043s' -sd2='%s'" - " backend/tests/tools/bwipp_dump.ps"; - const char *cmd_opts_fmt2 = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%.2043s' -sd2='%s' -so='%s'" - " backend/tests/tools/bwipp_dump.ps"; + static const char cmd_fmt2[] = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%.2043s' -sd2='%s'" + " backend/tests/tools/bwipp_dump.ps"; + static const char cmd_opts_fmt2[] = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%.2043s' -sd2='%s' -so='%s'" + " backend/tests/tools/bwipp_dump.ps"; int symbology = symbol->symbology; int data_len = length == -1 ? (int) strlen(data) : length; @@ -3052,7 +3052,7 @@ int testUtilHaveZXingCPPDecoder(void) { /* Map Zint symbology to ZXing-C++ format name */ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *symbol, const char *source, - const int debug) { + const int length, const int debug) { struct item { const char *name; int define; @@ -3175,7 +3175,7 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym { "", -1, 113, }, { "", -1, 114, }, { "DotCode", BARCODE_DOTCODE, 115, }, - { "", BARCODE_HANXIN, 116, }, + { "HanXin", BARCODE_HANXIN, 116, }, { "", -1, 117, }, { "", -1, 118, }, { "", -1, 119, }, @@ -3236,7 +3236,6 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym } } else if (is_extendable(symbology)) { if (symbology == BARCODE_EANX || symbology == BARCODE_EANX_CHK) { - const int length = (int) strlen(source); if (length < 9) { if (length < 6) { printf("i:%d %s not ZXing-C++ compatible, EAN-5/EAN-2 not supported\n", @@ -3255,32 +3254,47 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym } /* Whether can use ZXing-C++ to check a symbology with given options */ -int testUtilCanZXingCPP(int index, const struct zint_symbol *symbol, const char *source, const int debug) { - return testUtilZXingCPPName(index, symbol, source, debug) != NULL; +int testUtilCanZXingCPP(int index, const struct zint_symbol *symbol, const char *source, const int length, + const int debug) { + return testUtilZXingCPPName(index, symbol, source, length, debug) != NULL; } -int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, char *bits, char *buffer, - const int buffer_size, int *p_cmp_len) { - const char *cmd_fmt = "zxingcppdecoder -width %d -textonly -format %s -zint '%d,%d' -bits '%s'"; +int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, const int length, char *bits, + char *buffer, const int buffer_size, int *p_cmp_len) { + static const char cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -zint '%d,%d' -bits '%s'"; + static const char cs_cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -zint '%d,%d' -bits '%s'" + " -charset %s"; - const int length = (int) strlen(bits); + const int bits_len = (int) strlen(bits); const int width = symbol->width; const int symbology = symbol->symbology; - char *cmd = (char *) testutil_alloca(length + 1024); + char *cmd = (char *) testutil_alloca(bits_len + 1024); const char *zxingcpp_barcode = NULL; const int data_mode = (symbol->input_mode & 0x07) == DATA_MODE; + int set_charset = 0; FILE *fp = NULL; int cnt; buffer[0] = '\0'; - zxingcpp_barcode = testUtilZXingCPPName(index, symbol, source, 0 /*debug*/); + zxingcpp_barcode = testUtilZXingCPPName(index, symbol, source, length, 0 /*debug*/); if (!zxingcpp_barcode) { fprintf(stderr, "i:%d testUtilZXingCPP: no mapping for %s\n", index, testUtilBarcodeName(symbology)); return -1; } - sprintf(cmd, cmd_fmt, width, zxingcpp_barcode, symbology, symbol->option_2, bits); + + if (symbol->eci == 0 && symbol->symbology == BARCODE_HANXIN) { + int converted_len = length; + unsigned char *converted_buf = (unsigned char *) testutil_alloca(converted_len + 1); + set_charset = utf8_to_eci(0, (const unsigned char *) source, converted_buf, &converted_len) != 0; + } + if (set_charset) { + static const char charset[] = "GB18030"; + sprintf(cmd, cs_cmd_fmt, width, zxingcpp_barcode, symbology, symbol->option_2, bits, charset); + } else { + sprintf(cmd, cmd_fmt, width, zxingcpp_barcode, symbology, symbol->option_2, bits); + } if (symbol->debug & ZINT_DEBUG_TEST_PRINT) { printf("i:%d testUtilZXingCPP: cmd %s\n", index, cmd); @@ -3309,9 +3323,10 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, testutil_pclose(fp); - if (data_mode && is_eci_convertible(symbol->eci)) { + if (data_mode && (is_eci_convertible(symbol->eci) || symbol->eci == 899)) { + const int eci = symbol->eci == 899 ? 3 : symbol->eci; int error_number; - const int eci_length = get_eci_length(symbol->eci, (const unsigned char *) buffer, cnt); + const int eci_length = get_eci_length(eci, (const unsigned char *) buffer, cnt); unsigned char *preprocessed = (unsigned char *) testutil_alloca(eci_length + 1); if (eci_length >= buffer_size) { @@ -3319,11 +3334,11 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, index, buffer_size, eci_length, cmd); return -1; } - error_number = utf8_to_eci(symbol->eci, (const unsigned char *) buffer, preprocessed, &cnt); + error_number = utf8_to_eci(eci, (const unsigned char *) buffer, preprocessed, &cnt); if (error_number == 0) { memcpy(buffer, preprocessed, cnt); } else { - if (symbol->eci != 0) { + if (eci != 0) { fprintf(stderr, "i:%d testUtilZXingCPP: utf8_to_eci == %d (%s)\n", index, error_number, cmd); return -1; } else { @@ -3605,16 +3620,16 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in upcean[13] = ' '; expected = upcean; } else if (symbology == BARCODE_EANX && (expected_len == 7 - || (strchr(expected, '+') != NULL && (expected_len == 10 || expected_len == 13)))) { + || (strchr(expected, '+') != NULL && (expected_len == 10 || expected_len == 13)))) { memcpy(upcean, expected, 7); upcean[7] = gs1_check_digit((const unsigned char *) upcean, 7); - if (expected_len == 10) { + if (expected_len == 10) { upcean[8] = ' '; memcpy(upcean + 9, expected + 8, 2); - } else if (expected_len == 13) { + } else if (expected_len == 13) { upcean[8] = ' '; memcpy(upcean + 9, expected + 8, 5); - } + } expected_len++; upcean[expected_len] = '\0'; expected = upcean; @@ -3667,3 +3682,5 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend/tests/testcommon.h b/backend/tests/testcommon.h index aafb5ee8..d54bb77e 100644 --- a/backend/tests/testcommon.h +++ b/backend/tests/testcommon.h @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019 - 2021 Robin Stuart + Copyright (C) 2019-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,14 +27,13 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* * Adapted from qrencode/tests/common.h * Copyright (C) 2006-2017 Kentaro Fukuchi */ -#ifndef TESTCOMMON_H -#define TESTCOMMON_H +#ifndef Z_TESTCOMMON_H +#define Z_TESTCOMMON_H #define ZINT_DEBUG_TEST_PRINT 16 #define ZINT_DEBUG_TEST_LESS_NOISY 32 @@ -177,9 +176,10 @@ int testUtilBwippCmpRow(const struct zint_symbol *symbol, int row, char *msg, co const char *expected); int testUtilHaveZXingCPPDecoder(void); -int testUtilCanZXingCPP(int index, const struct zint_symbol *symbol, const char *data, const int debug); -int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, char *bits, char *buffer, - const int buffer_size, int *p_cmp_len); +int testUtilCanZXingCPP(int index, const struct zint_symbol *symbol, const char *data, const int length, + const int debug); +int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, const int length, char *bits, + char *buffer, const int buffer_size, int *p_cmp_len); int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, int cmp_len, const char *expected, int expected_len, const char *primary, char *ret_buf, int *p_ret_len); @@ -187,4 +187,5 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in } #endif -#endif /* TESTCOMMON_H */ +/* vim: set ts=4 sw=4 et : */ +#endif /* Z_TESTCOMMON_H */ diff --git a/backend/tests/tools/bwipp_dump-barcode.ps.diff b/backend/tests/tools/bwipp_dump-barcode.ps.diff index 7c95d243..ef09d12c 100644 --- a/backend/tests/tools/bwipp_dump-barcode.ps.diff +++ b/backend/tests/tools/bwipp_dump-barcode.ps.diff @@ -1,43 +1,6 @@ ---- /home/mburke/code/gitlost/postscriptbarcode/build/monolithic/barcode.ps 2022-02-10 22:21:47.533942041 +0000 -+++ backend/tests/tools/bwipp_dump.ps 2022-01-02 22:32:35.289274072 +0000 -@@ -206,8 +206,8 @@ - - % --BEGIN RESOURCE gs1lint-- - % --REQUIRES preamble raiseerror-- --%%BeginResource: uk.co.terryburton.bwipp gs1lint 0.0 2021092800 362430 390472 --%%BeginData: 1674 ASCII Lines -+%%BeginResource: uk.co.terryburton.bwipp gs1lint 0.0 2021092800 362243 386853 -+%%BeginData: 1673 ASCII Lines - /setpacking where {pop currentpacking true setpacking} if - 2 dict - dup /raiseerror dup /uk.co.terryburton.bwipp findresource put -@@ -409,7 +409,7 @@ - } bind def - - /lintiban { -- dup length 4 le { pop pop /bwipp.GS1tooShort (IBAN too short) false exit } if -+ dup length 4 lt { pop pop /bwipp.GS1tooShort (IBAN too short) false exit } if - dup true exch { - 1 string dup 0 4 -1 roll put - (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) -@@ -1655,7 +1655,6 @@ - (712) exch dup - (713) exch dup - (714) exch dup -- (715) exch dup - pop - - [ -@@ -7706,7 +7705,7 @@ - % --EXAM: (01)95012345678903(3103)000123 - % --EXOP: - % --RNDR: renlinear renmatrix --%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 2021092800 242827 244887 -+%%BeginResource: uk.co.terryburton.bwipp databarexpanded 0.0 2021092800 242723 244887 - %%BeginData: 886 ASCII Lines - /setpacking where {pop currentpacking true setpacking} if - 1 dict -@@ -15180,8 +15179,8 @@ +--- /home/mburke/code/bwipp/postscriptbarcode/build/monolithic/barcode.ps 2022-04-04 14:55:50.742795871 +0100 ++++ backend/tests/tools/bwipp_dump.ps 2022-04-09 18:28:15.057483295 +0100 +@@ -15187,8 +15187,8 @@ } bind /fime { /sbs [2.25 6.75 2.25 15.75 2.25 6.75 2.25] def @@ -48,7 +11,7 @@ } bind >> def -@@ -26438,34 +26437,80 @@ +@@ -26445,34 +26445,80 @@ pop } ifelse @@ -148,7 +111,7 @@ end -@@ -26524,7 +26569,7 @@ +@@ -26531,7 +26577,7 @@ pop } ifelse @@ -157,7 +120,7 @@ % Get the result of encoding with ean8 and gs1-cc options (lintype) (ean8) put -@@ -26532,29 +26577,75 @@ +@@ -26539,29 +26585,75 @@ options (dontdraw) true put % Plot the linear part @@ -253,7 +216,7 @@ end -@@ -26613,34 +26704,80 @@ +@@ -26620,34 +26712,80 @@ pop } ifelse @@ -353,7 +316,7 @@ end -@@ -26714,34 +26851,80 @@ +@@ -26721,34 +26859,80 @@ /opt options >> def @@ -453,7 +416,7 @@ end -@@ -26800,7 +26983,7 @@ +@@ -26807,7 +26991,7 @@ pop } ifelse @@ -462,7 +425,7 @@ options (lintype) (databaromni) put options (linkage) true put -@@ -26811,7 +26994,7 @@ +@@ -26818,7 +27002,7 @@ linear options //databaromni exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -471,7 +434,7 @@ % Plot the separator /sepfinder { -@@ -26842,20 +27025,66 @@ +@@ -26849,20 +27033,66 @@ sep 0 [0 0 0] putinterval sep sep length 4 sub [0 0 0 0] putinterval 18 sepfinder 64 sepfinder @@ -550,7 +513,7 @@ end -@@ -26913,7 +27142,7 @@ +@@ -26920,7 +27150,7 @@ pop } ifelse @@ -559,7 +522,7 @@ options (lintype) (databarstacked) put options (linkage) true put -@@ -26924,7 +27153,7 @@ +@@ -26931,7 +27161,7 @@ linear options //databarstacked exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -568,7 +531,7 @@ % Plot the separator /sepfinder { -@@ -26952,20 +27181,52 @@ +@@ -26959,20 +27189,52 @@ sep 0 [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval 18 sepfinder @@ -633,7 +596,7 @@ end -@@ -27023,7 +27284,7 @@ +@@ -27030,7 +27292,7 @@ pop } ifelse @@ -642,7 +605,7 @@ options (lintype) (databarstackedomni) put options (linkage) true put -@@ -27034,7 +27295,7 @@ +@@ -27041,7 +27303,7 @@ linear options //databarstackedomni exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -651,7 +614,7 @@ % Plot the separator /sepfinder { -@@ -27062,20 +27323,52 @@ +@@ -27069,20 +27331,52 @@ sep 0 [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval 18 sepfinder @@ -716,7 +679,7 @@ end -@@ -27248,7 +27541,7 @@ +@@ -27255,7 +27549,7 @@ pop } ifelse @@ -725,7 +688,7 @@ options (lintype) (databarlimited) put options (linkage) true put -@@ -27259,7 +27552,7 @@ +@@ -27266,7 +27560,7 @@ linear options //databarlimited exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -734,7 +697,7 @@ % Plot the separator mark -@@ -27267,22 +27560,68 @@ +@@ -27274,22 +27568,68 @@ counttomark 1 sub array astore /sep exch def pop pop sep 0 [0 0 0] putinterval sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces @@ -772,8 +735,7 @@ + /compsym comp options //gs1-cc exec def + /ccpixs compsym /pixs get def + /ccpixx compsym /pixx get def - -- grestore ++ + /linpixs [ 0 % Begin with left guard space + linsbs { cvi 1 index 0 eq {{1}} {{0}} ifelse repeat } forall % Alternates x 1/0's + ] def @@ -802,7 +764,8 @@ + ] def + /pixx ccpixx 1 add def + } ifelse -+ + +- grestore + /pixy pixs length pixx idiv def + << + /ren //renmatrix @@ -817,7 +780,7 @@ end -@@ -27341,7 +27680,7 @@ +@@ -27348,7 +27688,7 @@ pop } ifelse @@ -826,7 +789,7 @@ options (lintype) (databarexpanded) put options (linkage) true put -@@ -27352,7 +27691,7 @@ +@@ -27359,7 +27699,7 @@ linear options //databarexpanded exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -835,7 +798,7 @@ % Plot the separator /sepfinder { -@@ -27381,20 +27720,60 @@ +@@ -27388,20 +27728,60 @@ 18 98 bot length 13 sub {} for 69 98 bot length 13 sub {} for ] {sepfinder} forall @@ -908,7 +871,7 @@ end -@@ -27452,7 +27831,7 @@ +@@ -27459,7 +27839,7 @@ pop } ifelse @@ -917,7 +880,7 @@ options (lintype) (databarexpandedstacked) put options (linkage) true put -@@ -27463,7 +27842,7 @@ +@@ -27470,7 +27850,7 @@ linear options //databarexpandedstacked exec dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixy) get /linheight exch def @@ -926,7 +889,7 @@ % Plot the separator /sepfinder { -@@ -27489,21 +27868,49 @@ +@@ -27496,21 +27876,49 @@ 19 98 bot length 13 sub {} for 70 98 bot length 13 sub {} for ] {sepfinder} forall @@ -989,7 +952,7 @@ end -@@ -27562,7 +27969,7 @@ +@@ -27569,7 +27977,7 @@ pop } ifelse @@ -998,7 +961,7 @@ options (inkspread) (0) put options (dontdraw) true put -@@ -27589,35 +27996,87 @@ +@@ -27596,35 +28004,87 @@ linear << options {} forall >> //gs1-128 exec dup (sbs) get /linsbs exch def dup (bhs) get 0 get 72 mul /linheight exch def @@ -1100,16 +1063,7 @@ end -@@ -28074,7 +28533,7 @@ - % --EXAM: (235)5vBZIF%!vp1$yUEJ0H%@u`y9Po z7M&UcT)M1GaJ=_k5-&EC@<=*!DG?^U@yh1Mp>4WzLXiNm zkUioa9Q2kzV6mp~ilcGq_dEXU^LfP%=o|c;#Zg(37b_tnlY#@cFbJyzP0 z&2#Gm3E5gn5(*eSj4kE?oR+PXQDdG*VV#r1zprrO=kvo(S#8t3TH^{x)zo~06mJa_ z6P70mfDso=l@(Aqu!#(^fkISE)o$_J5(#_A8(J}2`-b!=7*7or74#@73W-kzXchFQQEbB0C=(3$xtmPIu9wfe93o; z2?QVlA*O%g_R;nS;df!@fzKnz|3=^Ujr%>-Xca}wOM^+-B`6m(IsM5<>+jQaQaS?h zBOsd19x;>ddBz)uOI`cstzcT(^iX+xw_4;EmL0oB@r3E4I#sM1@nTDa>Hh9OU!Z%P z=*v*-Dm*X;j(XTk1Vhggan)+ycqf2lvuFT_G5#+w;EHwur>pF3Zm3RwdqqonH0*p_ zwM`OS6>E}=0=uRqC1sXUi!o+X>yEudUsNcUa>m&LLCj7CpRrm2Y`?D&Y;3AFhH296&iMwyR z5)v~HbSC%M@g<(T{>jq0bu(m2$k~`x_z6Y2_!nS~`@EZV+21}Si7L)i()rwZSc?HX z#VFR}f?D?_dp?-Tg4PaAdMxSf!efGrG!h|L09QvKh4-jbpj7w?-KHhs{Cf34@3-26XNZU{964N4cI;Uyyj~@~^@68G5C}G|ZQ^a@+Gz-HRhDA^{IAp{u%U?9znL zRrG|&!w%+Njn${DtWMjoXwn5WK)&-d;3QVCzYb;>&bNYmfoEJ3^qh;q0015X_x!OZ+L^H?B3OwcAgh24o5xLvgaV6< zZzxaaSK;=E#cBZ~!WH%!(`$OOslj*H(+;5W*vTGE1(N6hpshI@hgR#2o2C8#%6{`* z%)G0k8}qTE{e`j}0_g2~X#ZgOn~QrH%#4 zbGwLm&!xVbcHbBbc^2E4&ueccU9%ob?vfS%&+aaBxFA^0U~QF6dCo5nbxSvu%mc9S zYkn%L1E4qkmAP#H0QPN!q9*vTAwsY3B7749qv40 z0-K1G8%dxTOL(NF4??bFZ`n74y(zKyb51EKstQX05QTts94L1`lqWF#XSp!M5Ro8% zUnDEStpTZbdZ*9`Ugc$DNtGDmpZ$#I-=YT}?cwZbdEN29QrAsOv;m9=LL?sY7vdMP zy!ICiSWDeVW7-3=!*k-#qwPJI2YlF%Jk3RsMjvA?(&OZkK^VhNF0$&5dANZQRWK5W zz1t#b&VYBq_lkI2?2c_!u_blelL4c6w&cJWVz0*F6nsPWr-zpzk3)_-UG zHd`WD*AcIxG$nO8GTYb>Zxyt7XywZcO!kSPq%yOaI;JWcdJvc(BAv2~Kfj0fRJ(Ww z#DkTJnoWhMvgm1m8Ye1#*Mm*h$4nvpJX}v}orZ}n&kmXnBd9gD#Ts=Izvu-}bb|=e zV(5k*OlFWY?2}t(Ft7n~0~f}3HbDx2tAa(oKIPAF`JFXmN;qz47#x)V1krZWn5$4^d>zbTMC(=p5akiVuk{kRUX6uI#6>w}kBMFz> z%iV8Jv&F4IBdY_lbTNO0tQu5#`Z2>H8(^o=c`icAWMfl8JzKO!I_7C-EW6KNj&0}_ zc@+N6ihp8d8=jw*y{uJUcK^-8emO zZym0dfJsQV^{0{|_IPn;sG?nRV7#y-kWsj*28s5fI5y^iJ0lKe;qlnK4Gpuk1>enz zNi&R5n$N_>BU9w$5cn0S;TH)<1y_Zm1Q!}{B@XoKKne-ECaPfX7ZMj*?J6G6=Q6!^ zcdojH&rUU6JFqRHl%SkjB z{{RRpJdK0E*k41Sr0){Gmt!#p{`Z*|hpCF{-k zBQD!h!a)DctZ0DwxcBAFxrJ9WK8)MLrw)r$1o~n(v>+bKwUaOx1N(vLe$@rlIrjVI z&Vbhz{|OMmm1sfT0@Sm0?xv>Su|*o^fU+gA#;4#|$IuEi0KkvEeU{Q*EwQU2agJqB z*$Z`U-H&D4aCdH7@YAx_lIB9O|OY|!2v_TJN9$jyEj>hyO3dx zZ_kTN${RvvP*)ng)K;Zo<|N=fpPx{E{avFGR53Z7>fY2A-g5e54rxTfXL}TtuTUSg zQc!Hu0 zq;=Ke449kuR%~B_Tw8{No)*+kiX#yqC+c>H82&|qovTbFy1R`CRDus0UvYI2((eM> z0Rk6Pz{5r!Uika3?VYGGw-zS;Kq-&9J@d0 z{fL05+;Qw)hm;|)eWpbqZ{`wkSH7STPeU~cJa!%3~q zm@+ZYgtUCkK!y4;);KiIDqPVt4Cb_l&VlB987gD!P|8szs_zJ>nT02`M#D1o_H-^{ zw=QeK)V@P7EfXzZbqNeY-=X4yHYjqs9$S_=pNxXzz&2kC3$ySP2ZY2!s|1Q@b?uQX zU4;anxvb>Zxn=r4lzf-OKK6fluGbW}w`Nc(S1pVQ-$V&K<1mkI(F?Pk`U#pCaaY40 zDQxYyeU=$lbf9boxZr6TcA)A%w;6@;7=8ohCgajjGd){s|1S32llr&F#6aJ5no{Ck zPD9f4l)bBtk-Hm+b$#sQaAGE8k4F8GRu8SufLEo*r<`*bHCOUdrs-rYePHs(ESV)K zbEYUgqmC?MN<)ivJ&4=$G6XQ)vL| z@EpH`q(=3~)y4HIG3%&=^@#l;Ah>M9i089d_ zd}5Tb@n(wVP?U;*%PdzVRTQbKVlp}D5h+vHRtDa?-0R-70L0adA8k7 zYbfzly3GfBIy$)v162-{v>!C&qo5hnG4tB`tIT?uv~rOytaf5LX-yZO9y*gXmTz}3 zCcImvpG4rpezB|N9~wGgN;VNjaNt#VulSw*@4g6qO9qOV9(k-E9Nq$pz4=&-qM$9S zCH()osmxxmlC}cW<6R95u(gY`2_=+hc7!$9G7TaOPEQjc?u9W^-g<#D$U+p|M8Ip1oT*{ve%A_ z3A>^8_^kq%9w0G_3>_ntdi20V_t}Co^M|$iX7ENf_}@X{@~gJ>t(||-0T56Eoq6~d zf_JKG7s?Evzw)p{%D(6L;Kcr6XTT__Kqm*El3X>DFf!DzV}qABy*pw0QJ4NyLu?#K zbNQnfQ$XqYZZWDEyf0H`-YGa%HhdIN3Q*<=$y8khzm_5`Z&<3iV#zxQfbgkmoCrX7 zrs+%idM{D!GJPQ~$7f8}871+6wcJ?UOuCnU@P~m4qV%g*{A7(fTRTc|PcRqiaEQ9fI8r~5!FO!dMO4F{14SzRT&J=$#S2+u z8Xr;h%>je^wV}4Vgu2oLlMM+`S}Gk?c325V2m*SJ=v5jCZ$CAPlp`*vQe+c&?ED|k za|>`_9Bu?$+)vTDOxDg4XvmPt&wMMpgYAvaCt5v}6 z7d>jlJ5M-T&^&$VE8vd-Q_iqHFBykM<2gP7ARbs19e0CGU213@a2_{BKc)qLgF`1Y zoqk-~X^FJw-$?2_r8m+ZWBWCTuY|e6A!c6=-#|59UK6T|T=ugRv5Bt(E`$IK*Jc#} zN{*a^s7<6g#gOjVLZy}i;ft5`!qLZxG8UTi`hVs~v2FS!9qHW&1$vuz_C$c!LKRQ! zUcc6-%dU6B@Q6HMqAi0Mz^xkMuBtKN%SH@czfS{JbC9Ffhl>p?Vqfia7ch;+d&i zs3lE)bG>>}w}?55guWOd@jO z1P;6-i6Q!;!>9m#?LpgFXWY>$Ge+mfXoug$+UpdtwDXkaEZin zgo%z!VJWgIZE%hMcjIwy$g-K$e)nH!Zd=SkJny2ww z$#lTy!Xjo&tU~YBe!W32YTTQh3Gog)dfINE&hDLVb3$}veT`NLZ~NZuAfjhNe_tcq zGOQVO9~+hfRxNN&qy3VOk8L)v>9~Uz9&^C|id*GGK5l_fN5G@+eYasOjq`3syh?@# z5KM8(2zX)%aH`k*55=^81KI>g;7#hwcg`jX_Q&NKp6Rz94Rpe#UQ8Qo2UW=$T!w!7 zA(=%%AX8)zg|(S&4&-?C@1PTuSokv;%M|+~sNC7`iut3d{|Glh0&_C-+lrbn_B(9J zWW|`!wXgmpl3ZJBHQ{;nDkQw&ONV>|c8uxQu7Po|_?&&~aLYMyMvhSV;}uNPNMY4d zzq=j1>QxKcJi^`=F4uorGT5`u6Vcx`28I7k4z}A&lLnvts6Rgi(j}DIn)gd9q4DgO zVLC!Gh6+aes`pC{$rCnOGd`rbEnR-k`35dYy2*B&(XJjAgI%?rTy5ko`j2m6;q2)u zR!bMhn96XaL++vlJdCgSFJDdu(ncv|8(b*s+${L*J3j)kvi)`@ zfArQjCy+#9t*pHqurKzmjb*S073Tr~ZK_!dzg|Ywd>>peaIGZ&Jb%0yNUfV8#O7%C zvE$?SxsYA{D?UIUME6E0_SFCwN5mZx*#W*>r`~w~iY#_jeCe=fq5GSk&L7FO2xC%O zpZvrS_;#+=+dap5$-X~wW^WAFtso&r4Mt@QM&zu6!U>J@fr`w@=j}NK5+lAMfVgx& z#N5f;78`r3CZlv=FRjd3I5JRKU6%5NFo00%R;iEEbxs;lb(Q}lHO~Oua1WpBGg3#k zLq&SjZT^9ETiJs~8uR84GdkOdQyh~h3VPUu^8FH@D<_1U966+mJx|3tCTK|Q@9W1E zh`U?sjtq08(!?#~j8lg&EAFWg6Vw}6lr06sv*}*G9a91K`acgFQ6ET7tb_PAR;%sN zZ@_Dl7;8K1ha5>Q4M`JHk4!(itU}E^y~a1_NI}q2i5{AA=eLsw%1b)2R0}+)MwK7y zE7YJ4Yivw*KCk8<3%&I)EJKS`1kndimV(-CIl~fU;NgGLd~UixrT!K65`9<)jU`j= z7JJurJ9aH8LQ63$M0!OaSTRA|l3VCEMc`?Ytdz*_AM1yi_Dg~GwCk|=P8as_*2Al* zFCm3dWuF3slFDh&z)VN;08^E_Id1+I8*+yD@9!y_T@&~ZMpG$AP!Ln}bCs)Ma807( zgTQueNr;LsJ{QYU;gl@Z{-dEMxlRXmB{-(XWvcUolh9&!2eP!ng>3zDI?U9A2~D#v z)puuQ$PJS;+T)!Wsfn34d9=lMcPzN7qZ9O(L6!#w?z8Ti`pQ|jT&#}~Btmr*?a%y9 zsGLETT}%{O?h`-tt<>kAf?xjkcpC4qGPc-ME=y9JallVc75#K(sze5qFmCKf*m}ak ziymoJ=){Mf8oZ`Fyn^^2JTrJih>9!9Q3{l2FO^(z1Pl*PoXdzr2ZUBAA`Lup!KFLV_0>?IvXvRS1B6Y1ev{Y@m8d1#u|7th}OrRM}?R}8v-2@dH<7Ok$w}P^mLiMxx{sR zuBeq*d~ucMBI3u7F=b?yv_~76QTr3WnT$@Mi`00s21;1jd^E%~*WaFzvF=Q0D7r0k z;;y^jI(4bU(K_kf4PoT(0OOcXbNDj=Cy-C9j7h84 zktS>5wdRfn8GJ825u0a93suVYg-(H0#I;~^V=iaCgdQXaR$9k13H>!46Z=Lww%bRw z5$*^JiF*?SH#CWyXwWeQv5ChxQ&<7`X*cit$ogb&D`xtN_I)_yra5icJy+&t+=zM& z)Q90bT!G=)t)j4A#ID8mBs{8TRtZ4);VngR%BuhT_u%aiQg+JnSq90LUZ?=YuhDU6 zFl3I|X-|vTUjo)m78kn`9uGzivhBZpiAto-;#9aVoGe-|b zU?i+Tq9yqId7$XTQ$8&x!6^l4WVZ{;ef*1d;(@qi$gPoKMld6PTdii3>v&ni^PB0d zqNmeVxb2mw59|MKBfhZb*;(5TY0Qbi*7J5Fs%RI@?YyDjH2OLi%AYO=N{d~x7l(8Uib^&>Q_Dx&Z)>g zJKW$};1#{;Ji9+-G@gpRb`+k^MDE}djkp;Zv`nfW=rRYtI zj^)X*ON;UZ77Hl~mzGr`0v{I$%5_EARM#k1!9+wP;S* zU)$mpb@O-7kHy9@)PbQ+Dxzs@J$#!vkvN4|7ydJGm|}mMH}-aIBhJH;zR=_Ldf1cl zTBp-vH{Hu#+XNsVMzr}#uj?m!+-Wv<$AGWBJ*NW?!a>5lKP6-&0|4-ecC2mkF>&*| zUfS^!--%0y`qgH7HQ}JR=PLMAApRt3m;?-h0NP+3VS=sOJrm+?nS44eehgKr>x=UE zz>Z9V5MlqO?wD~vDvow5+(!b%6>pfH`^|~pC;oe!f(f?om?v-;;%d%UvA)Uvfs`s| zKp{oN)$}@FX)eP%e0cT4C@m^rBhc5?DTcA^Rol;06JeS^aA%5a&x-cutj#If;!;ZEmyj#PYdjR^6zaAqNW1py*}4GKz=2^{iJHqtRk{h2^)o+87b^~T0l9ntOsT@3AX;nX1lwUVAG#i4(wkd zYR4bwu%gGWT!MQz#dEH8Ioa>&=`ttH5w}X+uBlu?BvjskLt|n0VJT zj7Di@d8H$12B;a#*wJK$YsE2rZ3bJF_8*#v4=p^F+Gs_hI#mJH93`yj@)ZPdW(;*oo%A_2q5A9W-d1UB z3xmpXmyF_$`cCvsIf`fJ-z0RH~=oo4QnG;YCOIXJ}3Kl`NpW9WeuQtj1c(pS*y! zgBo%EULilJ5glLnZ8rljZVkY3f^{x0{M{%ZPMXL%pm^*L0;9p;B;x9Dm!9L#f+iwP zXTh|D9bS3cgH|?)i#x|0f@=NIG?zh;iKSIeSH%@53?Ywy(pEl3*E^FU-;gxl#eafg zbi$)VF2dub$DiiCR;2OfRmS1@!RU?OOfo5y+U2l!*zuDi@Kc9JuAS^D2g^N9B(Pfo z5!zdKg`RAPo(;`NIUxy6_;Fch>T0S>4rqlIfOK+ct~6==4~HSp6agn&{rU2#gduM|~(!AI{uLK5Mgf z`eafPw@~9Twrp)~dqPJk+1VK-k#D1l{XVQre?|2y#8&3^VI@anTj7p9#mW_hDY|~G z!Tl+DbIC-2&Z4yHj5v(kO()NazYzi)IC%o@TtVP2yRJQRiRpDQjjeZGf(tOA)#svb zPc4!~Mf$yj0=^1@&#kHtkAS#T(vmMM4QXscDWyE_h}-Mmsz;f<+aj>}z^r^wHHi`2W_UrMb*N?FJja!ZqTH1a0qK z)S>03J2sNK;QK7dF(|8x$utc^r@X072)L<@IzE4J*Xm17y_5>oUrWhj!v2gVy8$I1 zSJ-hx0K}t)>7nEH(dchTuZV|$j-G`R}n?hHr0Wc>%<2= zER6qXqZ@z<`r>27@rLXEut1(3<oL>{%2UHODQxXGrrTZrxXz5W(^4sz}cx! zwD-e?GQnqA5eqa>P>iHhN>j<>u&?KtO0$-tAAgDw3~}fUb)j<3I3aHF2$wOwqZ>=f z5UP)G1J#k{MtJjWU5@GSH^K&#B<{qB%>zu8l2^&`zMgkR;>JgQfrww@95E=H zNCp7;k(Qf0!1@>nP}~&;wHN_Uoi9=FP(fv~Kki~B%8NixbGLlj(vxagksN2YuR9a! zV;r@Sie%5o=DGFto8Y8y0}rl2o_t#y0J?N6h}0Wz4nM*gGdY+tq6kDmcF6fzuhM+0 zY4iscX0aOuS&p{yqn}^&ImHq-3Mf?iKOMstw`%YFL0q=M!AP(4D-$=WJGG1=zUs!L zRn?B_)s3Lkm}su#C9RHN8Y=$FSy5ifOXAmgS;<0Ipb8Pt@b+FHx2^?Vnjc65&%FNp z`{mtVR|d5e*VVWz=RkImTxA@9S#IrOuaQ`p|8BD4wch_}aDju2hlacl-tG+nR*=bo zp=*h0DhMm5WJVd*b8K&Gb$V+DMx1@TPS6+YGW0)Z{BI%J7b6TlQ(mhu*Q#!}VTOvr z(0OKKr{nWk!eMq~sMUDC#BXlH6D-jjmTJ3Sj%6j&ZJ2MTbJ}GjPz7tvGsSz#Y)*VA zm;JYUA^s~{KUb8ml(*ivXHXvMk;HHO2F;QZiNhPyVeRO{GvI)nv5byEp%UD=w?$mf zzo<3!S6UMS&s3)3y4<=yp{5C))pr3m`9uwWiZBQP3FaWIVD}9lFzHjoALCRzK;sVl z@a|-_cI;&yBX?jKWimkBgQPLqsp)d$kuBgUL2{4Vf$Ld433?Jw0uh1u5 z(4pd!&z#!tUeA$qj!PrlBK&(@dwtfOCjpVk?qMHJKP@t@jcNyzo|+eF zf8r=!h+eni_26*H#={;Kj@j$k{a|$XpMM38#e+@#civ0p&Nex zD3sM}bCP&or!zH#ydQ#*ThhArnf_!w%bh`FoUbO*=IGliB$04#;;5F!lbQ56eWdQm zpjs$746S~c^crj~-xdT{raJFcm?zxpD3@l8sO}CgxAh4KI}qO83(o{hsy25;z)?Y{ zm3&7`%!_Z+vc57i4&KG2ETI*l5J`{t_pO$hsxbfALzFH{^W=+v{xFL=&bsTAK^j`mz889;O9NGBs8QuU@o)hBgnD0o(LpFa1+M*jcbJpigZN`!gcqG#30u6e? z=qkw^JIU$=`^Y(*D%BFHm^^JcJ|?jHn%+z;2JAgok?um+QYCSui(f%Wq@M;Pv>-J( zZSeK^Jd1A*dz=DbV5izq3=a1nVrO0kFV=eUC4{1$eNw5JS{YZmeBBa!>KW}2>L^nc zM(!aTdVCA+1i2lQbU7ia&MamWL}vkZFhPvf(c@X)7Z~PcJNG}-$3)3!b)(jvT((UH zPzA3%Uyp9YFGlcowadbeiO%xj*BE_25jC$)80_7NP@aI?mzK{EbG$+b7Esa5wtK(b zqa?iwcSJDiP{$E4gi-4V!;{oxywysTaYqSX?pWY2qxi$QzYle2o z5%8}*)Pi>Nb@=OjZI9DBWE$G_M$gNaRgd3@Q(3Y4S|= zyEf_*$aK&j`+qK_yY3jH^GRj(+cdsVT{Y9gz$POMA>F zx#1Kkvi`AQ%F7Sqfp7K3Qlc-TEal5o%1wqDc*w&I^QiaVrtE6Ut}2GvMBQr_YuNZ_ zdtPZ)r_rflWmzs z~lkaCJT?amY-lkYTW; zlkugu#IjB*?kKJYnx#mC*O{agdW;6kdDQZoBKqvUKlxndCa)OTlkL;vTD{axmgnTdN*gv&-^ zcjs_unLSB7x@tw;z~}=&&+PfC=Ji?eQTM|920NW~rg6(QTv}64dbjS!bCuOEumSnY zhS5k~+jyWlxW*64*A;BQ-|n*)U_GucTskbJ?=x!I8uv$qq(+=V)Wpua)bx<_VtmTj zKAN_a6M>-3-{9x-|sTM|iTBdd~iH}R3v zD1)}u#K3*L7vYU;#n-lG9bvBz!wvicsE}J=t?Ee)X!_DvhQI95C=NLCp%w{1565_Y z@fvJ_Rdu-41Fzs1_2tjjJkiI!r4d3bSh$R$8-{|I>|zFm#9$Lw8k`as4r#xW(K*=) z#RgaPM2bQC-}8@mC)^C~UU2~kH%Ih|1XH2uz1*x0F+GAaWwxToQhi9`s%#sy??!(r zNsSY)*nLDk+5CiWfcP6~@L=z%HQJ_~<-EW_GaOfrc|InYH!I#@fYs+njZF6ORRnMJ>~ z!;p*2!Ha={w6Pz?_2gHc>s8k{m(It2R^)$N_W95TU?06y)k1F+MurkXPpx~Ni|vLA zVw<{RHZr}P#}}b!t5QvYK8}i3P5t5Nif*xo@)P2^aDFk=)(NcAqTNsIj;3VKHzFDa zn;xtrl&s63mQDEVVK88((X!0{r!xyS)S*8_pH4O=5MD&I@PFwh{^}yZ z_Hwl-I~LRwVjb~n3CxZM+SB>}$Mg4N4vO{RNX<`TozdKqar*}m)w~7pLagBX?@-p^ zkoq^KMgh*3vwW{gksTL>g_=$FT01+aBT)UZsgf4d8wGc08CUr1kC81T%74#&;wzYx z?-Y5~e>VESPVVj*hON_;3S`0Poid!#(v$Mu4z>SrV7uX2n3%(th#AI)DdtD77 zoC%8QUF%z(6aY)1UcvT5s%f(RkW|M{2WWckgM!j@1UF95@km)vTIjdkg#$$1_DG9# zqc5#XJ^~?P{21~d-I%1;meaQgRYnB1{F`=wwP711`d`+1N~0eyucm8`f(1oeCdh*5 z0KiWKClh~5XoxHu6jU&hj)?Miq36_t*ywn5_18`_j!FT?q4 zYN4R#sE~w1X@DAr58T&`C0jhsNpQHa^nF8WT-xYwHpmHtSo}Z&W9-^B8E}Yp5xW|T zrMabL+b3s(wJ)#IRO?vJv)?(mQY3=46o%vI1oB-(DLnY2zm&c% zG>;d-=4~{kSWB`_GE+XJwRYv_CuIz%T78FzqXYSLqZZ(Y!x1%f_?N|N3_Uys0__N-+Q<(cJ!EXsnCi7wi-7f=f4-{6Zjk8dfctiJp)Y)I*jZ zO*5gyk($pDe$j?7f8elb>jOfn>aR1jPVQt``Adm<^M(OdSbQxHtizs@xkI!|-T?r&MqL;z4v9y~NbRP&o%F ziFk&-0atONtayz{|1%b=RuMa0vygi)hdn$Sezi|X+X9Zge&6!T$o}j8erg1e^ArLn zup7m5qV8o7LIzK?K}AM!W57YY16wKA0fvV;ZAUh5@->nFAt0h2wZ8Y;{!fF3*nS7@ zAA+8;{h8nIY98JmExV^(v=9Z0e9WZRVqy0e1fXVJoi{8Qi@EI@?L%*IC>?;~??2PYvZbQ7b%_5rtVv0^$I zA25eQEAr#TbqQ+3AuY&A_6p+<%>ach7JtPZH(2Ou?`iWYY5LMta{@NMyp>vJcii9` zZ{ZO;b#VYipdftFwoUMWjiG_La<)9t1~a*9lZ%`m^4F-D9?Jzzxkenk)1HUq7?lMY z4ewrOT{)mF73UMs>R+=Xw(ST*=L|No@E%*6Nu{iDv{-df_e$fS$#S6_WD5DSE&DdV zGse0w3f+Tn53~Z^)*HQnn_X4e#;ZaoN}{ZTuwAnl`3Rqj#*kt2x@WA)?A^Xf;!owB z;Cvfbi;QPailtjd9Jb0LdyQtL91YNS!ZGWw^={fE3LJcQO}%ZsauC3zF6N5{crHD% zu<64$s%_=}BRy<38~n@PYStG;q49qPZy;iqx&VnN0;NAhUhO(LJ*nK26lzN|iB;R4 zjT()I6V*T_^em(G)8>P`8!UKqhSr#v|lZVV%XAI!u%)I6#1ej!&qq(L9FKOB}^#(M=LYG`Zv5Ou`~&1G~QZ z=#7uwDEP)yi}h#Nac-r?0;DsV`Fe-Q?lGcbV-d@P2UHFwlvqxEB*uRGh7$!yk=IYu z-kUJBny&A{3j+&B!O433%m)ZNOj*jovQsRrIq|CIaa{nO3_B6**cQ-{s+|AVCU8(cf`ai&7C3k3$Ma;!~PNuJ`lsx;Fvr!_3O-M4#8|uc6 zHH`0Zqmc}8XMGhYC6y^ELxurwy~+=ZKovW(IP?i^h^hohanF-(?D~yJl>0HWP$00I zd#vL+gr_GCTs6>Iuo9eRKF;$j9(5ELCXU!m*IV+zK;|2HYHs3!4NUy8;`CJj*j#o{ z#uIu!JW2l8w6G>_UiqaAIY%rcSmGNENC)MDVI>;NI#X<{FM>*$qyO3BA5>Zw4NaU` z`yp+uQQ5FCpIwipN2L7p(6wEqJs1}UOnTd(y~w}+9pU1mVbNi;t^4B*FM6CA?JV-q zyj>-eCVZG>r+{#v-nTndEp^I$L*`;dD^6jxpnoK4<#YB3MD!-8Q5zYynyR}DO)Z?f zHO~avfh zf89k{_znk$^%3xJ%A}!KZSlEloPpEqXC9Mh%bZECgktkxd>zbk>^gJ;JBr%x`MFjb6VOj#($E2Ahdsh zkOFV2uAd;ELP$p0Sh9vK>po=?Yf*a%qAnxU1?^9$*=d zLTG#6`~;j;QwqfJqbDE@{N216-=6{21G$Qm#8pK-cx@HJDD1oOuOp54Xuh{Fdxm@zd! z()=H4)@a#NAl>tFTWn&Nw>dFRy=r=WyN-#HQLrDMq700kOqW1=?*USw&A5za3?}@$ zXw1)KuF>&<7T{i+F*dd;0YdhUy#LAcCuxE|62Xtqp!@AdCVTff<1st-MEv z@RmiqAHGER@2ltW3jnc*yazI+yW*m`g5LD_DmgV(a-Q>y;iwEDB@E%}sZY1i8T!fc z`&akPkO^v-g~1zMDZktr!mnd0ED1b>%|BJ0Kjb#*SWIKdHJf#h<}_ov;1R3O16pis z`j$)(p^|<+t9bSa=dEC-Dj{IFCzGURtffgfk{bEZPg!v9X?FTI z-aJ`Hn;UNpcYk83^2ETfUcyV3_IuX9JUsUO@?EtGY_&XI?UDwpVEm+ZP63uYJONo2 z24}FFWpQ2jScBiLQ7HELgBHzA2S~GAu5K(3Eq(~;Hp6s`5nk39sm+!Gog*?I>yff7 z`?Z+^{h3BP>*M@awvbraPxIyL&rg3)kq#Ae{6;a#_4s5ucZ2>TOY+abNQ2!>Etd7^ zrM+I`yrFV4V9gK!)=q_;=8EPVmk}_s)Miv+87V9fIc}TGFx-)a$xw>ik>`irNi(qq zig<@X=C`ut1VTnOd%ro^%-25QzCmb*>WAsZ$3L1q`3$^F&bE#meu~;$UIS`oCN$Q- zou@<(r1)&}1tyWrXTpAJ)Gk(#aOi$3i{`TRGCZW(iX(lUkT1y@n=ka?v*-PYz~ct+ zjX>lS&67S65h=w)wcRCEdk-rvX^5)KU=~V}B_mSg#t;J)(e?~7Pz<_q-2Uvr2HdE=7-Oa?Cv#^?#82$@2w803B^aPTzjrb> zyBZCrX#~7GRKJ&~*?K>&p;3@qwG-;iWNpgqkEInR;^28#mb4eBzk$ad3kWzS9492e zkF}NLs>$Fgff*YlC~b!Fgm9HGq*GX*SAB}+uqN%V@cnxyAe9qQa`V>i7z`JSdT;Qy zRWf2W^vc?#H!Z;ej+ZK5LurVf4Q!^3=f4lg>4`2eIKEnp;^rh*P!-=1|D1FNHul^jKGHan~XW)iqB-O>iTo{6sz#>+$aFK+{DaXE)sr zPqI4KP11ToNFOp4D+ZdNg*Ohwu3KD!nG0O~X}7)SO?k8rSaAWNm4lMHs;JJskuVI7 zLRj93#VNd_!l^LMa9zQ3@J)LAuH3D5xPbj(lHa`|zQU!$S(lVAA}aiOSrVoGFlao_ z4y}Ez+LfDL?PPr)2|Aq`V~G?jodO{p_H;QtHJpY=&VYRKROkz9Um;e=w{wOE{Wnm+ zpwW40pt$bU8lbMx^3__MdjgPhr|m-zOUTFgvshX{3|DtXAA06IX$zn^K{ntWx;cT^Si zR@(QbP|(U1<^c8-1#^Ii+r>KyD@Ojm}2PG1(j;LJ4#u$dj?H|tRK!gxqV6!cH|Z>H0uMDs{k5cw~GN=jIco}`I}=9 z7L1)Ixz_DbD4Ti{FO$~lRkVnv@r+&4?M^9cRE!Y@K9DVDTQD};>g?)r-V2|#{rrrQ z359DcTYgMyWX~w}onIjXXM*#>FxqKH+6>IN`8yOKqH)u3L)CgYjRuImW1jHgEo?v?{5Ow>PMq@1&65)5n%`rDOQUtydi5R!lZ;%7B!i(mNKEqpKLI#BH9*!LVn!&?2 zIA9~|PK_+4m$25RCty=6{*ax7h4-o+Nm3cdKYyn7U!SWp9^IDDuzNs}^Jz%B{6COu zifSAxbYd2sl7vD*P!th%L-?~T)DEh> z#A)cSO&61$T8}1QLQ4hX+u<<~3OZjY!|!x*71vEcre4XXU~SD6IC`YCYT2D?63~cd zRsWRU*h_`L%QE!&^kwR0M650rqSHw`f2{{EJ9#<~)rLf8X{FNIxNEmNHWv!(RTF5G zCaxqaR&o>|oIlbVo&;O^1vjWZ%Oh@XHXr5`2biltQTfkMmqAd!xkQ2_;YwCtI&}vZ zb)Up@A#%>Y$4zSO^8vMw5}6c@U;rqW4MxjPCT411Qec6Lai$=p`{#5_iK*IaJwW)d z0k%{6Ueaw_N1nR{kBjF8!qTJclmufqP|0|$AMByRb10?ac|`AhukP=$M;pmNj>g8H zQ`x(0RE?Szuat3Y{CmbByYJ%yHK&s0#(gt0FPHZ~{>pr2{iu~%=&A+A5Yd#0) z2NwEZ4*F%k_1alCCP7!=NT+!CED|(iebDHdqu8T*eUioh2yU&ZbtnRag8J~1xGtV7 zAq1yy%@m>(;--oCQtHw1r~)V`3$-N@GfxdKlQgd60KraLBMaa}JrK5i+*Ay_X%upv zYUI1z$_(x-dP(P2<2X(UNiwe7?<&t^#rS=r6tTzQ@BVgl3Xm47zIC@VDLi9X1X6K& zvGOE$6QGyb#B{Q$$i%t;b0w*p_Fz2tnJkv>VZeRO@TIHjF=V)0G5NpZSE;)_Mo7JS^Ua7TjMg~zlge$$A4E=aX zyETP?CdEOrXf;KpiA@Bm2cjevOPtlLZTFA-xG-QE2KL~wOPHPA-@G^Qc@WPO(gMdM z1SZS5N+ot`df8|5QOe7%F4qk|@ z7;oqN38>GQ{PW=#igy}qTJ3}kqb6a>aGuKOURR0VNCB#0nTW1_>XI2DGh78FX{b5K zfcH>;Kfc{*Abw6+U6#yFmB;5o1uWgDC3=4D*AmZJUQ>Ltt6_JqQzU4q#Q&A+O=(|u zqXx?ALg-(;b97~>JC;zx;X^fZ^EA*o|`wHZ(9y^{i`6aasJDs3n!v6AEWBi{#kx&$jCMDlGOvV~j7e zeQMKO>};+!G-_8PPtsYUJIX2H^Q7-A<8wto&klTHLNu_>6_hc##@?Jm*jlgw*->7GB_B> zN$^rl#VF3wv98-Q#BuR)G5b$)4p{_ZL|!n78rx40i5tr9a)|Rz5G&myr?+5N5Osyi z(`A?#t)p;p|=XXR2b=RBJyC61ZUAnlF+f*p*nqH5gK*@q`R!P8gd*K=V>x=2Tc~fYt7% zSR|WGYn7b${Y|xnhuS^V_TNCqZ8vx=Pa|L(%T|Qf0zBXtvIrsu2MHuQ%qUlj9Yi%z z2t#e!_=(ZL#H`ye?hJXOcG5ed{*8`2n4=pZW%^m@GsP$O*A?MY9*qXN%&NIwrzULu zmC{m2orba|r)K|>=WB#b)r%?lDV7NT_n(I7(F=J~G8u1Jo^3||zfo41MlAm>br48<&T)7~6=TQfsTQF2MyPPCWnwF>A57M0Fb z=#^9DtYl%eF2Zi=303V+E@S4=zLsc~>+pivQO2MP{EBJ&{v{VxTVH~=hhEr^s`KIZ z+nqQ`nh}H&c94>cQC7fEzSg}sbQVM2p=k~hSNVG4>0Dco zaK2PJeq)hr@dV%PI;`?;7uidOAJeqJGGjI zakP^biEKWg(i}pCoJu>ovblT(iZOo8ewx?|@$S5-6}&N0wtzWXwJ7fRTw)J-fRPuZ zXi%@^=7%WCN$b^a-!@>yVLn5n4MYoB1@-C<$Q-JPJVI~-&K3J{lH{Pp82@UX5Q-E3xeM;Fp1XVpo-1;=F1^Nz{}~7p3kO@t z>k0k`wRqhyNYn!KnRqcZNU zyKHgW6ukF#@(`=J$8ahPqAFtwuZ02*ixJhCMJ<%HqAYERhQz;(H#nHsV2ytlW_1zs zxtke3>ubprpU8L_KZnC|Dz>e?ZRs@h#}jn&b=5BHhtKVd@(7wNRq35@o5W>ot$r~J z0WFMphk4Tk!D`X{bl@9Hta({48e}`&HI?DFVVk7J>cO6yOU$bjvqXV!IYF2)^(!@w zNR+b^i(o6kc}3den?JC9>@Gk2!TTWJjEn?J`tc|O3?!r?QOvu3x@jQqD09i^zQNr? zgSGdLFE%v=c>wfSSkdS$+^(B~Kb?pUvdaZL#j-q;E;w}0h>~_e-q2@=@K*V3sbZMD zauw7CY2+aNcL?MN8`%qk^+l=I!kNbN>JUu(B}N?*r(^dCe~$0_Z%!_UPs)cctDB%N z{uI&fuOkG06#(o!rkYjwMg!%cn&e?B6oYMwA>W)URflo0y|uE>tW}^V(vv0VS7C$Q5YxaGWy=i9kSQ$pMQOh6h5XV@)rcR}VndP|8C3wi1vl^uMhAkw2jT}I<$ z2FENHx0GxJ|1ge)a^%_-PeiY|FRw}cAdw_wK6yfE-O)7uoHg{pmRulKV4~8h=6lIr zHx^b-H8b)rK;DSBE>J}MMS}T(G_eg(&(Gm4j)=0uZtPZ3DKGH1BXhsr)vXwrAODVO z9p%W4Gub}aI)y4u(|SRzH>m=HB0!ip=+YoC#!rMf+-m&K@=_Ut+)jQuxsA-EN&nG9 zU*$WazJXv4BpxiH5^{wJ-nni?x>f$B58%U(X!;o4#g>wj{IDhVr9U>$p@07R0j5FD zyF#;@L6Y&q4DM&t3?XdJq8ym@p{3xH${_Me^%#b;W*RJMQk5gHO+>S^`dyTl+w&0?cq>!Rgm2R5;l3bQyBB z$KJyZK`IQ)&>xzq-iB9ckyXw}C%D6o|5@n>e+LO>>Hc4O9*-?M6@NHr@Qg)aOG| z_Sfiaff-sZjSCi>T%v|(o1{D@xX9*s&+^dXfJt-1Mo%Gr!MW*RHX}XSWAHT`9Hh1f z_Upz15C|m!>4y*`V6a;*bg1;%G$g#_v+cG4u{YwBlD=$)JJ;aZ`iGZ-txJn&ua-Y` zb#3W1W;)PQN+Z(05vRK41f2cZoa>f-K8l;w|6tT_7IF|H?gV6;f(^9bJa_oHptN);}0C0 zP~HqtC(=&>JiT{MXl;=U0+duTO4iHJi=FMquy}`niVWlcDk68xT#p$cMy921&-Son zr`c7RqD(|0w1(YB{B-duYYwm^*oia$baxO{WIe@8tMdGVPj4pr z^3Vu7#m5*_1n`A`)WsB8=wQNp8ob^Hdg&x5x8OI33*h9k%wrMg@_&=e+%oscEB zlqZEHE7^pc<$nuQ5b~yQoIU^tKWrHB2D9OS?l;U%_CZG0?yLI@&4?-4wZsySBt}JG8v6No}A}jtUqq8evVplO- z+8e45@J0_bo~B!G?Eu&OLIj;azZj~`Qw<-!Zhe9kl3&^V?hD(VY+SW}J+3|~C61N~ zJu8%*;~Q&|6lUpXV^uV^EUsIaiVZX6LV70wVEkCc_X zF?8UF`~mSdibCU8ZJD+sijZ@X2lBQ!bE&=w3&x4lv`=e~7;6ubp(|KDEAC`T?^ZLMw*hOBZaFU34{60fsZlF+$=Z+Vp_Rwi zpldtfAwYrPX}dL;Ik3_yx@iH{Bk@GkM&7J73IND~8wG2UVQedvXC;bW<4U#Nz|F(O5!xkH|t)2}zh1F`I1p7rllxYZOFCF!mcO zH8D>Eb6^0FlCP>q)eFS=CVJBfz^sha1p?e(gw)&6vD;g>Lt}p9#%{sK%=#JIi@|`w zD@1BZr@G>3S>`8Kj|Z30j`QK`r9^~WFYF3j_#Xsxa7Hmb;$yQ{@Af|k5RJxs?N5tRu0qmcsrO_yaQmLi{*@6+~S75ZTs+L!Z<~z+RUTW`(!jxiv>c)LNlr zMjAID;QD7-NS94VZeqa&dTNnBc+?7c-Nbp{8O#_mi$WMP(0tx@Igv(Dim>efw9@V0 zahI=wbs^YQCaT^VEa*@ZuU}0YmL@Zt%coj|6nD^`ZQcgFKU%LE&{X(gzW? z*ya>1Ern0}icVp`Bt02y$VF%`M0heCb?>uxw1+VuDx}m&D4A{hIZ!cRoSo%7I>{Z{^`dealoWU*91u`FP!w3*U z1@X*gjZ6FXE0QZo#?iFghwSh%1k>o`jCBorSgg+&7gFABv&B!fM+THhj~}M5NNc5} z*hCSQ6tFpAH1YyNRtWx$8#a`yDzuL;(B36t7O;)M>0;fG4gnHq5)Z2|+8`Snn{Dop zQCV_$oQ{LnQ8^ZUbVF-276fpXwe@y4=2{lp?tB03UHUwWzbU~65?!i(dwiL>$=i7u zcSQe5G^M2JBicZ6Ollfm>HbAU+#gXredTCAqJh!4Uu6JSSQs}3j8-R{yEQA%*%2hy z;-gDxz9fNycWv)#?dsXQL_Rmu;_QjB`4_4yHm;P`?GDDPk#@WFL-}XpDRJH`1G<72 zoG`tHQykV3D!8Ev(DF9U#r0!nn0IIz!UG3qc=$Q~i?24K^8w z&+2yrSkIq(=xldB=6af86~GL#L-7Puo!Z#b%w<=R_Y{C8cOvySv(9=I@kvM|Z8g;gqG! zz$RCt<;FG|nXsUA%Ix2YOM-4eM29`?aTlhN3m&WeZbh}VD^x<7JG`Iis68c#U7MUU zw_9)n^bOw6(1Tx(`4x2vRlC}D)Of*YCJ$-3UKUn5zXE@Kv6HO*yR;|AHlYOhkY;1B zT!*Xj;U^bQFNnc#2$`&MpCe99n5F12+NC60-29}$-cj#(YaLMB-N4iachap;YU3)ar`0kxycGjoULRINHcM_R(NOHDX;8W2^!@}2rspY{sJNkIuAFD^l>-I;fMF_Hy zWr(EZq3uGvaeFv9eqR<2ED0I{r_$~GfpVxxjyR=^Vhf1^$V8|NZ%F&f-|@gNZG-}BLZZ#8NT zWf@}+$y9CRRCPwnYSnDQ%W9S8ztz5_Ps-}=&a%IV^eG_{bkdJQ?wh$6$-`G&+By{} z1lOF~$^ospJN95``#2Es)#p#W+DKvq55J8GApH38WXc?n_uPmvPi&B^p}n_W9RJNmJb zG4L0(U|kh)T!y-}A$9Mjx<@leyHik7vkjY-k}244C)#&0PEU!3awoTJ{l}e35C`>P z%&iE@cJbAGqyM#ty&V9iK27)J4!$P3m`x&vor=@Xhn5~KYuX0bNrD5va0Z}S zs8nvxK~bn|V3X|+Qr~&7VWW*}Qv(D%&&#uPYwv-hfR4jyV?Vp`L zYs?XVdH6jKJ-u?Wb3t{+cuQ;m*#8okHAa0(3maUGMdeBlCHt6r7DC3__tMDioDpInD?Ner84JwQq}u+tP5(=QeAoHcc~S}( zW&)DVJy1!x$tAu}*th7A7fm$zjnD`;Mdv84^Yw64u!a$fRA_CBc3in0C&L?!+&Hj! zf&e->&*b3$sH}tv-aA5xOw#4wg)abf)8dfa5<}5kvWsw+wZrs29y?()bLdgyidlo} zfMPtc1pcsPMMi|V8^VRi#?Ux#v$-We$1T}6U{T8a1K#f&b63%<;yh~40O~bq7P=LC zT+iXzYtx^4gh`dyO7YQ{x+;|`EolC0vwk^xk5d$Kqb^I7n2Y*y#aLsGVMx(rZ(l6q z(w}0e{{`Ls$Y>iAJBFop*`t|Lj4n{-v~fyO-C=p%5HAl8Q3 zAQ}ctO0}HgD?aCRK0|wseBq5ofV=mR1H=OH7ql*K!}p66ebbP z2|I$lY!XfUSS4}j-`!cu;b$mgUk`tNT_X*K=5SFTw<0N>&)&}7g7}uaa&KF^3^e4k zenO&89aX@8)zA5nFu>QC1^#&{kbK6~pXm$}(!)SWNQmyNg#+vjlzSFF&lgk{L4%1f zSNJiA)`~1)w>8YFkJ`wU&Gu}P>x{}-d(roh02^}mkGaY1-;`Q2Hr`tKj zwW6D1_J(q!Wde-((>HF8KjS>lwzEAnji0QuKmZlVw?25E4AzRJQu`7bj}bc zmC3h-LTtY*nnK3LY7Cy8Z(X|RcLj_B>PjUd zu@}3S-~+^5ed?o8I1Ei9cSpYYykbI86^@Pin?Y6#>_+F)|4?;@(zw~;PrQ^U@LYg# zL@P0oaLB$hFqhdbt#)9UYT)=rT1)HVIF`I!e2Vrad*2OFDw7!k z*>3ZK7TKlbrWC}IaNphIqIz=}*MtOfM+0T!rXt(&f4h|n;%@ocjJkP~BqcTH6=1%j zXSO|#Sm%|}9)X7W#;!~&r{z^W@d7tTWC?*MY;r`AEcDPfKM5HRE8QzwwUpI5ram~i zo{o{!t0z&vUT|$o4j$1t$Bri#J$>iEDy)c@Fxo5f5T{`dhfc~93+&ALhp1e$RK%m> z8>-Y5pWZMmVv!_|250zhDOxpe0EHCK75sJQ-n{9JRzENbd{buxFPKK;olDTA3A&tE z+jgQ;yK)c0-=iwLzPhqhl$+{1^!%+J*2S<@o2etg$;V-zH8^|F5EYGHUe7}&Mb2+z z*Vj}8YwZbDFJ7mn$*+wRah4LHR+VPJqzueFWoO$wz&1T^YN~oz8-DDI4TSWeo}xuc z(pDrcHWmS%-aVD1m3xQ_JcI?82e`HYA0zq~HgP#gV2SQ(#@UDbz&4IaSe&+oygBGJ zAro{Lj1>z*Q)Ul`bmmI~zX7=*M}Yz?=)b@1+Iu#bX~rQNTAGBQKc0Md_tZ7M>mKqM zVp1JRJCd>!(W*Eot6sQ#lCW9 zM#xb6S)cJ$qaM!6FPgq4O?dV+$%E`dj>${;+>Ol7?RB+o*aI#kR>)r`eW>1Rii(ou z8e467{7aG5=i30qZfN-uXBp$w`9F+nul`?~tbDOYXrQWo+jt}HZewA$v>K>lJvt{? zrrX4u%TliEYq*i3Sdhm8trXz0DX-|5Tf$zBl&w_h(ENCQ6`Iarxi5&Msv`_g`^sG< zI>`?dqXmGdPOKT99SASGA|oty=nrXpz`e8!SXSDY*f8!~T^XdIvYgwtP{`lH-|sy{ z*Z3NS;44W%xy&n%gk~^fw+c5`zBxFs@)|EV4F-JY6xBcl#H5uoSWMgy1_&D*``#aF zt7mMUXD9ZqdhoPCttVo{I6#Jk_`)|CUP;%kF=T}Ukryhb9M=jd;{6FDuPb&8kVa^! zTLVVu=|sLnKtgDZQdejoGSj1O-Mv^(#6_-uwz+N zEy$@>=+*BzS6F6s}#Z2-J)uuTL&2J%=;!3czb^bA`sC`4@pwh^`>Y(o<1c3 zmp=Ub(=@`XLwuk(j&eqb5~9n4#tvMj1B}>}4;v0;Fawc%H)#RhEB;q<~FOpuF_X;kzmaUHXHp(tj!DaZs2_wUSWIw#SeHcX- z6M;^dJ+susbXXtzy(L+?AxT}eB5bCr-T{rG?607TRL?MGzd=SV0#C0#vt1MKk#>cb zX)G^dC+Z)+kFY@^9cUN@`FfXE#2I9E)_1kYv)*D!gYgr$X{d2!RH$38Bi(D zHZ#v~lw=Rv<`R*BAjQ(ITszY+Oaq8(vG6Zx|9;lxZah-XT$jhg@XVY(CZfqOeL~qf z<{FCg9u5!H|g5TTxZh9y&2+@~iRe*luQR%wwIZAO#pX zW1gQqrt=mF9=Fo&cd``B>8Oed$uOARydm{P-F}((`q_~wBmi<`?fI_nGdn-|a3o!4*r2+IC|L!O7@eS)PR2x@=lAQ_+ay-@8#Ln>AsQ3*bVasB_mEIm+iEq` zP7vWluJwY)z-8*`dz-_GSB^|>Abx5UDCpc7P6IUdEBrrP!g)DV63JO;N)FPr!L`4o+5!#pk>iId#z+tB3W1#hR6 z!%kiSQOu3oKbdHuE7~v{O4d?O8kMbBH-*RcCz;r|grdd&*IWMD$R?2e{G6sqD}Fm~ zz>dN#_kAOHrR!J2IfAj^dZQLntz)$6o56A1GD4s2&Vq_bC)u@>qWn4OV=yo)Ya-+!$0AsF|pm?ku<)o6@Db?AthN7FnNIsMcJGTgR2>Mm?K zk}LZs6#50ALFP8KAZEnmRZ#Jvn`2vG6bpc$G}wcoupx7Rsv3Dyt9Ye{qi07XU1p#= zm)r;##9LATY36Yg4dj$IM$<{!#$Yx-o8378=cXgL{gXDACs#+Q9zJxHWzNJ$5PWAi<1Lj4iokG18S20%zwm164b|@a6v&g9 z@mVlIr}D}Ibf;fXSzf}lZSV$F1h`;+pc#bj& zekV{};ie9Z&)s09ClT7@4%563-^(t%=7$Qin*Gl{58Dmeq`l^gPGU|3D*qLzDz7Ix z=e;_E_fEwSQ;>wj$34Xhr!|dnW@WeA4Or@WgF&%@C5YTF87*;w>CbESrA)^MC~Mz# z9i*-K@|AO^3EEEK)PtrurV<2xS|(bg8unY<&cWQ%iBT9ub*;gVQJul~Qk+8t+*t{9YW}RBkQ-} zwx%}3se-ve*}P!5zta+zsGG5BBv$@=hFC6qdpf=hP^|v#wvDStC7J1aKr!JK1jH{; z5(|SbChevB#f8%F z9P2SN(7s{ZsQu=mxw4Dr@!^o&mc{vNc4mmm+9M|azT8o!9*ATW@wfRZNTz1P5y7rC zpZV8wKMzIPMiLOAl#<^XQUnDrk+VSlcPWBfYjOr98 zJott{bP9=ND2_7M`Eh=K@k(!U=>rU-4XTb~uazl`z5pt6SdN)Eb#P5Ur@z7z%P~r- zvNGYc?3P7cEPTIlZIbnmv7Jx^8mb5bdklMZt~T4{Ml#pzlg=jqOkZ*r8&1Lu1;gKl zqvrTXjpnMWMI$uqF+Tp=Dm(FZLDn!e z`ak!y$TKn3))$gnpW?_wt*X-Od@ei8_N_xPvOwmw4RJ9;+58HSP-II@I+vI{_rbEK z`qT#jQmOsTq59k=$iZjlp8a-O8&TsuzW!%?ad8TxrLP=10OxX@V9LxrU>%Wq+n73y z#ozHe7D3@(jgL2a9Y7-R%PgdcX>wH^RZ81p9Qv(SwnBnkQ6)X6u+&BK{nqVh2~&#M z1WBw)Uymni*Bs?QS!ukabrNC`GHpPtWbS zrBW!#G*;4#Q(}TCE9cm^jxi6TC4LY}bVGo!usfuK9)fShZH0-H@iEz4;A2_?Zg|t9 z+xlC%eTm-3^SB1&g$6(yp=97^L+`6`-6ifZ6`V6Ed_D+P#sAu z9$R>^jp+egacdzpYGD-}Vy)ybGTgSrYIjAAuqmZL^f6pEJ8*1BxPET*?}(xPwDKoH zBCWyKNgJAflSaDuC%&+R-%-GJg@brEn`JPE5W`v=b5={Gm)G}Yt9XKKo}Ix z)ySW$MT<+K}Kg3oyZs_DO9ki9j4>+7iGYd(SJ{^(^JKojAr0ADZm9`sFM{*fzEF$c%9) z*Z#O_a`-JzD!PPEmA*ob=4&46nxVZ9k17*D_t4%vf(q~61x#_6$BTTD4_2Wg57(zAoDuu`D(<2EiOIpTaqbtGkzK; zSsXQEtILr<9P3m?Q|~z`j)XHU-1{Knr-76!=5qahHuKh`j%jS=_`w+Vwutx$=~e2QChJ0tekp+xt)k-P2Kkz-4dHKcEHXyw5jvr znZmFnoq++Nyvm6L}I76YX9Vg-_b$2_pJ7DKQFGx~G0Z#`tz=UY6;X$U`Y9V>9& z+*0UW<}cD|xm)s|%Kw%}2X0aXa1KS+ zgS(BbK&LiV`blM%`M6DqVdMAB^uljgED4To$bDX|s?fpWXsG)kg=K0$e2<4EmG*XR zu%V?G4RXqR|Lx-t)2|WDY3L34jH|jo_68q^Vg@9E+0VkGB>p`@BNSF@=yc1gsR91~ zTB*nnRdSK+!cZysMsSC50yOlUbcIEvl^gf4PYvnT!}VxK^F(^$wBJ?BIbM>xAd{D9GcRYkoWdSI|4)BUYEG4K`lUpsUwGBH%`|w45 zMp4AnSDS(v-9U~yG3hvJ=@3O*11JhN32exqRes;fL%RM6idoI(ecFXN<<56HoMO24 zsoc)~#AfEQV7b04-vQ<<0P+b5t$)*f83LHS6-1Vm)&F)`9O!{Ari zejHkxrtR+q;z{v)w`?fbd0~{a?$WaunFYMFxFa${Hxy&PhK8xj8*G=fv=7IT8?Wb@ z9iUXvF=}Jr7uI{7)2m(GkT7%t$z@PrD8v#DL7FMoyhs~Hd;|3?0F2l~XOs;4sUijX zv2lYUxT{i>GWhp~H#O8P>&uP$d~6EDxH8giB<^JucG0Dv1I<9D{uCeZ3611}+foA@ zE|eCOE{HA*IywE}B~6iRZvw6)vyoPzz%IMNmgT$3D4*uR|5TC%%6w1LUJxPU%qC^| zC3TnRj(RCYZn&iKtwe0+k3II!TseN=^l7#j!ygi`1r;6*R;!ii>e(J4dPW4KiK-l2 z8owZrFIUf5(YM-s*Dib7~B# zYw_KT=U1-(da+-9HK&#v7uq+Z4j;-(O`qzE zieN2`{DJy$TpKS{U(?^K9l9csoA}94{A|Wjml{=+$Kgxm>Brh{nUl}Y76M7%<7X(cO5AYG4cS^iVxi~P%T`vuruZ-xX&98oYnR0f8xV9ew3gf?l>?P zvtk&wv&iwHL)jG%x4;*2)OaTF=N*&96UZSThpcTCpemDu4II02Ldw6Ro1-^!|0u)| zs9>>?RvFk$ALGGco0VkQY=r@heyUIs2Qz2JqbCH6%kSfN;ieJb+Y5f8yY;jj>w5{S zS=>`z>=YTyk{vlc0JeSp79y(6A_5*V?_ zh3&XN&b7?hy_K9=+&N|f@@`nL<$`CVKoze9hPE zmhBCAdUE6i18PawWg0Z^Fm5KeZ39_K6yO4X7D~>htS0uer0ZO>w4$0{{as>KKf$=L8exj{) z^&||HH}gJnoXa81S|St~RokIbO`<4NPa#OBreO)^BJH`tQf z2pUJ@AAn?sp-HF%>)0aCF-hH7wM|+7TNrZ>5!YI%o4c-kJ|smJJSbYj>`si1$U?%y zWeky$L1hCSi`f&x33B=`eZVuSGuyHNs$Y&WAlJzbhO6x7da!BZfxTBHe@oc7L5BWM zu0|FwZ#q#}yPk@4%Zb87i*u_7HVwM~Z|dGQmTUPLCM)ph;X#5O#z44Orau(aQtz-* z!SA~@Bpk{V+)75!7ClOf>JymI%$a{t&`$lyc65#p z2t+lDv|}LbwEWJ%CXNqGs6MKx!|^(=0sTe>kyqtvGo;sAx~Cx z@4V}Fw~N$giW=$Y>x&_TLJ5mHz*1H2)@9isWp)V5h>r}1{oMO`aLy&V5o<2Ku@m#R zP%|lDo16mJS{Yz=745hZQ}QG5ws~5#TJBk$EVy8LGsrU4iFB?623L{!D0pAGxisU0 zg;#D_s6nP5$33l&s~;_+K6>F{B?ErF6i4P%W1NIkCkwQ3J3Z%j4%YCpTNgCY5!tJ- z__!VRcnd3O{j@I2j%c52rnfBi9+#GD?PS`Txx7J?6B)yVm#3ZpZT>iZQnby}bmC5- zq(lL2x{x&D1GxHW=#CaR(<^E%%~%zI1XL08?D?0i^CnhHw)* z`59j1e!hRsbuT4}eOPr&7$Q7nN#2Kj8_a`6c3p1x zw;|ztB;f24X<(ZTS%x*F3?9_#LgM=^Ozap^pN{T|I*;H|m@U6jnylge!gW0eN7bDe z3lH>1(ktr?u;53b+5q@6`Cdq%cxdiYhM9~$d%I7(iB{j?_Lz!O5pj2(5Gc*77Zv(F zpKj-CoZ=&sF6P}Vjgs&;4u?hDvm4#5s#&6}&6oYh5p7l5zn0vM^HjEpMgZ4Kw@UNF zLxhIfB-FlW6>dOW?Q@sAgpiscw?in*Jve+KyKTd;WTDhS3$mA*<$jzp%LR~0SH1a5 z)2rIa9OV~y1IX~@#4{OM8&sTNbk8qc-Q1c6;^P}$KoRRsfd#o4>sZu-5M zL>QL&oI_(zUXPXfk6#2&hGdQ2P)lPVVq8EfIxIVOvWclnF%E$8mSa(O$KIR|kr*f@ zGLFlQz0!&Qb)%KJT#JIq;hMKg+S~=@oW>I0V;iiF+N|;nAxsnV{=(WG67W(rx-2mX z=aZVHGI5zPmx3^Xdqtai8=X^+5j=or-VZpPEftK5nMV@G8Od1ZLlKU-#UN1>g+B>= z$z9Ae6*}~ph2K@%sf_6)M&ej}cDb>rX zl3OKkhb@QpM*#ZIGv;-4oTj1S>Xal(9 ze1(#OM+pJG0n?mdurx|eO%xQDJfTHF(v;AP$X_-U&h775IMpE1u>_(bX(S`OGbyMF z8@jPR+{0!xhiuOcmbpPY4Z~M+hHg$L0pB~oamu7c2=YcDjwxKda<1izItI;sZ#3yU zgjp?3pNm4#2r{^y9~`I!wE603M39@0bJb{_+7MTh9{4;EW!jf}#%K0w$th>x!mrzT zvPY=aJBaPrA%qw$=Wf0dw77EfnT({u6LyBdg&GFylM~+!VzHu(3e}83!DWyha-aRE0;7#pT-ZiT z`b;rmr^9Yw*B4N_SeZRe=c~&)&}c}xs;}hEpzaAnG`Ua`7Qu=@0Prx`&@!_0_|OpD zjekNWA9*zndqo$@&1Fs;6(&Qg8BQRrJ`LT3sKgm%AFQfjugQymK+`St<{&NA_Q^q1 zcPSS5BB3L9;Z2x8c9pw*zan-?hn3r0H2C!`ER11gvqnL!ojzB>CN#5C&7aJ|!h6#I zH9*S0Tz$=QM0(U4+R$|+T#n6N@p<%W=zQrn(O%z*XdrQ++$|Af)##!kLgggW50p}1-Ujqmu z@u1o-19QF^9FJG=O7bvuvD*Xz@XIU1)jIKSbs$pqLeLimO&?mq08TroC{SCuVXpCA zWOJS50kr-ZbH;yY(*6*6V26{3{GL@_b3sli_7s%)Ke=*VvH-j3tXrK2x+bY)ETZR| zm|M_LM3h$`oeuG(PcZ7ph=)n!s5FcrzP?;QoYnI%2P4Lg;kqvJ+U^12qn0QM1Oy&! z>=B0r%kPu4iBr5DB(8&gFU@CeBm0n3EX?~6g11_;YB4L6M$HF3y7#$nh)QdEkjFDw znYmqh8iPEHOK$VFf4c9sr8xNy^{7+t*Fy2h8G+hEg*BhI3Z%Ri!q>3C-93f#HCd0D z-PakV|2YrP9xkQWKbZ93NoYT;|LZsC)^18&_WQqRq$14HXcj3kZC6wxmhf$d&ZkJh zb?JYHHDON|gz6k*rWxnML@IYWdOQCSB@pFXs|Pkp*jF_*b z2@Mq+F0bDG9QQ5DkHBba>@sjRqX^q9+2G(!wK>6|pVEY`7LaC$^sj0^h6X3rrws0M zRZcohP-jHi8E&A{zN1e>Exx**71mE+Ye$02mb{e;@t1CFng?5B4L|16(sNl}yLVg^ z)==%AeCpR520~j3m4ZM+cS7^;6NJ)P@q_YLs)vyu-a{rF#cHHxe)1}P{3<$H%2J%Y z_;~r`;OIs{nQ5mYi4H<17FI;UNZ@3$4?Rpp6^$Vk5-kpWPzSh8#4}kq4d>7b73g+= zMA;&cID%!V-^$`rGJPHTqDcmF#5X*rEd{- zMk2;|yfqJZ-3<4htA??Ae_=wkW(9nqi@7 zj`E(LNq8?EXnddNvxZGgKXS*HQ=>H7&hf+zt(6=D*y6W_4yn%yF(xgc6-@yG;EhWi zmcqc=9|qAxf2W+au+G8u2S3%Kv6fH51kmQ~H^+6ON)H)k4D!i9xmYV2F~x*SRysPA zKvj|!H4%)+LZJ8+gN4g|>rHKoiC|>W-=9OeL5esP4L(d-NT~ptjZ~eUE#jK_*si z$jlKYTkGf|kj!o>I3#a=~2 zAuRz)jl?dsz3N!RZYE(KB$?{^`@f{xW_F;a7@GleVDpuMA-6$)Nhz8Rrp_cPi;pi6w3-o$NYRgh=D!~wrdt?Sxz;-^; z!vilyLxy)Tt>V$j4ZFU)o(c`)gN!)8UK^hmsKaV82na1I^IH|XF4^uE9y0jvJp&EE z-?+aXN4tE7Hx*HQQ!|iL1j~bZs^%l+s?Os4^Iq&mEDa0o(e%eKX=1kbCFa5|jlaa3 z%zi`XsZ0-&a@L=6m*ur??bkrG@38`8{Qdy|BBQ8vKfqdfIlB?r%Wp|)&@0|TgTEfP zG}ZnnYr&o4Fli6b{tc@oXqF0oYmC(r?!ti0y4Tt;>Da2J2^@YQE2lxmJ{$y5p3FH6 z@97q2z2nSfTjYV(?n|O{CMD!rkfyZzU0>A6e9{!u$|FVaRdWU3s#WNG3AJ(uPi7?( zEI!T+kW?|`P?uCqKITcAoRxe4Mv6~R1PDuM$FhpIR}6JzCe*al%#PUfPL3T#i#fgs zz;5uJQi28Wp~4vgmhoqj(%{CE(Jp&6^>eYymUhm zG+n&g_GyVvn!dzX?)VPVB3qQ4PoE_v2FWtTW#2_Up|9$SqEsAaYe+ZB(hH}6r1>ut z;o>_*M~Xg-AU3q}bk?L=J5VFaCTOIh#4qcaJ%LM4+=v7(Dpxmzt?8U2mR;DvJTjFf z&aYqLk!ct|Z(s+2GSq#N(l?xtG1lKp$=LZ=v>=;*&Ds5)BAVkD%_3=60lF6+kjOF7 zVoh+=_;YJcWQ+qPbvHbj%(JDmrda9yB3B7bW49FdEV<_qPA2m3`7Z9F;j*0QzT;Y^6WOY41?Z4pz^Tc zJ6d15c#eFCoskCz@Z}m%fZS@QUq4u_Aiba*UuMim>UR>Bv!?E1JE)Yuw+KngX;PNiQLI-L z+u4&Hj+?Y;hwCLeF~JDYkig`_W||7H%voS!ifw+ppe)zk5lUTmWGOfHq%v!Al%q2I znpn*rX&tzt8r}xm%3qL#B#ZjwlEW}BD|-+O=Jkqze!@ESh7F$7qD}KZ*~^F)sUb~! zs5zX;sg#5OJw|9z1#*zcc3ZlKlkyAUu;PFJ#F2y_*rc*OwR1L2H4jUuXy(ShDVYs8 zn;?p=w!IVz>P^o}w|?2l6A~r14#1O{AigR352ywY9?l#bULTQ8-RwWda0;XZj1PNF zTCEc+S=GkqLn41)A96Ei8C@8~tVk-q09qDn$yVMoh2N%(w%Uo}OtnCn^j=80r@mb) zJ>RmX^^)nIkVHxY=dA4?XXYq%qItk%lF^}RdYXg?+(Hv<9V1eabY0f1QogwQeTNF$|LNH z^upjkWhlE01otHf7{gSIv>Tnmy()F#EeCgdHg#NC?G4(Jyaem)W5bA3S>uU>9LB?G zIF_d4b5)Lp{k%oGhzgV@?Z5kd{*U8T&NKB>`4k&bO%|xXWwN+0?p*QwroQBQxR;R; za!`diyT5G8h|`Ayk@wgRT&Bv>N<$9b!7(!|d<|;dFsUScdsJsUzUzekhO1RtFaoK( z#;(YhSw1$*#=c;&|L-lF&pqfV#=AUH>u#LO41V|Y9)LSyGP3xGW^wYL{c3t3+Ud{cNS8n7BjY^LLjv1 zi=9x%%#?$O|Cm#(o!D0)vem*#m{ue{O)Tyu@7nDFHXoIQagl#l#gR7BSjiu0AgnU0 zoJ>UD{nVfcra;DyW^@}Q=GVr+S(KcAZ5x~V7YLD5VTl3tUl~H%pK<}HGxs*eM|&i9 zM=Ar!C(BxFA`9J%;?--QCO>8pTLwBZX}UnSFxw${MQ;NLtyEj);mx7gsH1hXl#H z-9@cj@+DwE*^fJC9q@S{maqv2?Jm(!G zvx2;S#$j#D&(^*Be305FOLw12(td&=*@%LUiTr^l4FxpaR`l}7QmYNEM}o62K8_^y zHv7l?JLnlf7l=@aeBV)}Q?+=SP7Bn7c)1AHE~bmXpj&>RI3D0Lf#mHr4Cr_JG$|+k zCjJ)!bPOs%UbY03Dzj;%bsWEPdN`K|jB%rqwHL(j`U6AC96xUx1_5wsIfM*$MFN!J z3R(L-Rs`#WA-!4OS*=@2CsJfZQQwfwrrl9lyj?M$CQY@SVuUNXjUeRjgEMocx2sj) z@yaInttI{K(d$wY^5xe_g=0dQ$hUs`sin|4slbL3B71E$Xp{mF%vD1cz-36KRNz?i zFwiZJRE7a=$eI9Qg4X%ZM-m&2s9YizjY6&Ux6`#W8ZK<8@j2lRo+4GWjNq%G@eJ?a zq(6TWvT0cIs#>*~23Zn5exv3#g(vzp2g2TEYZk7n-Q zIUHEFGAgwnXqzHXcs7HIPg^N<>`mv7sD&xgt|T|-l_u_XM&T6xdP5h|B8vJMvjtD@ z*17(r-@|YgsS^p?#h}>|>T%wa+}w+)$kEM8UZ<%ere1HsBhY*#?#EDn%HS=>+Eq=& zLF8zVec|lMgipTWxtc_=Bf(y{hcsJ7?U;tvm9$g#0qQaVh#4CeyPg+H7vl!_ zwb{kE^{C3-i}jnIV5VI`OlKS+bNx-zKBtFdrTaSD<@aM*pYH+l17tg&&|K5|REGh! zz`udZq3CERNB;a!GnXs3q7T4tK;wFx*CWBmfB8YZ& z-Dj9Xr=}J5i21f?M?~8lo>x@C?nF{RR$2w2Yu)(VPCn(Co_B0ApSUHt}LvU0JgbdxA6Ntj@} zGu|e%b_Ox3Sg%a6V~GIXl52Y7VRMRR`5G3-9>s@Yg-D11o0{^Qu+W2gpw-iY?;Fk& zOBVMZ;fnRr+oeu~TFT5MY31;(oRLe~1uqO~b1ZsL<*KZqAhoGf5F6OtB}h1dqx%rW zq7ZZGlxaxdgdF`4JPjDVt}pn$ZrwbP;td@fyQc+qB=tcr7t=85z zoK2+7+`6fGjH(~#A5bCGn3>*2fLl!)@+KKSZC0wM*dDaf+_Bs-~neP{GNuCk>79^(PW!ARl2mIpCuRnftZ^V~x2j=-ltITS!E5Y4sYJ z6Yk40vdt!Q&HNvR*hbxEgL-@OoJ6^66bmzqe5e&G)hLFzhrpgCeb3Gq$iDG)txI7o z*BvJt@BU@2b!mF;3}FR!Yut00K1nL+?N1QM!Q0fKChGnfMoF_PwgWd$>(kNzhb#vw z;p~|Mt#TRNKSV1-3S}*tPPd zfE*Un0k&<^8_0gMVh07#8Nk7PQO|(=iz^J!B}7a+BV};0=1D+~;n|M|%jO$*bXl#u z0j6>-j~g|XO4~WS;qBFdEUo$a+Tap1H8wpA>9}u_BfbX=gKIc)3PO*qq`mPW`?_=v ziax)Eyx`j?KDQx2^VB$=v&)I8%$J%h?28xyO&v-!SocH+tqctiJWb|vA!^bh#m74V zw^H@^;lDv)QHIq^tR$b3v$)`oVxnNrNt?xo@*5Ma`EpL5B3bvTM>i@zT}ySpOZY(; z0lv~K2_?MLyPRf5^#R}l8A3_Rx=#l08Im1!^H@(qC`4RpXe~}!+t;cpk zCAoB^IY=LI>5>i%y)6wuU&|-syz1mD4_0o2HGQzrtq{73LlBDj5zxjWeR zCNjm?zqOAXU|VxaEjmP&Cla^zU_k1l=0c4qo`c1JnFdM}iZE&&P+u0;`n_!ORT7bo zhW5oWqs`H2t`M(HR;iwo_-Una8LhZQ^_;LaSHmwLh-V_4i)@6VJAu?Ul8wyX@Vc$x ze}hQJK0ZUyDO9)mCY;$iO436?mF6f z%?8%HJ;Kzvyouf_;N zeb5r*7t(oX%`s|ytF@WouT8by4&l+alf&Uhb>D5Yqz=SOq_qsLDdjyk6YhxBsxoa5{ zd+%Kl)X=`*6o7h;M~0ZtJ>BRx?7oGDX^1Uf&t$#g0GB7+H!Pg9Gxo?#A-V3HzOC=1 z%VVdwlVy{QS%7p>p(+K5x2(cr4@)JL%HRiAy8BOZ7^uiPi}XC^VsYVbfQR^4DOMf8 zZ~k6w2dJ>t>Z;~~FkPdblP0*DeWtp(4UsozqbjxV=e`wzVhDHTvy|}#$n4^RH8gG}b9#~8eilj~=ugnt z8>@4pTEnC@oDT(=HM3W;0fiMt^dC3kWBWn_Ya?@elWDx6bJCq@xx#}crbQ5J&6)*9 zZTSt?l-TS=Y~LSR6F&Y8Ss|=!(nneded$@RJrZfw0Br^tkawl5U7w(kvgft1-F=NX z6e4%DC{LlWqJR#v$q+z@FSnnSPs|k|4a4Jg&q4o3W^4tsop;Z|>l71dFN?DZb@jXA zDhfWCtZ_=db2mt*ny451^QVm`l-XK?%>jvH98~EFG#jC^jmiOrk_`)VVd571`X)EG zzBvIqvO`X~tYS5YiZi7?7+vh zvzLKCr*+3dsJ}T%WuG?6g6m$79z)MDy=1smC=!c&gnezfh84<+96i`gik(zptv|KI z-&8aN~lHEGDiNV4=H@&j55SpF)^8LUIUFjyz3dGG4MGE zRO8yhm0jU;&br0n5B(mr#+Ep$GMC_l_i_~s*S?s{G|;&%O;$crZqkQVD>w7mpj!L2 z9|0;JmK=0xq?R8N4|0Ld$QfpcJWB|7jGtHXC^Eo3qW+kTJ5{;_C~9W4Ib+J_JH-hzcPS-0@)Hb+)v-aT1gJArfMmL$c<(QgMQ?y;kU)j_@cDP zSbGB?>gNM3EC5I2Ymf>hD{>J-A{4*XG8V)TFS}ZYVa)Pbugi+%AKgfW66ofu6!-_cpr zx)Y$#93joP%#H9xWHk+MU}9obC%lg5QvwE%8A(rSCIVTR*iWdkBA+-K17(J2M<=Sa zbCP%=k_i$L3xpvKJ(h}2T)^9=Gv&>V7C5VG+O?!*BA?PwC}uVEL5ozxry&sBqfjPj zdmitPOnglLxAMK>=mRaS8pMcBW+fE*1TmNASRAs4WVm7t(qZt9p&5u4ftaysYOHv@ z2vmy;FPd_L0A?ln^QfDyhyv|%?4S3 zjemQjkQy;yEB%IO71WfxI@L%#dp0IDj|X_PpG_%XtcTV{Fy}WWfn|Jz11d4* z*$4a!OhQ2YOZxUt#+>~EC&Z~nBOT|1QU%6bb4^Dc5Ttsf!vpLPJE3QKfclg9s>`O8zR~T-L_tEqk$~MHGu}6HWQ-###6l+HNARH0> zW@9p}U6Olb057r3I-GNmLRhbK!k}~arTJ>ZWUCU20trE$itI!3(X-X+0_UN7Woz|PexBSUjB6AYx!IV%8wY|6{m>_P8csx?(T|@a%YrD|+2~}}fU&GyT$xhJe z5yw#X*3B2ETAI#gb5DUR;sA;M&!^3ZH-{%qPbpIJ`aOLp4fV&Q>Cg4OcAUWjSylUJ z-kun{a=h5DcYPlO`$#tI2!xM7(84cpKX-%}`Fh4(8JK+Ko}Fj$XYUaEB48CF_xO^o z+fmyXjQJy%`%}WfHiQYnz!P~cq4JiJpBDU_mbdC0K!Sp}_pfZAx4BVgjy7@=tix1- zkd?`JwLx#?m9jTpm95V)aB=lQdQz-A0Xf#b*-1w?v0w7LwHJjvtz=ygaKa9S#pknC zC16roFH>*gHZB{(A?AX+_DO9Ci+pUb-aRW6NY!H&XKw|KuW|l5e@D5e_0l*d11uZ> zC_GpvJlU>@Wsp0rJK(EX%e5f zqj1Fg3kaV#Z^K$YA1M6ERIq1C%=Q+9kR~lYen$FbyWJwiUUaFD!MpT^LZ!2N4iI=8 zK-E~EB_yEWZ4Ne1DG}$w09e1|e27#-6H$ zE-!$|WCt4w-=&YWv`n4ub$0-MQTka@a1HZ6(WI!ah_lz}8QFCP<6*QX#dQbMGsR<7 zf04-#S;kNUSG>SvAv7Iz5R(;_SP+j%vBhPJmc$x!4IV7hyZeNwjC-l0AkG_i8K?zH z;Epp{P$C~*!;4{Fs>3Y?i=C-vVB2VK;-9pPzLRbw!Dis3ZJ88F*Ev0(E~5#RIMpYME-8&2t><>pI!GNhK@KHq6~W|Yh6Q2NIL z`=<_2q{fXt<$fEC?|3peO#Ob7qtv@wQ^*QHy7>UDvpyyW`%3xA^YK`8@RLY zQB0{&s4|yQ;6R$S2JI2G<-l$KN*$*q`~Xr4)^O9LXH~JmO2H!~3o`~TTcBySUTWW- z&FealhT3tgkP7$ba#Q;*GJkF8;_GOt79+1em%>Km`TQV@)!uu{}=hU=C%0;0 zb&o^_g~|Oe45ps6Y)!7K^5;RVC`jEvgrT@yd{X7}P`9DHn%0_gzViYJ(X(wcs`3dx ze76-(?YY#T9Y<(Qe*JE6a8~JGg_Ohpmg4RX$_i39SD3=}#2S@cia^<`>bVA^Q`t z>d;Bgy+CW7@{%1H0vJwH<1ke8qLu8s%m&eqoTzC&;0rV{$R3R*2%h~pMq^Kue+S*v zKB0p&(h(z``^%Gb?Gy(G`{I^>_{kFPc(mOf>x$HA>&PfEw@QnHEL=Nf>rUq1=?20= zd3(;mK2Ga3`ho;*qp&a8D#0e|ve2gC?$u~MwAi>C8r}oy3(4WzGKEhRphz(RczhTP zShEF0SqeWdp1y)e z`985LQsc00-kv+}i7K}xFFy**ridhc>*Io z)ddvx32wnPI3u(>=Q&=GakB%tHrNnow*fvh32uF)G zS038NT>i;38nmwUcTT*c2++7IXK{`dbl%SCP>dLJ94U#-G#XI-N8dCN*=6B7`jEa4 z{*iBScKtP;WX#XZg%edOB==U`u>h5{9@<(`2K|!w-HXH z*2F0v_sPmu8fRS2~h_90l97ko09-he7Yqrm`#jh7sxw)9*z* zGSxs24&tw-oNV@>p6{rJROR4~;mC*TuBps63QpndY<5AK&4H5ncNoH|{wCW>q)ZMz z!_sPpgScn>I#VP&<=DL&!bg>?(l%w@=^Q5Gxvxe{=`b&p1rI z88bKIONJ#*3he7|rJtyh4K*ge?6s0nz;D`}4OJybT>HsNy&wJlxR@6sd$!Hb#=a53CE7V{hUA_*+Y6Pe_p13MIOl>~cWJ<}mcTH|fu~ zeyV$>R9}Q|V+PQ%L3UK`vzPHMr)NiWhRWQ*B|=C`-}gTDhB~~^PM#Y=0mj`Xn{;-@4?mk>{n*GHJTG4 zxy<|}k1k9gFGLh*k^ddAz`+E7@ zMNeM_Z}9#AFe@CIc)t93#A6b$OSrcUHtTAtj7JAaj~Wx)gs{0f0Nu9)yB$1cEb6-YH4u#J@P~cP`2NLK3xT*5%ASvei#SU2oV$8S~ zTq8;!y}V?jOvO@BX1X4qxvKHKByt!|-biAuDD^}P^X3dInvX&Pu_D5wZ~M#>qQ3jj z`u(KlO|CZ?x@{F#y8nCt{JZAKIV!(@7^_6h`qdCFR_5Bs;#v17L@)wcjU)LZx9Kg%K1&PZpR=q zM(lFD@DP=G@YHB9DFP5=Wv<#yci743PVzfHi(yzXtZ7g^KwhylgDN$g7VQM8Mwtc7 zY8f#i|Fk4_^`g7)ff!p>HI4C=8Ih_umP3RLXhd&aB_@;-0HNO>$Lx#Icg{!ByC}oG zfEBAQIjbxhj&)9ulfJze6V+R!t9J3@w1i+U^ziC1+uZQLaL5j;XBu3Z*2Lch_!hl%(Uu1wX6mM8gJ|`-#XOf%wqvgrYRW=*$Cmc0 zv&#>gHwxPCtI6><*tDOsBjgjk%0BLkkB_H^;~W~Zjd+iFt*F}5n|vC?&B2_CwHwj? zgo|)dRXc`{tjV|e;&vG}Hp{Rm+!(~|4~C&%H6?!M9c8dP7NCgBWh{qqAHBLOcwMRy z?FD4gFCicgI5yb{0AB7u!+Qp!>W}amdpzV`mb3aB)2(vSeBP<~Q8pqP zj|Nz)G3n_FAUW}^IT;@(l44k@=BjaGjY}we;Nc50$JM|hr|>9~zKC2+o6Ha$Y8^WFWysP__DQ67T!SjK4@Jw0QY!CA zv^cyK8O}zkRz5}|A}DMJ9rN&m0lV2wu3?D80_?FxKc3_&>{aM(NM*+JamY-LX-HrW zxXa$r>TFt!O@IxKv%#JJP%gfR|M-t5OP5>3py&Uxf{a;XY3ptbW)E)!NGRep?u58? zjpg4%hS~x|ubs~Sk?$LSQ*{@bLWtV~+ZsvJ;+1*xJ!nPCRm`H=@)b9q>T*cBsX7b0 zO26$jg@yx9Qh4Tbc|wDl3h0K;)SGxHqb21`usDdvjP_LYx>~}f*11F{!nSWP*ocTu zrLgf35t`j9BWGER?^b32@wjV8(^o-j;4n}&sho(Xi@$Mk`w z;(LVKeXwAP(BwtR>#3rncX!81vl>a)qvz6_{H9x7#X(;f<-ieb=(AIzHbslWwliECO+XM)|%wLQqHpvXmySsqEo z=YG`Y9Ob)PA9yeo8!glc#UAl_B^~hXH=I zDSsaPyptdz*5HtqC!kX5|I-L0rw}e1YFnj<^47Q6HcNEkS`4ZK6RHn7!eB8RxC}@3 zv9)V*X|oPzl+pFgw3Qo>Kls!G=$8fJHlV&f>?JHvwdXB?59%)hiS6?!IZtwD=XW#p z4<=2-O`rY0D;`nGrZLh0ohLWLZ0~XmRz~uVN3rE&az3?}J|E6sqpi(kk-#;eZtFDV z`nxf$bsWGE);!cpQ&Sqy8R9M8Cdmp}?1`C6^fbwgN^OL~S>1Th@9Hdx9Ad-eIr2_C zRY=0yVq-k$hTsDdiV5)4Pe{W>q4djH2oU&Ar|D$cfq<~_^OQ@6B~u_K1r1dRPo9FL zh~l&I;201(kCbMo&p$o^mr-73w3h)yayj=i(!PiB3jsd6{+*=lPHRa^r8+-WtF+!XDYN(YS*uqVexAE~ zABkoqGHyP&>$4I#l(bLe#u#NPcxp||YDQV+^y(m-05<%5-t~FHDJUYq1@;;NOBW(3 z{CY%LZ8L1cXaJHN8FZc`7|eueyE58!E~AM`dOTf2TD$c}IkSWhbAG(9>EXG`-*36D zmQsVelar@6?s*F;GIEL&ht9DT-qpW6s;PWPVJtnTw#5ieGpUMdlRw@48VkQreVbvz zUu&QmVwa=hWG4u`w;}ppHB*d1qK|G15twENXhr`52$%bJyjvCLq_EDx1t2<;6XNMZ z3^iw&D33}r+v!xN{K)eQ2Xl~Q*@n_I`>?Q!rc1MO1J(j~nE7o!xr7$utFbsTx;yCF zKB^@Rvxh5RF3;Dpiu7PLP=}lTNlSBYVS08VX2(tj@AJdaEBtZvz&haxoX}zR-h5LR zd|{Z5z=jE|pwG%SQ7Jl*P+~=97fQ9MUafQt_oums1j=~}!IRec2B~g?Nn}8eaTRQIOLO^+;1X&1 zCcdpbF;$snh}1Nii`T4I-WH;>t`j=>pNh0WFNks;>uI27K^i@pbi?!TReZ`@%%0KOzm~=)F#%RAPz|=eTdx@d z@BJPFQY~?Lb|2T@`SE}HSV9=TnfX(Af_{AA%~T0|+4+u%ZF~nI;u8S+{9(wMDy59Y zEg^#+O*hCZTihNgMjyccI<5c*>{EI0V|6%RLu2eJ*a@~?Ui!SW)}6^yuMv$n*gR7m z!T-~#xN8#r=9=exuoHV|ez%A+KHY~579D-kCo$NWT0{Lq0o_Q#4i##7GC7br=oGU% zbb!;$d?ss@M`)eNUle>x*sIW_%+~3SnNukX6=uzn+**QdS(!zW$S2<)k{t`rBC$|2 z5Kvs8bnP#Qh=`B3S6z|aZ@K>x6_ zD56L%SX;Saeo3*}MS)^95&LJUd|u>Qy8 zL+0d^UDCWS1z zX^mS_2&k^5@cz;zPj^7LHy%XzSFi57wna<*=r!UX z4Gd~-9)v9z3J1gtgpE628!WxVq}3P|)1?AUovq_KdjKN?=X+?zLhx^dHGlnO)xzDOx;zk z0T6TzVS76>@q&3QC#rm^|Af~rS%@f4;ryCl>0QPz{K00|W)A$qi5&XE{?37h3jAd2Uanz>QH03$BnV~O~Hi^c7pXXC>JX6>(ihFg`CBG=T zSUjg^O^TYqt(_4!Jc?61Pr9bn8Q~$XPIa}Q*_R54QRk4pq4gft2VtfIl6d-C~7$$|n3DZTHCtyum_ zA`qat6geJ1dTX#RrAr%@B-+#1L9bXH`gf);86&+y27xRY0!@Nqo~QINk^a9^uK*Q? zD8i~7L%3gWX2HKxujk!PZpu6=3O{r&r0E3njIRodM(h zlp>x79F6k7*z{*IsW#2O{dXD2!9@9ZPCAVz7O99fhl3ZTxVV}dq#xZn`l|yA7HL$= z+4MqpE;fN)%OaO*%hlrm{3V*l{`$wB$wWzf2Md zb!_+#eeQPHa@8LK*}Nc1ox672NG14R96yR1RjnwF;(PvYeK<=G|5Z^)y(Y`<<}na` z0qes)7E%Ci16=$(HRK(omuVpO55&2XX4QjQyD?ag;j6%Dl^ZDF%Y0$-0XyN#iZ3r? zy>wyZE*qx884~;zgTaS*Gr;u(OlIZA#CpCO@W^dPG79)c9dQS5PLo4d4C+g-s)9BUH;PqftpOfKNZhi=MY2uD9Md?sP1HEj98$qQW5aNc}XV!6l74hL;kn0yls7Q^$G^5x`=AgDU9 z8wy3KRuIU*xYA4(mtfOS;6xAqR8$O@PL688a+QqcF)}=LzIIDNv}Tf^;OdVUL=t zO(N-Ve<_S^U1weo$QU}m>$9a=8?ksDZ`+x(wvKpV6!~#meD3U4EuQSuyh*xnf}@X` zEb199&2joLxd16Z*1w%2Y96Kv>h0HzR5`36n&f3!(SFSTl`LBjJDo8o9>o>FF zT}L-dAj!)}i#-xE2i0!d#M_~->}_{N#1;9w4qlg<&{4~2W;tO}fwN8CSVWg}^JAuNcP8G(b8!Z)w7aP`dJ`WO}v3;s$t5AV$ zUVO}{%+UWxemd-Wc*l+<()MCpll?3GlJmp5g_%&$lwvWn&QrT%Cz>!0;tKsT<{g*)iA|Ki1!VB5vnmQB4Zd%0M%-Oq8n*pAB2#giIG?riDQR07v* zgRxv8O`iL0N(NcGP$R)vy}4}iAY&h$a8CG?hVC7E&n!EU%P2q)a=$R_+AYCYGU0RW zteD4~Ue^c(W!3E{0>5u-?UcgaF2w=f17pj8>Lhz``#Y@1l{VcMN}V5GCB3nr%TDXN zYL`cx>RCsOe`|w@5Tga|b-xX3*Ze0yRGB&mS1D5Tj)V2|#)^x6R4Oci> zcy861`gmZ=$~EZsNT25JM)wrgpgV=kuP6m`;L9E$Cgo2Wo8fXb>A_2;n2~G-EEow{ zOd%3-HsGl9ED?dopG0^~kTyrY2}UQ+Q%v-dU zaJs?|H|Wtl+AT537<96#&XAVa(!de4Vi_%eGV>W?-p%)Ia?sCL`kB+HD>=A!ki8o8mX>s@RfI z&2=B+_;TFWTIq-SP}1zy^?IYhhl;X%ki|0#Bv&0dIyrhuE7R%fxqeaha&uU=$F!>F zJhQ(5#}_6&bW*^j=k>BZvYdNQ4QzS>@2&X);IA;i8Pgt{@L%Om-<&jA%w*&qdJhGv zB4+H0_sPE<#mL?$=oXN-8Q4zj>aT_|vUEv{|4BZp9pS&{m%eTfWCW^O-YAJ9@q4SV=X z&}r;Qieq?N%h&_D2X-h}L76=anIP^0k*E@j5|9VyRb#7)ar}#Ny5**Bh^bkww-O{6 z5p;?7YiNJ(5wbo%tyH5!*A#{Z{-O8mi^JqR_yT9D@&;P~wSlaQz0Xg%9-@oaSpcS) zV^qjwr_czO8uu^A_Bj2)?TAOxP>Akp2`RdCTJavHZmohQq>FM_XZ#Mh{m4>qr5~;j zycwR-YuUn9Zs32QoPo3#sGroEsCd=)sr<2F2t?ri*Q)xhH&J8BHwP(SNWh>RLU}#| zXc4k4V%7ckHh4pny0)(xDXY1rXj(7#50`%!k&tn8-#|(Jq?luAkd5c!xYg)Hf)Dy( zBPK!TZ9oRGkCr5|3O{;Fd;hCAX%}IVXnJQtHsCiU@I6O8MTv2KENP*<)`p<|3bXHa zW7S1-Mg<9KH+KY&n;fV_u*L|L+85adR-)`}NiC}D_T$gpWLRjqTq|Hdfn5K3i8eqH zH^j-NNa0iAqYN+P<*q&n1WWbiNr~;OM>)&!MUX*KWp=n9r^MVC8w6Q*TB>sKN1*(C z&PgDZi;sQo-ZfAoR7$pmq4puUMmn(<>XgHF!U3Ok6zAG-M@bhB`+z<3q4NBKNj+b> z?hU+YT!*!Ioo$Qf4hy8C!iPLlVqgclrWyy;a6SW_#1i9|g`1%-Erxe>$PF9!FUbfv zsGm%L)A~Z3dX5_b)F=Ioe;0`5e4(1*falfy0Dc0j*=az2E*0KeoH+gCsC<$_10n_! zlu8X}D;Mv`P{IF4U2DN65T}IDg;^r=zA07)EWtZiSzJeOK#6J+`D%BGHh|0Zn_m2t zt2&8m@IfdkZN8!9$3-i&B^mz6?Xls^bilXcV;UZx6$|wPBvp|ZTpHv0S6TDl3BV_k z;p#XH$6f^SmoG*wlosoi17Ukq$Mogyj?Y_6fs1qo{TAZ8-Dp+EfB|c$cOd}hG7F}lgV~t4>2-dkO zK^UXtON;3W$A8y9wlQJ=zd$@ivyxEPHX)+9)&SCwUh?~)G<-bVv54%MU-JQmo-nq1 zr!_Nw^wU(7YEj>^@eWCcOwFUL24D~JHCE{Kc~8|2r8h~JqwxgaUTB|kNtvR2DVUR( zlfM0CXn7VwT+9DAbKOObm(-R0=AJ_Vp&SuB$7db?ym6i#o7>Z|8#Yn=_>V zYE))Bcz$?SW+&PDlwDlMgemLFM1$OU-t_Ga^M zm|=)@ptGe}Njj@E%$2v+1{&98uV48){5?3?{(dVo#JCidvTQ=-n`|=H5XJjWfa`or z*)4IxQ-uZ=0NR`dVC^3u6?_Q9WexDm^PruJ)cRhlLlCTnt!#lxnT4R>i#^S} z#Hd;rX`|F~&@i!1BNMRt-EDcH$hq@>SXa zM&lQB7#&C)g;-nAamp_a!PJ=wf;MV}l;nC+WugW!(hDMf^XV zw(c>Ijt$^YTk6C8+NS^?-Wb>mmSPLFn`-QHeI;G27&YX7tbwBX(?gmn@hPuhAcIJb zxlDLMFLEM^Lk=G!4yT1%^B4Ui)_tbU8??A`Z^*Qtl$9Q$W<*SepV^^ z`l*li=R(3d6_c~jiNXV@PU2MjPuTSA%m!w*uj9RIF5CQo#GVYNpA@^7v8Vo%v47VW zRo8L9Bsr%Y6}Y2*SAeRt>zu)(Y>smeL|NZ&EuLO9Ty zMOcPZyY&kCj7`LNxJ0fMi);KyIEl<)`R$mc5fk!@+5%G)NUGmqhFO=byRi4YkP@Mj zL9~*EH57}Y&^2Mm)WIN}K5o3!T}KvD)h8KiM}ABN0b`94pE#bDJV_v~a9E)MDlK6m z=1~BmWO6TJ^O1tz{62qK1e(yG8A+P+1U*5!{Y^3gYyByw)RAsf1krVG8SB^?-pITL zK$FD_ZQo2CPV0jB%4Qa++$7_}BxA zTvWZn1LapIS@pi1LmGY&7Ww^j^9I&d<06fh4P}dkNQ8sG&(1y_I(nI{ZfvVadK62M zd!413DQJf4;9c)*4Sm|Y$#~*JnJW8iPa5-E{d|3*Sf~jL_}4VsX|EBZLW1NA^rm|L z{MWk#5P1Uz2foQ5s9oaTw#1A+s2Jn?4i&X~JX20pbr0P}roYD7kY(nEuLYVViJEl+RU zib-RtxSuB#?gpzUr~>`xQOGZR*%*#=*5`zAOj&8TV?-tV?B$?)STXK0awVt zH{eF1Uj|{v@w-c7>6%4!YmpSNI^J(5_oT9b56DMO@F`KubvVOq*^A#Rw-FmjJ=Cq! z86$cSb){q6Upv9}Yvli-4bLuICeTA2-3oWD-9Flz%=@X8SwW~nb(i#4#^$Fy=V&>@ z|BJwlVe83}t*R^vD4Tjpi7f>L3}8IZ`UUA19ux->(60qJgMp2Z2au&#QU2XNQu%tO z;;*7^&tbgE>LVfPYCap-4N$}Oiq|8bSYQ!6*wCni#&8odR=*!B2EX1tqb6@*KdyT8 zPyw6{bFWnxGxg$){fV^{MhHl&Cp-;+Yw+WcYoV1ZvHU5tq>+_kwaZM1L{ywy2+fV# z=~`}aG96=#$2NL)w{nmw!7)AI5gXN!QXJfPLStg-RO|9Ot{|{oQn05)@UYeaAwrw$ z!#E7t-WIH68P7ublDNzE-D@Cu2;gWdP>*(PSuEDQrF)3#`f_l_WEop}_vFO*@Lw>Vbf$AA>z!Tt=)2kCOt3;qBmfH^ z&2q}|K|zcE%8x^iwx&{!KDL2Z`}fE73P_W4`sgYE z`um*`hb|)DYPf5N2ret3mlo>vr7aySnOm88dL{@?tTUXT3la5wEm*XwF!~NFZZmt4#A>#eumSX{im7G_KCEX~l=0nie#Z8$@h$&)qQroP~z6rs>Q zsHT`kKhrJ8M8+aV?HnrpVVj3eSSpGGu7zpMZ66dATEXJ?hz&MZC z+l)P@-y+RT$Y$;NL!}UbzfVGt(cx`Y!ZwcGUzxg{`)gt~M1P2GERm>#PrQPn%Rj@n z?xCs;r621BBbA}??SfvW^NIt|7;%y&r93Pp)6;+gZ`88&yGxe5!xtW9I-MVA?qI6n z@@iMWHp%^{ra_dq)vAhWysdYh5j@C8efvhAy#&s$={^E*N&!kttQ|dm1BDTr1b)O6 z^$e4GI#ksNB+1<0jI9xFDN)~rrtChW3SnCBJ-14u19iS;*dwZ2T(3fi@jgvHe;{jI z?PB$McYA7%yDat{R$5jrEa5UMfIu8^8neMuPXP$ys$FKmuiCmqD^xH?Bx0J@}$s+@z9F)^$o z^?DtyMc1WzA1ehaWsO6O4xrwp-6JjQ`|ZC!dxdnR3BD0eMwo%0Ch=U9I-KJWK$K$TuyM zhyqMRtnLOOcQUNUld!n-^{r|tqOA#}Sx#bbF?IJA$c78`m4`><-alXR_szdEytv`i zuQ=!BbPC*;INPq|1w}Exwe`%iu2r!Ff3paeaVoJU%4T;)V`Am)AQsxw=RJ3yp#*#*Q=0220y8;>;>W09?g zp*kDmAK)7V=x?M9j?>1?wlqvuy!(~q^5Xe%r;NI;wuI9EOq3w@Vi^T!^1H!E9Ezf7?3nX^A8_ai*H zScsJJN1^cKlZcf%Z5%%KWjzS&s;#nxgi{1o+HRW``F)?RzZN(+I0b)y; z6rrse*8AnBFN9!P(h@qC+YOb{SZf2{*l15vhHToim|7bNYMkbEVr z6#KlPT81h!4dsVBQf8Er%c0rymeQ-Y`#TL1QB~J@{acmL%1b(lkF~;d_c3OKcDZe} z?h4~+7~NKn30R}LlPQ6>SiAu$LBg_hZ-%6B>WQ=pv^{W?@M-XQ1c}yJm0lM0H-|CK z$0_LRppexrztR%pGu)}XxyKn6xwJ_e8eY9(VF9x(I#asJQc)pIhhx!o+ji+eq$d35 zmA#ikW`k_WnvWi1QJvu4Ir?LgKJ9$MpA&^8L0oT-kO=W zIUM(ng`l(rRw^nH`}=K`vdagj<2M&*us9iZ9iy845n4ReC)eDN0eE3~)?&c`bjda{ zeJ7=k7456jc|XF5SaxZf>;^;#chQ$#3t^afk^QE6L}=0CmBd;9x82)^7kuD4+^sfk z_#ebka~D=ILRb$t&ux5G{DBLmdD)GU0kYMj>N^mDW=Ej#Sj3QQ^!#N~mB24pe7%vX z^2yS&(zKhE68o0MjCo-QV*<%O;;}s~%?5(}))mDR3lNW~t222kWld%A$oo*MawJ!t zh}rV^edcq1`URa)eeJeR^{k=;hexRB9a0`N!1z#`{s$14jaGy>pC>17C!_ zsXOc1=hdd8{w0_6CW*E720#uNm85~zdhmk<3ccj4rhu@O<(uvE!xzGljwzQVw9ui1 zki+PnLhYXnP7dZ_YASM|1S3Bhw0Ui<7t2e(1Lz5!uDbSytSUb5r~0051(X*uc%ns+ zlK8&;lqbftG#7RQj#_nYNShxMeHYhmo^b39MO37isux9StLywwdb)P9S)URe*Fk!H zRC`_he_eOLGV1x&jPVJyJ?MZXw!TTV{s2wBgWyZty-vg{Ryofu8-IPLu>BhU*dk^fcd*Xo6@wc8%Mv zvTzVyNs*Xc8 z35`aNqTL+H2~Zu&502^)lz#qmRIj+rGBrSaP)-LHe?45)6tv{RQKpZ^!*}61!FoNMb z$w&r%t>-M6+j7pl?+gGjl#S-GYH{d`-W$9oBp*rnb7(a2J*x2N;Pl4dd|6K;o8y5B zo6p~dFh_`6$h>5#*SI0>DXVi}cyrHj?d&*u^T5`9mQ33;K{ah;LhD4*CYc9luL3?f}f<-oL7PC)&Zp&Fzq_32g9yYljh=*9G4PgmE*i?Gp6KK|+ zu0^cCrz}N^bzuHmskQL%sCgR4wd@;(Q4VGLN24jsJYitCJ)Kr;-VGHL^g#ql#*6xy zzyC(b``o2SvNXM|bmU+N`g_oFCEhjvXd|CJtzH>KK)Z6uWixWu?m<`W^LzA4Bkw?V zp9bMCw@wCnB)b{*bYn62$W>yf%T&|t_mwlJA=37U@%t$m%_wSwJX_FW^Ykblg-JzX zxAO?g`b-GfarY2IFcTlLS(`zH&)NOxj`T}a3DB%!GwS5HlPNK&DiDfw)esh1cQ%(W z6NsZEIKi8N+KS}8N@RJ!g6-6Qia=*uaYL5Tc%T!m_L=)kfPfSXH8B+3ewp0;8(2sh zM^qoLO2nWbcc<_)xg_`jNzra^`zvwRg&2kg(PdfM_+}yCqE`!TNA569z5?~meAKb; zw#HuZzGLioeO|5hg-NtZsqd*blH!cFHo);HU0S5mNw0J^h>2ntT90j|#H$uHA{v{g zoO)iiUNx~fvx&nEt)NAFbjJ;QSbo@(Mlm3_XRWFYtIqjBtPG({Eam6-kA+G*9U^Ng z6KV46DE zUhgRPsb7esmcNdF=HKhBjHEWyRHOxe*82N$>v>Es6S~kc+D3;4(g!b&AsHdDMw0A0 z%${#-4=)7*Y%7>)#E?69+VOjk3fH=?wpF9`Xb(t}I6w502cBCDrLB$Oce)%0+5i7W zSJS_@HpdRxIL5gQ<)HrEeVFp{8sI3v8}kScSHY;?f*4|2@|AhmI_Rr#w>J(MY}Tt3 zmW9wOXDn{dC$yH{cMMQ1;$s@OUWOw~)-;dQ=NhXraj5$c5V^f(dIm*PZn&uo-^l4A z)U7=|Nj~I|2u;>hF>ZiAd+?W!p^^{-Z3inK7wRy<(jiz{(_#aR!!jIf_D$V}#Hb!( zPMH_$=pn>r3rnQO26PL;FKiT0ni^M(J7UZpg(H|G9DG|9oUmqIf2X5+wQqI@R5SqC zZ(O+w^;bUg%$_?{sH>z5jSQtT^)i9l*isQE*&Om&c+4cIWsQ*@6B)RPI$kDUWlE$= zb|Z-B7X{|i{NomsbFW!_RIlO$=q@cI7J%3_Go%75W|RFE@dE4obuljZAj#pSsDz!T zQCm_`rPGHf!zJ%=_Gi@FA7|opkt2?4aq`m($EN5#<}vfP3X+wAi?gX zfO{EVXik4svI7~#c?O<+m4oB^T#sKdO9QdDwTuYUfWS}Cuy%X)IV2V%(oNh;^T{B+ zu-!W^L;h#e{-<_8p*}QS6o(`V34pkgJ-gJ*c|3k{HI}D}gs4u802ce`2`GHakRh>a zUO&u`g*E?X6MrM9ph`X5nLz&yahfN;W)x@D9x!T~5<7>@PzP_)y*-nhW~zUdSYd@` zy^@h^t;H}pwcsib6@|NU+Z7jw?QxLcX{!{LYvsf^N?kN&!D>Vg1X|7RvEv+oYpVblQWuasFa5 zc+lm#(;1z49HwzCu^c?Wu<^+}iSI@>zadF1bxCl&FkB;`%A;kD8)=nlTi2o}POIX= zJDA_!)(^yHZ|8m6yuu7Cz@-SViWWHUSHsJ>RtLP0aWO^zi9IR&z&jXmleJqHZ)*aF z00B9_>bQ}3^>`+Y{*`MT4t995R6N!JsxGte!^@#Ct?*HX0)X2a?Z0zl(ja!+4q66e z^zkDv41T9eW~K{Jl~|LN4`E#19UZSZ?D*&xE~P77dWQ;ebmFd0I(Es}>YKkvNP}(H zAK+>jRk0z|k1|%P=c=v|JGUBeD;{)9=23|dV$c=@YbT2*A5VHmMew=MUBaD0Yv-wd zYye!=$rhMlij$^cnsqoM96Sm~%>Oamu2x5RciO2~hjzFkFT2%%U!Hw_$p5g3?qPz< z<9xI=PoT&aUP;&9(wd~T7KIvYHMwr%c!#MaUuYAI!q)XUHvr@EgGYr<*<%h5D@1*q z?@9-wVcRIzCXRqmJe@*j?`s>|gqbg5C`VeQAhyJff!D(s8%}+#)OplV_`zftL1yDw z$hK|LqK=DWw97cpq{Caiys%&8A$a>6vhKwB*g-Y3F&sm12sSrj59h0%U0b+OW$xxA zZ7G+{qPP8-%sD250Q!u~& zJc6J`Y2F3wU7XB1M6B;EMf50c`rbDJ85Y}fm$*H|OL}^JXv1DraNs&{H-fkIPq5ZN zNc2|BU^j6kCsLlY*+)#QJuIGuui+A!Jc~0>Rmls=!OoN7U|qB{V|P}gxG?Eyk$uIP zaI?pJbPMG`$CP)R*n65&t5kj|xf<|~P(A#${e(I1TU=X$vRdYNl_6=DJ_0@$qW6C) zvGMbho6&+-z^>nAflaIYYa(&lT$?4gn3Im?b|ToHB!s{}5*x}Sh96Z-^I)N2)v-!D zG^hV5r|Lm3(JBGP^Rj``;VQ;WjzL6cP#V36Qz48cVg+?54yAK2P{?DvOz_hA`o(Zu zAj)}AD-1kXuABa@_p#g)Gy?zC8RAh-2{6vxLx=oWWa}gdF4r9jLR>AvGa;frEPysR z06b=)ja#rGYy-|>8Z~Cng*w!K{?q93D>Lm5ad6y@SDMi}D4(OMd1D8p_ci6>@vKgv z>Fm?}>1ena!8uor1l_5hXfYfG_>n}tT%&_eSg9Lf;r&v#2nG?(C^XhX6g zt&@Pd3Bd%IyU_c@95yG@dhb0)AYC!xV;iWV*x?aSCpnuc%d7r(u)=Do% zU8AdQ<^?7_nfwuc*kaRkHp`jeU&!G9|F%ltieT{UA1FlI9Yq0y!KnL;H<3UpqQx^l z7TuTEEgc#-4``%d&~@Nxfk|KaH?q7qmrL=(`N&z>j${!L3hM zuj!@5^Q&ZvGR8iA=D~-2kBb!}wS?pDn)TxHA=n@KvzXPTpAb`gH7$lbr6<>y>onJF z@FWt>y)CM)pS$LjgMLe9B~5-rfGBNV{ts@0!}csC;IM9H{WbuL7ue9TTd>qb-X#w$BQCZt8f)m#hfRU(HEZ)xLJQO_$T?llX8}b#gzAtB-8ZBh51GE{ab=R!N=SkMa0~6k1Hw+XiUu86MwyP=DPtJEAWw zXITeLeD>S`0+x6paCf1J88y4>$0JS*wst)IYK+e^y$Cz^EN_}iFw8wzYnq*W&a?fp zb#aJ=&Ak=N_JNqi?+Nk6+Z8gv#ZF@|Jb<-7mI+@C_nz0iV7vUMz*oo&!&kaJl7Qd= z-%EI2y5U6JT~-%d^co=k8+I;>lhNV5H5k;|0KXCEYRQ{9E)Ttbj%P@T8;f|>tB>s( zDUZY9UpC>aDwuv|y|C#o@E+Gxyh^m3xSVw(bo8xU`|8bVv%M7yI@p?}$ zybHofA1!SsjG6?9c?olmj`k*fE{aksAFsvTLUp_3!FYPE9*tTBScYp5{>Tu^xO{7X zD_Ip57Jrz-*X(!P8g?rHmIKyTmKw^DEeoLVF{|TedsV5$fJVSkR4K=IysMy zKlu@sgR4lvO;15HNQIUfNl1j@P!|FfJa@GIRU(tsgLp-Bam^@C00wV*rJH5EsP(pw zoQJ&~Vszg~%-lW{F-YNudX>iIX~7a7lek=k0m^5~pCuN{6UQBNu`!#iWGMCz2}=>Z z&j{tdpM(150L=OdJ(neP(*}kJo8G=R6I#UlYuSD~AP}ZtbTf;V0$rV516-?I{zX?b zFdm~Owz)S>%5g(|F->rHb|Eg^k1bAJ_gY#LCa+DaV6Xa2{(12gj&D2oqt-#qJ;cMVKJo` z*G8~W()L$j*YVVv#0#a*%j`IMo?kMTlv?NGQnp}cPb10W9q%6B0rTDMT7*5)8;IVl zzQm?PY+f^~Rej;%b6s~;Q1vh<&;~Sr)a9KS3V8gL0=0DY*uh}yc?)b_oAS!t&m60q?u*|&EP1w;!aIQ zWdTxG*jur!>MOitInkA*GG%1!e_{~Wz#Nz8%Sr%C&kY-`5%<4I@`>mYwS!AKM7bJ# zzmG(d2;vbPG%gDSB3HCD@RU{YQ8ueNMF&SP2S}Sd^aV8%buim0OAComB)5&TAyNzG z%noUg)_?3n)pYmq>jtRD;`Plxs@Pp5*2=bZh2xpQd^3R8D<0MV1JRLON<{~TDO>iA zqH?p*@`sxjk~ckH;tDB@piTfehV7M2zG?7#WKwQZP;=_pZc(}rMGPu!Ad1?{vd1m4 zVM!BnAAVWnEVYKgZ^;FToCrR+!rV2awyPEuo(mfwJU$_;()5J|dBS098g6tpP77Lx zY^3-_k&Y_;tCG9C-BI2&=B<2R!qoq9cR<0yNuUq~*2w1GjudY?Q!lxC-;oYrZ2}bI zG&)PwB-gl-N|!?7qs@`cXSc6RgJsM&p zB^pFA2Iu^lX-~>gZMW1Tvo`!r$x2+sKBkte+Dc5f-1MZ8;kLpay>4!!))aO02for_ zPZH=uz_)6nBYotI)4J@(R>IL50LtRD;Jo-Lpa&&sNVb}r2$M>nGrG(8E@FLE4c(EG zlcJL2$6!=ucy{#xF}%*+?*dC*2i(x;Y&CF3qcZfdQ>h_Q{%xSh>v#V_f`IExgB9b~ zyXr7awD3J{gBKV5T4b#A{KYZ8hOJal+9ELTfBwt$o$Sr&?DX~DMjKf!Y9AXxHiEz` zPbgEP8(ih`?^WI)6T=~wmKEb7O>*Kbbevs@{m<&CB7E?yMK#FtnA^MRNgsu%5S$>! zIgseI?cxtPv`0sY4j+WghJT~AY;12F!+oCG3oaSG{E4dZ$gT)>U}wox-1jSTXe(W5 zLdeVd17t!ZN{<0r!ucS4L1PtU7_ipJP>DXIA({1R?+7>ykRMIHpzind{GU9j4ii z)Up0ak@J}K>DFZLWW-U|xppwJRO#jd7G@9#2{QKae)QA$?XWfzqa&O<-<~=bv}5$q)pZs9=IsZGfk1FBezscBzv}o zyj$y6>Vu;Q_@`CZS-~OMRQI!YRieO$3)=vQI6d$F0BtHC0-qNP%iGHLHdK)52Wddo zu*dD_{*HEWo+zXyr|3PgDBIe{W70KY8*j_F^u~J+FV!!g%;dTM3$6o_gcZ!W15z?9 zz0B(-P4(}Oa{=Xa$e~sr9Id0S?Cz}!8l_}b9ufVS##(1*O7zv*N&W@k;~^i{ z>nKdh8wM9R*Lm3~sZUya7(=-RV6V_iCmR3YqTB7mf!(Yu1Yc)~u>9kx(WTU)Huy~I z=Dm1j4BZ@lanl`SOM-LrorM`c+kZlsS-}j_!*T73W7J$@akijSztstr45nubU^gc+ zt)-IUhjb^Ql*6hDpSb(MkfRpr=s|S;R!0N?FdQRsq|e=eH!xt8Ic}lzm3yr-neNon z6}&+fGRHUm2EYr+8Dpnc`@f}PgdI%4+y^d<5h)jlA)7&#b-kwx-u5|J(g`KXiRwoG zuYcxDpmY^cYJga?yw&C*2QWg3VaSAv#d>GM^wxh3R(RV|Ui`EbPaA4pH%Ez??lhfl zjfs3@*d+AVO64AQYcsU#o$$Lhr6_-ajD>?SVIRcW)7L#Za|k1GFGv>Q=9Cj0U8sfx zK}!rle(JWDKkmyabl^?T79TldEwf>-k%dm_Y0GP9!08b=BpD#^E+>71MHThSYzS~0 zGNxvp8Z8V!0GOB%gog!;gvhuvL)@EBpV`X|X~}o+WOlw&ZLpH~UV;g7jobj|X+2e- z_l|R6uK|y#Owsg?{hSR%%PNh4+0od+E26b>h__)LeITPm{!7mAHRj|EUrOMKsXMGJ zg{G3km^2ers;Su=Wm)}a;0_!}gjhm^ug3^iX{P0X{F5gS85qom`mL({-KD6^3%qt_ ze_->pK{YmVPy)_WSa_MYP|Yiqxj46}8R?Z$+2@J^`OM?uD|PK>BOiEOzmd#N$bm+X zA3vnu4<4t?JWPS8SJ1(Az=}XnUy8c8QXuB@bU1n;Ow1p0qIX_2BD=kxTa%ewIcdpj zHps!3g-tZ&J2?wR@sD#y_I)$O5<03eB4(`SN5l_Tx>Q(`X+X4eG@j6cr5wn_VF)0{ z$o(|8Fu3quss)u9Qp%3 zuDMxmKX-D>Z}h?`uOrPn$OfyDlN0QvvPq^y{(S0VTrmcT(173b6lL_P0{DhVVC zvnqGCK}48#llpkIS*!d4v7np!Kp`r?v=#h z=}Q7l7_JF$4Wm5fQk7;ZWt30$03mU47TM5cioE6&D%F+Wnneufh^^$Ps4HO6v7DB= zIn-p~Z{f8XNbj%oynJAD(=`^vup5vjuq2awgj3;u1*#15y^}F47RXzHiMD;=8!#v}djS$GEBxJ8_lDon58koaHa#ly zdRO@hsyRDfEI<|$;9kXQTviKW$GG#zw2wQ#6=wW(iL38Yec!CK34Y81GW2*Ps0>Zd zZNWfMrap1&;rr(g-X|9)UM3CAe&Ua(I*bA416qz7u_Mf+@rAEGE@Q2vYahGS-f+?r zc4_ATX!}G0Tid1DfC^>mjxR=&((nga7C~%!36l9i^+L0ezhmbA}{JZ}V_yHcia0)Z^-%Kb zQ7V5LxhrTXkS%v~5_~+m@$yX{8JC}s?vwn;VkL=5F{j&|L{E~+F}Fz~czDR&B`2kF zzN2CA5yz->04Xiyx7>4SfpHf?_chhgL+ZM*)Z<5Hhx@}AAn zQYb#kiMK43LvAK??;``X*Y={!8XqgBL>n+DTPVIws7=rcdq})8fCHbX%(Y6i$z2c# zj-Bi-1-UtEfxp0w$1ySMH-7_V(8}GdM@?Vju8GH0sP=Gq{Drg;_h@o%63!6b3Zh2ei95^_h8B+Fzu$M7@ z2~DsX7!z-$`ES#nyS9>K?{7~jtmTF}!7mv(_&C5$8$!GZGlPPdyk5KJo9GMr?e zlJnI_lg(pQK0$JPOYb?aBrLqk=_JpBrb<&Q4ttfNkl65|V zFrVBi$@}RucY0*``AR6oW{zzku-gt}Z$vSIRL&bhH<#rynhJjX>cm!Xuzq&>E-vIE zQZxRFHCiA@Dus}Ra@P`UuH@m7O?)rc84fk~5S%hqGNeqV_j6;~8W zTyDiDg&wneD65G(-e~`r*-fCwc1etvjd_O_!hlQ_0tXj_vT|g18k_8Y`R&o}&RBEo zc%a&nwLk*QN#r;xMkoQiWOuF!wQ$u_z~vv)VFH}kTL`eHl;jcmz9R{Dh~t63RZ{`* z9f9q)*Fnfy~GE}`8kvUL_3=-|d_z}LY=0_qP42h(MTf~M))T^skQjc9uxg#Ck2gV(mx?Yw)y+|5roj4Q5NXJsJEOT2!76 z+7*+Jj+fI42+v{LP7E*>p{bbu--?ygBIdAH1Z)0KzJI)n(0VK-M@}BvsV!r9yLAxa zFqnnc^Ya@*m^{)b{z581c4XcHC-Cu7XkIl3IaziheN8gl%6vJk_PS8MvM36k za(ODO+=Fs+1}ty(!Hl)FEn`F=)MRP;eQ^q0vTnszfjIhIBA6&^?%S(-S|x&ZFl!6V zd>F46n>rp_u(btdpnAg9-h6qyEhJ7UKpy4YZAnL)I&oT_nRlyiykPh10WE_DjA2#I zw%yx>7M{~0QSDg?Ch@6>9SNP`uN>>??b*~Y4pih0#Dh-L+ZZ3`1w0tL>8Xv~t9f{a zqpM51Ti3B}FT;#}Zv)hnm3-PRh-Zo`J&%%wjTkDQAIe`ppiM`AaxwRTGZ=CWzSnQE zojNQn{(Vcs!PHc;$JMkFn-ZNID4E(GbvKdp4DEkxZknb|p=;@$ZYSrxYNri$?=fW2 z%9H{!RJUx)wwtmEP~ttt^+sWdIsozgB7LL?(p}sJrgK7VF3OWOxtzDr*!`Vl0%mp94=PE`24_9^arE}Ab|EVuTD~P_jep7?PueC<5Oo8 zt8FmOsOkx4Lan*$n9WaWR7fGLYiCcQadZ(3j?Lm0KTK~YBFh-obe~{=Ot;6&7~bCe;G>ioh{upo^`nUkjs$$hxv|z zihT^nokbN=jrvk)<(s8|S>A-oIpQzy-wx42WdG|QG|Yq2Viq*BtbkE1k(V=CpbEVj zkf-v|Qhl2D;-v@|lYEH`#>p!-r>ptr>jt%hM7e}bBVljk9U~F8-M{d%)72(XhDjG} zHB&X+Jv?ps5FCTYWgPsII2sEZ)1fJbJa=GQs0pBA8FL+DQ5yL@^o8O%Cg&9Q6_sD6 z)GJtQj7>m%8|0o;Z^p@FJ?r_pK=2`O1~+;(;;Oe5AUcI~AKbod5{?hS=Oi?u!RVMq z^-}CI+0o4BPRNO8ip^uOINNVQI$`PAp-2Cf$npsBvqCqBL&VS_42A+RI`Sq&Tc!9Z zYCveA)zdq6rsK^9s(gWwkJW!1dLg0oMMN0Z3sQ*@_w`j*V}A0jv7+=jA7ZiS@Cb)% zfUB$fq$Jh+v@2u&xp~b?k&{@L6l5(IdLx5ha$TJSyUZ}{>sQWRpRjv1h$1U^aKuda z2%Em;v+&dUWWLp}rXX&l>0eOXVpqK6rwzC1C+k`Ydys}zi47Csz9rS!r9Zpyx=KAi zTk>a^o{OLl6lbO9FR^s!2sb|XmenNX^3N&0!G^eqgHG$EB0a~mx7>vBWx z@D;$3&%{LYq1!SwvYljw5}4-B&K$XN$@#hK{c!mJS?1DX47KQMyjh^oQyB&f#A+HOB%s3P z(eO^DqvsT2hwX4kjZue3KVG_zQs?&53)y5}OmGYU{zc#x{uJ-xfIUyMRy267v+lP1Q ziJNhn5Bw?xm8|4h!Vd3b^&tmSOY1S@+WmoEb#cTwO{-yhcMPuZ1I<|r^Nd|VoSA5m zzlLEQT#p@~>9Gm=1&&hZF12((WRu0#PyPb3HY%FlBL4hiO4->V*x$)CYk{@Scbn5u zVg$8H-GhYINiN5E3yBz!BwSER7o;+`rz`iqP!D#eQNLVx-C}3#bz>AxL{dYPb zYnm3XBpi&LAP~8Q5WiM>$ zg<&~DkeH6QXTZiG!x4$77 zG4`(U0`NTPxrTpsflOy%)Xqk!9=DKA+`vRR0(|YtZ|(PtC%y1o@uO_?ZLP9bN05wW zdp+TXLCKQNhLaR3Bw&lNp5mmK=ZQ1G0@w3ywLfg#nJX-By7ah$1nG#xD=V#(+@vV^ zW-g>`u3*arp8~8<1|HN|J;7jrg1j99GS|9+nlMx8;cHYXh^zQ|Uo~>JLaZ1rcaUfe zM<>&(b6@>guWJiQ)Ryb}qVFHRn1Oc3s%ctihzsf7S!ZVz9Jj)5QI+;9XpX3wnuIePW7 z*~2+LP<9^lT>`TaT0k;-kQpa*$`7+FiS(gU5KD&n6?{@8Z~L^|P}H@aM`DF0>UNN# zM*bO{Brps? zElByBxj^ESh-_xNG{CaQvgS{lO_Oxtn{c80*<-0x^SHR3H<0#*vS+XrGQ60jsL@ev z?J-J3@(LBW(|=nh55F_m`kVQ~LtIK#$$riF%P8-Q68Tj{7Qs}_OyDW}b;Nb`Xy-!< z(vTExOuGh?4}g7^@xv(6rF)->zX}e)YmPdMXpv(hCW-DMqpyelKOH9ELDJMRjv1gZ*q21UFE<0eYj8oam>7dImno~BjRy8#% z%^Fu~z^VC8Qg8t16w0c9Nn~hgYidGc)nm8Wj?)>g zhHWdlzS;2yHn26G&CTYkCLBoafIQx;2Qmd;U&X1S@SpS_kY*9rl$qVYS?z>VQ*~*5 z5(=N%>cc7P1jpPt?NNN`d3) zT4o%dmwtqE#JIJa$j|+lT~^1wE1Bzr;fsojS*eA^KarbuzE1L0RAA2kmVyknhwoy2 zr`mlB|ERwT{Owc&Nz}RTeTxgW`_y_kNOm)vG2d7d7KNzR^2F7YT@+Qz^1=ki!zI&{ zJo zQSU5^c4bkcQ7JbX?G+|fyhXIuq>glhl_LshBJmS=jw31$7;?HBONL6DW82ehsW}wk z`8j(6%t%xcv3Y-aJW_uCY=}B&GAo@COg6T`hBF=uOiS4Y<*@xsGo+4@9_U2gkQ$5I z^$4SS&i+jNB+7cZJGMbZDKxf+6jqN4arMszm<(ZVrJQl?QC)<6sM#x32oP8cV*z?~ zRW#wy1XWoJdG0OE08!^{KB!{V_d|Lz>D8Tz;mhCd2|Q8KGAiw5 zHgPNhKkDWxXqjpF(PcgQP5&34YE&rN(*8sIL6M`9oZH#-*>i0;*1o#c%&PDs)?2Ze zsN>;T&gsO@mj+|wmIU%)9N~5ig6bm|Rt<*iu2o-BJgX0IsEq{qeKznDffG)4G>;}Z zd`+K3)$6X4B!CxP*f(W^yjD56o?xk6$3#^SY8|lrK2lSj4tz#bK*2V_>p-DE+Lw>0 znLZ1$cd3O0rLjFF#POI^y3HbT1rBm-CoW?Ft;BH9u#< ztxGZFpi~rCl6x5o2zVWq!^ip}P%4USwkofqH1Ot=^q_CnMO<2ZWqy%fyzgaE@12~D zyCf?6^SzBtPO`kaUPlWS@TMPCF0(f1DFpmD@||anD(!)E_eQos5a&Q;AGM!Q5TIMl zN&VEdstIeq$E`fJYy9O#2J90dWlxI9$Rkb)yl}`bc}f7)snTB`*mTq|Uj*+~nZ<0{ zt39p*>Q0wEMecy;w^n;3nfq?GuIH$QY!sxQK$%80=hk2ApZCMXCrGISu1>N&e%Ex7 zR%&Z=Nr5jbQf8?FY6=LgMgE>1_|D(qPVdL=(kYuaeKxI_Xq$GDyXyIC-Qb#s7mhgF zbt6_T&XnJC#0%eb;~I-&AK6dg?6ej1_wWn_BJmRGh7nLU~i#ie?#hlKIVp zDO`(f87L!GE;Bz6o^GP7NnKZ#4|0K<4#B2w*8zA4?g!hI*jS41rH2MaBjuds2IM^Zh$>DK4?|(jNH098c@FqK#==frlsxd zgjXcvJ!VyLtZmj~?iH2H4U+t%y@FJTG18K&d?@1wHF@4S6b+8vY|gI}N%suZwPLMV zg)s4_>YB?G07er|L1_v_lLAAoVv@Aoindz5<( z@xotiA)h(Sw|W4lP_R0bm|+&D(-i{L7!s%2{nB4D<-LTlNWbGBVgh+2iS*%{6;|^= zmUg!nwtH*vVzJYNz%Nrn;c@gH2XN!YWFHBD{)RzJ_Kv^F&uP!|0DF0n1w5n!nmc=G zlp#b4{q3(1wLx|?>!{x;qkWTi+A?^?Lk_%0h!lsVOvM&`mA_Nd6_gICQHZ_>&E?~6 z-RNQO^lHM@DK{eMi&eVLTLNj04v zbF2O_fcW5`ddHeuV%sUfldh?H+?#%MvaqjoWurOy^gH&wf46P{W=Ofkw6@?PPG;fNZR#m0=4i`SKH0!L|Zz{t{{w#+nJ5(qtwiP3B*i5nt$3#EbBRVcK}ZILvA5@5R27xIfD2 z_!{$_DNpLX4rX1}jTL`kE4Qq_L*CD+F7@!WUf(vIL5JTFCBbv*)eX zD|8FVvCBCKhcYoJ6j-G{zvo@ZQPJ%=klB4{e)4~@G@m#gs1|KQ?KWAi)G{FOc)vcY zon+w6O)>N0(VE1!Taq;HN&`lz!v(Nz*+wLUH0*|MZI-s*7Ww^Pu@I+r;apNNufK>MX}V&$Vdvw-K+5wanbUFne#|*d7B1W@7oRrMC5$U|RhW z_D)4-bTe-EMOr&NOZyS+(5D}`ws&jmt5_(-H38sj@*!0~Y5|#}tT}Ey*8aec)C^xg zOhGnnzTPagjLuU7m3SU_6lF=;^4TdjQkus~c4)l+*Q?aJ81R2I3GQ{F^?uFT7Ca7i z8-WYvVO$w)>+hjDnhaCS24fb#3jC89uLft+&iE|N%KSU!s#bs7qH9qt-Lz^mwp1Q2 z8Cgx&)A|Am^%J-_<&p137D#K0*NROvs9d;J$5Tf)Zv%DIeo|hW2{$+*lu@-5*xN7> z0oOvYCbwH>*|_!KL#?%6I9aq%d1Qiyl`NVBc=}DhLxz$pydyNlx(jk~6SdN>!MAnlqw69iBjFqLT|Xe zZFZR535F75-mQBz{5P|Vs}&^Pr|@L%3Mw&5%pY7pnmo~Qi-|Z{ zoh3~Tgdi|@MhJ|=o%tf*J6$H1z%rA3!C_r-Rpk#;%MV*=;qEADXq`;{99n=JApw1s z{&S*OmA#}Az#B(#o|2mir_RJF5}HkQ!W{ix!@VA*Y; z1K|eZs4OmjvLB2WFjTGNwwL7)Q|LcP4uxO4PKEU(&V2fk ziY<<8+avOaPXNDasid8_3-so%f2-MXsv!Xl7DJG|K?ojiaQ?UqL*%B|78|aXF{F+a zQ{;!;g#+roZ-Vt>R*P#3m<%k&Nu6jvO+FcGfxnts&rRq6&ZCpW^=+=mZh!hu(k|_W z%brT2aZXRI3)`74T|cRBDMZ7B*_c-I-+6A=1xMzr=Em!G{c!wXT^x(qugk@suX@K2 zyESE*-(zh5i6;dU(Y~#p!rnS9fah+IIFVuT9(!9*5!@NpMHJdTjFbK-8O!>}PLpzt z`jfck>=gcDK}u2@r)8qHE&-~XFlH)wB1a|`fDSEJ-GY0+n9pK>9G-Va z2uVKwf*RyEF_{IrDsB(;qeaJq4{EV$xXHu#b%6TP`YA^3`j-{+#fb*(7<{=)KeDlV zIwd#}6XB0;k@&V*SNQE(n$ok6HunR1$=0{5F3k^Vl`^kZ&BG(kWC1G12HZu9gA&cV zAwrHssVnqwWVBdO=srmJsDfjtBn{w2*XPZ2H4RGQjzPu^jE^eSZyykpN$C)zG|>n> zOSG`Gb&i2iYGfh?8)0^H0KR8$InPm)-9j3(GU8(lKRKfjgm%Hm!p*G1o`S7v zGk#gU1?H-KMUT!3lhUmj;E$86+_J_S%FXYn7F}tZ#woQ){Jz4^ijT^cJ2)#%%7ghd zxynQ$%*JKfx(50q612#aykBc zUjH_K$qT$b956`#K8u@757yr1A_>wqt!pb56yVCW)nzgWPJhS$>Dm@b?ST##V`*IJ zkppRk=Y%tWeJEtq4d0DvK{*l24=ch8`tkNL!u*aG946adZm}bh!7UJ0hxNNpP6Eef zX?HkLTyDc#8VU8{NniO&B8}az0iD&k7D>m?8I2W>e4i9;i*jND1(VOVcLBH%#SD4| zLAe>3rl9#*O?ewSiAad9c91&~Bb`wW(%XYzYyAFSS+fwZNsN|p7{Rscvc6?O)iys# zuNor6rD1bc0}LF6kRdMbbc=)ehUVhC6e*$9%=O&wVBS5qN}NwAzj;9HKV|f9KcnkU zHP&RLWS&b)c$Kbu&vFsZ&ro^yri$;9O`Md8|mX9WN8yf+xbdv?`J#G0hH+f>TPi2qb36)`Gz_+Fk#?;yaIJO2nT zR%H%DEiCudT{OAX-t2jLci~+>f#=oftn!aB^dw7!i7nulIel^0&n0e9cpBn=@7vi* zb#VZj1cSde^h%)==9JoRQf|``=lUVZ@bzTL7w1EX851B;yVsY%S=pin6J0D#$dE<;Ci7hybd8zee__kmXJaRQ;`V{zJO&FZ zupa$W!KL$v7`=cde`GN18ytRKKz+wwD9Sl&<9Y8EDd^)h$G^`3ryWitz>2C6Ob*VP zhht1U!(=^yp6lz$ZBeU5tk?0DdrsWs9He8?b6Aqly^@Wo#YTB=68T=|@7E{2XM32+ zXo~cY$RhxMZQ)a0mNvv+df*|^jD9icQ`xtMozx$E9=r^my0r4pj>k3DtoXa2?FmUB zi+$^;r!|X@2{soKiX${k+&~naTdIaH6F1^W_P2S`a(v#k%9zbrAR77dx ztI&exS=J~PGOHWw)NN4lq)se$q!c;{^cr1#&U^&EF*MV^3_*r`%ut40R%$f@S!~u! z;-Oe=3Yn_{yvYZuNyQLbP#rZ7g+X^73PYMTJwg&Zb+QySwlRpdjOW5hXGc1&MX;~$ zND&{64X-JLuMBU(1kxBQk#o^g>s`izw| zLLaI18v@_0>nOBMM7<`eC$atM;OVSx&`e3;>z>81S2oOKBW^=aSnVwwu&d@?dAXnh z1zM2h#2BV3QMZ)^nw}dr{1M}pp-M+gB)Rbi<_!0iT5Urxy;)CyXo_RJ!&2BFOe(Cq zt+=7$9!>}aK}|}|b7EB$@Ss7}P9j}CATDFQ%Y47RX85I&o^Zs(RoU9NTH3EN=lLFq z6Km%)>+E4pg6OcqC#|@B&;l7Xk;WOHgE|b%t=WS0GnJS@sMAE-*~ix+Xr&@{Na_hW zhkzHe8m2NdATKT{pU;F_iq(pM6&!QHmWsLzQfo8+`%zxnca0rMSFou*Kzqx}9r}Lw ztm7t3+U|P@7u-)9`bZgmNHf8vFiWA_*`F(60dnz%N5w znUWNGRfdzLl8>2f1=d|(?uthzB_^cUS%gT8RRG$O2zBYId)ar(F)O&#&b~ZcgWXkG z1`w;m@dXq%UDXW4Lp165WZ>LWJmR~#bb!5^`VaL_c-+%1ojiaagW<+5=+_KYh>+Vr z=z2U@M50R6ZICQAoTo9~GyKFl(%^xMuwRhdO;VlTF4v#s)Ix3~ZarvHOxD87AD-IOylVGj6Xw_9|ctwG`(%TUDN$e=BKyv>CS+MjuGvgMM9?Dg6fnjcg^Ln4#7*n-m4kbianCFqieF@HVONcn)xWG{(SMxemv z7rtKM_|q7(1%YNY+SmU0!#RZhA^9R-kSbix9(fqrP4gKSx_m-gm`pK@0B#|J6u6o4o;GA0zcbg{=t9G3&() zs)P8tpR|kir>2a0FXL0&CDcXQbA=UZEghRJXB6;g)gS|CbR{@dQh_L$lU$5|(-|cd zQZW}CxefCgO_f&I!r1lc=^}|F6l~$EXLEd;&pzTBwwBn4Q7F7w2Hix4+Vep5J(4{h zt4kk^*`|or9x7eNIg}70F?8UB-dzletuS+`Yo0C~rxBEeddS-5)wuY#8$84wf7lY6 z6>VDxzrulV!Tb{=_SMOP9Zyyly5#)a;6P1f&%8wn5g%`OxJd9^E7(iua%NO(8n~^2 z3UqsDv{Iyrj-MNc>ytUIfzSBt6NC2*WCpJziZyAZI$$tNA_QS7akLC&SXXbf2rvhK zF0W>0zHVk-`&X2rM8l^M&}n3ns^m1KkQfYLkC~ZyBlgVv*qdfNx)ly``9+f2)xCHW z9^w?JD!QPqYjO^Bv z+jPux)0n4sjr5_fwCtmRoJeRo;9=j9JoZ>A4T{u_Fhw-1hhQ?QOPGft)#g$yM@dl=bWT~32|`v+A70PWA z14zW@i1wuEQ;esyvUXz#$i=ZsPMY#@RPwIA?%M+fNq0ngX@dR%Kq_8AL-j>M0! zgBFFd_W>PN&&(<7&g+Z!9*$%aer(aJ%4u`Lb?lBc?;zt9xB8v~=Q)*-+lk>F*h%&6 zu+)jF?ir4Z0Xh;F*DbHgFeXmre+$Pyh-GbSnvoL;#v09uI(P7^{iexAe6P$v7G*8! z>I9ox%+raFOmp8*tmQQ6424!@(;ZSh$*T)nC41ic)C^*cc`80+OWL_=FOz<$(i1Yz zGYCB&<(IHY=fKXeC8o9)?(O3I(uofI*o-~@8(v%Ov8{jl!Txwmb~m4sO;X2j0PSTe zG<*o+sy0T}O4Kejs8#(ENeYa?MwH6tfVHD%Uwh&>@xMuNK<#ZH9u1&k^Cbp?NB%92 z;w**9eVJP)0{?y%jVZ#!?HCD}AHG{Fo(&#C)$_jhQzd~d2JvS8QI^HdsDRCUQZ{97 z2SX!-GfY*gG)v5QmYe=Q!=i!npI*$`JFjSYc;~p0WZ1@U#W>T^p&#wf5%K)bzQ^f5 z_SqHI74KK1C;8)~gFU|ZzoI@J6(K7{>f);~oE&bU|KO752{eiuxeJ_C!Y=_s*|Gkg zX%|2wY?!zg&c`C4s#Xj!#;UgfcX{?4es3n}XbA`)k7#L=oM0lZRM!u|-y-q;SQnMj zs>W#Goe_0V_Mvlth7$%DMn7Jdo&1CF%qoLrHtS+cVY8>@RhZhg?O-hqW!bZwn{SMp zr^@TBfTu~kILt@pbAXCmv&Z~$S4=gGL?nym$pfn1DysR`=GWMCQGlBC+4*_er2e~L z7EVO8Kc+5lT~HF?!$$A3J*5f|tk~{{+{N8&vC@1bSwp5#KpG544g7?x2z+OJm^m%_ z_5gC$lO|K`cS}kCf!@~`0#eusbvsUrA-vE<*HH4A!%Z9*@Fnut#O3T?TTPkqoxN2= zXN@J3>Pxp)!#ItZW?o;pgT>Y5^@}~3AZ~y*ayA=ZL0uMX!wR-xZ3GJv8;cB6Ur?&= z)4uF2o|&OD#Q>G7(g^6rV~q~XS7XY}w%M}CfdF|H&~WX6vK{li6cZ85+6l@R@XVpg zm(nIO12KK+l48>dvhe<}{P>y)_1ny=;wln@lV`i3+SJqN*wb!vbY@c=6Rp=9ZS+GL6g%XroUtG5@UwDbjVZGXZFN5@ zV+Llcyp&u@1GTq#!xK{?rd>~a!dl%mYD%5&)f4Jhz(~IOJC3)h%z;L;4Y-=sTw%%e zpM^6wAtP|n?&VFa&tUWcrH_+c{Hm5OZD@^1xTBnFRadOsHoJwg7ZL1~{$j_*@i3Nf z8uD$;^_|`bSt{Z}?TK&KV)*gTm9*j4ml;=OyvacWZ3vcZ_*L$>fA~?ei{|JxBS27= z)G_DB4rT&UiV*yVSHTpV27dNZUVK@+)v>&H(if<7%Kj62n4|EgCf9r zY4E%xK~=Qj+&Pe0pV#baE*if?)elAHD%fs&I>e}3{EODrZ)s`q6P6_M+&=?+GU2So zDk(^<#QPa~QNQ|yyCO|()qb#n>$~ET5fj;1m?;iIeG&RTSbmi2i>nY6YYdtUVR65K z4WQ<18#*~RC7L#yhFAuDy)x8d3_I@9zz~5xz1737mu#H^tTLzxbc#50);W?k7C;WWpi)T36%D&k$g@G?lf zwkPmGrfB?8$)P6J-j^SnU8jdWU(%tn}qJq6C=_IDJB6Jl@ zNhwBEDpNCvLE0G;s$Cs3N}h4x2NuJD@TDs|6FR9WGW1s$e{6*IIVpAgs|!j70WN1v z*qq7AMmE&hYQDD6HwH&+jV^Ac6|fPtD`r36{i4UrmlZgtl$1tE35JTVxK03&@X_YZJhYS(WdCj8 z$eY>I_aNKbm(n~8{>B+tjwyOBzkRE;4sUC{`E$N(-0Q&r8I$(wR9xhEYsS$KAqGDV zwz@M>N%#R;)I?fewhF3{{kEno8WFDUj1V>>q$COcpZ+S=eZ%I{uOh$)fuZT< zpP6GNI5K_rAVUvR(PKf6T9FGQ#q_Qa}7&c@WL@zk&pI} z@VZ|#HZ6I{V30cf(8}HS({KW`I$cAAq`4GqpYU*c=Ga#%Njn>9vel$w#&)&$!!kaG zje%sIonoSH?;(k<>tI_-2+oG0s1Jry5m#F{`kGv^!OAqnv^Y^&hRKNe@QC4}3UU;r#f0*dJ_EbnYMkKneZ|PD^+UOSIG;z~$@W)*j-yHO^|sPOTTDA$J(lr)dL^ zryq<>b{6VYr~DjC6&u?>ORhHI8sgdrDI16QS(t*B2_h>I`RAN3$2R540uqR2B{OL# zS@18uHe6*VDMq3(;@HCQfDr(j>@i+fD$!B1Hy-iyWSoU+4-vt|s+TZJ;br=zw7Avs zOtMvHw`mKn(GKpBx^vOY&7tE${WxnRDA?*)DPQ>4q{_Mz8mkkWcLS{$@>-H z3vQ79s}C2(?7U}ouNmJRFT4z-r>7WU7zBsa0vk1|G++{819hR71QZ;Fqwk+;f(0qF zunEG2?;iD68WTsmk)fbwuZ_eK;2rXr<)K8kq*nJtD4cI%@ez?laes~@udCI=&* zlKi;rK90;kM`EWXDanzq4L|Q&=$vF_`*J{LEa-eoJ@-d_xkt-KOpP7kXt{r9pHUXW z`g~q9?g?NfnT&pJ?C1QIy;V3|?u6=t-C9)?O~tl7_k|rem9; za}eE5*lVf4IYg%*LtAacyfoi$zkdF*WUY2-4$=*I@MUgJTEgSY8`>;6f`i@e&qUk%%PRw!_QolS7tG z(nxhTVy#;*j9~SJH=*}IIxc^t7TqTpTdC1Ju-&hIzDi)f>%9nJ9*wW=#|3-D7DbEw zoOFDq=GJIFJd`Whbq^VD8^vh-qffxdwT3T6PjFEQf-?3z9ViPFI{^=m{S8%41ROSN zJ5_pwK1K(weS5Fkf6z?#09EpylXR?leF+l0mx2C@ooELtZ<2ie1}e22-^>8pR9Q~ zI@YrC0zSpm!k;PaMYRnc<&Nak#T|qF1X@^S$p;OYv`?lGhDl1`ezq-dXJYG$fq({w z=ZiubC^N{aKy^WFkZ7U56q@|CFD&yxF=;{-hV5Lstk8b5eF0Y)!ZZLk$80pCuio~v z6Y4zRnZp3>XAc*&HVV*d{dN=lh`$gzTT9 zWzq3ko^d^M;~BCb#&ffzJSMT$O4bO-B_<sg;`&0K4%*Pm%VBH8zcD;?Y##iLtS>Hxa6@br?k4n9Wtvd^_b4L z#MzHqRoV5 zt}a>8q75NVxlat(PjrAIyW=;`YvQJ)uwfi|K^gCe$1(r)-Sh#O5D&Nj_P4lwl5Lz3 zzZMLjV8*G)6@JcTumluGl(>x@UT~Y76}pDG!h)uypPq5l<;12+IaljV4z)D?+Hi1Z z7u0y;Hg=`a+@0^qky)yEDOlF2-H=(v+lLC0AJOw(r_?vq6w8 zV~&+dYE<~~=WHnUHO}+s1(_bo$Y%_sCOZuhUsX)P}B z|F3BEH;?XC+eN`N<2nEO53!+*n`{oB-Syx@B5f%RQxwv+SwI(L_eLH(hRVM*WJ^d` z?dlWT)1P|=F$5vJu->ooPEp@O#(TJrZ9?1vs(9`wqwTJCt*)X{Z}oPt%T5hE?n_x= zX4%X6xE@FxP8$uIME|xeNz9|1VSU;X*m#u4fUC@nlc{ESUo;l^M;9VT4BGj7l!_}C zF_2=F=RZXemwpQm*Bb$HOEXM!vJ!g5yMjV$`j&`ph*ys`R|M}Gg?Ug4i%Lxt7VbVRj+v3M(x z7>?xxxDoO<2h;md&%@&8z+6R3%GvCcclp65Z=zO)A#EV z>N4YiWu<`TEUZ3hK3`@Cb3W8RQ*Fh|yoDldRC41uLBpVmu;LA6sjKrZyN`&qi&g-s z%_a#nk&R@@8^(0|I!eZqY|yJn48tD=ylzG=`p>I!XS@M{x1ab93T|-C!YI-fky7ug zltRSZJ?JK%dP(Zz0r3@7lDihV;GbDcRoYN$!kD(lA!W!Eiya5{%zHYAS#6p-r9Aa1 zVX~%m(=7vs*DNzv$DPbrlVcT`6kU&D(!a?SQ+cwvVTY3`xj+yP^*5uw4%toY7G>_rew>5rL#NSPAq|(8e7!xZmqWcU~mB$x0xM(z3KctW$nY z*?WET4V**bO4HHvPD-&Czpxgje80lEsBlYz3B%G#4@vr!Gw@@1t>JQ-O)FB+;CE-D zyJtG&oqt>X=RQky&Kc9V`uGAMf-K!t)97y007OUv_74h&*DwAHCm`qc>le_(_x0N> z2Lc4n&j1@FfCfICbCOoCo@r8FeqCUMQdj=En+_6u;5_{c<_XcZKYHNCZ@u*rK7BWY z^pI;rh`de+TS(#3q5(VQYp-vZir%}nMD#(8jmf32zVlS|$`d@%?7j)1EddYXL`5hn zygw8O({C}e(&(LHyO2dK78}d355-tz!(8x}zs~JO_A+^58*MW9PVHWA7LU^C!h4Te zy+~znmpL7pqRjdMsdVAftZ1v~d?NttYH+4b?F2 zXw}8O_vZOl0tRw50qY`2q#Q46OtJzBPNjv7B#~1i(%yYqUnQApIfFs#W|Ue^e?_+L z2NDq@-%9cF!06E9ln)u|0W8yE`BbPoRMDmX@o@KP0Fc705n*I1PF$N=WtL}AdwUu% zYl*}tF7e$ho*`d^2?j@*6_sC@FiVg~1TKStjW{KNq4J58hEI0yKovvjT39y#;9s%z zqY94kUco=J6*r!PvWPo4t?5`He@XubYB`puBHL0!@;>mxXxBb{4vcsS2yyQ#X$v{~ zBY=Yf)KDF$S`AH)Z?oM&|>Na%KGo-Z}&>d@J2|EfxJuE%MzxjGF zSS8-Rc&+N`?CtuA*%YL?g*{=Vu?DmU_!KN<>0wq;br(T@^;X{?}1=O^dx$`Xd5NhqJs5 z@Wd;JM_(PHsE8zI3qudHZ27^sxtg#|slXbTbeoB=j2=p>k0BQcf*ws)4YK{BUZZ=< zj@LNwAy}5Smv!vXT_(6)B7&k8@}AR|GSk47ubmC{?PT=852d!L#Q^%Q&0`ll+X6C6 zJHhETS}ynWqmWlG^zGv2+677Psx1PsWF&DwpE$ssI_y2;4RNBYaRN2uEEc#>1 z*$98nDQdBUxeX|M-YI|O{>wl0_w>g|VivTM{rO75r%dZGRaMe2j!qR~&A{~W%U|$f ziADJC(;G)H$)OSh&F_A8ZO$v}+r@OaexLy-o$z~CZ8dNi9z=`XB5X{olam~CxKUq6 zHTCBPWO3dpk7vs9sz*KZAm3h0HLC2|K~6v%(_KPCA85QJT^gSGfh4w>8vih%wRj74 z=BA3O-kV6VuxsHAF znWcDvjT3~8J<2_FpYeZZ>cDw;NfJVvKy@=rsF2FqNZ6!DKX`bEQ=J1ZHTF#zyOQ31 zUl7>VxHE(KXqxLwWYub!CgA-_4%;^BY%B=wZ%Hy->G}Ihk^UhpH|Tg_r$^wjGG60Z z#63Q18o{oY^=`yL-@`TIhUYX(E9oezl2`AtH_O;Vs~m@9pE$T*?ra1;4(5B{6vm{7 zF>0!{hxA&Qc$5O^Fcr_q{|kw2FE{|B$R8y_&H%LE@ z%0L7W;`^<*n06y3ntrUF)w)`egIrf0l15Zf67HQtJft#kUlmg0c7>V3Ro9o+ebEw- z)+z5(#VyGW*UVM;WxESay3IdxbFrlL6aQOTR6vzU0#u2d1bm6r3RApd{)HfnZ8(Sr z?QF98=t2^DfWFd6vxXBjj37LuetHgsP(kmk2`Cyb-uOX_b}euOX8ORGH785W1xi!s z=DW@p;O~1QAne8kEQ<1}AbMu?tjQ`oS_8ur4`w~R=7_SHAQ536Zl3MJr_b4dG&UXk zdFlU;Q=s+=+{p5HxMilpV}^TiRy?KsT>D>bgr^ZB!++68s)ZMQ@V$@_PL+fkbhe$y zJnEll29qXRE7j#SAq=C74@@+>GM-`GVamr9RvfxvEQs3=O?UE(iJO4pLj_*mrddR+ zst```q-QWy`YsC3GG7<}nkeh%rH?ZWpv{NhPi6AWg*?Idx~aI@C793KTO8K@M3jW- zmv6uCS8iQS^qTuDqC-}n={`aHl!_}`ttu;&)BFq@64}70w_>e#QpS2v(_`$E!y@Fk ziYm&YU5}tg#mDgYdh@&(DQQ>edq+uu3h=gS`xXx87ehvO&B!zo2^N4?Ea~Oq*79f` zHSA-G^2}|&I5~X~2#DL+ONPnOfqv>K!6~F=y4YBT+rGxL<6?eIJ-paMiac(TM2w8y z`%%P%gMnibts$g6AJ1;f z&EJQXQbXFWPY9&&CB{=XR3xWN01MMI;BP0j2QP~!kg}b@byINh{iZnaY&4unZcT@4 z)#nG!pn#hN-)3lN=1VezV*?rYdL=iDN?KpS(bzx2d<>EE&H^V6a4hbwU+2JDdM?>` zs<2Hb<#ubf%Fi~?tF0TJ-~9QD_DL9o88j7H+27ZkQb*I9?sd-@9?WlWzBGM$ygg6N z*UjvfU_(vh0}d1A@0a^&JFnt-e3gCkr@}eftmRAJ#^|Uy;l(wDwoKfY9g53!tqsd` z?d&%YzIPqRVI#1DJo)50g%x)N$SB=M5|K|d7wV-JMM${Y~_bY(BE+U z8%q57hm-UMj^#*dK0+A_b+w++EG*W8%J+@cHwywz9T3IrUe0X zKG|MMS7(i4!XT`NtmwG~Iq=-!LzQbU~Bf6z!V)_K2Px zT)g@MKO2Km+nFo5%|}oog70gz>e^N1b!PQc-D^((GCA1Blle?N1X zEW#zNEA_d?ky6e+$C4I`J>>QWHCaP5RQBGm{uY=|L&Q2MRdyt6VLf zII;EWOEw8Nh9_gQ8fPmH)}6lWVHe2!%WeKH81Ykfx8J;NLpV|XoiVpy1fn<*HK<>e zrQ4}=q3yIh2d*37iYTGiC>3SEm2-o&iu=4ls(GOwpAdg{ir^f4c17zYZ@3uv=zK#) z(K6iC+v&i6)4ub~=)!14OJ>HHh>@^Spo2G^KhWmfG8(#tme*VAw>g6NM~;kPdFXNMT~7LU~p-VG>Q2 zB1@%a2w;u?tjkXyOW>Dagw}mmpCS`1TB4f=r)J}>d*g~oITXZz%xBP6 zblSkeGF5Nu$CKZZBq=QbrgphxZo__)kG@+8;IhiXG>vK^|J$N>HtQaPfIQsuGqY$x zE(&$BIQsLOL*R}gL>9h~IRBo3Z?Dy|_vHlPmn+Ul0_U3~yVJeOvaf{-N?gyhQ+FqW z1P%^~35@*AJr?RS1VS!L!tTRWX#Xi7N^FJ-qT&^P-RBNn zd(X<_uzSW507cojOAaLf&aG{+O)QI@-$A4xDYow3GKkL8x!^b`X(+x0+tEH zI9V4s-judTB6$VVs?Y;qlvrUAzQZ~cZ-r;7U{!rQc*mtaY7v0!*fAhhAlpzfB8_zrd6(l*{5_$yD5g;1$1^^Z3$SAeY7HF)nDv#$4 z0UgZ{RC6qheMd-YI=%$oxpV_+!t|p{wUY$9b!;4l)#8{lr--l)rX@d+PG8#?e zyd>xbyxZ8=wqh1wO0^NQ#$TIO&M>Z}%(Q_D#r`_FOEW#f=(fLi>>UJ560+=lnFGk6D?a<$*ksNf+O$ z{Zp{4<4$hZ<1Ujp{c`V=09GLYqAw8Bh}++(rk;BOC}YZtm)W38Ko8@5u83ql<5pW2 zUq-nSdBWkUJWWB5r1k-)X8TvFD`PA8)>Paa`^{v!0)TvEr%~-$PJg*fm^=@$dFhdY zP$Y!2Po`cYpQ=r!1#8|mP9M7c`6SlXoY3(i)5n0{B8#3dHPl08J^x?TT6MQ@xBUY& zu8co%2h*}ljH@$8+FJSXtAt4~SaXWH6hYF?_s7Ly8|`Yf1BRF2PmB)mG1a>!j21=< z_W;RZeh}v+>UoT@hv|b$^NB{cc%cXGq>q(}6+|2W`*hgq8vVGtT5^gj9k#m1L!?3( zm<}_yCMgpz5l90*!Fylj7Qy9Zq?9m@H3ohIuLO}m5DXWPBW&FW)Qvi4FBE+#diAsc z@HjW?l{Ha2*{LGnERxzjI>ehau@Qy$Agt1HRd~tA z%VpR}GXLD)@)iK3@L3d#$9>dE(dsk1S#af8lr`KmOS3RpR+Xi9hD`~OBM!tFh!$&K zTqa|i6?Y5Hg5vr&3kamH#>ZP^M-&O>8-yLJ`pg9QPm;j%5S(cH5!T230eGcMmj3-?ac7vkU(Hne;X~P4A^P08zG7^R|?%q=+lV?p_GMLw)Wzl?x%R?yoOF_LR z@Jhm3aAqVhuy~6pt_2&uwq7dnyN0%&t<_3xa`uw_9IX<8^1MlFvxtfHiyaLBrw;iH zeD+c}35_-`VF>rbAObCW{7eQRLMChLsBVgX!;Fuq_pq*8D+S}kUXW8HFFcIqs{RiF1c-mDc?`r_N9dgt zOX9qyNr52jd^FJusOB!sHC$vKlD3POa7jmWYk;ms2|XbH3TZK&l(=WDPU43Ae{2g9({KxOItevUVEIv2y0U?atKV zaVQw|#N-)(T3*hW5e~q{qnIFRA*TOG-4^A|94^g68<~?U!mGGN%=B-|WJf>aW;juU zPWuWB?95C!$s^R(#)PgMcnYY+H}4fj+=4U(CYR6HQLB3s7Xld5f0BVnYg_^xBOCPCeH@hMQ*EVKGg4!qqtpNoOu$r^)q@TjRS2kt01BFY80hSDL zN^f7cSS>}LBEJN&xIXzIwQVB|=lkHzKq{m;5F^AojH`^QCh1Q=>{Kucy4A%cp0XK7 zPJv&6Jr#RTpp9vLX=susVh6VN_pK~+>nv)hs*PpXtp2#i2v-2Xi~}OToU@pC55V+h zBbkw|QV{Awpk_EdYdphZ7GT=xukfZf|5>}I_%HUH`X0ssZN~=p*g2yN+v9905x?%8 z;xee_#GRwasU2oNor^`(xNf_mbezj4_WYjE;vpR2(Rj8AV&3#hyjC@cGsR|$20aA4 z@@f?s1>6#SzLH$>|I+AO*oY=VfjV4ypWQ=gS%pG^2QV67{ep=E>5kXGoGKmerz9}O z*>k&xce8H7H>*PHN?4aPL4VSK(hsZn>e@(CHGmLlRhUX%(_FhMRpqwRI@U>diJ3Uc>^y~eAsB1D12{#C=hQFP&GMPW*m_2Leg=Pl9k@4+8 zgmh?01Wv6AMaco03i&bDRwXxJD625IlzbRwkR4apJ%dDFakWolSw~Bta;n(p^n|p= z)Zf_2YD;Q<$ICswWLeRgP!%Aqv>K?-JaOX+aRih=%9Z@j`Fb%LzcU~VT`kq#KTEgkHTHIJgGZe(uc(U`GG9vz4JJ&0Ko|QJ10P&R(tmR7X`w;-=pdf!=e1dUQ_yz zNfC_9b!X$4(GBqcnyaAcQSq8PfMO-L9$e0SskoC%t8-8%u?Aif2`$Flt)YpIFp@pG zE6NqFGEu&%xNk+eLEeNnd*&p}qJEd+GuGqS$qS5WgK`-{UL967RMXKdmU_@1IyfAnWzl1Q9qi#P|72l*D5Hb{ zSL}A>iSJ|SxQ4KcZRi1|d`7Jp=K8Y88R%1tA? zh_P(QXCMw^TSGil`mI4|7yuE&=CXz8Y-^=L#Y6?r%-hg`guY!z*{W^T*>nPI%O%89 z-&f;fPh4D64#kp0aLZWS4g#EIL)a$N|B~zq)GKRr5QXsqNdk~I4CLax5E+{9X)c^g35OT64#rFc#X#tbCAJENo5BinBWwc_lOa1}!ewA^YbFRJC~FY)|;TbdJj zfg>^bvU}DSE*^=`oPKTr2TY$5;92bz1a&GZ9Y*dMS}!ip0cWr?Mz5Q6Te;V(LT+P;oxeo*>cLm*UUQzEqf0< zbSTx=KhgVQIr1whU zR3E^&HtZ)JltA_+p`a&E!y5wXOl&G=HS7~^)k$9L&8Op@sgeT5kpfLb=ZzK0|&R~u2)6waJ@*x?a3SG&~x__d@ z{8rh;_$SGUN>f0smX3K`c&wDC=Z{@<3NYODw0#poU^85dq3~W>(cf^zGt41%(2B7k z)Nt+9IN;X}7mkl1JPgJ(=mN((Ot=7a;t13tlkM$1`l7muO`5glpMZ$mFkGt8c#E6n z`!jRr%B)U(kuAMoqgHlpSpvdcu**1i4047F*XJ(|h*2X;pT=%Xq26;W;VXz4m!?lq zQ%MhGBYu~V(})em3qt)P0P|3{oZf>r-dv~VpQOYR%(`@coc~ROJ;_2Vf#S;vPVP>V zWQtrUc5o0iban=wSdW*7%yH)T7$nWly+>rE4H~dOzGmvuv<8ljU3&_sVt*`tE``62?obQn)UpDsSF^0bR$fM!7rRxGZ)o zXH^^5%j?gYo9oqJlzWSB0jGle?kvV|@TU+dA1X61jLSrWWU0ClK0uSP+JrQRtG67@ z9sKgUE_6|wm3I59Nd=OduK>>Es}3%(P3ULbZ>aDUwNv?vT%KPs27tYuo(~H(Xxp{* z^w(c-#KOVht+@%aNP8Kl-WV#8K1HresZ%60{L`bC7j7bB6n{<7E{oGTELCVGK6RS# z^`nP$A#`v5Dd63cZR?7}jjx9DaF}D_D-4;7U`t`ez&>Kc{BC>DPv_|Lmk`S$)-M5_ znXe^8>yvv{NpVB@3@V3fqd@HLL6^-qJsddhRiyn*?KlB6)$JBe;50LSk(p*>T2eoM|KH>iP{MKpp35akbA(<)5=o zm7rUW`=W$-ugGZ<07@|IfPx}_AF&UKvGdFWM?J&ovE?!V{uW^ZRA?PMXuwfpOe)j0 zDkc^FWaLXGEe9{U7pLw9{c8Sq5*Bw`wV?TL5n_o+s#t+XMV7Z4j^;mC{b?LVI4}kVv@1 z1sg^jy&+9UnkMcdA4c@GC%JL)kUg-m!zI!MPlM^OPizU2)K-Di*U9R8z@T}UGUT9qo{A-v5?KnNt6TaFsivb&xJ6Xf)V-?pA)3I01{jd=02(ijkh zb&&1*CF)z?4DHlpQLVCHinDt9nWvmJ4DC$60A(TbOKWLC*(`!nQfbZKtU)b@`KWR! zp0dXK+71(5vCfLj3?)Gon}6>Qs)fir`J4HbrS6bjWU++8yF=mD{2Xr5ASL1s|I-qg zj>mW(U`|1#YKgLXcMZeE-H6@3GWI)qZV{ZwC4N41dEO$ zVUnkGma9rd-yZZJoJV?pY_IB@Apu;!)!7zMR0_@d+tIntp0Cjn-6-iyZI(p2jTi_B zTF+T5xMXh|;#6b0pLqp?1-L}#lCfi;MB3X}{T#zeIaaE)tv=eQKgZ}(z(UxAbLayr zlcGt9ZX>nhwfu6jk018sJ2yUxnbc&oA~l+!hp*%TGh78cm-+scVP_J>eoMwdV5c5z z*XWA4hh)}0EdQX6eM@`=>B!|tw6Nc89Jek|?Tjl>$U5qIX$4)b-=omU#Da>UeCR(2 zDk+wYA{6&W3z|A|Pe>`+yZYs4WHE$SHF4^_K%Lgwl({vGi6%=PiEaros1AOd0nV{s zi&_g9f{Ysfixtuh!%R`)TSp*VAOB zobww;P9M>51?skxNHK13t1{VL+>)C$)DK0M=IA_d3pjHl_*>Z zVIbdGa&9No$Xfi9bE{D1q(hEzyy_7j>qUrqCLE6R z5hXAV9F9kTz&;%uOD_<}RPmx;OB9XVH03PTUJ*`rJC?NbAW_tSx-<#OM!s18FWwj4 z-$SdO@-$7liw#f&a_qt#zR2)Dw za}K}cay33ulxV;ZJXM{mw40Rmo^Qmk_I z)(f1MGlivS`ZThU?|opChq@Hs7$aOyH1GT&MC2M{o&djQJpMiqhwr{_XkJux!x;w3%@Ikd@uR3}aB!X9)(B0K(NJquaG{qh~F{OIx zlD}e?rSo&%qx7F}9Htt(A#B#_2LD?OEne}#?ipkvwDW=daz!ytG~D=$68C`ND@wR1 z_KA8F3Yw%QW_g|7z?o{m7SMq}=(+%;*~t!1c+@G41e@MiWMoNf?+B@gR{`M3cFAiT zz4^^h&c0>L(aoJv#*8I}DCtllR7);G{1kTJ(1FhuqiY0M-hWwx0K=_(wFHmN!)}5y z5f2n`@+b2n+m(*j+3f~qt%3F!1?nel%ATKs<9k#V$l-a{3PS#QoXV(+OJJ6sLxdDB zF@|Gbn_Pp$ig>@j1w&0$uwEQ=`wykXuNQ+~2*wo6-8~Xr8Zw@pgiNUr8bqufRC+sr z<>9Tb-00JbtWwImAd}JEqeJ+FcfiI0GxhYE=-6BmO824}-|yy^({+zf*QQNsWKKSJ z+|x)&f#TyU@{?i*GFp43*GDKl(>*dN!;$RM)>~@!_=GJVl{N>FY0jbdnd9eYx6^@I zhkoo8q#F*Fs@f5B)(b$Bwh{hHU`rlNHUMf2(+dR;C9YWF#M}noCPW`7JE=_A|9Ap( zD?NJ{^VrQZ0pfFsCS) zExEK(8Zr}hRmXbq;HUi}E#A=JkAQk=Bd=B8j3b8rK5u(jCw~6%Ku#NRCH|**OCm9< z$1&TfAh=&B1x^t)(t2vM0Djipu@ngV#5N962O#^M!~dp0nHAa09^BUizY#EOFaZ?{ z;#zIMmNOf36=eKX4_&0~5AIg;{XBmfc}YU-EM^S$Y@9Vd8s?r3$g3Lr=C>SQ$?$f77Hrs^c_4oG(wEXvj7swm%6D32zYishVHFTXJjlK^}Lnc>U zA_AO1gEJ>Uudw7=2?KgaJ$jXy7bf5FI$!Zj>Po>nosvW>QKjgFTtEwGDt#U&qvbAw z*}O_!I;8+E43gEG5^=Qf=uH6dURu$mP^_j-%vQrjNS*7L`%uS`{k_i3kA0Y@2C754#PridRkm1H~hZHwW8a@YW2b z9wH695k`gfbV63PqMZa{T|2ul2&Z~^+TY|P^OHJx30n!X;QjRJ?Dx{2Q{JLtEeB7j zsv!-vZv!%W0tNQtE8QWWbGe`~nc9ZpYru5&@QP5iT_aY1O|%}#qBW`?xUyzo6ispl zYwH(28uk%1QOv5@#^1N6r5b6kH0Ro@bypGEaq_V+DF6p-SMz3?nK8p4rwU7!19@fE z1h3}5=fynT=^|^@=R%Mszzy&241&^>VdaBk*{DO0*g(%zmeJ!=E!TRh-6Rd^7>}JK zwz!oeFs$28(<`}t?uW1dc>W~{+w_aWwolfeq_s5Rf^A*$djm$0qH}OU2p#oLoU64O z_^%fa;o49-)1zVH;#4hI)huYvDbc+d4pElX(*D@XSdc6Kc>M?az;e)Vm)yPbx~d* zOO*nkdisSoUj&;QoS=@U&6g_qBV(}pTinM&7!*^4hxGiT)-tkMU=+eZwY z$}UTSDE+oFbyL6}c$<>q-dB)>V3m5d3o=P7=Zhn6w{LG_rUQl(A_mM%=vFcj(qiHf z6&vX~FgY`_=3)iZj(f!v9=9qHL`rQ0_uVh3lT@IlL}8PW;Y?{Z&bZ!)*OiTo?wtr2 z3d3zLm?gm-DpVXe!(WNRLD^TRT3!=x)*T}Z$>v4-jh&1S`|D-iYX&;(8>Ql z>h_n1HWY577g+~Yy4$(*AHSP;Ce9$%QQvCrv;UHgofP7uKt-rJAf)LP=+N2qIF}SD zL}@$HAkW8kjD*fxkdzmdJU!pr&4=cN0P43H4mvCkkev$7C~Hd;69|ouyup z=X)-<`TEHx7&#lyVXI(@UScv5>(Oy;{K5q7oi~^o;}U?mjYcIrM7wn_DSok|m%$^t z$g2%WMABN<3LWZW5RK@p5+dqoVB#9=NMx>QZq2Dz|9%Pdr^9&3uxeIWOW6|gl@(oWoi z$^&;>Mp73)v%1=n%(^$CVZF!KdjI?u6k$F2fS#jP8#e!CHT|=}$+UpaiS}pMOaM@U zYudV{uwI0vM0Pl^f{%XF%sM0Fm5+B9bH^S(Qs_U)@ETAj$XGG8#!&3G=uX{BjX!J{ z{%;N$CtgFkU`~PlwihB{wQ7TGSPH&3<&iX5UEQPr_o3HffcpH z(oW|AZsK496c87$X65Y;2V4f7b9CR04sN#&d3MJmKfm37vgl56K&Kj^6o$Ab*c1&F zp=U<>d;iM;Vde?NG$$NsT5x!1QNq>gH5aZ`zL-Ds%aCTx(rwCfp==sbPCP%T#7*ng9jV6?Ya{E$;|G= zYkU%Px|G=HK|E-K7*EJ2bRDg)NPCLk6HOSqp|1l4X1hYR9=;P)H zL;1a*`~1!@-Gc|od!*I`X*$Uji|C0MElJ)Ge-OCEL@bJfCU-hedJ4x%@26hwl9RfK zMtVLyeqddY=o9xXCKvz1q{8GKM^L|alRFS{7lt|z-%|X#j2RzhiHAc~y z@y$k0O>g!Zq``o60FV$o4|j&6Ptu31ZzdZ3_G??VnfV3v3}6ILf51I-vD(~2LMU(L zG)_mo_PxmDkNj`=KhseN=+>(f>EJEr$mESWK$$_Fyew%j4m?*hpI7RUzoj+U1Os?Q z{Q|g3?^6}8uluLXX66Bks$`cAL0roCAf^x?09(>#`byK{%wJ3EqWvVss_{uyjLIEK zb%In2Ah1Z-HP~&tHge}1jF;Zdz_Nno*Yl4E{r!YoOoAX#4Qdg~-V?k(Q(Co(8geN7 zVEeVJ7Ww!e404$uj5lG33AG;m0OqWLfMRpJr#1FM2ijvwCUQ_KXWeeA@Nl1+N=Y<-fvm}2Y*%e)g(L;hY^OwS zI;WrF5o~niatfbr2{*uR&g!2|3bK8S0LFf%+^B0c(n1+$%1uAa z!F!=41QQl)Zk&+y*nT?+W`0zZsFVq8o~ne`(>12Yp<>I{?wCeoPGl{=u}#t>f%M-Y zx-1kr6%ZnC7)T^GnA2;b;epzvS2^Fr3-NQ#{H&X85h!?%a3Wcin^c8KHKoF#caFu= zv-69GWg|STizRZwi@@PH-b9ibTwrAy>>qBTwdJEksYwwLen<|vZQsZNg0GXsKY?s+UkLL^TC@!UU5n2C{i ziS7q=!s^g$v&@x=ctZ~uj=9!#E|K#ZM&lcnhJoa}p87_$%y>=2s?YMFr|9Lr4C!Wc z+A$R+z|Q?!$sBipPdXwC4{Hrd`J;N@#eIPXEpWVvx5rQ~N1#z6;@&BeX8+4^S9!1C z0y%w#BWU4v1Aka&^UqJ0`K8wsU%*C+g-z)`=2!dB0xEuypwG6K<49{Bt#Of)CEKpl zWQeQvnEH$<2lEitKM>m7l%l^u@jxtO)r9F6rU_vG94lDJhoU2imD2w$AR(o35fNck zC6#_?_1AW^YNp-?*69JUIHj6@W3@)?0DoxAd68orzp!N8x#~3iKnJpF7Xv2wyT}qC zxM#O%6MAjr$Pc1A1Iw{o`40*8v(%}cafkW;ZJQiU&5=1ABRumdCB&Xr8)Pv`#7vLA zwTFq}x=9}S>=@2V{2Krvj!CdWgrcAW&I@DqnCvu1s%3C;Bjf-iWq1$IlmomI$b&XZ zZzzZWzmMT3CW)+@{nDyDy+X?;i_3t+QhZ(Qp+-{ZE*D-69SUwLb@s{Nt_rDi>4;4_ zOf`K2uolO|sA(6)_FFEGgVTDCTb6#1x)eb?Zx&SyB0~af{xrRSX5|lHOh`Eyhu%RmL!IN0ZkkB!zcm905St5S7xz715C=lhssls_$Vqj ztjNbAI3){FZq-#5iPR+$jf72!Fblho9mqHR8YuV~EGol;dsQ8|R5+q3Lr74_*?fX> z&nqZJ)RC5HjlU}5pH|jGZaUdYR&u0^?QUKtgo@3+A&SM#8NtsW_lWX$DkLlv?nngi zX?T00Q7M&Z7tLP1NjYr)q6zOxP+Qc;Hx{`gkmZJl2%m;cT>PO{>f{2j_> zBASS$C~t@G`e-4wf_|OD#Gn{lMj9E|-Z`2fS3V(a_QAN>sZK)Y#aKMb_qai_Ovk+L z6A-U%8SI$6IG%`b7o*Ee%ZC_a+%IR!KJ=^cCr7PgnbCv6Ug~@^$dH(L9t73O;bZ%O zxzaKT834N11|^Wu+V=!5d^N%{0ZzHHc%gV07yo-HJ7g@xmrr>(v_?GdvbKsJQY!#w z+A`D74he-9W zA!N*vQTyAF1Ov|r>p{cYN0J28_wbjeI5)=73!HUy-A2p743${4=@zxC4H5Xo`7Gi= zjDH88g)G=EWoJ(XNPKN+Ajo!6_4$eYN^`Kb!EP}$;gNOFLB>$QiKI;xA6QKAVtgv{ z`Jax&VfUy03!J_z_yxdWHFTCF5NP=@-Hx;ojZAZWr1=@MNri2eb_T`b!5ql;GXY;> zZ<1aiF9t@V{^}ME)&73I3fFmw_pt{?Yu2@bNBXA38W}U%XHD+HAb%ZC3aT8ZDIP~7 z_ii<|j>^G12W3xqtdh?OQ>YD<$54u<+khFylC+?q{X+PA)C($e_HTkKO)R%Avksu0jD@eU_Rhpm=;T@XmKk^EI1lZv zu~Ej^Wd--qF_0Pm>kYY!jf8U)e|U$44WN+JhiQOxsH2g*v=Uz~GBrRb_hct;3$++F zwq=!a3I;Uv4{+@>J0LGb#S5^GgT@-rFMalPrxa z6*IPq7bl_@s#bFsZWk6e$CllRyE!cd0u#Ar);x_t3#^nnC>W-FJ6M)(RBnuqxpiid z_(Khk=Ou)scX=sF7W56mpuwGptn)c?mwhl0o+ImgGcmux3$Tn=++aE#;KV+qJ}sU@ z%r*|ZM`0t|UUkRNUajTG9sF)MXZy`eu}vW==jSw1Q)iPEr=0Cf(YHJ9cIh(upq>jV zhH|c~beLE&!d9~24TCAX(zgQrOO*2X{ zrb}YGP|1uC9K&zPzVzQ)%MD zBiDHcZg%-59O0l+Ov&EeiUPT6dGC_eRS-+{g9*|q}Yifc2gaevc8fU|G zt-WIJam#zt*qT+`PgWV@Mj-Rlt82Zq{cM7EDy9%nS|@f32q`bWa=Hlr z58z$dt@JOt9Lf)oQ6C4VhqTt6CnSq>LCQ!QjpL({f^z>Lh8Yrt{jr^uaDJK6GF|41 zd^Or+j7!5ltvXUQ%sJRUD#QxXR8{+F68vpyHAR)Y2F!p2`}<5<3)(vu0p|fKLbCJ>ON)XwTJ)-55eL0gP=8A!c@p^?hwvb$99Z@(c9REAP zqz^7qxFvyxgs>Up&8tN9uH7Lp@=^_>qS$bb!(w4w4;PbvxvNlgwh3hW`?PQrr56-L ztfl9Ft3ydmE&971(1C8*<}ktsD0opDoTO8hP7E>D!y~IixdgvG`opR&uTiJ+xcHT< zWCWpVan!L7qB;F`@rTqXA?nFbrIK@!6-WHUCuR$O~+JP1gTR}uw zM5oASeQ3>W4J`ze6zSA^3bC5HT%3PL>ElLjg?(AQYfk_;Yw#p`X%E1nJir*M^omW(M~=f_Tt(!UJyeuSH|MB5L!JY#>-dGf$@)?^WeJQ(P>wki$x5u+uaa5RGFFjt>Gw$A4aUNs6$?{}iN)u7d~l;6Nm7#i*e zwx7j5jYWieLK5HpR%D44q#K6=t20oQpne+9k#dr`&P5}XSD42GQKz33Z}vGJUthmB zGM%M2#Gs+Ju{L8%2tEO6;3Q)?*bXYVjqRY}8Sf#AWRfZCoua+xY|5#Xw>#sfvLGTS zxfoJ12y`?T%}Hz$wQk&|3;tZgjTwzu*<-chgJHvDKu_mbym;9JPvQ<^tU}(zNb#Jz z%^YT``C7fyJt@4@OSM!Ls<%#YJm!2*;;IW~(axdaSp_^nl|D(5lcZU41t10Ss|Vj+ z0h2Gb{1{Z$Nv2;_KM>digyp5sLmNaygQ1#COqR538>pO8X{i5dI$1_VaNED(9FRi zT?ooZ>i_q@1@B@NP7%G|R~t0-cVW0(RHFAnc9JGJYJOOP${X23vkQ#>{-Pkasl^R` z#L-lW1Zt_fa?a4Q_0NTiy@o~4By+RZ!Ok_{QcwTjhpHw+Eg z72U%L%E=kZ_Ixh_@H!bt(sR9SkDL8qI;TzGKW7-9M_}*;WmOZF|4f%HH+?ZoX>Cov zO&cSe&h%j0ArOBu>`mMkkW3F5hB11d3ve|OrDU5WW9P|RBh&D zem5!8ZtEz;jVIb9K-$J)zNG~r7<1}9zcSSUrS1~tp85daS1TmM?wGF!(J?l~FqKc-ZA3Rl{~M);hpPmA^)^oWj; z98mIyjOEl}DB%MMrbw{Yq+m<1*_O326#jbJvhrT3WBh%z+~C&wbnS%VNYz&0*l@^UNp5o=Ia=l|cm8a458CEe?U$(neI2>eY z{!nR`yvH;Sb-+~Tmo_8HNNEh#$je!86$tD7j%VxLYzJt(+fgh_nB$_vNb>RqSl$gw z9;E}B_CTaTp_E63#ovjNAQ%AcCBVxEY$8*R>vzg7pshHz_p+NKRzCWgpw(|Z_PK^Q zNqN|n@AZIqQRWDu&+=v8JjT<8Mz`M3f=oFCRb~GActH%k{i=MCx-pwKv&(-R=WHlL z-)ZYh)N5;~3&Pe-7jNAoC486<6CETlS`k}DWq|q$2 zz-4S=-~lyTiE&jS6&5kmkk}G4rK;x?XH#$mYkE{>F)}a(|5Yh%#&=UhrjUSlWB;Ka zj2B0jnujnDr@?yrSM)cu=sXoCyCBv1fX&xVHL4t*{hOB=nwXca^iA*oC695IO|u8mo#nr?AcZKJKG0VVG7rn!stSFy<(W+tWw3rp zPYMgKM_lTzmdGEg4nO4mxPvjXW5J@5(_9V&5oy=$3&Y3E`N*-O#^qf<*Iy-gy^1@7 z2-FKi2JHwPfdxq@VI3;IB>id2ixX&ClR^>r?Hnn6RDtQq)Z-PULNaFeoM{m3%JXl#5t(x-3>Byfk*zY%4<*VaSp zdiHWO0sQ*^;^{fOv7t|*9$43dmk601)igBeeBz)uYLWkZYt~GeYUH*>vraL|!&|CZ z70_@|(TGjWw&PPm>Iyx}T~+(1N2Q`R8H*&NHt{V;Fhn@%uF;8)UHpsm8t+aD_j)N7 z0AKY*6pK%?>U@ubGtm*TD7Y>hd;EKaL zzf!8n;37h`m)I=yJ{|C}H#iIim|&w zy3g{esk?cYeT0IeD5_niwNF9Pki|`aMyZ%)-(f>&ljgH+or}fRw1~FGj?!X!K4rao zbcFgvJ>;*aS`w<#%g}w&YG;st;4NK%Jr2aCwXMGqcq!@sW3gz2`uyvkL&6QE?-H#1 zK4^4MHYKH74RWFSwtQxeCb(_~2^K%nV`M~;`1CGY1>;J()6??9VhXdj0& zu69{tC1*n9mN(o(>uMVKFFMzT;&T=oym5Xq2+Ce;{z5KUo&XlH`3`ht3fn5I$cBXC z2DN8Mc@Cz>$87ZnuQjay(wcmFQ@w7OEG!rnFI#k zNkwkyp{0&pOFJlMkp8Y2Y#WtqY>Y=aU0*j$hIG;@spzr+fB~qVsx1u153%{=crKMZ zCQktUNi6QE06l#XF@&djq zHcc}uD@JC#+kzAEj(4bMugKL~fHIPqiN^u+Lz*wM73MiEDr&(^?) zk~EU-OB{W9A%K*$!<`9^8^$bA(nE-cUIG!*GTi0;A%n|#BN)sA;}{F4M}H@)3Z`TA zd+EEtpFhG$^x)(s22|;$PK;lh>*!>QKqhBEil~9Q8u3s};0lcCX;*{rv?9Gu|@&Yx1u9ZX3(5k`)|NbXd5&buO%h%k~` z944`Kl%{%Atv;})m5-gDV?(6KxE3iF^n`Sb6ZIBaWY2j0M*3!ctNfRI;WQD~Tg<_j zq{{^P$nJR?hF71HE~03aImMc<26UTu(eByB<92`Ys2Q9Orxv`W5aAA8BqWZ4nAmHE zdKhVhFl|-j(KgO7o}>i)33C}LW_^S^**hSI z&v;^px&`Gkj#lFWLp@-BT1Vt75MC+x?#e*^rMCKf`v#(6A$y?5E(R;LD@)`>y!RQ0 z`Ofb{L7I*<63@ltKTqn2qN(As>JBA1u9$qLx6UL!_f}KDolo4C_RdY>*q&c!NX~Bv z19?o8@KU`8e$3}1!LY^&7Z)YN!zmQ-?;h4rGxzd`5%DI&U1(}TOzV$(a73A=Iedv)qbocp+d{?VuD#E{Flf&2J@P$KKN zP8`G}iT}tVY*OHd5jX8^KvxQLxjrIA1BA+h(h=NG16gf|t=FY06iX~7TME!JU{jj9 zE?bGR)*8Mb&uHfO(5XF=mHiRpKWa>Jc-~m_C^qhZ$4dGc)3p6i!^425#CtkWXyd9B zj#zFM>BzqVJsa8GUM+$O=7!T&<|Zk8A(JpV^Y6W>(oNtTZ=nBPSFxwMZEH@@*d;gk zvVir(rl6^NV}TNv^>4de71t2ZB|kcQmCq7(>F9V-)ID{Ks#?6;zd>jh)L7+3_jyku zKiD0VN+(aZEyJ8h(g(UqjY0(UwV>Lsv&NDceO}DLu*;-F=(h_kC-ATX0IYlIbY8N} z)D{X0{DN!rrTWD3yYXt;PpvS}l-BQG$5>Uo*fu!tTF%}NIbrLwyS8FONN2vgGH%Dd zF>)YuespW_9yYBfb?TC5Y88LnUpK(xO!h^cg!!VTV` z1OTGK)?}@mI0PS)tPO-% zFseKpa4ef=8O{p%Q-9gy1QnV6m-w-|E3HEBttKZ%$l-}UkL@6zUbt@dNra4HjRrjd zk|w?;&Z+@mamO<`kS7RNI5;C@E(wRloPAGkO%zssm+^FUrz+mF7RYO!oGCJ|RtKwK zaCIfuMa+2kT|X4@%(Wk#J4WH9E^bg)ee5xlJ%-hhc{_otnP< z8nKggV1zRl*%9xJ@T~>Ifg1q1#xSL*^5@ou2%SwUUNFo&!l~gDYah zAP~;lusHJYd;uo~69dH2C#@M9S0)oerF6+r2&$*aT0F%bPmhty2y#EVQm;2-NzYFI zVF1EN2qNgsh|=D|ZSa{3%L3y=(IE4iV-#-Pr=wnD+h08a9>;hqwqMIisQ2=9<9b53 zW#VJ@U#xmZ9jbN(k+0Z<@5Fhz=EbBU5G4e`dsefyWT1Dx&8GoZBY)sKN(^mZq7{gq zw%d8B;q4gBHfX7RQ44DAa)7&!%0ngP+m4cgAAeUyc#xNQf_&-jUytwmo5`gQw3ZyIu0mxFcSzMW&iWE0PBzswa&IrcA)wSs#nS{VVv z81hHijyA(KH2(6k4-xM>fn>f;Fqnyjyf=m_1eZlyh33{@_DFo68RFlNc{~a)^>LXC zXv-b|ohRT7_KWV#%ycTycB(rt!8%?R$66%YpjJC7v^_<_^Ca(Ie?XMk2d>6&y=gm= z)#@ku!bO{JwHYN>wl4p)Qg))gJWm%EE-{8_m9_qSuQuc40?POg$8~vw!WCzVNY8CB zOd+2X+@V8}`v>W)Gm@T?o$cxt>c-OL6UbxMa;h*(#X~;->+7`Z zZwOXb8JKXI*>~HGA3*kV3FV zzOGCsK=F_VE7IA*cOBwmP+mO%vZfkeAl3319N74N2QrkckuTvpM4*y}aVu=W$eZCL zX}jdWLS=b07+V(76e4D*)rInz1-ymwA1h|69Lt_pol24jG}s`$OXqE<1-tM~WMpc{ zY?xyt?5E72GnCQ;pN~{66^Q&;83;m+%6J?qyvm?5g#p3ex%d2e(&5(J+T<~GZHiT{ z$ZsNUR_gRxo$SrJ2hTEc2YYi1y6tt9D$N=h<>TQ{wO5UTki zwRlCc#bq3qn?iR@f7#=?-@}UL+5B@M6~JwuAc}x|i^p&twFINtJRF4}kEQGH1v1(1 z!?1ttIf^avEjx5eNhS_!yCxaEA^a-W*UB(s|6uXKPjN^aErxT&WFo3%Fx9$G$>+#O z{ueJNNy%?DPlswLd`^tF1U^gdL7`DdU^su9baPt4HYTAWE9Bk`+`_&>5>@{P#{e#I z<818t9cq68KV}0Zvi67{=fw0x=%tutu9ZxWHxcPUfV76o7QX7;buviCVfG5Fkk78* z7)7-%=D9?;)K!rl1TPN%$cARId-`Eu=tqVkx4t`Uq39}<5l;}z!iUaEWfS8M%PZ%( z6*J3dmje}(=R9{M=W7+7wl?F^t~A(Dglep_X$I|R^>&qeYO-JG5g~+}O~n6W4*4bF zdQ&-MIeB)XSTZVqIJ%bSnV6Gj)wqfs_ zDsxfKqGzBr4)Pj;esZ7?Sh!&cj3Q1{AZ3!1_M+r<20x`nSj6D|QJGVNHihxf7*}BM zZHka?%k^3j>9|!U?DH~1ZNwsPTrdEjb((KCCvwoy^%H+Wz@PNFlYIEooF#OB(g{v9 z@A`a-0q74h{1vxJAZ?ZTMANN?ZHrO}zmm4*K6t#zk!q3v0ZYfPjbOsV#MRVNWOZS^ zn1s3-3)on)?;~x$z$%}exZRlAR}?tFZsk3T(Pa|6xLVanSf9tjhl^6B#pVXy9=r?8 zV!S8$<8c`+v97QJ&~1+*m2h(t_p6`dPJ@#FnKeK2z#-$ei@!~P5qIt+MBC zLhsZ<8Xm*sxDq|hW9y+}keX@!3oRFgaIaN|h85ypLu%1Yl5RepIKBue|9`K4Nge2Z z>dRRGY}If8U&@iS$^2@YlYHZso%^*ofM^{RV@mcDvC1xTt3{i>EkG&2^(c>>pPV`< zO%KuB)J4bZBj@y`&WlW`pb~{pM@UeNldQ?2UeCF)C1DwEIb{I3$wnvpKQG~LE3v|z z3Bso(LSnpdr4rU1Arx8t#`_Ruz;6_Ofr+IWatPzD{R%*(0mG0HEzc8UdiZVuo+p%X zkRG%|_odt)g(CQ7Pwg_5_j@)q zj=q+<@=N)CvO&gLWcPJ~BLDZGafr=XDYr=S4J3V%W^PGsyyb2it%jg1vD;UCipOlM zGJvTkRzm|eQH-z(d<^r%cM&bQEMOpi6FM(JL* z^J;Ki01*ct^*ZTlNo2rS`%L;>yO=9mqcFGgz!SRY%t{m0rGG_*k874Ss>2cB{7GMN z0k}|(>-bPXDu{Z$+4S|5Ll{m<5Kd`dr;Zpk5b4rip2YOa6)wc<<9bc{xckrk{=w;E z0v4?KO9gYcQY`g2N_t_3Fc(00#E< z*PnS=+uUWr4eW|Ge+;<@$DIa z5GWAC;8hlan$GagZ4=_S6Qe%B-O{$3H0cPNa^fUyRp`b4pkw4KQ}YlUz>q$P#(O+; zgL&2)BS%_SFWA$YVI0fEdL9sEPWC}iY*ZA`}_x~ z(N1BzfzW@-rhE`tZt^sig(y7I&-!~+prDP$_hW+hr3Q#A1{*;x24W_wCK6xD%i7*> z0QN%Ny$cxs7!_%p1Mm6(IZsot0d&|=zB?ok8&j zxZd{^(LPX9FB{l_P zW5fm_JFZ+pC8YmOYJ*E|X++~oopn7F!!#b#a#r9_;Jz}m!sS0S-}T{n_&2}^=??vB zVdG80G|#sYJeCCw92DWTp?co0JMh}?~-XLd}ydE$EHAL!)=YBnlQ zaK#i^-NpMh+^AagrGHz)^~=Qbyj{pITSdQ0ivG^^ca+f73qtNiMT|r7u`mI;?(_&` za$8b?B&Df(qPZa5e&bACFU)@cE{H|Nu#d)6Vln*0|X!)d-=G%0?iBq&kPihvr4vL#L-VC{x4C_ z_%)RlKYnU!i)9wJPlLBds;KLfP>7lpK48*U{kJzZ;JJs-`tLaX7nauVT#6-f;@n(| z=R*&d@MDxS1h-yjV9&^%`sig*9)?8jni6N0+g2^7OkXP|le4cFK`A+i1S?_|O^~PhnzuNPsJ0i*$aak)+fsaVYP)zzMcXm`nWFZ(=Fc#PJF0&;g^%J&jRd4= z44^pb*xeZTI@b4r20?*yrNVr!9RNL7R+x#J_R(*9R6ZEH$K$IFfm8Liurz?YG<#Vo zs?#$D6tvYs^6a=le&bLE#+YlI>+Jz_EVCbl{dG^LtF5#trLcjH;P*f>zlZ#qi8w2` zWcA%M9Ragvj*S(q4U%7kSqVRUtn_C|F2s~@q;&}2c}AlG5OqdS(B=1{IcA;@8kb7WBj zLF7bwRzozUCRi+|FN$tbS&TFr)gm-p#lF_b;Pu*pKk5vCB4SbrD5N5h_Ruo0RfpFP zFtP^B4uwOAw3yAo=YFfN62amGV!U=~9RuK_;IN!X?C<~wGoR-~q<0QKjTlW%APU$&A0?>_L=K1LLpk&03N|nT)1c|C&LX_pyE*gY;1ff)?{Tyc_#4Oj(Q@9GckncChTY|b5 zJ9gZNBG%@nJmMBxx}p4&2zN&P0(3QO^%$oJmQB$)>tW$}1v#IxQ)s_z(Yjkb%f?t& zwQd$WiI1=OYu7swUW#yskU{0H*OF zaE<2Ti8`8no2qy9SdGLIG045F8TdChs|rs+Ly3%>cWsy!O+-nvtEHLu-qbIQPi$u+ z6`kFBRCIXLpEUe@_-Kc#Z+zjm(jbn7hh29)ujrfgAUCV4`Q?bJXYsCccvL_c@eYxafb43--Z9>0myz-!_m;ViN7UF&!H9yPC-(YxF0ciQ@naJTo^mju| zO*+(vJ$KWFSVUvEB<{V)(ryJh{kLi@UK{m2j226%Q=ZPUatq;>W4+)#Sm>@5x|@XBz0XI2OZ!9VBzi{c*@L zXn~E|$E?Zas;xYf225PUk(Sg~PDA<=M85A`RAZ&j*2lGrLJ;T4M^6;n!754rRi{p( zgu~oo@_7Q4O>|>E)`uoYK&G@gLf$8r{mMhGRng$A3_D%aA4{a=NLf4Eol$^hDuwOXsG<;8W z0aQl%14^J$vLv?2db@{eH+`-IjOaKU*kRm*sI^iy6mJ(dB?$QbRO)G#X#5mr%?vG; zYtvS~@@Py@mLF(nQLo|0g&V#wIN=4D1p(4Xlp>!-5lfh35!oAL!_X`D&o`cfBhaZ# z&EzbtHJ#x}tjF%b?2k^ju9t}_P`-3axX2$Ayqn#J8#k;4FE7k9CdXLWx>Tygvj zL68P_t!qO31WT`goWpuLw`lT5!8}UyKLgz8jDX@5cog`1`0?i+CkUi>1l*j|iqznz^Rs5{U15raT^N;DIR6wI(O&WGyrn)Z%B zA*NemBSh29K!g{vG>1}*lTT zP@P%uwW1*iptceb(l-cZNOFYs?J&B!GqD_!I0>Xc=lOTRM@4(OQ>yxzjN+r`?oSr3 zob(nKNll2_BTzEessj%7;zRh*_V%Qw!gk}6(*#J}*E z90}?A;`3rN@9^x+>?Yn)M2HY8+MBLSF1Z2)JMU|ugBoPivWT?ie9qD{iZjG>W!1{c zMz;cW)N-VfrOher_Q!{$t;w(as}Y+ODrKbw$1|bum!F9Lc<=4ZDlUYx2A8vHHeMI^ zN35i}T~aUv$`R8D5rRlJs4(ViANK;!+>l!RV{nE+PYN~$c=B3&pS1CxN>w2eeZf+u zUjA}lDCX}sxWoAat(DX%m|^{kQF9yyoly;1(Wnq;<;0Rh?oGOjO12n^{8 z>QKp4RK}th%{mYAs|h)62N|cP#^|BBo-&yX*uh@KeZoJQW{=Qgl4}Bilig!g4lr6g zlm>o-@pQ}j|97|3Y2mJ2dzOn3WkCOUGJq;7WMC%R>A3{SUbFdtEmn}NL-`<8*-Qla z!_z&3KR#TUSY%IzUgp`C#lUHfYo}!hIgNd0t4!(Eh4};-m8sSDH#G;NAB2whA}59!ja5l&|;R50T_*+ zMk6JOk!!S7Ny~(yw6-2ZB7)#6Q;Lth^AmQ7d7J2IM$b`)H<^cSHWi(mrWP$XQZrcgH?7T z=+x{ zRF%}Rt2hF4osCKgYj+rvasSO8#76K@j&>$nBYxEvtCa0WPpYB5?6Z}7kT}4>gM#m&~ApIfV z3zDPYc;H?vep(Spd;Hiiz);V$-~sIILtqh)p!C{7!8UWf);@XvZU=Bn_5mRfP+ z=1P_zWVxSWgIef6IH38_=F4(Xp4hbeTsk@PB4*h3J31;FxN(?xCutszt#TtVu4jq55!1t;M%H8JQN57|{>*W5|oyMkry*jsnmn+Qi-@6sN*hN}iE+zb5QB$t#WvkupJ`u1Ry3*q*6M!9Em3arY!IEvNeC7O2AGD)!Wwoj< z-;jz1$!X<62q2R6fRWBqw5@!+5LfLvZ=s2c*kx!)6w)!t#6XE*K4LY)jgD8|3A1-t zd?@T=B4kB&8z{CL$tVYu*q6~bj40%)9mUWrP+5EY?zWu!QxV%*MQA1-N~_k za5RnZEAVPeSZ?t6FIgX(7%^*53GheOl}-7K6kAMJX*IIRK*!y1QO-<6=bzU<@3*@) zssuz$iAT30{eqrbccX%#*(s3M8nfM%Pj(38s`E!FtJ})iC!2Dg5FdMA7|}Fi4&tDzOy=nbQ)YO`NdLGt+*lQh1>9HC^1q5-OZ3yf)y4 zb%}htmm~SR9sgxsML83Q-`{5+2v`WJS={t38i-N@*?tjCyYEg=YAZ4T?~`|pAN?^Y z5Is09Bdxty^6FTey@)fld()47&pMf@C~M_7->KPfZMFAAv+PtgOVL&ML&_{Gs9$!2 zB(lyePWW!Joc&ETwD0KT>K?eHav1wpz?H-f4Xk)bp`CrS{*}hxwwHDj0r0x<>*yen z=xv+f&;u-`ps_#_av1D-T~bzKnxU(5`(4MU^zj((Ix8zGB}@>y-@6Pg6czO+JZ@AY z#+Q$yZ)|eNJ!pow28zHxMI_?yCfkmb{@;;tFM@Yw)ZZJSET7(EM;dN(cQ^&}k&PFc z0_iHy&hA$=rF6euq-b$+HfNWj;r;6^lHzF56U*=9tNVS&2uq9!rA2B~qxszayG;4$3R+A;6HxUsxiDtXas1 z9FE$I;FaJxR*tsg&K5i6xGqc@24Mrf1EC`8gP2EycG+VzZOmYR@-`WYI`d~&=yLU< zabOSO+b||UNmRHbC$7jY%r^7NYGm{Eyr>ic2BUEk#6Wrp@q?T}u**x7oOF>rE{cs< z$D|uKYwS-_F+v0{8xTxQsj+K~!_QpnBsN%oWM!js#QrO@77-743oB24pUu-z0jVCtvIjNOH-Cb zO?hcX3;I^Xhvi<&%28M2{W{k(7Jw~RrU>Mk=_W)yn4NXYSwG-V8(UAO|J>@+Rg>49Hz*@drjGm@VPeaSd}rlX7HwT%%z|%&~0Yws&O96 z)k3fnYdu7j4UB;9POS7W2R4;a5n;_iILA}f6jK#7x7$~0qDQC0kfh)L#}ZhF)9gLX z3d6E*!CoF6aD}q7sp1(!V#oFc&-Y_em!@(0%juJ@^#q{Gx-&a=bu(%WX#A7iV0Z@L zpMowq4!>UB(lSA)&iVo`PxzCnVXsBprufp zwA-C(+`Tr&1HGmoFd5n-z&aOjV4UKMf4KES5@PE8%oOgTHF4lV3ln3302SwLq@GY} zg9vI&kB;{sofg;A;22SlyMx~_Rs;>3NeMUDoWVY??!4puwNNa)hbPFYPW=3vv$O*Tp#f$wWs830)musT-ghtf0*Y7dg_9+)1#*+LbR`Y0ql zT<5g|krWuumG4j1Wmh+r(wk6Pu?-HjBMG?R!eNP+l_`h_I(>5j3%bp>R;4sS8aaBilQX#iMPuhdJZml zMI#Z~n(nZbN=&3NcM~RTdo=Fa@R{~e+LF=(2Jj;v?|#>7SSLt-Ds92)H-%-Pz6Sce z^BiFSgm0C{^n4iD(H_mGyq95riX=EpsrKDqfUL9Uo)?pZ7}*#Z&?da71u6-{$DeZL7Lz} zfvw=MzRj}+i)J6Q>-ZnKs+b~}jEs#sx#PNB82+tIC1wM7ll+|;S6TnBUpaN4O!CD2 zf{3AT%ZSvuOd2$3?61dN9*!JBi)b|7>8;G-t~6|p($J?jJUJ-{0^YgC%oGSL5H(1NvySzk6> zVb3$se4tRg+xO`}D4LbAswvN{z1UHbdv^?aZ`)ap2NRZ?M5bIN;k}IaN`sW&{YwL6 z;{6uqz?NyUAb0!n*L9r=R@=!4ZjQVRoW7MFqYpiB;FhV6UqVi+&by6EwSBTiRXq2u z?~YL1JIQc7aI4OAZq3#IqDmzIM?-fjCn5Ia#Rjb5sLqje7^)c{lK)H>b7ABCHW)fQ0@-vzIk5CjCX zISb994ZLT9C>x4Z)T_4_qnuhq6rbT@>IGxX^sR#idF!wVX+a$yoH5rSY?PuJi~MbZ z>AOz_RhCY459b^^DX8*Q3IN~|CbfrGJXRcLxuSM!t%2y_%{z$L-k_=O8avlIO3MAb zGN~NL*uY6?x&vNuk{dyZoNEsuPm*{d@aFgKlq1p&(KWR-bH^M;%Md4TJCux+eV+u0 zDU$KR*G(Otk9%Lr6UWyl+=K%{xxtfTt%O@Mj)a4Zgzo3VyV{BwtqIfs1fG`JbF|&n z@cf?!aoWynlva-Br?-Izg;cOQD12MTIlx3Wh@bsyQ{uuWs$ocKiMxFt?6d8-_*tEV z0+|)Q7TU|(9}&EUF#f!QZE=%qtU9V;xSY;~{#Lp`6?HWLFSSY$Zfk@p+UzbjQEiZ< z4|_dU_Cf!7_rJq02!Wjz+k(0MeHo#T)n%oaMl`mjPRfKAE&7H`ya&K8cTaeCgotNg z2WLjaCbF{)UNB&Dy(?!w<(Dt2J~611%t?D=*}?ZXLzqbt_~Q8L?@1P5hEQn6809{3 zEa4_7qtTT#OR8c~0SbPKj^kR#HPRy;w#}G*_uwz_1rS^{-h$X!qP)?@)ZD~oR7RTY z-d$sx1}EDFH_@}IE0QV%nm2_h!v-p)QtYV4;-Tz=D>&=+0Oa!lrC;gPfut>`yrx6} zD^Dq~FF!|7A5c4QJBmD7{@lwE$w00^cIAIZjh**LKOqQeEU#Z7-h-e~z{ zcsgu83tJpsd-f7=qr_6g^=m>yQ7|9;S`$|*9k9%=4*UP6LQahml?sZFr2zv~5zsrw zhK!9|=7fou6rhdR>(qGkIa^ABn2r3_E7bKbpV`smdDX$2Hh85^X;0IRNX~Qo+2Zf@ zo>Rb`{k2bJ$el1&vlH1hjFgc3ym?dQA!FOO@{YeE)tMR1x%7$n{3V@S1Vd=kvV@wk z2TvzDj~}d5IyU)S8flylUOvD3s4a1N&(XQFQTszNtj+i0`5*sdSlfBwJKmq{v^DLU zFcozSj&c1+Y?io#)A|$v%p2Q*gJ#+VG*ZHIqJ8h4Di}^{jo})<+(gGDpmnKD{{FOt z1CZ(hG1olP`w~5&a{x6pSEak*9qgrGByYPkxL)5IHzBqaXR)Tt=Z4x2RLkj;8N5s~q;QR3??Zj!?3 za%JB`x931#6(Q__VKE#47jLARdRl;0pI-`nH~JE_8%%Fm>Ye<}cJ=a}An_7^)+5Y( zP4pX3iP}x+_vfDmV79Z8M|EI*+l-x|zKK@@zvy@<22g1R3vXRZfu3@PiO0N;siZ&; z1(^@6i%AiMZ~`~;O|tn|`&D6&(E;B$)%_N2EESQwEHJ~V>mpeeUIz8|gxF0;a(V%C zd3ul0pjsLVODL0K+dwC3^6>|59ag3AvBoFn51CPbNz5>7{Q_Pfg_gt$;Tw4XnTU?;q_zZbbh;mhMQ@H}Nz0ATFZ!|pHvd8zSg%=o zrdIGs{PJXpMHVs(E|~R}aKqkOj08_~Wou$uc&;a_s=s1ok^B?X9-P@`YPX-V90XFs zWJx3<*V7r#wveXuMAhuc(Z?(9*CvZ33OA)p-M@IQHvP>^2sV?*W1oPe4Q35BDlZ;@ zZM91vV#WqgbikSweD|DphlDIqT+CI4wX2O|#!G)TfoJze31~tmDs{BavB3F~#Ol>T zedzoh{W78bg1oz)q~7$7#}+W{{fX@z9p~|{bcnW~N zr#!ga6o!m-%{~D%Z92!Xu{@N=>a`c1?>L}!ZV;O=?QEOvS%vr{3kf}D{2~({Y^cbo zylV3LG_OBb%Cm&z7Q_fCH#oYGP2p$yC&&EbqKISSgTZH8&ejC^GDoBXHp770pR_5k zN~cGQ#Amn;k`BHAKsSL2MM*|VSjP0LrVO=9h<`n%ZOBd#vH5ujoW(p$&qe_elto1~&Y7-@MP_ZRyRRk{Y%w`Smxnl>Ko(F zS8_FU{^LueNR_BopOX1hRDjroi;Gc@NH5BE{CgHZ1L3lt7EmD8xz6rq%kbqrKl?lJ zash1laiN)RxHMm|BjO2hcD9YT*1PkOUq%W2&i;*A2Z=B6o@|%r;c-8}yE>`=K%(my zK#$f;)vlDTs6|={_hmgj<2#8M@#MC--%9lC*dJ}PLY#3-=L*LE>WBcQd}T1WpfE`U zs89rk8M$>7FZEbY6q0mmA-;QI;|q#;^}+~csTV3SU&}4!vl^?ax(6d7gVM^z;?#m1 z9-(@l@T4EAIQ1v3uesvKkcJhUPVt0%@lh=6nJ|UGVewSa=w=6d=Cj^BeBsko&4XWn ziF^%c;q3sUd;zlpI~1)1=-@K{^}WWaUy7SY*QZUqm=u7bJAQ}`Jy}oTy+QkE!@PDM zaD25k$;z8XQo%L@w0{4+^p~%6@gmv(C6$+kGHy$tE2yRAn*0zo5W*V5HOcgXyTypc ztOBF~?d=+Xuk^-1*~#SF33PB&$w zXUImBnC0&RgdD{4fwdMhHy)tV9WR}WDQveG^+y04c59c$Ph_+-M>EXF>Mj7?o0&>u%!xJ41{rMY^>uyq@v?z zeD!78;HWu%4>Q-BqJx8r*9Yep62|ri7Pn9;&rw|4KP1=ZeA5Uf;~Vv`-t}e%9IfG2 zd|aAQ`-@Y4pOo`h`{l3#QvC_`001k|$hDyiE!ovpuK%!u1-;qOKkLyZ?I!c7OOB1L_N)I257KVKSodMAM(`9*7e&ZBIOe%a~o8n@oaF+PnP^Ni26 z=AU7Kg%NK(sAO^}3Jb=CYf=6V+gdC#{7BIKN}g!vspR-@8coI%1_JrOx2*0Iy=cOz za<|+zC~;V@?D}JnBDgU?>6El}VfTE#FFx=dF(WhWV4IgpPqwgx>oV5;la-nS{YreF zv(FU4io6Ef+Tg4rtWK<6_=wM5cQKNF?G`V7xtkVYKq?6H1GjW09YRn~0=`8YEik{L zvXW~yf6DJ5vj71H(caNSl~)stS-d39Wjo=?1Q4s1xvnZVA%Ly$kmvLj7#G6ztOYMp ztOw<2I5RG*1`wGFFfsWIqJWJcv#>6J)jHo&2nl$;w+ZV=(8OVV$<&+YH(0o#Wv=^o z#$ajjA3j56!~T-sFuHw!(mp2yVsu5MdAS?CQ_6{9C`dlN#itaoojKI_g_3)2|5UR+ z_|GV~d+D!X@t#&6W1JolF6yNul#*wG?|WWZprXl{x2G`~tEnL`QCsa&Vr*5mQMY2M zVq1sO>~Ty{CE+l4^Z~&S8D;}_oub8Nx2(~|sVIGCj1b$hiCb6mTN5p+u5Zy6pRN87 zceY+4v`8_!pKUtRrHFMQr=U@d_r69pUcBoEyqkC@b*TRE&F7a}%YFs#S+V_a(k*Af zOmupTKF^@pvN+Lg>Ot06MV!Vt8>rFw)DjXwOIZy1jQARok1xyK$kRZw9voxE2HO_d zCw(LuzBOOng`z+hQBj~0eV{p8IdWLBsLBWRBby%P8R(R~2VOrmU2+^$xUx@=>X}+z zrz6{kAat162S9hJc&QN*^>|HU&x?-Rh1&%w=Eg28&$<+0ep5kIoE}e38>NFdK~!U)DN%yyAWez0f4$sDAznjg!*$y_<4x(A<)s+#YN?W6&j{_ocCCu%b|W_Q zN0ic&jrIS0*G{QsBfg^XuD`s(?b? zEVwj#Ktxka?-V+U)uv4U5crNQ0+HdY`Ub)grK80;XffFqJrd_2igBXDaA_q5Qo+}P zyFkhewe*t2HlR4`hE*=hFZ=b-c4O_DME$1Zs_sa(0%JN$*zzF8f+CQ>Z@B`fU@c6&sCf$0P6~xL! zOK&2}Xf0picRX&rCKCLSofV@}+>Dst%}1W1^Tm}Zr9}z*NW4S6lX=Moba&VLZv7cl zWDwW*AOSS&?!CU#yeQQ$%EtG_WoTaVvz_g7dHLl62*c4{TXy&>>9GL!Q1iH9EmSx` z2YG;UjHzCFK*$E=mZvbm(O}G7w)BaWU~9FoBgs;81N^3V4c%=cyLU9%y^poGO@RWx zRdnK_HSy|LWOHJHKEMvZcA84t0I)hMxnrQpO9;J7D9HT*N$F z$>)5aNwrZrLyKs=E|z~ziu4+@K6bRM7Uxn7Ojwg|2rU5v1IF%2smvZ=c)sV246Kk> zc(nrSEIM_{S(!js9O-}@JDUExpr2pE6l#RlQOSDlxDIDXs=EOz#RWz{ll~yr<^xlQ zga&F`T||4v>RVHkzwR}YKrU`ilAW3OZaC?UQbWpp#||vmiuU&MbwOH+QWdcys)i=c zD>?72E)VQ{bXT!@zSZ9E44X2U1yW*cKI@HjQ$}Da&<*FT{udW^($`cyJV55rjBV&* z`bo0!({ij0%K5IJ<;hjS#imkMCl9-JY|fhehA~OfzlsK{629L8Jy0uhn@R+ndc^gD z3Fs8mrsYbfd{{R4nWw;IO4zS@wJ2SFl#JNK4#vOL%Jrp)*{ijfbHnjThHHFya|Qu) z-t}LSP07~E;GJAV!yTwhj_nq3wDDJCDrCgNM#0jr034uo5%JF}M1pkt`+cj)XU!Ql z!P^geh|vwovIlhj*AKeXSGnrO${%yah}@4PznXFJ@@E|pFDwC9b66fB!HzP!I3CA(M`*^4WG*6&)p+MTGs4FXAv`=`4)`d z`HDxBje%oBG)#OV!Mah`23*zb$ny|UmVkOEi;gTSU%{qb*oDrXbJNI7_y9})J zE!M+vFHdc3BuY*jcJ@E7GC%yzrVxBpfLX!ctiTXqo}veICuS=%iv|8_q|txsPr z8?2||M6A`~(P1`C;xA(q;Idno*sVmw3V{xS5X@^170u0d0*VX(1jo5FjJ$9*7>X2KSu5RhQc9Wi;4}_DbpdNND=5>r1 z`X6W1_h15Jg;+Mmu|G~~7)+5J!hA^LIj^-5Xylc6oHD6LGzFU+5(njxftCu z?*v-+Hi~EG;oU`_R0|`O1F1YM=0FI!ZaW_FQ6%^zhUjXAUfkm`-06vBKuY_Vqw{8YY*)Tl_%+j#mkphiI<22@kLYJY>h93@*6TA=TVZ*&GcCu4Z z8Zm}7x@&t}!)qfhs zHrK9~JMYGcLpZKRuQ#lY%6H8{EkcmW{o;yt>q>rb4w7++sa82Jj_qQnAcR7WjPaSl zliB&dyexy0h$(1e#G?8_+q@BN#P$!Ho0}uCTuGRl;uInBwy4e7C#;xFRZ5%ba5$f; zR*uJ6)7-u#mcSo1Z$id;1{?Y&f-nVKz-16_eufYN+7#f1PW-0QO_4jJa4L_?q6^lG zy@m59r-0ug(f*(UAlD@J(;m|i-kmv@IXYh!Q*4}d=5d@Eux7zHT`)po1Oi#?{_+BB z{n}vx68K(qQH4Nz4zoE7SnagY@Tw`B!Ni&6+6#swy=gb+@GwsWP0#>!Y zg5F38o6?m@N*^_;uLIY>c@*36_xSB6T|3hVmeh417lu`vIlR7_^ZEdMkd83DHL!-C z#rcZgT!C^X8GdpFcJO92@{HmU<_Sn9vp#FC}D^A*D%n;Z@JND_lt&cY#G2>W5}p1~9EwY)DlWD83~iNs^4M51Mh{t&FWk#b=Ly&(4X-zAixj$0F;Ntx6r;&y$c5Hsz&s9f|wrAvzH@ z7#VO|?M`ciFQ^Sx9^npy9-@fnRMm*6$=MiiIy)k=s-!W1joHn87@T}A(65gwz*qR6 zO(}Pk8GE$51q(Uq5-y?jL)0kU96c848{G(NwyuyRBgyf4mo<-lEL8>K{#BXZfuxlV zXe1jxNld=T!hjz@odRK>6S-lLJ`+OE@=jVHpfuhi#SB-k>gXZ^em%d3Uf#>rI)NX5 zv?J14%s%j#sqI2j!0X^Jl5_65c1qMeTBrs9cSk}#dDkGvMw@!!iF>&^VcD7a{7S5v zB;lS7|D_%!!fA8p2a*9<^l*FH?Gt*dYm7LVUo zoobF?!_ebdUJ+o?7(2L%_d~7yiIhBZ&_@b}*XP)c5|x?tM8TW6B51 zd9hTyZ_YH~=!!O*r`7kYVSV0d`D}yNZjei=nZMh@lYg!KKcmozlK^MGT!yg}O2Sry z04trX(p;ln#xD{w;hby*An{{$pxW2sCs7P+f)7PAJr=Y|U=@%(YtApAv(;+b+ht7d zU>^Q58$;rnG#vb*zuGQ(p}qn8BLv)_xTFq66ny0)1o~YLYp7>VZW$q7X5OOoltKs4 z|C7`@AH3N-7iSTOvx^jqufe3^JZ zVGDn{o8oYdoSo8P&~JSr#pFtvfVG4HU5+p_6}V>e3ax}4!M^@OtrEQ9l7*|7DVbz@ zP1Ncg$ViM`sP%oupvn=tB`KoRV8ef@R@`+tB%Eo%>Z&nPm$g!`!X+1AyXzst%TCMj z!H{c()wn|?=x&RCqLEjBlpeGvEhc6z8V^d4Pj7$9*)OiiKNs)f)?M$Z25e{t&7=Wl zBY^P)7}L%_!gBpS>MEf%lj^A0s}HZNiieO^Ry{H2fp^tRooend;}%sWCvW4k?b{^Ft5fKKm*B*u@s8AAX z4?K54qgsv_TIUx0+=X7HIOgo>%vI2LxwA@$aB=j%@Jo=;}14Z(!is8XK zeZkv6jT+{i<9TSc)ag~m?+v)n7<8{%l+)lElGaOUXR7%kADYqUBuCE0w)p{)IU&LP zLRo}72;-iA13hJxwkt}Ljb3&CJmG|>3{6CuxJ=yvCQ;ljghnj;Gt_RsX~FNkMNLCt zvtN;%waO&WX}P2j3?QO?xfX&vX1+-$3dr7=tAj3(x>O>aw8v{H0rJ20!hij~>kn+h zEHOd#4Yh9r{@qLTfpyzKpi<)84sukO{w5aj7Wja1>(V&W%kzJ`KE(aAPEE1A?A$d| zzUW(=Tyv|7NBwi_NcE#|I;Y0kl=g}&CGkUwo)I}C5(j^K!FR~`;Cj&?h_Y!SBWNVc7>gpI4OOKB=t|D%3o zV>Q}RveKZ>|3l}Aod-WuiiWV7TK;KNgnz`^98oL{cvd?qj{W)hHpn$DsG@?>jQjN} z;{4gwSiS5@L~Ta!$e^yx>nhy5xpg2zmQtGjy*@lG(*9Tb}IyU_%VnPycuv&$OX7P-P*TdBSBdmYj@%pRY{I0BYYCAD~$>jQO# zG9ww{v7+~iGS2auiCwyHa6YXv?6LdNx%E|ph89}5g#UYH=q4_de+{SlY`*PBF7JGII1pyqZ;LjXbK~vie>l?Mc@R8)DMdq z4l;ibC7Nlg@`)ls9z{+)I23y&*y@tYQ*!UlJnpHpn|E-c;}L>72S4@^bM598>9^4hU*_;|t58eEno*L2?_n^v&h*JjN|Ba_Wp04>;lTVx%vSQdM ztHnOZfMnfR4t8yQW_p|RRZi1*0>~*nam|}hq+gB$gH-|F(%-kNc?B*}qcf_T&95;v ze8(UbY`*!0H@?CP?Uv9~-)`9TDlS}{|GT?e9hV1r*@5({xmq0C-@7gTQ_DC~eqTp# zK;~n1RO%UhnN;#}*!d$6G%};~4wCvR{KLHokBGD1-U0|FngB8`Ygf(4tGT6UHd5kOPbW6-P}4a z;>a$0s3NQ`I@)$0QdaJ{!_ZQrFND#bmQd6BOG#ZzR9AH)brZP&l4Bexc26Hy>s$U| zq$@@074kIPG>59iN_$Y3nPU_&4KM62C)?3-4ZXN`!4kk-*!NQY|34VA;Busy|1%qk z@rKQn#Z(r&M3Tnr)r$0gUIPLZnEBcs$L}dsMhZUo?ZCEB@7{!uA+bwS{rddIP+=WP zOX~e3&pcW0Paz(v6?MuCF1&5!c$JIIfO(JndxSWCTH|6%ni1an5Tb_cHp(6kA1aMM zUAR*fmJaMGMp3>LMT{we3)5c3;T3`0_As`X&g~O6Pm+bl5#Vn=$)m|e&lg=1U=cI+ z=8hTHJ;bVD15s-^W%Tg`tAO%gOA?I{#sZlbhS};pz-ds)fe$3u1-+sN=-(z0uA}ND z^w5t#F41}DGrRPi_KlS4rD7}FY}`PgM}yGFcOuV*99&f^zY%v{GCV6154jj(k7y@b z;rlNSkcM@=U@OfL0H06%Xl9vW`*h5lfNvU9T*9d4ILyV`)hSl06$0NJv%L(H*jMY* zZg3kVZGgRO&TWw_+PlEMgJua!Wtf4(KK}K9P*`R!Xo2l}Pazh>7s+N33K0v+ZO>1D zS`bKO5k<3)YDLZ{emAXGtdHl_o^WT{wHzCX;X&wx-Ig^80qulN&vVU)(m3}Uaht!ASo0&|#icfjd`)gVtKV;ZDxb1B z%<7Fya&l>Zi(7Hnt{b&v=$Vh?nZhc=^==c8RLVDo7XI ztvO90fz+mbI$vVeTLQipPp0%>%GYjgnomOg^jCMOx6tD+PmXq$B?xgvw^{Ktn+ZSR z2<7W|U!hetZHG&xMwg*Up!$wynQ?-q0ennw7bzIm#OL!lwnj<3_^a9b4Bxz|9G22M z@}WRSId6ZUU(ydc_yt!7D{h=nn=$qA_ z7j|s;L!H^iKR&}9vgj9L5*jbBxmjtj1VpoCOq=6VA@vTgbN|6Cq@&T~8BuYKy0_nP z;9VvyuB;FMxVvr;ctoL=6L^1zUP86>00E}Q!WtN`=R+UdCC0nyK9LDz0q$A2DPrLiV0h{saXo6AMwbSkbMz$PkLFCAOWZv zx{--7V&oj~BbHS@51P?E>j_H;7?zUJb4j&euyum4oc-JzSoLZ55ewzYDrRo;b-$9u zF=-h++xv|PVO;Ai7E3^ez3-fwhmnPY)q@P{NaOV#s4DI(c<=2T#M`Bk(((}Cd}MsA z{LQlp>C%g-vIYP#OiG@T&2DIN6QHIvZ9P*{>eMx2l`z=wn`BJzrC+f&j3Kt&zGJof z%}@I>0v~JeqQU5$z3yR6B1+0psgD`~qts@UhodC2=BFU7olGakMLj_tw=sT#Hq4gT z(YP0%_q?}&QMlgd|D+mfluBp$!xwi|J}H|oei?0W;IMa6b`p04tl4T5fjU55iAAaO z=YbWu83;NZ()(2pj1hAR{u6!}Yz-yq2S|(*vhpJBLt@dm$+TBA7g?-75^>hnEreod z!j*$P^rdes$P=cn<5Pi{)p!KnY!&MYT2xtv?73s`s8b6g7v>@*--}H!_9cGvVInj^ zfa?6xH97NpKVLk@M_GiPA-}qm_l`$P!GcJ9InvKE9cmL|_2-ASxgRwPRUAKxV(i#< zDAk!&Etj+*j3?w@4F?Haqi>H9@x^EX-Tl{oMBUi)_|h?8^Je2oc!=oR0)(&c&okDM zuOhkbX!+#h+}d4^+z8Ey_k$WA2bYHTzuX*{{4I+q88@qDCFmDr7hwG~`TpI&n@ME1;fSdToZ8SP4?>|ii_@Av z4fus2jcut;FG#2ON&jT1oOKTP6FAW#B31D90)lO8+JE*Jq|RRKqz{=){i?gx&Cjzb zq|`kk(fFl5CL^IZK8uNq#8i~OJm*GA;)r9qGS+%MWFUG=H?Qj-oFf368C6*e|nQ(=DL zrjFp?S>SBYa|&Eb?MpzRDpVPNfp@@9b9x}u(?Q(miOysHJdMGm#+`$#R zAvJXcVuI@7vPT18s|VYbRN^s`p)`cEr3EZ#?DwJB!l%ztPlI9{eUibrUMY6i@x7K0 zakxA6L8lc8pz(7d>xE=(ixrH~UD{xa3LXVEqi&!BW~ago&@!hGTtO~SUkJ;qS0@iD zB717It-Di|@T$R96{-LB9pWxIjCWQ;%Fb6hU@ExO0)G8x6CZi3x13e4LRU3l<=5z| z{m{kCtGynoS|p9VIWGaD6yTbyC#=R7M?o2k&)AhG7u(TL4qRZp6umG-W;8ska% z0idk>-(em}5SlrRx9P5@moBkuHvu*>;*!ZN;&7dcEz@$w3m@C4kNJBRD>1XDQ| zdzdIduv``zn^a3ebkJ0|zIh+(sp2yRR85*&O`SfGRE#$#=oCPcvM#qo8fBcQUo7Rm z1ME3+#1i4B05uP6eFhFKGxy0RmDHDT)XqHn*|3*+L6Tc=Mw%XlvxPlX#JvWalvDG= z4ka85O#YjVui?fhizI>j_4XB@rtbB_`yurvQx4iQ2!#n#V$EuX|7~}cxyDIOh`brs zP{m$;e0Zo%qd?XzNc{9pmPA(TK!9C{IXdo83jOA$W7(+PG5%GsR)) zfPcy)watg5eea=7rgvL|aZ}AO>WM40!l``rY7WOIeo{;kGYrW zw;;paK*o$@!=0+{iEnjBG;?bk1PV52HQ)yx>D7`=gp7Xcf#uzFyHRR)YZ~OqI%IF-c*3?zd8jTk}IozL4yHv5&NDh6+A)0Cpytl_rRU$s*kBk`T#=Y(I~(xe_dSL52257yx& zgK&^kFE-fRI^=){82@mdyt<(scJw7v;j%I`0;pJOHBKle+}AkJ`j0F{#S$c{e89h& zkTy_uAy@w_Lar6Ud2rpoBQZ}y0SOia__L?z_@)yAK{c(_;ahM0B`@66f*J(yy$aNL z1N5=d!%pvOHH-KddIvs9=-9)m);!GkB4F*H04s6A{5&8~n2le<$W4Idf`hhgU&CzN z128y`Np{kAjsV>Y!|T4=F^RE-RoSQlfP~o>5tXc>(BK$={IqcJRf&I?EK!j~&XKR8 z4U1}1YGMR5#+6i4Xa{_;6**hx((`HlAs!#_t=tyo)?4P~T#{$3&tAFg#jjJ+pl8-n z5$}Ts*|yWDk-rfY;zCP-h`Q2tPXB0ni12D>;N>$`-R10`#Q8{Yg~NmUg8WBeyonlE zFRh0$gD%+iqI;or+oHd6kBb5}D<+C$_OHKHPb5nig%~5x?7GD8e1XZl5lD;%~=Knk$HR z1#6xxW&{I^EX=hau-;b_?bD7pU|T;Fq$E>jq_3~(wg$rA7JgDEZmibASp8+*;GjS* zPva>i%iBTUHH3i$9e7l-ANFw=kzcayGY?vjs;0-R0owpgEvgH@KAx=f1{oFbTYi(I z1i>VpZKr%ypaxA>WjnOdJIpIxWyA_Y@+|kdUAXIm-D>4&(IQ6+Nl=NDi-#(h7b(VF zq;Wz=FnB^DryS?r|79)5AX@YAy4ntVK#-KqxR8_`2cWytW#X*fOi_GxVBoQFyoV| z@4xB;n;=~Nsc6{vZ$b_c?^sr~09k0dDs)|0Oooh0dlrRpQ&m+Il(6$qbhqs4S#DjU zpMYW$1S6D12u$rm4SU!r>}JLT#_fB?;|U}=G&y0(Wll0(9K&{rFvt~4#>FfA;f)Kk z1YxK2ZewhKKfHrcS3yJ!r)P(xFt)F;z=3$5WXRMP*26|H(KI zJSNdeed5z8bXr1P_Zwi6ePc09ZPC^H=s7VKfD@R~fC}i)DPNVJj0Ub-QR0n7_{h+9 zNKYYbZ`ho+!yAYCTGHqj2d_6*k-Kz0zE(dZ>9DO%yj(ey`fDDg>*|ic5o>i-m3MK3 zIA`#u)ZY83=0nbD_~Z2PshA>aOEv-qIpMNC#NWInuyj24Dij%8^X?n0;t!Evj}SM_ z@NCQ^eyquSkWY6x)^%4*&Rq_Qw zVA;Q@@tSfyk$LlKnTQq6;>6ZDZdTp=aC#Q@Y+tS9-_NKb(*XSSs8k%iyZu^;7vV@HF*5An0!N@`dfvWQZ) zD9)KFB0auhA~1_EK}i3&2XYf9s`x0=zsw<&^hq^=VycR>i9S@RpKb@ha|6j_B&0y= z?9V>Bgi?m;4IvejbYR)rzL-fG^WLP{K8|?fk#CnW*v2`kF$|@w8fxeuIsXl$NI-iS zM=?4PMJX^Ju<0<+0Wr3(WV7ZbQXCxKb#hKJdWWwOc0rS(P~X|xW;{Kv$yCI<|6DX% z|A0(r)gmeT*2Ryrb&ZNi;M?}#o)w8v!wAAZn#h;>faq3XHv8Syw={=l$L&V#coTV% z)r=kABz(TxW=0T-4kX0_q}k6aLPxarHWN>zogyL~q^TnIx)<9`O#8(%Rj%)0{qbLkbAVwyqD zIRC8|KC*IzxS z<1ZY7B&3;5@rx~CibuR?Chul~E0MqBs=B|6C#;mNx#6@tM?AtUH6_WgmF=g%vCA*B1SJ65ubLx?!#Gl^3lYapRo=SWi|j09mUqV`m$J`WX7nkU5C z?*DoGt%P_b=s*zZCW+Br;8Ri;yfON09w7rEPck>e~T`$;_>CTYI0*O3Qkc6szh zuViXJ!!&N^=8V8(Mq(A1bG_$X`Ok_L(Z-@%8B+Wgxy}Gg(T5r8#FKCJw!v>J(f|d1Cw>cZ=XC>xh zOeZT7lYKhP?T+Z24W+2ohM2pNn9J^wE~P}dRc50XAi0L4h%mzFq3o$HA$^72jiXDm z7q!f+2*b~J+3Sg4<*9I`s#H*kGN=pfh<-gU(w!w0I*N$P*R#`XZ6y@cq8*w|mZ1T2 zgw->z-!5_c6a_~If!^JP*8$G&{rgF5)Z@TM@gjye$7x6{R7!|m)uZ^G>94Gv^lRYR zbp)sLUw+?!lp;)@%$9M3sT#$fBRU|t=VH)%pEaTRZ38b9_u5LI=3*icKqltllWw~- zin9#sPjv}^o8;pi38`2YSjvd%2xa9sOr>H7PrZ-pvp)MZLR@z@j~#2X{rwo%Zav}{ zz0O=;#dra=1a+EjM1P;iNQ_RFI1U*u$#U=wEOfV>V&h3R`!N0JYtAr|gK6Tz1|SS> zr4*OikG(>?GumGUAKLvw=7$YTE&wR)7>e*-AU-ZOH<%@E>MzMou2W6Rv22zuSFl}c^PG{(vTjp%zNJ{FcefF(t)rR-rRfEtt!8y=Iq|)6jC1Qsq^d~BmfFy? z;mjx1_6|BIuE=@U{~4KE67Msxos=bhNOMyuJ%ejFK$#Vz&IH+$vJ`% zndtoZqN`N!p0eDrX+w$;sS5=-cs)i{#aP3Ayt;{g3OmAW^ks&yi7rgPZ~latMu%gC zy0;B0%#g*lF$Lo{p!rSZ54{3-F;PUKcvt(7e=R1pa$jZxgHS5%pS#Wg*JAs8{ZG9e zHXsV#Ka2xfJ@bAfy80(3_2D+G6aS90-mkljT{w3D_F|3N`55qn*7l9XB%*M$rL z5@l~v{E8PbQgwJ)en4_pW|Xv9s#+L*l~As%=0e13o=(%q008&y h=D-NsPXhn}$I1tQphCyBDkibSXZr#G00004Sz3-4-w6N! literal 124308 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 VphBE7)y=WQXZr#G00004Sz4-I@t^ +# Copyright (C) 2021-2022 Robin Stuart # vim: set ts=4 sw=4 et : set -e @@ -15,6 +15,7 @@ run_zxingcpp_test "test_code128" "encode" run_zxingcpp_test "test_dmatrix" "input" run_zxingcpp_test "test_dmatrix" "encode" run_zxingcpp_test "test_dotcode" "encode" +run_zxingcpp_test "test_hanxin" "encode" run_zxingcpp_test "test_maxicode" "encode" run_zxingcpp_test "test_medical" "encode" run_zxingcpp_test "test_pdf417" "encode" diff --git a/backend_qt/qzint.cpp b/backend_qt/qzint.cpp index 827a6690..e02a3e63 100644 --- a/backend_qt/qzint.cpp +++ b/backend_qt/qzint.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (C) 2008 by BogDan Vatra * * bogdan@licentia.eu * - * Copyright (C) 2010-2021 Robin Stuart * + * Copyright (C) 2010-2022 Robin Stuart * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ -/* vim: set ts=4 sw=4 et : */ #ifdef _MSC_VER #if _MSC_VER >= 1900 /* MSVC 2015 */ @@ -459,9 +458,11 @@ namespace Zint { m_eci = ECIIndex + 2; } else if (ECIIndex >= 12 && ECIIndex <= 15) { m_eci = ECIIndex + 3; - } else if (ECIIndex >= 16 && ECIIndex <= 26) { + } else if (ECIIndex >= 16 && ECIIndex <= 31) { m_eci = ECIIndex + 4; - } else if (ECIIndex == 27) { + } else if (ECIIndex == 32) { + m_eci = 170; /* ISO 646 Invariant */ + } else if (ECIIndex == 33) { m_eci = 899; /* 8-bit binary data */ } else { m_eci = 0; @@ -469,7 +470,7 @@ namespace Zint { } void QZint::setECIValue(int eci) { // Sets literal value - if (eci < 3 || (eci > 30 && eci != 899) || eci == 14 || eci == 19) { + if (eci < 3 || (eci > 35 && eci != 170 && eci != 899) || eci == 14 || eci == 19) { m_eci = 0; } else { m_eci = eci; @@ -1055,3 +1056,5 @@ namespace Zint { } } } /* namespace Zint */ + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend_qt/tests/test_qzint.cpp b/backend_qt/tests/test_qzint.cpp index 1683ceb2..6de3ec9b 100644 --- a/backend_qt/tests/test_qzint.cpp +++ b/backend_qt/tests/test_qzint.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2021 by Robin Stuart * + * Copyright (C) 2021-2022 by Robin Stuart * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -12,7 +12,6 @@ * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ -/* vim: set ts=4 sw=4 et : */ #include #include "../qzint.h" /* Don't use in case it's been changed */ @@ -193,7 +192,8 @@ private slots: int ecis[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 899, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 170, 899, }; for (int i = 0; i < ARRAY_SIZE(ecis); i++) { bc.setECI(i); @@ -243,7 +243,10 @@ private slots: QTest::newRow("2") << 2 << 0; QTest::newRow("14") << 14 << 0; QTest::newRow("19") << 19 << 0; - QTest::newRow("31") << 31 << 0; + QTest::newRow("31") << 31 << 31; + QTest::newRow("36") << 36 << 0; + QTest::newRow("169") << 169 << 0; + QTest::newRow("171") << 171 << 0; QTest::newRow("898") << 898 << 0; QTest::newRow("900") << 900 << 0; QTest::newRow("1000") << 1000 << 0; @@ -974,3 +977,5 @@ private slots: QTEST_MAIN(TestQZint) #include "test_qzint.moc" + +/* vim: set ts=4 sw=4 et : */ diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index ccfcfac7..5e849436 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -1,7 +1,7 @@ /* zint_tcl.c TCL binding for zint */ /* zint - the open source tcl binding to the zint barcode library - Copyright (C) 2014 Harald Oehlmann + Copyright (C) 2014-2022 Harald Oehlmann Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* History @@ -139,6 +138,9 @@ - Added DBAR_EXPSTK, CODE16K, CODE49 -rows 2021-12-17 GL - Added -fast option +2022-04-08 GL +- Updated ECIs to AIM ITS/04-023:2022 + Note changed names "unicode" -> "utf-16be", "euc-cn" -> "gb2312" */ #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) @@ -427,18 +429,24 @@ static const char *s_eci_list[] = { "cp1251", /*22: Windows-1251*/ "cp1252", /*23: Windows-1252*/ "cp1256", /*24: Windows-1256*/ - "unicode", /*25: UCS-2BE (High order byte first) Unicode BMP*/ + "utf-16be", /*25: UTF-16BE (High order byte first) Unicode*/ "utf-8", /*26: Unicode (UTF-8)*/ "ascii", /*27: ISO-646:1991 7-bit character set*/ "big5", /*28: Big5 (Taiwan) Chinese Character Set*/ - "euc-cn", /*29: GB (PRC) Chinese Character Set*/ + "gb2312", /*29: GB 2312 (PRC) Chinese Character Set*/ "iso2022-kr", /*30: Korean Character Set EUC-KR (KS X 1001:2002)*/ + "gbk", /*31: GBK Chinese Character Set*/ + "gb18030", /*32: GB 18030 Chinese Character Set*/ + "utf-16le", /*33: UTF-16LE (Low order byte first) Unicode*/ + "utf-32be", /*34: UTF-32BE (High order byte first) Unicode*/ + "utf-32le", /*35: UTF-32BE (Low order byte first) Unicode*/ NULL }; /* The ECI numerical number to pass to ZINT */ static const int s_eci_number[] = { - 3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30 + 3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35 }; /* Version information */ @@ -1403,3 +1411,5 @@ static int Encode(Tcl_Interp *interp, int objc, } return TCL_OK; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/docs/manual.txt b/docs/manual.txt index 2b8ace9d..c6f82d8e 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -670,9 +670,6 @@ The ECI value of 0 does not encode any ECI information in the code symbol. In this case, the default encoding applies for the data which is "ISO/IEC 8859-1 - Latin alphabet No. 1". -The row marked with an asterisk (*) translates GB 2312 codepoints, except when -using Han Xin Code, which translates GB 18030 codepoints, a superset of GB 2312. - Note: the "--eci=3" specification should only be used for special purposes. Using this parameter, the ECI information is explicitly added to the code symbol. Nevertheless, for ECI Code 3, this is not required, as this is the @@ -701,12 +698,18 @@ ECI Code | Character Encoding Scheme 22 | Windows 1251 - Cyrillic 23 | Windows 1252 - Latin 1 24 | Windows 1256 - Arabic -25 | UCS-2BE (High order byte first) (Unicode BMP) +25 | UTF-16BE (High order byte first) 26 | UTF-8 (Unicode) 27 | ISO/IEC 646:1991 7-bit character set (ASCII) 28 | Big5 (Taiwan) Chinese Character Set -29 * | GB (PRC) Chinese Character Set +29 | GB 2312 (PRC) Chinese Character Set 30 | Korean Character Set EUC-KR (KS X 1001:2002) +31 | GBK Chinese Character Set +32 | GB 18030 Chinese Character Set +33 | UTF-16LE (Low order byte first) +34 | UTF-32BE (High order bytes first) +35 | UTF-32LE (Low order bytes first) +170 | ISO/IEC 646:1991 7-bit character set (Invariant) 899 | 8-bit binary data ------------------------------------------------------------ @@ -1523,11 +1526,12 @@ FAST_MODE | Use faster if less optimal encodation for symbologies that | support it (currently DATAMATRIX only). -------------------------------------------------------------------------------- -The default mode is DATA_MODE. +The default mode is DATA_MODE. (Note that this differs from the default for the +CLI and GUI, which is UNICODE_MODE.) -DATA_MODE, UNICODE_MODE and GS1_MODE are mutually exclusive, whereas ESCAPE_MODE, -GS1PARENS_MODE, GS1NOCHECK_MODE and HEIGHTPERROW_MODE are optional. So, for -example, you can set +DATA_MODE, UNICODE_MODE and GS1_MODE are mutually exclusive, whereas +ESCAPE_MODE, GS1PARENS_MODE, GS1NOCHECK_MODE, HEIGHTPERROW_MODE and FAST_MODE +are optional. So, for example, you can set my_symbol->input_mode = UNICODE_MODE | ESCAPE_MODE; @@ -1579,7 +1583,7 @@ returned on success. For instance: char name[32]; if (ZBarcode_BarcodeName(BARCODE_PDF417, name) == 0) { - printf("%s\n", name); + printf("%s\n", name); } will print "BARCODE_PDF417". @@ -3199,7 +3203,7 @@ default value is 250 (25%). ================================ 7.1 License ----------- -Zint, libzint and Zint Barcode Studio are Copyright © 2021 Robin Stuart. All +Zint, libzint and Zint Barcode Studio are Copyright © 2022 Robin Stuart. All historical versions are distributed under the GNU General Public License version 3 or later. Version 2.5 (and later) is released under a dual license: the encoding library is released under the BSD license whereas the GUI, Zint @@ -3283,9 +3287,8 @@ international standards: capture techniques - Code 39 bar code symbology specification > ISO/IEC 18004:2015 Information technology - Automatic identification and data capture techniques - QR Code bar code symbology specification -> ISO/IEC DIS 20830:2019 (Draft 2019-10-10) Information technology - Automatic - identification and data capture techniques - Han Xin Code bar code - symbology specification +> ISO/IEC 20830:2021 Information technology - Automatic identification and data + capture techniques - Han Xin Code bar code symbology specification > ISO/IEC 24723:2010 Information technology - Automatic identification and data capture techniques - GS1 Composite bar code symbology specification > ISO/IEC 24724:2011 Information technology - Automatic identification and data @@ -3317,12 +3320,12 @@ international standards: (Released 9th Dec 2008) > AIMD/TSC15032-43 (v 0.99c) - International Technical Specification - Ultracode Symbology (Draft) (Released 4th Nov 2015) -> GS1 General Specifications Release 21.0.1 (Jan 2021) +> GS1 General Specifications Release 22.0 (Jan 2022) > AIM ITS/04-001 International Technical Standard - Extended Channel Interpretations Part 1: Identification Schemes and Protocol (Released 24th May 2004) > AIM ITS/04-023 International Technical Standard - Extended Channel - Interpretations Part 3: Register (Released 15th July 2004) + Interpretations Part 3: Register (Version 2, February 2022) A. Character Encoding diff --git a/frontend/main.c b/frontend/main.c index 8ac75041..d1e767b8 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008-2021 Robin Stuart + Copyright (C) 2008-2022 Robin Stuart This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,7 +18,6 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -/* vim: set ts=4 sw=4 et : */ #include #include @@ -200,14 +199,19 @@ static void show_eci(void) { " 22: Windows 1251 - Cyrillic\n" " 23: Windows 1252 - Latin 1\n" " 24: Windows 1256 - Arabic\n" - " 25: UCS-2BE (High order byte first) (Unicode BMP)\n" + " 25: UTF-16BE (High order byte first)\n" " 26: UTF-8 (Unicode)\n" - " 27: ISO/IEC 646:1991 7-bit character set (ASCII)\n" + " 27: ISO/IEC 646:1991 7-bit ASCII\n" " 28: Big5 (Taiwan) Chinese Character Set\n" - " 29: ** GB (PRC) Chinese Character Set\n" + " 29: GB 2312 (PRC) Chinese Character Set\n" " 30: Korean Character Set EUC-KR (KS X 1001:2002)\n" + " 31: GBK Chinese Character Set\n" + " 32: GB 18030 Chinese Character Set\n" + " 33: UTF-16LE (Low order byte first)\n" + " 34: UTF-32BE (High order bytes first)\n" + " 35: UTF-32LE (Low order bytes first)\n" + "170: ISO/IEC 646:1991 7-bit Invariant\n" "899: 8-bit binary data\n" - "** ECI 29 is GB 2312 except for Han Xin, when it is GB 18030\n" ); } @@ -1479,3 +1483,5 @@ int main(int argc, char **argv) { return do_exit(error_number); } + +/* vim: set ts=4 sw=4 et : */ diff --git a/frontend/tests/test_args.c b/frontend/tests/test_args.c index 61c9de8e..9954c0ca 100644 --- a/frontend/tests/test_args.c +++ b/frontend/tests/test_args.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2020 - 2021 Robin Stuart + Copyright (C) 2020-2022 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -27,7 +27,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "testcommon.h" @@ -302,15 +301,15 @@ static void test_dump_args(int index, int debug) { /* 30*/ { BARCODE_DATAMATRIX, "(9\\x31)12(92)34", NULL, NULL, NULL, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, GS1_GS_SEPARATOR, 0, -1, 0, -1, 0, -1, -1, NULL, -1, -1, 0, -1, "AA A8\nF9 DC\nBF 20\nD6 C4\nED 10\nA0 0C\nA7 C0\n96 5C\nBA 70\nBB A4\nE2 18\nDD 14\n9C 40\nFF FC" }, /* 31*/ { BARCODE_EANX_CC, "[91]12", NULL, NULL, NULL, -1, -1, 0, -1, 0, -1, 0, -1, -1, "12345678+12", -1, -1, 0, -1, "DB BC D3 9C 44 E9 D2 2C 19 E7 A2 D8 A0 00 00 00\nDB 31 1C 9C C7 29 92 47 D9 E9 40 C8 A0 00 00 00\nDA 3B EB 10 AF 09 9A 18 9D 7D 82 E8 A0 00 00 00\n10 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00\n20 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00\n10 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00\n14 68 D1 A6 49 BD 55 C9 D4 22 48 B9 40 59 94 98" }, /* 32*/ { BARCODE_EANX_CC, "[91]12", NULL, NULL, NULL, -1, -1, 0, -1, 0, -1, 0, -1, 2, "12345678+12", -1, -1, 0, -1, "D3 A3 E9 DB F5 C9 DB 43 D9 CB 98 D2 20 00 00 00\nD3 25 0F 11 E4 49 D3 51 F1 AC FC D6 20 00 00 00\nD1 33 48 19 39 E9 93 18 49 D8 98 D7 20 00 00 00\nD1 A6 FC DA 1C 49 9B C5 05 E2 84 D7 A0 00 00 00\n10 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00\n20 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00\n10 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00\n14 68 D1 A6 49 BD 55 C9 D4 22 48 B9 40 59 94 98" }, - /* 33*/ { BARCODE_QRCODE, "点", NULL, NULL, NULL, -1, -1, 0, -1, 0, -1, 0, -1, -1, NULL, -1, 1, 0, -1, "FE 2B F8\n82 AA 08\nBA B2 E8\nBA 0A E8\nBA FA E8\n82 E2 08\nFE AB F8\n00 80 00\nD3 3B B0\n60 95 68\n7A B3 A0\n1D 0F 98\nAA D7 30\n00 E6 A8\nFE DA D0\n82 42 20\nBA 0E 38\nBA C7 18\nBA 17 68\n82 B9 40\nFE C5 28" }, + /* 33*/ { BARCODE_QRCODE, "点", NULL, NULL, NULL, -1, -1, 0, -1, 0, -1, 0, -1, -1, NULL, -1, 1, 0, -1, "Warning 543: Converted to Shift JIS but no ECI specified\nFE 2B F8\n82 AA 08\nBA B2 E8\nBA 0A E8\nBA FA E8\n82 E2 08\nFE AB F8\n00 80 00\nD3 3B B0\n60 95 68\n7A B3 A0\n1D 0F 98\nAA D7 30\n00 E6 A8\nFE DA D0\n82 42 20\nBA 0E 38\nBA C7 18\nBA 17 68\n82 B9 40\nFE C5 28" }, /* 34*/ { BARCODE_QRCODE, "点", NULL, NULL, NULL, -1, -1, 0, -1, 0, 26, 0, -1, -1, NULL, -1, 1, 0, -1, "FE 5B F8\n82 72 08\nBA DA E8\nBA 52 E8\nBA 2A E8\n82 0A 08\nFE AB F8\n00 D8 00\nEF F6 20\nB5 C2 28\n36 28 88\nFD 42 10\n62 2A C8\n00 95 70\nFE B7 38\n82 FD D8\nBA 97 00\nBA 43 60\nBA C8 C8\n82 C3 68\nFE EA F8" }, /* 35*/ { BARCODE_QRCODE, "\223\137", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 0, -1, -1, NULL, -1, 1, 0, -1, "FE 2B F8\n82 0A 08\nBA A2 E8\nBA 0A E8\nBA 5A E8\n82 72 08\nFE AB F8\n00 A0 00\nEF AE 20\n75 B5 20\n82 F7 58\nF4 9D C8\n5E 17 28\n00 C2 20\nFE 88 80\n82 82 38\nBA EA A8\nBA 55 50\nBA D7 68\n82 BD D0\nFE B7 78" }, /* 36*/ { BARCODE_QRCODE, "\223\137", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 1, -1, -1, NULL, -1, 1, 0, -1, "FE 2B F8\n82 AA 08\nBA B2 E8\nBA 0A E8\nBA FA E8\n82 E2 08\nFE AB F8\n00 80 00\nD3 3B B0\n60 95 68\n7A B3 A0\n1D 0F 98\nAA D7 30\n00 E6 A8\nFE DA D0\n82 42 20\nBA 0E 38\nBA C7 18\nBA 17 68\n82 B9 40\nFE C5 28" }, /* 37*/ { BARCODE_QRCODE, "\\x93\\x5F", NULL, NULL, NULL, DATA_MODE | ESCAPE_MODE, -1, 0, -1, 0, -1, 1, -1, -1, NULL, -1, 1, 0, -1, "FE 2B F8\n82 AA 08\nBA B2 E8\nBA 0A E8\nBA FA E8\n82 E2 08\nFE AB F8\n00 80 00\nD3 3B B0\n60 95 68\n7A B3 A0\n1D 0F 98\nAA D7 30\n00 E6 A8\nFE DA D0\n82 42 20\nBA 0E 38\nBA C7 18\nBA 17 68\n82 B9 40\nFE C5 28" }, - /* 38*/ { BARCODE_QRCODE, "点", NULL, NULL, NULL, -1, -1, 0, -1, 0, -1, 0, 2, -1, NULL, -1, 1, 0, -1, "FE 4B F8\n82 92 08\nBA 42 E8\nBA 92 E8\nBA 3A E8\n82 EA 08\nFE AB F8\n00 38 00\nFB CD 50\nA5 89 18\n0B 74 B8\nFC 81 A0\n92 34 B8\n00 DE 48\nFE AB 10\n82 5E 50\nBA C9 20\nBA C9 20\nBA F4 E0\n82 81 A0\nFE B4 E8" }, - /* 39*/ { BARCODE_HANXIN, "é", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 1, -1, -1, NULL, -1, -1, 0, -1, "FE 8A FE\n80 28 02\nBE E8 FA\nA0 94 0A\nAE 3E EA\nAE D2 EA\nAE 74 EA\n00 AA 00\n15 B4 AA\n0B 48 74\nA2 4A A4\nB5 56 2C\nA8 5A A8\n9F 18 50\nAA 07 50\n00 A6 00\nFE 20 EA\n02 C2 EA\nFA C4 EA\n0A 42 0A\nEA 52 FA\nEA 24 02\nEA AA FE" }, - /* 40*/ { BARCODE_HANXIN, "é", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 1, 3, -1, NULL, -1, -1, 0, -1, "FE 16 FE\n80 E2 02\nBE C2 FA\nA0 A0 0A\nAE F6 EA\nAE 98 EA\nAE BA EA\n00 E0 00\n15 83 AA\n44 7E AE\n92 9C 78\n25 BF 08\n47 4B 8C\n0D F9 74\nAB E7 50\n00 3A 00\nFE C2 EA\n02 22 EA\nFA DA EA\n0A 22 0A\nEA B2 FA\nEA 9A 02\nEA E8 FE" }, - /* 41*/ { BARCODE_HANXIN, "é", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 1, 4, -1, NULL, -1, -1, 0, -1, "FE 8A FE\n80 28 02\nBE E8 FA\nA0 94 0A\nAE 3E EA\nAE D2 EA\nAE 74 EA\n00 AA 00\n15 B4 AA\n0B 48 74\nA2 4A A4\nB5 56 2C\nA8 5A A8\n9F 18 50\nAA 07 50\n00 A6 00\nFE 20 EA\n02 C2 EA\nFA C4 EA\n0A 42 0A\nEA 52 FA\nEA 24 02\nEA AA FE" }, + /* 38*/ { BARCODE_QRCODE, "点", NULL, NULL, NULL, -1, -1, 0, -1, 0, -1, 0, 2, -1, NULL, -1, 1, 0, -1, "Warning 543: Converted to Shift JIS but no ECI specified\nFE 4B F8\n82 92 08\nBA 42 E8\nBA 92 E8\nBA 3A E8\n82 EA 08\nFE AB F8\n00 38 00\nFB CD 50\nA5 89 18\n0B 74 B8\nFC 81 A0\n92 34 B8\n00 DE 48\nFE AB 10\n82 5E 50\nBA C9 20\nBA C9 20\nBA F4 E0\n82 81 A0\nFE B4 E8" }, + /* 39*/ { BARCODE_HANXIN, "é", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 1, -1, -1, NULL, -1, -1, 0, -1, "FE 8A FE\n80 28 02\nBE E8 FA\nA0 94 0A\nAE 3E EA\nAE D2 EA\nAE 74 EA\n00 AA 00\n15 B4 80\n0B 48 74\nA2 4A A4\nB5 56 2C\nA8 5A A8\n9F 18 50\n02 07 50\n00 A6 00\nFE 20 EA\n02 C2 EA\nFA C4 EA\n0A 42 0A\nEA 52 FA\nEA 24 02\nEA AA FE" }, + /* 40*/ { BARCODE_HANXIN, "é", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 1, 3, -1, NULL, -1, -1, 0, -1, "FE 16 FE\n80 E2 02\nBE C2 FA\nA0 A0 0A\nAE F6 EA\nAE 98 EA\nAE BA EA\n00 E0 00\n15 83 80\n44 7E AE\n92 9C 78\n25 BF 08\n47 4B 8C\n0D F9 74\n03 E7 50\n00 3A 00\nFE C2 EA\n02 22 EA\nFA DA EA\n0A 22 0A\nEA B2 FA\nEA 9A 02\nEA E8 FE" }, + /* 41*/ { BARCODE_HANXIN, "é", NULL, NULL, NULL, DATA_MODE, -1, 0, -1, 0, -1, 1, 4, -1, NULL, -1, -1, 0, -1, "FE 8A FE\n80 28 02\nBE E8 FA\nA0 94 0A\nAE 3E EA\nAE D2 EA\nAE 74 EA\n00 AA 00\n15 B4 80\n0B 48 74\nA2 4A A4\nB5 56 2C\nA8 5A A8\n9F 18 50\n02 07 50\n00 A6 00\nFE 20 EA\n02 C2 EA\nFA C4 EA\n0A 42 0A\nEA 52 FA\nEA 24 02\nEA AA FE" }, }; int data_size = ARRAY_SIZE(data); int i; @@ -1013,3 +1012,5 @@ int main(int argc, char *argv[]) { return 0; } + +/* vim: set ts=4 sw=4 et : */ diff --git a/frontend_qt/mainWindow.ui b/frontend_qt/mainWindow.ui index 8655988b..b9844af2 100644 --- a/frontend_qt/mainWindow.ui +++ b/frontend_qt/mainWindow.ui @@ -425,6 +425,9 @@ Remember to place [square brackets] around AI identifiers 0 + + 34 + Set the ECI (Extended Channel Interpretation) code (ignored if disabled) @@ -536,7 +539,7 @@ Remember to place [square brackets] around AI identifiers - 25: UCS-2BE + 25: UTF-16BE @@ -564,6 +567,36 @@ Remember to place [square brackets] around AI identifiers 30: Korean EUC-KR + + + 31: GBK + + + + + 32: GB 18030 + + + + + 33: UTF-16LE + + + + + 34: UTF-32BE + + + + + 35: UTF-32LE + + + + + 170: ISO 646 Invariant + + 899: 8-bit binary data diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index 28761e33..7864e662 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -1,6 +1,6 @@ /*************************************************************************** * Copyright (C) 2008 by BogDan Vatra * - * Copyright (C) 2009-2021 by Robin Stuart * + * Copyright (C) 2009-2022 by Robin Stuart * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -13,7 +13,6 @@ * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ -/* vim: set ts=4 sw=4 et : */ //#include #include @@ -461,7 +460,7 @@ void MainWindow::about() "

A free barcode generator

" "

Instruction manual is available at the project homepage:
" "
http://www.zint.org.uk" - "

Copyright © 2006-2021 Robin Stuart and others.
" + "

Copyright © 2006-2022 Robin Stuart and others.
" "Qt backend by BogDan Vatra

" "

Qt version %2

" "

With thanks to Harald Oehlmann, Norbert Szabó, Robert Elliott, Milton Neal, " @@ -953,7 +952,6 @@ void MainWindow::change_options() chkComposite->setText(tr("Add &2D Component")); combobox_item_enabled(cmbCompType, 3, false); // CC-C - cmbECI->setItemText(25, tr("29: GB 2312 (PRC)")); btype->setItemText(0, tr("No border")); combobox_item_enabled(cmbFontSetting, 1, true); m_lblHeightPerRow = nullptr; @@ -1294,7 +1292,6 @@ void MainWindow::change_options() file.close(); load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Han Xin Cod&e")); - cmbECI->setItemText(25, tr("29: GB 18030 (PRC)")); connect(get_widget(QSL("cmbHXSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(get_widget(QSL("cmbHXECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(get_widget(QSL("cmbHXMask")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); @@ -3415,3 +3412,5 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) break; } } + +/* vim: set ts=4 sw=4 et : */