1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/libext2fs/NOTE.txt Sat Oct 09 23:28:01 2021 +0200 1.3 @@ -0,0 +1,67 @@ 1.4 +Use get_config on a configured Debian build to get a suitable config.h: 1.5 + 1.6 +./get_config ~/Debian/e2fsprogs-1.46.2 > lib/config.h 1.7 + 1.8 +An apparently usable configuration of a Debian build: 1.9 + 1.10 +./configure --disable-debugfs --disable-imager --disable-resizer \ 1.11 + --disable-defrag --disable-uuidd --disable-mmp --disable-tdb \ 1.12 + --disable-bmap-stats --disable-nls --disable-fuse2fs \ 1.13 + --enable-libuuid --enable-libblkid 1.14 + 1.15 +To make sure that some files are generated, build the software: 1.16 + 1.17 +make 1.18 + 1.19 +Source and header files are then copied from the following directories in the 1.20 +e2fsprogs distribution: 1.21 + 1.22 +version.h -> lib 1.23 +lib/dirpath.h -> lib 1.24 + 1.25 +lib/blkid -> lib/libblkid 1.26 +lib/blkid/blkid.h -> include/libblkid/blkid/blkid.h 1.27 +lib/blkid/blkid_types.h -> include/libblkid/blkid/blkid_types.h 1.28 + 1.29 +In blkid, the following files should be excluded: 1.30 + 1.31 +tst_types.c 1.32 + 1.33 +lib/e2p -> lib/libe2p 1.34 +lib/e2p/e2p.h -> include/libe2p/e2p/e2p.h 1.35 + 1.36 +lib/et -> lib/libet 1.37 +lib/et/com_error.h -> include/libet/et/com_error.h 1.38 + 1.39 +lib/ext2fs -> lib/libext2fs 1.40 +lib/ext2fs/ext*.h -> include/libext2fs/ext2fs 1.41 +lib/ext2fs/bitops.h -> include/libext2fs/ext2fs 1.42 +lib/ext2fs/hashmap.h -> include/libext2fs/ext2fs 1.43 +lib/ext2fs/kernel-jbd.h -> include/libext2fs/ext2fs 1.44 + 1.45 +In ext2fs, the following files should be excluded: 1.46 + 1.47 +bmove.c 1.48 +dosio.* 1.49 +icount.c 1.50 +imager.c 1.51 +irel_ma.c 1.52 +nt_io.c 1.53 +qcow2.* 1.54 +sparse_io.c 1.55 +tdb* 1.56 +test_io.c 1.57 +tst_*.c 1.58 +undo_io.c 1.59 +version.c 1.60 + 1.61 +Here, version.c is excluded since it generally does not change and any new 1.62 +version will break the include statement in the file. 1.63 + 1.64 +lib/support -> lib/libsupport 1.65 +lib/support/quotaio.h -> include/libsupport/support/quotaio.h 1.66 +lib/support/sort_r.h -> include/libsupport/support/sort_r.h 1.67 + 1.68 +To generate a configuration: 1.69 + 1.70 +tools/make_config .../e2fsprogs-x.y.z/lib/config.h
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/libext2fs/README Sat Oct 09 23:28:01 2021 +0200 2.3 @@ -0,0 +1,19 @@ 2.4 + This is the new version (1.46.2) of the second extended file 2.5 +system management programs. 2.6 + 2.7 + From time to time, I release new versions of e2fsprogs, to fix 2.8 +bugs and to make the utilities more robust. You can always find 2.9 +information about the latest version at the the e2fsprogs web page, 2.10 +which is: 2.11 + 2.12 + http://e2fsprogs.sourceforge.net 2.13 + 2.14 + The INSTALL file has instructions on building and installing 2.15 +e2fsprogs. Provisions for building Red Hat RPMs and Debian dpkg files 2.16 +are supplied as well. 2.17 + 2.18 + In case of bugs in these programs, please contact Ted Ts'o at 2.19 +tytso@mit.edu or tytso@alum.mit.edu. See the e2fsck man page for 2.20 +suggestions of what sort of information to include when submitting bug 2.21 +reports for these programs. 2.22 +
3.1 --- a/libext2fs/include/libblkid/blkid/blkid_types.h Sat Oct 02 23:57:02 2021 +0200 3.2 +++ b/libext2fs/include/libblkid/blkid/blkid_types.h Sat Oct 09 23:28:01 2021 +0200 3.3 @@ -78,7 +78,7 @@ 3.4 #if (4 == 4) 3.5 typedef unsigned int __u32; 3.6 #else 3.7 -#if (4 == 4) 3.8 +#if (8 == 4) 3.9 typedef unsigned long __u32; 3.10 #else 3.11 #if (2 == 4) 3.12 @@ -100,7 +100,7 @@ 3.13 #if (4 == 4) 3.14 typedef int __s32; 3.15 #else 3.16 -#if (4 == 4) 3.17 +#if (8 == 4) 3.18 typedef long __s32; 3.19 #else 3.20 #if (2 == 4) 3.21 @@ -125,7 +125,7 @@ 3.22 #if (8 == 8) 3.23 typedef unsigned long long __u64; 3.24 #else 3.25 -#if (4 == 8) 3.26 +#if (8 == 8) 3.27 typedef unsigned long __u64; 3.28 #else 3.29 #undef HAVE___U64 3.30 @@ -151,7 +151,7 @@ 3.31 typedef signed long long __s64; 3.32 #endif /* __GNUC__ */ 3.33 #else 3.34 -#if (4 == 8) 3.35 +#if (8 == 8) 3.36 typedef long __s64; 3.37 #else 3.38 #undef HAVE___S64
4.1 --- a/libext2fs/include/libe2p/e2p/e2p.h Sat Oct 02 23:57:02 2021 +0200 4.2 +++ b/libext2fs/include/libe2p/e2p/e2p.h Sat Oct 09 23:28:01 2021 +0200 4.3 @@ -47,9 +47,12 @@ 4.4 int setflags (int fd, unsigned long flags); 4.5 int setversion (int fd, unsigned long version); 4.6 4.7 +#define E2P_LIST_JOURNAL_FLAG_FC 0x1 4.8 void e2p_list_journal_super(FILE *f, char *journal_sb_buf, 4.9 int exp_block_size, int flags); 4.10 4.11 +void e2p_feature_to_string(int compat, unsigned int mask, char *buf, 4.12 + size_t buf_len); 4.13 const char *e2p_feature2string(int compat, unsigned int mask); 4.14 const char *e2p_jrnl_feature2string(int compat, unsigned int mask); 4.15 int e2p_string2feature(char *string, int *compat, unsigned int *mask); 4.16 @@ -80,3 +83,10 @@ 4.17 4.18 const char *e2p_encmode2string(int num); 4.19 int e2p_string2encmode(char *string); 4.20 + 4.21 +int e2p_str2encoding(const char *string); 4.22 +const char *e2p_encoding2str(int encoding); 4.23 +int e2p_get_encoding_flags(int encoding); 4.24 +int e2p_str2encoding_flags(int encoding, char *param, __u16 *flags); 4.25 + 4.26 +const char *e2p_errcode2str(int err);
5.1 --- a/libext2fs/include/libext2fs/ext2fs/ext2_err.h Sat Oct 02 23:57:02 2021 +0200 5.2 +++ b/libext2fs/include/libext2fs/ext2fs/ext2_err.h Sat Oct 09 23:28:01 2021 +0200 5.3 @@ -184,11 +184,8 @@ 5.4 #define EXT2_ET_CORRUPT_JOURNAL_SB (2133571504L) 5.5 #define EXT2_ET_INODE_CORRUPTED (2133571505L) 5.6 #define EXT2_ET_EA_INODE_CORRUPTED (2133571506L) 5.7 - 5.8 -/* PAUL: Remove actual error functionality. */ 5.9 - 5.10 -#if 0 5.11 - 5.12 +#define EXT2_ET_NO_GDESC (2133571507L) 5.13 +#define EXT2_FILSYS_CORRUPTED (2133571508L) 5.14 extern const struct error_table et_ext2_error_table; 5.15 extern void initialize_ext2_error_table(void); 5.16 5.17 @@ -200,5 +197,3 @@ 5.18 /* for compatibility with older versions... */ 5.19 #define init_ext2_err_tbl initialize_ext2_error_table 5.20 #define ext2_err_base ERROR_TABLE_BASE_ext2 5.21 - 5.22 -#endif
6.1 --- a/libext2fs/include/libext2fs/ext2fs/ext2_fs.h Sat Oct 02 23:57:02 2021 +0200 6.2 +++ b/libext2fs/include/libext2fs/ext2fs/ext2_fs.h Sat Oct 09 23:28:01 2021 +0200 6.3 @@ -238,6 +238,7 @@ 6.4 #define EXT2_HASH_LEGACY_UNSIGNED 3 /* reserved for userspace lib */ 6.5 #define EXT2_HASH_HALF_MD4_UNSIGNED 4 /* reserved for userspace lib */ 6.6 #define EXT2_HASH_TEA_UNSIGNED 5 /* reserved for userspace lib */ 6.7 +#define EXT2_HASH_SIPHASH 6 6.8 6.9 #define EXT2_HASH_FLAG_INCOMPAT 0x1 6.10 6.11 @@ -268,8 +269,7 @@ 6.12 #define EXT2_MIN_DESC_SIZE_64BIT 64 6.13 #define EXT2_MAX_DESC_SIZE EXT2_MIN_BLOCK_SIZE 6.14 #define EXT2_DESC_SIZE(s) \ 6.15 - ((EXT2_SB(s)->s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) ? \ 6.16 - (s)->s_desc_size : EXT2_MIN_DESC_SIZE) 6.17 + (ext2fs_has_feature_64bit(s) ? (s)->s_desc_size : EXT2_MIN_DESC_SIZE) 6.18 6.19 #define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group) 6.20 #define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group) 6.21 @@ -335,14 +335,16 @@ 6.22 /* EXT4_EOFBLOCKS_FL 0x00400000 was here */ 6.23 #define FS_NOCOW_FL 0x00800000 /* Do not cow file */ 6.24 #define EXT4_SNAPFILE_FL 0x01000000 /* Inode is a snapshot */ 6.25 +#define FS_DAX_FL 0x02000000 /* Inode is DAX */ 6.26 #define EXT4_SNAPFILE_DELETED_FL 0x04000000 /* Snapshot is being deleted */ 6.27 #define EXT4_SNAPFILE_SHRUNK_FL 0x08000000 /* Snapshot shrink has completed */ 6.28 #define EXT4_INLINE_DATA_FL 0x10000000 /* Inode has inline data */ 6.29 #define EXT4_PROJINHERIT_FL 0x20000000 /* Create with parents projid */ 6.30 +#define EXT4_CASEFOLD_FL 0x40000000 /* Casefolded file */ 6.31 #define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ 6.32 6.33 -#define EXT2_FL_USER_VISIBLE 0x204BDFFF /* User visible flags */ 6.34 -#define EXT2_FL_USER_MODIFIABLE 0x204B80FF /* User modifiable flags */ 6.35 +#define EXT2_FL_USER_VISIBLE 0x604BDFFF /* User visible flags */ 6.36 +#define EXT2_FL_USER_MODIFIABLE 0x604B80FF /* User modifiable flags */ 6.37 6.38 /* 6.39 * ioctl commands 6.40 @@ -541,6 +543,7 @@ 6.41 #define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */ 6.42 #define EXT2_ERROR_FS 0x0002 /* Errors detected */ 6.43 #define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */ 6.44 +#define EXT4_FC_REPLAY 0x0020 /* Ext4 fast commit replay ongoing */ 6.45 6.46 /* 6.47 * Misc. filesystem flags 6.48 @@ -681,8 +684,8 @@ 6.49 /*060*/ __u32 s_feature_incompat; /* incompatible feature set */ 6.50 __u32 s_feature_ro_compat; /* readonly-compatible feature set */ 6.51 /*068*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */ 6.52 -/*078*/ char s_volume_name[EXT2_LABEL_LEN]; /* volume name */ 6.53 -/*088*/ char s_last_mounted[64]; /* directory where last mounted */ 6.54 +/*078*/ __u8 s_volume_name[EXT2_LABEL_LEN]; /* volume name, no NUL? */ 6.55 +/*088*/ __u8 s_last_mounted[64]; /* directory last mounted on, no NUL? */ 6.56 /*0c8*/ __u32 s_algorithm_usage_bitmap; /* For compression */ 6.57 /* 6.58 * Performance hints. Directory preallocation should only 6.59 @@ -730,29 +733,40 @@ 6.60 __u32 s_first_error_time; /* first time an error happened */ 6.61 __u32 s_first_error_ino; /* inode involved in first error */ 6.62 /*1a0*/ __u64 s_first_error_block; /* block involved in first error */ 6.63 - __u8 s_first_error_func[32]; /* function where the error happened */ 6.64 + __u8 s_first_error_func[32]; /* function where error hit, no NUL? */ 6.65 /*1c8*/ __u32 s_first_error_line; /* line number where error happened */ 6.66 __u32 s_last_error_time; /* most recent time of an error */ 6.67 /*1d0*/ __u32 s_last_error_ino; /* inode involved in last error */ 6.68 __u32 s_last_error_line; /* line number where error happened */ 6.69 __u64 s_last_error_block; /* block involved of last error */ 6.70 -/*1e0*/ __u8 s_last_error_func[32]; /* function where the error happened */ 6.71 +/*1e0*/ __u8 s_last_error_func[32]; /* function where error hit, no NUL? */ 6.72 #define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts) 6.73 -/*200*/ __u8 s_mount_opts[64]; 6.74 +/*200*/ __u8 s_mount_opts[64]; /* default mount options, no NUL? */ 6.75 /*240*/ __u32 s_usr_quota_inum; /* inode number of user quota file */ 6.76 __u32 s_grp_quota_inum; /* inode number of group quota file */ 6.77 - __u32 s_overhead_blocks; /* overhead blocks/clusters in fs */ 6.78 + __u32 s_overhead_clusters; /* overhead blocks/clusters in fs */ 6.79 /*24c*/ __u32 s_backup_bgs[2]; /* If sparse_super2 enabled */ 6.80 /*254*/ __u8 s_encrypt_algos[4]; /* Encryption algorithms in use */ 6.81 /*258*/ __u8 s_encrypt_pw_salt[16]; /* Salt used for string2key algorithm */ 6.82 /*268*/ __le32 s_lpf_ino; /* Location of the lost+found inode */ 6.83 __le32 s_prj_quota_inum; /* inode for tracking project quota */ 6.84 /*270*/ __le32 s_checksum_seed; /* crc32c(orig_uuid) if csum_seed set */ 6.85 - __le32 s_reserved[98]; /* Padding to the end of the block */ 6.86 +/*274*/ __u8 s_wtime_hi; 6.87 + __u8 s_mtime_hi; 6.88 + __u8 s_mkfs_time_hi; 6.89 + __u8 s_lastcheck_hi; 6.90 + __u8 s_first_error_time_hi; 6.91 + __u8 s_last_error_time_hi; 6.92 + __u8 s_first_error_errcode; 6.93 + __u8 s_last_error_errcode; 6.94 +/*27c*/ __le16 s_encoding; /* Filename charset encoding */ 6.95 + __le16 s_encoding_flags; /* Filename charset encoding flags */ 6.96 + __le32 s_reserved[95]; /* Padding to the end of the block */ 6.97 /*3fc*/ __u32 s_checksum; /* crc32c(superblock) */ 6.98 }; 6.99 6.100 #define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START) 6.101 +#define EXT2_LEN_STR(buf) (int)sizeof(buf), (char *)buf 6.102 6.103 /* 6.104 * Codes for operating systems 6.105 @@ -800,6 +814,8 @@ 6.106 /* #define EXT2_FEATURE_COMPAT_EXCLUDE_INODE 0x0080 not used, legacy */ 6.107 #define EXT2_FEATURE_COMPAT_EXCLUDE_BITMAP 0x0100 6.108 #define EXT4_FEATURE_COMPAT_SPARSE_SUPER2 0x0200 6.109 +#define EXT4_FEATURE_COMPAT_FAST_COMMIT 0x0400 6.110 +#define EXT4_FEATURE_COMPAT_STABLE_INODES 0x0800 6.111 6.112 6.113 #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 6.114 @@ -839,6 +855,7 @@ 6.115 #define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3-lvl htree */ 6.116 #define EXT4_FEATURE_INCOMPAT_INLINE_DATA 0x8000 /* data in inode */ 6.117 #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000 6.118 +#define EXT4_FEATURE_INCOMPAT_CASEFOLD 0x20000 6.119 6.120 #define EXT4_FEATURE_COMPAT_FUNCS(name, ver, flagname) \ 6.121 static inline int ext2fs_has_feature_##name(struct ext2_super_block *sb) \ 6.122 @@ -900,6 +917,8 @@ 6.123 EXT4_FEATURE_COMPAT_FUNCS(lazy_bg, 2, LAZY_BG) 6.124 EXT4_FEATURE_COMPAT_FUNCS(exclude_bitmap, 2, EXCLUDE_BITMAP) 6.125 EXT4_FEATURE_COMPAT_FUNCS(sparse_super2, 4, SPARSE_SUPER2) 6.126 +EXT4_FEATURE_COMPAT_FUNCS(fast_commit, 4, FAST_COMMIT) 6.127 +EXT4_FEATURE_COMPAT_FUNCS(stable_inodes, 4, STABLE_INODES) 6.128 6.129 EXT4_FEATURE_RO_COMPAT_FUNCS(sparse_super, 2, SPARSE_SUPER) 6.130 EXT4_FEATURE_RO_COMPAT_FUNCS(large_file, 2, LARGE_FILE) 6.131 @@ -932,6 +951,7 @@ 6.132 EXT4_FEATURE_INCOMPAT_FUNCS(largedir, 4, LARGEDIR) 6.133 EXT4_FEATURE_INCOMPAT_FUNCS(inline_data, 4, INLINE_DATA) 6.134 EXT4_FEATURE_INCOMPAT_FUNCS(encrypt, 4, ENCRYPT) 6.135 +EXT4_FEATURE_INCOMPAT_FUNCS(casefold, 4, CASEFOLD) 6.136 6.137 #define EXT2_FEATURE_COMPAT_SUPP 0 6.138 #define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ 6.139 @@ -967,6 +987,12 @@ 6.140 #define EXT4_DEFM_DISCARD 0x0400 6.141 #define EXT4_DEFM_NODELALLOC 0x0800 6.142 6.143 +static inline int ext4_hash_in_dirent(const struct ext2_inode *inode) 6.144 +{ 6.145 + return (inode->i_flags & EXT4_ENCRYPT_FL) && 6.146 + (inode->i_flags & EXT4_CASEFOLD_FL); 6.147 +} 6.148 + 6.149 /* 6.150 * Structure of a directory entry 6.151 */ 6.152 @@ -1002,6 +1028,25 @@ 6.153 }; 6.154 6.155 /* 6.156 + * Hashes for ext4_dir_entry for casefolded and ecrypted directories. 6.157 + * This is located at the first 4 bit aligned location after the name. 6.158 + */ 6.159 + 6.160 +struct ext2_dir_entry_hash { 6.161 + __le32 hash; 6.162 + __le32 minor_hash; 6.163 +}; 6.164 + 6.165 +#define EXT2_DIRENT_HASHES(entry) \ 6.166 + ((struct ext2_dir_entry_hash *) &entry->name[\ 6.167 + (ext2fs_dirent_name_len(entry) + \ 6.168 + EXT2_DIR_ROUND) & ~EXT2_DIR_ROUND]) 6.169 +#define EXT2_DIRENT_HASH(entry) \ 6.170 + ext2fs_le32_to_cpu(EXT2_DIRENT_HASHES(entry)->hash) 6.171 +#define EXT2_DIRENT_MINOR_HASH(entry) \ 6.172 + ext2fs_le32_to_cpu(EXT2_DIRENT_HASHES(entry)->minor_hash) 6.173 + 6.174 +/* 6.175 * This is a bogus directory entry at the end of each leaf block that 6.176 * records checksums. 6.177 */ 6.178 @@ -1041,12 +1086,21 @@ 6.179 * NOTE: It must be a multiple of 4 6.180 */ 6.181 #define EXT2_DIR_ENTRY_HEADER_LEN 8 6.182 +#define EXT2_DIR_ENTRY_HASH_LEN 8 6.183 #define EXT2_DIR_PAD 4 6.184 #define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1) 6.185 -#define EXT2_DIR_REC_LEN(name_len) (((name_len) + \ 6.186 - EXT2_DIR_ENTRY_HEADER_LEN + \ 6.187 - EXT2_DIR_ROUND) & \ 6.188 - ~EXT2_DIR_ROUND) 6.189 +#define EXT2_DIR_REC_LEN(name_len) ext2fs_dir_rec_len(name_len, 0) 6.190 + 6.191 +static inline unsigned int ext2fs_dir_rec_len(__u8 name_len, 6.192 + int extended) 6.193 +{ 6.194 + int rec_len = (name_len + EXT2_DIR_ENTRY_HEADER_LEN + EXT2_DIR_ROUND); 6.195 + 6.196 + rec_len &= ~EXT2_DIR_ROUND; 6.197 + if (extended) 6.198 + rec_len += EXT2_DIR_ENTRY_HASH_LEN; 6.199 + return rec_len; 6.200 +} 6.201 6.202 /* 6.203 * Constants for ext4's extended time encoding 6.204 @@ -1082,9 +1136,9 @@ 6.205 struct mmp_struct { 6.206 __u32 mmp_magic; /* Magic number for MMP */ 6.207 __u32 mmp_seq; /* Sequence no. updated periodically */ 6.208 - __u64 mmp_time; /* Time last updated */ 6.209 - char mmp_nodename[64]; /* Node which last updated MMP block */ 6.210 - char mmp_bdevname[32]; /* Bdev which last updated MMP block */ 6.211 + __u64 mmp_time; /* Time last updated (seconds) */ 6.212 + __u8 mmp_nodename[64]; /* Node updating MMP block, no NUL? */ 6.213 + __u8 mmp_bdevname[32]; /* Bdev updating MMP block, no NUL? */ 6.214 __u16 mmp_check_interval; /* Changed mmp_check_interval */ 6.215 __u16 mmp_pad1; 6.216 __u32 mmp_pad2[226]; 6.217 @@ -1116,4 +1170,8 @@ 6.218 */ 6.219 #define EXT4_INLINE_DATA_DOTDOT_SIZE (4) 6.220 6.221 +#define EXT4_ENC_UTF8_12_1 1 6.222 + 6.223 +#define EXT4_ENC_STRICT_MODE_FL (1 << 0) /* Reject invalid sequences */ 6.224 + 6.225 #endif /* _LINUX_EXT2_FS_H */
7.1 --- a/libext2fs/include/libext2fs/ext2fs/ext2_io.h Sat Oct 02 23:57:02 2021 +0200 7.2 +++ b/libext2fs/include/libext2fs/ext2fs/ext2_io.h Sat Oct 09 23:28:01 2021 +0200 7.3 @@ -33,6 +33,7 @@ 7.4 #define CHANNEL_FLAGS_WRITETHROUGH 0x01 7.5 #define CHANNEL_FLAGS_DISCARD_ZEROES 0x02 7.6 #define CHANNEL_FLAGS_BLOCK_DEVICE 0x04 7.7 +#define CHANNEL_FLAGS_THREADS 0x08 7.8 7.9 #define io_channel_discard_zeroes_data(i) (i->flags & CHANNEL_FLAGS_DISCARD_ZEROES) 7.10 7.11 @@ -104,6 +105,8 @@ 7.12 #define IO_FLAG_EXCLUSIVE 0x0002 7.13 #define IO_FLAG_DIRECT_IO 0x0004 7.14 #define IO_FLAG_FORCE_BOUNCE 0x0008 7.15 +#define IO_FLAG_THREADS 0x0010 7.16 +#define IO_FLAG_NOCACHE 0x0020 7.17 7.18 /* 7.19 * Convenience functions.... 7.20 @@ -143,5 +146,27 @@ 7.21 extern io_manager unix_io_manager; 7.22 extern io_manager unixfd_io_manager; 7.23 7.24 +/* sparse_io.c */ 7.25 +extern io_manager sparse_io_manager; 7.26 +extern io_manager sparsefd_io_manager; 7.27 + 7.28 +/* undo_io.c */ 7.29 +extern io_manager undo_io_manager; 7.30 +extern errcode_t set_undo_io_backing_manager(io_manager manager); 7.31 +extern errcode_t set_undo_io_backup_file(char *file_name); 7.32 + 7.33 +/* test_io.c */ 7.34 +extern io_manager test_io_manager, test_io_backing_manager; 7.35 +extern void (*test_io_cb_read_blk) 7.36 + (unsigned long block, int count, errcode_t err); 7.37 +extern void (*test_io_cb_write_blk) 7.38 + (unsigned long block, int count, errcode_t err); 7.39 +extern void (*test_io_cb_read_blk64) 7.40 + (unsigned long long block, int count, errcode_t err); 7.41 +extern void (*test_io_cb_write_blk64) 7.42 + (unsigned long long block, int count, errcode_t err); 7.43 +extern void (*test_io_cb_set_blksize) 7.44 + (int blksize, errcode_t err); 7.45 + 7.46 #endif /* _EXT2FS_EXT2_IO_H */ 7.47
8.1 --- a/libext2fs/include/libext2fs/ext2fs/ext2_types.h Sat Oct 02 23:57:02 2021 +0200 8.2 +++ b/libext2fs/include/libext2fs/ext2fs/ext2_types.h Sat Oct 09 23:28:01 2021 +0200 8.3 @@ -78,7 +78,7 @@ 8.4 #if (4 == 4) 8.5 typedef unsigned int __u32; 8.6 #else 8.7 -#if (4 == 4) 8.8 +#if (8 == 4) 8.9 typedef unsigned long __u32; 8.10 #else 8.11 #if (2 == 4) 8.12 @@ -100,7 +100,7 @@ 8.13 #if (4 == 4) 8.14 typedef int __s32; 8.15 #else 8.16 -#if (4 == 4) 8.17 +#if (8 == 4) 8.18 typedef long __s32; 8.19 #else 8.20 #if (2 == 4) 8.21 @@ -125,7 +125,7 @@ 8.22 #if (8 == 8) 8.23 typedef unsigned long long __u64; 8.24 #else 8.25 -#if (4 == 8) 8.26 +#if (8 == 8) 8.27 typedef unsigned long __u64; 8.28 #else 8.29 #undef HAVE___U64 8.30 @@ -151,7 +151,7 @@ 8.31 typedef signed long long __s64; 8.32 #endif /* __GNUC__ */ 8.33 #else 8.34 -#if (4 == 8) 8.35 +#if (8 == 8) 8.36 typedef long __s64; 8.37 #else 8.38 #undef HAVE___S64
9.1 --- a/libext2fs/include/libext2fs/ext2fs/ext2fs.h Sat Oct 02 23:57:02 2021 +0200 9.2 +++ b/libext2fs/include/libext2fs/ext2fs/ext2fs.h Sat Oct 09 23:28:01 2021 +0200 9.3 @@ -77,8 +77,8 @@ 9.4 typedef __u32 __bitwise blk_t; 9.5 typedef __u64 __bitwise blk64_t; 9.6 typedef __u32 __bitwise dgrp_t; 9.7 -typedef __u32 __bitwise ext2_off_t; 9.8 -typedef __u64 __bitwise ext2_off64_t; 9.9 +typedef __s32 __bitwise ext2_off_t; 9.10 +typedef __s64 __bitwise ext2_off64_t; 9.11 typedef __s64 __bitwise e2_blkcnt_t; 9.12 typedef __u32 __bitwise ext2_dirhash_t; 9.13 9.14 @@ -111,9 +111,14 @@ 9.15 #define EXT2FS_UNMARK_ERROR 1 9.16 #define EXT2FS_TEST_ERROR 2 9.17 9.18 -typedef struct ext2fs_struct_generic_bitmap *ext2fs_generic_bitmap; 9.19 -typedef struct ext2fs_struct_generic_bitmap *ext2fs_inode_bitmap; 9.20 -typedef struct ext2fs_struct_generic_bitmap *ext2fs_block_bitmap; 9.21 +struct ext2fs_struct_generic_bitmap_base { 9.22 + errcode_t magic; 9.23 + ext2_filsys fs; 9.24 +}; 9.25 + 9.26 +typedef struct ext2fs_struct_generic_bitmap_base *ext2fs_generic_bitmap; 9.27 +typedef struct ext2fs_struct_generic_bitmap_base *ext2fs_inode_bitmap; 9.28 +typedef struct ext2fs_struct_generic_bitmap_base *ext2fs_block_bitmap; 9.29 9.30 #define EXT2_FIRST_INODE(s) EXT2_FIRST_INO(s) 9.31 9.32 @@ -199,6 +204,9 @@ 9.33 #define EXT2_FLAG_IGNORE_CSUM_ERRORS 0x200000 9.34 #define EXT2_FLAG_SHARE_DUP 0x400000 9.35 #define EXT2_FLAG_IGNORE_SB_ERRORS 0x800000 9.36 +#define EXT2_FLAG_BBITMAP_TAIL_PROBLEM 0x1000000 9.37 +#define EXT2_FLAG_IBITMAP_TAIL_PROBLEM 0x2000000 9.38 +#define EXT2_FLAG_THREADS 0x4000000 9.39 9.40 /* 9.41 * Special flag in the ext2 inode i_flag field that means that this is 9.42 @@ -213,6 +221,12 @@ 9.43 #define EXT2_MKJOURNAL_LAZYINIT 0x0000002 /* don't zero journal inode before use*/ 9.44 #define EXT2_MKJOURNAL_NO_MNT_CHECK 0x0000004 /* don't check mount status */ 9.45 9.46 +/* 9.47 + * Normal journal area size to fast commit area size ratio. This is used to 9.48 + * set default size of fast commit area. 9.49 + */ 9.50 +#define EXT2_JOURNAL_TO_FC_BLKS_RATIO 64 9.51 + 9.52 struct blk_alloc_ctx; 9.53 struct opaque_ext2_group_desc; 9.54 9.55 @@ -302,6 +316,8 @@ 9.56 9.57 /* hashmap for SHA of data blocks */ 9.58 struct ext2fs_hashmap* block_sha_map; 9.59 + 9.60 + const struct ext2fs_nls_table *encoding; 9.61 }; 9.62 9.63 #if EXT2_FLAT_INCLUDES 9.64 @@ -376,10 +392,10 @@ 9.65 int flags; 9.66 }; 9.67 9.68 +#if 0 9.69 /* 9.70 * Flags for ext2fs_move_blocks 9.71 */ 9.72 -#if 0 9.73 #define EXT2_BMOVE_GET_DBLIST 0x0001 9.74 #define EXT2_BMOVE_DEBUG 0x0002 9.75 #endif 9.76 @@ -571,6 +587,16 @@ 9.77 #define BMAP_RET_UNINIT 0x0001 9.78 9.79 /* 9.80 + * Flags for ext2fs_read_inode2 9.81 + */ 9.82 +#define READ_INODE_NOCSUM 0x0001 9.83 + 9.84 +/* 9.85 + * Flags for ext2fs_write_inode2 9.86 + */ 9.87 +#define WRITE_INODE_NOCSUM 0x0001 9.88 + 9.89 +/* 9.90 * Flags for imager.c functions 9.91 */ 9.92 #define IMAGER_FLAG_INODEMAP 1 9.93 @@ -592,7 +618,9 @@ 9.94 EXT2_FEATURE_COMPAT_RESIZE_INODE|\ 9.95 EXT2_FEATURE_COMPAT_DIR_INDEX|\ 9.96 EXT2_FEATURE_COMPAT_EXT_ATTR|\ 9.97 - EXT4_FEATURE_COMPAT_SPARSE_SUPER2) 9.98 + EXT4_FEATURE_COMPAT_SPARSE_SUPER2|\ 9.99 + EXT4_FEATURE_COMPAT_FAST_COMMIT|\ 9.100 + EXT4_FEATURE_COMPAT_STABLE_INODES) 9.101 9.102 #ifdef CONFIG_MMP 9.103 #define EXT4_LIB_INCOMPAT_MMP EXT4_FEATURE_INCOMPAT_MMP 9.104 @@ -611,6 +639,7 @@ 9.105 EXT4_FEATURE_INCOMPAT_64BIT|\ 9.106 EXT4_FEATURE_INCOMPAT_INLINE_DATA|\ 9.107 EXT4_FEATURE_INCOMPAT_ENCRYPT|\ 9.108 + EXT4_FEATURE_INCOMPAT_CASEFOLD|\ 9.109 EXT4_FEATURE_INCOMPAT_CSUM_SEED|\ 9.110 EXT4_FEATURE_INCOMPAT_LARGEDIR) 9.111 9.112 @@ -666,6 +695,14 @@ 9.113 #define XATTR_CHANGED 2 9.114 9.115 /* 9.116 + * flags for ext2fs_rw_bitmaps() 9.117 + */ 9.118 +#define EXT2FS_BITMAPS_WRITE 0x0001 9.119 +#define EXT2FS_BITMAPS_BLOCK 0x0002 9.120 +#define EXT2FS_BITMAPS_INODE 0x0004 9.121 +#define EXT2FS_BITMAPS_VALID_FLAGS 0x0007 9.122 + 9.123 +/* 9.124 * function prototypes 9.125 */ 9.126 static inline int ext2fs_has_group_desc_csum(ext2_filsys fs) 9.127 @@ -815,10 +852,6 @@ 9.128 extern void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap); 9.129 extern errcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src, 9.130 ext2fs_generic_bitmap *dest); 9.131 -extern errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs); 9.132 -extern errcode_t ext2fs_write_block_bitmap (ext2_filsys fs); 9.133 -extern errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs); 9.134 -extern errcode_t ext2fs_read_block_bitmap(ext2_filsys fs); 9.135 extern errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs, 9.136 const char *descr, 9.137 ext2fs_block_bitmap *ret); 9.138 @@ -837,8 +870,6 @@ 9.139 blk64_t end, blk64_t *oend); 9.140 extern void ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap); 9.141 extern void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap); 9.142 -extern errcode_t ext2fs_read_bitmaps(ext2_filsys fs); 9.143 -extern errcode_t ext2fs_write_bitmaps(ext2_filsys fs); 9.144 extern errcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end, 9.145 ext2fs_inode_bitmap bmap); 9.146 extern errcode_t ext2fs_resize_inode_bitmap2(__u64 new_end, 9.147 @@ -888,7 +919,9 @@ 9.148 extern blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs, 9.149 struct ext2_inode *inode); 9.150 extern blk64_t ext2fs_inode_i_blocks(ext2_filsys fs, 9.151 - struct ext2_inode *inode); 9.152 + struct ext2_inode *inode); 9.153 +extern blk64_t ext2fs_get_stat_i_blocks(ext2_filsys fs, 9.154 + struct ext2_inode *inode); 9.155 extern blk64_t ext2fs_blocks_count(struct ext2_super_block *super); 9.156 extern void ext2fs_blocks_count_set(struct ext2_super_block *super, 9.157 blk64_t blk); 9.158 @@ -1060,6 +1093,9 @@ 9.159 struct ext2_dir_entry *dirent, 9.160 struct ext2_dx_countlimit **cc, 9.161 int *offset); 9.162 +extern errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum, 9.163 + struct ext2_dir_entry *dirent, 9.164 + __u32 *crc, struct ext2_dx_tail **ret_t); 9.165 extern errcode_t ext2fs_extent_block_csum_set(ext2_filsys fs, 9.166 ext2_ino_t inum, 9.167 struct ext3_extent_header *eh); 9.168 @@ -1168,6 +1204,12 @@ 9.169 ext2_dirhash_t *ret_hash, 9.170 ext2_dirhash_t *ret_minor_hash); 9.171 9.172 +extern errcode_t ext2fs_dirhash2(int version, const char *name, int len, 9.173 + const struct ext2fs_nls_table *charset, 9.174 + int hash_flags, 9.175 + const __u32 *seed, 9.176 + ext2_dirhash_t *ret_hash, 9.177 + ext2_dirhash_t *ret_minor_hash); 9.178 9.179 /* dir_iterate.c */ 9.180 extern errcode_t ext2fs_get_rec_len(ext2_filsys fs, 9.181 @@ -1290,7 +1332,13 @@ 9.182 extern errcode_t ext2fs_extent_goto2(ext2_extent_handle_t handle, 9.183 int leaf_level, blk64_t blk); 9.184 extern errcode_t ext2fs_extent_fix_parents(ext2_extent_handle_t handle); 9.185 -size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle); 9.186 +extern size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle); 9.187 +extern errcode_t ext2fs_fix_extents_checksums(ext2_filsys fs, ext2_ino_t ino, 9.188 + struct ext2_inode *inode); 9.189 +extern errcode_t ext2fs_count_blocks(ext2_filsys fs, ext2_ino_t ino, 9.190 + struct ext2_inode *inode, blk64_t *ret_count); 9.191 +extern errcode_t ext2fs_decode_extent(struct ext2fs_extent *to, void *from, 9.192 + int len); 9.193 9.194 /* fallocate.c */ 9.195 #define EXT2_FALLOCATE_ZERO_BLOCKS (0x1) 9.196 @@ -1409,6 +1457,8 @@ 9.197 void *in); 9.198 errcode_t ext2fs_convert_subcluster_bitmap(ext2_filsys fs, 9.199 ext2fs_block_bitmap *bitmap); 9.200 +errcode_t ext2fs_count_used_clusters(ext2_filsys fs, blk64_t start, 9.201 + blk64_t end, blk64_t *out); 9.202 9.203 /* get_num_dirs.c */ 9.204 extern errcode_t ext2fs_get_num_dirs(ext2_filsys fs, ext2_ino_t *ret_num_dirs); 9.205 @@ -1447,6 +1497,7 @@ 9.206 extern errcode_t ext2fs_initialize(const char *name, int flags, 9.207 struct ext2_super_block *param, 9.208 io_manager manager, ext2_filsys *ret_fs); 9.209 +extern errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs, int super_only); 9.210 9.211 /* icount.c */ 9.212 extern void ext2fs_free_icount(ext2_icount_t icount); 9.213 @@ -1514,13 +1565,19 @@ 9.214 extern errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino, 9.215 struct ext2_inode * inode, 9.216 int bufsize); 9.217 -extern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino, 9.218 +extern errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino, 9.219 struct ext2_inode * inode); 9.220 +extern errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino, 9.221 + struct ext2_inode * inode, 9.222 + int bufsize, int flags); 9.223 extern errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino, 9.224 struct ext2_inode * inode, 9.225 int bufsize); 9.226 extern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino, 9.227 struct ext2_inode * inode); 9.228 +extern errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino, 9.229 + struct ext2_inode * inode, 9.230 + int bufsize, int flags); 9.231 extern errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino, 9.232 struct ext2_inode * inode); 9.233 extern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks); 9.234 @@ -1568,11 +1625,25 @@ 9.235 extern errcode_t ext2fs_new_dir_inline_data(ext2_filsys fs, ext2_ino_t dir_ino, 9.236 ext2_ino_t parent_ino, __u32 *iblock); 9.237 9.238 +/* nls_utf8.c */ 9.239 +extern const struct ext2fs_nls_table *ext2fs_load_nls_table(int encoding); 9.240 +extern int ext2fs_check_encoded_name(const struct ext2fs_nls_table *table, 9.241 + char *s, size_t len, char **pos); 9.242 +extern int ext2fs_casefold_cmp(const struct ext2fs_nls_table *table, 9.243 + const unsigned char *str1, size_t len1, 9.244 + const unsigned char *str2, size_t len2); 9.245 + 9.246 /* mkdir.c */ 9.247 extern errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, 9.248 const char *name); 9.249 9.250 /* mkjournal.c */ 9.251 +struct ext2fs_journal_params { 9.252 + blk_t num_journal_blocks; 9.253 + blk_t num_fc_blocks; 9.254 +}; 9.255 +extern errcode_t ext2fs_get_journal_params( 9.256 + struct ext2fs_journal_params *params, ext2_filsys fs); 9.257 extern errcode_t ext2fs_zero_blocks(ext2_filsys fs, blk_t blk, int num, 9.258 blk_t *ret_blk, int *ret_count); 9.259 extern errcode_t ext2fs_zero_blocks2(ext2_filsys fs, blk64_t blk, int num, 9.260 @@ -1580,12 +1651,18 @@ 9.261 extern errcode_t ext2fs_create_journal_superblock(ext2_filsys fs, 9.262 __u32 num_blocks, int flags, 9.263 char **ret_jsb); 9.264 +extern errcode_t ext2fs_create_journal_superblock2(ext2_filsys fs, 9.265 + struct ext2fs_journal_params *params, 9.266 + int flags, char **ret_jsb); 9.267 extern errcode_t ext2fs_add_journal_device(ext2_filsys fs, 9.268 ext2_filsys journal_dev); 9.269 extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, 9.270 int flags); 9.271 extern errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks, 9.272 blk64_t goal, int flags); 9.273 +extern errcode_t ext2fs_add_journal_inode3(ext2_filsys fs, 9.274 + struct ext2fs_journal_params *params, 9.275 + blk64_t goal, int flags); 9.276 extern int ext2fs_default_journal_size(__u64 num_blocks); 9.277 extern int ext2fs_journal_sb_start(int blocksize); 9.278 9.279 @@ -1615,6 +1692,10 @@ 9.280 char **name); 9.281 9.282 /* link.c */ 9.283 +#define EXT2FS_UNLINK_FORCE 0x1 /* Forcefully unlink even if 9.284 + * the inode number doesn't 9.285 + * match the dirent 9.286 + */ 9.287 errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name, 9.288 ext2_ino_t ino, int flags); 9.289 errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, const char *name, 9.290 @@ -1656,6 +1737,15 @@ 9.291 /* res_gdt.c */ 9.292 extern errcode_t ext2fs_create_resize_inode(ext2_filsys fs); 9.293 9.294 +/* rw_bitmaps.c */ 9.295 +extern errcode_t ext2fs_rw_bitmaps(ext2_filsys fs, int flags, int num_threads); 9.296 +extern errcode_t ext2fs_read_bitmaps(ext2_filsys fs); 9.297 +extern errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs); 9.298 +extern errcode_t ext2fs_read_block_bitmap(ext2_filsys fs); 9.299 +extern errcode_t ext2fs_write_bitmaps(ext2_filsys fs); 9.300 +extern errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs); 9.301 +extern errcode_t ext2fs_write_block_bitmap (ext2_filsys fs); 9.302 + 9.303 /*sha256.c */ 9.304 #define EXT2FS_SHA256_LENGTH 32 9.305 #if 0 9.306 @@ -1723,6 +1813,8 @@ 9.307 extern errcode_t ext2fs_free_mem(void *ptr); 9.308 extern errcode_t ext2fs_resize_mem(unsigned long old_size, 9.309 unsigned long size, void *ptr); 9.310 +extern errcode_t ext2fs_resize_array(unsigned long old_count, unsigned long count, 9.311 + unsigned long size, void *ptr); 9.312 extern void ext2fs_mark_super_dirty(ext2_filsys fs); 9.313 extern void ext2fs_mark_changed(ext2_filsys fs); 9.314 extern int ext2fs_test_changed(ext2_filsys fs); 9.315 @@ -1800,7 +1892,8 @@ 9.316 return 0; 9.317 } 9.318 9.319 -_INLINE_ errcode_t ext2fs_get_array(unsigned long count, unsigned long size, void *ptr) 9.320 +_INLINE_ errcode_t ext2fs_get_array(unsigned long count, unsigned long size, 9.321 + void *ptr) 9.322 { 9.323 if (count && (~0UL)/count < size) 9.324 return EXT2_ET_NO_MEMORY; 9.325 @@ -1810,15 +1903,10 @@ 9.326 _INLINE_ errcode_t ext2fs_get_arrayzero(unsigned long count, 9.327 unsigned long size, void *ptr) 9.328 { 9.329 - void *pp; 9.330 - 9.331 if (count && (~0UL)/count < size) 9.332 return EXT2_ET_NO_MEMORY; 9.333 - pp = calloc(count, size); 9.334 - if (!pp) 9.335 - return EXT2_ET_NO_MEMORY; 9.336 - memcpy(ptr, &pp, sizeof(pp)); 9.337 - return 0; 9.338 + 9.339 + return ext2fs_get_memzero((size_t)count * size, ptr); 9.340 } 9.341 9.342 /* 9.343 @@ -1852,6 +1940,36 @@ 9.344 memcpy(ptr, &p, sizeof(p)); 9.345 return 0; 9.346 } 9.347 + 9.348 +/* 9.349 + * Resize array. The 'ptr' arg must point to a pointer. 9.350 + */ 9.351 +_INLINE_ errcode_t ext2fs_resize_array(unsigned long size, 9.352 + unsigned long old_count, 9.353 + unsigned long count, void *ptr) 9.354 +{ 9.355 + unsigned long old_size; 9.356 + errcode_t retval; 9.357 + 9.358 + if (count && (~0UL)/count < size) 9.359 + return EXT2_ET_NO_MEMORY; 9.360 + 9.361 + size *= count; 9.362 + old_size = size * old_count; 9.363 + retval = ext2fs_resize_mem(old_size, size, ptr); 9.364 + if (retval) 9.365 + return retval; 9.366 + 9.367 + if (size > old_size) { 9.368 + void *p; 9.369 + 9.370 + memcpy(&p, ptr, sizeof(p)); 9.371 + memset((char *)p + old_size, 0, size - old_size); 9.372 + memcpy(ptr, &p, sizeof(p)); 9.373 + } 9.374 + 9.375 + return 0; 9.376 +} 9.377 #endif /* Custom memory routines */ 9.378 9.379 /* 9.380 @@ -1973,7 +2091,13 @@ 9.381 9.382 _INLINE_ int ext2fs_htree_intnode_maxrecs(ext2_filsys fs, int blocks) 9.383 { 9.384 - return blocks * ((fs->blocksize - 8) / sizeof(struct ext2_dx_entry)); 9.385 + int csum_size = 0; 9.386 + 9.387 + if ((EXT2_SB(fs->super)->s_feature_ro_compat & 9.388 + EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) != 0) 9.389 + csum_size = sizeof(struct ext2_dx_tail); 9.390 + return blocks * ((fs->blocksize - (8 + csum_size)) / 9.391 + sizeof(struct ext2_dx_entry)); 9.392 } 9.393 9.394 /*
10.1 --- a/libext2fs/include/libext2fs/ext2fs/ext2fsP.h Sat Oct 02 23:57:02 2021 +0200 10.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 10.3 @@ -1,191 +0,0 @@ 10.4 -/* 10.5 - * ext2fsP.h --- private header file for ext2 library 10.6 - * 10.7 - * Copyright (C) 1997 Theodore Ts'o. 10.8 - * 10.9 - * %Begin-Header% 10.10 - * This file may be redistributed under the terms of the GNU Library 10.11 - * General Public License, version 2. 10.12 - * %End-Header% 10.13 - */ 10.14 - 10.15 -#if HAVE_SYS_STAT_H 10.16 -#include <sys/stat.h> 10.17 -#endif 10.18 - 10.19 -#include "ext2fs.h" 10.20 - 10.21 -#define EXT2FS_MAX_NESTED_LINKS 8 10.22 - 10.23 -static inline int ext2fsP_is_disk_device(mode_t mode) 10.24 -{ 10.25 -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) 10.26 - return S_ISBLK(mode) || S_ISCHR(mode); 10.27 -#else 10.28 - return S_ISBLK(mode); 10.29 -#endif 10.30 -} 10.31 - 10.32 -/* 10.33 - * Badblocks list 10.34 - */ 10.35 -struct ext2_struct_u32_list { 10.36 - int magic; 10.37 - int num; 10.38 - int size; 10.39 - __u32 *list; 10.40 - int badblocks_flags; 10.41 -}; 10.42 - 10.43 -struct ext2_struct_u32_iterate { 10.44 - int magic; 10.45 - ext2_u32_list bb; 10.46 - int ptr; 10.47 -}; 10.48 - 10.49 - 10.50 -/* 10.51 - * Directory block iterator definition 10.52 - */ 10.53 -struct ext2_struct_dblist { 10.54 - int magic; 10.55 - ext2_filsys fs; 10.56 - unsigned long long size; 10.57 - unsigned long long count; 10.58 - int sorted; 10.59 - struct ext2_db_entry2 * list; 10.60 -}; 10.61 - 10.62 -/* 10.63 - * For directory iterators 10.64 - */ 10.65 -struct dir_context { 10.66 - ext2_ino_t dir; 10.67 - int flags; 10.68 - char *buf; 10.69 - unsigned int buflen; 10.70 - int (*func)(ext2_ino_t dir, 10.71 - int entry, 10.72 - struct ext2_dir_entry *dirent, 10.73 - int offset, 10.74 - int blocksize, 10.75 - char *buf, 10.76 - void *priv_data); 10.77 - void *priv_data; 10.78 - errcode_t errcode; 10.79 -}; 10.80 - 10.81 -/* 10.82 - * Inode cache structure 10.83 - */ 10.84 -struct ext2_inode_cache { 10.85 - void * buffer; 10.86 - blk64_t buffer_blk; 10.87 - int cache_last; 10.88 - unsigned int cache_size; 10.89 - int refcount; 10.90 - struct ext2_inode_cache_ent *cache; 10.91 -}; 10.92 - 10.93 -struct ext2_inode_cache_ent { 10.94 - ext2_ino_t ino; 10.95 - struct ext2_inode *inode; 10.96 -}; 10.97 - 10.98 -/* Function prototypes */ 10.99 - 10.100 -extern int ext2fs_process_dir_block(ext2_filsys fs, 10.101 - blk64_t *blocknr, 10.102 - e2_blkcnt_t blockcnt, 10.103 - blk64_t ref_block, 10.104 - int ref_offset, 10.105 - void *priv_data); 10.106 - 10.107 -extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino); 10.108 -extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino); 10.109 -extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs, 10.110 - ext2_ino_t ino, 10.111 - void *priv_data); 10.112 - 10.113 -/* Generic numeric progress meter */ 10.114 - 10.115 -struct ext2fs_numeric_progress_struct { 10.116 - __u64 max; 10.117 - int log_max; 10.118 - int skip_progress; 10.119 -}; 10.120 - 10.121 -/* 10.122 - * progress callback functions 10.123 - */ 10.124 -struct ext2fs_progress_ops { 10.125 - void (*init)(ext2_filsys fs, 10.126 - struct ext2fs_numeric_progress_struct * progress, 10.127 - const char *label, __u64 max); 10.128 - void (*update)(ext2_filsys fs, 10.129 - struct ext2fs_numeric_progress_struct * progress, 10.130 - __u64 val); 10.131 - void (*close)(ext2_filsys fs, 10.132 - struct ext2fs_numeric_progress_struct * progress, 10.133 - const char *message); 10.134 -}; 10.135 - 10.136 -extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops; 10.137 - 10.138 -extern void ext2fs_numeric_progress_init(ext2_filsys fs, 10.139 - struct ext2fs_numeric_progress_struct * progress, 10.140 - const char *label, __u64 max); 10.141 -extern void ext2fs_numeric_progress_update(ext2_filsys fs, 10.142 - struct ext2fs_numeric_progress_struct * progress, 10.143 - __u64 val); 10.144 -extern void ext2fs_numeric_progress_close(ext2_filsys fs, 10.145 - struct ext2fs_numeric_progress_struct * progress, 10.146 - const char *message); 10.147 - 10.148 -/* 10.149 - * 64-bit bitmap support 10.150 - */ 10.151 - 10.152 -extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic, 10.153 - int type, __u64 start, __u64 end, 10.154 - __u64 real_end, 10.155 - const char * description, 10.156 - ext2fs_generic_bitmap *bmap); 10.157 - 10.158 -extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap); 10.159 - 10.160 -extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src, 10.161 - ext2fs_generic_bitmap *dest); 10.162 - 10.163 -extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap, 10.164 - __u64 new_end, 10.165 - __u64 new_real_end); 10.166 -extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap, 10.167 - errcode_t neq, 10.168 - __u64 end, __u64 *oend); 10.169 -extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap, 10.170 - __u64 arg); 10.171 -extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap, 10.172 - __u64 arg); 10.173 -extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, 10.174 - __u64 arg); 10.175 -extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap, 10.176 - __u64 start, unsigned int num, 10.177 - void *in); 10.178 -extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap, 10.179 - __u64 start, unsigned int num, 10.180 - void *out); 10.181 -extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func); 10.182 - 10.183 -extern int ext2fs_mem_is_zero(const char *mem, size_t len); 10.184 - 10.185 -extern int ext2fs_file_block_offset_too_big(ext2_filsys fs, 10.186 - struct ext2_inode *inode, 10.187 - blk64_t offset); 10.188 - 10.189 -/* atexit support */ 10.190 -typedef void (*ext2_exit_fn)(void *); 10.191 -errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data); 10.192 -errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data); 10.193 - 10.194 -#define EXT2FS_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2*!!(cond)]))
11.1 --- a/libext2fs/include/libext2fs/ext2fs/hashmap.h Sat Oct 02 23:57:02 2021 +0200 11.2 +++ b/libext2fs/include/libext2fs/ext2fs/hashmap.h Sat Oct 09 23:28:01 2021 +0200 11.3 @@ -13,27 +13,15 @@ 11.4 #endif 11.5 #endif 11.6 11.7 -struct ext2fs_hashmap { 11.8 - uint32_t size; 11.9 - uint32_t(*hash)(const void *key, size_t len); 11.10 - void(*free)(void*); 11.11 - struct ext2fs_hashmap_entry *first; 11.12 - struct ext2fs_hashmap_entry *last; 11.13 - struct ext2fs_hashmap_entry { 11.14 - void *data; 11.15 - const void *key; 11.16 - size_t key_len; 11.17 - struct ext2fs_hashmap_entry *next; 11.18 - struct ext2fs_hashmap_entry *list_next; 11.19 - struct ext2fs_hashmap_entry *list_prev; 11.20 -#if __GNUC_PREREQ (4, 8) 11.21 -#pragma GCC diagnostic push 11.22 -#pragma GCC diagnostic ignored "-Wpedantic" 11.23 -#endif 11.24 - } *entries[0]; 11.25 -#if __GNUC_PREREQ (4, 8) 11.26 -#pragma GCC diagnostic pop 11.27 -#endif 11.28 +struct ext2fs_hashmap; 11.29 + 11.30 +struct ext2fs_hashmap_entry { 11.31 + void *data; 11.32 + const void *key; 11.33 + size_t key_len; 11.34 + struct ext2fs_hashmap_entry *next; 11.35 + struct ext2fs_hashmap_entry *list_next; 11.36 + struct ext2fs_hashmap_entry *list_prev; 11.37 }; 11.38 11.39 struct ext2fs_hashmap *ext2fs_hashmap_create(
12.1 --- a/libext2fs/include/libext2fs/ext2fs/kernel-jbd.h Sat Oct 02 23:57:02 2021 +0200 12.2 +++ b/libext2fs/include/libext2fs/ext2fs/kernel-jbd.h Sat Oct 09 23:28:01 2021 +0200 12.3 @@ -24,7 +24,7 @@ 12.4 #define __FUNCTION__ "" 12.5 #endif 12.6 12.7 -#define journal_oom_retry 1 12.8 +#define journal_oom_retry 0 12.9 12.10 #ifdef __STDC__ 12.11 #ifdef CONFIG_JBD_DEBUG 12.12 @@ -73,13 +73,14 @@ 12.13 #define jbd_rep_kmalloc(size, flags) \ 12.14 __jbd_kmalloc(__FUNCTION__, (size), (flags), 1) 12.15 12.16 -#define JFS_MIN_JOURNAL_BLOCKS 1024 12.17 +#define JBD2_MIN_JOURNAL_BLOCKS 1024 12.18 +#define JBD2_DEFAULT_FAST_COMMIT_BLOCKS 256 12.19 12.20 /* 12.21 * Internal structures used by the logging mechanism: 12.22 */ 12.23 12.24 -#define JFS_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */ 12.25 +#define JBD2_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */ 12.26 12.27 /* 12.28 * On-disk structures 12.29 @@ -89,20 +90,21 @@ 12.30 * Descriptor block types: 12.31 */ 12.32 12.33 -#define JFS_DESCRIPTOR_BLOCK 1 12.34 -#define JFS_COMMIT_BLOCK 2 12.35 -#define JFS_SUPERBLOCK_V1 3 12.36 -#define JFS_SUPERBLOCK_V2 4 12.37 -#define JFS_REVOKE_BLOCK 5 12.38 +#define JBD2_DESCRIPTOR_BLOCK 1 12.39 +#define JBD2_COMMIT_BLOCK 2 12.40 +#define JBD2_SUPERBLOCK_V1 3 12.41 +#define JBD2_SUPERBLOCK_V2 4 12.42 +#define JBD2_REVOKE_BLOCK 5 12.43 +#define JBD2_FC_BLOCK 6 12.44 12.45 /* 12.46 * Standard header for all descriptor blocks: 12.47 */ 12.48 typedef struct journal_header_s 12.49 { 12.50 - __u32 h_magic; 12.51 - __u32 h_blocktype; 12.52 - __u32 h_sequence; 12.53 + __be32 h_magic; 12.54 + __be32 h_blocktype; 12.55 + __be32 h_sequence; 12.56 } journal_header_t; 12.57 12.58 /* 12.59 @@ -135,15 +137,15 @@ 12.60 * Checksum v1, v2, and v3 are mutually exclusive features. 12.61 */ 12.62 struct commit_header { 12.63 - __u32 h_magic; 12.64 - __u32 h_blocktype; 12.65 - __u32 h_sequence; 12.66 + __be32 h_magic; 12.67 + __be32 h_blocktype; 12.68 + __be32 h_sequence; 12.69 unsigned char h_chksum_type; 12.70 unsigned char h_chksum_size; 12.71 unsigned char h_padding[2]; 12.72 - __u32 h_chksum[JBD2_CHECKSUM_BYTES]; 12.73 - __u64 h_commit_sec; 12.74 - __u32 h_commit_nsec; 12.75 + __be32 h_chksum[JBD2_CHECKSUM_BYTES]; 12.76 + __be64 h_commit_sec; 12.77 + __be32 h_commit_nsec; 12.78 }; 12.79 12.80 /* 12.81 @@ -151,22 +153,22 @@ 12.82 */ 12.83 typedef struct journal_block_tag3_s 12.84 { 12.85 - __u32 t_blocknr; /* The on-disk block number */ 12.86 - __u32 t_flags; /* See below */ 12.87 - __u32 t_blocknr_high; /* most-significant high 32bits. */ 12.88 - __u32 t_checksum; /* crc32c(uuid+seq+block) */ 12.89 + __be32 t_blocknr; /* The on-disk block number */ 12.90 + __be32 t_flags; /* See below */ 12.91 + __be32 t_blocknr_high; /* most-significant high 32bits. */ 12.92 + __be32 t_checksum; /* crc32c(uuid+seq+block) */ 12.93 } journal_block_tag3_t; 12.94 12.95 typedef struct journal_block_tag_s 12.96 { 12.97 - __u32 t_blocknr; /* The on-disk block number */ 12.98 - __u16 t_checksum; /* truncated crc32c(uuid+seq+block) */ 12.99 - __u16 t_flags; /* See below */ 12.100 - __u32 t_blocknr_high; /* most-significant high 32bits. */ 12.101 + __be32 t_blocknr; /* The on-disk block number */ 12.102 + __be16 t_checksum; /* truncated crc32c(uuid+seq+block) */ 12.103 + __be16 t_flags; /* See below */ 12.104 + __be32 t_blocknr_high; /* most-significant high 32bits. */ 12.105 } journal_block_tag_t; 12.106 12.107 -/* Tail of descriptor block, for checksumming */ 12.108 -struct journal_block_tail { 12.109 +/* Tail of descriptor or revoke block, for checksumming */ 12.110 +struct jbd2_journal_block_tail { 12.111 __be32 t_checksum; 12.112 }; 12.113 12.114 @@ -177,24 +179,19 @@ 12.115 typedef struct journal_revoke_header_s 12.116 { 12.117 journal_header_t r_header; 12.118 - int r_count; /* Count of bytes used in the block */ 12.119 -} journal_revoke_header_t; 12.120 - 12.121 -/* Tail of revoke block, for checksumming */ 12.122 -struct journal_revoke_tail { 12.123 - __be32 r_checksum; 12.124 -}; 12.125 + __be32 r_count; /* Count of bytes used in the block */ 12.126 +} jbd2_journal_revoke_header_t; 12.127 12.128 /* Definitions for the journal tag flags word: */ 12.129 -#define JFS_FLAG_ESCAPE 1 /* on-disk block is escaped */ 12.130 -#define JFS_FLAG_SAME_UUID 2 /* block has same uuid as previous */ 12.131 -#define JFS_FLAG_DELETED 4 /* block deleted by this transaction */ 12.132 -#define JFS_FLAG_LAST_TAG 8 /* last tag in this descriptor block */ 12.133 +#define JBD2_FLAG_ESCAPE 1 /* on-disk block is escaped */ 12.134 +#define JBD2_FLAG_SAME_UUID 2 /* block has same uuid as previous */ 12.135 +#define JBD2_FLAG_DELETED 4 /* block deleted by this transaction */ 12.136 +#define JBD2_FLAG_LAST_TAG 8 /* last tag in this descriptor block */ 12.137 12.138 12.139 #define UUID_SIZE 16 12.140 -#define JFS_USERS_MAX 48 12.141 -#define JFS_USERS_SIZE (UUID_SIZE * JFS_USERS_MAX) 12.142 +#define JBD2_USERS_MAX 48 12.143 +#define JBD2_USERS_SIZE (UUID_SIZE * JBD2_USERS_MAX) 12.144 /* 12.145 * The journal superblock. All fields are in big-endian byte order. 12.146 */ 12.147 @@ -205,14 +202,14 @@ 12.148 12.149 /* 0x000C */ 12.150 /* Static information describing the journal */ 12.151 - __u32 s_blocksize; /* journal device blocksize */ 12.152 - __u32 s_maxlen; /* total blocks in journal file */ 12.153 - __u32 s_first; /* first block of log information */ 12.154 + __be32 s_blocksize; /* journal device blocksize */ 12.155 + __be32 s_maxlen; /* total blocks in journal file */ 12.156 + __be32 s_first; /* first block of log information */ 12.157 12.158 /* 0x0018 */ 12.159 /* Dynamic information describing the current state of the log */ 12.160 - __u32 s_sequence; /* first commit ID expected in log */ 12.161 - __u32 s_start; /* blocknr of start of log */ 12.162 + __be32 s_sequence; /* first commit ID expected in log */ 12.163 + __be32 s_start; /* blocknr of start of log */ 12.164 12.165 /* 0x0020 */ 12.166 /* Error value, as set by journal_abort(). */ 12.167 @@ -220,63 +217,68 @@ 12.168 12.169 /* 0x0024 */ 12.170 /* Remaining fields are only valid in a version-2 superblock */ 12.171 - __u32 s_feature_compat; /* compatible feature set */ 12.172 - __u32 s_feature_incompat; /* incompatible feature set */ 12.173 - __u32 s_feature_ro_compat; /* readonly-compatible feature set */ 12.174 + __be32 s_feature_compat; /* compatible feature set */ 12.175 + __be32 s_feature_incompat; /* incompatible feature set */ 12.176 + __be32 s_feature_ro_compat; /* readonly-compatible feature set */ 12.177 /* 0x0030 */ 12.178 __u8 s_uuid[16]; /* 128-bit uuid for journal */ 12.179 12.180 /* 0x0040 */ 12.181 - __u32 s_nr_users; /* Nr of filesystems sharing log */ 12.182 + __be32 s_nr_users; /* Nr of filesystems sharing log */ 12.183 12.184 - __u32 s_dynsuper; /* Blocknr of dynamic superblock copy*/ 12.185 + __be32 s_dynsuper; /* Blocknr of dynamic superblock copy*/ 12.186 12.187 /* 0x0048 */ 12.188 - __u32 s_max_transaction; /* Limit of journal blocks per trans.*/ 12.189 - __u32 s_max_trans_data; /* Limit of data blocks per trans. */ 12.190 + __be32 s_max_transaction; /* Limit of journal blocks per trans.*/ 12.191 + __be32 s_max_trans_data; /* Limit of data blocks per trans. */ 12.192 12.193 /* 0x0050 */ 12.194 __u8 s_checksum_type; /* checksum type */ 12.195 __u8 s_padding2[3]; 12.196 - __u32 s_padding[42]; 12.197 - __u32 s_checksum; /* crc32c(superblock) */ 12.198 +/* 0x0054 */ 12.199 + __be32 s_num_fc_blks; /* Number of fast commit blocks */ 12.200 +/* 0x0058 */ 12.201 + __be32 s_padding[41]; 12.202 + __be32 s_checksum; /* crc32c(superblock) */ 12.203 12.204 /* 0x0100 */ 12.205 - __u8 s_users[JFS_USERS_SIZE]; /* ids of all fs'es sharing the log */ 12.206 + __u8 s_users[JBD2_USERS_SIZE]; /* ids of all fs'es sharing the log */ 12.207 12.208 /* 0x0400 */ 12.209 } journal_superblock_t; 12.210 12.211 -#define JFS_HAS_COMPAT_FEATURE(j,mask) \ 12.212 +#define JBD2_HAS_COMPAT_FEATURE(j,mask) \ 12.213 ((j)->j_format_version >= 2 && \ 12.214 ((j)->j_superblock->s_feature_compat & ext2fs_cpu_to_be32((mask)))) 12.215 -#define JFS_HAS_RO_COMPAT_FEATURE(j,mask) \ 12.216 +#define JBD2_HAS_RO_COMPAT_FEATURE(j,mask) \ 12.217 ((j)->j_format_version >= 2 && \ 12.218 ((j)->j_superblock->s_feature_ro_compat & ext2fs_cpu_to_be32((mask)))) 12.219 -#define JFS_HAS_INCOMPAT_FEATURE(j,mask) \ 12.220 +#define JBD2_HAS_INCOMPAT_FEATURE(j,mask) \ 12.221 ((j)->j_format_version >= 2 && \ 12.222 ((j)->j_superblock->s_feature_incompat & ext2fs_cpu_to_be32((mask)))) 12.223 12.224 -#define JFS_FEATURE_COMPAT_CHECKSUM 0x00000001 12.225 +#define JBD2_FEATURE_COMPAT_CHECKSUM 0x00000001 12.226 12.227 -#define JFS_FEATURE_INCOMPAT_REVOKE 0x00000001 12.228 -#define JFS_FEATURE_INCOMPAT_64BIT 0x00000002 12.229 -#define JFS_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004 12.230 -#define JFS_FEATURE_INCOMPAT_CSUM_V2 0x00000008 12.231 -#define JFS_FEATURE_INCOMPAT_CSUM_V3 0x00000010 12.232 +#define JBD2_FEATURE_INCOMPAT_REVOKE 0x00000001 12.233 +#define JBD2_FEATURE_INCOMPAT_64BIT 0x00000002 12.234 +#define JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004 12.235 +#define JBD2_FEATURE_INCOMPAT_CSUM_V2 0x00000008 12.236 +#define JBD2_FEATURE_INCOMPAT_CSUM_V3 0x00000010 12.237 +#define JBD2_FEATURE_INCOMPAT_FAST_COMMIT 0x00000020 12.238 12.239 /* Features known to this kernel version: */ 12.240 -#define JFS_KNOWN_COMPAT_FEATURES 0 12.241 -#define JFS_KNOWN_ROCOMPAT_FEATURES 0 12.242 -#define JFS_KNOWN_INCOMPAT_FEATURES (JFS_FEATURE_INCOMPAT_REVOKE|\ 12.243 - JFS_FEATURE_INCOMPAT_ASYNC_COMMIT|\ 12.244 - JFS_FEATURE_INCOMPAT_64BIT|\ 12.245 - JFS_FEATURE_INCOMPAT_CSUM_V2|\ 12.246 - JFS_FEATURE_INCOMPAT_CSUM_V3) 12.247 +#define JBD2_KNOWN_COMPAT_FEATURES 0 12.248 +#define JBD2_KNOWN_ROCOMPAT_FEATURES 0 12.249 +#define JBD2_KNOWN_INCOMPAT_FEATURES (JBD2_FEATURE_INCOMPAT_REVOKE|\ 12.250 + JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT| \ 12.251 + JBD2_FEATURE_INCOMPAT_64BIT|\ 12.252 + JBD2_FEATURE_INCOMPAT_CSUM_V2| \ 12.253 + JBD2_FEATURE_INCOMPAT_CSUM_V3 | \ 12.254 + JBD2_FEATURE_INCOMPAT_FAST_COMMIT) 12.255 12.256 #ifdef NO_INLINE_FUNCS 12.257 extern size_t journal_tag_bytes(journal_t *journal); 12.258 -extern int journal_has_csum_v2or3(journal_t *journal); 12.259 +extern int jbd2_journal_has_csum_v2or3(journal_t *journal); 12.260 extern int tid_gt(tid_t x, tid_t y) EXT2FS_ATTR((unused)); 12.261 extern int tid_geq(tid_t x, tid_t y) EXT2FS_ATTR((unused)); 12.262 #endif 12.263 @@ -301,94 +303,95 @@ 12.264 #endif /* INCLUDE_INLINE_FUNCS */ 12.265 12.266 /* journal feature predicate functions */ 12.267 -#define JFS_FEATURE_COMPAT_FUNCS(name, flagname) \ 12.268 -_INLINE_ int jfs_has_feature_##name(journal_t *j); \ 12.269 -_INLINE_ int jfs_has_feature_##name(journal_t *j) \ 12.270 +#define JBD2_FEATURE_COMPAT_FUNCS(name, flagname) \ 12.271 +_INLINE_ int jbd2_has_feature_##name(journal_t *j); \ 12.272 +_INLINE_ int jbd2_has_feature_##name(journal_t *j) \ 12.273 { \ 12.274 return ((j)->j_format_version >= 2 && \ 12.275 ((j)->j_superblock->s_feature_compat & \ 12.276 - ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname)) != 0); \ 12.277 + ext2fs_cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname)) != 0); \ 12.278 } \ 12.279 -_INLINE_ void jfs_set_feature_##name(journal_t *j); \ 12.280 -_INLINE_ void jfs_set_feature_##name(journal_t *j) \ 12.281 +_INLINE_ void jbd2_set_feature_##name(journal_t *j); \ 12.282 +_INLINE_ void jbd2_set_feature_##name(journal_t *j) \ 12.283 { \ 12.284 (j)->j_superblock->s_feature_compat |= \ 12.285 - ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname); \ 12.286 + ext2fs_cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname); \ 12.287 } \ 12.288 -_INLINE_ void jfs_clear_feature_##name(journal_t *j); \ 12.289 -_INLINE_ void jfs_clear_feature_##name(journal_t *j) \ 12.290 +_INLINE_ void jbd2_clear_feature_##name(journal_t *j); \ 12.291 +_INLINE_ void jbd2_clear_feature_##name(journal_t *j) \ 12.292 { \ 12.293 (j)->j_superblock->s_feature_compat &= \ 12.294 - ~ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname); \ 12.295 + ~ext2fs_cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname); \ 12.296 } 12.297 12.298 -#define JFS_FEATURE_RO_COMPAT_FUNCS(name, flagname) \ 12.299 -_INLINE_ int jfs_has_feature_##name(journal_t *j); \ 12.300 -_INLINE_ int jfs_has_feature_##name(journal_t *j) \ 12.301 +#define JBD2_FEATURE_RO_COMPAT_FUNCS(name, flagname) \ 12.302 +_INLINE_ int jbd2_has_feature_##name(journal_t *j); \ 12.303 +_INLINE_ int jbd2_has_feature_##name(journal_t *j) \ 12.304 { \ 12.305 return ((j)->j_format_version >= 2 && \ 12.306 ((j)->j_superblock->s_feature_ro_compat & \ 12.307 - ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname)) != 0); \ 12.308 + ext2fs_cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname)) != 0); \ 12.309 } \ 12.310 -_INLINE_ void jfs_set_feature_##name(journal_t *j); \ 12.311 -_INLINE_ void jfs_set_feature_##name(journal_t *j) \ 12.312 +_INLINE_ void jbd2_set_feature_##name(journal_t *j); \ 12.313 +_INLINE_ void jbd2_set_feature_##name(journal_t *j) \ 12.314 { \ 12.315 (j)->j_superblock->s_feature_ro_compat |= \ 12.316 - ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname); \ 12.317 + ext2fs_cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname); \ 12.318 } \ 12.319 -_INLINE_ void jfs_clear_feature_##name(journal_t *j); \ 12.320 -_INLINE_ void jfs_clear_feature_##name(journal_t *j) \ 12.321 +_INLINE_ void jbd2_clear_feature_##name(journal_t *j); \ 12.322 +_INLINE_ void jbd2_clear_feature_##name(journal_t *j) \ 12.323 { \ 12.324 (j)->j_superblock->s_feature_ro_compat &= \ 12.325 - ~ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname); \ 12.326 + ~ext2fs_cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname); \ 12.327 } 12.328 12.329 -#define JFS_FEATURE_INCOMPAT_FUNCS(name, flagname) \ 12.330 -_INLINE_ int jfs_has_feature_##name(journal_t *j); \ 12.331 -_INLINE_ int jfs_has_feature_##name(journal_t *j) \ 12.332 +#define JBD2_FEATURE_INCOMPAT_FUNCS(name, flagname) \ 12.333 +_INLINE_ int jbd2_has_feature_##name(journal_t *j); \ 12.334 +_INLINE_ int jbd2_has_feature_##name(journal_t *j) \ 12.335 { \ 12.336 return ((j)->j_format_version >= 2 && \ 12.337 ((j)->j_superblock->s_feature_incompat & \ 12.338 - ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname)) != 0); \ 12.339 + ext2fs_cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname)) != 0); \ 12.340 } \ 12.341 -_INLINE_ void jfs_set_feature_##name(journal_t *j); \ 12.342 -_INLINE_ void jfs_set_feature_##name(journal_t *j) \ 12.343 +_INLINE_ void jbd2_set_feature_##name(journal_t *j); \ 12.344 +_INLINE_ void jbd2_set_feature_##name(journal_t *j) \ 12.345 { \ 12.346 (j)->j_superblock->s_feature_incompat |= \ 12.347 - ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname); \ 12.348 + ext2fs_cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname); \ 12.349 } \ 12.350 -_INLINE_ void jfs_clear_feature_##name(journal_t *j); \ 12.351 -_INLINE_ void jfs_clear_feature_##name(journal_t *j) \ 12.352 +_INLINE_ void jbd2_clear_feature_##name(journal_t *j); \ 12.353 +_INLINE_ void jbd2_clear_feature_##name(journal_t *j) \ 12.354 { \ 12.355 (j)->j_superblock->s_feature_incompat &= \ 12.356 - ~ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname); \ 12.357 + ~ext2fs_cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname); \ 12.358 } 12.359 12.360 #else 12.361 -#define JFS_FEATURE_COMPAT_FUNCS(name, flagname) \ 12.362 -extern int jfs_has_feature_##name(journal_t *j); \ 12.363 -extern void jfs_set_feature_##name(journal_t *j); \ 12.364 -extern void jfs_clear_feature_##name(journal_t *j); 12.365 +#define JBD2_FEATURE_COMPAT_FUNCS(name, flagname) \ 12.366 +extern int jbd2_has_feature_##name(journal_t *j); \ 12.367 +extern void jbd2_set_feature_##name(journal_t *j); \ 12.368 +extern void jbd2_clear_feature_##name(journal_t *j); 12.369 12.370 -#define JFS_FEATURE_RO_COMPAT_FUNCS(name, flagname) \ 12.371 -extern int jfs_has_feature_##name(journal_t *j); \ 12.372 -extern void jfs_set_feature_##name(journal_t *j); \ 12.373 -extern void jfs_clear_feature_##name(journal_t *j); 12.374 +#define JBD2_FEATURE_RO_COMPAT_FUNCS(name, flagname) \ 12.375 +extern int jbd2_has_feature_##name(journal_t *j); \ 12.376 +extern void jbd2_set_feature_##name(journal_t *j); \ 12.377 +extern void jbd2_clear_feature_##name(journal_t *j); 12.378 12.379 -#define JFS_FEATURE_INCOMPAT_FUNCS(name, flagname) \ 12.380 -extern int jfs_has_feature_##name(journal_t *j); \ 12.381 -extern void jfs_set_feature_##name(journal_t *j); \ 12.382 -extern void jfs_clear_feature_##name(journal_t *j); 12.383 +#define JBD2_FEATURE_INCOMPAT_FUNCS(name, flagname) \ 12.384 +extern int jbd2_has_feature_##name(journal_t *j); \ 12.385 +extern void jbd2_set_feature_##name(journal_t *j); \ 12.386 +extern void jbd2_clear_feature_##name(journal_t *j); 12.387 12.388 #endif /* (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS)) */ 12.389 12.390 -JFS_FEATURE_COMPAT_FUNCS(checksum, CHECKSUM) 12.391 +JBD2_FEATURE_COMPAT_FUNCS(checksum, CHECKSUM) 12.392 12.393 -JFS_FEATURE_INCOMPAT_FUNCS(revoke, REVOKE) 12.394 -JFS_FEATURE_INCOMPAT_FUNCS(64bit, 64BIT) 12.395 -JFS_FEATURE_INCOMPAT_FUNCS(async_commit, ASYNC_COMMIT) 12.396 -JFS_FEATURE_INCOMPAT_FUNCS(csum2, CSUM_V2) 12.397 -JFS_FEATURE_INCOMPAT_FUNCS(csum3, CSUM_V3) 12.398 +JBD2_FEATURE_INCOMPAT_FUNCS(revoke, REVOKE) 12.399 +JBD2_FEATURE_INCOMPAT_FUNCS(64bit, 64BIT) 12.400 +JBD2_FEATURE_INCOMPAT_FUNCS(async_commit, ASYNC_COMMIT) 12.401 +JBD2_FEATURE_INCOMPAT_FUNCS(csum2, CSUM_V2) 12.402 +JBD2_FEATURE_INCOMPAT_FUNCS(csum3, CSUM_V3) 12.403 +JBD2_FEATURE_INCOMPAT_FUNCS(fast_commit, FAST_COMMIT) 12.404 12.405 #if (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS)) 12.406 /* 12.407 @@ -398,28 +401,35 @@ 12.408 { 12.409 size_t sz; 12.410 12.411 - if (jfs_has_feature_csum3(journal)) 12.412 + if (jbd2_has_feature_csum3(journal)) 12.413 return sizeof(journal_block_tag3_t); 12.414 12.415 sz = sizeof(journal_block_tag_t); 12.416 12.417 - if (jfs_has_feature_csum2(journal)) 12.418 + if (jbd2_has_feature_csum2(journal)) 12.419 sz += sizeof(__u16); 12.420 12.421 - if (jfs_has_feature_64bit(journal)) 12.422 + if (jbd2_has_feature_64bit(journal)) 12.423 return sz; 12.424 12.425 return sz - sizeof(__u32); 12.426 } 12.427 12.428 -_INLINE_ int journal_has_csum_v2or3(journal_t *journal) 12.429 +_INLINE_ int jbd2_journal_has_csum_v2or3(journal_t *journal) 12.430 { 12.431 - if (jfs_has_feature_csum2(journal) || jfs_has_feature_csum3(journal)) 12.432 + if (jbd2_has_feature_csum2(journal) || jbd2_has_feature_csum3(journal)) 12.433 return 1; 12.434 12.435 return 0; 12.436 } 12.437 12.438 +_INLINE_ int jbd2_journal_get_num_fc_blks(journal_superblock_t *jsb) 12.439 +{ 12.440 + int num_fc_blocks = be32_to_cpu(jsb->s_num_fc_blks); 12.441 + 12.442 + return num_fc_blocks ? num_fc_blocks : JBD2_DEFAULT_FAST_COMMIT_BLOCKS; 12.443 +} 12.444 + 12.445 /* Comparison functions for transaction IDs: perform comparisons using 12.446 * modulo arithmetic so that they work over sequence number wraps. */ 12.447
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 13.2 +++ b/libext2fs/include/libsupport/support/sort_r.h Sat Oct 09 23:28:01 2021 +0200 13.3 @@ -0,0 +1,321 @@ 13.4 +/* Isaac Turner 29 April 2014 Public Domain */ 13.5 +#ifndef SORT_R_H_ 13.6 +#define SORT_R_H_ 13.7 + 13.8 +#include <stdlib.h> 13.9 +#include <string.h> 13.10 + 13.11 +/* 13.12 + 13.13 +sort_r function to be exported. 13.14 + 13.15 +Parameters: 13.16 + base is the array to be sorted 13.17 + nel is the number of elements in the array 13.18 + width is the size in bytes of each element of the array 13.19 + compar is the comparison function 13.20 + arg is a pointer to be passed to the comparison function 13.21 + 13.22 +void sort_r(void *base, size_t nel, size_t width, 13.23 + int (*compar)(const void *_a, const void *_b, void *_arg), 13.24 + void *arg); 13.25 + 13.26 +*/ 13.27 + 13.28 +#define _SORT_R_INLINE inline 13.29 + 13.30 +#if (defined __APPLE__ || defined __MACH__ || defined __DARWIN__ || \ 13.31 + defined __FreeBSD__ || defined __DragonFly__) 13.32 +# define _SORT_R_BSD 13.33 +#elif (defined _GNU_SOURCE || defined __gnu_hurd__ || defined __GNU__ || \ 13.34 + defined __linux__ || defined __MINGW32__ || defined __GLIBC__) 13.35 +# define _SORT_R_LINUX 13.36 +#elif (defined _WIN32 || defined _WIN64 || defined __WINDOWS__) 13.37 +# define _SORT_R_WINDOWS 13.38 +# undef _SORT_R_INLINE 13.39 +# define _SORT_R_INLINE __inline 13.40 +#else 13.41 + /* Using our own recursive quicksort sort_r_simple() */ 13.42 +#endif 13.43 + 13.44 +#if (defined NESTED_QSORT && NESTED_QSORT == 0) 13.45 +# undef NESTED_QSORT 13.46 +#endif 13.47 + 13.48 +#define SORT_R_SWAP(a,b,tmp) ((tmp) = (a), (a) = (b), (b) = (tmp)) 13.49 + 13.50 +/* swap a and b */ 13.51 +/* a and b must not be equal! */ 13.52 +static _SORT_R_INLINE void sort_r_swap(char *__restrict a, char *__restrict b, 13.53 + size_t w) 13.54 +{ 13.55 + char tmp, *end = a+w; 13.56 + for(; a < end; a++, b++) { SORT_R_SWAP(*a, *b, tmp); } 13.57 +} 13.58 + 13.59 +/* swap a, b iff a>b */ 13.60 +/* a and b must not be equal! */ 13.61 +/* __restrict is same as restrict but better support on old machines */ 13.62 +static _SORT_R_INLINE int sort_r_cmpswap(char *__restrict a, 13.63 + char *__restrict b, size_t w, 13.64 + int (*compar)(const void *_a, 13.65 + const void *_b, 13.66 + void *_arg), 13.67 + void *arg) 13.68 +{ 13.69 + if(compar(a, b, arg) > 0) { 13.70 + sort_r_swap(a, b, w); 13.71 + return 1; 13.72 + } 13.73 + return 0; 13.74 +} 13.75 + 13.76 +/* 13.77 +Swap consecutive blocks of bytes of size na and nb starting at memory addr ptr, 13.78 +with the smallest swap so that the blocks are in the opposite order. Blocks may 13.79 +be internally re-ordered e.g. 13.80 + 13.81 + 12345ab -> ab34512 13.82 + 123abc -> abc123 13.83 + 12abcde -> deabc12 13.84 +*/ 13.85 +static _SORT_R_INLINE void sort_r_swap_blocks(char *ptr, size_t na, size_t nb) 13.86 +{ 13.87 + if(na > 0 && nb > 0) { 13.88 + if(na > nb) { sort_r_swap(ptr, ptr+na, nb); } 13.89 + else { sort_r_swap(ptr, ptr+nb, na); } 13.90 + } 13.91 +} 13.92 + 13.93 +/* Implement recursive quicksort ourselves */ 13.94 +/* Note: quicksort is not stable, equivalent values may be swapped */ 13.95 +static _SORT_R_INLINE void sort_r_simple(void *base, size_t nel, size_t w, 13.96 + int (*compar)(const void *_a, 13.97 + const void *_b, 13.98 + void *_arg), 13.99 + void *arg) 13.100 +{ 13.101 + char *b = (char *)base, *end = b + nel*w; 13.102 + 13.103 + /* for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));} 13.104 + printf("\n"); */ 13.105 + 13.106 + if(nel < 10) { 13.107 + /* Insertion sort for arbitrarily small inputs */ 13.108 + char *pi, *pj; 13.109 + for(pi = b+w; pi < end; pi += w) { 13.110 + for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,arg); pj -= w) {} 13.111 + } 13.112 + } 13.113 + else 13.114 + { 13.115 + /* nel > 6; Quicksort */ 13.116 + 13.117 + int cmp; 13.118 + char *pl, *ple, *pr, *pre, *pivot; 13.119 + char *last = b+w*(nel-1), *tmp; 13.120 + 13.121 + /* 13.122 + Use median of second, middle and second-last items as pivot. 13.123 + First and last may have been swapped with pivot and therefore be extreme 13.124 + */ 13.125 + char *l[3]; 13.126 + l[0] = b + w; 13.127 + l[1] = b+w*(nel/2); 13.128 + l[2] = last - w; 13.129 + 13.130 + /* printf("pivots: %i, %i, %i\n", *(int*)l[0], *(int*)l[1], *(int*)l[2]); */ 13.131 + 13.132 + if(compar(l[0],l[1],arg) > 0) { SORT_R_SWAP(l[0], l[1], tmp); } 13.133 + if(compar(l[1],l[2],arg) > 0) { 13.134 + SORT_R_SWAP(l[1], l[2], tmp); 13.135 + if(compar(l[0],l[1],arg) > 0) { SORT_R_SWAP(l[0], l[1], tmp); } 13.136 + } 13.137 + 13.138 + /* swap mid value (l[1]), and last element to put pivot as last element */ 13.139 + if(l[1] != last) { sort_r_swap(l[1], last, w); } 13.140 + 13.141 + /* 13.142 + pl is the next item on the left to be compared to the pivot 13.143 + pr is the last item on the right that was compared to the pivot 13.144 + ple is the left position to put the next item that equals the pivot 13.145 + ple is the last right position where we put an item that equals the pivot 13.146 + 13.147 + v- end (beyond the array) 13.148 + EEEEEELLLLLLLLuuuuuuuuGGGGGGGEEEEEEEE. 13.149 + ^- b ^- ple ^- pl ^- pr ^- pre ^- last (where the pivot is) 13.150 + 13.151 + Pivot comparison key: 13.152 + E = equal, L = less than, u = unknown, G = greater than, E = equal 13.153 + */ 13.154 + pivot = last; 13.155 + ple = pl = b; 13.156 + pre = pr = last; 13.157 + 13.158 + /* 13.159 + Strategy: 13.160 + Loop into the list from the left and right at the same time to find: 13.161 + - an item on the left that is greater than the pivot 13.162 + - an item on the right that is less than the pivot 13.163 + Once found, they are swapped and the loop continues. 13.164 + Meanwhile items that are equal to the pivot are moved to the edges of the 13.165 + array. 13.166 + */ 13.167 + while(pl < pr) { 13.168 + /* Move left hand items which are equal to the pivot to the far left. 13.169 + break when we find an item that is greater than the pivot */ 13.170 + for(; pl < pr; pl += w) { 13.171 + cmp = compar(pl, pivot, arg); 13.172 + if(cmp > 0) { break; } 13.173 + else if(cmp == 0) { 13.174 + if(ple < pl) { sort_r_swap(ple, pl, w); } 13.175 + ple += w; 13.176 + } 13.177 + } 13.178 + /* break if last batch of left hand items were equal to pivot */ 13.179 + if(pl >= pr) { break; } 13.180 + /* Move right hand items which are equal to the pivot to the far right. 13.181 + break when we find an item that is less than the pivot */ 13.182 + for(; pl < pr; ) { 13.183 + pr -= w; /* Move right pointer onto an unprocessed item */ 13.184 + cmp = compar(pr, pivot, arg); 13.185 + if(cmp == 0) { 13.186 + pre -= w; 13.187 + if(pr < pre) { sort_r_swap(pr, pre, w); } 13.188 + } 13.189 + else if(cmp < 0) { 13.190 + if(pl < pr) { sort_r_swap(pl, pr, w); } 13.191 + pl += w; 13.192 + break; 13.193 + } 13.194 + } 13.195 + } 13.196 + 13.197 + pl = pr; /* pr may have gone below pl */ 13.198 + 13.199 + /* 13.200 + Now we need to go from: EEELLLGGGGEEEE 13.201 + to: LLLEEEEEEEGGGG 13.202 + 13.203 + Pivot comparison key: 13.204 + E = equal, L = less than, u = unknown, G = greater than, E = equal 13.205 + */ 13.206 + sort_r_swap_blocks(b, ple-b, pl-ple); 13.207 + sort_r_swap_blocks(pr, pre-pr, end-pre); 13.208 + 13.209 + /*for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));} 13.210 + printf("\n");*/ 13.211 + 13.212 + sort_r_simple(b, (pl-ple)/w, w, compar, arg); 13.213 + sort_r_simple(end-(pre-pr), (pre-pr)/w, w, compar, arg); 13.214 + } 13.215 +} 13.216 + 13.217 + 13.218 +#if defined NESTED_QSORT 13.219 + 13.220 + static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width, 13.221 + int (*compar)(const void *_a, 13.222 + const void *_b, 13.223 + void *aarg), 13.224 + void *arg) 13.225 + { 13.226 + int nested_cmp(const void *a, const void *b) 13.227 + { 13.228 + return compar(a, b, arg); 13.229 + } 13.230 + 13.231 + qsort(base, nel, width, nested_cmp); 13.232 + } 13.233 + 13.234 +#else /* !NESTED_QSORT */ 13.235 + 13.236 + /* Declare structs and functions */ 13.237 + 13.238 + #if defined _SORT_R_BSD 13.239 + 13.240 + /* Ensure qsort_r is defined */ 13.241 + extern void qsort_r(void *base, size_t nel, size_t width, void *thunk, 13.242 + int (*compar)(void *_thunk, 13.243 + const void *_a, const void *_b)); 13.244 + 13.245 + #endif 13.246 + 13.247 + #if defined _SORT_R_BSD || defined _SORT_R_WINDOWS 13.248 + 13.249 + /* BSD (qsort_r), Windows (qsort_s) require argument swap */ 13.250 + 13.251 + struct sort_r_data 13.252 + { 13.253 + void *arg; 13.254 + int (*compar)(const void *_a, const void *_b, void *_arg); 13.255 + }; 13.256 + 13.257 + static _SORT_R_INLINE int sort_r_arg_swap(void *s, 13.258 + const void *a, const void *b) 13.259 + { 13.260 + struct sort_r_data *ss = (struct sort_r_data*)s; 13.261 + return (ss->compar)(a, b, ss->arg); 13.262 + } 13.263 + 13.264 + #endif 13.265 + 13.266 + #if defined _SORT_R_LINUX 13.267 + 13.268 + typedef int(* __compar_d_fn_t)(const void *, const void *, void *); 13.269 + extern void qsort_r(void *base, size_t nel, size_t width, 13.270 + __compar_d_fn_t __compar, void *arg) 13.271 + __attribute__((nonnull (1, 4))); 13.272 + 13.273 + #endif 13.274 + 13.275 + /* implementation */ 13.276 + 13.277 + static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width, 13.278 + int (*compar)(const void *_a, 13.279 + const void *_b, void *_arg), 13.280 + void *arg) 13.281 + { 13.282 + #if defined _SORT_R_LINUX 13.283 + 13.284 + #if defined __GLIBC__ && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8)) 13.285 + 13.286 + /* no qsort_r in glibc before 2.8, need to use nested qsort */ 13.287 + sort_r_simple(base, nel, width, compar, arg); 13.288 + 13.289 + #else 13.290 + 13.291 + qsort_r(base, nel, width, compar, arg); 13.292 + 13.293 + #endif 13.294 + 13.295 + #elif defined _SORT_R_BSD 13.296 + 13.297 + struct sort_r_data tmp; 13.298 + tmp.arg = arg; 13.299 + tmp.compar = compar; 13.300 + qsort_r(base, nel, width, &tmp, sort_r_arg_swap); 13.301 + 13.302 + #elif defined _SORT_R_WINDOWS 13.303 + 13.304 + struct sort_r_data tmp; 13.305 + tmp.arg = arg; 13.306 + tmp.compar = compar; 13.307 + qsort_s(base, nel, width, sort_r_arg_swap, &tmp); 13.308 + 13.309 + #else 13.310 + 13.311 + /* Fall back to our own quicksort implementation */ 13.312 + sort_r_simple(base, nel, width, compar, arg); 13.313 + 13.314 + #endif 13.315 + } 13.316 + 13.317 +#endif /* !NESTED_QSORT */ 13.318 + 13.319 +#undef _SORT_R_INLINE 13.320 +#undef _SORT_R_WINDOWS 13.321 +#undef _SORT_R_LINUX 13.322 +#undef _SORT_R_BSD 13.323 + 13.324 +#endif /* SORT_R_H_ */
14.1 --- a/libext2fs/lib/config.h Sat Oct 02 23:57:02 2021 +0200 14.2 +++ b/libext2fs/lib/config.h Sat Oct 09 23:28:01 2021 +0200 14.3 @@ -1,7 +1,14 @@ 14.4 #include <sys/types.h> 14.5 14.6 -/* Definitions based on the current status of L4Re. */ 14.7 +/* Machine-specific definitions. See <bits/types.h> and <bits/typesizes.h>. */ 14.8 14.9 +#define SIZEOF_SHORT 2 14.10 +#define SIZEOF_INT 4 14.11 +#define SIZEOF_LONG (__WORDSIZE / 8) 14.12 +#define SIZEOF_LONG_LONG 8 14.13 +#define SIZEOF_OFF_T (__WORDSIZE / 8) 14.14 + 14.15 +#define HAVE_DLOPEN 1 14.16 #define HAVE_ERRNO_H 1 14.17 #define HAVE_EXT2_IOCTLS 1 14.18 #define HAVE_FALLOCATE 1 14.19 @@ -9,55 +16,66 @@ 14.20 #define HAVE_FCNTL 1 14.21 #define HAVE_FSTAT64 1 14.22 #define HAVE_FSYNC 1 14.23 +#define HAVE_GETDTABLESIZE 1 14.24 #define HAVE_GETHOSTNAME 1 14.25 -#define HAVE_GETPAGESIZE 1 14.26 +#define HAVE_GETOPT_H 1 14.27 +#define HAVE_GETRLIMIT 1 14.28 +#define HAVE_INTTYPES_H 1 14.29 +#define HAVE_JRAND48 1 14.30 +/* #define HAVE_LINUX_FALLOC_H 1 */ 14.31 +/* #define HAVE_LINUX_FD_H 1 */ 14.32 +/* #define HAVE_LINUX_LOOP_H 1 */ 14.33 +/* #define HAVE_LINUX_MAJOR_H 1 */ 14.34 +/* #define HAVE_LINUX_TYPES_H 1 */ 14.35 #define HAVE_LSEEK64 1 14.36 #define HAVE_LSEEK64_PROTOTYPE 1 14.37 -#define HAVE_LSEEK64_PROTOTYPE 1 14.38 #define HAVE_MALLOC_H 1 14.39 #define HAVE_MEMALIGN 1 14.40 +/* #define HAVE_MNTENT_H 1 */ 14.41 +#define HAVE_NET_IF_H 1 14.42 #define HAVE_NETINET_IN_H 1 14.43 #define HAVE_OPEN64 1 14.44 +#define HAVE_PATHCONF 1 14.45 #define HAVE_POSIX_MEMALIGN 1 14.46 +/* #define HAVE_PRCTL 1 */ 14.47 #define HAVE_PREAD 1 14.48 #define HAVE_PREAD64 1 14.49 -#define HAVE_PREAD64 1 14.50 +#define HAVE_PTHREAD 1 14.51 +#define HAVE_PTHREAD_H 1 14.52 +#define HAVE_PTHREAD_PRIO_INHERIT 1 14.53 +#define HAVE_PTHREAD_H 1 14.54 #define HAVE_PWRITE 1 14.55 #define HAVE_PWRITE64 1 14.56 -#define HAVE_PWRITE64 1 14.57 -#define HAVE_SECURE_GETENV 1 14.58 +#define HAVE_RECLEN_DIRENT 1 14.59 +/* #define HAVE_SECURE_GETENV 1 */ 14.60 +#define HAVE_SEMAPHORE_H 1 14.61 +#define HAVE_SEM_INIT 1 14.62 +/* #define HAVE_SETMNTENT 1 */ 14.63 #define HAVE_SRANDOM 1 14.64 +#define HAVE_STDINT_H 1 14.65 #define HAVE_STDLIB_H 1 14.66 +#define HAVE_STRDUP 1 14.67 #define HAVE_STRNLEN 1 14.68 +#define HAVE_STRTOULL 1 14.69 +#define HAVE_SYSCONF 1 14.70 +#define HAVE_SYS_FILE_H 1 14.71 #define HAVE_SYS_IOCTL_H 1 14.72 #define HAVE_SYS_MOUNT_H 1 14.73 +/* #define HAVE_SYS_PRCTL_H 1 */ 14.74 #define HAVE_SYS_RESOURCE_H 1 14.75 +#define HAVE_SYS_SOCKET_H 1 14.76 #define HAVE_SYS_STAT_H 1 14.77 +#define HAVE_SYS_SYSCALL_H 1 14.78 #define HAVE_SYS_SYSMACROS_H 1 14.79 #define HAVE_SYS_TIME_H 1 14.80 #define HAVE_SYS_TYPES_H 1 14.81 +#define HAVE_SYS_UN_H 1 14.82 +#define HAVE_SYS_WAIT_H 1 14.83 +#define HAVE_TERMIOS_H 1 14.84 #define HAVE_UNISTD_H 1 14.85 #define HAVE_VALLOC 1 14.86 +#define HAVE_VPRINTF 1 14.87 +#define HAVE_EXT2_IOCTLS 1 14.88 #define TLS __thread 14.89 - 14.90 -#if 0 14.91 -#define HAVE_LINUX_FALLOC_H 1 14.92 -#define HAVE_LINUX_FD_H 1 14.93 -#define HAVE_LINUX_LOOP_H 1 14.94 -#define HAVE_LINUX_MAJOR_H 1 14.95 -#define HAVE_LINUX_TYPES_H 1 14.96 -#define HAVE_MNTENT_H 1 14.97 -#define HAVE_PRCTL 1 14.98 -#define HAVE_SETMNTENT 1 14.99 -#define HAVE_SYS_PRCTL_H 1 14.100 -#endif 14.101 - 14.102 -/* libext2fs metadata. */ 14.103 - 14.104 +#define PACKAGE_VERSION "" 14.105 #define VERSION "0.14.1" 14.106 - 14.107 -/* Machine-specific definitions. See <bits/types.h> and <bits/typesizes.h>. */ 14.108 - 14.109 -#define SIZEOF_LONG (__WORDSIZE / 8) 14.110 -#define SIZEOF_LONG_LONG 8 14.111 -#define SIZEOF_OFF_T (__WORDSIZE / 8)
15.1 --- a/libext2fs/lib/config.h.in Sat Oct 02 23:57:02 2021 +0200 15.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 15.3 @@ -1,899 +0,0 @@ 15.4 -/* lib/config.h.in. Generated from configure.ac by autoheader. */ 15.5 - 15.6 -/* Define if building universal (internal helper macro) */ 15.7 -#undef AC_APPLE_UNIVERSAL_BUILD 15.8 - 15.9 -/* Define to 1 if debugging the blkid library */ 15.10 -#undef CONFIG_BLKID_DEBUG 15.11 - 15.12 -/* Define to 1 to compile findfs */ 15.13 -#undef CONFIG_BUILD_FINDFS 15.14 - 15.15 -/* Define to 1 if debugging ext3/4 journal code */ 15.16 -#undef CONFIG_JBD_DEBUG 15.17 - 15.18 -/* Define to 1 to enable mmp support */ 15.19 -#undef CONFIG_MMP 15.20 - 15.21 -/* Define to 1 to enable tdb support */ 15.22 -#undef CONFIG_TDB 15.23 - 15.24 -/* Define to 1 if the testio I/O manager should be enabled */ 15.25 -#undef CONFIG_TESTIO_DEBUG 15.26 - 15.27 -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP 15.28 - systems. This function is required for `alloca.c' support on those systems. 15.29 - */ 15.30 -#undef CRAY_STACKSEG_END 15.31 - 15.32 -/* Define to 1 if using `alloca.c'. */ 15.33 -#undef C_ALLOCA 15.34 - 15.35 -/* Define to 1 to disable use of backtrace */ 15.36 -#undef DISABLE_BACKTRACE 15.37 - 15.38 -/* Define to 1 to enable bitmap stats. */ 15.39 -#undef ENABLE_BMAP_STATS 15.40 - 15.41 -/* Define to 1 to enable bitmap stats. */ 15.42 -#undef ENABLE_BMAP_STATS_OPS 15.43 - 15.44 -/* Define to 1 if translation of program messages to the user's native 15.45 - language is requested. */ 15.46 -#undef ENABLE_NLS 15.47 - 15.48 -/* Define to 1 if you have the `add_key' function. */ 15.49 -#undef HAVE_ADD_KEY 15.50 - 15.51 -/* Define to 1 if you have `alloca', as a function or macro. */ 15.52 -#undef HAVE_ALLOCA 15.53 - 15.54 -/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). 15.55 - */ 15.56 -#undef HAVE_ALLOCA_H 15.57 - 15.58 -/* Define to 1 if you have the `argz_count' function. */ 15.59 -#undef HAVE_ARGZ_COUNT 15.60 - 15.61 -/* Define to 1 if you have the <argz.h> header file. */ 15.62 -#undef HAVE_ARGZ_H 15.63 - 15.64 -/* Define to 1 if you have the `argz_next' function. */ 15.65 -#undef HAVE_ARGZ_NEXT 15.66 - 15.67 -/* Define to 1 if you have the `argz_stringify' function. */ 15.68 -#undef HAVE_ARGZ_STRINGIFY 15.69 - 15.70 -/* Define to 1 if you have the `asprintf' function. */ 15.71 -#undef HAVE_ASPRINTF 15.72 - 15.73 -/* Define to 1 if you have the <attr/xattr.h> header file. */ 15.74 -#undef HAVE_ATTR_XATTR_H 15.75 - 15.76 -/* Define to 1 if you have the `backtrace' function. */ 15.77 -#undef HAVE_BACKTRACE 15.78 - 15.79 -/* Define to 1 if you have the `blkid_probe_enable_partitions' function. */ 15.80 -#undef HAVE_BLKID_PROBE_ENABLE_PARTITIONS 15.81 - 15.82 -/* Define to 1 if you have the `blkid_probe_get_topology' function. */ 15.83 -#undef HAVE_BLKID_PROBE_GET_TOPOLOGY 15.84 - 15.85 -/* Define to 1 if the compiler understands __builtin_expect. */ 15.86 -#undef HAVE_BUILTIN_EXPECT 15.87 - 15.88 -/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the 15.89 - CoreFoundation framework. */ 15.90 -#undef HAVE_CFLOCALECOPYCURRENT 15.91 - 15.92 -/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in 15.93 - the CoreFoundation framework. */ 15.94 -#undef HAVE_CFPREFERENCESCOPYAPPVALUE 15.95 - 15.96 -/* Define to 1 if you have the `chflags' function. */ 15.97 -#undef HAVE_CHFLAGS 15.98 - 15.99 -/* Define if the GNU dcgettext() function is already present or preinstalled. 15.100 - */ 15.101 -#undef HAVE_DCGETTEXT 15.102 - 15.103 -/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you 15.104 - don't. */ 15.105 -#undef HAVE_DECL_FEOF_UNLOCKED 15.106 - 15.107 -/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if 15.108 - you don't. */ 15.109 -#undef HAVE_DECL_FGETS_UNLOCKED 15.110 - 15.111 -/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you 15.112 - don't. */ 15.113 -#undef HAVE_DECL_GETC_UNLOCKED 15.114 - 15.115 -/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you 15.116 - don't. */ 15.117 -#undef HAVE_DECL__SNPRINTF 15.118 - 15.119 -/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you 15.120 - don't. */ 15.121 -#undef HAVE_DECL__SNWPRINTF 15.122 - 15.123 -/* Define to 1 if you have the <dirent.h> header file. */ 15.124 -#undef HAVE_DIRENT_H 15.125 - 15.126 -/* Define to 1 if you have the `dlopen' function. */ 15.127 -#undef HAVE_DLOPEN 15.128 - 15.129 -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ 15.130 -#undef HAVE_DOPRNT 15.131 - 15.132 -/* Define to 1 if you have the <errno.h> header file. */ 15.133 -#undef HAVE_ERRNO_H 15.134 - 15.135 -/* Define to 1 if you have the <execinfo.h> header file. */ 15.136 -#undef HAVE_EXECINFO_H 15.137 - 15.138 -/* Define to 1 if Ext2 ioctls present */ 15.139 -#undef HAVE_EXT2_IOCTLS 15.140 - 15.141 -/* Define to 1 if you have the `fadvise64' function. */ 15.142 -#undef HAVE_FADVISE64 15.143 - 15.144 -/* Define to 1 if you have the `fallocate' function. */ 15.145 -#undef HAVE_FALLOCATE 15.146 - 15.147 -/* Define to 1 if you have the `fallocate64' function. */ 15.148 -#undef HAVE_FALLOCATE64 15.149 - 15.150 -/* Define to 1 if you have the `fchown' function. */ 15.151 -#undef HAVE_FCHOWN 15.152 - 15.153 -/* Define to 1 if you have the `fcntl' function. */ 15.154 -#undef HAVE_FCNTL 15.155 - 15.156 -/* Define to 1 if you have the `fdatasync' function. */ 15.157 -#undef HAVE_FDATASYNC 15.158 - 15.159 -/* Define to 1 if you have the <features.h> header file. */ 15.160 -#undef HAVE_FEATURES_H 15.161 - 15.162 -/* Define to 1 if you have the `fstat64' function. */ 15.163 -#undef HAVE_FSTAT64 15.164 - 15.165 -/* Define to 1 if you have the `fsync' function. */ 15.166 -#undef HAVE_FSYNC 15.167 - 15.168 -/* Define to 1 if you have the `ftruncate64' function. */ 15.169 -#undef HAVE_FTRUNCATE64 15.170 - 15.171 -/* Define to 1 if you have the <fuse.h> header file. */ 15.172 -#undef HAVE_FUSE_H 15.173 - 15.174 -/* Define to 1 if you have the `futimes' function. */ 15.175 -#undef HAVE_FUTIMES 15.176 - 15.177 -/* Define to 1 if you have the `fwprintf' function. */ 15.178 -#undef HAVE_FWPRINTF 15.179 - 15.180 -/* Define to 1 if you have the `getcwd' function. */ 15.181 -#undef HAVE_GETCWD 15.182 - 15.183 -/* Define to 1 if you have the `getdtablesize' function. */ 15.184 -#undef HAVE_GETDTABLESIZE 15.185 - 15.186 -/* Define to 1 if you have the `getegid' function. */ 15.187 -#undef HAVE_GETEGID 15.188 - 15.189 -/* Define to 1 if you have the `geteuid' function. */ 15.190 -#undef HAVE_GETEUID 15.191 - 15.192 -/* Define to 1 if you have the `getgid' function. */ 15.193 -#undef HAVE_GETGID 15.194 - 15.195 -/* Define to 1 if you have the `gethostname' function. */ 15.196 -#undef HAVE_GETHOSTNAME 15.197 - 15.198 -/* Define to 1 if you have the `getmntinfo' function. */ 15.199 -#undef HAVE_GETMNTINFO 15.200 - 15.201 -/* Define to 1 if you have the <getopt.h> header file. */ 15.202 -#undef HAVE_GETOPT_H 15.203 - 15.204 -/* Define to 1 if you have the `getpagesize' function. */ 15.205 -#undef HAVE_GETPAGESIZE 15.206 - 15.207 -/* Define to 1 if you have the `getpwuid_r' function. */ 15.208 -#undef HAVE_GETPWUID_R 15.209 - 15.210 -/* Define to 1 if you have the `getrlimit' function. */ 15.211 -#undef HAVE_GETRLIMIT 15.212 - 15.213 -/* Define to 1 if you have the `getrusage' function. */ 15.214 -#undef HAVE_GETRUSAGE 15.215 - 15.216 -/* Define if the GNU gettext() function is already present or preinstalled. */ 15.217 -#undef HAVE_GETTEXT 15.218 - 15.219 -/* Define to 1 if you have the `getuid' function. */ 15.220 -#undef HAVE_GETUID 15.221 - 15.222 -/* Define if you have the iconv() function and it works. */ 15.223 -#undef HAVE_ICONV 15.224 - 15.225 -/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ 15.226 -#undef HAVE_INTMAX_T 15.227 - 15.228 -/* Define to 1 if the system has the type `intptr_t'. */ 15.229 -#undef HAVE_INTPTR_T 15.230 - 15.231 -/* Define to 1 if you have the <inttypes.h> header file. */ 15.232 -#undef HAVE_INTTYPES_H 15.233 - 15.234 -/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and 15.235 - declares uintmax_t. */ 15.236 -#undef HAVE_INTTYPES_H_WITH_UINTMAX 15.237 - 15.238 -/* Define to 1 if you have the `jrand48' function. */ 15.239 -#undef HAVE_JRAND48 15.240 - 15.241 -/* Define to 1 if you have the `keyctl' function. */ 15.242 -#undef HAVE_KEYCTL 15.243 - 15.244 -/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ 15.245 -#undef HAVE_LANGINFO_CODESET 15.246 - 15.247 -/* Define if your <locale.h> file defines LC_MESSAGES. */ 15.248 -#undef HAVE_LC_MESSAGES 15.249 - 15.250 -/* Define to 1 if you have the <limits.h> header file. */ 15.251 -#undef HAVE_LIMITS_H 15.252 - 15.253 -/* Define to 1 if you have the <linux/falloc.h> header file. */ 15.254 -#undef HAVE_LINUX_FALLOC_H 15.255 - 15.256 -/* Define to 1 if you have the <linux/fd.h> header file. */ 15.257 -#undef HAVE_LINUX_FD_H 15.258 - 15.259 -/* Define to 1 if you have the <linux/fsmap.h> header file. */ 15.260 -#undef HAVE_LINUX_FSMAP_H 15.261 - 15.262 -/* Define to 1 if you have the <linux/loop.h> header file. */ 15.263 -#undef HAVE_LINUX_LOOP_H 15.264 - 15.265 -/* Define to 1 if you have the <linux/major.h> header file. */ 15.266 -#undef HAVE_LINUX_MAJOR_H 15.267 - 15.268 -/* Define to 1 if you have the <linux/types.h> header file. */ 15.269 -#undef HAVE_LINUX_TYPES_H 15.270 - 15.271 -/* Define to 1 if you have the `llistxattr' function. */ 15.272 -#undef HAVE_LLISTXATTR 15.273 - 15.274 -/* Define to 1 if you have the `llseek' function. */ 15.275 -#undef HAVE_LLSEEK 15.276 - 15.277 -/* Define to 1 if llseek declared in unistd.h */ 15.278 -#undef HAVE_LLSEEK_PROTOTYPE 15.279 - 15.280 -/* Define to 1 if the system has the type 'long long int'. */ 15.281 -#undef HAVE_LONG_LONG_INT 15.282 - 15.283 -/* Define to 1 if you have the `lseek64' function. */ 15.284 -#undef HAVE_LSEEK64 15.285 - 15.286 -/* Define to 1 if lseek64 declared in unistd.h */ 15.287 -#undef HAVE_LSEEK64_PROTOTYPE 15.288 - 15.289 -/* Define to 1 if you have the <magic.h> header file. */ 15.290 -#undef HAVE_MAGIC_H 15.291 - 15.292 -/* Define to 1 if you have the `mallinfo' function. */ 15.293 -#undef HAVE_MALLINFO 15.294 - 15.295 -/* Define to 1 if you have the <malloc.h> header file. */ 15.296 -#undef HAVE_MALLOC_H 15.297 - 15.298 -/* Define to 1 if you have the `mbrtowc' function. */ 15.299 -#undef HAVE_MBRTOWC 15.300 - 15.301 -/* Define to 1 if you have the `mbstowcs' function. */ 15.302 -#undef HAVE_MBSTOWCS 15.303 - 15.304 -/* Define to 1 if you have the `memalign' function. */ 15.305 -#undef HAVE_MEMALIGN 15.306 - 15.307 -/* Define to 1 if you have the <memory.h> header file. */ 15.308 -#undef HAVE_MEMORY_H 15.309 - 15.310 -/* Define to 1 if you have the `mempcpy' function. */ 15.311 -#undef HAVE_MEMPCPY 15.312 - 15.313 -/* Define to 1 if you have the `mmap' function. */ 15.314 -#undef HAVE_MMAP 15.315 - 15.316 -/* Define to 1 if you have the <mntent.h> header file. */ 15.317 -#undef HAVE_MNTENT_H 15.318 - 15.319 -/* Define to 1 if you have the `msync' function. */ 15.320 -#undef HAVE_MSYNC 15.321 - 15.322 -/* Define to 1 if you have the `munmap' function. */ 15.323 -#undef HAVE_MUNMAP 15.324 - 15.325 -/* Define to 1 if you have the `nanosleep' function. */ 15.326 -#undef HAVE_NANOSLEEP 15.327 - 15.328 -/* Define to 1 if you have the <netinet/in.h> header file. */ 15.329 -#undef HAVE_NETINET_IN_H 15.330 - 15.331 -/* Define to 1 if you have the <net/if_dl.h> header file. */ 15.332 -#undef HAVE_NET_IF_DL_H 15.333 - 15.334 -/* Define to 1 if you have the <net/if.h> header file. */ 15.335 -#undef HAVE_NET_IF_H 15.336 - 15.337 -/* Define to 1 if you have the `newlocale' function. */ 15.338 -#undef HAVE_NEWLOCALE 15.339 - 15.340 -/* Define to 1 if you have the `open64' function. */ 15.341 -#undef HAVE_OPEN64 15.342 - 15.343 -/* Define to 1 if optreset for getopt is present */ 15.344 -#undef HAVE_OPTRESET 15.345 - 15.346 -/* Define to 1 if you have the `pathconf' function. */ 15.347 -#undef HAVE_PATHCONF 15.348 - 15.349 -/* Define to 1 if you have the <paths.h> header file. */ 15.350 -#undef HAVE_PATHS_H 15.351 - 15.352 -/* Define to 1 if you have the `posix_fadvise' function. */ 15.353 -#undef HAVE_POSIX_FADVISE 15.354 - 15.355 -/* Define to 1 if you have the `posix_fadvise64' function. */ 15.356 -#undef HAVE_POSIX_FADVISE64 15.357 - 15.358 -/* Define to 1 if you have the `posix_memalign' function. */ 15.359 -#undef HAVE_POSIX_MEMALIGN 15.360 - 15.361 -/* Define if your printf() function supports format strings with positions. */ 15.362 -#undef HAVE_POSIX_PRINTF 15.363 - 15.364 -/* Define to 1 if you have the `prctl' function. */ 15.365 -#undef HAVE_PRCTL 15.366 - 15.367 -/* Define to 1 if you have the `pread' function. */ 15.368 -#undef HAVE_PREAD 15.369 - 15.370 -/* Define to 1 if you have the `pread64' function. */ 15.371 -#undef HAVE_PREAD64 15.372 - 15.373 -/* Define to 1 if you have the <pthread.h> header file. */ 15.374 -#undef HAVE_PTHREAD_H 15.375 - 15.376 -/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */ 15.377 -#undef HAVE_PTHREAD_MUTEX_RECURSIVE 15.378 - 15.379 -/* Define if the POSIX multithreading library has read/write locks. */ 15.380 -#undef HAVE_PTHREAD_RWLOCK 15.381 - 15.382 -/* Define to 1 if you have the `putenv' function. */ 15.383 -#undef HAVE_PUTENV 15.384 - 15.385 -/* Define to 1 if you have the `pwrite' function. */ 15.386 -#undef HAVE_PWRITE 15.387 - 15.388 -/* Define to 1 if you have the `pwrite64' function. */ 15.389 -#undef HAVE_PWRITE64 15.390 - 15.391 -/* Define to 1 if dirent has d_reclen */ 15.392 -#undef HAVE_RECLEN_DIRENT 15.393 - 15.394 -/* Define to 1 if if struct sockaddr contains sa_len */ 15.395 -#undef HAVE_SA_LEN 15.396 - 15.397 -/* Define to 1 if you have the `secure_getenv' function. */ 15.398 -#undef HAVE_SECURE_GETENV 15.399 - 15.400 -/* Define to 1 if you have the <semaphore.h> header file. */ 15.401 -#undef HAVE_SEMAPHORE_H 15.402 - 15.403 -/* Define to 1 if sem_init() exists */ 15.404 -#undef HAVE_SEM_INIT 15.405 - 15.406 -/* Define to 1 if you have the `setenv' function. */ 15.407 -#undef HAVE_SETENV 15.408 - 15.409 -/* Define to 1 if you have the <setjmp.h> header file. */ 15.410 -#undef HAVE_SETJMP_H 15.411 - 15.412 -/* Define to 1 if you have the `setlocale' function. */ 15.413 -#undef HAVE_SETLOCALE 15.414 - 15.415 -/* Define to 1 if you have the `setmntent' function. */ 15.416 -#undef HAVE_SETMNTENT 15.417 - 15.418 -/* Define to 1 if you have the `setresgid' function. */ 15.419 -#undef HAVE_SETRESGID 15.420 - 15.421 -/* Define to 1 if you have the `setresuid' function. */ 15.422 -#undef HAVE_SETRESUID 15.423 - 15.424 -/* Define to 1 if you have the <signal.h> header file. */ 15.425 -#undef HAVE_SIGNAL_H 15.426 - 15.427 -/* Define to 1 if you have the `snprintf' function. */ 15.428 -#undef HAVE_SNPRINTF 15.429 - 15.430 -/* Define to 1 if you have the `srandom' function. */ 15.431 -#undef HAVE_SRANDOM 15.432 - 15.433 -/* Define to 1 if struct stat has st_flags */ 15.434 -#undef HAVE_STAT_FLAGS 15.435 - 15.436 -/* Define to 1 if you have the <stdarg.h> header file. */ 15.437 -#undef HAVE_STDARG_H 15.438 - 15.439 -/* Define to 1 if you have the <stddef.h> header file. */ 15.440 -#undef HAVE_STDDEF_H 15.441 - 15.442 -/* Define to 1 if you have the <stdint.h> header file. */ 15.443 -#undef HAVE_STDINT_H 15.444 - 15.445 -/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares 15.446 - uintmax_t. */ 15.447 -#undef HAVE_STDINT_H_WITH_UINTMAX 15.448 - 15.449 -/* Define to 1 if you have the <stdlib.h> header file. */ 15.450 -#undef HAVE_STDLIB_H 15.451 - 15.452 -/* Define to 1 if you have the `stpcpy' function. */ 15.453 -#undef HAVE_STPCPY 15.454 - 15.455 -/* Define to 1 if you have the `strcasecmp' function. */ 15.456 -#undef HAVE_STRCASECMP 15.457 - 15.458 -/* Define to 1 if you have the `strdup' function. */ 15.459 -#undef HAVE_STRDUP 15.460 - 15.461 -/* Define to 1 if you have the <strings.h> header file. */ 15.462 -#undef HAVE_STRINGS_H 15.463 - 15.464 -/* Define to 1 if you have the <string.h> header file. */ 15.465 -#undef HAVE_STRING_H 15.466 - 15.467 -/* Define to 1 if you have the `strnlen' function. */ 15.468 -#undef HAVE_STRNLEN 15.469 - 15.470 -/* Define to 1 if you have the `strptime' function. */ 15.471 -#undef HAVE_STRPTIME 15.472 - 15.473 -/* Define to 1 if you have the `strtoul' function. */ 15.474 -#undef HAVE_STRTOUL 15.475 - 15.476 -/* Define to 1 if you have the `strtoull' function. */ 15.477 -#undef HAVE_STRTOULL 15.478 - 15.479 -/* Define to 1 if `st_atim' is a member of `struct stat'. */ 15.480 -#undef HAVE_STRUCT_STAT_ST_ATIM 15.481 - 15.482 -/* Define to 1 if you have the `symlink' function. */ 15.483 -#undef HAVE_SYMLINK 15.484 - 15.485 -/* Define to 1 if you have the `sync_file_range' function. */ 15.486 -#undef HAVE_SYNC_FILE_RANGE 15.487 - 15.488 -/* Define to 1 if you have the `sysconf' function. */ 15.489 -#undef HAVE_SYSCONF 15.490 - 15.491 -/* Define to 1 if you have the <sys/acl.h> header file. */ 15.492 -#undef HAVE_SYS_ACL_H 15.493 - 15.494 -/* Define to 1 if you have the <sys/disklabel.h> header file. */ 15.495 -#undef HAVE_SYS_DISKLABEL_H 15.496 - 15.497 -/* Define to 1 if you have the <sys/disk.h> header file. */ 15.498 -#undef HAVE_SYS_DISK_H 15.499 - 15.500 -/* Define to 1 if you have the <sys/file.h> header file. */ 15.501 -#undef HAVE_SYS_FILE_H 15.502 - 15.503 -/* Define to 1 if you have the <sys/ioctl.h> header file. */ 15.504 -#undef HAVE_SYS_IOCTL_H 15.505 - 15.506 -/* Define to 1 if you have the <sys/key.h> header file. */ 15.507 -#undef HAVE_SYS_KEY_H 15.508 - 15.509 -/* Define to 1 if you have the <sys/mkdev.h> header file. */ 15.510 -#undef HAVE_SYS_MKDEV_H 15.511 - 15.512 -/* Define to 1 if you have the <sys/mman.h> header file. */ 15.513 -#undef HAVE_SYS_MMAN_H 15.514 - 15.515 -/* Define to 1 if you have the <sys/mount.h> header file. */ 15.516 -#undef HAVE_SYS_MOUNT_H 15.517 - 15.518 -/* Define to 1 if you have the <sys/param.h> header file. */ 15.519 -#undef HAVE_SYS_PARAM_H 15.520 - 15.521 -/* Define to 1 if you have the <sys/prctl.h> header file. */ 15.522 -#undef HAVE_SYS_PRCTL_H 15.523 - 15.524 -/* Define to 1 if you have the <sys/resource.h> header file. */ 15.525 -#undef HAVE_SYS_RESOURCE_H 15.526 - 15.527 -/* Define to 1 if you have the <sys/select.h> header file. */ 15.528 -#undef HAVE_SYS_SELECT_H 15.529 - 15.530 -/* Define to 1 if you have the <sys/socket.h> header file. */ 15.531 -#undef HAVE_SYS_SOCKET_H 15.532 - 15.533 -/* Define to 1 if you have the <sys/sockio.h> header file. */ 15.534 -#undef HAVE_SYS_SOCKIO_H 15.535 - 15.536 -/* Define to 1 if you have the <sys/stat.h> header file. */ 15.537 -#undef HAVE_SYS_STAT_H 15.538 - 15.539 -/* Define to 1 if you have the <sys/syscall.h> header file. */ 15.540 -#undef HAVE_SYS_SYSCALL_H 15.541 - 15.542 -/* Define to 1 if you have the <sys/sysctl.h> header file. */ 15.543 -#undef HAVE_SYS_SYSCTL_H 15.544 - 15.545 -/* Define to 1 if you have the <sys/sysmacros.h> header file. */ 15.546 -#undef HAVE_SYS_SYSMACROS_H 15.547 - 15.548 -/* Define to 1 if you have the <sys/time.h> header file. */ 15.549 -#undef HAVE_SYS_TIME_H 15.550 - 15.551 -/* Define to 1 if you have the <sys/types.h> header file. */ 15.552 -#undef HAVE_SYS_TYPES_H 15.553 - 15.554 -/* Define to 1 if you have the <sys/un.h> header file. */ 15.555 -#undef HAVE_SYS_UN_H 15.556 - 15.557 -/* Define to 1 if you have the <sys/wait.h> header file. */ 15.558 -#undef HAVE_SYS_WAIT_H 15.559 - 15.560 -/* Define to 1 if you have the <sys/xattr.h> header file. */ 15.561 -#undef HAVE_SYS_XATTR_H 15.562 - 15.563 -/* Define to 1 if you have the <termios.h> header file. */ 15.564 -#undef HAVE_TERMIOS_H 15.565 - 15.566 -/* Define to 1 if you have the <termio.h> header file. */ 15.567 -#undef HAVE_TERMIO_H 15.568 - 15.569 -/* Define to 1 if you have the `tsearch' function. */ 15.570 -#undef HAVE_TSEARCH 15.571 - 15.572 -/* Define to 1 if ssize_t declared */ 15.573 -#undef HAVE_TYPE_SSIZE_T 15.574 - 15.575 -/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */ 15.576 -#undef HAVE_UINTMAX_T 15.577 - 15.578 -/* Define to 1 if you have the <unistd.h> header file. */ 15.579 -#undef HAVE_UNISTD_H 15.580 - 15.581 -/* Define to 1 if the system has the type 'unsigned long long int'. */ 15.582 -#undef HAVE_UNSIGNED_LONG_LONG_INT 15.583 - 15.584 -/* Define to 1 if you have the `uselocale' function. */ 15.585 -#undef HAVE_USELOCALE 15.586 - 15.587 -/* Define to 1 if you have the `usleep' function. */ 15.588 -#undef HAVE_USLEEP 15.589 - 15.590 -/* Define to 1 if you have the `utime' function. */ 15.591 -#undef HAVE_UTIME 15.592 - 15.593 -/* Define to 1 if you have the `utimes' function. */ 15.594 -#undef HAVE_UTIMES 15.595 - 15.596 -/* Define to 1 if you have the <utime.h> header file. */ 15.597 -#undef HAVE_UTIME_H 15.598 - 15.599 -/* Define to 1 if you have the `valloc' function. */ 15.600 -#undef HAVE_VALLOC 15.601 - 15.602 -/* Define to 1 or 0, depending whether the compiler supports simple visibility 15.603 - declarations. */ 15.604 -#undef HAVE_VISIBILITY 15.605 - 15.606 -/* Define to 1 if you have the `vprintf' function. */ 15.607 -#undef HAVE_VPRINTF 15.608 - 15.609 -/* Define if you have the 'wchar_t' type. */ 15.610 -#undef HAVE_WCHAR_T 15.611 - 15.612 -/* Define to 1 if you have the `wcrtomb' function. */ 15.613 -#undef HAVE_WCRTOMB 15.614 - 15.615 -/* Define to 1 if you have the `wcslen' function. */ 15.616 -#undef HAVE_WCSLEN 15.617 - 15.618 -/* Define to 1 if you have the `wcsnlen' function. */ 15.619 -#undef HAVE_WCSNLEN 15.620 - 15.621 -/* Define if you have the 'wint_t' type. */ 15.622 -#undef HAVE_WINT_T 15.623 - 15.624 -/* Define to 1 if O_NOATIME works. */ 15.625 -#undef HAVE_WORKING_O_NOATIME 15.626 - 15.627 -/* Define to 1 if O_NOFOLLOW works. */ 15.628 -#undef HAVE_WORKING_O_NOFOLLOW 15.629 - 15.630 -/* Define to 1 if you have the `__fsetlocking' function. */ 15.631 -#undef HAVE___FSETLOCKING 15.632 - 15.633 -/* Define to 1 if you have the `__secure_getenv' function. */ 15.634 -#undef HAVE___SECURE_GETENV 15.635 - 15.636 -/* Define as const if the declaration of iconv() needs const. */ 15.637 -#undef ICONV_CONST 15.638 - 15.639 -/* Define if integer division by zero raises signal SIGFPE. */ 15.640 -#undef INTDIV0_RAISES_SIGFPE 15.641 - 15.642 -/* package name for gettext */ 15.643 -#undef PACKAGE 15.644 - 15.645 -/* Define to the address where bug reports for this package should be sent. */ 15.646 -#undef PACKAGE_BUGREPORT 15.647 - 15.648 -/* Define to the full name of this package. */ 15.649 -#undef PACKAGE_NAME 15.650 - 15.651 -/* Define to the full name and version of this package. */ 15.652 -#undef PACKAGE_STRING 15.653 - 15.654 -/* Define to the one symbol short name of this package. */ 15.655 -#undef PACKAGE_TARNAME 15.656 - 15.657 -/* Define to the home page for this package. */ 15.658 -#undef PACKAGE_URL 15.659 - 15.660 -/* Define to the version of this package. */ 15.661 -#undef PACKAGE_VERSION 15.662 - 15.663 -/* Define if <inttypes.h> exists and defines unusable PRI* macros. */ 15.664 -#undef PRI_MACROS_BROKEN 15.665 - 15.666 -/* Define if the pthread_in_use() detection is hard. */ 15.667 -#undef PTHREAD_IN_USE_DETECTION_HARD 15.668 - 15.669 -/* The size of `int', as computed by sizeof. */ 15.670 -#undef SIZEOF_INT 15.671 - 15.672 -/* The size of `long', as computed by sizeof. */ 15.673 -#undef SIZEOF_LONG 15.674 - 15.675 -/* The size of `long long', as computed by sizeof. */ 15.676 -#undef SIZEOF_LONG_LONG 15.677 - 15.678 -/* The size of `off_t', as computed by sizeof. */ 15.679 -#undef SIZEOF_OFF_T 15.680 - 15.681 -/* The size of `short', as computed by sizeof. */ 15.682 -#undef SIZEOF_SHORT 15.683 - 15.684 -/* The size of `time_t', as computed by sizeof. */ 15.685 -#undef SIZEOF_TIME_T 15.686 - 15.687 -/* Define as the maximum value of type 'size_t', if the system doesn't define 15.688 - it. */ 15.689 -#ifndef SIZE_MAX 15.690 -# undef SIZE_MAX 15.691 -#endif 15.692 - 15.693 -/* If using the C implementation of alloca, define if you know the 15.694 - direction of stack growth for your system; otherwise it will be 15.695 - automatically deduced at runtime. 15.696 - STACK_DIRECTION > 0 => grows toward higher addresses 15.697 - STACK_DIRECTION < 0 => grows toward lower addresses 15.698 - STACK_DIRECTION = 0 => direction of growth unknown */ 15.699 -#undef STACK_DIRECTION 15.700 - 15.701 -/* Define to 1 if you have the ANSI C header files. */ 15.702 -#undef STDC_HEADERS 15.703 - 15.704 -/* If the compiler supports a TLS storage class define it to that here */ 15.705 -#undef TLS 15.706 - 15.707 -/* Define if the POSIX multithreading library can be used. */ 15.708 -#undef USE_POSIX_THREADS 15.709 - 15.710 -/* Define if references to the POSIX multithreading library should be made 15.711 - weak. */ 15.712 -#undef USE_POSIX_THREADS_WEAK 15.713 - 15.714 -/* Define if the GNU Pth multithreading library can be used. */ 15.715 -#undef USE_PTH_THREADS 15.716 - 15.717 -/* Define if references to the GNU Pth multithreading library should be made 15.718 - weak. */ 15.719 -#undef USE_PTH_THREADS_WEAK 15.720 - 15.721 -/* Define if the old Solaris multithreading library can be used. */ 15.722 -#undef USE_SOLARIS_THREADS 15.723 - 15.724 -/* Define if references to the old Solaris multithreading library should be 15.725 - made weak. */ 15.726 -#undef USE_SOLARIS_THREADS_WEAK 15.727 - 15.728 -/* Enable extensions on AIX 3, Interix. */ 15.729 -#ifndef _ALL_SOURCE 15.730 -# undef _ALL_SOURCE 15.731 -#endif 15.732 -/* Enable GNU extensions on systems that have them. */ 15.733 -#ifndef _GNU_SOURCE 15.734 -# undef _GNU_SOURCE 15.735 -#endif 15.736 -/* Enable threading extensions on Solaris. */ 15.737 -#ifndef _POSIX_PTHREAD_SEMANTICS 15.738 -# undef _POSIX_PTHREAD_SEMANTICS 15.739 -#endif 15.740 -/* Enable extensions on HP NonStop. */ 15.741 -#ifndef _TANDEM_SOURCE 15.742 -# undef _TANDEM_SOURCE 15.743 -#endif 15.744 -/* Enable general extensions on Solaris. */ 15.745 -#ifndef __EXTENSIONS__ 15.746 -# undef __EXTENSIONS__ 15.747 -#endif 15.748 - 15.749 - 15.750 -/* Define to 1 to build uuidd */ 15.751 -#undef USE_UUIDD 15.752 - 15.753 -/* Define if the native Windows multithreading API can be used. */ 15.754 -#undef USE_WINDOWS_THREADS 15.755 - 15.756 -/* version for gettext */ 15.757 -#undef VERSION 15.758 - 15.759 -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most 15.760 - significant byte first (like Motorola and SPARC, unlike Intel). */ 15.761 -#if defined AC_APPLE_UNIVERSAL_BUILD 15.762 -# if defined __BIG_ENDIAN__ 15.763 -# define WORDS_BIGENDIAN 1 15.764 -# endif 15.765 -#else 15.766 -# ifndef WORDS_BIGENDIAN 15.767 -# undef WORDS_BIGENDIAN 15.768 -# endif 15.769 -#endif 15.770 - 15.771 -/* Define to 1 if Apple Darwin libintl workaround is needed */ 15.772 -#undef _INTL_REDIRECT_MACROS 15.773 - 15.774 -/* Define to 1 if on MINIX. */ 15.775 -#undef _MINIX 15.776 - 15.777 -/* Define to 2 if the system does not provide POSIX.1 features except with 15.778 - this defined. */ 15.779 -#undef _POSIX_1_SOURCE 15.780 - 15.781 -/* Define to 1 if you need to in order for `stat' and other things to work. */ 15.782 -#undef _POSIX_SOURCE 15.783 - 15.784 -/* Please see the Gnulib manual for how to use these macros. 15.785 - 15.786 - Suppress extern inline with HP-UX cc, as it appears to be broken; see 15.787 - <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>. 15.788 - 15.789 - Suppress extern inline with Sun C in standards-conformance mode, as it 15.790 - mishandles inline functions that call each other. E.g., for 'inline void f 15.791 - (void) { } inline void g (void) { f (); }', c99 incorrectly complains 15.792 - 'reference to static identifier "f" in extern inline function'. 15.793 - This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. 15.794 - 15.795 - Suppress the use of extern inline on Apple's platforms, as Libc at least 15.796 - through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g., 15.797 - <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>. 15.798 - Perhaps Apple will fix this some day. */ 15.799 -#if ((__GNUC__ \ 15.800 - ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ 15.801 - : (199901L <= __STDC_VERSION__ \ 15.802 - && !defined __HP_cc \ 15.803 - && !(defined __SUNPRO_C && __STDC__))) \ 15.804 - && !defined __APPLE__) 15.805 -# define _GL_INLINE inline 15.806 -# define _GL_EXTERN_INLINE extern inline 15.807 -#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ 15.808 - && !defined __APPLE__) 15.809 -# if __GNUC_GNU_INLINE__ 15.810 - /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ 15.811 -# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) 15.812 -# else 15.813 -# define _GL_INLINE extern inline 15.814 -# endif 15.815 -# define _GL_EXTERN_INLINE extern 15.816 -#else 15.817 -# define _GL_INLINE static _GL_UNUSED 15.818 -# define _GL_EXTERN_INLINE static _GL_UNUSED 15.819 -#endif 15.820 - 15.821 -#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) 15.822 -# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ 15.823 -# define _GL_INLINE_HEADER_CONST_PRAGMA 15.824 -# else 15.825 -# define _GL_INLINE_HEADER_CONST_PRAGMA \ 15.826 - _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") 15.827 -# endif 15.828 - /* Suppress GCC's bogus "no previous prototype for 'FOO'" 15.829 - and "no previous declaration for 'FOO'" diagnostics, 15.830 - when FOO is an inline function in the header; see 15.831 - <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>. */ 15.832 -# define _GL_INLINE_HEADER_BEGIN \ 15.833 - _Pragma ("GCC diagnostic push") \ 15.834 - _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ 15.835 - _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ 15.836 - _GL_INLINE_HEADER_CONST_PRAGMA 15.837 -# define _GL_INLINE_HEADER_END \ 15.838 - _Pragma ("GCC diagnostic pop") 15.839 -#else 15.840 -# define _GL_INLINE_HEADER_BEGIN 15.841 -# define _GL_INLINE_HEADER_END 15.842 -#endif 15.843 - 15.844 -/* Define to `__inline__' or `__inline' if that's what the C compiler 15.845 - calls it, or to nothing if 'inline' is not supported under any name. */ 15.846 -#ifndef __cplusplus 15.847 -#undef inline 15.848 -#endif 15.849 - 15.850 -/* Define as the type of the result of subtracting two pointers, if the system 15.851 - doesn't define it. */ 15.852 -#undef ptrdiff_t 15.853 - 15.854 -/* Define to `unsigned int' if <sys/types.h> does not define. */ 15.855 -#undef size_t 15.856 - 15.857 -/* Define to unsigned long or unsigned long long if <stdint.h> and 15.858 - <inttypes.h> don't define. */ 15.859 -#undef uintmax_t 15.860 - 15.861 -#include <dirpaths.h> 15.862 - 15.863 - 15.864 -#define __libc_lock_t gl_lock_t 15.865 -#define __libc_lock_define gl_lock_define 15.866 -#define __libc_lock_define_initialized gl_lock_define_initialized 15.867 -#define __libc_lock_init gl_lock_init 15.868 -#define __libc_lock_lock gl_lock_lock 15.869 -#define __libc_lock_unlock gl_lock_unlock 15.870 -#define __libc_lock_recursive_t gl_recursive_lock_t 15.871 -#define __libc_lock_define_recursive gl_recursive_lock_define 15.872 -#define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized 15.873 -#define __libc_lock_init_recursive gl_recursive_lock_init 15.874 -#define __libc_lock_lock_recursive gl_recursive_lock_lock 15.875 -#define __libc_lock_unlock_recursive gl_recursive_lock_unlock 15.876 -#define glthread_in_use libintl_thread_in_use 15.877 -#define glthread_lock_init_func libintl_lock_init_func 15.878 -#define glthread_lock_lock_func libintl_lock_lock_func 15.879 -#define glthread_lock_unlock_func libintl_lock_unlock_func 15.880 -#define glthread_lock_destroy_func libintl_lock_destroy_func 15.881 -#define glthread_rwlock_init_multithreaded libintl_rwlock_init_multithreaded 15.882 -#define glthread_rwlock_init_func libintl_rwlock_init_func 15.883 -#define glthread_rwlock_rdlock_multithreaded libintl_rwlock_rdlock_multithreaded 15.884 -#define glthread_rwlock_rdlock_func libintl_rwlock_rdlock_func 15.885 -#define glthread_rwlock_wrlock_multithreaded libintl_rwlock_wrlock_multithreaded 15.886 -#define glthread_rwlock_wrlock_func libintl_rwlock_wrlock_func 15.887 -#define glthread_rwlock_unlock_multithreaded libintl_rwlock_unlock_multithreaded 15.888 -#define glthread_rwlock_unlock_func libintl_rwlock_unlock_func 15.889 -#define glthread_rwlock_destroy_multithreaded libintl_rwlock_destroy_multithreaded 15.890 -#define glthread_rwlock_destroy_func libintl_rwlock_destroy_func 15.891 -#define glthread_recursive_lock_init_multithreaded libintl_recursive_lock_init_multithreaded 15.892 -#define glthread_recursive_lock_init_func libintl_recursive_lock_init_func 15.893 -#define glthread_recursive_lock_lock_multithreaded libintl_recursive_lock_lock_multithreaded 15.894 -#define glthread_recursive_lock_lock_func libintl_recursive_lock_lock_func 15.895 -#define glthread_recursive_lock_unlock_multithreaded libintl_recursive_lock_unlock_multithreaded 15.896 -#define glthread_recursive_lock_unlock_func libintl_recursive_lock_unlock_func 15.897 -#define glthread_recursive_lock_destroy_multithreaded libintl_recursive_lock_destroy_multithreaded 15.898 -#define glthread_recursive_lock_destroy_func libintl_recursive_lock_destroy_func 15.899 -#define glthread_once_func libintl_once_func 15.900 -#define glthread_once_singlethreaded libintl_once_singlethreaded 15.901 -#define glthread_once_multithreaded libintl_once_multithreaded 15.902 -
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 16.2 +++ b/libext2fs/lib/config.h.in-l4re Sat Oct 09 23:28:01 2021 +0200 16.3 @@ -0,0 +1,10 @@ 16.4 +#include <sys/types.h> 16.5 + 16.6 +/* Machine-specific definitions. See <bits/types.h> and <bits/typesizes.h>. */ 16.7 + 16.8 +#define SIZEOF_SHORT 2 16.9 +#define SIZEOF_INT 4 16.10 +#define SIZEOF_LONG (__WORDSIZE / 8) 16.11 +#define SIZEOF_LONG_LONG 8 16.12 +#define SIZEOF_OFF_T (__WORDSIZE / 8) 16.13 +
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 17.2 +++ b/libext2fs/lib/dirpaths.h Sat Oct 09 23:28:01 2021 +0200 17.3 @@ -0,0 +1,10 @@ 17.4 +/* 17.5 + * This file contains the path names for various directories as 17.6 + * controlled by the configure script. 17.7 + */ 17.8 + 17.9 +/* Where to put the messages file for internationalization support */ 17.10 +#define LOCALEDIR "/usr/share/locale" 17.11 + 17.12 +/* Where to find the mke2fs.conf and e2fsck.conf files */ 17.13 +#define ROOT_SYSCONFDIR "/etc"
18.1 --- a/libext2fs/lib/libblkid/Makefile Sat Oct 02 23:57:02 2021 +0200 18.2 +++ b/libext2fs/lib/libblkid/Makefile Sat Oct 09 23:28:01 2021 +0200 18.3 @@ -5,7 +5,7 @@ 18.4 PC_FILENAME = libblkid 18.5 SRC_C = \ 18.6 cache.c dev.c devname.c devno.c getsize.c llseek.c probe.c \ 18.7 - read.c resolve.c save.c tag.c tst_types.c version.c 18.8 + read.c resolve.c save.c tag.c version.c 18.9 18.10 REQUIRES_LIBS = libuuid 18.11
19.1 --- a/libext2fs/lib/libblkid/devname.c Sat Oct 02 23:57:02 2021 +0200 19.2 +++ b/libext2fs/lib/libblkid/devname.c Sat Oct 09 23:28:01 2021 +0200 19.3 @@ -126,7 +126,7 @@ 19.4 { 19.5 struct dirent *de, *d_de; 19.6 DIR *dir, *d_dir; 19.7 - char path[256]; 19.8 + char path[300]; 19.9 int ret = 1; 19.10 19.11 if ((dir = opendir("/sys/block")) == NULL) 19.12 @@ -162,7 +162,7 @@ 19.13 { 19.14 FILE *f; 19.15 size_t sz; 19.16 - char path[256], name[256], *res = NULL; 19.17 + char path[300], name[256], *res = NULL; 19.18 19.19 snprintf(path, sizeof(path), "/sys/block/%s/dm/name", ptname); 19.20 if ((f = fopen(path, "r")) == NULL)
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 20.2 +++ b/libext2fs/lib/libblkid/list.h Sat Oct 09 23:28:01 2021 +0200 20.3 @@ -0,0 +1,184 @@ 20.4 +#if !defined(_BLKID_LIST_H) && !defined(LIST_HEAD_INIT) 20.5 +#define _BLKID_LIST_H 20.6 + 20.7 +#ifdef __cplusplus 20.8 +extern "C" { 20.9 +#endif 20.10 + 20.11 +#ifdef HAVE_INTTYPES_H 20.12 +#include <inttypes.h> 20.13 +#else 20.14 +#ifdef HAVE_STDINT_H 20.15 +#include <stdint.h> 20.16 +#endif 20.17 +#endif 20.18 + 20.19 +#ifdef __GNUC__ 20.20 +#define _INLINE_ static __inline__ 20.21 +#else /* For Watcom C */ 20.22 +#define _INLINE_ static inline 20.23 +#endif 20.24 + 20.25 +/* 20.26 + * Simple doubly linked list implementation. 20.27 + * 20.28 + * Some of the internal functions ("__xxx") are useful when 20.29 + * manipulating whole lists rather than single entries, as 20.30 + * sometimes we already know the next/prev entries and we can 20.31 + * generate better code by using them directly rather than 20.32 + * using the generic single-entry routines. 20.33 + */ 20.34 + 20.35 +struct list_head { 20.36 + struct list_head *next, *prev; 20.37 +}; 20.38 + 20.39 +#define LIST_HEAD_INIT(name) { &(name), &(name) } 20.40 + 20.41 +#define INIT_LIST_HEAD(ptr) do { \ 20.42 + (ptr)->next = (ptr); (ptr)->prev = (ptr); \ 20.43 +} while (0) 20.44 + 20.45 +/* 20.46 + * Insert a new entry between two known consecutive entries. 20.47 + * 20.48 + * This is only for internal list manipulation where we know 20.49 + * the prev/next entries already! 20.50 + */ 20.51 +_INLINE_ void __list_add(struct list_head * add, 20.52 + struct list_head * prev, 20.53 + struct list_head * next) 20.54 +{ 20.55 + next->prev = add; 20.56 + add->next = next; 20.57 + add->prev = prev; 20.58 + prev->next = add; 20.59 +} 20.60 + 20.61 +/** 20.62 + * list_add - add a new entry 20.63 + * @add: new entry to be added 20.64 + * @head: list head to add it after 20.65 + * 20.66 + * Insert a new entry after the specified head. 20.67 + * This is good for implementing stacks. 20.68 + */ 20.69 +_INLINE_ void list_add(struct list_head *add, struct list_head *head) 20.70 +{ 20.71 + __list_add(add, head, head->next); 20.72 +} 20.73 + 20.74 +/** 20.75 + * list_add_tail - add a new entry 20.76 + * @add: new entry to be added 20.77 + * @head: list head to add it before 20.78 + * 20.79 + * Insert a new entry before the specified head. 20.80 + * This is useful for implementing queues. 20.81 + */ 20.82 +_INLINE_ void list_add_tail(struct list_head *add, struct list_head *head) 20.83 +{ 20.84 + __list_add(add, head->prev, head); 20.85 +} 20.86 + 20.87 +/* 20.88 + * Delete a list entry by making the prev/next entries 20.89 + * point to each other. 20.90 + * 20.91 + * This is only for internal list manipulation where we know 20.92 + * the prev/next entries already! 20.93 + */ 20.94 +_INLINE_ void __list_del(struct list_head * prev, 20.95 + struct list_head * next) 20.96 +{ 20.97 + next->prev = prev; 20.98 + prev->next = next; 20.99 +} 20.100 + 20.101 +/** 20.102 + * list_del - deletes entry from list. 20.103 + * @entry: the element to delete from the list. 20.104 + * 20.105 + * list_empty() on @entry does not return true after this, @entry is 20.106 + * in an undefined state. 20.107 + */ 20.108 +_INLINE_ void list_del(struct list_head *entry) 20.109 +{ 20.110 + __list_del(entry->prev, entry->next); 20.111 +} 20.112 + 20.113 +/** 20.114 + * list_del_init - deletes entry from list and reinitialize it. 20.115 + * @entry: the element to delete from the list. 20.116 + */ 20.117 +_INLINE_ void list_del_init(struct list_head *entry) 20.118 +{ 20.119 + __list_del(entry->prev, entry->next); 20.120 + INIT_LIST_HEAD(entry); 20.121 +} 20.122 + 20.123 +/** 20.124 + * list_empty - tests whether a list is empty 20.125 + * @head: the list to test. 20.126 + */ 20.127 +_INLINE_ int list_empty(struct list_head *head) 20.128 +{ 20.129 + return head->next == head; 20.130 +} 20.131 + 20.132 +/** 20.133 + * list_splice - join two lists 20.134 + * @list: the new list to add. 20.135 + * @head: the place to add it in the first list. 20.136 + */ 20.137 +_INLINE_ void list_splice(struct list_head *list, struct list_head *head) 20.138 +{ 20.139 + struct list_head *first = list->next; 20.140 + 20.141 + if (first != list) { 20.142 + struct list_head *last = list->prev; 20.143 + struct list_head *at = head->next; 20.144 + 20.145 + first->prev = head; 20.146 + head->next = first; 20.147 + 20.148 + last->next = at; 20.149 + at->prev = last; 20.150 + } 20.151 +} 20.152 + 20.153 +/** 20.154 + * list_entry - get the struct for this entry 20.155 + * @ptr: the &struct list_head pointer. 20.156 + * @type: the type of the struct this is embedded in. 20.157 + * @member: the name of the list_struct within the struct. 20.158 + */ 20.159 +#define list_entry(ptr, type, member) \ 20.160 + ((type *)((char *)(ptr)-(unsigned long)(intptr_t)(&((type *)0)->member))) 20.161 + 20.162 +/** 20.163 + * list_for_each - iterate over elements in a list 20.164 + * @pos: the &struct list_head to use as a loop counter. 20.165 + * @head: the head for your list. 20.166 + */ 20.167 +#define list_for_each(pos, head) \ 20.168 + for (pos = (head)->next; pos != (head); pos = pos->next) 20.169 + 20.170 +/** 20.171 + * list_for_each_safe - iterate over elements in a list, but don't dereference 20.172 + * pos after the body is done (in case it is freed) 20.173 + * @pos: the &struct list_head to use as a loop counter. 20.174 + * @pnext: the &struct list_head to use as a pointer to the next item. 20.175 + * @head: the head for your list (not included in iteration). 20.176 + */ 20.177 +#define list_for_each_safe(pos, pnext, head) \ 20.178 + for (pos = (head)->next, pnext = pos->next; pos != (head); \ 20.179 + pos = pnext, pnext = pos->next) 20.180 + 20.181 +#undef _INLINE_ 20.182 + 20.183 +#ifdef __cplusplus 20.184 +} 20.185 +#endif 20.186 + 20.187 +#endif /* _BLKID_LIST_H */
21.1 --- a/libext2fs/lib/libblkid/probe.c Sat Oct 02 23:57:02 2021 +0200 21.2 +++ b/libext2fs/lib/libblkid/probe.c Sat Oct 09 23:28:01 2021 +0200 21.3 @@ -144,7 +144,7 @@ 21.4 blkid_le32(es->s_feature_incompat), 21.5 blkid_le32(es->s_feature_ro_compat))); 21.6 21.7 - if (strlen(es->s_volume_name)) 21.8 + if (es->s_volume_name[0]) 21.9 label = es->s_volume_name; 21.10 blkid_set_tag(dev, "LABEL", label, sizeof(es->s_volume_name)); 21.11 21.12 @@ -892,12 +892,13 @@ 21.13 struct blkid_magic *id __BLKID_ATTR((unused)), 21.14 unsigned char *buf) 21.15 { 21.16 - char uuid[40]; 21.17 + char uuid[41]; 21.18 21.19 /* 168 is the offset to the 40 character uuid: 21.20 * http://luks.endorphin.org/LUKS-on-disk-format.pdf */ 21.21 strncpy(uuid, (char *) buf+168, 40); 21.22 - blkid_set_tag(probe->dev, "UUID", uuid, sizeof(uuid)); 21.23 + uuid[40] = 0; 21.24 + blkid_set_tag(probe->dev, "UUID", uuid, 40); 21.25 return 0; 21.26 } 21.27 21.28 @@ -1503,24 +1504,25 @@ 21.29 return NULL; 21.30 } 21.31 21.32 -static int probe_exfat(struct blkid_probe *probe, struct blkid_magic *id, 21.33 +static int probe_exfat(struct blkid_probe *probe, 21.34 + struct blkid_magic *id __BLKID_ATTR((unused)), 21.35 unsigned char *buf) 21.36 { 21.37 struct exfat_super_block *sb; 21.38 struct exfat_entry_label *label; 21.39 - uuid_t uuid; 21.40 + char uuid[40]; 21.41 21.42 sb = (struct exfat_super_block *)buf; 21.43 - if (!sb || !CLUSTER_SIZE(sb)) { 21.44 + if (!sb || CLUSTER_SIZE(sb) == 0) { 21.45 DBG(DEBUG_PROBE, printf("bad exfat superblock.\n")); 21.46 return errno ? - errno : 1; 21.47 } 21.48 21.49 label = find_exfat_entry_label(probe, sb); 21.50 if (label) { 21.51 - char utf8_label[128]; 21.52 + unsigned char utf8_label[128]; 21.53 unicode_16le_to_utf8(utf8_label, sizeof(utf8_label), label->name, label->length * 2); 21.54 - blkid_set_tag(probe->dev, "LABEL", utf8_label, 0); 21.55 + blkid_set_tag(probe->dev, "LABEL", (char *) utf8_label, 0); 21.56 } else { 21.57 blkid_set_tag(probe->dev, "LABEL", "disk", 4); 21.58 }
22.1 --- a/libext2fs/lib/libblkid/tst_types.c Sat Oct 02 23:57:02 2021 +0200 22.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 22.3 @@ -1,64 +0,0 @@ 22.4 -/* 22.5 - * This testing program makes sure the blkid_types header file 22.6 - * 22.7 - * Copyright (C) 2006 by Theodore Ts'o. 22.8 - * 22.9 - * %Begin-Header% 22.10 - * This file may be redistributed under the terms of the GNU Public 22.11 - * License. 22.12 - * %End-Header% 22.13 - */ 22.14 - 22.15 -#include "config.h" 22.16 -#include <sys/types.h> 22.17 -#include "blkid/blkid_types.h" 22.18 - 22.19 -#include <stdlib.h> 22.20 -#include <stdio.h> 22.21 - 22.22 -int main(int argc, char **argv) 22.23 -{ 22.24 - if (sizeof(__u8) != 1) { 22.25 - printf("Sizeof(__u8) is %d should be 1\n", 22.26 - (int)sizeof(__u8)); 22.27 - exit(1); 22.28 - } 22.29 - if (sizeof(__s8) != 1) { 22.30 - printf("Sizeof(_s8) is %d should be 1\n", 22.31 - (int)sizeof(__s8)); 22.32 - exit(1); 22.33 - } 22.34 - if (sizeof(__u16) != 2) { 22.35 - printf("Sizeof(__u16) is %d should be 2\n", 22.36 - (int)sizeof(__u16)); 22.37 - exit(1); 22.38 - } 22.39 - if (sizeof(__s16) != 2) { 22.40 - printf("Sizeof(__s16) is %d should be 2\n", 22.41 - (int)sizeof(__s16)); 22.42 - exit(1); 22.43 - } 22.44 - if (sizeof(__u32) != 4) { 22.45 - printf("Sizeof(__u32) is %d should be 4\n", 22.46 - (int)sizeof(__u32)); 22.47 - exit(1); 22.48 - } 22.49 - if (sizeof(__s32) != 4) { 22.50 - printf("Sizeof(__s32) is %d should be 4\n", 22.51 - (int)sizeof(__s32)); 22.52 - exit(1); 22.53 - } 22.54 - if (sizeof(__u64) != 8) { 22.55 - printf("Sizeof(__u64) is %d should be 8\n", 22.56 - (int)sizeof(__u64)); 22.57 - exit(1); 22.58 - } 22.59 - if (sizeof(__s64) != 8) { 22.60 - printf("Sizeof(__s64) is %d should be 8\n", 22.61 - (int)sizeof(__s64)); 22.62 - exit(1); 22.63 - } 22.64 - printf("The blkid_types.h types are correct.\n"); 22.65 - exit(0); 22.66 -} 22.67 -
23.1 --- a/libext2fs/lib/libe2p/Makefile Sat Oct 02 23:57:02 2021 +0200 23.2 +++ b/libext2fs/lib/libe2p/Makefile Sat Oct 09 23:28:01 2021 +0200 23.3 @@ -5,10 +5,11 @@ 23.4 PC_FILENAME = libe2p 23.5 23.6 SRC_C = \ 23.7 - feature.c fgetflags.c fsetflags.c fgetversion.c fsetversion.c \ 23.8 - getflags.c getversion.c hashstr.c iod.c ls.c ljs.c mntopts.c \ 23.9 - parse_num.c pe.c pf.c ps.c setflags.c setversion.c uuid.c \ 23.10 - ostype.c percent.c crypto_mode.c fgetproject.c fsetproject.c 23.11 + crypto_mode.c encoding.c errcode.c feature.c fgetflags.c \ 23.12 + fgetproject.c fgetversion.c fsetflags.c fsetproject.c fsetversion.c \ 23.13 + getflags.c getversion.c hashstr.c iod.c ljs.c ls.c mntopts.c \ 23.14 + ostype.c parse_num.c pe.c percent.c pf.c ps.c setflags.c setversion.c \ 23.15 + uuid.c 23.16 23.17 REQUIRES_LIBS = libet libsupport 23.18
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 24.2 +++ b/libext2fs/lib/libe2p/encoding.c Sat Oct 09 23:28:01 2021 +0200 24.3 @@ -0,0 +1,118 @@ 24.4 +/* 24.5 + * encoding.c --- convert between encoding magic numbers and strings 24.6 + * 24.7 + * Copyright (C) 2018 Collabora Ltd. 24.8 + * 24.9 + * %Begin-Header% 24.10 + * This file may be redistributed under the terms of the GNU Library 24.11 + * General Public License, version 2. 24.12 + * %End-Header% 24.13 + */ 24.14 + 24.15 +#include "config.h" 24.16 +#include <stdio.h> 24.17 +#include <stdlib.h> 24.18 +#include <string.h> 24.19 +#include <ctype.h> 24.20 +#include <errno.h> 24.21 +#include <stdio.h> 24.22 + 24.23 +#include "e2p.h" 24.24 + 24.25 +#define ARRAY_SIZE(array) \ 24.26 + (sizeof(array) / sizeof(array[0])) 24.27 + 24.28 +static const struct { 24.29 + const char *name; 24.30 + __u16 encoding_magic; 24.31 + __u16 default_flags; 24.32 + 24.33 +} ext4_encoding_map[] = { 24.34 + { 24.35 + .encoding_magic = EXT4_ENC_UTF8_12_1, 24.36 + .name = "utf8-12.1", 24.37 + .default_flags = 0, 24.38 + }, 24.39 + { 24.40 + .encoding_magic = EXT4_ENC_UTF8_12_1, 24.41 + .name = "utf8", 24.42 + .default_flags = 0, 24.43 + }, 24.44 +}; 24.45 + 24.46 +static const struct enc_flags { 24.47 + __u16 flag; 24.48 + const char *param; 24.49 +} encoding_flags[] = { 24.50 + { EXT4_ENC_STRICT_MODE_FL, "strict" }, 24.51 +}; 24.52 + 24.53 +/* Return a positive number < 0xff indicating the encoding magic number 24.54 + * or a negative value indicating error. */ 24.55 +int e2p_str2encoding(const char *string) 24.56 +{ 24.57 + unsigned int i; 24.58 + 24.59 + for (i = 0 ; i < ARRAY_SIZE(ext4_encoding_map); i++) 24.60 + if (!strcmp(string, ext4_encoding_map[i].name)) 24.61 + return ext4_encoding_map[i].encoding_magic; 24.62 + 24.63 + return -EINVAL; 24.64 +} 24.65 + 24.66 +/* Return the name of an encoding or NULL */ 24.67 +const char *e2p_encoding2str(int encoding) 24.68 +{ 24.69 + unsigned int i; 24.70 + static char buf[32]; 24.71 + 24.72 + for (i = 0 ; i < ARRAY_SIZE(ext4_encoding_map); i++) 24.73 + if (ext4_encoding_map[i].encoding_magic == encoding) 24.74 + return ext4_encoding_map[i].name; 24.75 + sprintf(buf, "UNKNOWN_ENCODING_%d", encoding); 24.76 + return buf; 24.77 +} 24.78 + 24.79 +int e2p_get_encoding_flags(int encoding) 24.80 +{ 24.81 + unsigned int i; 24.82 + 24.83 + for (i = 0 ; i < ARRAY_SIZE(ext4_encoding_map); i++) 24.84 + if (ext4_encoding_map[i].encoding_magic == encoding) 24.85 + return ext4_encoding_map[i].default_flags; 24.86 + 24.87 + return 0; 24.88 +} 24.89 + 24.90 +int e2p_str2encoding_flags(int encoding, char *param, __u16 *flags) 24.91 +{ 24.92 + char *f = strtok(param, "-"); 24.93 + const struct enc_flags *fl; 24.94 + unsigned int i, neg = 0; 24.95 + 24.96 + if (encoding != EXT4_ENC_UTF8_12_1) 24.97 + return -EINVAL; 24.98 + while (f) { 24.99 + neg = 0; 24.100 + if (!strncmp("no", f, 2)) { 24.101 + neg = 1; 24.102 + f += 2; 24.103 + } 24.104 + 24.105 + for (i = 0; i < ARRAY_SIZE(encoding_flags); i++) { 24.106 + fl = &encoding_flags[i]; 24.107 + if (!strcmp(fl->param, f)) { 24.108 + if (neg) 24.109 + *flags &= ~fl->flag; 24.110 + else 24.111 + *flags |= fl->flag; 24.112 + 24.113 + goto next_flag; 24.114 + } 24.115 + } 24.116 + return -EINVAL; 24.117 + next_flag: 24.118 + f = strtok(NULL, "-"); 24.119 + } 24.120 + return 0; 24.121 +}
25.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 25.2 +++ b/libext2fs/lib/libe2p/errcode.c Sat Oct 09 23:28:01 2021 +0200 25.3 @@ -0,0 +1,47 @@ 25.4 +/* 25.5 + * errcode.c - convert an error code to a string 25.6 + */ 25.7 + 25.8 +#include "config.h" 25.9 +#include <stdio.h> 25.10 +#include <stdlib.h> 25.11 +#include <string.h> 25.12 + 25.13 +static const char *err_string[] = { 25.14 + "", 25.15 + "UNKNOWN", /* 1 */ 25.16 + "EIO", /* 2 */ 25.17 + "ENOMEM", /* 3 */ 25.18 + "EFSBADCRC", /* 4 */ 25.19 + "EFSCORRUPTED", /* 5 */ 25.20 + "ENOSPC", /* 6 */ 25.21 + "ENOKEY", /* 7 */ 25.22 + "EROFS", /* 8 */ 25.23 + "EFBIG", /* 9 */ 25.24 + "EEXIST", /* 10 */ 25.25 + "ERANGE", /* 11 */ 25.26 + "EOVERFLOW", /* 12 */ 25.27 + "EBUSY", /* 13 */ 25.28 + "ENOTDIR", /* 14 */ 25.29 + "ENOTEMPTY", /* 15 */ 25.30 + "ESHUTDOWN", /* 16 */ 25.31 + "EFAULT", /* 17 */ 25.32 +}; 25.33 + 25.34 +#define ARRAY_SIZE(array) \ 25.35 + (sizeof(array) / sizeof(array[0])) 25.36 + 25.37 +/* Return the name of an encoding or NULL */ 25.38 +const char *e2p_errcode2str(int err) 25.39 +{ 25.40 + unsigned int i; 25.41 + static char buf[32]; 25.42 + 25.43 + if (err < ARRAY_SIZE(err_string)) 25.44 + return err_string[err]; 25.45 + 25.46 + sprintf(buf, "UNKNOWN_ERRCODE_%d", err); 25.47 + return buf; 25.48 +} 25.49 + 25.50 +
26.1 --- a/libext2fs/lib/libe2p/feature.c Sat Oct 02 23:57:02 2021 +0200 26.2 +++ b/libext2fs/lib/libe2p/feature.c Sat Oct 09 23:28:01 2021 +0200 26.3 @@ -45,6 +45,10 @@ 26.4 "snapshot_bitmap" }, 26.5 { E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_SPARSE_SUPER2, 26.6 "sparse_super2" }, 26.7 + { E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_FAST_COMMIT, 26.8 + "fast_commit" }, 26.9 + { E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_STABLE_INODES, 26.10 + "stable_inodes" }, 26.11 26.12 { E2P_FEATURE_RO_INCOMPAT, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER, 26.13 "sparse_super" }, 26.14 @@ -109,37 +113,44 @@ 26.15 "inline_data"}, 26.16 { E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_ENCRYPT, 26.17 "encrypt"}, 26.18 + { E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_CASEFOLD, 26.19 + "casefold"}, 26.20 + { E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_CASEFOLD, 26.21 + "fname_encoding"}, 26.22 { 0, 0, 0 }, 26.23 }; 26.24 26.25 static struct feature jrnl_feature_list[] = { 26.26 - { E2P_FEATURE_COMPAT, JFS_FEATURE_COMPAT_CHECKSUM, 26.27 + { E2P_FEATURE_COMPAT, JBD2_FEATURE_COMPAT_CHECKSUM, 26.28 "journal_checksum" }, 26.29 26.30 - { E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_REVOKE, 26.31 + { E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_REVOKE, 26.32 "journal_incompat_revoke" }, 26.33 - { E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_64BIT, 26.34 + { E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_64BIT, 26.35 "journal_64bit" }, 26.36 - { E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_ASYNC_COMMIT, 26.37 + { E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT, 26.38 "journal_async_commit" }, 26.39 - { E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_CSUM_V2, 26.40 + { E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_CSUM_V2, 26.41 "journal_checksum_v2" }, 26.42 - { E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_CSUM_V3, 26.43 + { E2P_FEATURE_INCOMPAT, JBD2_FEATURE_INCOMPAT_CSUM_V3, 26.44 "journal_checksum_v3" }, 26.45 { 0, 0, 0 }, 26.46 }; 26.47 26.48 -const char *e2p_feature2string(int compat, unsigned int mask) 26.49 +void e2p_feature_to_string(int compat, unsigned int mask, char *buf, 26.50 + size_t buf_len) 26.51 { 26.52 struct feature *f; 26.53 - static char buf[20]; 26.54 char fchar; 26.55 int fnum; 26.56 26.57 for (f = feature_list; f->string; f++) { 26.58 if ((compat == f->compat) && 26.59 - (mask == f->mask)) 26.60 - return f->string; 26.61 + (mask == f->mask)) { 26.62 + strncpy(buf, f->string, buf_len); 26.63 + buf[buf_len - 1] = 0; 26.64 + return; 26.65 + } 26.66 } 26.67 switch (compat) { 26.68 case E2P_FEATURE_COMPAT: 26.69 @@ -157,6 +168,13 @@ 26.70 } 26.71 for (fnum = 0; mask >>= 1; fnum++); 26.72 sprintf(buf, "FEATURE_%c%d", fchar, fnum); 26.73 +} 26.74 + 26.75 +const char *e2p_feature2string(int compat, unsigned int mask) 26.76 +{ 26.77 + static char buf[20]; 26.78 + 26.79 + e2p_feature_to_string(compat, mask, buf, sizeof(buf) / sizeof(buf[0])); 26.80 return buf; 26.81 } 26.82
27.1 --- a/libext2fs/lib/libe2p/fgetflags.c Sat Oct 02 23:57:02 2021 +0200 27.2 +++ b/libext2fs/lib/libe2p/fgetflags.c Sat Oct 09 23:28:01 2021 +0200 27.3 @@ -39,11 +39,14 @@ 27.4 27.5 #include "e2p.h" 27.6 27.7 -#ifdef O_LARGEFILE 27.8 -#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE) 27.9 -#else 27.10 -#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) 27.11 +#ifndef O_LARGEFILE 27.12 +#define O_LARGEFILE 0 27.13 #endif 27.14 +#ifndef O_NOFOLLOW 27.15 +#define O_NOFOLLOW 0 27.16 +#endif 27.17 + 27.18 +#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_NOFOLLOW) 27.19 27.20 int fgetflags (const char * name, unsigned long * flags) 27.21 { 27.22 @@ -68,35 +71,35 @@ 27.23 #endif 27.24 27.25 return 0; 27.26 -#else /* !HAVE_STAT_FLAGS || (APPLE_DARWIN && HAVE_EXT2_IOCTLS) */ 27.27 -#if HAVE_EXT2_IOCTLS 27.28 +#elif APPLE_DARWIN && HAVE_EXT2_IOCTLS 27.29 + int f, save_errno = 0; 27.30 + 27.31 + f = -1; 27.32 + save_errno = syscall(SYS_fsctl, name, EXT2_IOC_GETFLAGS, &f, 0); 27.33 + *flags = f; 27.34 + return (save_errno); 27.35 +#elif HAVE_EXT2_IOCTLS 27.36 int fd, r, f, save_errno = 0; 27.37 27.38 - if (!lstat(name, &buf) && 27.39 - !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { 27.40 - goto notsupp; 27.41 + fd = open(name, OPEN_FLAGS); 27.42 + if (fd == -1) { 27.43 + if (errno == ELOOP || errno == ENXIO) 27.44 + errno = EOPNOTSUPP; 27.45 + return -1; 27.46 } 27.47 -#if !APPLE_DARWIN 27.48 - fd = open (name, OPEN_FLAGS); 27.49 - if (fd == -1) 27.50 - return -1; 27.51 - r = ioctl (fd, EXT2_IOC_GETFLAGS, &f); 27.52 - if (r == -1) 27.53 + r = ioctl(fd, EXT2_IOC_GETFLAGS, &f); 27.54 + if (r == -1) { 27.55 + if (errno == ENOTTY) 27.56 + errno = EOPNOTSUPP; 27.57 save_errno = errno; 27.58 + } 27.59 *flags = f; 27.60 - close (fd); 27.61 + close(fd); 27.62 if (save_errno) 27.63 errno = save_errno; 27.64 return r; 27.65 -#else /* APPLE_DARWIN */ 27.66 - f = -1; 27.67 - save_errno = syscall(SYS_fsctl, name, EXT2_IOC_GETFLAGS, &f, 0); 27.68 - *flags = f; 27.69 - return (save_errno); 27.70 -#endif /* !APPLE_DARWIN */ 27.71 -notsupp: 27.72 -#endif /* HAVE_EXT2_IOCTLS */ 27.73 -#endif 27.74 +#else 27.75 errno = EOPNOTSUPP; 27.76 return -1; 27.77 +#endif 27.78 }
28.1 --- a/libext2fs/lib/libe2p/fsetflags.c Sat Oct 02 23:57:02 2021 +0200 28.2 +++ b/libext2fs/lib/libe2p/fsetflags.c Sat Oct 09 23:28:01 2021 +0200 28.3 @@ -48,11 +48,14 @@ 28.4 #undef HAVE_CHFLAGS 28.5 #endif 28.6 28.7 -#ifdef O_LARGEFILE 28.8 -#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE) 28.9 -#else 28.10 -#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) 28.11 +#ifndef O_LARGEFILE 28.12 +#define O_LARGEFILE 0 28.13 #endif 28.14 +#ifndef O_NOFOLLOW 28.15 +#define O_NOFOLLOW 0 28.16 +#endif 28.17 + 28.18 +#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_NOFOLLOW) 28.19 28.20 int fsetflags (const char * name, unsigned long flags) 28.21 { 28.22 @@ -73,35 +76,32 @@ 28.23 #endif 28.24 28.25 return chflags (name, bsd_flags); 28.26 -#else /* !HAVE_CHFLAGS || (APPLE_DARWIN && HAVE_EXT2_IOCTLS) */ 28.27 -#if HAVE_EXT2_IOCTLS 28.28 +#elif APPLE_DARWIN && HAVE_EXT2_IOCTLS 28.29 + int f = (int) flags; 28.30 + return syscall(SYS_fsctl, name, EXT2_IOC_SETFLAGS, &f, 0); 28.31 +#elif HAVE_EXT2_IOCTLS 28.32 int fd, r, f, save_errno = 0; 28.33 struct stat buf; 28.34 28.35 - if (!lstat(name, &buf) && 28.36 - !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { 28.37 - goto notsupp; 28.38 + fd = open(name, OPEN_FLAGS); 28.39 + if (fd == -1) { 28.40 + if (errno == ELOOP || errno == ENXIO) 28.41 + errno = EOPNOTSUPP; 28.42 + return -1; 28.43 } 28.44 -#if !APPLE_DARWIN 28.45 - fd = open (name, OPEN_FLAGS); 28.46 - if (fd == -1) 28.47 - return -1; 28.48 f = (int) flags; 28.49 - r = ioctl (fd, EXT2_IOC_SETFLAGS, &f); 28.50 - if (r == -1) 28.51 + r = ioctl(fd, EXT2_IOC_SETFLAGS, &f); 28.52 + if (r == -1) { 28.53 + if (errno == ENOTTY) 28.54 + errno = EOPNOTSUPP; 28.55 save_errno = errno; 28.56 - close (fd); 28.57 + } 28.58 + close(fd); 28.59 if (save_errno) 28.60 errno = save_errno; 28.61 -#else /* APPLE_DARWIN */ 28.62 - f = (int) flags; 28.63 - return syscall(SYS_fsctl, name, EXT2_IOC_SETFLAGS, &f, 0); 28.64 -#endif /* !APPLE_DARWIN */ 28.65 return r; 28.66 - 28.67 -notsupp: 28.68 -#endif /* HAVE_EXT2_IOCTLS */ 28.69 -#endif 28.70 +#else 28.71 errno = EOPNOTSUPP; 28.72 return -1; 28.73 +#endif 28.74 }
29.1 --- a/libext2fs/lib/libe2p/ljs.c Sat Oct 02 23:57:02 2021 +0200 29.2 +++ b/libext2fs/lib/libe2p/ljs.c Sat Oct 09 23:28:01 2021 +0200 29.3 @@ -36,6 +36,17 @@ 29.4 #define e2p_be32(x) e2p_swab32(x) 29.5 #endif 29.6 29.7 +/* 29.8 + * This function is copied from kernel-jbd.h's function 29.9 + * jbd2_journal_get_num_fc_blks() to avoid inter-library dependencies. 29.10 + */ 29.11 +static inline int get_num_fc_blks(journal_superblock_t *jsb) 29.12 +{ 29.13 + int num_fc_blocks = e2p_be32(jsb->s_num_fc_blks); 29.14 + 29.15 + return num_fc_blocks ? num_fc_blocks : JBD2_DEFAULT_FAST_COMMIT_BLOCKS; 29.16 +} 29.17 + 29.18 static const char *journal_checksum_type_str(__u8 type) 29.19 { 29.20 switch (type) { 29.21 @@ -54,7 +65,12 @@ 29.22 unsigned int size; 29.23 int j, printed = 0; 29.24 unsigned int i, nr_users; 29.25 + int num_fc_blks = 0; 29.26 + int journal_blks = 0; 29.27 29.28 + if (flags & E2P_LIST_JOURNAL_FLAG_FC) 29.29 + num_fc_blks = get_num_fc_blks((journal_superblock_t *)journal_sb_buf); 29.30 + journal_blks = ntohl(jsb->s_maxlen) - num_fc_blks; 29.31 fprintf(f, "%s", "Journal features: "); 29.32 for (i=0, mask_ptr=&jsb->s_feature_compat; i <3; i++,mask_ptr++) { 29.33 mask = e2p_be32(*mask_ptr); 29.34 @@ -68,7 +84,7 @@ 29.35 if (printed == 0) 29.36 fprintf(f, " (none)"); 29.37 fputc('\n', f); 29.38 - fputs("Journal size: ", f); 29.39 + fputs("Total journal size: ", f); 29.40 size = (ntohl(jsb->s_blocksize) / 1024) * ntohl(jsb->s_maxlen); 29.41 if (size < 8192) 29.42 fprintf(f, "%uk\n", size); 29.43 @@ -78,8 +94,13 @@ 29.44 if (exp_block_size != (int) ntohl(jsb->s_blocksize)) 29.45 fprintf(f, "Journal block size: %u\n", 29.46 (unsigned int)ntohl(jsb->s_blocksize)); 29.47 - fprintf(f, "Journal length: %u\n", 29.48 - (unsigned int)ntohl(jsb->s_maxlen)); 29.49 + fprintf(f, "Total journal blocks: %u\n", 29.50 + (unsigned int)(journal_blks + num_fc_blks)); 29.51 + fprintf(f, "Max transaction length: %u\n", 29.52 + (unsigned int)journal_blks); 29.53 + fprintf(f, "Fast commit length: %u\n", 29.54 + (unsigned int)num_fc_blks); 29.55 + 29.56 if (ntohl(jsb->s_first) != 1) 29.57 fprintf(f, "Journal first block: %u\n", 29.58 (unsigned int)ntohl(jsb->s_first)); 29.59 @@ -89,19 +110,19 @@ 29.60 (unsigned int)ntohl(jsb->s_start)); 29.61 if (nr_users != 1) 29.62 fprintf(f, "Journal number of users: %u\n", nr_users); 29.63 - if (jsb->s_feature_compat & e2p_be32(JFS_FEATURE_COMPAT_CHECKSUM)) 29.64 + if (jsb->s_feature_compat & e2p_be32(JBD2_FEATURE_COMPAT_CHECKSUM)) 29.65 fprintf(f, "%s", "Journal checksum type: crc32\n"); 29.66 if ((jsb->s_feature_incompat & 29.67 - e2p_be32(JFS_FEATURE_INCOMPAT_CSUM_V3)) || 29.68 + e2p_be32(JBD2_FEATURE_INCOMPAT_CSUM_V3)) || 29.69 (jsb->s_feature_incompat & 29.70 - e2p_be32(JFS_FEATURE_INCOMPAT_CSUM_V2))) 29.71 + e2p_be32(JBD2_FEATURE_INCOMPAT_CSUM_V2))) 29.72 fprintf(f, "Journal checksum type: %s\n" 29.73 "Journal checksum: 0x%08x\n", 29.74 journal_checksum_type_str(jsb->s_checksum_type), 29.75 e2p_be32(jsb->s_checksum)); 29.76 if ((nr_users > 1) || 29.77 !e2p_is_null_uuid(&jsb->s_users[0])) { 29.78 - for (i=0; i < nr_users && i < JFS_USERS_MAX; i++) { 29.79 + for (i=0; i < nr_users && i < JBD2_USERS_MAX; i++) { 29.80 printf(i ? " %s\n" 29.81 : "Journal users: %s\n", 29.82 e2p_uuid2str(&jsb->s_users[i * UUID_SIZE]));
30.1 --- a/libext2fs/lib/libe2p/ls.c Sat Oct 02 23:57:02 2021 +0200 30.2 +++ b/libext2fs/lib/libe2p/ls.c Sat Oct 09 23:28:01 2021 +0200 30.3 @@ -224,7 +224,7 @@ 30.4 void list_super2(struct ext2_super_block * sb, FILE *f) 30.5 { 30.6 int inode_blocks_per_group; 30.7 - char buf[80], *str; 30.8 + char *str; 30.9 time_t tm; 30.10 enum quota_type qtype; 30.11 30.12 @@ -232,18 +232,16 @@ 30.13 EXT2_INODE_SIZE(sb)) + 30.14 EXT2_BLOCK_SIZE(sb) - 1) / 30.15 EXT2_BLOCK_SIZE(sb)); 30.16 - if (sb->s_volume_name[0]) { 30.17 - memset(buf, 0, sizeof(buf)); 30.18 - strncpy(buf, sb->s_volume_name, sizeof(sb->s_volume_name)); 30.19 - } else 30.20 - strcpy(buf, "<none>"); 30.21 - fprintf(f, "Filesystem volume name: %s\n", buf); 30.22 - if (sb->s_last_mounted[0]) { 30.23 - memset(buf, 0, sizeof(buf)); 30.24 - strncpy(buf, sb->s_last_mounted, sizeof(sb->s_last_mounted)); 30.25 - } else 30.26 - strcpy(buf, "<not available>"); 30.27 - fprintf(f, "Last mounted on: %s\n", buf); 30.28 + if (sb->s_volume_name[0]) 30.29 + fprintf(f, "Filesystem volume name: %.*s\n", 30.30 + EXT2_LEN_STR(sb->s_volume_name)); 30.31 + else 30.32 + fprintf(f, "Filesystem volume name: <none>\n"); 30.33 + if (sb->s_last_mounted[0]) 30.34 + fprintf(f, "Last mounted on: %.*s\n", 30.35 + EXT2_LEN_STR(sb->s_last_mounted)); 30.36 + else 30.37 + fprintf(f, "Last mounted on: <not available>\n"); 30.38 fprintf(f, "Filesystem UUID: %s\n", e2p_uuid2str(sb->s_uuid)); 30.39 fprintf(f, "Filesystem magic number: 0x%04X\n", sb->s_magic); 30.40 fprintf(f, "Filesystem revision #: %d", sb->s_rev_level); 30.41 @@ -259,7 +257,8 @@ 30.42 print_super_flags(sb, f); 30.43 print_mntopts(sb, f); 30.44 if (sb->s_mount_opts[0]) 30.45 - fprintf(f, "Mount options: %s\n", sb->s_mount_opts); 30.46 + fprintf(f, "Mount options: %.*s\n", 30.47 + EXT2_LEN_STR(sb->s_mount_opts)); 30.48 fprintf(f, "Filesystem state: "); 30.49 print_fs_state (f, sb->s_state); 30.50 fprintf(f, "\n"); 30.51 @@ -270,12 +269,15 @@ 30.52 fprintf(f, "Filesystem OS type: %s\n", str); 30.53 free(str); 30.54 fprintf(f, "Inode count: %u\n", sb->s_inodes_count); 30.55 - fprintf(f, "Block count: %llu\n", e2p_blocks_count(sb)); 30.56 - fprintf(f, "Reserved block count: %llu\n", e2p_r_blocks_count(sb)); 30.57 - if (sb->s_overhead_blocks) 30.58 - fprintf(f, "Overhead blocks: %u\n", 30.59 - sb->s_overhead_blocks); 30.60 - fprintf(f, "Free blocks: %llu\n", e2p_free_blocks_count(sb)); 30.61 + fprintf(f, "Block count: %llu\n", 30.62 + (unsigned long long) e2p_blocks_count(sb)); 30.63 + fprintf(f, "Reserved block count: %llu\n", 30.64 + (unsigned long long) e2p_r_blocks_count(sb)); 30.65 + if (sb->s_overhead_clusters) 30.66 + fprintf(f, "Overhead clusters: %u\n", 30.67 + sb->s_overhead_clusters); 30.68 + fprintf(f, "Free blocks: %llu\n", 30.69 + (unsigned long long) e2p_free_blocks_count(sb)); 30.70 fprintf(f, "Free inodes: %u\n", sb->s_free_inodes_count); 30.71 fprintf(f, "First block: %u\n", sb->s_first_data_block); 30.72 fprintf(f, "Block size: %u\n", EXT2_BLOCK_SIZE(sb)); 30.73 @@ -337,18 +339,19 @@ 30.74 if (sb->s_kbytes_written) { 30.75 fprintf(f, "Lifetime writes: "); 30.76 if (sb->s_kbytes_written < POW2(13)) 30.77 - fprintf(f, "%llu kB\n", sb->s_kbytes_written); 30.78 + fprintf(f, "%llu kB\n", 30.79 + (unsigned long long) sb->s_kbytes_written); 30.80 else if (sb->s_kbytes_written < POW2(23)) 30.81 - fprintf(f, "%llu MB\n", 30.82 - (sb->s_kbytes_written + POW2(9)) >> 10); 30.83 + fprintf(f, "%llu MB\n", (unsigned long long) 30.84 + (sb->s_kbytes_written + POW2(9)) >> 10); 30.85 else if (sb->s_kbytes_written < POW2(33)) 30.86 - fprintf(f, "%llu GB\n", 30.87 + fprintf(f, "%llu GB\n", (unsigned long long) 30.88 (sb->s_kbytes_written + POW2(19)) >> 20); 30.89 else if (sb->s_kbytes_written < POW2(43)) 30.90 - fprintf(f, "%llu TB\n", 30.91 + fprintf(f, "%llu TB\n", (unsigned long long) 30.92 (sb->s_kbytes_written + POW2(29)) >> 30); 30.93 else 30.94 - fprintf(f, "%llu PB\n", 30.95 + fprintf(f, "%llu PB\n", (unsigned long long) 30.96 (sb->s_kbytes_written + POW2(39)) >> 40); 30.97 } 30.98 fprintf(f, "Reserved blocks uid: "); 30.99 @@ -408,7 +411,7 @@ 30.100 fprintf(f, "Snapshot ID: %u\n", 30.101 sb->s_snapshot_id); 30.102 fprintf(f, "Snapshot reserved blocks: %llu\n", 30.103 - sb->s_snapshot_r_blocks_count); 30.104 + (unsigned long long) sb->s_snapshot_r_blocks_count); 30.105 } 30.106 if (sb->s_snapshot_list) 30.107 fprintf(f, "Snapshot list head: %u\n", 30.108 @@ -419,34 +422,40 @@ 30.109 if (sb->s_first_error_time) { 30.110 tm = sb->s_first_error_time; 30.111 fprintf(f, "First error time: %s", ctime(&tm)); 30.112 - memset(buf, 0, sizeof(buf)); 30.113 - strncpy(buf, (char *)sb->s_first_error_func, 30.114 - sizeof(sb->s_first_error_func)); 30.115 - fprintf(f, "First error function: %s\n", buf); 30.116 + fprintf(f, "First error function: %.*s\n", 30.117 + EXT2_LEN_STR(sb->s_first_error_func)); 30.118 fprintf(f, "First error line #: %u\n", 30.119 sb->s_first_error_line); 30.120 - fprintf(f, "First error inode #: %u\n", 30.121 - sb->s_first_error_ino); 30.122 - fprintf(f, "First error block #: %llu\n", 30.123 - sb->s_first_error_block); 30.124 + if (sb->s_first_error_ino) 30.125 + fprintf(f, "First error inode #: %u\n", 30.126 + sb->s_first_error_ino); 30.127 + if (sb->s_first_error_block) 30.128 + fprintf(f, "First error block #: %llu\n", 30.129 + (unsigned long long) sb->s_first_error_block); 30.130 + if (sb->s_first_error_errcode) 30.131 + fprintf(f, "First error err: %s\n", 30.132 + e2p_errcode2str(sb->s_first_error_errcode)); 30.133 } 30.134 if (sb->s_last_error_time) { 30.135 tm = sb->s_last_error_time; 30.136 fprintf(f, "Last error time: %s", ctime(&tm)); 30.137 - memset(buf, 0, sizeof(buf)); 30.138 - strncpy(buf, (char *)sb->s_last_error_func, 30.139 - sizeof(sb->s_last_error_func)); 30.140 - fprintf(f, "Last error function: %s\n", buf); 30.141 + fprintf(f, "Last error function: %.*s\n", 30.142 + EXT2_LEN_STR(sb->s_last_error_func)); 30.143 fprintf(f, "Last error line #: %u\n", 30.144 sb->s_last_error_line); 30.145 - fprintf(f, "Last error inode #: %u\n", 30.146 - sb->s_last_error_ino); 30.147 - fprintf(f, "Last error block #: %llu\n", 30.148 - sb->s_last_error_block); 30.149 + if (sb->s_last_error_ino) 30.150 + fprintf(f, "Last error inode #: %u\n", 30.151 + sb->s_last_error_ino); 30.152 + if (sb->s_last_error_block) 30.153 + fprintf(f, "Last error block #: %llu\n", 30.154 + (unsigned long long) sb->s_last_error_block); 30.155 + if (sb->s_last_error_errcode) 30.156 + fprintf(f, "Last error err: %s\n", 30.157 + e2p_errcode2str(sb->s_last_error_errcode)); 30.158 } 30.159 if (ext2fs_has_feature_mmp(sb)) { 30.160 fprintf(f, "MMP block number: %llu\n", 30.161 - (long long)sb->s_mmp_block); 30.162 + (unsigned long long) sb->s_mmp_block); 30.163 fprintf(f, "MMP update interval: %u\n", 30.164 sb->s_mmp_update_interval); 30.165 } 30.166 @@ -470,6 +479,9 @@ 30.167 if (ext2fs_has_feature_csum_seed(sb)) 30.168 fprintf(f, "Checksum seed: 0x%08x\n", 30.169 sb->s_checksum_seed); 30.170 + if (ext2fs_has_feature_casefold(sb)) 30.171 + fprintf(f, "Character encoding: %s\n", 30.172 + e2p_encoding2str(sb->s_encoding)); 30.173 } 30.174 30.175 void list_super (struct ext2_super_block * s)
31.1 --- a/libext2fs/lib/libe2p/pf.c Sat Oct 02 23:57:02 2021 +0200 31.2 +++ b/libext2fs/lib/libe2p/pf.c Sat Oct 09 23:28:01 2021 +0200 31.3 @@ -44,9 +44,12 @@ 31.4 { EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" }, 31.5 { EXT4_EXTENTS_FL, "e", "Extents" }, 31.6 { FS_NOCOW_FL, "C", "No_COW" }, 31.7 + { FS_DAX_FL, "x", "DAX" }, 31.8 + { EXT4_CASEFOLD_FL, "F", "Casefold" }, 31.9 { EXT4_INLINE_DATA_FL, "N", "Inline_Data" }, 31.10 { EXT4_PROJINHERIT_FL, "P", "Project_Hierarchy" }, 31.11 { EXT4_VERITY_FL, "V", "Verity" }, 31.12 + { EXT2_NOCOMPR_FL, "m", "Dont_Compress" }, 31.13 { 0, NULL, NULL } 31.14 }; 31.15 31.16 @@ -74,4 +77,3 @@ 31.17 if (long_opt && first) 31.18 fputs("---", f); 31.19 } 31.20 -
32.1 --- a/libext2fs/lib/libet/error_message.c Sat Oct 02 23:57:02 2021 +0200 32.2 +++ b/libext2fs/lib/libet/error_message.c Sat Oct 09 23:28:01 2021 +0200 32.3 @@ -113,6 +113,11 @@ 32.4 return x; 32.5 } 32.6 32.7 +#ifdef __GNU__ 32.8 +#define SYS_ERR_BASE 0x40000000 32.9 +#else 32.10 +#define SYS_ERR_BASE 0 32.11 +#endif 32.12 32.13 const char * error_message (errcode_t code) 32.14 { 32.15 @@ -124,14 +129,14 @@ 32.16 32.17 offset = (int) (code & ((1<<ERRCODE_RANGE)-1)); 32.18 table_num = code - offset; 32.19 - if (!table_num) { 32.20 + if (table_num == SYS_ERR_BASE) { 32.21 #ifdef HAS_SYS_ERRLIST 32.22 - if (offset < sys_nerr) 32.23 - return(sys_errlist[offset]); 32.24 + if (code < sys_nerr) 32.25 + return(sys_errlist[code]); 32.26 else 32.27 goto oops; 32.28 #else 32.29 - cp = strerror(offset); 32.30 + cp = strerror(code); 32.31 if (cp) 32.32 return(cp); 32.33 else
33.1 --- a/libext2fs/lib/libext2fs/Makefile Sat Oct 02 23:57:02 2021 +0200 33.2 +++ b/libext2fs/lib/libext2fs/Makefile Sat Oct 09 23:28:01 2021 +0200 33.3 @@ -24,6 +24,7 @@ 33.4 blknum.c \ 33.5 block.c \ 33.6 bmap.c \ 33.7 + brel_ma.c \ 33.8 check_desc.c \ 33.9 closefs.c \ 33.10 crc16.c \ 33.11 @@ -37,6 +38,7 @@ 33.12 dir_iterate.c \ 33.13 dupfs.c \ 33.14 expanddir.c \ 33.15 + ext2_err.c \ 33.16 ext_attr.c \ 33.17 extent.c \ 33.18 fallocate.c \ 33.19 @@ -69,6 +71,7 @@ 33.20 namei.c \ 33.21 native.c \ 33.22 newdir.c \ 33.23 + nls_utf8.c \ 33.24 openfs.c \ 33.25 progress.c \ 33.26 punch.c \ 33.27 @@ -79,12 +82,15 @@ 33.28 rw_bitmaps.c \ 33.29 sha256.c \ 33.30 sha512.c \ 33.31 + swapfs.c \ 33.32 symlink.c \ 33.33 unix_io.c \ 33.34 unlink.c \ 33.35 valid_blk.c \ 33.36 version.c \ 33.37 - write_bb_file.c 33.38 + write_bb_file.c \ 33.39 + 33.40 +# NOTE: Used only for pre-build purposes and excluded above: gen_crc32ctable.c 33.41 33.42 #$(TARGET): gen_crc32ctable 33.43
34.1 --- a/libext2fs/lib/libext2fs/bitmaps.c Sat Oct 02 23:57:02 2021 +0200 34.2 +++ b/libext2fs/lib/libext2fs/bitmaps.c Sat Oct 09 23:28:01 2021 +0200 34.3 @@ -62,7 +62,8 @@ 34.4 34.5 start = 1; 34.6 end = fs->super->s_inodes_count; 34.7 - real_end = (EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count); 34.8 + real_end = (__u64)EXT2_INODES_PER_GROUP(fs->super) * 34.9 + fs->group_desc_count; 34.10 34.11 /* Are we permitted to use new-style bitmaps? */ 34.12 if (fs->flags & EXT2_FLAG_64BITS) 34.13 @@ -125,6 +126,7 @@ 34.14 { 34.15 __u64 start, end, real_end; 34.16 ext2fs_generic_bitmap bmap; 34.17 + ext2fs_generic_bitmap_64 bmap64; 34.18 errcode_t retval; 34.19 34.20 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 34.21 @@ -147,14 +149,15 @@ 34.22 end, real_end, descr, &bmap); 34.23 if (retval) 34.24 return retval; 34.25 - bmap->cluster_bits = 0; 34.26 + bmap64 = (ext2fs_generic_bitmap_64) bmap; 34.27 + bmap64->cluster_bits = 0; 34.28 *ret = bmap; 34.29 return 0; 34.30 } 34.31 34.32 int ext2fs_get_bitmap_granularity(ext2fs_block_bitmap bitmap) 34.33 { 34.34 - ext2fs_generic_bitmap bmap = bitmap; 34.35 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) bitmap; 34.36 34.37 if (!EXT2FS_IS_64_BITMAP(bmap)) 34.38 return 0;
35.1 --- a/libext2fs/lib/libext2fs/blkmap64_ba.c Sat Oct 02 23:57:02 2021 +0200 35.2 +++ b/libext2fs/lib/libext2fs/blkmap64_ba.c Sat Oct 09 23:28:01 2021 +0200 35.3 @@ -40,7 +40,7 @@ 35.4 35.5 typedef struct ext2fs_ba_private_struct *ext2fs_ba_private; 35.6 35.7 -static errcode_t ba_alloc_private_data (ext2fs_generic_bitmap bitmap) 35.8 +static errcode_t ba_alloc_private_data (ext2fs_generic_bitmap_64 bitmap) 35.9 { 35.10 ext2fs_ba_private bp; 35.11 errcode_t retval; 35.12 @@ -69,7 +69,7 @@ 35.13 } 35.14 35.15 static errcode_t ba_new_bmap(ext2_filsys fs EXT2FS_ATTR((unused)), 35.16 - ext2fs_generic_bitmap bitmap) 35.17 + ext2fs_generic_bitmap_64 bitmap) 35.18 { 35.19 ext2fs_ba_private bp; 35.20 errcode_t retval; 35.21 @@ -86,7 +86,7 @@ 35.22 return 0; 35.23 } 35.24 35.25 -static void ba_free_bmap(ext2fs_generic_bitmap bitmap) 35.26 +static void ba_free_bmap(ext2fs_generic_bitmap_64 bitmap) 35.27 { 35.28 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.29 35.30 @@ -101,8 +101,8 @@ 35.31 bp = 0; 35.32 } 35.33 35.34 -static errcode_t ba_copy_bmap(ext2fs_generic_bitmap src, 35.35 - ext2fs_generic_bitmap dest) 35.36 +static errcode_t ba_copy_bmap(ext2fs_generic_bitmap_64 src, 35.37 + ext2fs_generic_bitmap_64 dest) 35.38 { 35.39 ext2fs_ba_private src_bp = (ext2fs_ba_private) src->private; 35.40 ext2fs_ba_private dest_bp; 35.41 @@ -121,7 +121,7 @@ 35.42 return 0; 35.43 } 35.44 35.45 -static errcode_t ba_resize_bmap(ext2fs_generic_bitmap bmap, 35.46 +static errcode_t ba_resize_bmap(ext2fs_generic_bitmap_64 bmap, 35.47 __u64 new_end, __u64 new_real_end) 35.48 { 35.49 ext2fs_ba_private bp = (ext2fs_ba_private) bmap->private; 35.50 @@ -162,7 +162,7 @@ 35.51 35.52 } 35.53 35.54 -static int ba_mark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg) 35.55 +static int ba_mark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg) 35.56 { 35.57 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.58 blk64_t bitno = (blk64_t) arg; 35.59 @@ -170,7 +170,7 @@ 35.60 return ext2fs_set_bit64(bitno - bitmap->start, bp->bitarray); 35.61 } 35.62 35.63 -static int ba_unmark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg) 35.64 +static int ba_unmark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg) 35.65 { 35.66 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.67 blk64_t bitno = (blk64_t) arg; 35.68 @@ -178,7 +178,7 @@ 35.69 return ext2fs_clear_bit64(bitno - bitmap->start, bp->bitarray); 35.70 } 35.71 35.72 -static int ba_test_bmap(ext2fs_generic_bitmap bitmap, __u64 arg) 35.73 +static int ba_test_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg) 35.74 { 35.75 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.76 blk64_t bitno = (blk64_t) arg; 35.77 @@ -186,7 +186,7 @@ 35.78 return ext2fs_test_bit64(bitno - bitmap->start, bp->bitarray); 35.79 } 35.80 35.81 -static void ba_mark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg, 35.82 +static void ba_mark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg, 35.83 unsigned int num) 35.84 { 35.85 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.86 @@ -197,7 +197,7 @@ 35.87 ext2fs_fast_set_bit64(bitno + i - bitmap->start, bp->bitarray); 35.88 } 35.89 35.90 -static void ba_unmark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg, 35.91 +static void ba_unmark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg, 35.92 unsigned int num) 35.93 { 35.94 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.95 @@ -208,7 +208,7 @@ 35.96 ext2fs_fast_clear_bit64(bitno + i - bitmap->start, bp->bitarray); 35.97 } 35.98 35.99 -static int ba_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap, 35.100 +static int ba_test_clear_bmap_extent(ext2fs_generic_bitmap_64 bitmap, 35.101 __u64 start, unsigned int len) 35.102 { 35.103 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.104 @@ -282,7 +282,7 @@ 35.105 } 35.106 35.107 35.108 -static errcode_t ba_set_bmap_range(ext2fs_generic_bitmap bitmap, 35.109 +static errcode_t ba_set_bmap_range(ext2fs_generic_bitmap_64 bitmap, 35.110 __u64 start, size_t num, void *in) 35.111 { 35.112 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.113 @@ -292,7 +292,7 @@ 35.114 return 0; 35.115 } 35.116 35.117 -static errcode_t ba_get_bmap_range(ext2fs_generic_bitmap bitmap, 35.118 +static errcode_t ba_get_bmap_range(ext2fs_generic_bitmap_64 bitmap, 35.119 __u64 start, size_t num, void *out) 35.120 { 35.121 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.122 @@ -302,7 +302,7 @@ 35.123 return 0; 35.124 } 35.125 35.126 -static void ba_clear_bmap(ext2fs_generic_bitmap bitmap) 35.127 +static void ba_clear_bmap(ext2fs_generic_bitmap_64 bitmap) 35.128 { 35.129 ext2fs_ba_private bp = (ext2fs_ba_private) bitmap->private; 35.130 35.131 @@ -311,20 +311,20 @@ 35.132 } 35.133 35.134 #ifdef ENABLE_BMAP_STATS 35.135 -static void ba_print_stats(ext2fs_generic_bitmap bitmap) 35.136 +static void ba_print_stats(ext2fs_generic_bitmap_64 bitmap) 35.137 { 35.138 - fprintf(stderr, "%16llu Bytes used by bitarray\n", 35.139 + fprintf(stderr, "%16llu Bytes used by bitarray\n", (unsigned long long) 35.140 ((bitmap->real_end - bitmap->start) >> 3) + 1 + 35.141 sizeof(struct ext2fs_ba_private_struct)); 35.142 } 35.143 #else 35.144 -static void ba_print_stats(ext2fs_generic_bitmap bitmap EXT2FS_ATTR((unused))) 35.145 +static void ba_print_stats(ext2fs_generic_bitmap_64 bitmap EXT2FS_ATTR((unused))) 35.146 { 35.147 } 35.148 #endif 35.149 35.150 /* Find the first zero bit between start and end, inclusive. */ 35.151 -static errcode_t ba_find_first_zero(ext2fs_generic_bitmap bitmap, 35.152 +static errcode_t ba_find_first_zero(ext2fs_generic_bitmap_64 bitmap, 35.153 __u64 start, __u64 end, __u64 *out) 35.154 { 35.155 ext2fs_ba_private bp = (ext2fs_ba_private)bitmap->private; 35.156 @@ -398,7 +398,7 @@ 35.157 } 35.158 35.159 /* Find the first one bit between start and end, inclusive. */ 35.160 -static errcode_t ba_find_first_set(ext2fs_generic_bitmap bitmap, 35.161 +static errcode_t ba_find_first_set(ext2fs_generic_bitmap_64 bitmap, 35.162 __u64 start, __u64 end, __u64 *out) 35.163 { 35.164 ext2fs_ba_private bp = (ext2fs_ba_private)bitmap->private;
36.1 --- a/libext2fs/lib/libext2fs/blkmap64_rb.c Sat Oct 02 23:57:02 2021 +0200 36.2 +++ b/libext2fs/lib/libext2fs/blkmap64_rb.c Sat Oct 09 23:28:01 2021 +0200 36.3 @@ -80,7 +80,8 @@ 36.4 node = ext2fs_rb_next(node)) { 36.5 ext = node_to_extent(node); 36.6 fprintf(stderr, "\t\t\t--> (%llu -> %llu)\n", 36.7 - ext->start, ext->start + ext->count); 36.8 + (unsigned long long) ext->start, 36.9 + (unsigned long long) ext->start + ext->count); 36.10 } 36.11 fprintf(stderr, "\t\t\t=================================\n"); 36.12 } 36.13 @@ -96,16 +97,18 @@ 36.14 if (ext->count == 0) { 36.15 fprintf(stderr, "Tree Error: count is zero\n"); 36.16 fprintf(stderr, "extent: %llu -> %llu (%llu)\n", 36.17 - ext->start, ext->start + ext->count, 36.18 - ext->count); 36.19 + (unsigned long long) ext->start, 36.20 + (unsigned long long) ext->start + ext->count, 36.21 + (unsigned long long) ext->count); 36.22 goto err_out; 36.23 } 36.24 if (ext->start + ext->count < ext->start) { 36.25 fprintf(stderr, 36.26 "Tree Error: start or count is crazy\n"); 36.27 fprintf(stderr, "extent: %llu -> %llu (%llu)\n", 36.28 - ext->start, ext->start + ext->count, 36.29 - ext->count); 36.30 + (unsigned long long) ext->start, 36.31 + (unsigned long long) ext->start + ext->count, 36.32 + (unsigned long long) ext->count); 36.33 goto err_out; 36.34 } 36.35 36.36 @@ -113,24 +116,28 @@ 36.37 if (old->start > ext->start) { 36.38 fprintf(stderr, "Tree Error: start is crazy\n"); 36.39 fprintf(stderr, "extent: %llu -> %llu (%llu)\n", 36.40 - old->start, old->start + old->count, 36.41 - old->count); 36.42 + (unsigned long long) old->start, 36.43 + (unsigned long long) old->start + old->count, 36.44 + (unsigned long long) old->count); 36.45 fprintf(stderr, 36.46 "extent next: %llu -> %llu (%llu)\n", 36.47 - ext->start, ext->start + ext->count, 36.48 - ext->count); 36.49 + (unsigned long long) ext->start, 36.50 + (unsigned long long) ext->start + ext->count, 36.51 + (unsigned long long) ext->count); 36.52 goto err_out; 36.53 } 36.54 if ((old->start + old->count) >= ext->start) { 36.55 fprintf(stderr, 36.56 "Tree Error: extent is crazy\n"); 36.57 fprintf(stderr, "extent: %llu -> %llu (%llu)\n", 36.58 - old->start, old->start + old->count, 36.59 - old->count); 36.60 + (unsigned long long) old->start, 36.61 + (unsigned long long) old->start + old->count, 36.62 + (unsigned long long) old->count); 36.63 fprintf(stderr, 36.64 "extent next: %llu -> %llu (%llu)\n", 36.65 - ext->start, ext->start + ext->count, 36.66 - ext->count); 36.67 + (unsigned long long) ext->start, 36.68 + (unsigned long long) ext->start + ext->count, 36.69 + (unsigned long long) ext->count); 36.70 goto err_out; 36.71 } 36.72 } 36.73 @@ -177,7 +184,7 @@ 36.74 ext2fs_free_mem(&ext); 36.75 } 36.76 36.77 -static errcode_t rb_alloc_private_data (ext2fs_generic_bitmap bitmap) 36.78 +static errcode_t rb_alloc_private_data (ext2fs_generic_bitmap_64 bitmap) 36.79 { 36.80 struct ext2fs_rb_private *bp; 36.81 errcode_t retval; 36.82 @@ -201,7 +208,7 @@ 36.83 } 36.84 36.85 static errcode_t rb_new_bmap(ext2_filsys fs EXT2FS_ATTR((unused)), 36.86 - ext2fs_generic_bitmap bitmap) 36.87 + ext2fs_generic_bitmap_64 bitmap) 36.88 { 36.89 errcode_t retval; 36.90 36.91 @@ -225,7 +232,7 @@ 36.92 } 36.93 } 36.94 36.95 -static void rb_free_bmap(ext2fs_generic_bitmap bitmap) 36.96 +static void rb_free_bmap(ext2fs_generic_bitmap_64 bitmap) 36.97 { 36.98 struct ext2fs_rb_private *bp; 36.99 36.100 @@ -236,8 +243,8 @@ 36.101 bp = 0; 36.102 } 36.103 36.104 -static errcode_t rb_copy_bmap(ext2fs_generic_bitmap src, 36.105 - ext2fs_generic_bitmap dest) 36.106 +static errcode_t rb_copy_bmap(ext2fs_generic_bitmap_64 src, 36.107 + ext2fs_generic_bitmap_64 dest) 36.108 { 36.109 struct ext2fs_rb_private *src_bp, *dest_bp; 36.110 struct bmap_rb_extent *src_ext, *dest_ext; 36.111 @@ -302,7 +309,7 @@ 36.112 } 36.113 } 36.114 36.115 -static errcode_t rb_resize_bmap(ext2fs_generic_bitmap bmap, 36.116 +static errcode_t rb_resize_bmap(ext2fs_generic_bitmap_64 bmap, 36.117 __u64 new_end, __u64 new_real_end) 36.118 { 36.119 struct ext2fs_rb_private *bp; 36.120 @@ -575,7 +582,7 @@ 36.121 return retval; 36.122 } 36.123 36.124 -static int rb_mark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg) 36.125 +static int rb_mark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg) 36.126 { 36.127 struct ext2fs_rb_private *bp; 36.128 int retval; 36.129 @@ -588,7 +595,7 @@ 36.130 return retval; 36.131 } 36.132 36.133 -static int rb_unmark_bmap(ext2fs_generic_bitmap bitmap, __u64 arg) 36.134 +static int rb_unmark_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg) 36.135 { 36.136 struct ext2fs_rb_private *bp; 36.137 int retval; 36.138 @@ -603,7 +610,7 @@ 36.139 } 36.140 36.141 inline 36.142 -static int rb_test_bmap(ext2fs_generic_bitmap bitmap, __u64 arg) 36.143 +static int rb_test_bmap(ext2fs_generic_bitmap_64 bitmap, __u64 arg) 36.144 { 36.145 struct ext2fs_rb_private *bp; 36.146 36.147 @@ -613,7 +620,7 @@ 36.148 return rb_test_bit(bp, arg); 36.149 } 36.150 36.151 -static void rb_mark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg, 36.152 +static void rb_mark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg, 36.153 unsigned int num) 36.154 { 36.155 struct ext2fs_rb_private *bp; 36.156 @@ -625,7 +632,7 @@ 36.157 check_tree(&bp->root, __func__); 36.158 } 36.159 36.160 -static void rb_unmark_bmap_extent(ext2fs_generic_bitmap bitmap, __u64 arg, 36.161 +static void rb_unmark_bmap_extent(ext2fs_generic_bitmap_64 bitmap, __u64 arg, 36.162 unsigned int num) 36.163 { 36.164 struct ext2fs_rb_private *bp; 36.165 @@ -637,7 +644,7 @@ 36.166 check_tree(&bp->root, __func__); 36.167 } 36.168 36.169 -static int rb_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap, 36.170 +static int rb_test_clear_bmap_extent(ext2fs_generic_bitmap_64 bitmap, 36.171 __u64 start, unsigned int len) 36.172 { 36.173 struct rb_node *parent = NULL, **n; 36.174 @@ -693,7 +700,7 @@ 36.175 return retval; 36.176 } 36.177 36.178 -static errcode_t rb_set_bmap_range(ext2fs_generic_bitmap bitmap, 36.179 +static errcode_t rb_set_bmap_range(ext2fs_generic_bitmap_64 bitmap, 36.180 __u64 start, size_t num, void *in) 36.181 { 36.182 struct ext2fs_rb_private *bp; 36.183 @@ -739,7 +746,7 @@ 36.184 return 0; 36.185 } 36.186 36.187 -static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap bitmap, 36.188 +static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap_64 bitmap, 36.189 __u64 start, size_t num, void *out) 36.190 { 36.191 36.192 @@ -804,7 +811,7 @@ 36.193 return 0; 36.194 } 36.195 36.196 -static void rb_clear_bmap(ext2fs_generic_bitmap bitmap) 36.197 +static void rb_clear_bmap(ext2fs_generic_bitmap_64 bitmap) 36.198 { 36.199 struct ext2fs_rb_private *bp; 36.200 36.201 @@ -817,7 +824,7 @@ 36.202 check_tree(&bp->root, __func__); 36.203 } 36.204 36.205 -static errcode_t rb_find_first_zero(ext2fs_generic_bitmap bitmap, 36.206 +static errcode_t rb_find_first_zero(ext2fs_generic_bitmap_64 bitmap, 36.207 __u64 start, __u64 end, __u64 *out) 36.208 { 36.209 struct rb_node *parent = NULL, **n; 36.210 @@ -853,7 +860,7 @@ 36.211 return 0; 36.212 } 36.213 36.214 -static errcode_t rb_find_first_set(ext2fs_generic_bitmap bitmap, 36.215 +static errcode_t rb_find_first_set(ext2fs_generic_bitmap_64 bitmap, 36.216 __u64 start, __u64 end, __u64 *out) 36.217 { 36.218 struct rb_node *parent = NULL, **n; 36.219 @@ -902,7 +909,7 @@ 36.220 } 36.221 36.222 #ifdef ENABLE_BMAP_STATS 36.223 -static void rb_print_stats(ext2fs_generic_bitmap bitmap) 36.224 +static void rb_print_stats(ext2fs_generic_bitmap_64 bitmap) 36.225 { 36.226 struct ext2fs_rb_private *bp; 36.227 struct rb_node *node = NULL; 36.228 @@ -949,21 +956,23 @@ 36.229 bp->test_hit, t_hit, bp->mark_hit, m_hit); 36.230 #endif 36.231 fprintf(stderr, "%16llu extents (%llu bytes)\n", 36.232 - count, ((count * sizeof(struct bmap_rb_extent)) + 36.233 - sizeof(struct ext2fs_rb_private))); 36.234 + (unsigned long long) count, (unsigned long long) 36.235 + ((count * sizeof(struct bmap_rb_extent)) + 36.236 + sizeof(struct ext2fs_rb_private))); 36.237 fprintf(stderr, "%16llu bits minimum size\n", 36.238 - min_size); 36.239 + (unsigned long long) min_size); 36.240 fprintf(stderr, "%16llu bits maximum size\n" 36.241 "%16llu bits average size\n", 36.242 - max_size, avg_size); 36.243 - fprintf(stderr, "%16llu bits set in bitmap (out of %llu)\n", size, 36.244 - bitmap->real_end - bitmap->start); 36.245 + (unsigned long long) max_size, (unsigned long long) avg_size); 36.246 + fprintf(stderr, "%16llu bits set in bitmap (out of %llu)\n", 36.247 + (unsigned long long) size, 36.248 + (unsigned long long) bitmap->real_end - bitmap->start); 36.249 fprintf(stderr, 36.250 "%16.4lf memory / bitmap bit memory ratio (bitarray = 1)\n", 36.251 eff); 36.252 } 36.253 #else 36.254 -static void rb_print_stats(ext2fs_generic_bitmap bitmap EXT2FS_ATTR((unused))) 36.255 +static void rb_print_stats(ext2fs_generic_bitmap_64 bitmap EXT2FS_ATTR((unused))) 36.256 { 36.257 } 36.258 #endif
37.1 --- a/libext2fs/lib/libext2fs/blknum.c Sat Oct 02 23:57:02 2021 +0200 37.2 +++ b/libext2fs/lib/libext2fs/blknum.c Sat Oct 09 23:28:01 2021 +0200 37.3 @@ -86,6 +86,22 @@ 37.4 } 37.5 37.6 /* 37.7 + * Return the inode i_blocks in stat (512 byte) units 37.8 + */ 37.9 +blk64_t ext2fs_get_stat_i_blocks(ext2_filsys fs, 37.10 + struct ext2_inode *inode) 37.11 +{ 37.12 + blk64_t ret = inode->i_blocks; 37.13 + 37.14 + if (ext2fs_has_feature_huge_file(fs->super)) { 37.15 + ret += ((long long) inode->osd2.linux2.l_i_blocks_hi) << 32; 37.16 + if (inode->i_flags & EXT4_HUGE_FILE_FL) 37.17 + ret *= (fs->blocksize / 512); 37.18 + } 37.19 + return ret; 37.20 +} 37.21 + 37.22 +/* 37.23 * Return the fs block count 37.24 */ 37.25 blk64_t ext2fs_blocks_count(struct ext2_super_block *super) 37.26 @@ -185,9 +201,42 @@ 37.27 struct opaque_ext2_group_desc *gdp, 37.28 dgrp_t group) 37.29 { 37.30 - int desc_size = EXT2_DESC_SIZE(fs->super) & ~7; 37.31 + struct ext2_group_desc *ret_gdp; 37.32 + errcode_t retval; 37.33 + static char *buf = 0; 37.34 + static int bufsize = 0; 37.35 + blk64_t blk; 37.36 + int desc_size = EXT2_DESC_SIZE(fs->super) & ~7; 37.37 + int desc_per_blk = EXT2_DESC_PER_BLOCK(fs->super); 37.38 37.39 - return (struct ext2_group_desc *)((char *)gdp + group * desc_size); 37.40 + if (group > fs->group_desc_count) 37.41 + return NULL; 37.42 + if (gdp) 37.43 + return (struct ext2_group_desc *)((char *)gdp + 37.44 + group * desc_size); 37.45 + /* 37.46 + * If fs->group_desc wasn't read in when the file system was 37.47 + * opened, then read it on demand here. 37.48 + */ 37.49 + if (bufsize < fs->blocksize) 37.50 + ext2fs_free_mem(&buf); 37.51 + if (!buf) { 37.52 + retval = ext2fs_get_mem(fs->blocksize, &buf); 37.53 + if (retval) 37.54 + return NULL; 37.55 + bufsize = fs->blocksize; 37.56 + } 37.57 + blk = ext2fs_descriptor_block_loc2(fs, fs->super->s_first_data_block, 37.58 + group / desc_per_blk); 37.59 + retval = io_channel_read_blk(fs->io, blk, 1, buf); 37.60 + if (retval) 37.61 + return NULL; 37.62 + ret_gdp = (struct ext2_group_desc *) 37.63 + (buf + ((group % desc_per_blk) * desc_size)); 37.64 +#ifdef WORDS_BIGENDIAN 37.65 + ext2fs_swap_group_desc2(fs, ret_gdp); 37.66 +#endif 37.67 + return ret_gdp; 37.68 } 37.69 37.70 /* Do the same but as an ext4 group desc for internal use here */ 37.71 @@ -521,18 +570,32 @@ 37.72 errcode_t ext2fs_inode_size_set(ext2_filsys fs, struct ext2_inode *inode, 37.73 ext2_off64_t size) 37.74 { 37.75 - /* Only regular files get to be larger than 4GB */ 37.76 - if (!LINUX_S_ISREG(inode->i_mode) && (size >> 32)) 37.77 - return EXT2_ET_FILE_TOO_BIG; 37.78 + if (size < 0) 37.79 + return EINVAL; 37.80 + 37.81 + /* If writing a large inode, set the large_file or large_dir flag */ 37.82 + if (ext2fs_needs_large_file_feature(size)) { 37.83 + int dirty_sb = 0; 37.84 37.85 - /* If we're writing a large file, set the large_file flag */ 37.86 - if (LINUX_S_ISREG(inode->i_mode) && 37.87 - ext2fs_needs_large_file_feature(size) && 37.88 - (!ext2fs_has_feature_large_file(fs->super) || 37.89 - fs->super->s_rev_level == EXT2_GOOD_OLD_REV)) { 37.90 - ext2fs_set_feature_large_file(fs->super); 37.91 - ext2fs_update_dynamic_rev(fs); 37.92 - ext2fs_mark_super_dirty(fs); 37.93 + if (LINUX_S_ISREG(inode->i_mode)) { 37.94 + if (!ext2fs_has_feature_large_file(fs->super)) { 37.95 + ext2fs_set_feature_large_file(fs->super); 37.96 + dirty_sb = 1; 37.97 + } 37.98 + } else if (LINUX_S_ISDIR(inode->i_mode)) { 37.99 + if (!ext2fs_has_feature_largedir(fs->super)) { 37.100 + ext2fs_set_feature_largedir(fs->super); 37.101 + dirty_sb = 1; 37.102 + } 37.103 + } else { 37.104 + /* Only regular files get to be larger than 4GB */ 37.105 + return EXT2_ET_FILE_TOO_BIG; 37.106 + } 37.107 + if (dirty_sb) { 37.108 + if (fs->super->s_rev_level == EXT2_GOOD_OLD_REV) 37.109 + ext2fs_update_dynamic_rev(fs); 37.110 + ext2fs_mark_super_dirty(fs); 37.111 + } 37.112 } 37.113 37.114 inode->i_size = size & 0xffffffff;
38.1 --- a/libext2fs/lib/libext2fs/bmap64.h Sat Oct 02 23:57:02 2021 +0200 38.2 +++ b/libext2fs/lib/libext2fs/bmap64.h Sat Oct 09 23:28:01 2021 +0200 38.3 @@ -37,7 +37,7 @@ 38.4 }; 38.5 38.6 38.7 -struct ext2fs_struct_generic_bitmap { 38.8 +struct ext2fs_struct_generic_bitmap_64 { 38.9 errcode_t magic; 38.10 ext2_filsys fs; 38.11 struct ext2_bitmap_ops *bitmap_ops; 38.12 @@ -53,6 +53,8 @@ 38.13 #endif 38.14 }; 38.15 38.16 +typedef struct ext2fs_struct_generic_bitmap_64 *ext2fs_generic_bitmap_64; 38.17 + 38.18 #define EXT2FS_IS_32_BITMAP(bmap) \ 38.19 (((bmap)->magic == EXT2_ET_MAGIC_GENERIC_BITMAP) || \ 38.20 ((bmap)->magic == EXT2_ET_MAGIC_BLOCK_BITMAP) || \ 38.21 @@ -66,37 +68,37 @@ 38.22 struct ext2_bitmap_ops { 38.23 int type; 38.24 /* Generic bmap operators */ 38.25 - errcode_t (*new_bmap)(ext2_filsys fs, ext2fs_generic_bitmap bmap); 38.26 - void (*free_bmap)(ext2fs_generic_bitmap bitmap); 38.27 - errcode_t (*copy_bmap)(ext2fs_generic_bitmap src, 38.28 - ext2fs_generic_bitmap dest); 38.29 - errcode_t (*resize_bmap)(ext2fs_generic_bitmap bitmap, 38.30 + errcode_t (*new_bmap)(ext2_filsys fs, ext2fs_generic_bitmap_64 bmap); 38.31 + void (*free_bmap)(ext2fs_generic_bitmap_64 bitmap); 38.32 + errcode_t (*copy_bmap)(ext2fs_generic_bitmap_64 src, 38.33 + ext2fs_generic_bitmap_64 dest); 38.34 + errcode_t (*resize_bmap)(ext2fs_generic_bitmap_64 bitmap, 38.35 __u64 new_end, 38.36 __u64 new_real_end); 38.37 /* bit set/test operators */ 38.38 - int (*mark_bmap)(ext2fs_generic_bitmap bitmap, __u64 arg); 38.39 - int (*unmark_bmap)(ext2fs_generic_bitmap bitmap, __u64 arg); 38.40 - int (*test_bmap)(ext2fs_generic_bitmap bitmap, __u64 arg); 38.41 - void (*mark_bmap_extent)(ext2fs_generic_bitmap bitmap, __u64 arg, 38.42 + int (*mark_bmap)(ext2fs_generic_bitmap_64 bitmap, __u64 arg); 38.43 + int (*unmark_bmap)(ext2fs_generic_bitmap_64 bitmap, __u64 arg); 38.44 + int (*test_bmap)(ext2fs_generic_bitmap_64 bitmap, __u64 arg); 38.45 + void (*mark_bmap_extent)(ext2fs_generic_bitmap_64 bitmap, __u64 arg, 38.46 unsigned int num); 38.47 - void (*unmark_bmap_extent)(ext2fs_generic_bitmap bitmap, __u64 arg, 38.48 + void (*unmark_bmap_extent)(ext2fs_generic_bitmap_64 bitmap, __u64 arg, 38.49 unsigned int num); 38.50 - int (*test_clear_bmap_extent)(ext2fs_generic_bitmap bitmap, 38.51 + int (*test_clear_bmap_extent)(ext2fs_generic_bitmap_64 bitmap, 38.52 __u64 arg, unsigned int num); 38.53 - errcode_t (*set_bmap_range)(ext2fs_generic_bitmap bitmap, 38.54 + errcode_t (*set_bmap_range)(ext2fs_generic_bitmap_64 bitmap, 38.55 __u64 start, size_t num, void *in); 38.56 - errcode_t (*get_bmap_range)(ext2fs_generic_bitmap bitmap, 38.57 + errcode_t (*get_bmap_range)(ext2fs_generic_bitmap_64 bitmap, 38.58 __u64 start, size_t num, void *out); 38.59 - void (*clear_bmap)(ext2fs_generic_bitmap bitmap); 38.60 - void (*print_stats)(ext2fs_generic_bitmap); 38.61 + void (*clear_bmap)(ext2fs_generic_bitmap_64 bitmap); 38.62 + void (*print_stats)(ext2fs_generic_bitmap_64); 38.63 38.64 /* Find the first zero bit between start and end, inclusive. 38.65 * May be NULL, in which case a generic function is used. */ 38.66 - errcode_t (*find_first_zero)(ext2fs_generic_bitmap bitmap, 38.67 + errcode_t (*find_first_zero)(ext2fs_generic_bitmap_64 bitmap, 38.68 __u64 start, __u64 end, __u64 *out); 38.69 /* Find the first set bit between start and end, inclusive. 38.70 * May be NULL, in which case a generic function is used. */ 38.71 - errcode_t (*find_first_set)(ext2fs_generic_bitmap bitmap, 38.72 + errcode_t (*find_first_set)(ext2fs_generic_bitmap_64 bitmap, 38.73 __u64 start, __u64 end, __u64 *out); 38.74 }; 38.75
39.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 39.2 +++ b/libext2fs/lib/libext2fs/brel_ma.c Sat Oct 09 23:28:01 2021 +0200 39.3 @@ -0,0 +1,199 @@ 39.4 +/* 39.5 + * brel_ma.c 39.6 + * 39.7 + * Copyright (C) 1996, 1997 Theodore Ts'o. 39.8 + * 39.9 + * TODO: rewrite to not use a direct array!!! (Fortunately this 39.10 + * module isn't really used yet.) 39.11 + * 39.12 + * %Begin-Header% 39.13 + * This file may be redistributed under the terms of the GNU Library 39.14 + * General Public License, version 2. 39.15 + * %End-Header% 39.16 + */ 39.17 + 39.18 +#include "config.h" 39.19 +#include <fcntl.h> 39.20 +#include <stdio.h> 39.21 +#include <string.h> 39.22 +#if HAVE_UNISTD_H 39.23 +#include <unistd.h> 39.24 +#endif 39.25 +#if HAVE_ERRNO_H 39.26 +#include <errno.h> 39.27 +#endif 39.28 + 39.29 +#include "ext2_fs.h" 39.30 +#include "ext2fs.h" 39.31 +#include "brel.h" 39.32 + 39.33 +static errcode_t bma_put(ext2_brel brel, blk64_t old, 39.34 + struct ext2_block_relocate_entry *ent); 39.35 +static errcode_t bma_get(ext2_brel brel, blk64_t old, 39.36 + struct ext2_block_relocate_entry *ent); 39.37 +static errcode_t bma_start_iter(ext2_brel brel); 39.38 +static errcode_t bma_next(ext2_brel brel, blk64_t *old, 39.39 + struct ext2_block_relocate_entry *ent); 39.40 +static errcode_t bma_move(ext2_brel brel, blk64_t old, blk64_t new); 39.41 +static errcode_t bma_delete(ext2_brel brel, blk64_t old); 39.42 +static errcode_t bma_free(ext2_brel brel); 39.43 + 39.44 +struct brel_ma { 39.45 + __u32 magic; 39.46 + blk64_t max_block; 39.47 + struct ext2_block_relocate_entry *entries; 39.48 +}; 39.49 + 39.50 +errcode_t ext2fs_brel_memarray_create(char *name, blk64_t max_block, 39.51 + ext2_brel *new_brel) 39.52 +{ 39.53 + ext2_brel brel = 0; 39.54 + errcode_t retval; 39.55 + struct brel_ma *ma = 0; 39.56 + size_t size; 39.57 + 39.58 + *new_brel = 0; 39.59 + 39.60 + /* 39.61 + * Allocate memory structures 39.62 + */ 39.63 + retval = ext2fs_get_mem(sizeof(struct ext2_block_relocation_table), 39.64 + &brel); 39.65 + if (retval) 39.66 + goto errout; 39.67 + memset(brel, 0, sizeof(struct ext2_block_relocation_table)); 39.68 + 39.69 + retval = ext2fs_get_mem(strlen(name)+1, &brel->name); 39.70 + if (retval) 39.71 + goto errout; 39.72 + strcpy(brel->name, name); 39.73 + 39.74 + retval = ext2fs_get_mem(sizeof(struct brel_ma), &ma); 39.75 + if (retval) 39.76 + goto errout; 39.77 + memset(ma, 0, sizeof(struct brel_ma)); 39.78 + brel->priv_data = ma; 39.79 + 39.80 + size = (size_t) (sizeof(struct ext2_block_relocate_entry) * 39.81 + (max_block+1)); 39.82 + retval = ext2fs_get_array(max_block+1, 39.83 + sizeof(struct ext2_block_relocate_entry), &ma->entries); 39.84 + if (retval) 39.85 + goto errout; 39.86 + memset(ma->entries, 0, size); 39.87 + ma->max_block = max_block; 39.88 + 39.89 + /* 39.90 + * Fill in the brel data structure 39.91 + */ 39.92 + brel->put = bma_put; 39.93 + brel->get = bma_get; 39.94 + brel->start_iter = bma_start_iter; 39.95 + brel->next = bma_next; 39.96 + brel->move = bma_move; 39.97 + brel->delete = bma_delete; 39.98 + brel->free = bma_free; 39.99 + 39.100 + *new_brel = brel; 39.101 + return 0; 39.102 + 39.103 +errout: 39.104 + bma_free(brel); 39.105 + return retval; 39.106 +} 39.107 + 39.108 +static errcode_t bma_put(ext2_brel brel, blk64_t old, 39.109 + struct ext2_block_relocate_entry *ent) 39.110 +{ 39.111 + struct brel_ma *ma; 39.112 + 39.113 + ma = brel->priv_data; 39.114 + if (old > ma->max_block) 39.115 + return EXT2_ET_INVALID_ARGUMENT; 39.116 + ma->entries[(unsigned)old] = *ent; 39.117 + return 0; 39.118 +} 39.119 + 39.120 +static errcode_t bma_get(ext2_brel brel, blk64_t old, 39.121 + struct ext2_block_relocate_entry *ent) 39.122 +{ 39.123 + struct brel_ma *ma; 39.124 + 39.125 + ma = brel->priv_data; 39.126 + if (old > ma->max_block) 39.127 + return EXT2_ET_INVALID_ARGUMENT; 39.128 + if (ma->entries[(unsigned)old].new == 0) 39.129 + return ENOENT; 39.130 + *ent = ma->entries[old]; 39.131 + return 0; 39.132 +} 39.133 + 39.134 +static errcode_t bma_start_iter(ext2_brel brel) 39.135 +{ 39.136 + brel->current = 0; 39.137 + return 0; 39.138 +} 39.139 + 39.140 +static errcode_t bma_next(ext2_brel brel, blk64_t *old, 39.141 + struct ext2_block_relocate_entry *ent) 39.142 +{ 39.143 + struct brel_ma *ma; 39.144 + 39.145 + ma = brel->priv_data; 39.146 + while (++brel->current < ma->max_block) { 39.147 + if (ma->entries[(unsigned)brel->current].new == 0) 39.148 + continue; 39.149 + *old = brel->current; 39.150 + *ent = ma->entries[(unsigned)brel->current]; 39.151 + return 0; 39.152 + } 39.153 + *old = 0; 39.154 + return 0; 39.155 +} 39.156 + 39.157 +static errcode_t bma_move(ext2_brel brel, blk64_t old, blk64_t new) 39.158 +{ 39.159 + struct brel_ma *ma; 39.160 + 39.161 + ma = brel->priv_data; 39.162 + if ((old > ma->max_block) || (new > ma->max_block)) 39.163 + return EXT2_ET_INVALID_ARGUMENT; 39.164 + if (ma->entries[(unsigned)old].new == 0) 39.165 + return ENOENT; 39.166 + ma->entries[(unsigned)new] = ma->entries[old]; 39.167 + ma->entries[(unsigned)old].new = 0; 39.168 + return 0; 39.169 +} 39.170 + 39.171 +static errcode_t bma_delete(ext2_brel brel, blk64_t old) 39.172 +{ 39.173 + struct brel_ma *ma; 39.174 + 39.175 + ma = brel->priv_data; 39.176 + if (old > ma->max_block) 39.177 + return EXT2_ET_INVALID_ARGUMENT; 39.178 + if (ma->entries[(unsigned)old].new == 0) 39.179 + return ENOENT; 39.180 + ma->entries[(unsigned)old].new = 0; 39.181 + return 0; 39.182 +} 39.183 + 39.184 +static errcode_t bma_free(ext2_brel brel) 39.185 +{ 39.186 + struct brel_ma *ma; 39.187 + 39.188 + if (!brel) 39.189 + return 0; 39.190 + 39.191 + ma = brel->priv_data; 39.192 + 39.193 + if (ma) { 39.194 + if (ma->entries) 39.195 + ext2fs_free_mem(&ma->entries); 39.196 + ext2fs_free_mem(&ma); 39.197 + } 39.198 + if (brel->name) 39.199 + ext2fs_free_mem(&brel->name); 39.200 + ext2fs_free_mem(&brel); 39.201 + return 0; 39.202 +}
40.1 --- a/libext2fs/lib/libext2fs/closefs.c Sat Oct 02 23:57:02 2021 +0200 40.2 +++ b/libext2fs/lib/libext2fs/closefs.c Sat Oct 09 23:28:01 2021 +0200 40.3 @@ -293,6 +293,11 @@ 40.4 40.5 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 40.6 40.7 + if ((fs->flags & EXT2_FLAG_SUPER_ONLY) == 0 && 40.8 + !ext2fs_has_feature_journal_dev(fs->super) && 40.9 + fs->group_desc == NULL) 40.10 + return EXT2_ET_NO_GDESC; 40.11 + 40.12 fs_state = fs->super->s_state; 40.13 feature_incompat = fs->super->s_feature_incompat; 40.14 40.15 @@ -328,18 +333,22 @@ 40.16 retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &super_shadow); 40.17 if (retval) 40.18 goto errout; 40.19 - retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize, 40.20 - &group_shadow); 40.21 - if (retval) 40.22 - goto errout; 40.23 memcpy(super_shadow, fs->super, sizeof(struct ext2_super_block)); 40.24 - memcpy(group_shadow, fs->group_desc, (size_t) fs->blocksize * 40.25 - fs->desc_blocks); 40.26 + ext2fs_swap_super(super_shadow); 40.27 40.28 - ext2fs_swap_super(super_shadow); 40.29 - for (j = 0; j < fs->group_desc_count; j++) { 40.30 - gdp = ext2fs_group_desc(fs, group_shadow, j); 40.31 - ext2fs_swap_group_desc2(fs, gdp); 40.32 + if (((fs->flags & EXT2_FLAG_SUPER_ONLY) == 0) && 40.33 + !ext2fs_has_feature_journal_dev(fs->super)) { 40.34 + retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize, 40.35 + &group_shadow); 40.36 + if (retval) 40.37 + goto errout; 40.38 + memcpy(group_shadow, fs->group_desc, (size_t) fs->blocksize * 40.39 + fs->desc_blocks); 40.40 + 40.41 + for (j = 0; j < fs->group_desc_count; j++) { 40.42 + gdp = ext2fs_group_desc(fs, group_shadow, j); 40.43 + ext2fs_swap_group_desc2(fs, gdp); 40.44 + } 40.45 } 40.46 #else 40.47 super_shadow = fs->super;
41.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 41.2 +++ b/libext2fs/lib/libext2fs/compiler.h Sat Oct 09 23:28:01 2021 +0200 41.3 @@ -0,0 +1,22 @@ 41.4 +#ifndef _EXT2FS_COMPILER_H 41.5 +#define _EXT2FS_COMPILER_H 41.6 + 41.7 +#ifndef __has_builtin 41.8 +#define __has_builtin(x) 0 41.9 +#endif 41.10 + 41.11 +#undef offsetof 41.12 +#if __has_builtin(__builtin_offsetof) 41.13 +#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER) 41.14 +#elif defined(__compiler_offsetof) 41.15 +#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER) 41.16 +#else 41.17 +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 41.18 +#endif 41.19 + 41.20 +#define container_of(ptr, type, member) ({ \ 41.21 + const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \ 41.22 + (type *)( (char *)__mptr - offsetof(type,member) );}) 41.23 + 41.24 + 41.25 +#endif /* _EXT2FS_COMPILER_H */
42.1 --- a/libext2fs/lib/libext2fs/csum.c Sat Oct 02 23:57:02 2021 +0200 42.2 +++ b/libext2fs/lib/libext2fs/csum.c Sat Oct 09 23:28:01 2021 +0200 42.3 @@ -263,17 +263,21 @@ 42.4 errcode_t retval = 0; 42.5 __u16 (*translate)(__u16) = (need_swab ? disk_to_host16 : do_nothing16); 42.6 42.7 + if (fs->blocksize < 1024) 42.8 + return EXT2_FILSYS_CORRUPTED; /* Should never happen */ 42.9 + 42.10 d = dirent; 42.11 top = EXT2_DIRENT_TAIL(dirent, fs->blocksize); 42.12 42.13 - rec_len = translate(d->rec_len); 42.14 - while (rec_len && !(rec_len & 0x3)) { 42.15 + while ((void *) d < top) { 42.16 + rec_len = translate(d->rec_len); 42.17 + if ((rec_len < 8) || (rec_len & 0x03)) 42.18 + return EXT2_ET_DIR_CORRUPTED; 42.19 d = (struct ext2_dir_entry *)(((char *)d) + rec_len); 42.20 - if ((void *)d >= top) 42.21 - break; 42.22 - rec_len = translate(d->rec_len); 42.23 } 42.24 42.25 + if ((char *)d > ((char *)dirent + fs->blocksize)) 42.26 + return EXT2_ET_DIR_CORRUPTED; 42.27 if (d != top) 42.28 return EXT2_ET_DIR_NO_SPACE_FOR_CSUM; 42.29 42.30 @@ -290,7 +294,8 @@ 42.31 42.32 int ext2fs_dirent_has_tail(ext2_filsys fs, struct ext2_dir_entry *dirent) 42.33 { 42.34 - return __get_dirent_tail(fs, dirent, NULL, 0) == 0; 42.35 + return __get_dirent_tail(fs, dirent, NULL, 0) != 42.36 + EXT2_ET_DIR_NO_SPACE_FOR_CSUM; 42.37 } 42.38 42.39 static errcode_t ext2fs_dirent_csum(ext2_filsys fs, ext2_ino_t inum, 42.40 @@ -358,20 +363,31 @@ 42.41 return 0; 42.42 } 42.43 42.44 -static errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum, 42.45 - struct ext2_dir_entry *dirent, 42.46 - __u32 *crc, int count_offset, int count, 42.47 - struct ext2_dx_tail *t) 42.48 +errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum, 42.49 + struct ext2_dir_entry *dirent, 42.50 + __u32 *crc, struct ext2_dx_tail **ret_t) 42.51 { 42.52 errcode_t retval; 42.53 char *buf = (char *)dirent; 42.54 int size; 42.55 - __u32 old_csum, gen; 42.56 + __u32 gen, dummy_csum = 0; 42.57 struct ext2_inode inode; 42.58 + struct ext2_dx_tail *t; 42.59 + struct ext2_dx_countlimit *c; 42.60 + int count_offset, limit, count; 42.61 + 42.62 + retval = __get_dx_countlimit(fs, dirent, &c, &count_offset, 1); 42.63 + if (retval) 42.64 + return retval; 42.65 + limit = ext2fs_le16_to_cpu(c->limit); 42.66 + count = ext2fs_le16_to_cpu(c->count); 42.67 + if (count_offset + (limit * sizeof(struct ext2_dx_entry)) > 42.68 + fs->blocksize - sizeof(struct ext2_dx_tail)) 42.69 + return EXT2_ET_DIR_NO_SPACE_FOR_CSUM; 42.70 + /* htree structs are accessed in LE order */ 42.71 + t = (struct ext2_dx_tail *)(((struct ext2_dx_entry *)c) + limit); 42.72 42.73 size = count_offset + (count * sizeof(struct ext2_dx_entry)); 42.74 - old_csum = t->dt_checksum; 42.75 - t->dt_checksum = 0; 42.76 42.77 retval = ext2fs_read_inode(fs, inum, &inode); 42.78 if (retval) 42.79 @@ -383,10 +399,11 @@ 42.80 sizeof(inum)); 42.81 *crc = ext2fs_crc32c_le(*crc, (unsigned char *)&gen, sizeof(gen)); 42.82 *crc = ext2fs_crc32c_le(*crc, (unsigned char *)buf, size); 42.83 - *crc = ext2fs_crc32c_le(*crc, (unsigned char *)t, 42.84 - sizeof(struct ext2_dx_tail)); 42.85 - t->dt_checksum = old_csum; 42.86 + *crc = ext2fs_crc32c_le(*crc, (unsigned char *)t, 4); 42.87 + *crc = ext2fs_crc32c_le(*crc, (unsigned char *)&dummy_csum, 4); 42.88 42.89 + if (ret_t) 42.90 + *ret_t = t; 42.91 return 0; 42.92 } 42.93 42.94 @@ -395,22 +412,9 @@ 42.95 { 42.96 __u32 calculated; 42.97 errcode_t retval; 42.98 - struct ext2_dx_countlimit *c; 42.99 struct ext2_dx_tail *t; 42.100 - int count_offset, limit, count; 42.101 42.102 - retval = __get_dx_countlimit(fs, dirent, &c, &count_offset, 1); 42.103 - if (retval) 42.104 - return 1; 42.105 - limit = ext2fs_le16_to_cpu(c->limit); 42.106 - count = ext2fs_le16_to_cpu(c->count); 42.107 - if (count_offset + (limit * sizeof(struct ext2_dx_entry)) > 42.108 - fs->blocksize - sizeof(struct ext2_dx_tail)) 42.109 - return 0; 42.110 - /* htree structs are accessed in LE order */ 42.111 - t = (struct ext2_dx_tail *)(((struct ext2_dx_entry *)c) + limit); 42.112 - retval = ext2fs_dx_csum(fs, inum, dirent, &calculated, count_offset, 42.113 - count, t); 42.114 + retval = ext2fs_dx_csum(fs, inum, dirent, &calculated, &t); 42.115 if (retval) 42.116 return 0; 42.117 42.118 @@ -422,22 +426,9 @@ 42.119 { 42.120 __u32 crc; 42.121 errcode_t retval = 0; 42.122 - struct ext2_dx_countlimit *c; 42.123 struct ext2_dx_tail *t; 42.124 - int count_offset, limit, count; 42.125 42.126 - retval = __get_dx_countlimit(fs, dirent, &c, &count_offset, 1); 42.127 - if (retval) 42.128 - return retval; 42.129 - limit = ext2fs_le16_to_cpu(c->limit); 42.130 - count = ext2fs_le16_to_cpu(c->count); 42.131 - if (count_offset + (limit * sizeof(struct ext2_dx_entry)) > 42.132 - fs->blocksize - sizeof(struct ext2_dx_tail)) 42.133 - return EXT2_ET_DIR_NO_SPACE_FOR_CSUM; 42.134 - t = (struct ext2_dx_tail *)(((struct ext2_dx_entry *)c) + limit); 42.135 - 42.136 - /* htree structs are accessed in LE order */ 42.137 - retval = ext2fs_dx_csum(fs, inum, dirent, &crc, count_offset, count, t); 42.138 + retval = ext2fs_dx_csum(fs, inum, dirent, &crc, &t); 42.139 if (retval) 42.140 return retval; 42.141 t->dt_checksum = ext2fs_cpu_to_le32(crc);
43.1 --- a/libext2fs/lib/libext2fs/dirhash.c Sat Oct 02 23:57:02 2021 +0200 43.2 +++ b/libext2fs/lib/libext2fs/dirhash.c Sat Oct 09 23:28:01 2021 +0200 43.3 @@ -14,9 +14,15 @@ 43.4 #include "config.h" 43.5 #include <stdio.h> 43.6 #include <string.h> 43.7 +#include <limits.h> 43.8 43.9 #include "ext2_fs.h" 43.10 #include "ext2fs.h" 43.11 +#include "ext2fsP.h" 43.12 + 43.13 +#ifndef PATH_MAX 43.14 +#define PATH_MAX 4096 43.15 +#endif 43.16 43.17 /* 43.18 * Keyed 32-bit hash function using TEA in a Davis-Meyer function 43.19 @@ -184,6 +190,11 @@ 43.20 * A particular hash version specifies whether or not the seed is 43.21 * represented, and whether or not the returned hash is 32 bits or 64 43.22 * bits. 32 bit hashes will return 0 for the minor hash. 43.23 + * 43.24 + * This function doesn't do any normalization or casefolding of the 43.25 + * input string. To take charset encoding into account, use 43.26 + * ext2fs_dirhash2. 43.27 + * 43.28 */ 43.29 errcode_t ext2fs_dirhash(int version, const char *name, int len, 43.30 const __u32 *seed, 43.31 @@ -257,3 +268,40 @@ 43.32 *ret_minor_hash = minor_hash; 43.33 return 0; 43.34 } 43.35 + 43.36 +/* 43.37 + * Returns the hash of a filename considering normalization and 43.38 + * casefolding. This is a wrapper around ext2fs_dirhash with string 43.39 + * encoding support based on the nls_table and the flags. Check 43.40 + * ext2fs_dirhash for documentation on the input and output parameters. 43.41 + */ 43.42 +errcode_t ext2fs_dirhash2(int version, const char *name, int len, 43.43 + const struct ext2fs_nls_table *charset, 43.44 + int hash_flags, const __u32 *seed, 43.45 + ext2_dirhash_t *ret_hash, 43.46 + ext2_dirhash_t *ret_minor_hash) 43.47 +{ 43.48 + errcode_t r; 43.49 + int dlen; 43.50 + 43.51 + if (len && charset && (hash_flags & EXT4_CASEFOLD_FL)) { 43.52 + char buff[PATH_MAX]; 43.53 + 43.54 + dlen = charset->ops->casefold(charset, 43.55 + (const unsigned char *) name, len, 43.56 + (unsigned char *) buff, sizeof(buff)); 43.57 + if (dlen < 0) { 43.58 + if (dlen == -EINVAL) 43.59 + goto opaque_seq; 43.60 + 43.61 + return dlen; 43.62 + } 43.63 + r = ext2fs_dirhash(version, buff, dlen, seed, ret_hash, 43.64 + ret_minor_hash); 43.65 + return r; 43.66 + } 43.67 + 43.68 +opaque_seq: 43.69 + return ext2fs_dirhash(version, name, len, seed, ret_hash, 43.70 + ret_minor_hash); 43.71 +}
44.1 --- a/libext2fs/lib/libext2fs/expanddir.c Sat Oct 02 23:57:02 2021 +0200 44.2 +++ b/libext2fs/lib/libext2fs/expanddir.c Sat Oct 09 23:28:01 2021 +0200 44.3 @@ -129,7 +129,10 @@ 44.4 if (retval) 44.5 return retval; 44.6 44.7 - inode.i_size += fs->blocksize; 44.8 + retval = ext2fs_inode_size_set(fs, &inode, 44.9 + EXT2_I_SIZE(&inode) + fs->blocksize); 44.10 + if (retval) 44.11 + return retval; 44.12 ext2fs_iblk_add_blocks(fs, &inode, es.newblocks); 44.13 44.14 retval = ext2fs_write_inode(fs, dir, &inode);
45.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 45.2 +++ b/libext2fs/lib/libext2fs/ext2_err.c Sat Oct 09 23:28:01 2021 +0200 45.3 @@ -0,0 +1,235 @@ 45.4 +/* 45.5 + * ext2_err.c: 45.6 + * This file is automatically generated; please do not edit it. 45.7 + */ 45.8 + 45.9 +#include <stdlib.h> 45.10 + 45.11 +#define N_(a) a 45.12 + 45.13 +static const char * const text[] = { 45.14 + N_( "EXT2FS Library version 1.46.2"), 45.15 + N_( "Wrong magic number for ext2_filsys structure"), 45.16 + N_( "Wrong magic number for badblocks_list structure"), 45.17 + N_( "Wrong magic number for badblocks_iterate structure"), 45.18 + N_( "Wrong magic number for inode_scan structure"), 45.19 + N_( "Wrong magic number for io_channel structure"), 45.20 + N_( "Wrong magic number for unix io_channel structure"), 45.21 + N_( "Wrong magic number for io_manager structure"), 45.22 + N_( "Wrong magic number for block_bitmap structure"), 45.23 + N_( "Wrong magic number for inode_bitmap structure"), 45.24 + N_( "Wrong magic number for generic_bitmap structure"), 45.25 + N_( "Wrong magic number for test io_channel structure"), 45.26 + N_( "Wrong magic number for directory block list structure"), 45.27 + N_( "Wrong magic number for icount structure"), 45.28 + N_( "Wrong magic number for Powerquest io_channel structure"), 45.29 + N_( "Wrong magic number for ext2 file structure"), 45.30 + N_( "Wrong magic number for Ext2 Image Header"), 45.31 + N_( "Wrong magic number for inode io_channel structure"), 45.32 + N_( "Wrong magic number for ext4 extent handle"), 45.33 + N_( "Bad magic number in super-block"), 45.34 + N_( "Filesystem revision too high"), 45.35 + N_( "Attempt to write to filesystem opened read-only"), 45.36 + N_( "Can't read group descriptors"), 45.37 + N_( "Can't write group descriptors"), 45.38 + N_( "Corrupt group descriptor: bad block for block bitmap"), 45.39 + N_( "Corrupt group descriptor: bad block for inode bitmap"), 45.40 + N_( "Corrupt group descriptor: bad block for inode table"), 45.41 + N_( "Can't write an inode bitmap"), 45.42 + N_( "Can't read an inode bitmap"), 45.43 + N_( "Can't write a block bitmap"), 45.44 + N_( "Can't read a block bitmap"), 45.45 + N_( "Can't write an inode table"), 45.46 + N_( "Can't read an inode table"), 45.47 + N_( "Can't read next inode"), 45.48 + N_( "Filesystem has unexpected block size"), 45.49 + N_( "EXT2 directory corrupted"), 45.50 + N_( "Attempt to read block from filesystem resulted in short read"), 45.51 + N_( "Attempt to write block to filesystem resulted in short write"), 45.52 + N_( "No free space in the directory"), 45.53 + N_( "Inode bitmap not loaded"), 45.54 + N_( "Block bitmap not loaded"), 45.55 + N_( "Illegal inode number"), 45.56 + N_( "Illegal block number"), 45.57 + N_( "Internal error in ext2fs_expand_dir"), 45.58 + N_( "Not enough space to build proposed filesystem"), 45.59 + N_( "Illegal block number passed to ext2fs_mark_block_bitmap"), 45.60 + N_( "Illegal block number passed to ext2fs_unmark_block_bitmap"), 45.61 + N_( "Illegal block number passed to ext2fs_test_block_bitmap"), 45.62 + N_( "Illegal inode number passed to ext2fs_mark_inode_bitmap"), 45.63 + N_( "Illegal inode number passed to ext2fs_unmark_inode_bitmap"), 45.64 + N_( "Illegal inode number passed to ext2fs_test_inode_bitmap"), 45.65 + N_( "Attempt to fudge end of block bitmap past the real end"), 45.66 + N_( "Attempt to fudge end of inode bitmap past the real end"), 45.67 + N_( "Illegal indirect block found" ), 45.68 + N_( "Illegal doubly indirect block found" ), 45.69 + N_( "Illegal triply indirect block found" ), 45.70 + N_( "Block bitmaps are not the same"), 45.71 + N_( "Inode bitmaps are not the same"), 45.72 + N_( "Illegal or malformed device name"), 45.73 + N_( "A block group is missing an inode table"), 45.74 + N_( "The ext2 superblock is corrupt"), 45.75 + N_( "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"), 45.76 + N_( "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"), 45.77 + N_( "Illegal generic bit number passed to ext2fs_test_generic_bitmap"), 45.78 + N_( "Too many symbolic links encountered."), 45.79 + N_( "The callback function will not handle this case"), 45.80 + N_( "The inode is from a bad block in the inode table"), 45.81 + N_( "Filesystem has unsupported feature(s)"), 45.82 + N_( "Filesystem has unsupported read-only feature(s)"), 45.83 + N_( "IO Channel failed to seek on read or write"), 45.84 + N_( "Memory allocation failed"), 45.85 + N_( "Invalid argument passed to ext2 library"), 45.86 + N_( "Could not allocate block in ext2 filesystem"), 45.87 + N_( "Could not allocate inode in ext2 filesystem"), 45.88 + N_( "Ext2 inode is not a directory"), 45.89 + N_( "Too many references in table"), 45.90 + N_( "File not found by ext2_lookup"), 45.91 + N_( "File open read-only"), 45.92 + N_( "Ext2 directory block not found"), 45.93 + N_( "Ext2 directory already exists"), 45.94 + N_( "Unimplemented ext2 library function"), 45.95 + N_( "User cancel requested"), 45.96 + N_( "Ext2 file too big"), 45.97 + N_( "Supplied journal device not a block device"), 45.98 + N_( "Journal superblock not found"), 45.99 + N_( "Journal must be at least 1024 blocks"), 45.100 + N_( "Unsupported journal version"), 45.101 + N_( "Error loading external journal"), 45.102 + N_( "Journal not found"), 45.103 + N_( "Directory hash unsupported"), 45.104 + N_( "Illegal extended attribute block number"), 45.105 + N_( "Cannot create filesystem with requested number of inodes"), 45.106 + N_( "E2image snapshot not in use"), 45.107 + N_( "Too many reserved group descriptor blocks"), 45.108 + N_( "Resize inode is corrupt"), 45.109 + N_( "Tried to set block bmap with missing indirect block"), 45.110 + N_( "TDB: Success"), 45.111 + N_( "TDB: Corrupt database"), 45.112 + N_( "TDB: IO Error"), 45.113 + N_( "TDB: Locking error"), 45.114 + N_( "TDB: Out of memory"), 45.115 + N_( "TDB: Record exists"), 45.116 + N_( "TDB: Lock exists on other keys"), 45.117 + N_( "TDB: Invalid parameter"), 45.118 + N_( "TDB: Record does not exist"), 45.119 + N_( "TDB: Write not permitted"), 45.120 + N_( "Ext2fs directory block list is empty"), 45.121 + N_( "Attempt to modify a block mapping via a read-only block iterator"), 45.122 + N_( "Wrong magic number for ext4 extent saved path"), 45.123 + N_( "Wrong magic number for 64-bit generic bitmap"), 45.124 + N_( "Wrong magic number for 64-bit block bitmap"), 45.125 + N_( "Wrong magic number for 64-bit inode bitmap"), 45.126 + N_( "Wrong magic number --- RESERVED_13"), 45.127 + N_( "Wrong magic number --- RESERVED_14"), 45.128 + N_( "Wrong magic number --- RESERVED_15"), 45.129 + N_( "Wrong magic number --- RESERVED_16"), 45.130 + N_( "Wrong magic number --- RESERVED_17"), 45.131 + N_( "Wrong magic number --- RESERVED_18"), 45.132 + N_( "Wrong magic number --- RESERVED_19"), 45.133 + N_( "Corrupt extent header"), 45.134 + N_( "Corrupt extent index"), 45.135 + N_( "Corrupt extent"), 45.136 + N_( "No free space in extent map"), 45.137 + N_( "Inode does not use extents"), 45.138 + N_( "No 'next' extent"), 45.139 + N_( "No 'previous' extent"), 45.140 + N_( "No 'up' extent"), 45.141 + N_( "No 'down' extent"), 45.142 + N_( "No current node"), 45.143 + N_( "Ext2fs operation not supported"), 45.144 + N_( "No room to insert extent in node"), 45.145 + N_( "Splitting would result in empty node"), 45.146 + N_( "Extent not found"), 45.147 + N_( "Operation not supported for inodes containing extents"), 45.148 + N_( "Extent length is invalid"), 45.149 + N_( "I/O Channel does not support 64-bit block numbers"), 45.150 + N_( "Can't check if filesystem is mounted due to missing mtab file"), 45.151 + N_( "Filesystem too large to use legacy bitmaps"), 45.152 + N_( "MMP: invalid magic number"), 45.153 + N_( "MMP: device currently active"), 45.154 + N_( "MMP: e2fsck being run"), 45.155 + N_( "MMP: block number beyond filesystem range"), 45.156 + N_( "MMP: undergoing an unknown operation"), 45.157 + N_( "MMP: filesystem still in use"), 45.158 + N_( "MMP: open with O_DIRECT failed"), 45.159 + N_( "Block group descriptor size incorrect"), 45.160 + N_( "Inode checksum does not match inode"), 45.161 + N_( "Inode bitmap checksum does not match bitmap"), 45.162 + N_( "Extent block checksum does not match extent block"), 45.163 + N_( "Directory block does not have space for checksum"), 45.164 + N_( "Directory block checksum does not match directory block"), 45.165 + N_( "Extended attribute block checksum does not match block"), 45.166 + N_( "Superblock checksum does not match superblock"), 45.167 + N_( "Unknown checksum algorithm"), 45.168 + N_( "MMP block checksum does not match"), 45.169 + N_( "Ext2 file already exists"), 45.170 + N_( "Block bitmap checksum does not match bitmap"), 45.171 + N_( "Cannot iterate data blocks of an inode containing inline data"), 45.172 + N_( "Extended attribute has an invalid name length"), 45.173 + N_( "Extended attribute has an invalid value length"), 45.174 + N_( "Extended attribute has an incorrect hash"), 45.175 + N_( "Extended attribute block has a bad header"), 45.176 + N_( "Extended attribute key not found"), 45.177 + N_( "Insufficient space to store extended attribute data"), 45.178 + N_( "Filesystem is missing ext_attr or inline_data feature"), 45.179 + N_( "Inode doesn't have inline data"), 45.180 + N_( "No block for an inode with inline data"), 45.181 + N_( "No free space in inline data"), 45.182 + N_( "Wrong magic number for extended attribute structure"), 45.183 + N_( "Inode seems to contain garbage"), 45.184 + N_( "Extended attribute has an invalid value offset"), 45.185 + N_( "Journal flags inconsistent"), 45.186 + N_( "Undo file corrupt"), 45.187 + N_( "Wrong undo file for this filesystem"), 45.188 + N_( "File system is corrupted"), 45.189 + N_( "Bad CRC detected in file system"), 45.190 + N_( "The journal superblock is corrupt"), 45.191 + N_( "Inode is corrupted"), 45.192 + N_( "Inode containing extended attribute value is corrupted"), 45.193 + N_( "Group descriptors not loaded"), 45.194 + N_( "The internal ext2_filsys data structure appears to be corrupted"), 45.195 + 0 45.196 +}; 45.197 + 45.198 +struct error_table { 45.199 + char const * const * msgs; 45.200 + long base; 45.201 + int n_msgs; 45.202 +}; 45.203 +struct et_list { 45.204 + struct et_list *next; 45.205 + const struct error_table * table; 45.206 +}; 45.207 +extern struct et_list *_et_list; 45.208 + 45.209 +const struct error_table et_ext2_error_table = { text, 2133571328L, 181 }; 45.210 + 45.211 +static struct et_list link = { 0, 0 }; 45.212 + 45.213 +void initialize_ext2_error_table_r(struct et_list **list); 45.214 +void initialize_ext2_error_table(void); 45.215 + 45.216 +void initialize_ext2_error_table(void) { 45.217 + initialize_ext2_error_table_r(&_et_list); 45.218 +} 45.219 + 45.220 +/* For Heimdal compatibility */ 45.221 +void initialize_ext2_error_table_r(struct et_list **list) 45.222 +{ 45.223 + struct et_list *et, **end; 45.224 + 45.225 + for (end = list, et = *list; et; end = &et->next, et = et->next) 45.226 + if (et->table->msgs == text) 45.227 + return; 45.228 + et = malloc(sizeof(struct et_list)); 45.229 + if (et == 0) { 45.230 + if (!link.table) 45.231 + et = &link; 45.232 + else 45.233 + return; 45.234 + } 45.235 + et->table = &et_ext2_error_table; 45.236 + et->next = 0; 45.237 + *end = et; 45.238 +}
46.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 46.2 +++ b/libext2fs/lib/libext2fs/ext2fsP.h Sat Oct 09 23:28:01 2021 +0200 46.3 @@ -0,0 +1,210 @@ 46.4 +/* 46.5 + * ext2fsP.h --- private header file for ext2 library 46.6 + * 46.7 + * Copyright (C) 1997 Theodore Ts'o. 46.8 + * 46.9 + * %Begin-Header% 46.10 + * This file may be redistributed under the terms of the GNU Library 46.11 + * General Public License, version 2. 46.12 + * %End-Header% 46.13 + */ 46.14 + 46.15 +#if HAVE_SYS_STAT_H 46.16 +#include <sys/stat.h> 46.17 +#endif 46.18 + 46.19 +#include "ext2fs.h" 46.20 + 46.21 +#define EXT2FS_MAX_NESTED_LINKS 8 46.22 + 46.23 +static inline int ext2fsP_is_disk_device(mode_t mode) 46.24 +{ 46.25 +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) 46.26 + return S_ISBLK(mode) || S_ISCHR(mode); 46.27 +#else 46.28 + return S_ISBLK(mode); 46.29 +#endif 46.30 +} 46.31 + 46.32 +/* 46.33 + * Badblocks list 46.34 + */ 46.35 +struct ext2_struct_u32_list { 46.36 + int magic; 46.37 + int num; 46.38 + int size; 46.39 + __u32 *list; 46.40 + int badblocks_flags; 46.41 +}; 46.42 + 46.43 +struct ext2_struct_u32_iterate { 46.44 + int magic; 46.45 + ext2_u32_list bb; 46.46 + int ptr; 46.47 +}; 46.48 + 46.49 + 46.50 +/* 46.51 + * Directory block iterator definition 46.52 + */ 46.53 +struct ext2_struct_dblist { 46.54 + int magic; 46.55 + ext2_filsys fs; 46.56 + unsigned long long size; 46.57 + unsigned long long count; 46.58 + int sorted; 46.59 + struct ext2_db_entry2 * list; 46.60 +}; 46.61 + 46.62 +/* 46.63 + * For directory iterators 46.64 + */ 46.65 +struct dir_context { 46.66 + ext2_ino_t dir; 46.67 + int flags; 46.68 + char *buf; 46.69 + unsigned int buflen; 46.70 + int (*func)(ext2_ino_t dir, 46.71 + int entry, 46.72 + struct ext2_dir_entry *dirent, 46.73 + int offset, 46.74 + int blocksize, 46.75 + char *buf, 46.76 + void *priv_data); 46.77 + void *priv_data; 46.78 + errcode_t errcode; 46.79 +}; 46.80 + 46.81 +/* 46.82 + * Inode cache structure 46.83 + */ 46.84 +struct ext2_inode_cache { 46.85 + void * buffer; 46.86 + blk64_t buffer_blk; 46.87 + int cache_last; 46.88 + unsigned int cache_size; 46.89 + int refcount; 46.90 + struct ext2_inode_cache_ent *cache; 46.91 +}; 46.92 + 46.93 +struct ext2_inode_cache_ent { 46.94 + ext2_ino_t ino; 46.95 + struct ext2_inode *inode; 46.96 +}; 46.97 + 46.98 +/* 46.99 + * NLS defintions 46.100 + */ 46.101 +struct ext2fs_nls_table { 46.102 + int version; 46.103 + const struct ext2fs_nls_ops *ops; 46.104 +}; 46.105 + 46.106 +struct ext2fs_nls_ops { 46.107 + int (*casefold)(const struct ext2fs_nls_table *charset, 46.108 + const unsigned char *str, size_t len, 46.109 + unsigned char *dest, size_t dlen); 46.110 + int (*validate)(const struct ext2fs_nls_table *table, 46.111 + char *s, size_t len, char **pos); 46.112 + int (*casefold_cmp)(const struct ext2fs_nls_table *table, 46.113 + const unsigned char *str1, size_t len1, 46.114 + const unsigned char *str2, size_t len2); 46.115 +}; 46.116 + 46.117 +/* Function prototypes */ 46.118 + 46.119 +extern int ext2fs_process_dir_block(ext2_filsys fs, 46.120 + blk64_t *blocknr, 46.121 + e2_blkcnt_t blockcnt, 46.122 + blk64_t ref_block, 46.123 + int ref_offset, 46.124 + void *priv_data); 46.125 + 46.126 +extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino); 46.127 +extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino); 46.128 +extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs, 46.129 + ext2_ino_t ino, 46.130 + void *priv_data); 46.131 + 46.132 +/* Generic numeric progress meter */ 46.133 + 46.134 +struct ext2fs_numeric_progress_struct { 46.135 + __u64 max; 46.136 + int log_max; 46.137 + int skip_progress; 46.138 +}; 46.139 + 46.140 +/* 46.141 + * progress callback functions 46.142 + */ 46.143 +struct ext2fs_progress_ops { 46.144 + void (*init)(ext2_filsys fs, 46.145 + struct ext2fs_numeric_progress_struct * progress, 46.146 + const char *label, __u64 max); 46.147 + void (*update)(ext2_filsys fs, 46.148 + struct ext2fs_numeric_progress_struct * progress, 46.149 + __u64 val); 46.150 + void (*close)(ext2_filsys fs, 46.151 + struct ext2fs_numeric_progress_struct * progress, 46.152 + const char *message); 46.153 +}; 46.154 + 46.155 +extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops; 46.156 + 46.157 +extern void ext2fs_numeric_progress_init(ext2_filsys fs, 46.158 + struct ext2fs_numeric_progress_struct * progress, 46.159 + const char *label, __u64 max); 46.160 +extern void ext2fs_numeric_progress_update(ext2_filsys fs, 46.161 + struct ext2fs_numeric_progress_struct * progress, 46.162 + __u64 val); 46.163 +extern void ext2fs_numeric_progress_close(ext2_filsys fs, 46.164 + struct ext2fs_numeric_progress_struct * progress, 46.165 + const char *message); 46.166 + 46.167 +/* 46.168 + * 64-bit bitmap support 46.169 + */ 46.170 + 46.171 +extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic, 46.172 + int type, __u64 start, __u64 end, 46.173 + __u64 real_end, 46.174 + const char * description, 46.175 + ext2fs_generic_bitmap *bmap); 46.176 + 46.177 +extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap); 46.178 + 46.179 +extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src, 46.180 + ext2fs_generic_bitmap *dest); 46.181 + 46.182 +extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap, 46.183 + __u64 new_end, 46.184 + __u64 new_real_end); 46.185 +extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap, 46.186 + errcode_t neq, 46.187 + __u64 end, __u64 *oend); 46.188 +extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap, 46.189 + __u64 arg); 46.190 +extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap, 46.191 + __u64 arg); 46.192 +extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, 46.193 + __u64 arg); 46.194 +extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap, 46.195 + __u64 start, unsigned int num, 46.196 + void *in); 46.197 +extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap, 46.198 + __u64 start, unsigned int num, 46.199 + void *out); 46.200 +extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func); 46.201 + 46.202 +extern int ext2fs_mem_is_zero(const char *mem, size_t len); 46.203 + 46.204 +extern int ext2fs_file_block_offset_too_big(ext2_filsys fs, 46.205 + struct ext2_inode *inode, 46.206 + blk64_t offset); 46.207 + 46.208 +/* atexit support */ 46.209 +typedef void (*ext2_exit_fn)(void *); 46.210 +errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data); 46.211 +errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data); 46.212 + 46.213 +#define EXT2FS_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2*!!(cond)]))
47.1 --- a/libext2fs/lib/libext2fs/ext_attr.c Sat Oct 02 23:57:02 2021 +0200 47.2 +++ b/libext2fs/lib/libext2fs/ext_attr.c Sat Oct 09 23:28:01 2021 +0200 47.3 @@ -293,7 +293,9 @@ 47.4 47.5 /* Manipulate the contents of extended attribute regions */ 47.6 struct ext2_xattr { 47.7 + int name_index; 47.8 char *name; 47.9 + char *short_name; 47.10 void *value; 47.11 unsigned int value_len; 47.12 ext2_ino_t ea_ino; 47.13 @@ -336,6 +338,7 @@ 47.14 47.15 /* Keep these names sorted in order of decreasing specificity. */ 47.16 static struct ea_name_index ea_names[] = { 47.17 + {10, "gnu."}, 47.18 {3, "system.posix_acl_default"}, 47.19 {2, "system.posix_acl_access"}, 47.20 {8, "system.richacl"}, 47.21 @@ -626,7 +629,6 @@ 47.22 default: 47.23 ext2fs_free_mem(&out); 47.24 return EINVAL; 47.25 - break; 47.26 } 47.27 entry++; 47.28 } 47.29 @@ -643,29 +645,23 @@ 47.30 struct ext2_xattr *x; 47.31 struct ext2_ext_attr_entry *e = entries_start; 47.32 char *end = (char *) entries_start + storage_size; 47.33 - const char *shortname; 47.34 unsigned int value_size; 47.35 - int idx, ret; 47.36 errcode_t err; 47.37 47.38 memset(entries_start, 0, storage_size); 47.39 for (x = attrs; x < attrs + count; x++) { 47.40 - /* Calculate index and shortname position */ 47.41 - shortname = x->name; 47.42 - ret = find_ea_index(x->name, &shortname, &idx); 47.43 - 47.44 value_size = ((x->value_len + EXT2_EXT_ATTR_PAD - 1) / 47.45 EXT2_EXT_ATTR_PAD) * EXT2_EXT_ATTR_PAD; 47.46 47.47 /* Fill out e appropriately */ 47.48 - e->e_name_len = strlen(shortname); 47.49 - e->e_name_index = (ret ? idx : 0); 47.50 + e->e_name_len = strlen(x->short_name); 47.51 + e->e_name_index = x->name_index; 47.52 47.53 e->e_value_size = x->value_len; 47.54 e->e_value_inum = x->ea_ino; 47.55 47.56 /* Store name */ 47.57 - memcpy((char *)e + sizeof(*e), shortname, e->e_name_len); 47.58 + memcpy((char *)e + sizeof(*e), x->short_name, e->e_name_len); 47.59 if (x->ea_ino) { 47.60 e->e_value_offs = 0; 47.61 } else { 47.62 @@ -875,6 +871,8 @@ 47.63 memcpy(x->name + prefix_len, 47.64 (char *)entry + sizeof(*entry), 47.65 entry->e_name_len); 47.66 + x->short_name = x->name + prefix_len; 47.67 + x->name_index = entry->e_name_index; 47.68 47.69 /* Check & copy value */ 47.70 if (!ext2fs_has_feature_ea_inode(handle->fs->super) && 47.71 @@ -924,8 +922,8 @@ 47.72 !(ea_inode->i_flags & EXT4_EA_INODE_FL) || 47.73 ea_inode->i_links_count == 0) 47.74 err = EXT2_ET_EA_INODE_CORRUPTED; 47.75 - else if (ext2fs_file_get_size(ea_file) != 47.76 - entry->e_value_size) 47.77 + else if ((__u64) ext2fs_file_get_size(ea_file) != 47.78 + entry->e_value_size) 47.79 err = EXT2_ET_EA_BAD_VALUE_SIZE; 47.80 else 47.81 err = ext2fs_file_read(ea_file, x->value, 47.82 @@ -1302,7 +1300,8 @@ 47.83 } 47.84 47.85 static errcode_t xattr_update_entry(ext2_filsys fs, struct ext2_xattr *x, 47.86 - const char *name, const void *value, 47.87 + const char *name, const char *short_name, 47.88 + int index, const void *value, 47.89 size_t value_len, int in_inode) 47.90 { 47.91 ext2_ino_t ea_ino = 0; 47.92 @@ -1336,8 +1335,11 @@ 47.93 goto fail; 47.94 } 47.95 47.96 - if (!x->name) 47.97 + if (!x->name) { 47.98 x->name = new_name; 47.99 + x->short_name = new_name + (short_name - name); 47.100 + } 47.101 + x->name_index = index; 47.102 47.103 if (x->value) 47.104 ext2fs_free_mem(&x->value); 47.105 @@ -1356,31 +1358,27 @@ 47.106 } 47.107 47.108 static int xattr_find_position(struct ext2_xattr *attrs, int count, 47.109 - const char *name) 47.110 + const char *shortname, int name_idx) 47.111 { 47.112 struct ext2_xattr *x; 47.113 int i; 47.114 - const char *shortname, *x_shortname; 47.115 - int name_idx, x_name_idx; 47.116 int shortname_len, x_shortname_len; 47.117 47.118 - find_ea_index(name, &shortname, &name_idx); 47.119 shortname_len = strlen(shortname); 47.120 47.121 for (i = 0, x = attrs; i < count; i++, x++) { 47.122 - find_ea_index(x->name, &x_shortname, &x_name_idx); 47.123 - if (name_idx < x_name_idx) 47.124 + if (name_idx < x->name_index) 47.125 break; 47.126 - if (name_idx > x_name_idx) 47.127 + if (name_idx > x->name_index) 47.128 continue; 47.129 47.130 - x_shortname_len = strlen(x_shortname); 47.131 + x_shortname_len = strlen(x->short_name); 47.132 if (shortname_len < x_shortname_len) 47.133 break; 47.134 if (shortname_len > x_shortname_len) 47.135 continue; 47.136 47.137 - if (memcmp(shortname, x_shortname, shortname_len) <= 0) 47.138 + if (memcmp(shortname, x->short_name, shortname_len) <= 0) 47.139 break; 47.140 } 47.141 return i; 47.142 @@ -1395,8 +1393,8 @@ 47.143 struct ext2_xattr tmp; 47.144 int add_to_ibody; 47.145 int needed; 47.146 - int name_len, name_idx; 47.147 - const char *shortname; 47.148 + int name_len, name_idx = 0; 47.149 + const char *shortname = name; 47.150 int new_idx; 47.151 int ret; 47.152 47.153 @@ -1423,7 +1421,8 @@ 47.154 47.155 /* Update the existing entry. */ 47.156 ret = xattr_update_entry(h->fs, &h->attrs[old_idx], name, 47.157 - value, value_len, in_inode); 47.158 + shortname, name_idx, value, 47.159 + value_len, in_inode); 47.160 if (ret) 47.161 return ret; 47.162 if (h->ibody_count <= old_idx) { 47.163 @@ -1451,7 +1450,8 @@ 47.164 if (old_idx >= 0) { 47.165 /* Update the existing entry. */ 47.166 ret = xattr_update_entry(h->fs, &h->attrs[old_idx], name, 47.167 - value, value_len, in_inode); 47.168 + shortname, name_idx, value, 47.169 + value_len, in_inode); 47.170 if (ret) 47.171 return ret; 47.172 if (old_idx < h->ibody_count) { 47.173 @@ -1460,7 +1460,8 @@ 47.174 * entries in the block are sorted. 47.175 */ 47.176 new_idx = xattr_find_position(h->attrs + h->ibody_count, 47.177 - h->count - h->ibody_count, name); 47.178 + h->count - h->ibody_count, 47.179 + shortname, name_idx); 47.180 new_idx += h->ibody_count - 1; 47.181 tmp = h->attrs[old_idx]; 47.182 memmove(h->attrs + old_idx, h->attrs + old_idx + 1, 47.183 @@ -1472,7 +1473,8 @@ 47.184 } 47.185 47.186 new_idx = xattr_find_position(h->attrs + h->ibody_count, 47.187 - h->count - h->ibody_count, name); 47.188 + h->count - h->ibody_count, 47.189 + shortname, name_idx); 47.190 new_idx += h->ibody_count; 47.191 add_to_ibody = 0; 47.192 47.193 @@ -1483,8 +1485,8 @@ 47.194 return ret; 47.195 } 47.196 47.197 - ret = xattr_update_entry(h->fs, &h->attrs[h->count], name, value, 47.198 - value_len, in_inode); 47.199 + ret = xattr_update_entry(h->fs, &h->attrs[h->count], name, shortname, 47.200 + name_idx, value, value_len, in_inode); 47.201 if (ret) 47.202 return ret; 47.203 47.204 @@ -1502,12 +1504,10 @@ 47.205 { 47.206 int total = 0; 47.207 struct ext2_xattr *x; 47.208 - const char *shortname; 47.209 - int i, len, name_idx; 47.210 + int i, len; 47.211 47.212 for (i = 0, x = attrs; i < count; i++, x++) { 47.213 - find_ea_index(x->name, &shortname, &name_idx); 47.214 - len = strlen(shortname); 47.215 + len = strlen(x->short_name); 47.216 total += EXT2_EXT_ATTR_LEN(len); 47.217 if (!x->ea_ino) 47.218 total += EXT2_EXT_ATTR_SIZE(x->value_len); 47.219 @@ -1550,14 +1550,15 @@ 47.220 new_value, &value_len); 47.221 if (ret) 47.222 goto out; 47.223 - } else 47.224 + } else if (value_len) 47.225 memcpy(new_value, value, value_len); 47.226 47.227 /* Imitate kernel behavior by skipping update if value is the same. */ 47.228 for (x = h->attrs; x < h->attrs + h->count; x++) { 47.229 if (!strcmp(x->name, name)) { 47.230 if (!x->ea_ino && x->value_len == value_len && 47.231 - !memcmp(x->value, new_value, value_len)) { 47.232 + (!value_len || 47.233 + !memcmp(x->value, new_value, value_len))) { 47.234 ret = 0; 47.235 goto out; 47.236 }
48.1 --- a/libext2fs/lib/libext2fs/extent.c Sat Oct 02 23:57:02 2021 +0200 48.2 +++ b/libext2fs/lib/libext2fs/extent.c Sat Oct 09 23:28:01 2021 +0200 48.3 @@ -1737,6 +1737,121 @@ 48.4 return last_result; 48.5 } 48.6 48.7 +errcode_t ext2fs_fix_extents_checksums(ext2_filsys fs, ext2_ino_t ino, 48.8 + struct ext2_inode *inode) 48.9 +{ 48.10 + ext2_extent_handle_t handle; 48.11 + struct ext2fs_extent extent; 48.12 + errcode_t errcode; 48.13 + int save_flags = fs->flags; 48.14 + 48.15 + if (!ext2fs_has_feature_metadata_csum(fs->super) || 48.16 + (inode && !(inode->i_flags & EXT4_EXTENTS_FL))) 48.17 + return 0; 48.18 + 48.19 + errcode = ext2fs_extent_open2(fs, ino, inode, &handle); 48.20 + if (errcode) { 48.21 + if (errcode == EXT2_ET_INODE_NOT_EXTENT) 48.22 + errcode = 0; 48.23 + return errcode; 48.24 + } 48.25 + 48.26 + fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS; 48.27 + errcode = ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent); 48.28 + if (errcode) 48.29 + goto out; 48.30 + 48.31 + do { 48.32 + /* Skip to the end of a block of leaf nodes */ 48.33 + if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) { 48.34 + errcode = ext2fs_extent_get(handle, 48.35 + EXT2_EXTENT_LAST_SIB, 48.36 + &extent); 48.37 + if (errcode) 48.38 + break; 48.39 + } 48.40 + 48.41 + errcode = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT, &extent); 48.42 + if (errcode == EXT2_ET_EXTENT_CSUM_INVALID) 48.43 + errcode = update_path(handle); 48.44 + } while (errcode == 0); 48.45 + 48.46 +out: 48.47 + /* Ok if we run off the end */ 48.48 + if (errcode == EXT2_ET_EXTENT_NO_NEXT) 48.49 + errcode = 0; 48.50 + ext2fs_extent_free(handle); 48.51 + fs->flags = save_flags; 48.52 + return errcode; 48.53 +} 48.54 + 48.55 +errcode_t ext2fs_decode_extent(struct ext2fs_extent *to, void *addr, int len) 48.56 +{ 48.57 + struct ext3_extent *from = (struct ext3_extent *)addr; 48.58 + 48.59 + if (len != sizeof(struct ext3_extent)) 48.60 + return EXT2_ET_INVALID_ARGUMENT; 48.61 + 48.62 + to->e_pblk = ext2fs_le32_to_cpu(from->ee_start) + 48.63 + ((__u64) ext2fs_le16_to_cpu(from->ee_start_hi) 48.64 + << 32); 48.65 + to->e_lblk = ext2fs_le32_to_cpu(from->ee_block); 48.66 + to->e_len = ext2fs_le16_to_cpu(from->ee_len); 48.67 + to->e_flags = EXT2_EXTENT_FLAGS_LEAF; 48.68 + if (to->e_len > EXT_INIT_MAX_LEN) { 48.69 + to->e_len -= EXT_INIT_MAX_LEN; 48.70 + to->e_flags |= EXT2_EXTENT_FLAGS_UNINIT; 48.71 + } 48.72 + 48.73 + return 0; 48.74 +} 48.75 + 48.76 +errcode_t ext2fs_count_blocks(ext2_filsys fs, ext2_ino_t ino, 48.77 + struct ext2_inode *inode, blk64_t *ret_count) 48.78 +{ 48.79 + ext2_extent_handle_t handle = NULL; 48.80 + struct ext2fs_extent extent; 48.81 + errcode_t errcode; 48.82 + int i; 48.83 + blk64_t blkcount = 0; 48.84 + blk64_t *intermediate_nodes; 48.85 + 48.86 + errcode = ext2fs_extent_open2(fs, ino, inode, &handle); 48.87 + if (errcode) 48.88 + goto out; 48.89 + 48.90 + errcode = ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent); 48.91 + if (errcode) 48.92 + goto out; 48.93 + 48.94 + errcode = ext2fs_get_array(handle->max_depth, sizeof(blk64_t), 48.95 + &intermediate_nodes); 48.96 + if (errcode) 48.97 + goto out; 48.98 + 48.99 + blkcount = handle->level; 48.100 + while (!errcode) { 48.101 + if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) { 48.102 + blkcount += extent.e_len; 48.103 + for (i = 0; i < handle->level; i++) { 48.104 + if (intermediate_nodes[i] != 48.105 + handle->path[i].end_blk) { 48.106 + blkcount++; 48.107 + intermediate_nodes[i] = 48.108 + handle->path[i].end_blk; 48.109 + } 48.110 + } 48.111 + } 48.112 + errcode = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT, &extent); 48.113 + } 48.114 + ext2fs_free_mem(&intermediate_nodes); 48.115 +out: 48.116 + *ret_count = blkcount; 48.117 + ext2fs_extent_free(handle); 48.118 + 48.119 + return 0; 48.120 +} 48.121 + 48.122 #ifdef DEBUG 48.123 /* 48.124 * Override debugfs's prompt
49.1 --- a/libext2fs/lib/libext2fs/fallocate.c Sat Oct 02 23:57:02 2021 +0200 49.2 +++ b/libext2fs/lib/libext2fs/fallocate.c Sat Oct 09 23:28:01 2021 +0200 49.3 @@ -805,7 +805,8 @@ 49.4 blk64_t start, blk64_t len) 49.5 { 49.6 struct ext2_inode inode_buf; 49.7 - blk64_t blk, x; 49.8 + blk64_t blk, x, zero_blk, last = 0; 49.9 + int zero_len = 0; 49.10 errcode_t err; 49.11 49.12 if (((flags & EXT2_FALLOCATE_FORCE_INIT) && 49.13 @@ -841,15 +842,32 @@ 49.14 if (x) 49.15 continue; 49.16 49.17 - err = ext2fs_bmap2(fs, ino, inode, NULL, 49.18 - BMAP_ALLOC | BMAP_UNINIT | BMAP_ZERO, blk, 49.19 - 0, &x); 49.20 + err = ext2fs_bmap2(fs, ino, inode, NULL, BMAP_ALLOC, 49.21 + blk, 0, &x); 49.22 if (err) 49.23 - return err; 49.24 + goto errout; 49.25 + if ((zero_len && (x != last+1)) || 49.26 + (zero_len >= 65536)) { 49.27 + err = ext2fs_zero_blocks2(fs, zero_blk, zero_len, 49.28 + NULL, NULL); 49.29 + zero_len = 0; 49.30 + if (err) 49.31 + goto errout; 49.32 + } 49.33 + if (zero_len == 0) { 49.34 + zero_blk = x; 49.35 + zero_len = 1; 49.36 + } else { 49.37 + zero_len++; 49.38 + } 49.39 + last = x; 49.40 } 49.41 49.42 out: 49.43 if (inode == &inode_buf) 49.44 ext2fs_write_inode(fs, ino, inode); 49.45 +errout: 49.46 + if (zero_len) 49.47 + ext2fs_zero_blocks2(fs, zero_blk, zero_len, NULL, NULL); 49.48 return err; 49.49 }
50.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 50.2 +++ b/libext2fs/lib/libext2fs/fast_commit.h Sat Oct 09 23:28:01 2021 +0200 50.3 @@ -0,0 +1,203 @@ 50.4 +/* SPDX-License-Identifier: GPL-2.0 */ 50.5 + 50.6 +#ifndef __FAST_COMMIT_H__ 50.7 +#define __FAST_COMMIT_H__ 50.8 + 50.9 +#include "jfs_compat.h" 50.10 + 50.11 +/* 50.12 + * Note this file is present in e2fsprogs/lib/ext2fs/fast_commit.h and 50.13 + * linux/fs/ext4/fast_commit.h. These file should always be byte identical. 50.14 + */ 50.15 + 50.16 +/* Fast commit tags */ 50.17 +#define EXT4_FC_TAG_ADD_RANGE 0x0001 50.18 +#define EXT4_FC_TAG_DEL_RANGE 0x0002 50.19 +#define EXT4_FC_TAG_CREAT 0x0003 50.20 +#define EXT4_FC_TAG_LINK 0x0004 50.21 +#define EXT4_FC_TAG_UNLINK 0x0005 50.22 +#define EXT4_FC_TAG_INODE 0x0006 50.23 +#define EXT4_FC_TAG_PAD 0x0007 50.24 +#define EXT4_FC_TAG_TAIL 0x0008 50.25 +#define EXT4_FC_TAG_HEAD 0x0009 50.26 + 50.27 +#define EXT4_FC_SUPPORTED_FEATURES 0x0 50.28 + 50.29 +/* On disk fast commit tlv value structures */ 50.30 + 50.31 +/* Fast commit on disk tag length structure */ 50.32 +struct ext4_fc_tl { 50.33 + __le16 fc_tag; 50.34 + __le16 fc_len; 50.35 +}; 50.36 + 50.37 +/* Value structure for tag EXT4_FC_TAG_HEAD. */ 50.38 +struct ext4_fc_head { 50.39 + __le32 fc_features; 50.40 + __le32 fc_tid; 50.41 +}; 50.42 + 50.43 +/* Value structure for EXT4_FC_TAG_ADD_RANGE. */ 50.44 +struct ext4_fc_add_range { 50.45 + __le32 fc_ino; 50.46 + __u8 fc_ex[12]; 50.47 +}; 50.48 + 50.49 +/* Value structure for tag EXT4_FC_TAG_DEL_RANGE. */ 50.50 +struct ext4_fc_del_range { 50.51 + __le32 fc_ino; 50.52 + __le32 fc_lblk; 50.53 + __le32 fc_len; 50.54 +}; 50.55 + 50.56 +/* 50.57 + * This is the value structure for tags EXT4_FC_TAG_CREAT, EXT4_FC_TAG_LINK 50.58 + * and EXT4_FC_TAG_UNLINK. 50.59 + */ 50.60 +struct ext4_fc_dentry_info { 50.61 + __le32 fc_parent_ino; 50.62 + __le32 fc_ino; 50.63 + __u8 fc_dname[0]; 50.64 +}; 50.65 + 50.66 +/* Value structure for EXT4_FC_TAG_INODE and EXT4_FC_TAG_INODE_PARTIAL. */ 50.67 +struct ext4_fc_inode { 50.68 + __le32 fc_ino; 50.69 + __u8 fc_raw_inode[0]; 50.70 +}; 50.71 + 50.72 +/* Value structure for tag EXT4_FC_TAG_TAIL. */ 50.73 +struct ext4_fc_tail { 50.74 + __le32 fc_tid; 50.75 + __le32 fc_crc; 50.76 +}; 50.77 + 50.78 +/* 50.79 + * Fast commit reason codes 50.80 + */ 50.81 +enum { 50.82 + /* 50.83 + * Commit status codes: 50.84 + */ 50.85 + EXT4_FC_REASON_OK = 0, 50.86 + EXT4_FC_REASON_INELIGIBLE, 50.87 + EXT4_FC_REASON_ALREADY_COMMITTED, 50.88 + EXT4_FC_REASON_FC_START_FAILED, 50.89 + EXT4_FC_REASON_FC_FAILED, 50.90 + 50.91 + /* 50.92 + * Fast commit ineligiblity reasons: 50.93 + */ 50.94 + EXT4_FC_REASON_XATTR = 0, 50.95 + EXT4_FC_REASON_CROSS_RENAME, 50.96 + EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, 50.97 + EXT4_FC_REASON_NOMEM, 50.98 + EXT4_FC_REASON_SWAP_BOOT, 50.99 + EXT4_FC_REASON_RESIZE, 50.100 + EXT4_FC_REASON_RENAME_DIR, 50.101 + EXT4_FC_REASON_FALLOC_RANGE, 50.102 + EXT4_FC_REASON_INODE_JOURNAL_DATA, 50.103 + EXT4_FC_COMMIT_FAILED, 50.104 + EXT4_FC_REASON_MAX 50.105 +}; 50.106 + 50.107 +#ifdef __KERNEL__ 50.108 +/* 50.109 + * In memory list of dentry updates that are performed on the file 50.110 + * system used by fast commit code. 50.111 + */ 50.112 +struct ext4_fc_dentry_update { 50.113 + int fcd_op; /* Type of update create / unlink / link */ 50.114 + int fcd_parent; /* Parent inode number */ 50.115 + int fcd_ino; /* Inode number */ 50.116 + struct qstr fcd_name; /* Dirent name */ 50.117 + unsigned char fcd_iname[DNAME_INLINE_LEN]; /* Dirent name string */ 50.118 + struct list_head fcd_list; 50.119 +}; 50.120 + 50.121 +struct ext4_fc_stats { 50.122 + unsigned int fc_ineligible_reason_count[EXT4_FC_REASON_MAX]; 50.123 + unsigned long fc_num_commits; 50.124 + unsigned long fc_ineligible_commits; 50.125 + unsigned long fc_numblks; 50.126 +}; 50.127 + 50.128 +#define EXT4_FC_REPLAY_REALLOC_INCREMENT 4 50.129 + 50.130 +/* 50.131 + * Physical block regions added to different inodes due to fast commit 50.132 + * recovery. These are set during the SCAN phase. During the replay phase, 50.133 + * our allocator excludes these from its allocation. This ensures that 50.134 + * we don't accidentally allocating a block that is going to be used by 50.135 + * another inode. 50.136 + */ 50.137 +struct ext4_fc_alloc_region { 50.138 + ext4_lblk_t lblk; 50.139 + ext4_fsblk_t pblk; 50.140 + int ino, len; 50.141 +}; 50.142 + 50.143 +/* 50.144 + * Fast commit replay state. 50.145 + */ 50.146 +struct ext4_fc_replay_state { 50.147 + int fc_replay_num_tags; 50.148 + int fc_replay_expected_off; 50.149 + int fc_current_pass; 50.150 + int fc_cur_tag; 50.151 + int fc_crc; 50.152 + struct ext4_fc_alloc_region *fc_regions; 50.153 + int fc_regions_size, fc_regions_used, fc_regions_valid; 50.154 + int *fc_modified_inodes; 50.155 + int fc_modified_inodes_used, fc_modified_inodes_size; 50.156 +}; 50.157 + 50.158 +#define region_last(__region) (((__region)->lblk) + ((__region)->len) - 1) 50.159 +#endif 50.160 + 50.161 +#define fc_for_each_tl(__start, __end, __tl) \ 50.162 + for (tl = (struct ext4_fc_tl *)(__start); \ 50.163 + (__u8 *)tl < (__u8 *)(__end); \ 50.164 + tl = (struct ext4_fc_tl *)((__u8 *)tl + \ 50.165 + sizeof(struct ext4_fc_tl) + \ 50.166 + + le16_to_cpu(tl->fc_len))) 50.167 + 50.168 +static inline const char *tag2str(__u16 tag) 50.169 +{ 50.170 + switch (tag) { 50.171 + case EXT4_FC_TAG_LINK: 50.172 + return "ADD_ENTRY"; 50.173 + case EXT4_FC_TAG_UNLINK: 50.174 + return "DEL_ENTRY"; 50.175 + case EXT4_FC_TAG_ADD_RANGE: 50.176 + return "ADD_RANGE"; 50.177 + case EXT4_FC_TAG_CREAT: 50.178 + return "CREAT_DENTRY"; 50.179 + case EXT4_FC_TAG_DEL_RANGE: 50.180 + return "DEL_RANGE"; 50.181 + case EXT4_FC_TAG_INODE: 50.182 + return "INODE"; 50.183 + case EXT4_FC_TAG_PAD: 50.184 + return "PAD"; 50.185 + case EXT4_FC_TAG_TAIL: 50.186 + return "TAIL"; 50.187 + case EXT4_FC_TAG_HEAD: 50.188 + return "HEAD"; 50.189 + default: 50.190 + return "ERROR"; 50.191 + } 50.192 +} 50.193 + 50.194 +/* Get length of a particular tlv */ 50.195 +static inline int ext4_fc_tag_len(struct ext4_fc_tl *tl) 50.196 +{ 50.197 + return le16_to_cpu(tl->fc_len); 50.198 +} 50.199 + 50.200 +/* Get a pointer to "value" of a tlv */ 50.201 +static inline __u8 *ext4_fc_tag_val(struct ext4_fc_tl *tl) 50.202 +{ 50.203 + return (__u8 *)tl + sizeof(*tl); 50.204 +} 50.205 + 50.206 +#endif /* __FAST_COMMIT_H__ */
51.1 --- a/libext2fs/lib/libext2fs/fiemap.h Sat Oct 02 23:57:02 2021 +0200 51.2 +++ b/libext2fs/lib/libext2fs/fiemap.h Sat Oct 09 23:28:01 2021 +0200 51.3 @@ -45,10 +45,23 @@ 51.4 #define FS_IOC_FIEMAP _IOWR('f', 11, struct fiemap) 51.5 #endif 51.6 51.7 +#if defined(__linux__) && !defined(FS_IOC_GETSTATE) 51.8 +#define EXT4_IOC_GETSTATE _IOW('f', 41, __u32) 51.9 +#endif 51.10 + 51.11 +#if defined(__linux__) && !defined(EXT4_IOC_GET_ES_CACHE) 51.12 +#define EXT4_IOC_GET_ES_CACHE _IOWR('f', 42, struct fiemap) 51.13 +#endif 51.14 + 51.15 +#if defined(__linux__) && !defined(EXT4_STATE_FLAG_EXT_PRECACHED) 51.16 +#define EXT4_STATE_FLAG_EXT_PRECACHED 0x00000001 51.17 +#endif 51.18 + 51.19 #define FIEMAP_MAX_OFFSET (~0ULL) 51.20 51.21 #define FIEMAP_FLAG_SYNC 0x00000001 /* sync file data before map */ 51.22 #define FIEMAP_FLAG_XATTR 0x00000002 /* map extended attribute tree */ 51.23 +#define FIEMAP_FLAG_CACHE 0x00000004 /* request caching of the extents */ 51.24 51.25 #define FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR) 51.26 51.27 @@ -74,4 +87,7 @@ 51.28 #define FIEMAP_EXTENT_SHARED 0x00002000 /* Space shared with other 51.29 * files. */ 51.30 51.31 +#define EXT4_FIEMAP_EXTENT_HOLE 0x08000000 /* Entry in extent status 51.32 + cache for a hole*/ 51.33 + 51.34 #endif /* _LINUX_FIEMAP_H */
52.1 --- a/libext2fs/lib/libext2fs/gen_bitmap.c Sat Oct 02 23:57:02 2021 +0200 52.2 +++ b/libext2fs/lib/libext2fs/gen_bitmap.c Sat Oct 09 23:28:01 2021 +0200 52.3 @@ -28,7 +28,7 @@ 52.4 #include "ext2_fs.h" 52.5 #include "ext2fsP.h" 52.6 52.7 -struct ext2fs_struct_generic_bitmap { 52.8 +struct ext2fs_struct_generic_bitmap_32 { 52.9 errcode_t magic; 52.10 ext2_filsys fs; 52.11 __u32 start, end; 52.12 @@ -39,6 +39,8 @@ 52.13 __u32 reserved[7]; 52.14 }; 52.15 52.16 +typedef struct ext2fs_struct_generic_bitmap_32 *ext2fs_generic_bitmap_32; 52.17 + 52.18 #define EXT2FS_IS_32_BITMAP(bmap) \ 52.19 (((bmap)->magic == EXT2_ET_MAGIC_GENERIC_BITMAP) || \ 52.20 ((bmap)->magic == EXT2_ET_MAGIC_BLOCK_BITMAP) || \ 52.21 @@ -53,9 +55,11 @@ 52.22 * Used by previously inlined function, so we have to export this and 52.23 * not change the function signature 52.24 */ 52.25 -void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap, 52.26 +void ext2fs_warn_bitmap2(ext2fs_generic_bitmap gen_bitmap, 52.27 int code, unsigned long arg) 52.28 { 52.29 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.30 + 52.31 #ifndef OMIT_COM_ERR 52.32 if (bitmap->description) 52.33 com_err(0, bitmap->base_error_code+code, 52.34 @@ -79,11 +83,11 @@ 52.35 const char *descr, char *init_map, 52.36 ext2fs_generic_bitmap *ret) 52.37 { 52.38 - ext2fs_generic_bitmap bitmap; 52.39 + ext2fs_generic_bitmap_32 bitmap; 52.40 errcode_t retval; 52.41 size_t size; 52.42 52.43 - retval = ext2fs_get_mem(sizeof(struct ext2fs_struct_generic_bitmap), 52.44 + retval = ext2fs_get_mem(sizeof(struct ext2fs_struct_generic_bitmap_32), 52.45 &bitmap); 52.46 if (retval) 52.47 return retval; 52.48 @@ -127,7 +131,7 @@ 52.49 memcpy(bitmap->bitmap, init_map, size); 52.50 else 52.51 memset(bitmap->bitmap, 0, size); 52.52 - *ret = bitmap; 52.53 + *ret = (ext2fs_generic_bitmap) bitmap; 52.54 return 0; 52.55 } 52.56 52.57 @@ -141,9 +145,11 @@ 52.58 start, end, real_end, descr, 0, ret); 52.59 } 52.60 52.61 -errcode_t ext2fs_copy_generic_bitmap(ext2fs_generic_bitmap src, 52.62 +errcode_t ext2fs_copy_generic_bitmap(ext2fs_generic_bitmap gen_src, 52.63 ext2fs_generic_bitmap *dest) 52.64 { 52.65 + ext2fs_generic_bitmap_32 src = (ext2fs_generic_bitmap_32) gen_src; 52.66 + 52.67 return (ext2fs_make_generic_bitmap(src->magic, src->fs, 52.68 src->start, src->end, 52.69 src->real_end, 52.70 @@ -151,9 +157,11 @@ 52.71 dest)); 52.72 } 52.73 52.74 -void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap) 52.75 +void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap gen_bitmap) 52.76 { 52.77 - if (check_magic(bitmap)) 52.78 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.79 + 52.80 + if (check_magic(gen_bitmap)) 52.81 return; 52.82 52.83 bitmap->magic = 0; 52.84 @@ -171,6 +179,8 @@ 52.85 int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap, 52.86 blk_t bitno) 52.87 { 52.88 + ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap; 52.89 + 52.90 if (!EXT2FS_IS_32_BITMAP(bitmap)) { 52.91 if (EXT2FS_IS_64_BITMAP(bitmap)) { 52.92 ext2fs_warn_bitmap32(bitmap, __func__); 52.93 @@ -183,16 +193,18 @@ 52.94 return 0; 52.95 } 52.96 52.97 - if ((bitno < bitmap->start) || (bitno > bitmap->end)) { 52.98 + if ((bitno < bitmap32->start) || (bitno > bitmap32->end)) { 52.99 ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, bitno); 52.100 return 0; 52.101 } 52.102 - return ext2fs_test_bit(bitno - bitmap->start, bitmap->bitmap); 52.103 + return ext2fs_test_bit(bitno - bitmap32->start, bitmap32->bitmap); 52.104 } 52.105 52.106 int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap, 52.107 __u32 bitno) 52.108 { 52.109 + ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap; 52.110 + 52.111 if (!EXT2FS_IS_32_BITMAP(bitmap)) { 52.112 if (EXT2FS_IS_64_BITMAP(bitmap)) { 52.113 ext2fs_warn_bitmap32(bitmap, __func__); 52.114 @@ -205,16 +217,18 @@ 52.115 return 0; 52.116 } 52.117 52.118 - if ((bitno < bitmap->start) || (bitno > bitmap->end)) { 52.119 + if ((bitno < bitmap32->start) || (bitno > bitmap32->end)) { 52.120 ext2fs_warn_bitmap2(bitmap, EXT2FS_MARK_ERROR, bitno); 52.121 return 0; 52.122 } 52.123 - return ext2fs_set_bit(bitno - bitmap->start, bitmap->bitmap); 52.124 + return ext2fs_set_bit(bitno - bitmap32->start, bitmap32->bitmap); 52.125 } 52.126 52.127 int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap, 52.128 blk_t bitno) 52.129 { 52.130 + ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap; 52.131 + 52.132 if (!EXT2FS_IS_32_BITMAP(bitmap)) { 52.133 if (EXT2FS_IS_64_BITMAP(bitmap)) { 52.134 ext2fs_warn_bitmap32(bitmap, __func__); 52.135 @@ -227,15 +241,17 @@ 52.136 return 0; 52.137 } 52.138 52.139 - if ((bitno < bitmap->start) || (bitno > bitmap->end)) { 52.140 + if ((bitno < bitmap32->start) || (bitno > bitmap32->end)) { 52.141 ext2fs_warn_bitmap2(bitmap, EXT2FS_UNMARK_ERROR, bitno); 52.142 return 0; 52.143 } 52.144 - return ext2fs_clear_bit(bitno - bitmap->start, bitmap->bitmap); 52.145 + return ext2fs_clear_bit(bitno - bitmap32->start, bitmap32->bitmap); 52.146 } 52.147 52.148 __u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap) 52.149 { 52.150 + ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap; 52.151 + 52.152 if (!EXT2FS_IS_32_BITMAP(bitmap)) { 52.153 if (EXT2FS_IS_64_BITMAP(bitmap)) { 52.154 ext2fs_warn_bitmap32(bitmap, __func__); 52.155 @@ -248,11 +264,13 @@ 52.156 return 0; 52.157 } 52.158 52.159 - return bitmap->start; 52.160 + return bitmap32->start; 52.161 } 52.162 52.163 __u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap) 52.164 { 52.165 + ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap; 52.166 + 52.167 if (!EXT2FS_IS_32_BITMAP(bitmap)) { 52.168 if (EXT2FS_IS_64_BITMAP(bitmap)) { 52.169 ext2fs_warn_bitmap32(bitmap, __func__); 52.170 @@ -264,11 +282,13 @@ 52.171 #endif 52.172 return 0; 52.173 } 52.174 - return bitmap->end; 52.175 + return bitmap32->end; 52.176 } 52.177 52.178 void ext2fs_clear_generic_bitmap(ext2fs_generic_bitmap bitmap) 52.179 { 52.180 + ext2fs_generic_bitmap_32 bitmap32 = (ext2fs_generic_bitmap_32) bitmap; 52.181 + 52.182 if (!EXT2FS_IS_32_BITMAP(bitmap)) { 52.183 if (EXT2FS_IS_64_BITMAP(bitmap)) { 52.184 ext2fs_warn_bitmap32(bitmap, __func__); 52.185 @@ -282,14 +302,16 @@ 52.186 return; 52.187 } 52.188 52.189 - memset(bitmap->bitmap, 0, 52.190 - (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1)); 52.191 + memset(bitmap32->bitmap, 0, 52.192 + (size_t) (((bitmap32->real_end - bitmap32->start) / 8) + 1)); 52.193 } 52.194 52.195 -errcode_t ext2fs_fudge_generic_bitmap_end(ext2fs_inode_bitmap bitmap, 52.196 +errcode_t ext2fs_fudge_generic_bitmap_end(ext2fs_inode_bitmap gen_bitmap, 52.197 errcode_t magic, errcode_t neq, 52.198 ext2_ino_t end, ext2_ino_t *oend) 52.199 { 52.200 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.201 + 52.202 EXT2_CHECK_MAGIC(bitmap, magic); 52.203 52.204 if (end > bitmap->real_end) 52.205 @@ -302,8 +324,9 @@ 52.206 52.207 errcode_t ext2fs_resize_generic_bitmap(errcode_t magic, 52.208 __u32 new_end, __u32 new_real_end, 52.209 - ext2fs_generic_bitmap bmap) 52.210 + ext2fs_generic_bitmap gen_bmap) 52.211 { 52.212 + ext2fs_generic_bitmap_32 bmap = (ext2fs_generic_bitmap_32) gen_bmap; 52.213 errcode_t retval; 52.214 size_t size, new_size; 52.215 __u32 bitno; 52.216 @@ -344,9 +367,11 @@ 52.217 } 52.218 52.219 errcode_t ext2fs_compare_generic_bitmap(errcode_t magic, errcode_t neq, 52.220 - ext2fs_generic_bitmap bm1, 52.221 - ext2fs_generic_bitmap bm2) 52.222 + ext2fs_generic_bitmap gen_bm1, 52.223 + ext2fs_generic_bitmap gen_bm2) 52.224 { 52.225 + ext2fs_generic_bitmap_32 bm1 = (ext2fs_generic_bitmap_32) gen_bm1; 52.226 + ext2fs_generic_bitmap_32 bm2 = (ext2fs_generic_bitmap_32) gen_bm2; 52.227 blk_t i; 52.228 52.229 if (!bm1 || bm1->magic != magic) 52.230 @@ -361,15 +386,16 @@ 52.231 return neq; 52.232 52.233 for (i = bm1->end - ((bm1->end - bm1->start) % 8); i <= bm1->end; i++) 52.234 - if (ext2fs_fast_test_block_bitmap(bm1, i) != 52.235 - ext2fs_fast_test_block_bitmap(bm2, i)) 52.236 + if (ext2fs_fast_test_block_bitmap(gen_bm1, i) != 52.237 + ext2fs_fast_test_block_bitmap(gen_bm2, i)) 52.238 return neq; 52.239 52.240 return 0; 52.241 } 52.242 52.243 -void ext2fs_set_generic_bitmap_padding(ext2fs_generic_bitmap map) 52.244 +void ext2fs_set_generic_bitmap_padding(ext2fs_generic_bitmap gen_map) 52.245 { 52.246 + ext2fs_generic_bitmap_32 map = (ext2fs_generic_bitmap_32) gen_map; 52.247 __u32 i, j; 52.248 52.249 /* Protect loop from wrap-around if map->real_end is maxed */ 52.250 @@ -379,33 +405,37 @@ 52.251 ext2fs_set_bit(j, map->bitmap); 52.252 } 52.253 52.254 -errcode_t ext2fs_get_generic_bitmap_range(ext2fs_generic_bitmap bmap, 52.255 +errcode_t ext2fs_get_generic_bitmap_range(ext2fs_generic_bitmap gen_bmap, 52.256 errcode_t magic, 52.257 __u32 start, __u32 num, 52.258 void *out) 52.259 { 52.260 + ext2fs_generic_bitmap_32 bmap = (ext2fs_generic_bitmap_32) gen_bmap; 52.261 + 52.262 if (!bmap || (bmap->magic != magic)) 52.263 return magic; 52.264 52.265 if ((start < bmap->start) || (start+num-1 > bmap->real_end)) 52.266 return EXT2_ET_INVALID_ARGUMENT; 52.267 52.268 - memcpy(out, bmap->bitmap + (start >> 3), (num+7) >> 3); 52.269 + memcpy(out, bmap->bitmap + ((start - bmap->start) >> 3), (num+7) >> 3); 52.270 return 0; 52.271 } 52.272 52.273 -errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap bmap, 52.274 +errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap gen_bmap, 52.275 errcode_t magic, 52.276 __u32 start, __u32 num, 52.277 void *in) 52.278 { 52.279 + ext2fs_generic_bitmap_32 bmap = (ext2fs_generic_bitmap_32) gen_bmap; 52.280 + 52.281 if (!bmap || (bmap->magic != magic)) 52.282 return magic; 52.283 52.284 if ((start < bmap->start) || (start+num-1 > bmap->real_end)) 52.285 return EXT2_ET_INVALID_ARGUMENT; 52.286 52.287 - memcpy(bmap->bitmap + (start >> 3), in, (num+7) >> 3); 52.288 + memcpy(bmap->bitmap + ((start - bmap->start) >> 3), in, (num+7) >> 3); 52.289 return 0; 52.290 } 52.291 52.292 @@ -432,10 +462,11 @@ 52.293 /* 52.294 * Return true if all of the bits in a specified range are clear 52.295 */ 52.296 -static int ext2fs_test_clear_generic_bitmap_range(ext2fs_generic_bitmap bitmap, 52.297 +static int ext2fs_test_clear_generic_bitmap_range(ext2fs_generic_bitmap gen_bitmap, 52.298 unsigned int start, 52.299 unsigned int len) 52.300 { 52.301 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.302 size_t start_byte, len_byte = len >> 3; 52.303 unsigned int start_bit, len_bit = len % 8; 52.304 int first_bit = 0; 52.305 @@ -504,14 +535,15 @@ 52.306 return ext2fs_mem_is_zero(ADDR + start_byte, len_byte); 52.307 } 52.308 52.309 -errcode_t ext2fs_find_first_zero_generic_bitmap(ext2fs_generic_bitmap bitmap, 52.310 +errcode_t ext2fs_find_first_zero_generic_bitmap(ext2fs_generic_bitmap gen_bitmap, 52.311 __u32 start, __u32 end, 52.312 __u32 *out) 52.313 { 52.314 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.315 blk_t b; 52.316 52.317 if (start < bitmap->start || end > bitmap->end || start > end) { 52.318 - ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, start); 52.319 + ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_TEST_ERROR, start); 52.320 return EINVAL; 52.321 } 52.322 52.323 @@ -527,14 +559,15 @@ 52.324 return ENOENT; 52.325 } 52.326 52.327 -errcode_t ext2fs_find_first_set_generic_bitmap(ext2fs_generic_bitmap bitmap, 52.328 +errcode_t ext2fs_find_first_set_generic_bitmap(ext2fs_generic_bitmap gen_bitmap, 52.329 __u32 start, __u32 end, 52.330 __u32 *out) 52.331 { 52.332 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.333 blk_t b; 52.334 52.335 if (start < bitmap->start || end > bitmap->end || start > end) { 52.336 - ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, start); 52.337 + ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_TEST_ERROR, start); 52.338 return EINVAL; 52.339 } 52.340 52.341 @@ -550,11 +583,14 @@ 52.342 return ENOENT; 52.343 } 52.344 52.345 -int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap, 52.346 +int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap gen_bitmap, 52.347 blk_t block, int num) 52.348 { 52.349 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.350 + 52.351 EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_BLOCK_BITMAP); 52.352 - if ((block < bitmap->start) || (block+num-1 > bitmap->real_end)) { 52.353 + if ((block < bitmap->start) || (block > bitmap->real_end) || 52.354 + (block+num-1 > bitmap->real_end)) { 52.355 ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST, 52.356 block, bitmap->description); 52.357 return 0; 52.358 @@ -563,11 +599,14 @@ 52.359 bitmap, block, num); 52.360 } 52.361 52.362 -int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap, 52.363 +int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap gen_bitmap, 52.364 ext2_ino_t inode, int num) 52.365 { 52.366 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.367 + 52.368 EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_INODE_BITMAP); 52.369 - if ((inode < bitmap->start) || (inode+num-1 > bitmap->real_end)) { 52.370 + if ((inode < bitmap->start) || (inode > bitmap->real_end) || 52.371 + (inode+num-1 > bitmap->real_end)) { 52.372 ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_TEST, 52.373 inode, bitmap->description); 52.374 return 0; 52.375 @@ -576,12 +615,14 @@ 52.376 bitmap, inode, num); 52.377 } 52.378 52.379 -void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap, 52.380 +void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap gen_bitmap, 52.381 blk_t block, int num) 52.382 { 52.383 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.384 int i; 52.385 52.386 - if ((block < bitmap->start) || (block+num-1 > bitmap->end)) { 52.387 + if ((block < bitmap->start) || (block > bitmap->end) || 52.388 + (block+num-1 > bitmap->end)) { 52.389 ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block, 52.390 bitmap->description); 52.391 return; 52.392 @@ -590,12 +631,14 @@ 52.393 ext2fs_fast_set_bit(block + i - bitmap->start, bitmap->bitmap); 52.394 } 52.395 52.396 -void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap, 52.397 - blk_t block, int num) 52.398 +void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap gen_bitmap, 52.399 + blk_t block, int num) 52.400 { 52.401 + ext2fs_generic_bitmap_32 bitmap = (ext2fs_generic_bitmap_32) gen_bitmap; 52.402 int i; 52.403 52.404 - if ((block < bitmap->start) || (block+num-1 > bitmap->end)) { 52.405 + if ((block < bitmap->start) || (block > bitmap->end) || 52.406 + (block+num-1 > bitmap->end)) { 52.407 ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block, 52.408 bitmap->description); 52.409 return;
53.1 --- a/libext2fs/lib/libext2fs/gen_bitmap64.c Sat Oct 02 23:57:02 2021 +0200 53.2 +++ b/libext2fs/lib/libext2fs/gen_bitmap64.c Sat Oct 09 23:28:01 2021 +0200 53.3 @@ -68,15 +68,17 @@ 53.4 * e2fsck can request an encoding which is optimized for that. 53.5 */ 53.6 53.7 -static void warn_bitmap(ext2fs_generic_bitmap bitmap, 53.8 +static void warn_bitmap(ext2fs_generic_bitmap_64 bitmap, 53.9 int code, __u64 arg) 53.10 { 53.11 #ifndef OMIT_COM_ERR 53.12 if (bitmap->description) 53.13 com_err(0, bitmap->base_error_code+code, 53.14 - "#%llu for %s", arg, bitmap->description); 53.15 + "#%llu for %s", (unsigned long long) arg, 53.16 + bitmap->description); 53.17 else 53.18 - com_err(0, bitmap->base_error_code + code, "#%llu", arg); 53.19 + com_err(0, bitmap->base_error_code + code, "#%llu", 53.20 + (unsigned long long) arg); 53.21 #endif 53.22 } 53.23 53.24 @@ -93,7 +95,7 @@ 53.25 const char *descr, 53.26 ext2fs_generic_bitmap *ret) 53.27 { 53.28 - ext2fs_generic_bitmap bitmap; 53.29 + ext2fs_generic_bitmap_64 bitmap; 53.30 struct ext2_bitmap_ops *ops; 53.31 ext2_ino_t num_dirs; 53.32 errcode_t retval; 53.33 @@ -119,7 +121,7 @@ 53.34 return EINVAL; 53.35 } 53.36 53.37 - retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap), 53.38 + retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap_64), 53.39 &bitmap); 53.40 if (retval) 53.41 return retval; 53.42 @@ -170,12 +172,12 @@ 53.43 return retval; 53.44 } 53.45 53.46 - *ret = bitmap; 53.47 + *ret = (ext2fs_generic_bitmap) bitmap; 53.48 return 0; 53.49 } 53.50 53.51 #ifdef ENABLE_BMAP_STATS 53.52 -static void ext2fs_print_bmap_statistics(ext2fs_generic_bitmap bitmap) 53.53 +static void ext2fs_print_bmap_statistics(ext2fs_generic_bitmap_64 bitmap) 53.54 { 53.55 struct ext2_bmap_statistics *stats = &bitmap->stats; 53.56 #ifdef ENABLE_BMAP_STATS_OPS 53.57 @@ -241,13 +243,15 @@ 53.58 } 53.59 #endif 53.60 53.61 -void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap) 53.62 +void ext2fs_free_generic_bmap(ext2fs_generic_bitmap gen_bmap) 53.63 { 53.64 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.65 + 53.66 if (!bmap) 53.67 return; 53.68 53.69 if (EXT2FS_IS_32_BITMAP(bmap)) { 53.70 - ext2fs_free_generic_bitmap(bmap); 53.71 + ext2fs_free_generic_bitmap(gen_bmap); 53.72 return; 53.73 } 53.74 53.75 @@ -271,24 +275,25 @@ 53.76 ext2fs_free_mem(&bmap); 53.77 } 53.78 53.79 -errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src, 53.80 +errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap gen_src, 53.81 ext2fs_generic_bitmap *dest) 53.82 { 53.83 + ext2fs_generic_bitmap_64 src = (ext2fs_generic_bitmap_64) gen_src; 53.84 char *descr, *new_descr; 53.85 - ext2fs_generic_bitmap new_bmap; 53.86 + ext2fs_generic_bitmap_64 new_bmap; 53.87 errcode_t retval; 53.88 53.89 if (!src) 53.90 return EINVAL; 53.91 53.92 if (EXT2FS_IS_32_BITMAP(src)) 53.93 - return ext2fs_copy_generic_bitmap(src, dest); 53.94 + return ext2fs_copy_generic_bitmap(gen_src, dest); 53.95 53.96 if (!EXT2FS_IS_64_BITMAP(src)) 53.97 return EINVAL; 53.98 53.99 /* Allocate a new bitmap struct */ 53.100 - retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap), 53.101 + retval = ext2fs_get_memzero(sizeof(struct ext2fs_struct_generic_bitmap_64), 53.102 &new_bmap); 53.103 if (retval) 53.104 return retval; 53.105 @@ -336,21 +341,23 @@ 53.106 return retval; 53.107 } 53.108 53.109 - *dest = new_bmap; 53.110 + *dest = (ext2fs_generic_bitmap) new_bmap; 53.111 53.112 return 0; 53.113 } 53.114 53.115 -errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap, 53.116 +errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap gen_bmap, 53.117 __u64 new_end, 53.118 __u64 new_real_end) 53.119 { 53.120 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.121 + 53.122 if (!bmap) 53.123 return EINVAL; 53.124 53.125 if (EXT2FS_IS_32_BITMAP(bmap)) 53.126 - return ext2fs_resize_generic_bitmap(bmap->magic, new_end, 53.127 - new_real_end, bmap); 53.128 + return ext2fs_resize_generic_bitmap(gen_bmap->magic, new_end, 53.129 + new_real_end, gen_bmap); 53.130 53.131 if (!EXT2FS_IS_64_BITMAP(bmap)) 53.132 return EINVAL; 53.133 @@ -360,10 +367,12 @@ 53.134 return bmap->bitmap_ops->resize_bmap(bmap, new_end, new_real_end); 53.135 } 53.136 53.137 -errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap, 53.138 +errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap gen_bitmap, 53.139 errcode_t neq, 53.140 __u64 end, __u64 *oend) 53.141 { 53.142 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.143 + 53.144 if (!bitmap) 53.145 return EINVAL; 53.146 53.147 @@ -371,7 +380,8 @@ 53.148 ext2_ino_t tmp_oend; 53.149 int retval; 53.150 53.151 - retval = ext2fs_fudge_generic_bitmap_end(bitmap, bitmap->magic, 53.152 + retval = ext2fs_fudge_generic_bitmap_end(gen_bitmap, 53.153 + bitmap->magic, 53.154 neq, end, &tmp_oend); 53.155 if (oend) 53.156 *oend = tmp_oend; 53.157 @@ -389,13 +399,15 @@ 53.158 return 0; 53.159 } 53.160 53.161 -__u64 ext2fs_get_generic_bmap_start(ext2fs_generic_bitmap bitmap) 53.162 +__u64 ext2fs_get_generic_bmap_start(ext2fs_generic_bitmap gen_bitmap) 53.163 { 53.164 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.165 + 53.166 if (!bitmap) 53.167 return EINVAL; 53.168 53.169 if (EXT2FS_IS_32_BITMAP(bitmap)) 53.170 - return ext2fs_get_generic_bitmap_start(bitmap); 53.171 + return ext2fs_get_generic_bitmap_start(gen_bitmap); 53.172 53.173 if (!EXT2FS_IS_64_BITMAP(bitmap)) 53.174 return EINVAL; 53.175 @@ -403,13 +415,15 @@ 53.176 return bitmap->start; 53.177 } 53.178 53.179 -__u64 ext2fs_get_generic_bmap_end(ext2fs_generic_bitmap bitmap) 53.180 +__u64 ext2fs_get_generic_bmap_end(ext2fs_generic_bitmap gen_bitmap) 53.181 { 53.182 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.183 + 53.184 if (!bitmap) 53.185 return EINVAL; 53.186 53.187 if (EXT2FS_IS_32_BITMAP(bitmap)) 53.188 - return ext2fs_get_generic_bitmap_end(bitmap); 53.189 + return ext2fs_get_generic_bitmap_end(gen_bitmap); 53.190 53.191 if (!EXT2FS_IS_64_BITMAP(bitmap)) 53.192 return EINVAL; 53.193 @@ -417,27 +431,31 @@ 53.194 return bitmap->end; 53.195 } 53.196 53.197 -void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap bitmap) 53.198 +void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap gen_bitmap) 53.199 { 53.200 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.201 + 53.202 if (EXT2FS_IS_32_BITMAP(bitmap)) 53.203 - ext2fs_clear_generic_bitmap(bitmap); 53.204 + ext2fs_clear_generic_bitmap(gen_bitmap); 53.205 else 53.206 - bitmap->bitmap_ops->clear_bmap (bitmap); 53.207 + bitmap->bitmap_ops->clear_bmap(bitmap); 53.208 } 53.209 53.210 -int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap, 53.211 +int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap gen_bitmap, 53.212 __u64 arg) 53.213 { 53.214 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.215 + 53.216 if (!bitmap) 53.217 return 0; 53.218 53.219 if (EXT2FS_IS_32_BITMAP(bitmap)) { 53.220 if (arg & ~0xffffffffULL) { 53.221 - ext2fs_warn_bitmap2(bitmap, 53.222 + ext2fs_warn_bitmap2(gen_bitmap, 53.223 EXT2FS_MARK_ERROR, 0xffffffff); 53.224 return 0; 53.225 } 53.226 - return ext2fs_mark_generic_bitmap(bitmap, arg); 53.227 + return ext2fs_mark_generic_bitmap(gen_bitmap, arg); 53.228 } 53.229 53.230 if (!EXT2FS_IS_64_BITMAP(bitmap)) 53.231 @@ -462,19 +480,21 @@ 53.232 return bitmap->bitmap_ops->mark_bmap(bitmap, arg); 53.233 } 53.234 53.235 -int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap, 53.236 +int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap gen_bitmap, 53.237 __u64 arg) 53.238 { 53.239 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.240 + 53.241 if (!bitmap) 53.242 return 0; 53.243 53.244 if (EXT2FS_IS_32_BITMAP(bitmap)) { 53.245 if (arg & ~0xffffffffULL) { 53.246 - ext2fs_warn_bitmap2(bitmap, EXT2FS_UNMARK_ERROR, 53.247 + ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_UNMARK_ERROR, 53.248 0xffffffff); 53.249 return 0; 53.250 } 53.251 - return ext2fs_unmark_generic_bitmap(bitmap, arg); 53.252 + return ext2fs_unmark_generic_bitmap(gen_bitmap, arg); 53.253 } 53.254 53.255 if (!EXT2FS_IS_64_BITMAP(bitmap)) 53.256 @@ -492,19 +512,20 @@ 53.257 return bitmap->bitmap_ops->unmark_bmap(bitmap, arg); 53.258 } 53.259 53.260 -int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, 53.261 +int ext2fs_test_generic_bmap(ext2fs_generic_bitmap gen_bitmap, 53.262 __u64 arg) 53.263 { 53.264 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.265 if (!bitmap) 53.266 return 0; 53.267 53.268 if (EXT2FS_IS_32_BITMAP(bitmap)) { 53.269 if (arg & ~0xffffffffULL) { 53.270 - ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, 53.271 + ext2fs_warn_bitmap2(gen_bitmap, EXT2FS_TEST_ERROR, 53.272 0xffffffff); 53.273 return 0; 53.274 } 53.275 - return ext2fs_test_generic_bitmap(bitmap, arg); 53.276 + return ext2fs_test_generic_bitmap(gen_bitmap, arg); 53.277 } 53.278 53.279 if (!EXT2FS_IS_64_BITMAP(bitmap)) 53.280 @@ -529,20 +550,22 @@ 53.281 return bitmap->bitmap_ops->test_bmap(bitmap, arg); 53.282 } 53.283 53.284 -errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bmap, 53.285 +errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap gen_bmap, 53.286 __u64 start, unsigned int num, 53.287 void *in) 53.288 { 53.289 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.290 + 53.291 if (!bmap) 53.292 return EINVAL; 53.293 53.294 if (EXT2FS_IS_32_BITMAP(bmap)) { 53.295 if ((start+num-1) & ~0xffffffffULL) { 53.296 - ext2fs_warn_bitmap2(bmap, EXT2FS_UNMARK_ERROR, 53.297 + ext2fs_warn_bitmap2(gen_bmap, EXT2FS_UNMARK_ERROR, 53.298 0xffffffff); 53.299 return EINVAL; 53.300 } 53.301 - return ext2fs_set_generic_bitmap_range(bmap, bmap->magic, 53.302 + return ext2fs_set_generic_bitmap_range(gen_bmap, bmap->magic, 53.303 start, num, in); 53.304 } 53.305 53.306 @@ -554,20 +577,22 @@ 53.307 return bmap->bitmap_ops->set_bmap_range(bmap, start, num, in); 53.308 } 53.309 53.310 -errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bmap, 53.311 +errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap gen_bmap, 53.312 __u64 start, unsigned int num, 53.313 void *out) 53.314 { 53.315 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.316 + 53.317 if (!bmap) 53.318 return EINVAL; 53.319 53.320 if (EXT2FS_IS_32_BITMAP(bmap)) { 53.321 if ((start+num-1) & ~0xffffffffULL) { 53.322 - ext2fs_warn_bitmap2(bmap, 53.323 + ext2fs_warn_bitmap2(gen_bmap, 53.324 EXT2FS_UNMARK_ERROR, 0xffffffff); 53.325 return EINVAL; 53.326 } 53.327 - return ext2fs_get_generic_bitmap_range(bmap, bmap->magic, 53.328 + return ext2fs_get_generic_bitmap_range(gen_bmap, bmap->magic, 53.329 start, num, out); 53.330 } 53.331 53.332 @@ -580,9 +605,11 @@ 53.333 } 53.334 53.335 errcode_t ext2fs_compare_generic_bmap(errcode_t neq, 53.336 - ext2fs_generic_bitmap bm1, 53.337 - ext2fs_generic_bitmap bm2) 53.338 + ext2fs_generic_bitmap gen_bm1, 53.339 + ext2fs_generic_bitmap gen_bm2) 53.340 { 53.341 + ext2fs_generic_bitmap_64 bm1 = (ext2fs_generic_bitmap_64) gen_bm1; 53.342 + ext2fs_generic_bitmap_64 bm2 = (ext2fs_generic_bitmap_64) gen_bm2; 53.343 blk64_t i; 53.344 53.345 if (!bm1 || !bm2) 53.346 @@ -592,7 +619,8 @@ 53.347 53.348 /* Now we know both bitmaps have the same magic */ 53.349 if (EXT2FS_IS_32_BITMAP(bm1)) 53.350 - return ext2fs_compare_generic_bitmap(bm1->magic, neq, bm1, bm2); 53.351 + return ext2fs_compare_generic_bitmap(bm1->magic, neq, 53.352 + gen_bm1, gen_bm2); 53.353 53.354 if (!EXT2FS_IS_64_BITMAP(bm1)) 53.355 return EINVAL; 53.356 @@ -602,19 +630,20 @@ 53.357 return neq; 53.358 53.359 for (i = bm1->end - ((bm1->end - bm1->start) % 8); i <= bm1->end; i++) 53.360 - if (ext2fs_test_generic_bmap(bm1, i) != 53.361 - ext2fs_test_generic_bmap(bm2, i)) 53.362 + if (ext2fs_test_generic_bmap(gen_bm1, i) != 53.363 + ext2fs_test_generic_bmap(gen_bm2, i)) 53.364 return neq; 53.365 53.366 return 0; 53.367 } 53.368 53.369 -void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap bmap) 53.370 +void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap gen_bmap) 53.371 { 53.372 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.373 __u64 start, num; 53.374 53.375 if (EXT2FS_IS_32_BITMAP(bmap)) { 53.376 - ext2fs_set_generic_bitmap_padding(bmap); 53.377 + ext2fs_set_generic_bitmap_padding(gen_bmap); 53.378 return; 53.379 } 53.380 53.381 @@ -624,9 +653,10 @@ 53.382 /* XXX ought to warn on error */ 53.383 } 53.384 53.385 -int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bmap, 53.386 +int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap gen_bmap, 53.387 blk64_t block, unsigned int num) 53.388 { 53.389 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.390 __u64 end = block + num; 53.391 53.392 if (!bmap) 53.393 @@ -637,7 +667,8 @@ 53.394 bmap, block); 53.395 53.396 if (EXT2FS_IS_32_BITMAP(bmap)) { 53.397 - if ((block+num-1) & ~0xffffffffULL) { 53.398 + if ((block & ~0xffffffffULL) || 53.399 + ((block+num-1) & ~0xffffffffULL)) { 53.400 ext2fs_warn_bitmap2((ext2fs_generic_bitmap) bmap, 53.401 EXT2FS_UNMARK_ERROR, 0xffffffff); 53.402 return EINVAL; 53.403 @@ -657,7 +688,8 @@ 53.404 end >>= bmap->cluster_bits; 53.405 num = end - block; 53.406 53.407 - if ((block < bmap->start) || (block+num-1 > bmap->end)) { 53.408 + if ((block < bmap->start) || (block > bmap->end) || 53.409 + (block+num-1 > bmap->end)) { 53.410 ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST, block, 53.411 bmap->description); 53.412 return EINVAL; 53.413 @@ -666,16 +698,18 @@ 53.414 return bmap->bitmap_ops->test_clear_bmap_extent(bmap, block, num); 53.415 } 53.416 53.417 -void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bmap, 53.418 +void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap gen_bmap, 53.419 blk64_t block, unsigned int num) 53.420 { 53.421 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.422 __u64 end = block + num; 53.423 53.424 if (!bmap) 53.425 return; 53.426 53.427 if (EXT2FS_IS_32_BITMAP(bmap)) { 53.428 - if ((block+num-1) & ~0xffffffffULL) { 53.429 + if ((block & ~0xffffffffULL) || 53.430 + ((block+num-1) & ~0xffffffffULL)) { 53.431 ext2fs_warn_bitmap2((ext2fs_generic_bitmap) bmap, 53.432 EXT2FS_UNMARK_ERROR, 0xffffffff); 53.433 return; 53.434 @@ -695,7 +729,8 @@ 53.435 end >>= bmap->cluster_bits; 53.436 num = end - block; 53.437 53.438 - if ((block < bmap->start) || (block+num-1 > bmap->end)) { 53.439 + if ((block < bmap->start) || (block > bmap->end) || 53.440 + (block+num-1 > bmap->end)) { 53.441 ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block, 53.442 bmap->description); 53.443 return; 53.444 @@ -704,16 +739,18 @@ 53.445 bmap->bitmap_ops->mark_bmap_extent(bmap, block, num); 53.446 } 53.447 53.448 -void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bmap, 53.449 +void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap gen_bmap, 53.450 blk64_t block, unsigned int num) 53.451 { 53.452 + ext2fs_generic_bitmap_64 bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.453 __u64 end = block + num; 53.454 53.455 if (!bmap) 53.456 return; 53.457 53.458 if (EXT2FS_IS_32_BITMAP(bmap)) { 53.459 - if ((block+num-1) & ~0xffffffffULL) { 53.460 + if ((block & ~0xffffffffULL) || 53.461 + ((block+num-1) & ~0xffffffffULL)) { 53.462 ext2fs_warn_bitmap2((ext2fs_generic_bitmap) bmap, 53.463 EXT2FS_UNMARK_ERROR, 0xffffffff); 53.464 return; 53.465 @@ -733,7 +770,8 @@ 53.466 end >>= bmap->cluster_bits; 53.467 num = end - block; 53.468 53.469 - if ((block < bmap->start) || (block+num-1 > bmap->end)) { 53.470 + if ((block < bmap->start) || (block > bmap->end) || 53.471 + (block+num-1 > bmap->end)) { 53.472 ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block, 53.473 bmap->description); 53.474 return; 53.475 @@ -742,8 +780,10 @@ 53.476 bmap->bitmap_ops->unmark_bmap_extent(bmap, block, num); 53.477 } 53.478 53.479 -void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap, const char *func) 53.480 +void ext2fs_warn_bitmap32(ext2fs_generic_bitmap gen_bitmap, const char *func) 53.481 { 53.482 + ext2fs_generic_bitmap_64 bitmap = (ext2fs_generic_bitmap_64) gen_bitmap; 53.483 + 53.484 #ifndef OMIT_COM_ERR 53.485 if (bitmap && bitmap->description) 53.486 com_err(0, EXT2_ET_MAGIC_GENERIC_BITMAP, 53.487 @@ -758,49 +798,45 @@ 53.488 errcode_t ext2fs_convert_subcluster_bitmap(ext2_filsys fs, 53.489 ext2fs_block_bitmap *bitmap) 53.490 { 53.491 - ext2fs_block_bitmap cmap, bmap; 53.492 + ext2fs_generic_bitmap_64 bmap, cmap; 53.493 + ext2fs_block_bitmap gen_bmap = *bitmap, gen_cmap; 53.494 errcode_t retval; 53.495 - blk64_t i, b_end, c_end; 53.496 - int n, ratio; 53.497 + blk64_t i, next, b_end, c_end; 53.498 53.499 - bmap = *bitmap; 53.500 - 53.501 - if (fs->cluster_ratio_bits == ext2fs_get_bitmap_granularity(bmap)) 53.502 + bmap = (ext2fs_generic_bitmap_64) gen_bmap; 53.503 + if (fs->cluster_ratio_bits == ext2fs_get_bitmap_granularity(gen_bmap)) 53.504 return 0; /* Nothing to do */ 53.505 53.506 retval = ext2fs_allocate_block_bitmap(fs, "converted cluster bitmap", 53.507 - &cmap); 53.508 + &gen_cmap); 53.509 if (retval) 53.510 return retval; 53.511 53.512 + cmap = (ext2fs_generic_bitmap_64) gen_cmap; 53.513 i = bmap->start; 53.514 b_end = bmap->end; 53.515 bmap->end = bmap->real_end; 53.516 c_end = cmap->end; 53.517 cmap->end = cmap->real_end; 53.518 - n = 0; 53.519 - ratio = 1 << fs->cluster_ratio_bits; 53.520 while (i < bmap->real_end) { 53.521 - if (ext2fs_test_block_bitmap2(bmap, i)) { 53.522 - ext2fs_mark_block_bitmap2(cmap, i); 53.523 - i += ratio - n; 53.524 - n = 0; 53.525 - continue; 53.526 - } 53.527 - i++; n++; 53.528 - if (n >= ratio) 53.529 - n = 0; 53.530 + retval = ext2fs_find_first_set_block_bitmap2(gen_bmap, 53.531 + i, bmap->real_end, &next); 53.532 + if (retval) 53.533 + break; 53.534 + ext2fs_mark_block_bitmap2(gen_cmap, next); 53.535 + i = EXT2FS_C2B(fs, EXT2FS_B2C(fs, next) + 1); 53.536 } 53.537 bmap->end = b_end; 53.538 cmap->end = c_end; 53.539 - ext2fs_free_block_bitmap(bmap); 53.540 - *bitmap = cmap; 53.541 + ext2fs_free_block_bitmap(gen_bmap); 53.542 + *bitmap = (ext2fs_block_bitmap) cmap; 53.543 return 0; 53.544 } 53.545 53.546 errcode_t ext2fs_find_first_zero_generic_bmap(ext2fs_generic_bitmap bitmap, 53.547 __u64 start, __u64 end, __u64 *out) 53.548 { 53.549 + ext2fs_generic_bitmap_64 bmap64 = (ext2fs_generic_bitmap_64) bitmap; 53.550 __u64 cstart, cend, cout; 53.551 errcode_t retval; 53.552 53.553 @@ -826,27 +862,27 @@ 53.554 if (!EXT2FS_IS_64_BITMAP(bitmap)) 53.555 return EINVAL; 53.556 53.557 - cstart = start >> bitmap->cluster_bits; 53.558 - cend = end >> bitmap->cluster_bits; 53.559 + cstart = start >> bmap64->cluster_bits; 53.560 + cend = end >> bmap64->cluster_bits; 53.561 53.562 - if (cstart < bitmap->start || cend > bitmap->end || start > end) { 53.563 - warn_bitmap(bitmap, EXT2FS_TEST_ERROR, start); 53.564 + if (cstart < bmap64->start || cend > bmap64->end || start > end) { 53.565 + warn_bitmap(bmap64, EXT2FS_TEST_ERROR, start); 53.566 return EINVAL; 53.567 } 53.568 53.569 - if (bitmap->bitmap_ops->find_first_zero) { 53.570 - retval = bitmap->bitmap_ops->find_first_zero(bitmap, cstart, 53.571 + if (bmap64->bitmap_ops->find_first_zero) { 53.572 + retval = bmap64->bitmap_ops->find_first_zero(bmap64, cstart, 53.573 cend, &cout); 53.574 if (retval) 53.575 return retval; 53.576 found: 53.577 - cout <<= bitmap->cluster_bits; 53.578 + cout <<= bmap64->cluster_bits; 53.579 *out = (cout >= start) ? cout : start; 53.580 return 0; 53.581 } 53.582 53.583 for (cout = cstart; cout <= cend; cout++) 53.584 - if (!bitmap->bitmap_ops->test_bmap(bitmap, cout)) 53.585 + if (!bmap64->bitmap_ops->test_bmap(bmap64, cout)) 53.586 goto found; 53.587 53.588 return ENOENT; 53.589 @@ -855,6 +891,7 @@ 53.590 errcode_t ext2fs_find_first_set_generic_bmap(ext2fs_generic_bitmap bitmap, 53.591 __u64 start, __u64 end, __u64 *out) 53.592 { 53.593 + ext2fs_generic_bitmap_64 bmap64 = (ext2fs_generic_bitmap_64) bitmap; 53.594 __u64 cstart, cend, cout; 53.595 errcode_t retval; 53.596 53.597 @@ -880,28 +917,63 @@ 53.598 if (!EXT2FS_IS_64_BITMAP(bitmap)) 53.599 return EINVAL; 53.600 53.601 - cstart = start >> bitmap->cluster_bits; 53.602 - cend = end >> bitmap->cluster_bits; 53.603 + cstart = start >> bmap64->cluster_bits; 53.604 + cend = end >> bmap64->cluster_bits; 53.605 53.606 - if (cstart < bitmap->start || cend > bitmap->end || start > end) { 53.607 - warn_bitmap(bitmap, EXT2FS_TEST_ERROR, start); 53.608 + if (cstart < bmap64->start || cend > bmap64->end || start > end) { 53.609 + warn_bitmap(bmap64, EXT2FS_TEST_ERROR, start); 53.610 return EINVAL; 53.611 } 53.612 53.613 - if (bitmap->bitmap_ops->find_first_set) { 53.614 - retval = bitmap->bitmap_ops->find_first_set(bitmap, cstart, 53.615 + if (bmap64->bitmap_ops->find_first_set) { 53.616 + retval = bmap64->bitmap_ops->find_first_set(bmap64, cstart, 53.617 cend, &cout); 53.618 if (retval) 53.619 return retval; 53.620 found: 53.621 - cout <<= bitmap->cluster_bits; 53.622 + cout <<= bmap64->cluster_bits; 53.623 *out = (cout >= start) ? cout : start; 53.624 return 0; 53.625 } 53.626 53.627 for (cout = cstart; cout <= cend; cout++) 53.628 - if (bitmap->bitmap_ops->test_bmap(bitmap, cout)) 53.629 + if (bmap64->bitmap_ops->test_bmap(bmap64, cout)) 53.630 goto found; 53.631 53.632 return ENOENT; 53.633 } 53.634 + 53.635 +errcode_t ext2fs_count_used_clusters(ext2_filsys fs, blk64_t start, 53.636 + blk64_t end, blk64_t *out) 53.637 +{ 53.638 + blk64_t next; 53.639 + blk64_t tot_set = 0; 53.640 + errcode_t retval; 53.641 + 53.642 + while (start < end) { 53.643 + retval = ext2fs_find_first_set_block_bitmap2(fs->block_map, 53.644 + start, end, &next); 53.645 + if (retval) { 53.646 + if (retval == ENOENT) 53.647 + retval = 0; 53.648 + break; 53.649 + } 53.650 + start = next; 53.651 + 53.652 + retval = ext2fs_find_first_zero_block_bitmap2(fs->block_map, 53.653 + start, end, &next); 53.654 + if (retval == 0) { 53.655 + tot_set += next - start; 53.656 + start = next + 1; 53.657 + } else if (retval == ENOENT) { 53.658 + retval = 0; 53.659 + tot_set += end - start + 1; 53.660 + break; 53.661 + } else 53.662 + break; 53.663 + } 53.664 + 53.665 + if (!retval) 53.666 + *out = EXT2FS_NUM_B2C(fs, tot_set); 53.667 + return retval; 53.668 +}
54.1 --- a/libext2fs/lib/libext2fs/hashmap.c Sat Oct 02 23:57:02 2021 +0200 54.2 +++ b/libext2fs/lib/libext2fs/hashmap.c Sat Oct 09 23:28:01 2021 +0200 54.3 @@ -1,6 +1,22 @@ 54.4 #include "hashmap.h" 54.5 #include <string.h> 54.6 54.7 +struct ext2fs_hashmap { 54.8 + uint32_t size; 54.9 + uint32_t(*hash)(const void *key, size_t len); 54.10 + void(*free)(void*); 54.11 + struct ext2fs_hashmap_entry *first; 54.12 + struct ext2fs_hashmap_entry *last; 54.13 +#if __GNUC_PREREQ (4, 8) 54.14 +#pragma GCC diagnostic push 54.15 +#pragma GCC diagnostic ignored "-Wpedantic" 54.16 +#endif 54.17 + struct ext2fs_hashmap_entry *entries[0]; 54.18 +#if __GNUC_PREREQ (4, 8) 54.19 +#pragma GCC diagnostic pop 54.20 +#endif 54.21 +}; 54.22 + 54.23 uint32_t ext2fs_djb2_hash(const void *str, size_t size) 54.24 { 54.25 int c;
55.1 --- a/libext2fs/lib/libext2fs/initialize.c Sat Oct 02 23:57:02 2021 +0200 55.2 +++ b/libext2fs/lib/libext2fs/initialize.c Sat Oct 09 23:28:01 2021 +0200 55.3 @@ -186,6 +186,13 @@ 55.4 set_field(s_flags, 0); 55.5 assign_field(s_backup_bgs[0]); 55.6 assign_field(s_backup_bgs[1]); 55.7 + 55.8 + assign_field(s_encoding); 55.9 + assign_field(s_encoding_flags); 55.10 + 55.11 + if (ext2fs_has_feature_casefold(param)) 55.12 + fs->encoding = ext2fs_load_nls_table(param->s_encoding); 55.13 + 55.14 if (super->s_feature_incompat & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP) { 55.15 retval = EXT2_ET_UNSUPP_FEATURE; 55.16 goto cleanup; 55.17 @@ -568,3 +575,97 @@ 55.18 ext2fs_free(fs); 55.19 return retval; 55.20 } 55.21 + 55.22 +errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs, int super_only) 55.23 +{ 55.24 + blk64_t blk; 55.25 + ext2_ino_t ino; 55.26 + unsigned int group = 0; 55.27 + unsigned int count = 0; 55.28 + int total_free = 0; 55.29 + int group_free = 0; 55.30 + int last_allocated = 0; 55.31 + int uninit; 55.32 + 55.33 + /* 55.34 + * First calculate the block statistics 55.35 + */ 55.36 + uninit = 1; 55.37 + for (blk = fs->super->s_first_data_block; 55.38 + blk < ext2fs_blocks_count(fs->super); blk++) { 55.39 + if (!ext2fs_fast_test_block_bitmap2(fs->block_map, blk)) { 55.40 + group_free++; 55.41 + total_free++; 55.42 + } else { 55.43 + uninit = 0; 55.44 + } 55.45 + count++; 55.46 + if ((count == fs->super->s_blocks_per_group) || 55.47 + (blk == ext2fs_blocks_count(fs->super)-1)) { 55.48 + ext2fs_bg_free_blocks_count_set(fs, group, 55.49 + group_free); 55.50 + if (!super_only) { 55.51 + if (uninit && blk != 55.52 + ext2fs_blocks_count(fs->super) - 1) 55.53 + ext2fs_bg_flags_set(fs, group, 55.54 + EXT2_BG_BLOCK_UNINIT); 55.55 + else 55.56 + ext2fs_bg_flags_clear(fs, group, 55.57 + EXT2_BG_BLOCK_UNINIT); 55.58 + } 55.59 + count = 0; 55.60 + group_free = 0; 55.61 + uninit = 1; 55.62 + group++; 55.63 + } 55.64 + } 55.65 + total_free = EXT2FS_C2B(fs, total_free); 55.66 + ext2fs_free_blocks_count_set(fs->super, total_free); 55.67 + 55.68 + /* 55.69 + * Next, calculate the inode statistics 55.70 + */ 55.71 + group_free = 0; 55.72 + total_free = 0; 55.73 + last_allocated = 0; 55.74 + count = 0; 55.75 + group = 0; 55.76 + 55.77 + /* Protect loop from wrap-around if s_inodes_count maxed */ 55.78 + for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) { 55.79 + if (!ext2fs_test_inode_bitmap2(fs->inode_map, ino)) { 55.80 + group_free++; 55.81 + total_free++; 55.82 + } else { 55.83 + last_allocated = ino; 55.84 + } 55.85 + count++; 55.86 + if ((count == fs->super->s_inodes_per_group) || 55.87 + (ino == fs->super->s_inodes_count)) { 55.88 + if (!super_only) { 55.89 + if (last_allocated) { 55.90 + ext2fs_bg_flags_clear(fs, group, 55.91 + EXT2_BG_INODE_UNINIT); 55.92 + ext2fs_bg_itable_unused_set(fs, group, 55.93 + fs->super->s_inodes_per_group - 55.94 + (last_allocated % 55.95 + fs->super->s_inodes_per_group)); 55.96 + } else { 55.97 + ext2fs_bg_flags_set(fs, group, 55.98 + EXT2_BG_INODE_UNINIT); 55.99 + ext2fs_bg_itable_unused_set(fs, group, 55.100 + 0); 55.101 + } 55.102 + ext2fs_bg_free_inodes_count_set(fs, group, 55.103 + group_free); 55.104 + } 55.105 + group++; 55.106 + count = 0; 55.107 + group_free = 0; 55.108 + last_allocated = 0; 55.109 + } 55.110 + } 55.111 + fs->super->s_free_inodes_count = total_free; 55.112 + ext2fs_mark_super_dirty(fs); 55.113 + return 0; 55.114 +}
56.1 --- a/libext2fs/lib/libext2fs/inode.c Sat Oct 02 23:57:02 2021 +0200 56.2 +++ b/libext2fs/lib/libext2fs/inode.c Sat Oct 09 23:28:01 2021 +0200 56.3 @@ -144,6 +144,8 @@ 56.4 errcode_t (*save_get_blocks)(ext2_filsys f, ext2_ino_t ino, blk_t *blocks); 56.5 56.6 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 56.7 + if (fs->blocksize < 1024) 56.8 + return EXT2_FILSYS_CORRUPTED; /* Should never happen */ 56.9 56.10 /* 56.11 * If fs->badblocks isn't set, then set it --- since the inode 56.12 @@ -179,6 +181,14 @@ 56.13 EXT2_INODE_SCAN_DEFAULT_BUFFER_BLOCKS; 56.14 scan->current_block = ext2fs_inode_table_loc(scan->fs, 56.15 scan->current_group); 56.16 + if (scan->current_block && 56.17 + ((scan->current_block < fs->super->s_first_data_block) || 56.18 + (scan->current_block + fs->inode_blocks_per_group - 1 >= 56.19 + ext2fs_blocks_count(fs->super)))) { 56.20 + ext2fs_free_mem(&scan); 56.21 + return EXT2_ET_GDESC_BAD_INODE_TABLE; 56.22 + } 56.23 + 56.24 scan->inodes_left = EXT2_INODES_PER_GROUP(scan->fs->super); 56.25 scan->blocks_left = scan->fs->inode_blocks_per_group; 56.26 if (ext2fs_has_group_desc_csum(fs)) { 56.27 @@ -288,7 +298,11 @@ 56.28 (fs->blocksize / scan->inode_size - 1)) * 56.29 scan->inode_size / fs->blocksize; 56.30 } 56.31 - 56.32 + if (scan->current_block && 56.33 + ((scan->current_block < fs->super->s_first_data_block) || 56.34 + (scan->current_block + fs->inode_blocks_per_group - 1 >= 56.35 + ext2fs_blocks_count(fs->super)))) 56.36 + return EXT2_ET_GDESC_BAD_INODE_TABLE; 56.37 return 0; 56.38 } 56.39 56.40 @@ -297,6 +311,7 @@ 56.41 { 56.42 scan->current_group = group - 1; 56.43 scan->groups_left = scan->fs->group_desc_count - group; 56.44 + scan->bad_block_ptr = 0; 56.45 return get_next_blockgroup(scan); 56.46 } 56.47 56.48 @@ -320,6 +335,12 @@ 56.49 if (blk == 0) 56.50 return 0; 56.51 56.52 + /* Make sure bad_block_ptr is still valid */ 56.53 + if (scan->bad_block_ptr >= bb->num) { 56.54 + scan->scan_flags &= ~EXT2_SF_CHK_BADBLOCKS; 56.55 + return 0; 56.56 + } 56.57 + 56.58 /* 56.59 * If the current block is greater than the bad block listed 56.60 * in the bad block list, then advance the pointer until this 56.61 @@ -728,11 +749,13 @@ 56.62 /* 56.63 * Functions to read and write a single inode. 56.64 */ 56.65 -errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino, 56.66 - struct ext2_inode * inode, int bufsize) 56.67 +errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino, 56.68 + struct ext2_inode * inode, int bufsize, 56.69 + int flags) 56.70 { 56.71 blk64_t block_nr; 56.72 - unsigned long group, block, offset; 56.73 + dgrp_t group; 56.74 + unsigned long block, offset; 56.75 char *ptr; 56.76 errcode_t retval; 56.77 unsigned i; 56.78 @@ -743,6 +766,8 @@ 56.79 int cache_slot, fail_csum; 56.80 56.81 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 56.82 + if (fs->blocksize < 1024) 56.83 + return EXT2_FILSYS_CORRUPTED; /* Should never happen */ 56.84 56.85 /* Check to see if user has an override function */ 56.86 if (fs->read_inode && 56.87 @@ -782,10 +807,14 @@ 56.88 offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) * 56.89 EXT2_INODE_SIZE(fs->super); 56.90 block = offset >> EXT2_BLOCK_SIZE_BITS(fs->super); 56.91 - if (!ext2fs_inode_table_loc(fs, (unsigned) group)) 56.92 + block_nr = ext2fs_inode_table_loc(fs, group); 56.93 + if (!block_nr) 56.94 return EXT2_ET_MISSING_INODE_TABLE; 56.95 - block_nr = ext2fs_inode_table_loc(fs, group) + 56.96 - block; 56.97 + if ((block_nr < fs->super->s_first_data_block) || 56.98 + (block_nr + fs->inode_blocks_per_group - 1 >= 56.99 + ext2fs_blocks_count(fs->super))) 56.100 + return EXT2_ET_GDESC_BAD_INODE_TABLE; 56.101 + block_nr += block; 56.102 io = fs->io; 56.103 } 56.104 offset &= (EXT2_BLOCK_SIZE(fs->super) - 1); 56.105 @@ -833,24 +862,33 @@ 56.106 } 56.107 memcpy(inode, iptr, (bufsize > length) ? length : bufsize); 56.108 56.109 - if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) && fail_csum) 56.110 + if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) && 56.111 + !(flags & READ_INODE_NOCSUM) && fail_csum) 56.112 return EXT2_ET_INODE_CSUM_INVALID; 56.113 56.114 return 0; 56.115 } 56.116 56.117 +errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino, 56.118 + struct ext2_inode * inode, int bufsize) 56.119 +{ 56.120 + return ext2fs_read_inode2(fs, ino, inode, bufsize, 0); 56.121 +} 56.122 + 56.123 errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino, 56.124 struct ext2_inode * inode) 56.125 { 56.126 - return ext2fs_read_inode_full(fs, ino, inode, 56.127 - sizeof(struct ext2_inode)); 56.128 + return ext2fs_read_inode2(fs, ino, inode, 56.129 + sizeof(struct ext2_inode), 0); 56.130 } 56.131 56.132 -errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino, 56.133 - struct ext2_inode * inode, int bufsize) 56.134 +errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino, 56.135 + struct ext2_inode * inode, int bufsize, 56.136 + int flags) 56.137 { 56.138 blk64_t block_nr; 56.139 - unsigned long group, block, offset; 56.140 + dgrp_t group; 56.141 + unsigned long block, offset; 56.142 errcode_t retval = 0; 56.143 struct ext2_inode_large *w_inode; 56.144 char *ptr; 56.145 @@ -876,13 +914,9 @@ 56.146 return retval; 56.147 56.148 if (bufsize < length) { 56.149 - int old_flags = fs->flags; 56.150 - fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS; 56.151 - retval = ext2fs_read_inode_full(fs, ino, 56.152 - (struct ext2_inode *)w_inode, 56.153 - length); 56.154 - fs->flags = (old_flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) | 56.155 - (fs->flags & ~EXT2_FLAG_IGNORE_CSUM_ERRORS); 56.156 + retval = ext2fs_read_inode2(fs, ino, 56.157 + (struct ext2_inode *)w_inode, 56.158 + length, READ_INODE_NOCSUM); 56.159 if (retval) 56.160 goto errout; 56.161 } 56.162 @@ -912,19 +946,28 @@ 56.163 ext2fs_swap_inode_full(fs, w_inode, w_inode, 1, length); 56.164 #endif 56.165 56.166 - retval = ext2fs_inode_csum_set(fs, ino, w_inode); 56.167 - if (retval) 56.168 - goto errout; 56.169 + if ((flags & WRITE_INODE_NOCSUM) == 0) { 56.170 + retval = ext2fs_inode_csum_set(fs, ino, w_inode); 56.171 + if (retval) 56.172 + goto errout; 56.173 + } 56.174 56.175 group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super); 56.176 offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) * 56.177 EXT2_INODE_SIZE(fs->super); 56.178 block = offset >> EXT2_BLOCK_SIZE_BITS(fs->super); 56.179 - if (!ext2fs_inode_table_loc(fs, (unsigned) group)) { 56.180 + block_nr = ext2fs_inode_table_loc(fs, (unsigned) group); 56.181 + if (!block_nr) { 56.182 retval = EXT2_ET_MISSING_INODE_TABLE; 56.183 goto errout; 56.184 } 56.185 - block_nr = ext2fs_inode_table_loc(fs, (unsigned) group) + block; 56.186 + if ((block_nr < fs->super->s_first_data_block) || 56.187 + (block_nr + fs->inode_blocks_per_group - 1 >= 56.188 + ext2fs_blocks_count(fs->super))) { 56.189 + retval = EXT2_ET_GDESC_BAD_INODE_TABLE; 56.190 + goto errout; 56.191 + } 56.192 + block_nr += block; 56.193 56.194 offset &= (EXT2_BLOCK_SIZE(fs->super) - 1); 56.195 56.196 @@ -964,11 +1007,17 @@ 56.197 return retval; 56.198 } 56.199 56.200 +errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino, 56.201 + struct ext2_inode * inode, int bufsize) 56.202 +{ 56.203 + return ext2fs_write_inode2(fs, ino, inode, bufsize, 0); 56.204 +} 56.205 + 56.206 errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino, 56.207 struct ext2_inode *inode) 56.208 { 56.209 - return ext2fs_write_inode_full(fs, ino, inode, 56.210 - sizeof(struct ext2_inode)); 56.211 + return ext2fs_write_inode2(fs, ino, inode, 56.212 + sizeof(struct ext2_inode), 0); 56.213 } 56.214 56.215 /*
57.1 --- a/libext2fs/lib/libext2fs/inode_io.c Sat Oct 02 23:57:02 2021 +0200 57.2 +++ b/libext2fs/lib/libext2fs/inode_io.c Sat Oct 09 23:28:01 2021 +0200 57.3 @@ -215,9 +215,9 @@ 57.4 data = (struct inode_private_data *) channel->private_data; 57.5 EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_INODE_IO_CHANNEL); 57.6 57.7 - if ((retval = ext2fs_file_lseek(data->file, 57.8 - block * channel->block_size, 57.9 - EXT2_SEEK_SET, 0))) 57.10 + if ((retval = ext2fs_file_llseek(data->file, 57.11 + (ext2_off64_t)(block * channel->block_size), 57.12 + EXT2_SEEK_SET, 0))) 57.13 return retval; 57.14 57.15 count = (count < 0) ? -count : (count * channel->block_size); 57.16 @@ -241,9 +241,9 @@ 57.17 data = (struct inode_private_data *) channel->private_data; 57.18 EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_INODE_IO_CHANNEL); 57.19 57.20 - if ((retval = ext2fs_file_lseek(data->file, 57.21 - block * channel->block_size, 57.22 - EXT2_SEEK_SET, 0))) 57.23 + if ((retval = ext2fs_file_llseek(data->file, 57.24 + (ext2_off64_t) (block * channel->block_size), 57.25 + EXT2_SEEK_SET, 0))) 57.26 return retval; 57.27 57.28 count = (count < 0) ? -count : (count * channel->block_size);
58.1 --- a/libext2fs/lib/libext2fs/io_manager.c Sat Oct 02 23:57:02 2021 +0200 58.2 +++ b/libext2fs/lib/libext2fs/io_manager.c Sat Oct 09 23:28:01 2021 +0200 58.3 @@ -134,9 +134,11 @@ 58.4 else 58.5 size = -count; 58.6 58.7 - if (io->align) 58.8 + if (io->align) { 58.9 + if (io->align > size) 58.10 + size = io->align; 58.11 return ext2fs_get_memalign(size, io->align, ptr); 58.12 - else 58.13 + } else 58.14 return ext2fs_get_mem(size, ptr); 58.15 } 58.16
59.1 --- a/libext2fs/lib/libext2fs/ismounted.c Sat Oct 02 23:57:02 2021 +0200 59.2 +++ b/libext2fs/lib/libext2fs/ismounted.c Sat Oct 09 23:28:01 2021 +0200 59.3 @@ -128,8 +128,19 @@ 59.4 while ((mnt = getmntent (f)) != NULL) { 59.5 if (mnt->mnt_fsname[0] != '/') 59.6 continue; 59.7 - if (strcmp(file, mnt->mnt_fsname) == 0) 59.8 + if (stat(mnt->mnt_dir, &st_buf) != 0) 59.9 + continue; 59.10 + if (strcmp(file, mnt->mnt_fsname) == 0) { 59.11 + if (file_rdev && (file_rdev != st_buf.st_dev)) { 59.12 +#ifdef DEBUG 59.13 + printf("Bogus entry in %s! " 59.14 + "(%s does not exist)\n", 59.15 + mtab_file, mnt->mnt_dir); 59.16 +#endif /* DEBUG */ 59.17 + continue; 59.18 + } 59.19 break; 59.20 + } 59.21 if (stat(mnt->mnt_fsname, &st_buf) == 0) { 59.22 if (ext2fsP_is_disk_device(st_buf.st_mode)) { 59.23 #ifndef __GNU__ 59.24 @@ -168,32 +179,6 @@ 59.25 #endif /* __GNU__ */ 59.26 goto errout; 59.27 } 59.28 -#ifndef __GNU__ /* The GNU hurd is deficient; what else is new? */ 59.29 - /* Validate the entry in case /etc/mtab is out of date */ 59.30 - /* 59.31 - * We need to be paranoid, because some broken distributions 59.32 - * (read: Slackware) don't initialize /etc/mtab before checking 59.33 - * all of the non-root filesystems on the disk. 59.34 - */ 59.35 - if (stat(mnt->mnt_dir, &st_buf) < 0) { 59.36 - retval = errno; 59.37 - if (retval == ENOENT) { 59.38 -#ifdef DEBUG 59.39 - printf("Bogus entry in %s! (%s does not exist)\n", 59.40 - mtab_file, mnt->mnt_dir); 59.41 -#endif /* DEBUG */ 59.42 - retval = 0; 59.43 - } 59.44 - goto errout; 59.45 - } 59.46 - if (file_rdev && (st_buf.st_dev != file_rdev)) { 59.47 -#ifdef DEBUG 59.48 - printf("Bogus entry in %s! (%s not mounted on %s)\n", 59.49 - mtab_file, file, mnt->mnt_dir); 59.50 -#endif /* DEBUG */ 59.51 - goto errout; 59.52 - } 59.53 -#endif /* __GNU__ */ 59.54 *mount_flags = EXT2_MF_MOUNTED; 59.55 59.56 #ifdef MNTOPT_RO 59.57 @@ -242,7 +227,7 @@ 59.58 #ifdef __linux__ 59.59 retval = check_mntent_file("/proc/mounts", file, mount_flags, 59.60 mtpt, mtlen); 59.61 - if (retval == 0 && (*mount_flags != 0)) 59.62 + if (retval == 0) 59.63 return 0; 59.64 #endif /* __linux__ */ 59.65 #if defined(MOUNTED) || defined(_PATH_MOUNTED) 59.66 @@ -367,6 +352,7 @@ 59.67 char *mtpt, int mtlen) 59.68 { 59.69 errcode_t retval = 0; 59.70 + int busy = 0; 59.71 59.72 if (getenv("EXT2FS_PRETEND_RO_MOUNT")) { 59.73 *mount_flags = EXT2_MF_MOUNTED | EXT2_MF_READONLY; 59.74 @@ -381,6 +367,30 @@ 59.75 return 0; 59.76 } 59.77 59.78 +#ifdef __linux__ /* This only works on Linux 2.6+ systems */ 59.79 + { 59.80 + struct stat st_buf; 59.81 + 59.82 + if (stat(device, &st_buf) == 0 && 59.83 + ext2fsP_is_disk_device(st_buf.st_mode)) { 59.84 + int fd = open(device, O_RDONLY | O_EXCL); 59.85 + 59.86 + if (fd >= 0) { 59.87 + /* 59.88 + * The device is not busy so it's 59.89 + * definitelly not mounted. No need to 59.90 + * to perform any more checks. 59.91 + */ 59.92 + close(fd); 59.93 + *mount_flags = 0; 59.94 + return 0; 59.95 + } else if (errno == EBUSY) { 59.96 + busy = 1; 59.97 + } 59.98 + } 59.99 + } 59.100 +#endif 59.101 + 59.102 if (is_swap_device(device)) { 59.103 *mount_flags = EXT2_MF_MOUNTED | EXT2_MF_SWAP; 59.104 strncpy(mtpt, "<swap>", mtlen); 59.105 @@ -401,21 +411,8 @@ 59.106 if (retval) 59.107 return retval; 59.108 59.109 -#ifdef __linux__ /* This only works on Linux 2.6+ systems */ 59.110 - { 59.111 - struct stat st_buf; 59.112 - 59.113 - if (stat(device, &st_buf) == 0 && 59.114 - ext2fsP_is_disk_device(st_buf.st_mode)) { 59.115 - int fd = open(device, O_RDONLY | O_EXCL); 59.116 - 59.117 - if (fd >= 0) 59.118 - close(fd); 59.119 - else if (errno == EBUSY) 59.120 - *mount_flags |= EXT2_MF_BUSY; 59.121 - } 59.122 - } 59.123 -#endif 59.124 + if (busy) 59.125 + *mount_flags |= EXT2_MF_BUSY; 59.126 59.127 return 0; 59.128 }
60.1 --- a/libext2fs/lib/libext2fs/jfs_compat.h Sat Oct 02 23:57:02 2021 +0200 60.2 +++ b/libext2fs/lib/libext2fs/jfs_compat.h Sat Oct 09 23:28:01 2021 +0200 60.3 @@ -12,18 +12,28 @@ 60.4 #else 60.5 #include <arpa/inet.h> 60.6 #endif 60.7 +#include <stdbool.h> 60.8 60.9 #define printk printf 60.10 #define KERN_ERR "" 60.11 #define KERN_DEBUG "" 60.12 60.13 -#define READ 0 60.14 -#define WRITE 1 60.15 +#define REQ_OP_READ 0 60.16 +#define REQ_OP_WRITE 1 60.17 60.18 -#define cpu_to_be32(n) htonl(n) 60.19 -#define be32_to_cpu(n) ntohl(n) 60.20 -#define cpu_to_be16(n) htons(n) 60.21 -#define be16_to_cpu(n) ntohs(n) 60.22 +#define cpu_to_le16(x) ext2fs_cpu_to_le16(x) 60.23 +#define cpu_to_be16(x) ext2fs_cpu_to_be16(x) 60.24 +#define cpu_to_le32(x) ext2fs_cpu_to_le32(x) 60.25 +#define cpu_to_be32(x) ext2fs_cpu_to_be32(x) 60.26 +#define cpu_to_le64(x) ext2fs_cpu_to_le64(x) 60.27 +#define cpu_to_be64(x) ext2fs_cpu_to_be64(x) 60.28 + 60.29 +#define le16_to_cpu(x) ext2fs_le16_to_cpu(x) 60.30 +#define be16_to_cpu(x) ext2fs_be16_to_cpu(x) 60.31 +#define le32_to_cpu(x) ext2fs_le32_to_cpu(x) 60.32 +#define be32_to_cpu(x) ext2fs_be32_to_cpu(x) 60.33 +#define le64_to_cpu(x) ext2fs_le64_to_cpu(x) 60.34 +#define be64_to_cpu(x) ext2fs_be64_to_cpu(x) 60.35 60.36 typedef unsigned int tid_t; 60.37 typedef struct journal_s journal_t; 60.38 @@ -32,14 +42,14 @@ 60.39 struct buffer_head; 60.40 struct inode; 60.41 60.42 +typedef unsigned int gfp_t; 60.43 #define GFP_KERNEL 0 60.44 -#define JFS_TAG_SIZE32 JBD_TAG_SIZE32 60.45 -#define JFS_BARRIER 0 60.46 +#define GFP_NOFS 0 60.47 +#define __GFP_NOFAIL 0 60.48 +#define JBD2_TAG_SIZE32 JBD_TAG_SIZE32 60.49 +#define JBD2_BARRIER 0 60.50 typedef __u64 u64; 60.51 -#define JFS_CRC32_CHKSUM JBD2_CRC32_CHKSUM 60.52 -#define JFS_CRC32_CHKSUM_SIZE JBD2_CRC32_CHKSUM_SIZE 60.53 #define put_bh(x) brelse(x) 60.54 -#define be64_to_cpu(x) ext2fs_be64_to_cpu(x) 60.55 60.56 static inline __u32 jbd2_chksum(journal_t *j EXT2FS_ATTR((unused)), 60.57 __u32 crc, const void *address, 60.58 @@ -51,15 +61,21 @@ 60.59 #define spin_lock_init(x) 60.60 #define spin_lock(x) 60.61 #define spin_unlock(x) 60.62 -#define yield() 60.63 #define SLAB_HWCACHE_ALIGN 0 60.64 #define SLAB_TEMPORARY 0 60.65 #define KMEM_CACHE(__struct, __flags) kmem_cache_create(#__struct,\ 60.66 sizeof(struct __struct), __alignof__(struct __struct),\ 60.67 (__flags), NULL) 60.68 60.69 -#define blkdev_issue_flush(kdev, a, b) sync_blockdev(kdev) 60.70 +#define blkdev_issue_flush(kdev, a) sync_blockdev(kdev) 60.71 #define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0)) 60.72 +#define pr_emerg(fmt) 60.73 +#define pr_err(...) 60.74 + 60.75 +enum passtype {PASS_SCAN, PASS_REVOKE, PASS_REPLAY}; 60.76 + 60.77 +#define JBD2_FC_REPLAY_STOP 0 60.78 +#define JBD2_FC_REPLAY_CONTINUE 1 60.79 60.80 struct journal_s 60.81 { 60.82 @@ -70,13 +86,16 @@ 60.83 int j_format_version; 60.84 unsigned long j_head; 60.85 unsigned long j_tail; 60.86 + unsigned long j_fc_first; 60.87 + unsigned long j_fc_off; 60.88 + unsigned long j_fc_last; 60.89 unsigned long j_free; 60.90 unsigned long j_first, j_last; 60.91 kdev_t j_dev; 60.92 kdev_t j_fs_dev; 60.93 int j_blocksize; 60.94 unsigned int j_blk_offset; 60.95 - unsigned int j_maxlen; 60.96 + unsigned int j_total_len; 60.97 struct inode * j_inode; 60.98 tid_t j_tail_sequence; 60.99 tid_t j_transaction_sequence; 60.100 @@ -85,6 +104,11 @@ 60.101 struct jbd2_revoke_table_s *j_revoke_table[2]; 60.102 tid_t j_failed_commit; 60.103 __u32 j_csum_seed; 60.104 + int (*j_fc_replay_callback)(struct journal_s *journal, 60.105 + struct buffer_head *bh, 60.106 + enum passtype pass, int off, 60.107 + tid_t expected_tid); 60.108 + 60.109 }; 60.110 60.111 #define is_journal_abort(x) 0
61.1 --- a/libext2fs/lib/libext2fs/kernel-list.h Sat Oct 02 23:57:02 2021 +0200 61.2 +++ b/libext2fs/lib/libext2fs/kernel-list.h Sat Oct 09 23:28:01 2021 +0200 61.3 @@ -1,6 +1,8 @@ 61.4 #ifndef _LINUX_LIST_H 61.5 #define _LINUX_LIST_H 61.6 61.7 +#include "compiler.h" 61.8 + 61.9 /* 61.10 * Simple doubly linked list implementation. 61.11 * 61.12 @@ -101,7 +103,7 @@ 61.13 } 61.14 61.15 #define list_entry(ptr, type, member) \ 61.16 - ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) 61.17 + container_of(ptr, type, member) 61.18 61.19 #define list_for_each(pos, head) \ 61.20 for (pos = (head)->next; pos != (head); pos = pos->next)
62.1 --- a/libext2fs/lib/libext2fs/link.c Sat Oct 02 23:57:02 2021 +0200 62.2 +++ b/libext2fs/lib/libext2fs/link.c Sat Oct 09 23:28:01 2021 +0200 62.3 @@ -18,6 +18,154 @@ 62.4 62.5 #include "ext2_fs.h" 62.6 #include "ext2fs.h" 62.7 +#include "ext2fsP.h" 62.8 + 62.9 +#define EXT2_DX_ROOT_OFF 24 62.10 + 62.11 +struct dx_frame { 62.12 + void *buf; 62.13 + blk64_t pblock; 62.14 + struct ext2_dx_countlimit *head; 62.15 + struct ext2_dx_entry *entries; 62.16 + struct ext2_dx_entry *at; 62.17 +}; 62.18 + 62.19 +struct dx_lookup_info { 62.20 + const char *name; 62.21 + int namelen; 62.22 + int hash_alg; 62.23 + __u32 hash; 62.24 + int levels; 62.25 + struct dx_frame frames[EXT4_HTREE_LEVEL]; 62.26 +}; 62.27 + 62.28 +static errcode_t alloc_dx_frame(ext2_filsys fs, struct dx_frame *frame) 62.29 +{ 62.30 + return ext2fs_get_mem(fs->blocksize, &frame->buf); 62.31 +} 62.32 + 62.33 +static void dx_release(struct dx_lookup_info *info) 62.34 +{ 62.35 + int level; 62.36 + 62.37 + for (level = 0; level < info->levels; level++) { 62.38 + if (info->frames[level].buf == NULL) 62.39 + break; 62.40 + ext2fs_free_mem(&(info->frames[level].buf)); 62.41 + } 62.42 + info->levels = 0; 62.43 +} 62.44 + 62.45 +static void dx_search_entry(struct dx_frame *frame, int count, __u32 hash) 62.46 +{ 62.47 + struct ext2_dx_entry *p, *q, *m; 62.48 + 62.49 + p = frame->entries + 1; 62.50 + q = frame->entries + count - 1; 62.51 + while (p <= q) { 62.52 + m = p + (q - p) / 2; 62.53 + if (ext2fs_le32_to_cpu(m->hash) > hash) 62.54 + q = m - 1; 62.55 + else 62.56 + p = m + 1; 62.57 + } 62.58 + frame->at = p - 1; 62.59 +} 62.60 + 62.61 +static errcode_t load_logical_dir_block(ext2_filsys fs, ext2_ino_t dir, 62.62 + struct ext2_inode *diri, blk64_t block, 62.63 + blk64_t *pblk, void *buf) 62.64 +{ 62.65 + errcode_t errcode; 62.66 + int ret_flags; 62.67 + 62.68 + errcode = ext2fs_bmap2(fs, dir, diri, NULL, 0, block, &ret_flags, 62.69 + pblk); 62.70 + if (errcode) 62.71 + return errcode; 62.72 + if (ret_flags & BMAP_RET_UNINIT) 62.73 + return EXT2_ET_DIR_CORRUPTED; 62.74 + return ext2fs_read_dir_block4(fs, *pblk, buf, 0, dir); 62.75 +} 62.76 + 62.77 +static errcode_t dx_lookup(ext2_filsys fs, ext2_ino_t dir, 62.78 + struct ext2_inode *diri, struct dx_lookup_info *info) 62.79 +{ 62.80 + struct ext2_dx_root_info *root; 62.81 + errcode_t errcode; 62.82 + int level = 0; 62.83 + int count, limit; 62.84 + int hash_alg; 62.85 + int hash_flags = diri->i_flags & EXT4_CASEFOLD_FL; 62.86 + __u32 minor_hash; 62.87 + struct dx_frame *frame; 62.88 + 62.89 + errcode = alloc_dx_frame(fs, &(info->frames[0])); 62.90 + if (errcode) 62.91 + return errcode; 62.92 + info->levels = 1; 62.93 + 62.94 + errcode = load_logical_dir_block(fs, dir, diri, 0, 62.95 + &(info->frames[0].pblock), 62.96 + info->frames[0].buf); 62.97 + if (errcode) 62.98 + goto out_err; 62.99 + root = info->frames[0].buf + EXT2_DX_ROOT_OFF; 62.100 + hash_alg = root->hash_version; 62.101 + if (hash_alg != EXT2_HASH_TEA && hash_alg != EXT2_HASH_HALF_MD4 && 62.102 + hash_alg != EXT2_HASH_LEGACY) { 62.103 + errcode = EXT2_ET_DIRHASH_UNSUPP; 62.104 + goto out_err; 62.105 + } 62.106 + if (hash_alg <= EXT2_HASH_TEA && 62.107 + fs->super->s_flags & EXT2_FLAGS_UNSIGNED_HASH) 62.108 + hash_alg += 3; 62.109 + if (root->indirect_levels >= ext2_dir_htree_level(fs)) { 62.110 + errcode = EXT2_ET_DIR_CORRUPTED; 62.111 + goto out_err; 62.112 + } 62.113 + info->hash_alg = hash_alg; 62.114 + 62.115 + errcode = ext2fs_dirhash2(hash_alg, info->name, info->namelen, 62.116 + fs->encoding, hash_flags, 62.117 + fs->super->s_hash_seed, &info->hash, 62.118 + &minor_hash); 62.119 + if (errcode) 62.120 + goto out_err; 62.121 + 62.122 + for (level = 0; level <= root->indirect_levels; level++) { 62.123 + frame = &(info->frames[level]); 62.124 + if (level > 0) { 62.125 + errcode = alloc_dx_frame(fs, frame); 62.126 + if (errcode) 62.127 + goto out_err; 62.128 + info->levels++; 62.129 + 62.130 + errcode = load_logical_dir_block(fs, dir, diri, 62.131 + ext2fs_le32_to_cpu(info->frames[level-1].at->block) & 0x0fffffff, 62.132 + &(frame->pblock), frame->buf); 62.133 + if (errcode) 62.134 + goto out_err; 62.135 + } 62.136 + errcode = ext2fs_get_dx_countlimit(fs, frame->buf, 62.137 + &(frame->head), NULL); 62.138 + if (errcode) 62.139 + goto out_err; 62.140 + count = ext2fs_le16_to_cpu(frame->head->count); 62.141 + limit = ext2fs_le16_to_cpu(frame->head->limit); 62.142 + frame->entries = (struct ext2_dx_entry *)(frame->head); 62.143 + if (!count || count > limit) { 62.144 + errcode = EXT2_ET_DIR_CORRUPTED; 62.145 + goto out_err; 62.146 + } 62.147 + 62.148 + dx_search_entry(frame, count, info->hash); 62.149 + } 62.150 + return 0; 62.151 +out_err: 62.152 + dx_release(info); 62.153 + return errcode; 62.154 +} 62.155 62.156 struct link_struct { 62.157 ext2_filsys fs; 62.158 @@ -31,7 +179,9 @@ 62.159 struct ext2_super_block *sb; 62.160 }; 62.161 62.162 -static int link_proc(struct ext2_dir_entry *dirent, 62.163 +static int link_proc(ext2_ino_t dir EXT2FS_ATTR((unused)), 62.164 + int entru EXT2FS_ATTR((unused)), 62.165 + struct ext2_dir_entry *dirent, 62.166 int offset, 62.167 int blocksize, 62.168 char *buf, 62.169 @@ -42,7 +192,6 @@ 62.170 unsigned int rec_len, min_rec_len, curr_rec_len; 62.171 int ret = 0; 62.172 int csum_size = 0; 62.173 - struct ext2_dir_entry_tail *t; 62.174 62.175 if (ls->done) 62.176 return DIRENT_ABORT; 62.177 @@ -71,40 +220,6 @@ 62.178 } 62.179 62.180 /* 62.181 - * Since ext2fs_link blows away htree data, we need to be 62.182 - * careful -- if metadata_csum is enabled and we're passed in 62.183 - * a dirent that contains htree data, we need to create the 62.184 - * fake entry at the end of the block that hides the checksum. 62.185 - */ 62.186 - 62.187 - /* De-convert a dx_node block */ 62.188 - if (csum_size && 62.189 - curr_rec_len == ls->fs->blocksize && 62.190 - !dirent->inode) { 62.191 - curr_rec_len -= csum_size; 62.192 - ls->err = ext2fs_set_rec_len(ls->fs, curr_rec_len, dirent); 62.193 - if (ls->err) 62.194 - return DIRENT_ABORT; 62.195 - t = EXT2_DIRENT_TAIL(buf, ls->fs->blocksize); 62.196 - ext2fs_initialize_dirent_tail(ls->fs, t); 62.197 - ret = DIRENT_CHANGED; 62.198 - } 62.199 - 62.200 - /* De-convert a dx_root block */ 62.201 - if (csum_size && 62.202 - curr_rec_len == ls->fs->blocksize - EXT2_DIR_REC_LEN(1) && 62.203 - offset == EXT2_DIR_REC_LEN(1) && 62.204 - dirent->name[0] == '.' && dirent->name[1] == '.') { 62.205 - curr_rec_len -= csum_size; 62.206 - ls->err = ext2fs_set_rec_len(ls->fs, curr_rec_len, dirent); 62.207 - if (ls->err) 62.208 - return DIRENT_ABORT; 62.209 - t = EXT2_DIRENT_TAIL(buf, ls->fs->blocksize); 62.210 - ext2fs_initialize_dirent_tail(ls->fs, t); 62.211 - ret = DIRENT_CHANGED; 62.212 - } 62.213 - 62.214 - /* 62.215 * If the directory entry is used, see if we can split the 62.216 * directory entry to make room for the new name. If so, 62.217 * truncate it and return. 62.218 @@ -144,6 +259,343 @@ 62.219 return DIRENT_ABORT|DIRENT_CHANGED; 62.220 } 62.221 62.222 +static errcode_t add_dirent_to_buf(ext2_filsys fs, e2_blkcnt_t blockcnt, 62.223 + char *buf, ext2_ino_t dir, 62.224 + struct ext2_inode *diri, const char *name, 62.225 + ext2_ino_t ino, int flags, blk64_t *pblkp) 62.226 +{ 62.227 + struct dir_context ctx; 62.228 + struct link_struct ls; 62.229 + errcode_t retval; 62.230 + 62.231 + retval = load_logical_dir_block(fs, dir, diri, blockcnt, pblkp, buf); 62.232 + if (retval) 62.233 + return retval; 62.234 + ctx.errcode = 0; 62.235 + ctx.func = link_proc; 62.236 + ctx.dir = dir; 62.237 + ctx.flags = DIRENT_FLAG_INCLUDE_EMPTY; 62.238 + ctx.buf = buf; 62.239 + ctx.priv_data = &ls; 62.240 + 62.241 + ls.fs = fs; 62.242 + ls.name = name; 62.243 + ls.namelen = strlen(name); 62.244 + ls.inode = ino; 62.245 + ls.flags = flags; 62.246 + ls.done = 0; 62.247 + ls.sb = fs->super; 62.248 + ls.blocksize = fs->blocksize; 62.249 + ls.err = 0; 62.250 + 62.251 + ext2fs_process_dir_block(fs, pblkp, blockcnt, 0, 0, &ctx); 62.252 + if (ctx.errcode) 62.253 + return ctx.errcode; 62.254 + if (ls.err) 62.255 + return ls.err; 62.256 + if (!ls.done) 62.257 + return EXT2_ET_DIR_NO_SPACE; 62.258 + return 0; 62.259 +} 62.260 + 62.261 +struct dx_hash_map { 62.262 + __u32 hash; 62.263 + int size; 62.264 + int off; 62.265 +}; 62.266 + 62.267 +static EXT2_QSORT_TYPE dx_hash_map_cmp(const void *ap, const void *bp) 62.268 +{ 62.269 + const struct dx_hash_map *a = ap, *b = bp; 62.270 + 62.271 + if (a->hash < b->hash) 62.272 + return -1; 62.273 + if (a->hash > b->hash) 62.274 + return 1; 62.275 + return 0; 62.276 +} 62.277 + 62.278 +static errcode_t dx_move_dirents(ext2_filsys fs, struct dx_hash_map *map, 62.279 + int count, void *from, void *to) 62.280 +{ 62.281 + struct ext2_dir_entry *de; 62.282 + int i; 62.283 + int rec_len = 0; 62.284 + errcode_t retval; 62.285 + int csum_size = 0; 62.286 + void *base = to; 62.287 + 62.288 + if (ext2fs_has_feature_metadata_csum(fs->super)) 62.289 + csum_size = sizeof(struct ext2_dir_entry_tail); 62.290 + 62.291 + for (i = 0; i < count; i++) { 62.292 + de = from + map[i].off; 62.293 + rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(de)); 62.294 + memcpy(to, de, rec_len); 62.295 + retval = ext2fs_set_rec_len(fs, rec_len, to); 62.296 + if (retval) 62.297 + return retval; 62.298 + to += rec_len; 62.299 + } 62.300 + /* 62.301 + * Update rec_len of the last dir entry to stretch to the end of block 62.302 + */ 62.303 + to -= rec_len; 62.304 + rec_len = fs->blocksize - (to - base) - csum_size; 62.305 + retval = ext2fs_set_rec_len(fs, rec_len, to); 62.306 + if (retval) 62.307 + return retval; 62.308 + if (csum_size) 62.309 + ext2fs_initialize_dirent_tail(fs, 62.310 + EXT2_DIRENT_TAIL(base, fs->blocksize)); 62.311 + return 0; 62.312 +} 62.313 + 62.314 +static errcode_t dx_insert_entry(ext2_filsys fs, ext2_ino_t dir, 62.315 + struct dx_lookup_info *info, int level, 62.316 + __u32 hash, blk64_t lblk) 62.317 +{ 62.318 + int pcount; 62.319 + struct ext2_dx_entry *top, *new; 62.320 + 62.321 + pcount = ext2fs_le16_to_cpu(info->frames[level].head->count); 62.322 + top = info->frames[level].entries + pcount; 62.323 + new = info->frames[level].at + 1; 62.324 + memmove(new + 1, new, (char *)top - (char *)new); 62.325 + new->hash = ext2fs_cpu_to_le32(hash); 62.326 + new->block = ext2fs_cpu_to_le32(lblk); 62.327 + info->frames[level].head->count = ext2fs_cpu_to_le16(pcount + 1); 62.328 + return ext2fs_write_dir_block4(fs, info->frames[level].pblock, 62.329 + info->frames[level].buf, 0, dir); 62.330 +} 62.331 + 62.332 +static errcode_t dx_split_leaf(ext2_filsys fs, ext2_ino_t dir, 62.333 + struct ext2_inode *diri, 62.334 + struct dx_lookup_info *info, void *buf, 62.335 + blk64_t leaf_pblk, blk64_t new_lblk, 62.336 + blk64_t new_pblk) 62.337 +{ 62.338 + int hash_flags = diri->i_flags & EXT4_CASEFOLD_FL; 62.339 + struct ext2_dir_entry *de; 62.340 + void *buf2; 62.341 + errcode_t retval = 0; 62.342 + unsigned int rec_len; 62.343 + unsigned int offset, move_size; 62.344 + int i, count = 0; 62.345 + struct dx_hash_map *map; 62.346 + int continued; 62.347 + __u32 minor_hash; 62.348 + 62.349 + retval = ext2fs_get_mem(fs->blocksize, &buf2); 62.350 + if (retval) 62.351 + return retval; 62.352 + retval = ext2fs_get_array(fs->blocksize / 12, 62.353 + sizeof(struct dx_hash_map), &map); 62.354 + if (retval) { 62.355 + ext2fs_free_mem(&buf2); 62.356 + return retval; 62.357 + } 62.358 + for (offset = 0; offset < fs->blocksize; offset += rec_len) { 62.359 + de = buf + offset; 62.360 + retval = ext2fs_get_rec_len(fs, de, &rec_len); 62.361 + if (retval) 62.362 + goto out; 62.363 + if (ext2fs_dirent_name_len(de) > 0 && de->inode) { 62.364 + map[count].off = offset; 62.365 + map[count].size = rec_len; 62.366 + retval = ext2fs_dirhash2(info->hash_alg, de->name, 62.367 + ext2fs_dirent_name_len(de), 62.368 + fs->encoding, hash_flags, 62.369 + fs->super->s_hash_seed, 62.370 + &(map[count].hash), 62.371 + &minor_hash); 62.372 + if (retval) 62.373 + goto out; 62.374 + count++; 62.375 + } 62.376 + } 62.377 + qsort(map, count, sizeof(struct dx_hash_map), dx_hash_map_cmp); 62.378 + move_size = 0; 62.379 + /* Find place to split block */ 62.380 + for (i = count - 1; i >= 0; i--) { 62.381 + if (move_size + map[i].size / 2 > fs->blocksize / 2) 62.382 + break; 62.383 + move_size += map[i].size; 62.384 + } 62.385 + /* Let i be the first entry to move */ 62.386 + i++; 62.387 + /* Move selected directory entries to new block */ 62.388 + retval = dx_move_dirents(fs, map + i, count - i, buf, buf2); 62.389 + if (retval) 62.390 + goto out; 62.391 + retval = ext2fs_write_dir_block4(fs, new_pblk, buf2, 0, dir); 62.392 + if (retval) 62.393 + goto out; 62.394 + /* Repack remaining entries in the old block */ 62.395 + retval = dx_move_dirents(fs, map, i, buf, buf2); 62.396 + if (retval) 62.397 + goto out; 62.398 + retval = ext2fs_write_dir_block4(fs, leaf_pblk, buf2, 0, dir); 62.399 + if (retval) 62.400 + goto out; 62.401 + /* Update parent node */ 62.402 + continued = map[i].hash == map[i-1].hash; 62.403 + retval = dx_insert_entry(fs, dir, info, info->levels - 1, 62.404 + map[i].hash + continued, new_lblk); 62.405 +out: 62.406 + ext2fs_free_mem(&buf2); 62.407 + ext2fs_free_mem(&map); 62.408 + return retval; 62.409 +} 62.410 + 62.411 +static errcode_t dx_grow_tree(ext2_filsys fs, ext2_ino_t dir, 62.412 + struct ext2_inode *diri, 62.413 + struct dx_lookup_info *info, void *buf, 62.414 + blk64_t leaf_pblk) 62.415 +{ 62.416 + int i; 62.417 + errcode_t retval; 62.418 + ext2_off64_t size = EXT2_I_SIZE(diri); 62.419 + blk64_t lblk, pblk; 62.420 + struct ext2_dir_entry *de; 62.421 + struct ext2_dx_countlimit *head; 62.422 + int csum_size = 0; 62.423 + int count; 62.424 + 62.425 + if (ext2fs_has_feature_metadata_csum(fs->super)) 62.426 + csum_size = sizeof(struct ext2_dx_tail); 62.427 + 62.428 + /* Find level which can accommodate new child */ 62.429 + for (i = info->levels - 1; i >= 0; i--) 62.430 + if (ext2fs_le16_to_cpu(info->frames[i].head->count) < 62.431 + ext2fs_le16_to_cpu(info->frames[i].head->limit)) 62.432 + break; 62.433 + /* Need to grow tree depth? */ 62.434 + if (i < 0 && info->levels >= ext2_dir_htree_level(fs)) 62.435 + return EXT2_ET_DIR_NO_SPACE; 62.436 + lblk = size / fs->blocksize; 62.437 + size += fs->blocksize; 62.438 + retval = ext2fs_inode_size_set(fs, diri, size); 62.439 + if (retval) 62.440 + return retval; 62.441 + retval = ext2fs_fallocate(fs, 62.442 + EXT2_FALLOCATE_FORCE_INIT | EXT2_FALLOCATE_ZERO_BLOCKS, 62.443 + dir, diri, 0, lblk, 1); 62.444 + if (retval) 62.445 + return retval; 62.446 + retval = ext2fs_write_inode(fs, dir, diri); 62.447 + if (retval) 62.448 + return retval; 62.449 + retval = ext2fs_bmap2(fs, dir, diri, NULL, 0, lblk, NULL, &pblk); 62.450 + if (retval) 62.451 + return retval; 62.452 + /* Only leaf addition needed? */ 62.453 + if (i == info->levels - 1) 62.454 + return dx_split_leaf(fs, dir, diri, info, buf, leaf_pblk, 62.455 + lblk, pblk); 62.456 + 62.457 + de = buf; 62.458 + de->inode = 0; 62.459 + ext2fs_dirent_set_name_len(de, 0); 62.460 + ext2fs_dirent_set_file_type(de, 0); 62.461 + retval = ext2fs_set_rec_len(fs, fs->blocksize, de); 62.462 + if (retval) 62.463 + return retval; 62.464 + head = buf + 8; 62.465 + count = ext2fs_le16_to_cpu(info->frames[i+1].head->count); 62.466 + /* Growing tree depth? */ 62.467 + if (i < 0) { 62.468 + struct ext2_dx_root_info *root; 62.469 + 62.470 + memcpy(head, info->frames[0].entries, 62.471 + count * sizeof(struct ext2_dx_entry)); 62.472 + head->limit = ext2fs_cpu_to_le16( 62.473 + (fs->blocksize - (8 + csum_size)) / 62.474 + sizeof(struct ext2_dx_entry)); 62.475 + /* head->count gets set by memcpy above to correct value */ 62.476 + 62.477 + /* Now update tree root */ 62.478 + info->frames[0].head->count = ext2fs_cpu_to_le16(1); 62.479 + info->frames[0].entries[0].block = ext2fs_cpu_to_le32(lblk); 62.480 + root = info->frames[0].buf + EXT2_DX_ROOT_OFF; 62.481 + root->indirect_levels++; 62.482 + } else { 62.483 + /* Splitting internal node in two */ 62.484 + int count1 = count / 2; 62.485 + int count2 = count - count1; 62.486 + __u32 split_hash = ext2fs_le32_to_cpu(info->frames[i+1].entries[count1].hash); 62.487 + 62.488 + memcpy(head, info->frames[i+1].entries + count1, 62.489 + count2 * sizeof(struct ext2_dx_entry)); 62.490 + head->count = ext2fs_cpu_to_le16(count2); 62.491 + head->limit = ext2fs_cpu_to_le16( 62.492 + (fs->blocksize - (8 + csum_size)) / 62.493 + sizeof(struct ext2_dx_entry)); 62.494 + info->frames[i+1].head->count = ext2fs_cpu_to_le16(count1); 62.495 + 62.496 + /* Update parent node */ 62.497 + retval = dx_insert_entry(fs, dir, info, i, split_hash, lblk); 62.498 + if (retval) 62.499 + return retval; 62.500 + 62.501 + } 62.502 + /* Writeout split block / updated root */ 62.503 + retval = ext2fs_write_dir_block4(fs, info->frames[i+1].pblock, 62.504 + info->frames[i+1].buf, 0, dir); 62.505 + if (retval) 62.506 + return retval; 62.507 + /* Writeout new tree block */ 62.508 + retval = ext2fs_write_dir_block4(fs, pblk, buf, 0, dir); 62.509 + if (retval) 62.510 + return retval; 62.511 + return 0; 62.512 +} 62.513 + 62.514 +static errcode_t dx_link(ext2_filsys fs, ext2_ino_t dir, 62.515 + struct ext2_inode *diri, const char *name, 62.516 + ext2_ino_t ino, int flags) 62.517 +{ 62.518 + struct dx_lookup_info dx_info; 62.519 + errcode_t retval; 62.520 + void *blockbuf; 62.521 + int restart = 0; 62.522 + blk64_t leaf_pblk; 62.523 + 62.524 + retval = ext2fs_get_mem(fs->blocksize, &blockbuf); 62.525 + if (retval) 62.526 + return retval; 62.527 + 62.528 + dx_info.name = name; 62.529 + dx_info.namelen = strlen(name); 62.530 +again: 62.531 + retval = dx_lookup(fs, dir, diri, &dx_info); 62.532 + if (retval) 62.533 + goto free_buf; 62.534 + 62.535 + retval = add_dirent_to_buf(fs, 62.536 + ext2fs_le32_to_cpu(dx_info.frames[dx_info.levels-1].at->block) & 0x0fffffff, 62.537 + blockbuf, dir, diri, name, ino, flags, &leaf_pblk); 62.538 + /* 62.539 + * Success or error other than ENOSPC...? We are done. We may need upto 62.540 + * two tries to add entry. One to split htree node and another to add 62.541 + * new leaf block. 62.542 + */ 62.543 + if (restart >= dx_info.levels || retval != EXT2_ET_DIR_NO_SPACE) 62.544 + goto free_frames; 62.545 + retval = dx_grow_tree(fs, dir, diri, &dx_info, blockbuf, leaf_pblk); 62.546 + if (retval) 62.547 + goto free_frames; 62.548 + /* Restart everything now that the tree is larger */ 62.549 + restart++; 62.550 + dx_release(&dx_info); 62.551 + goto again; 62.552 +free_frames: 62.553 + dx_release(&dx_info); 62.554 +free_buf: 62.555 + ext2fs_free_mem(&blockbuf); 62.556 + return retval; 62.557 +} 62.558 + 62.559 /* 62.560 * Note: the low 3 bits of the flags field are used as the directory 62.561 * entry filetype. 62.562 @@ -163,6 +615,12 @@ 62.563 if (!(fs->flags & EXT2_FLAG_RW)) 62.564 return EXT2_ET_RO_FILSYS; 62.565 62.566 + if ((retval = ext2fs_read_inode(fs, dir, &inode)) != 0) 62.567 + return retval; 62.568 + 62.569 + if (inode.i_flags & EXT2_INDEX_FL) 62.570 + return dx_link(fs, dir, &inode, name, ino, flags); 62.571 + 62.572 ls.fs = fs; 62.573 ls.name = name; 62.574 ls.namelen = name ? strlen(name) : 0; 62.575 @@ -173,8 +631,8 @@ 62.576 ls.blocksize = fs->blocksize; 62.577 ls.err = 0; 62.578 62.579 - retval = ext2fs_dir_iterate(fs, dir, DIRENT_FLAG_INCLUDE_EMPTY, 62.580 - 0, link_proc, &ls); 62.581 + retval = ext2fs_dir_iterate2(fs, dir, DIRENT_FLAG_INCLUDE_EMPTY, 62.582 + NULL, link_proc, &ls); 62.583 if (retval) 62.584 return retval; 62.585 if (ls.err) 62.586 @@ -182,20 +640,5 @@ 62.587 62.588 if (!ls.done) 62.589 return EXT2_ET_DIR_NO_SPACE; 62.590 - 62.591 - if ((retval = ext2fs_read_inode(fs, dir, &inode)) != 0) 62.592 - return retval; 62.593 - 62.594 - /* 62.595 - * If this function changes to preserve the htree, remove the 62.596 - * two hunks in link_proc that shove checksum tails into the 62.597 - * former dx_root/dx_node blocks. 62.598 - */ 62.599 - if (inode.i_flags & EXT2_INDEX_FL) { 62.600 - inode.i_flags &= ~EXT2_INDEX_FL; 62.601 - if ((retval = ext2fs_write_inode(fs, dir, &inode)) != 0) 62.602 - return retval; 62.603 - } 62.604 - 62.605 return 0; 62.606 }
63.1 --- a/libext2fs/lib/libext2fs/mkdir.c Sat Oct 02 23:57:02 2021 +0200 63.2 +++ b/libext2fs/lib/libext2fs/mkdir.c Sat Oct 09 23:28:01 2021 +0200 63.3 @@ -43,6 +43,7 @@ 63.4 blk64_t blk; 63.5 char *block = 0; 63.6 int inline_data = 0; 63.7 + int drop_refcount = 0; 63.8 63.9 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 63.10 63.11 @@ -144,6 +145,14 @@ 63.12 } 63.13 63.14 /* 63.15 + * Update accounting.... 63.16 + */ 63.17 + if (!inline_data) 63.18 + ext2fs_block_alloc_stats2(fs, blk, +1); 63.19 + ext2fs_inode_alloc_stats2(fs, ino, +1, 1); 63.20 + drop_refcount = 1; 63.21 + 63.22 + /* 63.23 * Link the directory into the filesystem hierarchy 63.24 */ 63.25 if (name) { 63.26 @@ -174,17 +183,16 @@ 63.27 if (retval) 63.28 goto cleanup; 63.29 } 63.30 - 63.31 - /* 63.32 - * Update accounting.... 63.33 - */ 63.34 - if (!inline_data) 63.35 - ext2fs_block_alloc_stats2(fs, blk, +1); 63.36 - ext2fs_inode_alloc_stats2(fs, ino, +1, 1); 63.37 + drop_refcount = 0; 63.38 63.39 cleanup: 63.40 if (block) 63.41 ext2fs_free_mem(&block); 63.42 + if (drop_refcount) { 63.43 + if (!inline_data) 63.44 + ext2fs_block_alloc_stats2(fs, blk, -1); 63.45 + ext2fs_inode_alloc_stats2(fs, ino, -1, 1); 63.46 + } 63.47 return retval; 63.48 63.49 }
64.1 --- a/libext2fs/lib/libext2fs/mkjournal.c Sat Oct 02 23:57:02 2021 +0200 64.2 +++ b/libext2fs/lib/libext2fs/mkjournal.c Sat Oct 09 23:28:01 2021 +0200 64.3 @@ -12,6 +12,7 @@ 64.4 #include "config.h" 64.5 #include <stdio.h> 64.6 #include <string.h> 64.7 +#include <assert.h> 64.8 #if HAVE_UNISTD_H 64.9 #include <unistd.h> 64.10 #endif 64.11 @@ -43,14 +44,14 @@ 64.12 * This function automatically sets up the journal superblock and 64.13 * returns it as an allocated block. 64.14 */ 64.15 -errcode_t ext2fs_create_journal_superblock(ext2_filsys fs, 64.16 - __u32 num_blocks, int flags, 64.17 - char **ret_jsb) 64.18 +errcode_t ext2fs_create_journal_superblock2(ext2_filsys fs, 64.19 + struct ext2fs_journal_params *jparams, 64.20 + int flags, char **ret_jsb) 64.21 { 64.22 errcode_t retval; 64.23 journal_superblock_t *jsb; 64.24 64.25 - if (num_blocks < JFS_MIN_JOURNAL_BLOCKS) 64.26 + if (jparams->num_journal_blocks < JBD2_MIN_JOURNAL_BLOCKS) 64.27 return EXT2_ET_JOURNAL_TOO_SMALL; 64.28 64.29 if ((retval = ext2fs_get_mem(fs->blocksize, &jsb))) 64.30 @@ -58,16 +59,17 @@ 64.31 64.32 memset (jsb, 0, fs->blocksize); 64.33 64.34 - jsb->s_header.h_magic = htonl(JFS_MAGIC_NUMBER); 64.35 + jsb->s_header.h_magic = htonl(JBD2_MAGIC_NUMBER); 64.36 if (flags & EXT2_MKJOURNAL_V1_SUPER) 64.37 - jsb->s_header.h_blocktype = htonl(JFS_SUPERBLOCK_V1); 64.38 + jsb->s_header.h_blocktype = htonl(JBD2_SUPERBLOCK_V1); 64.39 else 64.40 - jsb->s_header.h_blocktype = htonl(JFS_SUPERBLOCK_V2); 64.41 + jsb->s_header.h_blocktype = htonl(JBD2_SUPERBLOCK_V2); 64.42 jsb->s_blocksize = htonl(fs->blocksize); 64.43 - jsb->s_maxlen = htonl(num_blocks); 64.44 + jsb->s_maxlen = htonl(jparams->num_journal_blocks + jparams->num_fc_blocks); 64.45 jsb->s_nr_users = htonl(1); 64.46 jsb->s_first = htonl(1); 64.47 jsb->s_sequence = htonl(1); 64.48 + jsb->s_num_fc_blks = htonl(jparams->num_fc_blocks); 64.49 memcpy(jsb->s_uuid, fs->super->s_uuid, sizeof(fs->super->s_uuid)); 64.50 /* 64.51 * If we're creating an external journal device, we need to 64.52 @@ -82,20 +84,32 @@ 64.53 return 0; 64.54 } 64.55 64.56 +errcode_t ext2fs_create_journal_superblock(ext2_filsys fs, __u32 num_blocks, 64.57 + int flags, char **ret_sb) 64.58 +{ 64.59 + struct ext2fs_journal_params jparams; 64.60 + 64.61 + jparams.num_journal_blocks = num_blocks; 64.62 + jparams.num_fc_blocks = 0; 64.63 + 64.64 + return ext2fs_create_journal_superblock2(fs, &jparams, flags, ret_sb); 64.65 +} 64.66 + 64.67 /* 64.68 * This function writes a journal using POSIX routines. It is used 64.69 * for creating external journals and creating journals on live 64.70 * filesystems. 64.71 */ 64.72 static errcode_t write_journal_file(ext2_filsys fs, char *filename, 64.73 - blk_t num_blocks, int flags) 64.74 + struct ext2fs_journal_params *jparams, 64.75 + int flags) 64.76 { 64.77 errcode_t retval; 64.78 char *buf = 0; 64.79 int fd, ret_size; 64.80 blk_t i; 64.81 64.82 - if ((retval = ext2fs_create_journal_superblock(fs, num_blocks, flags, 64.83 + if ((retval = ext2fs_create_journal_superblock2(fs, jparams, flags, 64.84 &buf))) 64.85 return retval; 64.86 64.87 @@ -119,7 +133,7 @@ 64.88 if (flags & EXT2_MKJOURNAL_LAZYINIT) 64.89 goto success; 64.90 64.91 - for (i = 1; i < num_blocks; i++) { 64.92 + for (i = 1; i < jparams->num_journal_blocks + jparams->num_fc_blocks; i++) { 64.93 ret_size = write(fd, buf, fs->blocksize); 64.94 if (ret_size < 0) { 64.95 retval = errno; 64.96 @@ -262,7 +276,8 @@ 64.97 * This function creates a journal using direct I/O routines. 64.98 */ 64.99 static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino, 64.100 - blk_t num_blocks, blk64_t goal, int flags) 64.101 + struct ext2fs_journal_params *jparams, 64.102 + blk64_t goal, int flags) 64.103 { 64.104 char *buf; 64.105 errcode_t retval; 64.106 @@ -271,7 +286,7 @@ 64.107 int falloc_flags = EXT2_FALLOCATE_FORCE_INIT; 64.108 blk64_t zblk; 64.109 64.110 - if ((retval = ext2fs_create_journal_superblock(fs, num_blocks, flags, 64.111 + if ((retval = ext2fs_create_journal_superblock2(fs, jparams, flags, 64.112 &buf))) 64.113 return retval; 64.114 64.115 @@ -295,7 +310,8 @@ 64.116 if (!(flags & EXT2_MKJOURNAL_LAZYINIT)) 64.117 falloc_flags |= EXT2_FALLOCATE_ZERO_BLOCKS; 64.118 64.119 - inode_size = (unsigned long long)fs->blocksize * num_blocks; 64.120 + inode_size = (unsigned long long)fs->blocksize * 64.121 + (jparams->num_journal_blocks + jparams->num_fc_blocks); 64.122 inode.i_mtime = inode.i_ctime = fs->now ? fs->now : time(0); 64.123 inode.i_links_count = 1; 64.124 inode.i_mode = LINUX_S_IFREG | 0600; 64.125 @@ -304,7 +320,8 @@ 64.126 goto out2; 64.127 64.128 retval = ext2fs_fallocate(fs, falloc_flags, journal_ino, 64.129 - &inode, goal, 0, num_blocks); 64.130 + &inode, goal, 0, 64.131 + jparams->num_journal_blocks + jparams->num_fc_blocks); 64.132 if (retval) 64.133 goto out2; 64.134 64.135 @@ -358,6 +375,43 @@ 64.136 return 262144; /* 1 GB */ 64.137 } 64.138 64.139 +errcode_t ext2fs_get_journal_params(struct ext2fs_journal_params *params, 64.140 + ext2_filsys fs) 64.141 +{ 64.142 + blk_t total_blks; 64.143 + int ret; 64.144 + 64.145 + memset(params, 0, sizeof(*params)); 64.146 + if (ext2fs_has_feature_journal_dev(fs->super)) { 64.147 + total_blks = ext2fs_blocks_count(fs->super); 64.148 + if (total_blks < JBD2_MIN_JOURNAL_BLOCKS) 64.149 + return EXT2_ET_JOURNAL_TOO_SMALL; 64.150 + 64.151 + if (!ext2fs_has_feature_fast_commit(fs->super)) { 64.152 + params->num_journal_blocks = total_blks; 64.153 + params->num_fc_blocks = 0; 64.154 + return 0; 64.155 + } 64.156 + params->num_journal_blocks = ext2fs_blocks_count(fs->super) * 64.157 + EXT2_JOURNAL_TO_FC_BLKS_RATIO / 64.158 + (EXT2_JOURNAL_TO_FC_BLKS_RATIO + 1); 64.159 + if (JBD2_MIN_JOURNAL_BLOCKS > params->num_journal_blocks) 64.160 + params->num_journal_blocks = JBD2_MIN_JOURNAL_BLOCKS; 64.161 + params->num_fc_blocks = total_blks - params->num_journal_blocks; 64.162 + return 0; 64.163 + } 64.164 + 64.165 + ret = ext2fs_default_journal_size(ext2fs_blocks_count(fs->super)); 64.166 + if (ret < 0) 64.167 + return EXT2_ET_JOURNAL_TOO_SMALL; 64.168 + 64.169 + params->num_journal_blocks = ret; 64.170 + if (ext2fs_has_feature_fast_commit(fs->super)) 64.171 + params->num_fc_blocks = params->num_journal_blocks / 64.172 + EXT2_JOURNAL_TO_FC_BLKS_RATIO; 64.173 + return 0; 64.174 +} 64.175 + 64.176 int ext2fs_journal_sb_start(int blocksize) 64.177 { 64.178 if (blocksize == EXT2_MIN_BLOCK_SIZE) 64.179 @@ -392,8 +446,8 @@ 64.180 return retval; 64.181 64.182 jsb = (journal_superblock_t *) buf; 64.183 - if ((jsb->s_header.h_magic != (unsigned) ntohl(JFS_MAGIC_NUMBER)) || 64.184 - (jsb->s_header.h_blocktype != (unsigned) ntohl(JFS_SUPERBLOCK_V2))) 64.185 + if ((jsb->s_header.h_magic != (unsigned) ntohl(JBD2_MAGIC_NUMBER)) || 64.186 + (jsb->s_header.h_blocktype != (unsigned) ntohl(JBD2_SUPERBLOCK_V2))) 64.187 return EXT2_ET_NO_JOURNAL_SB; 64.188 64.189 if (ntohl(jsb->s_blocksize) != (unsigned long) fs->blocksize) 64.190 @@ -401,7 +455,7 @@ 64.191 64.192 /* Check and see if this filesystem has already been added */ 64.193 nr_users = ntohl(jsb->s_nr_users); 64.194 - if (nr_users > JFS_USERS_MAX) 64.195 + if (nr_users > JBD2_USERS_MAX) 64.196 return EXT2_ET_CORRUPT_JOURNAL_SB; 64.197 for (i=0; i < nr_users; i++) { 64.198 if (memcmp(fs->super->s_uuid, 64.199 @@ -434,7 +488,7 @@ 64.200 * POSIX routines if the filesystem is mounted, or using direct I/O 64.201 * functions if it is not. 64.202 */ 64.203 -errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks, 64.204 +errcode_t ext2fs_add_journal_inode3(ext2_filsys fs, struct ext2fs_journal_params *jparams, 64.205 blk64_t goal, int flags) 64.206 { 64.207 errcode_t retval; 64.208 @@ -470,7 +524,7 @@ 64.209 retval = ioctl(fd, EXT2_IOC_SETFLAGS, &f); 64.210 close(fd); 64.211 if (retval) 64.212 - return retval; 64.213 + return errno; 64.214 } 64.215 #endif 64.216 #endif 64.217 @@ -486,7 +540,7 @@ 64.218 * filesystems is extremely rare these days... Ignore it. */ 64.219 flags &= ~EXT2_MKJOURNAL_LAZYINIT; 64.220 64.221 - if ((retval = write_journal_file(fs, jfile, num_blocks, flags))) 64.222 + if ((retval = write_journal_file(fs, jfile, jparams, flags))) 64.223 goto errout; 64.224 64.225 /* Get inode number of the journal file */ 64.226 @@ -528,7 +582,7 @@ 64.227 } 64.228 journal_ino = EXT2_JOURNAL_INO; 64.229 if ((retval = write_journal_inode(fs, journal_ino, 64.230 - num_blocks, goal, flags))) 64.231 + jparams, goal, flags))) 64.232 return retval; 64.233 } 64.234 64.235 @@ -546,6 +600,18 @@ 64.236 return retval; 64.237 } 64.238 64.239 +errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks, 64.240 + blk64_t goal, int flags) 64.241 +{ 64.242 + struct ext2fs_journal_params jparams; 64.243 + errcode_t ret; 64.244 + 64.245 + jparams.num_journal_blocks = num_blocks; 64.246 + jparams.num_fc_blocks = 0; 64.247 + 64.248 + return ext2fs_add_journal_inode3(fs, &jparams, goal, flags); 64.249 +} 64.250 + 64.251 errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags) 64.252 { 64.253 return ext2fs_add_journal_inode2(fs, num_blocks, ~0ULL, flags); 64.254 @@ -572,7 +638,7 @@ 64.255 exit(1); 64.256 } 64.257 64.258 - retval = ext2fs_add_journal_inode(fs, JFS_MIN_JOURNAL_BLOCKS, 0); 64.259 + retval = ext2fs_add_journal_inode(fs, JBD2_MIN_JOURNAL_BLOCKS, 0); 64.260 if (retval) { 64.261 com_err(argv[0], retval, "while adding journal to %s", 64.262 device_name);
65.1 --- a/libext2fs/lib/libext2fs/mmp.c Sat Oct 02 23:57:02 2021 +0200 65.2 +++ b/libext2fs/lib/libext2fs/mmp.c Sat Oct 09 23:28:01 2021 +0200 65.3 @@ -57,7 +57,20 @@ 65.4 * regardless of how the io_manager is doing reads, to avoid caching of 65.5 * the MMP block by the io_manager or the VM. It needs to be fresh. */ 65.6 if (fs->mmp_fd <= 0) { 65.7 - fs->mmp_fd = open(fs->device_name, O_RDWR | O_DIRECT); 65.8 + struct stat st; 65.9 + int flags = O_RDWR | O_DIRECT; 65.10 + 65.11 + /* 65.12 + * There is no reason for using O_DIRECT if we're working with 65.13 + * regular file. Disabling it also avoids problems with 65.14 + * alignment when the device of the host file system has sector 65.15 + * size larger than blocksize of the fs we're working with. 65.16 + */ 65.17 + if (stat(fs->device_name, &st) == 0 && 65.18 + S_ISREG(st.st_mode)) 65.19 + flags &= ~O_DIRECT; 65.20 + 65.21 + fs->mmp_fd = open(fs->device_name, flags); 65.22 if (fs->mmp_fd < 0) { 65.23 retval = EXT2_ET_MMP_OPEN_DIRECT; 65.24 goto out; 65.25 @@ -159,9 +172,11 @@ 65.26 #ifdef CONFIG_MMP 65.27 unsigned new_seq; 65.28 struct timeval tv; 65.29 + unsigned long pid = getpid(); 65.30 65.31 gettimeofday(&tv, 0); 65.32 - srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); 65.33 + pid = (pid >> 16) | ((pid & 0xFFFF) << 16); 65.34 + srand(pid ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); 65.35 65.36 gettimeofday(&tv, 0); 65.37 /* Crank the random number generator a few times */ 65.38 @@ -197,11 +212,11 @@ 65.39 mmp_s->mmp_seq = EXT4_MMP_SEQ_CLEAN; 65.40 mmp_s->mmp_time = 0; 65.41 #ifdef HAVE_GETHOSTNAME 65.42 - gethostname(mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename)); 65.43 + gethostname((char *) mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename)); 65.44 #else 65.45 mmp_s->mmp_nodename[0] = '\0'; 65.46 #endif 65.47 - strncpy(mmp_s->mmp_bdevname, fs->device_name, 65.48 + strncpy((char *) mmp_s->mmp_bdevname, fs->device_name, 65.49 sizeof(mmp_s->mmp_bdevname)); 65.50 65.51 mmp_s->mmp_check_interval = fs->super->s_mmp_update_interval; 65.52 @@ -339,11 +354,11 @@ 65.53 65.54 mmp_s->mmp_seq = seq = ext2fs_mmp_new_seq(); 65.55 #ifdef HAVE_GETHOSTNAME 65.56 - gethostname(mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename)); 65.57 + gethostname((char *) mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename)); 65.58 #else 65.59 strcpy(mmp_s->mmp_nodename, "unknown host"); 65.60 #endif 65.61 - strncpy(mmp_s->mmp_bdevname, fs->device_name, 65.62 + strncpy((char *) mmp_s->mmp_bdevname, fs->device_name, 65.63 sizeof(mmp_s->mmp_bdevname)); 65.64 65.65 retval = ext2fs_mmp_write(fs, fs->super->s_mmp_block, fs->mmp_buf); 65.66 @@ -388,7 +403,8 @@ 65.67 errcode_t retval = 0; 65.68 65.69 if (!ext2fs_has_feature_mmp(fs->super) || 65.70 - !(fs->flags & EXT2_FLAG_RW) || (fs->flags & EXT2_FLAG_SKIP_MMP)) 65.71 + !(fs->flags & EXT2_FLAG_RW) || (fs->flags & EXT2_FLAG_SKIP_MMP) || 65.72 + (fs->mmp_buf == NULL) || (fs->mmp_cmp == NULL)) 65.73 goto mmp_error; 65.74 65.75 retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
66.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 66.2 +++ b/libext2fs/lib/libext2fs/nls_utf8.c Sat Oct 09 23:28:01 2021 +0200 66.3 @@ -0,0 +1,1000 @@ 66.4 +/* 66.5 + * Copyright (c) 2014 SGI. 66.6 + * Copyright (c) 2018 Collabora Ltd. 66.7 + * All rights reserved. 66.8 + * 66.9 + * This program is free software; you can redistribute it and/or 66.10 + * modify it under the terms of the GNU General Public License as 66.11 + * published by the Free Software Foundation. 66.12 + * 66.13 + * This program is distributed in the hope that it would be useful, 66.14 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 66.15 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 66.16 + * GNU General Public License for more details. 66.17 + * 66.18 + */ 66.19 + 66.20 +/* 66.21 + * This code is adapted from the Linux Kernel. We have a 66.22 + * userspace version here such that the hashes will match that 66.23 + * implementation. 66.24 + */ 66.25 + 66.26 +#include "config.h" 66.27 +#include <stdint.h> 66.28 +#include <unistd.h> 66.29 +#include <string.h> 66.30 +#include <limits.h> 66.31 +#include <errno.h> 66.32 + 66.33 +#include "ext2_fs.h" 66.34 +#include "ext2fs.h" 66.35 +#include "ext2fsP.h" 66.36 + 66.37 +/* Encoding a unicode version number as a single unsigned int. */ 66.38 +#define UNICODE_MAJ_SHIFT (16) 66.39 +#define UNICODE_MIN_SHIFT (8) 66.40 + 66.41 +#define UNICODE_AGE(MAJ, MIN, REV) \ 66.42 + (((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) | \ 66.43 + ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) | \ 66.44 + ((unsigned int)(REV))) 66.45 + 66.46 +/* Needed in struct utf8cursor below. */ 66.47 +#define UTF8HANGULLEAF (12) 66.48 + 66.49 +/* 66.50 + * Cursor structure used by the normalizer. 66.51 + */ 66.52 +struct utf8cursor { 66.53 + const struct utf8data *data; 66.54 + const char *s; 66.55 + const char *p; 66.56 + const char *ss; 66.57 + const char *sp; 66.58 + unsigned int len; 66.59 + unsigned int slen; 66.60 + short int ccc; 66.61 + short int nccc; 66.62 + unsigned char hangul[UTF8HANGULLEAF]; 66.63 +}; 66.64 + 66.65 +/* 66.66 + * Initialize a utf8cursor to normalize a string. 66.67 + * Returns 0 on success. 66.68 + * Returns -1 on failure. 66.69 + */ 66.70 +// extern int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data, 66.71 +// const char *s); 66.72 +// extern int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data, 66.73 +// const char *s, size_t len); 66.74 + 66.75 +/* 66.76 + * Get the next byte in the normalization. 66.77 + * Returns a value > 0 && < 256 on success. 66.78 + * Returns 0 when the end of the normalization is reached. 66.79 + * Returns -1 if the string being normalized is not valid UTF-8. 66.80 + */ 66.81 +// extern int utf8byte(struct utf8cursor *u8c); 66.82 + 66.83 + 66.84 +struct utf8data { 66.85 + unsigned int maxage; 66.86 + unsigned int offset; 66.87 +}; 66.88 + 66.89 +#define __INCLUDED_FROM_UTF8NORM_C__ 66.90 +#include "utf8data.h" 66.91 +#undef __INCLUDED_FROM_UTF8NORM_C__ 66.92 + 66.93 +#define ARRAY_SIZE(array) \ 66.94 + (sizeof(array) / sizeof(array[0])) 66.95 + 66.96 +#if 0 66.97 +/* Highest unicode version supported by the data tables. */ 66.98 +static int utf8version_is_supported(uint8_t maj, uint8_t min, uint8_t rev) 66.99 +{ 66.100 + int i = ARRAY_SIZE(utf8agetab) - 1; 66.101 + unsigned int sb_utf8version = UNICODE_AGE(maj, min, rev); 66.102 + 66.103 + while (i >= 0 && utf8agetab[i] != 0) { 66.104 + if (sb_utf8version == utf8agetab[i]) 66.105 + return 1; 66.106 + i--; 66.107 + } 66.108 + return 0; 66.109 +} 66.110 +#endif 66.111 + 66.112 +#if 0 66.113 +static int utf8version_latest(void) 66.114 +{ 66.115 + return utf8vers; 66.116 +} 66.117 +#endif 66.118 + 66.119 +/* 66.120 + * UTF-8 valid ranges. 66.121 + * 66.122 + * The UTF-8 encoding spreads the bits of a 32bit word over several 66.123 + * bytes. This table gives the ranges that can be held and how they'd 66.124 + * be represented. 66.125 + * 66.126 + * 0x00000000 0x0000007F: 0xxxxxxx 66.127 + * 0x00000000 0x000007FF: 110xxxxx 10xxxxxx 66.128 + * 0x00000000 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 66.129 + * 0x00000000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 66.130 + * 0x00000000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 66.131 + * 0x00000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 66.132 + * 66.133 + * There is an additional requirement on UTF-8, in that only the 66.134 + * shortest representation of a 32bit value is to be used. A decoder 66.135 + * must not decode sequences that do not satisfy this requirement. 66.136 + * Thus the allowed ranges have a lower bound. 66.137 + * 66.138 + * 0x00000000 0x0000007F: 0xxxxxxx 66.139 + * 0x00000080 0x000007FF: 110xxxxx 10xxxxxx 66.140 + * 0x00000800 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 66.141 + * 0x00010000 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 66.142 + * 0x00200000 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 66.143 + * 0x04000000 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 66.144 + * 66.145 + * Actual unicode characters are limited to the range 0x0 - 0x10FFFF, 66.146 + * 17 planes of 65536 values. This limits the sequences actually seen 66.147 + * even more, to just the following. 66.148 + * 66.149 + * 0 - 0x7F: 0 - 0x7F 66.150 + * 0x80 - 0x7FF: 0xC2 0x80 - 0xDF 0xBF 66.151 + * 0x800 - 0xFFFF: 0xE0 0xA0 0x80 - 0xEF 0xBF 0xBF 66.152 + * 0x10000 - 0x10FFFF: 0xF0 0x90 0x80 0x80 - 0xF4 0x8F 0xBF 0xBF 66.153 + * 66.154 + * Within those ranges the surrogates 0xD800 - 0xDFFF are not allowed. 66.155 + * 66.156 + * Note that the longest sequence seen with valid usage is 4 bytes, 66.157 + * the same a single UTF-32 character. This makes the UTF-8 66.158 + * representation of Unicode strictly smaller than UTF-32. 66.159 + * 66.160 + * The shortest sequence requirement was introduced by: 66.161 + * Corrigendum #1: UTF-8 Shortest Form 66.162 + * It can be found here: 66.163 + * http://www.unicode.org/versions/corrigendum1.html 66.164 + * 66.165 + */ 66.166 + 66.167 +/* 66.168 + * Return the number of bytes used by the current UTF-8 sequence. 66.169 + * Assumes the input points to the first byte of a valid UTF-8 66.170 + * sequence. 66.171 + */ 66.172 +static inline int utf8clen(const char *s) 66.173 +{ 66.174 + unsigned char c = *s; 66.175 + 66.176 + return 1 + (c >= 0xC0) + (c >= 0xE0) + (c >= 0xF0); 66.177 +} 66.178 + 66.179 +/* 66.180 + * Decode a 3-byte UTF-8 sequence. 66.181 + */ 66.182 +static unsigned int 66.183 +utf8decode3(const char *str) 66.184 +{ 66.185 + unsigned int uc; 66.186 + 66.187 + uc = *str++ & 0x0F; 66.188 + uc <<= 6; 66.189 + uc |= *str++ & 0x3F; 66.190 + uc <<= 6; 66.191 + uc |= *str++ & 0x3F; 66.192 + 66.193 + return uc; 66.194 +} 66.195 + 66.196 +/* 66.197 + * Encode a 3-byte UTF-8 sequence. 66.198 + */ 66.199 +static int 66.200 +utf8encode3(char *str, unsigned int val) 66.201 +{ 66.202 + str[2] = (val & 0x3F) | 0x80; 66.203 + val >>= 6; 66.204 + str[1] = (val & 0x3F) | 0x80; 66.205 + val >>= 6; 66.206 + str[0] = val | 0xE0; 66.207 + 66.208 + return 3; 66.209 +} 66.210 + 66.211 +/* 66.212 + * utf8trie_t 66.213 + * 66.214 + * A compact binary tree, used to decode UTF-8 characters. 66.215 + * 66.216 + * Internal nodes are one byte for the node itself, and up to three 66.217 + * bytes for an offset into the tree. The first byte contains the 66.218 + * following information: 66.219 + * NEXTBYTE - flag - advance to next byte if set 66.220 + * BITNUM - 3 bit field - the bit number to tested 66.221 + * OFFLEN - 2 bit field - number of bytes in the offset 66.222 + * if offlen == 0 (non-branching node) 66.223 + * RIGHTPATH - 1 bit field - set if the following node is for the 66.224 + * right-hand path (tested bit is set) 66.225 + * TRIENODE - 1 bit field - set if the following node is an internal 66.226 + * node, otherwise it is a leaf node 66.227 + * if offlen != 0 (branching node) 66.228 + * LEFTNODE - 1 bit field - set if the left-hand node is internal 66.229 + * RIGHTNODE - 1 bit field - set if the right-hand node is internal 66.230 + * 66.231 + * Due to the way utf8 works, there cannot be branching nodes with 66.232 + * NEXTBYTE set, and moreover those nodes always have a righthand 66.233 + * descendant. 66.234 + */ 66.235 +typedef const unsigned char utf8trie_t; 66.236 +#define BITNUM 0x07 66.237 +#define NEXTBYTE 0x08 66.238 +#define OFFLEN 0x30 66.239 +#define OFFLEN_SHIFT 4 66.240 +#define RIGHTPATH 0x40 66.241 +#define TRIENODE 0x80 66.242 +#define RIGHTNODE 0x40 66.243 +#define LEFTNODE 0x80 66.244 + 66.245 +/* 66.246 + * utf8leaf_t 66.247 + * 66.248 + * The leaves of the trie are embedded in the trie, and so the same 66.249 + * underlying datatype: unsigned char. 66.250 + * 66.251 + * leaf[0]: The unicode version, stored as a generation number that is 66.252 + * an index into utf8agetab[]. With this we can filter code 66.253 + * points based on the unicode version in which they were 66.254 + * defined. The CCC of a non-defined code point is 0. 66.255 + * leaf[1]: Canonical Combining Class. During normalization, we need 66.256 + * to do a stable sort into ascending order of all characters 66.257 + * with a non-zero CCC that occur between two characters with 66.258 + * a CCC of 0, or at the begin or end of a string. 66.259 + * The unicode standard guarantees that all CCC values are 66.260 + * between 0 and 254 inclusive, which leaves 255 available as 66.261 + * a special value. 66.262 + * Code points with CCC 0 are known as stoppers. 66.263 + * leaf[2]: Decomposition. If leaf[1] == 255, then leaf[2] is the 66.264 + * start of a NUL-terminated string that is the decomposition 66.265 + * of the character. 66.266 + * The CCC of a decomposable character is the same as the CCC 66.267 + * of the first character of its decomposition. 66.268 + * Some characters decompose as the empty string: these are 66.269 + * characters with the Default_Ignorable_Code_Point property. 66.270 + * These do affect normalization, as they all have CCC 0. 66.271 + * 66.272 + * The decompositions in the trie have been fully expanded, with the 66.273 + * exception of Hangul syllables, which are decomposed algorithmically. 66.274 + * 66.275 + * Casefolding, if applicable, is also done using decompositions. 66.276 + * 66.277 + * The trie is constructed in such a way that leaves exist for all 66.278 + * UTF-8 sequences that match the criteria from the "UTF-8 valid 66.279 + * ranges" comment above, and only for those sequences. Therefore a 66.280 + * lookup in the trie can be used to validate the UTF-8 input. 66.281 + */ 66.282 +typedef const unsigned char utf8leaf_t; 66.283 + 66.284 +#define LEAF_GEN(LEAF) ((LEAF)[0]) 66.285 +#define LEAF_CCC(LEAF) ((LEAF)[1]) 66.286 +#define LEAF_STR(LEAF) ((const char *)((LEAF) + 2)) 66.287 + 66.288 +#define MINCCC (0) 66.289 +#define MAXCCC (254) 66.290 +#define STOPPER (0) 66.291 +#define DECOMPOSE (255) 66.292 + 66.293 +/* Marker for hangul syllable decomposition. */ 66.294 +#define HANGUL ((char)(255)) 66.295 +/* Size of the synthesized leaf used for Hangul syllable decomposition. */ 66.296 +#define UTF8HANGULLEAF (12) 66.297 + 66.298 +/* 66.299 + * Hangul decomposition (algorithm from Section 3.12 of Unicode 6.3.0) 66.300 + * 66.301 + * AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;; 66.302 + * D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;; 66.303 + * 66.304 + * SBase = 0xAC00 66.305 + * LBase = 0x1100 66.306 + * VBase = 0x1161 66.307 + * TBase = 0x11A7 66.308 + * LCount = 19 66.309 + * VCount = 21 66.310 + * TCount = 28 66.311 + * NCount = 588 (VCount * TCount) 66.312 + * SCount = 11172 (LCount * NCount) 66.313 + * 66.314 + * Decomposition: 66.315 + * SIndex = s - SBase 66.316 + * 66.317 + * LV (Canonical/Full) 66.318 + * LIndex = SIndex / NCount 66.319 + * VIndex = (Sindex % NCount) / TCount 66.320 + * LPart = LBase + LIndex 66.321 + * VPart = VBase + VIndex 66.322 + * 66.323 + * LVT (Canonical) 66.324 + * LVIndex = (SIndex / TCount) * TCount 66.325 + * TIndex = (Sindex % TCount) 66.326 + * LVPart = SBase + LVIndex 66.327 + * TPart = TBase + TIndex 66.328 + * 66.329 + * LVT (Full) 66.330 + * LIndex = SIndex / NCount 66.331 + * VIndex = (Sindex % NCount) / TCount 66.332 + * TIndex = (Sindex % TCount) 66.333 + * LPart = LBase + LIndex 66.334 + * VPart = VBase + VIndex 66.335 + * if (TIndex == 0) { 66.336 + * d = <LPart, VPart> 66.337 + * } else { 66.338 + * TPart = TBase + TIndex 66.339 + * d = <LPart, TPart, VPart> 66.340 + * } 66.341 + */ 66.342 + 66.343 +/* Constants */ 66.344 +#define SB (0xAC00) 66.345 +#define LB (0x1100) 66.346 +#define VB (0x1161) 66.347 +#define TB (0x11A7) 66.348 +#define LC (19) 66.349 +#define VC (21) 66.350 +#define TC (28) 66.351 +#define NC (VC * TC) 66.352 +#define SC (LC * NC) 66.353 + 66.354 +/* Algorithmic decomposition of hangul syllable. */ 66.355 +static utf8leaf_t * 66.356 +utf8hangul(const char *str, unsigned char *hangul) 66.357 +{ 66.358 + unsigned int si; 66.359 + unsigned int li; 66.360 + unsigned int vi; 66.361 + unsigned int ti; 66.362 + unsigned char *h; 66.363 + 66.364 + /* Calculate the SI, LI, VI, and TI values. */ 66.365 + si = utf8decode3(str) - SB; 66.366 + li = si / NC; 66.367 + vi = (si % NC) / TC; 66.368 + ti = si % TC; 66.369 + 66.370 + /* Fill in base of leaf. */ 66.371 + h = hangul; 66.372 + LEAF_GEN(h) = 2; 66.373 + LEAF_CCC(h) = DECOMPOSE; 66.374 + h += 2; 66.375 + 66.376 + /* Add LPart, a 3-byte UTF-8 sequence. */ 66.377 + h += utf8encode3((char *)h, li + LB); 66.378 + 66.379 + /* Add VPart, a 3-byte UTF-8 sequence. */ 66.380 + h += utf8encode3((char *)h, vi + VB); 66.381 + 66.382 + /* Add TPart if required, also a 3-byte UTF-8 sequence. */ 66.383 + if (ti) 66.384 + h += utf8encode3((char *)h, ti + TB); 66.385 + 66.386 + /* Terminate string. */ 66.387 + h[0] = '\0'; 66.388 + 66.389 + return hangul; 66.390 +} 66.391 + 66.392 +/* 66.393 + * Use trie to scan s, touching at most len bytes. 66.394 + * Returns the leaf if one exists, NULL otherwise. 66.395 + * 66.396 + * A non-NULL return guarantees that the UTF-8 sequence starting at s 66.397 + * is well-formed and corresponds to a known unicode code point. The 66.398 + * shorthand for this will be "is valid UTF-8 unicode". 66.399 + */ 66.400 +static utf8leaf_t *utf8nlookup(const struct utf8data *data, 66.401 + unsigned char *hangul, const char *s, size_t len) 66.402 +{ 66.403 + utf8trie_t *trie; 66.404 + int offlen; 66.405 + int offset; 66.406 + int mask; 66.407 + int node; 66.408 + 66.409 + if (!data) 66.410 + return NULL; 66.411 + if (len == 0) 66.412 + return NULL; 66.413 + 66.414 + trie = utf8data + data->offset; 66.415 + node = 1; 66.416 + while (node) { 66.417 + offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT; 66.418 + if (*trie & NEXTBYTE) { 66.419 + if (--len == 0) 66.420 + return NULL; 66.421 + s++; 66.422 + } 66.423 + mask = 1 << (*trie & BITNUM); 66.424 + if (*s & mask) { 66.425 + /* Right leg */ 66.426 + if (offlen) { 66.427 + /* Right node at offset of trie */ 66.428 + node = (*trie & RIGHTNODE); 66.429 + offset = trie[offlen]; 66.430 + while (--offlen) { 66.431 + offset <<= 8; 66.432 + offset |= trie[offlen]; 66.433 + } 66.434 + trie += offset; 66.435 + } else if (*trie & RIGHTPATH) { 66.436 + /* Right node after this node */ 66.437 + node = (*trie & TRIENODE); 66.438 + trie++; 66.439 + } else { 66.440 + /* No right node. */ 66.441 + return NULL; 66.442 + } 66.443 + } else { 66.444 + /* Left leg */ 66.445 + if (offlen) { 66.446 + /* Left node after this node. */ 66.447 + node = (*trie & LEFTNODE); 66.448 + trie += offlen + 1; 66.449 + } else if (*trie & RIGHTPATH) { 66.450 + /* No left node. */ 66.451 + return NULL; 66.452 + } else { 66.453 + /* Left node after this node */ 66.454 + node = (*trie & TRIENODE); 66.455 + trie++; 66.456 + } 66.457 + } 66.458 + } 66.459 + /* 66.460 + * Hangul decomposition is done algorithmically. These are the 66.461 + * codepoints >= 0xAC00 and <= 0xD7A3. Their UTF-8 encoding is 66.462 + * always 3 bytes long, so s has been advanced twice, and the 66.463 + * start of the sequence is at s-2. 66.464 + */ 66.465 + if (LEAF_CCC(trie) == DECOMPOSE && LEAF_STR(trie)[0] == HANGUL) 66.466 + trie = utf8hangul(s - 2, hangul); 66.467 + return trie; 66.468 +} 66.469 + 66.470 +/* 66.471 + * Use trie to scan s. 66.472 + * Returns the leaf if one exists, NULL otherwise. 66.473 + * 66.474 + * Forwards to utf8nlookup(). 66.475 + */ 66.476 +static utf8leaf_t *utf8lookup(const struct utf8data *data, 66.477 + unsigned char *hangul, const char *s) 66.478 +{ 66.479 + return utf8nlookup(data, hangul, s, (size_t)-1); 66.480 +} 66.481 + 66.482 +#if 0 66.483 +/* 66.484 + * Maximum age of any character in s. 66.485 + * Return -1 if s is not valid UTF-8 unicode. 66.486 + * Return 0 if only non-assigned code points are used. 66.487 + */ 66.488 +static int utf8agemax(const struct utf8data *data, const char *s) 66.489 +{ 66.490 + utf8leaf_t *leaf; 66.491 + int age = 0; 66.492 + int leaf_age; 66.493 + unsigned char hangul[UTF8HANGULLEAF]; 66.494 + 66.495 + if (!data) 66.496 + return -1; 66.497 + 66.498 + while (*s) { 66.499 + leaf = utf8lookup(data, hangul, s); 66.500 + if (!leaf) 66.501 + return -1; 66.502 + 66.503 + leaf_age = utf8agetab[LEAF_GEN(leaf)]; 66.504 + if (leaf_age <= data->maxage && leaf_age > age) 66.505 + age = leaf_age; 66.506 + s += utf8clen(s); 66.507 + } 66.508 + return age; 66.509 +} 66.510 +#endif 66.511 + 66.512 +#if 0 66.513 +/* 66.514 + * Minimum age of any character in s. 66.515 + * Return -1 if s is not valid UTF-8 unicode. 66.516 + * Return 0 if non-assigned code points are used. 66.517 + */ 66.518 +static int utf8agemin(const struct utf8data *data, const char *s) 66.519 +{ 66.520 + utf8leaf_t *leaf; 66.521 + int age; 66.522 + int leaf_age; 66.523 + unsigned char hangul[UTF8HANGULLEAF]; 66.524 + 66.525 + if (!data) 66.526 + return -1; 66.527 + age = data->maxage; 66.528 + while (*s) { 66.529 + leaf = utf8lookup(data, hangul, s); 66.530 + if (!leaf) 66.531 + return -1; 66.532 + leaf_age = utf8agetab[LEAF_GEN(leaf)]; 66.533 + if (leaf_age <= data->maxage && leaf_age < age) 66.534 + age = leaf_age; 66.535 + s += utf8clen(s); 66.536 + } 66.537 + return age; 66.538 +} 66.539 +#endif 66.540 + 66.541 +#if 0 66.542 +/* 66.543 + * Maximum age of any character in s, touch at most len bytes. 66.544 + * Return -1 if s is not valid UTF-8 unicode. 66.545 + */ 66.546 +static int utf8nagemax(const struct utf8data *data, const char *s, size_t len) 66.547 +{ 66.548 + utf8leaf_t *leaf; 66.549 + int age = 0; 66.550 + int leaf_age; 66.551 + unsigned char hangul[UTF8HANGULLEAF]; 66.552 + 66.553 + if (!data) 66.554 + return -1; 66.555 + 66.556 + while (len && *s) { 66.557 + leaf = utf8nlookup(data, hangul, s, len); 66.558 + if (!leaf) 66.559 + return -1; 66.560 + leaf_age = utf8agetab[LEAF_GEN(leaf)]; 66.561 + if (leaf_age <= data->maxage && leaf_age > age) 66.562 + age = leaf_age; 66.563 + len -= utf8clen(s); 66.564 + s += utf8clen(s); 66.565 + } 66.566 + return age; 66.567 +} 66.568 +#endif 66.569 + 66.570 +#if 0 66.571 +/* 66.572 + * Maximum age of any character in s, touch at most len bytes. 66.573 + * Return -1 if s is not valid UTF-8 unicode. 66.574 + */ 66.575 +static int utf8nagemin(const struct utf8data *data, const char *s, size_t len) 66.576 +{ 66.577 + utf8leaf_t *leaf; 66.578 + int leaf_age; 66.579 + int age; 66.580 + unsigned char hangul[UTF8HANGULLEAF]; 66.581 + 66.582 + if (!data) 66.583 + return -1; 66.584 + age = data->maxage; 66.585 + while (len && *s) { 66.586 + leaf = utf8nlookup(data, hangul, s, len); 66.587 + if (!leaf) 66.588 + return -1; 66.589 + leaf_age = utf8agetab[LEAF_GEN(leaf)]; 66.590 + if (leaf_age <= data->maxage && leaf_age < age) 66.591 + age = leaf_age; 66.592 + len -= utf8clen(s); 66.593 + s += utf8clen(s); 66.594 + } 66.595 + return age; 66.596 +} 66.597 +#endif 66.598 + 66.599 +#if 0 66.600 +/* 66.601 + * Length of the normalization of s. 66.602 + * Return -1 if s is not valid UTF-8 unicode. 66.603 + * 66.604 + * A string of Default_Ignorable_Code_Point has length 0. 66.605 + */ 66.606 +static ssize_t utf8len(const struct utf8data *data, const char *s) 66.607 +{ 66.608 + utf8leaf_t *leaf; 66.609 + size_t ret = 0; 66.610 + unsigned char hangul[UTF8HANGULLEAF]; 66.611 + 66.612 + if (!data) 66.613 + return -1; 66.614 + while (*s) { 66.615 + leaf = utf8lookup(data, hangul, s); 66.616 + if (!leaf) 66.617 + return -1; 66.618 + if (utf8agetab[LEAF_GEN(leaf)] > data->maxage) 66.619 + ret += utf8clen(s); 66.620 + else if (LEAF_CCC(leaf) == DECOMPOSE) 66.621 + ret += strlen(LEAF_STR(leaf)); 66.622 + else 66.623 + ret += utf8clen(s); 66.624 + s += utf8clen(s); 66.625 + } 66.626 + return ret; 66.627 +} 66.628 +#endif 66.629 + 66.630 +#if 0 66.631 +/* 66.632 + * Length of the normalization of s, touch at most len bytes. 66.633 + * Return -1 if s is not valid UTF-8 unicode. 66.634 + */ 66.635 +static ssize_t utf8nlen(const struct utf8data *data, const char *s, size_t len) 66.636 +{ 66.637 + utf8leaf_t *leaf; 66.638 + size_t ret = 0; 66.639 + unsigned char hangul[UTF8HANGULLEAF]; 66.640 + 66.641 + if (!data) 66.642 + return -1; 66.643 + while (len && *s) { 66.644 + leaf = utf8nlookup(data, hangul, s, len); 66.645 + if (!leaf) 66.646 + return -1; 66.647 + if (utf8agetab[LEAF_GEN(leaf)] > data->maxage) 66.648 + ret += utf8clen(s); 66.649 + else if (LEAF_CCC(leaf) == DECOMPOSE) 66.650 + ret += strlen(LEAF_STR(leaf)); 66.651 + else 66.652 + ret += utf8clen(s); 66.653 + len -= utf8clen(s); 66.654 + s += utf8clen(s); 66.655 + } 66.656 + return ret; 66.657 +} 66.658 +#endif 66.659 + 66.660 +/* 66.661 + * Set up an utf8cursor for use by utf8byte(). 66.662 + * 66.663 + * u8c : pointer to cursor. 66.664 + * data : const struct utf8data to use for normalization. 66.665 + * s : string. 66.666 + * len : length of s. 66.667 + * 66.668 + * Returns -1 on error, 0 on success. 66.669 + */ 66.670 +static int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data, 66.671 + const char *s, size_t len) 66.672 +{ 66.673 + if (!data) 66.674 + return -1; 66.675 + if (!s) 66.676 + return -1; 66.677 + u8c->data = data; 66.678 + u8c->s = s; 66.679 + u8c->p = NULL; 66.680 + u8c->ss = NULL; 66.681 + u8c->sp = NULL; 66.682 + u8c->len = len; 66.683 + u8c->slen = 0; 66.684 + u8c->ccc = STOPPER; 66.685 + u8c->nccc = STOPPER; 66.686 + /* Check we didn't clobber the maximum length. */ 66.687 + if (u8c->len != len) 66.688 + return -1; 66.689 + /* The first byte of s may not be an utf8 continuation. */ 66.690 + if (len > 0 && (*s & 0xC0) == 0x80) 66.691 + return -1; 66.692 + return 0; 66.693 +} 66.694 + 66.695 +#if 0 66.696 +/* 66.697 + * Set up an utf8cursor for use by utf8byte(). 66.698 + * 66.699 + * u8c : pointer to cursor. 66.700 + * data : const struct utf8data to use for normalization. 66.701 + * s : NUL-terminated string. 66.702 + * 66.703 + * Returns -1 on error, 0 on success. 66.704 + */ 66.705 +static int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data, 66.706 + const char *s) 66.707 +{ 66.708 + return utf8ncursor(u8c, data, s, (unsigned int)-1); 66.709 +} 66.710 +#endif 66.711 + 66.712 +/* 66.713 + * Get one byte from the normalized form of the string described by u8c. 66.714 + * 66.715 + * Returns the byte cast to an unsigned char on succes, and -1 on failure. 66.716 + * 66.717 + * The cursor keeps track of the location in the string in u8c->s. 66.718 + * When a character is decomposed, the current location is stored in 66.719 + * u8c->p, and u8c->s is set to the start of the decomposition. Note 66.720 + * that bytes from a decomposition do not count against u8c->len. 66.721 + * 66.722 + * Characters are emitted if they match the current CCC in u8c->ccc. 66.723 + * Hitting end-of-string while u8c->ccc == STOPPER means we're done, 66.724 + * and the function returns 0 in that case. 66.725 + * 66.726 + * Sorting by CCC is done by repeatedly scanning the string. The 66.727 + * values of u8c->s and u8c->p are stored in u8c->ss and u8c->sp at 66.728 + * the start of the scan. The first pass finds the lowest CCC to be 66.729 + * emitted and stores it in u8c->nccc, the second pass emits the 66.730 + * characters with this CCC and finds the next lowest CCC. This limits 66.731 + * the number of passes to 1 + the number of different CCCs in the 66.732 + * sequence being scanned. 66.733 + * 66.734 + * Therefore: 66.735 + * u8c->p != NULL -> a decomposition is being scanned. 66.736 + * u8c->ss != NULL -> this is a repeating scan. 66.737 + * u8c->ccc == -1 -> this is the first scan of a repeating scan. 66.738 + */ 66.739 +static int utf8byte(struct utf8cursor *u8c) 66.740 +{ 66.741 + utf8leaf_t *leaf; 66.742 + int ccc; 66.743 + 66.744 + for (;;) { 66.745 + /* Check for the end of a decomposed character. */ 66.746 + if (u8c->p && *u8c->s == '\0') { 66.747 + u8c->s = u8c->p; 66.748 + u8c->p = NULL; 66.749 + } 66.750 + 66.751 + /* Check for end-of-string. */ 66.752 + if (!u8c->p && (u8c->len == 0 || *u8c->s == '\0')) { 66.753 + /* There is no next byte. */ 66.754 + if (u8c->ccc == STOPPER) 66.755 + return 0; 66.756 + /* End-of-string during a scan counts as a stopper. */ 66.757 + ccc = STOPPER; 66.758 + goto ccc_mismatch; 66.759 + } else if ((*u8c->s & 0xC0) == 0x80) { 66.760 + /* This is a continuation of the current character. */ 66.761 + if (!u8c->p) 66.762 + u8c->len--; 66.763 + return (unsigned char)*u8c->s++; 66.764 + } 66.765 + 66.766 + /* Look up the data for the current character. */ 66.767 + if (u8c->p) { 66.768 + leaf = utf8lookup(u8c->data, u8c->hangul, u8c->s); 66.769 + } else { 66.770 + leaf = utf8nlookup(u8c->data, u8c->hangul, 66.771 + u8c->s, u8c->len); 66.772 + } 66.773 + 66.774 + /* No leaf found implies that the input is a binary blob. */ 66.775 + if (!leaf) 66.776 + return -1; 66.777 + 66.778 + ccc = LEAF_CCC(leaf); 66.779 + /* Characters that are too new have CCC 0. */ 66.780 + if (utf8agetab[LEAF_GEN(leaf)] > u8c->data->maxage) { 66.781 + ccc = STOPPER; 66.782 + } else if (ccc == DECOMPOSE) { 66.783 + u8c->len -= utf8clen(u8c->s); 66.784 + u8c->p = u8c->s + utf8clen(u8c->s); 66.785 + u8c->s = LEAF_STR(leaf); 66.786 + /* Empty decomposition implies CCC 0. */ 66.787 + if (*u8c->s == '\0') { 66.788 + if (u8c->ccc == STOPPER) 66.789 + continue; 66.790 + ccc = STOPPER; 66.791 + goto ccc_mismatch; 66.792 + } 66.793 + 66.794 + leaf = utf8lookup(u8c->data, u8c->hangul, u8c->s); 66.795 + if (!leaf) 66.796 + return -1; 66.797 + ccc = LEAF_CCC(leaf); 66.798 + } 66.799 + 66.800 + /* 66.801 + * If this is not a stopper, then see if it updates 66.802 + * the next canonical class to be emitted. 66.803 + */ 66.804 + if (ccc != STOPPER && u8c->ccc < ccc && ccc < u8c->nccc) 66.805 + u8c->nccc = ccc; 66.806 + 66.807 + /* 66.808 + * Return the current byte if this is the current 66.809 + * combining class. 66.810 + */ 66.811 + if (ccc == u8c->ccc) { 66.812 + if (!u8c->p) 66.813 + u8c->len--; 66.814 + return (unsigned char)*u8c->s++; 66.815 + } 66.816 + 66.817 + /* Current combining class mismatch. */ 66.818 +ccc_mismatch: 66.819 + if (u8c->nccc == STOPPER) { 66.820 + /* 66.821 + * Scan forward for the first canonical class 66.822 + * to be emitted. Save the position from 66.823 + * which to restart. 66.824 + */ 66.825 + u8c->ccc = MINCCC - 1; 66.826 + u8c->nccc = ccc; 66.827 + u8c->sp = u8c->p; 66.828 + u8c->ss = u8c->s; 66.829 + u8c->slen = u8c->len; 66.830 + if (!u8c->p) 66.831 + u8c->len -= utf8clen(u8c->s); 66.832 + u8c->s += utf8clen(u8c->s); 66.833 + } else if (ccc != STOPPER) { 66.834 + /* Not a stopper, and not the ccc we're emitting. */ 66.835 + if (!u8c->p) 66.836 + u8c->len -= utf8clen(u8c->s); 66.837 + u8c->s += utf8clen(u8c->s); 66.838 + } else if (u8c->nccc != MAXCCC + 1) { 66.839 + /* At a stopper, restart for next ccc. */ 66.840 + u8c->ccc = u8c->nccc; 66.841 + u8c->nccc = MAXCCC + 1; 66.842 + u8c->s = u8c->ss; 66.843 + u8c->p = u8c->sp; 66.844 + u8c->len = u8c->slen; 66.845 + } else { 66.846 + /* All done, proceed from here. */ 66.847 + u8c->ccc = STOPPER; 66.848 + u8c->nccc = STOPPER; 66.849 + u8c->sp = NULL; 66.850 + u8c->ss = NULL; 66.851 + u8c->slen = 0; 66.852 + } 66.853 + } 66.854 +} 66.855 + 66.856 +#if 0 66.857 +/* 66.858 + * Look for the correct const struct utf8data for a unicode version. 66.859 + * Returns NULL if the version requested is too new. 66.860 + * 66.861 + * Two normalization forms are supported: nfdi and nfdicf. 66.862 + * 66.863 + * nfdi: 66.864 + * - Apply unicode normalization form NFD. 66.865 + * - Remove any Default_Ignorable_Code_Point. 66.866 + * 66.867 + * nfdicf: 66.868 + * - Apply unicode normalization form NFD. 66.869 + * - Remove any Default_Ignorable_Code_Point. 66.870 + * - Apply a full casefold (C + F). 66.871 + */ 66.872 +static const struct utf8data *utf8nfdi(unsigned int maxage) 66.873 +{ 66.874 + int i = ARRAY_SIZE(utf8nfdidata) - 1; 66.875 + 66.876 + while (maxage < utf8nfdidata[i].maxage) 66.877 + i--; 66.878 + if (maxage > utf8nfdidata[i].maxage) 66.879 + return NULL; 66.880 + return &utf8nfdidata[i]; 66.881 +} 66.882 +#endif 66.883 + 66.884 +static const struct utf8data *utf8nfdicf(unsigned int maxage) 66.885 +{ 66.886 + int i = ARRAY_SIZE(utf8nfdicfdata) - 1; 66.887 + 66.888 + while (maxage < utf8nfdicfdata[i].maxage) 66.889 + i--; 66.890 + if (maxage > utf8nfdicfdata[i].maxage) 66.891 + return NULL; 66.892 + return &utf8nfdicfdata[i]; 66.893 +} 66.894 + 66.895 +static int utf8_casefold(const struct ext2fs_nls_table *table, 66.896 + const unsigned char *str, size_t len, 66.897 + unsigned char *dest, size_t dlen) 66.898 +{ 66.899 + const struct utf8data *data = utf8nfdicf(table->version); 66.900 + struct utf8cursor cur; 66.901 + size_t nlen = 0; 66.902 + 66.903 + if (utf8ncursor(&cur, data, (const char *) str, len) < 0) 66.904 + goto invalid_seq; 66.905 + 66.906 + for (nlen = 0; nlen < dlen; nlen++) { 66.907 + int c = utf8byte(&cur); 66.908 + 66.909 + dest[nlen] = c; 66.910 + if (!c) 66.911 + return nlen; 66.912 + if (c == -1) 66.913 + break; 66.914 + } 66.915 + 66.916 + return -ENAMETOOLONG; 66.917 + 66.918 +invalid_seq: 66.919 + if (dlen < len) 66.920 + return -ENAMETOOLONG; 66.921 + 66.922 + /* Signal invalid sequence */ 66.923 + return -EINVAL; 66.924 +} 66.925 + 66.926 +static int utf8_validate(const struct ext2fs_nls_table *table, 66.927 + char *s, size_t len, char **pos) 66.928 +{ 66.929 + const struct utf8data *data = utf8nfdicf(table->version); 66.930 + utf8leaf_t *leaf; 66.931 + unsigned char hangul[UTF8HANGULLEAF]; 66.932 + 66.933 + if (!data) 66.934 + return -1; 66.935 + while (len && *s) { 66.936 + leaf = utf8nlookup(data, hangul, s, len); 66.937 + if (!leaf) { 66.938 + *pos = s; 66.939 + return 1; 66.940 + } 66.941 + len -= utf8clen(s); 66.942 + s += utf8clen(s); 66.943 + } 66.944 + return 0; 66.945 +} 66.946 + 66.947 +static int utf8_casefold_cmp(const struct ext2fs_nls_table *table, 66.948 + const unsigned char *str1, size_t len1, 66.949 + const unsigned char *str2, size_t len2) 66.950 +{ 66.951 + const struct utf8data *data = utf8nfdicf(table->version); 66.952 + int c1, c2; 66.953 + struct utf8cursor cur1, cur2; 66.954 + 66.955 + if (utf8ncursor(&cur1, data, (const char *) str1, len1) < 0) 66.956 + return -1; 66.957 + if (utf8ncursor(&cur2, data, (const char *) str2, len2) < 0) 66.958 + return -1; 66.959 + 66.960 + do { 66.961 + c1 = utf8byte(&cur1); 66.962 + c2 = utf8byte(&cur2); 66.963 + 66.964 + if (c1 < 0 || c2 < 0) 66.965 + return -1; 66.966 + if (c1 != c2) 66.967 + return c1 - c2; 66.968 + } while (c1); 66.969 + 66.970 + return 0; 66.971 +} 66.972 + 66.973 +static const struct ext2fs_nls_ops utf8_ops = { 66.974 + .casefold = utf8_casefold, 66.975 + .validate = utf8_validate, 66.976 + .casefold_cmp = utf8_casefold_cmp, 66.977 +}; 66.978 + 66.979 +static const struct ext2fs_nls_table nls_utf8 = { 66.980 + .ops = &utf8_ops, 66.981 + .version = UNICODE_AGE(12, 1, 0), 66.982 +}; 66.983 + 66.984 +const struct ext2fs_nls_table *ext2fs_load_nls_table(int encoding) 66.985 +{ 66.986 + if (encoding == EXT4_ENC_UTF8_12_1) 66.987 + return &nls_utf8; 66.988 + 66.989 + return NULL; 66.990 +} 66.991 + 66.992 +int ext2fs_check_encoded_name(const struct ext2fs_nls_table *table, 66.993 + char *name, size_t len, char **pos) 66.994 +{ 66.995 + return table->ops->validate(table, name, len, pos); 66.996 +} 66.997 + 66.998 +int ext2fs_casefold_cmp(const struct ext2fs_nls_table *table, 66.999 + const unsigned char *str1, size_t len1, 66.1000 + const unsigned char *str2, size_t len2) 66.1001 +{ 66.1002 + return table->ops->casefold_cmp(table, str1, len1, str2, len2); 66.1003 +}
67.1 --- a/libext2fs/lib/libext2fs/openfs.c Sat Oct 02 23:57:02 2021 +0200 67.2 +++ b/libext2fs/lib/libext2fs/openfs.c Sat Oct 09 23:28:01 2021 +0200 67.3 @@ -29,7 +29,6 @@ 67.4 67.5 #include "ext2_fs.h" 67.6 67.7 - 67.8 #include "ext2fs.h" 67.9 #include "e2image.h" 67.10 67.11 @@ -135,6 +134,7 @@ 67.12 int j; 67.13 #endif 67.14 char *time_env; 67.15 + int csum_retries = 0; 67.16 67.17 EXT2_CHECK_MAGIC(manager, EXT2_ET_MAGIC_IO_MANAGER); 67.18 67.19 @@ -170,6 +170,8 @@ 67.20 io_flags |= IO_FLAG_EXCLUSIVE; 67.21 if (flags & EXT2_FLAG_DIRECT_IO) 67.22 io_flags |= IO_FLAG_DIRECT_IO; 67.23 + if (flags & EXT2_FLAG_THREADS) 67.24 + io_flags |= IO_FLAG_THREADS; 67.25 retval = manager->open(fs->device_name, io_flags, &fs->io); 67.26 if (retval) 67.27 goto cleanup; 67.28 @@ -222,6 +224,7 @@ 67.29 if (retval) 67.30 goto cleanup; 67.31 } 67.32 +retry: 67.33 retval = io_channel_read_blk(fs->io, superblock, -SUPERBLOCK_SIZE, 67.34 fs->super); 67.35 if (retval) 67.36 @@ -233,8 +236,11 @@ 67.37 retval = 0; 67.38 if (!ext2fs_verify_csum_type(fs, fs->super)) 67.39 retval = EXT2_ET_UNKNOWN_CSUM; 67.40 - if (!ext2fs_superblock_csum_verify(fs, fs->super)) 67.41 + if (!ext2fs_superblock_csum_verify(fs, fs->super)) { 67.42 + if (csum_retries++ < 3) 67.43 + goto retry; 67.44 retval = EXT2_ET_SB_CSUM_INVALID; 67.45 + } 67.46 } 67.47 67.48 #ifdef WORDS_BIGENDIAN 67.49 @@ -394,6 +400,8 @@ 67.50 } 67.51 fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, 67.52 EXT2_DESC_PER_BLOCK(fs->super)); 67.53 + if (flags & EXT2_FLAG_SUPER_ONLY) 67.54 + goto skip_read_bg; 67.55 retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize, 67.56 &fs->group_desc); 67.57 if (retval) 67.58 @@ -434,7 +442,8 @@ 67.59 gdp = (struct ext2_group_desc *) dest; 67.60 for (j=0; j < groups_per_block*first_meta_bg; j++) { 67.61 gdp = ext2fs_group_desc(fs, fs->group_desc, j); 67.62 - ext2fs_swap_group_desc2(fs, gdp); 67.63 + if (gdp) 67.64 + ext2fs_swap_group_desc2(fs, gdp); 67.65 } 67.66 #endif 67.67 dest += fs->blocksize*first_meta_bg; 67.68 @@ -454,7 +463,8 @@ 67.69 for (j=0; j < groups_per_block; j++) { 67.70 gdp = ext2fs_group_desc(fs, fs->group_desc, 67.71 i * groups_per_block + j); 67.72 - ext2fs_swap_group_desc2(fs, gdp); 67.73 + if (gdp) 67.74 + ext2fs_swap_group_desc2(fs, gdp); 67.75 } 67.76 #endif 67.77 dest += fs->blocksize; 67.78 @@ -480,7 +490,7 @@ 67.79 if (fs->flags & EXT2_FLAG_RW) 67.80 ext2fs_mark_super_dirty(fs); 67.81 } 67.82 - 67.83 +skip_read_bg: 67.84 if (ext2fs_has_feature_mmp(fs->super) && 67.85 !(flags & EXT2_FLAG_SKIP_MMP) && 67.86 (flags & (EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE))) { 67.87 @@ -502,6 +512,9 @@ 67.88 ext2fs_set_feature_shared_blocks(fs->super); 67.89 } 67.90 67.91 + if (ext2fs_has_feature_casefold(fs->super)) 67.92 + fs->encoding = ext2fs_load_nls_table(fs->super->s_encoding); 67.93 + 67.94 fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR; 67.95 *ret_fs = fs; 67.96
68.1 --- a/libext2fs/lib/libext2fs/progress.c Sat Oct 02 23:57:02 2021 +0200 68.2 +++ b/libext2fs/lib/libext2fs/progress.c Sat Oct 09 23:28:01 2021 +0200 68.3 @@ -85,8 +85,8 @@ 68.4 return; 68.5 last_update = now; 68.6 68.7 - printf("%*llu/%*llu", progress->log_max, val, 68.8 - progress->log_max, progress->max); 68.9 + printf("%*llu/%*llu", progress->log_max, (unsigned long long) val, 68.10 + progress->log_max, (unsigned long long) progress->max); 68.11 fprintf(stdout, "%.*s", (2*progress->log_max)+1, backspaces); 68.12 } 68.13
69.1 --- a/libext2fs/lib/libext2fs/punch.c Sat Oct 02 23:57:02 2021 +0200 69.2 +++ b/libext2fs/lib/libext2fs/punch.c Sat Oct 09 23:28:01 2021 +0200 69.3 @@ -502,8 +502,8 @@ 69.4 return retval; 69.5 69.6 #ifdef PUNCH_DEBUG 69.7 - printf("%u: write inode size now %u blocks %u\n", 69.8 - ino, inode->i_size, inode->i_blocks); 69.9 + printf("%u: write inode size now %lu blocks %u\n", 69.10 + ino, EXT2_I_SIZE(inode), inode->i_blocks); 69.11 #endif 69.12 return ext2fs_write_inode(fs, ino, inode); 69.13 }
70.1 --- a/libext2fs/lib/libext2fs/rbtree.h Sat Oct 02 23:57:02 2021 +0200 70.2 +++ b/libext2fs/lib/libext2fs/rbtree.h Sat Oct 09 23:28:01 2021 +0200 70.3 @@ -96,17 +96,7 @@ 70.4 70.5 #include <stdlib.h> 70.6 #include <stdint.h> 70.7 - 70.8 -#undef offsetof 70.9 -#ifdef __compiler_offsetof 70.10 -#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER) 70.11 -#else 70.12 -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 70.13 -#endif 70.14 - 70.15 -#define container_of(ptr, type, member) ({ \ 70.16 - const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \ 70.17 - (type *)( (char *)__mptr - offsetof(type,member) );}) 70.18 +#include "compiler.h" 70.19 70.20 struct rb_node 70.21 {
71.1 --- a/libext2fs/lib/libext2fs/read_bb_file.c Sat Oct 02 23:57:02 2021 +0200 71.2 +++ b/libext2fs/lib/libext2fs/read_bb_file.c Sat Oct 09 23:28:01 2021 +0200 71.3 @@ -39,7 +39,7 @@ 71.4 void *priv_data)) 71.5 { 71.6 errcode_t retval; 71.7 - blk64_t blockno; 71.8 + unsigned long long blockno; 71.9 int count; 71.10 char buf[128]; 71.11 71.12 @@ -65,10 +65,10 @@ 71.13 ((blockno < fs->super->s_first_data_block) || 71.14 (blockno >= ext2fs_blocks_count(fs->super)))) { 71.15 if (invalid) 71.16 - (invalid)(fs, blockno, buf, priv_data); 71.17 + (invalid)(fs, (blk64_t) blockno, buf, priv_data); 71.18 continue; 71.19 } 71.20 - retval = ext2fs_badblocks_list_add(*bb_list, blockno); 71.21 + retval = ext2fs_badblocks_list_add(*bb_list, (blk64_t) blockno); 71.22 if (retval) 71.23 return retval; 71.24 }
72.1 --- a/libext2fs/lib/libext2fs/res_gdt.c Sat Oct 02 23:57:02 2021 +0200 72.2 +++ b/libext2fs/lib/libext2fs/res_gdt.c Sat Oct 09 23:28:01 2021 +0200 72.3 @@ -223,8 +223,8 @@ 72.4 } 72.5 out_inode: 72.6 #ifdef RES_GDT_DEBUG 72.7 - printf("inode.i_blocks = %u, i_size = %u\n", inode.i_blocks, 72.8 - inode.i_size); 72.9 + printf("inode.i_blocks = %u, i_size = %lu\n", inode.i_blocks, 72.10 + EXT2_I_SIZE(&inode)); 72.11 #endif 72.12 if (inode_dirty) { 72.13 inode.i_atime = inode.i_mtime = fs->now ? fs->now : time(0);
73.1 --- a/libext2fs/lib/libext2fs/rw_bitmaps.c Sat Oct 02 23:57:02 2021 +0200 73.2 +++ b/libext2fs/lib/libext2fs/rw_bitmaps.c Sat Oct 09 23:28:01 2021 +0200 73.3 @@ -23,11 +23,33 @@ 73.4 #ifdef HAVE_SYS_TYPES_H 73.5 #include <sys/types.h> 73.6 #endif 73.7 +#ifdef HAVE_PTHREAD_H 73.8 +#include <pthread.h> 73.9 +#endif 73.10 73.11 #include "ext2_fs.h" 73.12 #include "ext2fs.h" 73.13 #include "e2image.h" 73.14 73.15 +#ifdef HAVE_PTHREAD 73.16 +typedef pthread_mutex_t mutex_t; 73.17 + 73.18 +static void unix_pthread_mutex_lock(mutex_t *mutex) 73.19 +{ 73.20 + if (mutex) 73.21 + pthread_mutex_lock(mutex); 73.22 +} 73.23 +static void unix_pthread_mutex_unlock(mutex_t *mutex) 73.24 +{ 73.25 + if (mutex) 73.26 + pthread_mutex_unlock(mutex); 73.27 +} 73.28 +#else 73.29 +typedef int mutex_t; 73.30 +#define unix_pthread_mutex_lock(mutex_t) do {} while (0) 73.31 +#define unix_pthread_mutex_unlock(mutex_t) do {} while (0) 73.32 +#endif 73.33 + 73.34 static errcode_t write_bitmaps(ext2_filsys fs, int do_inode, int do_block) 73.35 { 73.36 dgrp_t i; 73.37 @@ -195,12 +217,78 @@ 73.38 return 0; 73.39 } 73.40 73.41 -static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block) 73.42 +static int bitmap_tail_verify(unsigned char *bitmap, int first, int last) 73.43 +{ 73.44 + int i; 73.45 + 73.46 + for (i = first; i <= last; i++) 73.47 + if (bitmap[i] != 0xff) 73.48 + return 0; 73.49 + return 1; 73.50 +} 73.51 + 73.52 +static errcode_t read_bitmaps_range_prepare(ext2_filsys fs, int flags) 73.53 +{ 73.54 + errcode_t retval; 73.55 + int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8; 73.56 + int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8; 73.57 + char *buf; 73.58 + 73.59 + EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 73.60 + 73.61 + if ((block_nbytes > (int) fs->blocksize) || 73.62 + (inode_nbytes > (int) fs->blocksize)) 73.63 + return EXT2_ET_CORRUPT_SUPERBLOCK; 73.64 + 73.65 + fs->write_bitmaps = ext2fs_write_bitmaps; 73.66 + 73.67 + retval = ext2fs_get_mem(strlen(fs->device_name) + 80, &buf); 73.68 + if (retval) 73.69 + return retval; 73.70 + 73.71 + if (flags & EXT2FS_BITMAPS_BLOCK) { 73.72 + if (fs->block_map) 73.73 + ext2fs_free_block_bitmap(fs->block_map); 73.74 + strcpy(buf, "block bitmap for "); 73.75 + strcat(buf, fs->device_name); 73.76 + retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map); 73.77 + if (retval) 73.78 + goto cleanup; 73.79 + } 73.80 + 73.81 + if (flags & EXT2FS_BITMAPS_INODE) { 73.82 + if (fs->inode_map) 73.83 + ext2fs_free_inode_bitmap(fs->inode_map); 73.84 + strcpy(buf, "inode bitmap for "); 73.85 + strcat(buf, fs->device_name); 73.86 + retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map); 73.87 + if (retval) 73.88 + goto cleanup; 73.89 + } 73.90 + ext2fs_free_mem(&buf); 73.91 + return retval; 73.92 + 73.93 +cleanup: 73.94 + if (flags & EXT2FS_BITMAPS_BLOCK) { 73.95 + ext2fs_free_block_bitmap(fs->block_map); 73.96 + fs->block_map = 0; 73.97 + } 73.98 + if (flags & EXT2FS_BITMAPS_INODE) { 73.99 + ext2fs_free_inode_bitmap(fs->inode_map); 73.100 + fs->inode_map = 0; 73.101 + } 73.102 + ext2fs_free_mem(&buf); 73.103 + return retval; 73.104 +} 73.105 + 73.106 +static errcode_t read_bitmaps_range_start(ext2_filsys fs, int flags, 73.107 + dgrp_t start, dgrp_t end, 73.108 + mutex_t *mutex, 73.109 + int *tail_flags) 73.110 { 73.111 dgrp_t i; 73.112 char *block_bitmap = 0, *inode_bitmap = 0; 73.113 - char *buf; 73.114 - errcode_t retval; 73.115 + errcode_t retval = 0; 73.116 int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8; 73.117 int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8; 73.118 int csum_flag; 73.119 @@ -211,47 +299,25 @@ 73.120 ext2_ino_t ino_itr = 1; 73.121 ext2_ino_t ino_cnt; 73.122 73.123 - EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 73.124 - 73.125 - if ((block_nbytes > (int) fs->blocksize) || 73.126 - (inode_nbytes > (int) fs->blocksize)) 73.127 - return EXT2_ET_CORRUPT_SUPERBLOCK; 73.128 - 73.129 - fs->write_bitmaps = ext2fs_write_bitmaps; 73.130 - 73.131 csum_flag = ext2fs_has_group_desc_csum(fs); 73.132 73.133 - retval = ext2fs_get_mem(strlen(fs->device_name) + 80, &buf); 73.134 - if (retval) 73.135 - return retval; 73.136 - if (do_block) { 73.137 - if (fs->block_map) 73.138 - ext2fs_free_block_bitmap(fs->block_map); 73.139 - strcpy(buf, "block bitmap for "); 73.140 - strcat(buf, fs->device_name); 73.141 - retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map); 73.142 - if (retval) 73.143 - goto cleanup; 73.144 + if (flags & EXT2FS_BITMAPS_BLOCK) { 73.145 retval = io_channel_alloc_buf(fs->io, 0, &block_bitmap); 73.146 if (retval) 73.147 goto cleanup; 73.148 - } else 73.149 + } else { 73.150 block_nbytes = 0; 73.151 - if (do_inode) { 73.152 - if (fs->inode_map) 73.153 - ext2fs_free_inode_bitmap(fs->inode_map); 73.154 - strcpy(buf, "inode bitmap for "); 73.155 - strcat(buf, fs->device_name); 73.156 - retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map); 73.157 - if (retval) 73.158 - goto cleanup; 73.159 + } 73.160 + 73.161 + if (flags & EXT2FS_BITMAPS_INODE) { 73.162 retval = io_channel_alloc_buf(fs->io, 0, &inode_bitmap); 73.163 if (retval) 73.164 goto cleanup; 73.165 - } else 73.166 + } else { 73.167 inode_nbytes = 0; 73.168 - ext2fs_free_mem(&buf); 73.169 + } 73.170 73.171 + /* io should be null */ 73.172 if (fs->flags & EXT2_FLAG_IMAGE_FILE) { 73.173 blk = (ext2fs_le32_to_cpu(fs->image_header->offset_inodemap) / fs->blocksize); 73.174 ino_cnt = fs->super->s_inodes_count; 73.175 @@ -289,15 +355,18 @@ 73.176 blk_itr += cnt; 73.177 blk_cnt -= cnt; 73.178 } 73.179 - goto success_cleanup; 73.180 + goto cleanup; 73.181 } 73.182 73.183 - for (i = 0; i < fs->group_desc_count; i++) { 73.184 + blk_itr += ((blk64_t)start * (block_nbytes << 3)); 73.185 + ino_itr += ((blk64_t)start * (inode_nbytes << 3)); 73.186 + for (i = start; i <= end; i++) { 73.187 if (block_bitmap) { 73.188 blk = ext2fs_block_bitmap_loc(fs, i); 73.189 - if (csum_flag && 73.190 - ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) && 73.191 - ext2fs_group_desc_csum_verify(fs, i)) 73.192 + if ((csum_flag && 73.193 + ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) && 73.194 + ext2fs_group_desc_csum_verify(fs, i)) || 73.195 + (blk >= ext2fs_blocks_count(fs->super))) 73.196 blk = 0; 73.197 if (blk) { 73.198 retval = io_channel_read_blk64(fs->io, blk, 73.199 @@ -315,20 +384,26 @@ 73.200 EXT2_ET_BLOCK_BITMAP_CSUM_INVALID; 73.201 goto cleanup; 73.202 } 73.203 + if (!bitmap_tail_verify((unsigned char *) block_bitmap, 73.204 + block_nbytes, fs->blocksize - 1)) 73.205 + *tail_flags |= EXT2_FLAG_BBITMAP_TAIL_PROBLEM; 73.206 } else 73.207 memset(block_bitmap, 0, block_nbytes); 73.208 cnt = block_nbytes << 3; 73.209 + unix_pthread_mutex_lock(mutex); 73.210 retval = ext2fs_set_block_bitmap_range2(fs->block_map, 73.211 blk_itr, cnt, block_bitmap); 73.212 + unix_pthread_mutex_unlock(mutex); 73.213 if (retval) 73.214 goto cleanup; 73.215 blk_itr += block_nbytes << 3; 73.216 } 73.217 if (inode_bitmap) { 73.218 blk = ext2fs_inode_bitmap_loc(fs, i); 73.219 - if (csum_flag && 73.220 - ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) && 73.221 - ext2fs_group_desc_csum_verify(fs, i)) 73.222 + if ((csum_flag && 73.223 + ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) && 73.224 + ext2fs_group_desc_csum_verify(fs, i)) || 73.225 + (blk >= ext2fs_blocks_count(fs->super))) 73.226 blk = 0; 73.227 if (blk) { 73.228 retval = io_channel_read_blk64(fs->io, blk, 73.229 @@ -347,57 +422,226 @@ 73.230 EXT2_ET_INODE_BITMAP_CSUM_INVALID; 73.231 goto cleanup; 73.232 } 73.233 + if (!bitmap_tail_verify((unsigned char *) inode_bitmap, 73.234 + inode_nbytes, fs->blocksize - 1)) 73.235 + *tail_flags |= EXT2_FLAG_IBITMAP_TAIL_PROBLEM; 73.236 } else 73.237 memset(inode_bitmap, 0, inode_nbytes); 73.238 cnt = inode_nbytes << 3; 73.239 + unix_pthread_mutex_lock(mutex); 73.240 retval = ext2fs_set_inode_bitmap_range2(fs->inode_map, 73.241 ino_itr, cnt, inode_bitmap); 73.242 + unix_pthread_mutex_unlock(mutex); 73.243 if (retval) 73.244 goto cleanup; 73.245 ino_itr += inode_nbytes << 3; 73.246 } 73.247 } 73.248 73.249 - /* Mark group blocks for any BLOCK_UNINIT groups */ 73.250 - if (do_block) { 73.251 - retval = mark_uninit_bg_group_blocks(fs); 73.252 - if (retval) 73.253 - goto cleanup; 73.254 - } 73.255 - 73.256 -success_cleanup: 73.257 +cleanup: 73.258 if (inode_bitmap) 73.259 ext2fs_free_mem(&inode_bitmap); 73.260 if (block_bitmap) 73.261 ext2fs_free_mem(&block_bitmap); 73.262 - return 0; 73.263 + return retval; 73.264 +} 73.265 + 73.266 +static errcode_t read_bitmaps_range_end(ext2_filsys fs, int flags, 73.267 + int tail_flags) 73.268 +{ 73.269 + errcode_t retval; 73.270 73.271 -cleanup: 73.272 - if (do_block) { 73.273 - ext2fs_free_mem(&fs->block_map); 73.274 + /* Mark group blocks for any BLOCK_UNINIT groups */ 73.275 + if (flags & EXT2FS_BITMAPS_BLOCK) { 73.276 + retval = mark_uninit_bg_group_blocks(fs); 73.277 + if (retval) 73.278 + return retval; 73.279 + fs->flags &= ~EXT2_FLAG_BBITMAP_TAIL_PROBLEM; 73.280 + } 73.281 + if (flags & EXT2FS_BITMAPS_INODE) 73.282 + fs->flags &= ~EXT2_FLAG_IBITMAP_TAIL_PROBLEM; 73.283 + fs->flags |= tail_flags; 73.284 + 73.285 + return 0; 73.286 +} 73.287 + 73.288 +static void read_bitmaps_cleanup_on_error(ext2_filsys fs, int flags) 73.289 +{ 73.290 + if (flags & EXT2FS_BITMAPS_BLOCK) { 73.291 + ext2fs_free_block_bitmap(fs->block_map); 73.292 fs->block_map = 0; 73.293 } 73.294 - if (do_inode) { 73.295 - ext2fs_free_mem(&fs->inode_map); 73.296 + if (flags & EXT2FS_BITMAPS_INODE) { 73.297 + ext2fs_free_inode_bitmap(fs->inode_map); 73.298 fs->inode_map = 0; 73.299 } 73.300 - if (inode_bitmap) 73.301 - ext2fs_free_mem(&inode_bitmap); 73.302 - if (block_bitmap) 73.303 - ext2fs_free_mem(&block_bitmap); 73.304 - if (buf) 73.305 - ext2fs_free_mem(&buf); 73.306 +} 73.307 + 73.308 +static errcode_t read_bitmaps_range(ext2_filsys fs, int flags, 73.309 + dgrp_t start, dgrp_t end) 73.310 +{ 73.311 + errcode_t retval; 73.312 + int tail_flags = 0; 73.313 + 73.314 + retval = read_bitmaps_range_prepare(fs, flags); 73.315 + if (retval) 73.316 + return retval; 73.317 + 73.318 + retval = read_bitmaps_range_start(fs, flags, start, end, 73.319 + NULL, &tail_flags); 73.320 + if (retval == 0) 73.321 + retval = read_bitmaps_range_end(fs, flags, tail_flags); 73.322 + if (retval) 73.323 + read_bitmaps_cleanup_on_error(fs, flags); 73.324 return retval; 73.325 } 73.326 73.327 +#ifdef HAVE_PTHREAD 73.328 +struct read_bitmaps_thread_info { 73.329 + ext2_filsys rbt_fs; 73.330 + int rbt_flags; 73.331 + dgrp_t rbt_grp_start; 73.332 + dgrp_t rbt_grp_end; 73.333 + errcode_t rbt_retval; 73.334 + pthread_mutex_t *rbt_mutex; 73.335 + int rbt_tail_flags; 73.336 +}; 73.337 + 73.338 +static void *read_bitmaps_thread(void *data) 73.339 +{ 73.340 + struct read_bitmaps_thread_info *rbt = data; 73.341 + 73.342 + rbt->rbt_retval = read_bitmaps_range_start(rbt->rbt_fs, rbt->rbt_flags, 73.343 + rbt->rbt_grp_start, rbt->rbt_grp_end, 73.344 + rbt->rbt_mutex, &rbt->rbt_tail_flags); 73.345 + return NULL; 73.346 +} 73.347 +#endif 73.348 + 73.349 +errcode_t ext2fs_rw_bitmaps(ext2_filsys fs, int flags, int num_threads) 73.350 +{ 73.351 +#ifdef HAVE_PTHREAD 73.352 + pthread_attr_t attr; 73.353 + pthread_t *thread_ids = NULL; 73.354 + struct read_bitmaps_thread_info *thread_infos = NULL; 73.355 + pthread_mutex_t rbt_mutex = PTHREAD_MUTEX_INITIALIZER; 73.356 + errcode_t retval; 73.357 + errcode_t rc; 73.358 + unsigned flexbg_size = 1 << fs->super->s_log_groups_per_flex; 73.359 + dgrp_t average_group; 73.360 + int i, tail_flags = 0; 73.361 +#endif 73.362 + 73.363 + if (flags & ~EXT2FS_BITMAPS_VALID_FLAGS) 73.364 + return EXT2_ET_INVALID_ARGUMENT; 73.365 + 73.366 + if (flags & EXT2FS_BITMAPS_WRITE) 73.367 + return write_bitmaps(fs, flags & EXT2FS_BITMAPS_INODE, 73.368 + flags & EXT2FS_BITMAPS_BLOCK); 73.369 + 73.370 +#ifdef HAVE_PTHREAD 73.371 + if (((fs->io->flags & CHANNEL_FLAGS_THREADS) == 0) || 73.372 + (num_threads == 1) || (fs->flags & EXT2_FLAG_IMAGE_FILE)) 73.373 + goto fallback; 73.374 + 73.375 +#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF) 73.376 + if (num_threads < 0) 73.377 + num_threads = sysconf(_SC_NPROCESSORS_CONF); 73.378 +#endif 73.379 + /* 73.380 + * Guess for now; eventually we should probably define 73.381 + * ext2fs_get_num_cpus() and teach it how to get this info on 73.382 + * MacOS, FreeBSD, etc. 73.383 + * ref: https://stackoverflow.com/questions/150355 73.384 + */ 73.385 + if (num_threads < 0) 73.386 + num_threads = 4; 73.387 + 73.388 + if (num_threads > fs->group_desc_count) 73.389 + num_threads = fs->group_desc_count; 73.390 + average_group = fs->group_desc_count / num_threads; 73.391 + if (ext2fs_has_feature_flex_bg(fs->super)) { 73.392 + average_group = (average_group / flexbg_size) * flexbg_size; 73.393 + } 73.394 + if (average_group == 0) 73.395 + goto fallback; 73.396 + 73.397 + io_channel_set_options(fs->io, "cache=off"); 73.398 + retval = pthread_attr_init(&attr); 73.399 + if (retval) 73.400 + return retval; 73.401 + 73.402 + thread_ids = calloc(sizeof(pthread_t), num_threads); 73.403 + if (!thread_ids) 73.404 + return ENOMEM; 73.405 + 73.406 + thread_infos = calloc(sizeof(struct read_bitmaps_thread_info), 73.407 + num_threads); 73.408 + if (!thread_infos) 73.409 + goto out; 73.410 + 73.411 + retval = read_bitmaps_range_prepare(fs, flags); 73.412 + if (retval) 73.413 + goto out; 73.414 + 73.415 +// fprintf(stdout, "Multiple threads triggered to read bitmaps\n"); 73.416 + for (i = 0; i < num_threads; i++) { 73.417 + thread_infos[i].rbt_fs = fs; 73.418 + thread_infos[i].rbt_flags = flags; 73.419 + thread_infos[i].rbt_mutex = &rbt_mutex; 73.420 + thread_infos[i].rbt_tail_flags = 0; 73.421 + if (i == 0) 73.422 + thread_infos[i].rbt_grp_start = 0; 73.423 + else 73.424 + thread_infos[i].rbt_grp_start = average_group * i + 1; 73.425 + 73.426 + if (i == num_threads - 1) 73.427 + thread_infos[i].rbt_grp_end = fs->group_desc_count - 1; 73.428 + else 73.429 + thread_infos[i].rbt_grp_end = average_group * (i + 1); 73.430 + retval = pthread_create(&thread_ids[i], &attr, 73.431 + &read_bitmaps_thread, &thread_infos[i]); 73.432 + if (retval) 73.433 + break; 73.434 + } 73.435 + for (i = 0; i < num_threads; i++) { 73.436 + if (!thread_ids[i]) 73.437 + break; 73.438 + rc = pthread_join(thread_ids[i], NULL); 73.439 + if (rc && !retval) 73.440 + retval = rc; 73.441 + rc = thread_infos[i].rbt_retval; 73.442 + if (rc && !retval) 73.443 + retval = rc; 73.444 + tail_flags |= thread_infos[i].rbt_tail_flags; 73.445 + } 73.446 +out: 73.447 + rc = pthread_attr_destroy(&attr); 73.448 + if (rc && !retval) 73.449 + retval = rc; 73.450 + free(thread_infos); 73.451 + free(thread_ids); 73.452 + 73.453 + if (retval == 0) 73.454 + retval = read_bitmaps_range_end(fs, flags, tail_flags); 73.455 + if (retval) 73.456 + read_bitmaps_cleanup_on_error(fs, flags); 73.457 + /* XXX should save and restore cache setting */ 73.458 + io_channel_set_options(fs->io, "cache=on"); 73.459 + return retval; 73.460 +fallback: 73.461 +#endif /* HAVE_PTHREAD */ 73.462 + return read_bitmaps_range(fs, flags, 0, fs->group_desc_count - 1); 73.463 +} 73.464 + 73.465 errcode_t ext2fs_read_inode_bitmap(ext2_filsys fs) 73.466 { 73.467 - return read_bitmaps(fs, 1, 0); 73.468 + return ext2fs_rw_bitmaps(fs, EXT2FS_BITMAPS_INODE, -1); 73.469 } 73.470 73.471 errcode_t ext2fs_read_block_bitmap(ext2_filsys fs) 73.472 { 73.473 - return read_bitmaps(fs, 0, 1); 73.474 + return ext2fs_rw_bitmaps(fs, EXT2FS_BITMAPS_BLOCK, -1); 73.475 } 73.476 73.477 errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs) 73.478 @@ -412,10 +656,15 @@ 73.479 73.480 errcode_t ext2fs_read_bitmaps(ext2_filsys fs) 73.481 { 73.482 - if (fs->inode_map && fs->block_map) 73.483 + int flags = 0; 73.484 + 73.485 + if (!fs->inode_map) 73.486 + flags |= EXT2FS_BITMAPS_INODE; 73.487 + if (!fs->block_map) 73.488 + flags |= EXT2FS_BITMAPS_BLOCK; 73.489 + if (flags == 0) 73.490 return 0; 73.491 - 73.492 - return read_bitmaps(fs, !fs->inode_map, !fs->block_map); 73.493 + return ext2fs_rw_bitmaps(fs, flags, -1); 73.494 } 73.495 73.496 errcode_t ext2fs_write_bitmaps(ext2_filsys fs)
74.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 74.2 +++ b/libext2fs/lib/libext2fs/swapfs.c Sat Oct 09 23:28:01 2021 +0200 74.3 @@ -0,0 +1,487 @@ 74.4 +/* 74.5 + * swapfs.c --- swap ext2 filesystem data structures 74.6 + * 74.7 + * Copyright (C) 1995, 1996, 2002 Theodore Ts'o. 74.8 + * 74.9 + * %Begin-Header% 74.10 + * This file may be redistributed under the terms of the GNU Library 74.11 + * General Public License, version 2. 74.12 + * %End-Header% 74.13 + */ 74.14 + 74.15 +#include "config.h" 74.16 +#include <stdio.h> 74.17 +#if HAVE_UNISTD_H 74.18 +#include <unistd.h> 74.19 +#endif 74.20 +#include <string.h> 74.21 +#include <time.h> 74.22 + 74.23 +#include "ext2_fs.h" 74.24 +#include "ext2fs.h" 74.25 +#include "ext2fsP.h" 74.26 +#include <ext2fs/ext2_ext_attr.h> 74.27 + 74.28 +void ext2fs_swap_super(struct ext2_super_block * sb) 74.29 +{ 74.30 + int i; 74.31 + 74.32 + sb->s_inodes_count = ext2fs_swab32(sb->s_inodes_count); 74.33 + sb->s_blocks_count = ext2fs_swab32(sb->s_blocks_count); 74.34 + sb->s_r_blocks_count = ext2fs_swab32(sb->s_r_blocks_count); 74.35 + sb->s_free_blocks_count = ext2fs_swab32(sb->s_free_blocks_count); 74.36 + sb->s_free_inodes_count = ext2fs_swab32(sb->s_free_inodes_count); 74.37 + sb->s_first_data_block = ext2fs_swab32(sb->s_first_data_block); 74.38 + sb->s_log_block_size = ext2fs_swab32(sb->s_log_block_size); 74.39 + sb->s_log_cluster_size = ext2fs_swab32(sb->s_log_cluster_size); 74.40 + sb->s_blocks_per_group = ext2fs_swab32(sb->s_blocks_per_group); 74.41 + sb->s_clusters_per_group = ext2fs_swab32(sb->s_clusters_per_group); 74.42 + sb->s_inodes_per_group = ext2fs_swab32(sb->s_inodes_per_group); 74.43 + sb->s_mtime = ext2fs_swab32(sb->s_mtime); 74.44 + sb->s_wtime = ext2fs_swab32(sb->s_wtime); 74.45 + sb->s_mnt_count = ext2fs_swab16(sb->s_mnt_count); 74.46 + sb->s_max_mnt_count = ext2fs_swab16(sb->s_max_mnt_count); 74.47 + sb->s_magic = ext2fs_swab16(sb->s_magic); 74.48 + sb->s_state = ext2fs_swab16(sb->s_state); 74.49 + sb->s_errors = ext2fs_swab16(sb->s_errors); 74.50 + sb->s_minor_rev_level = ext2fs_swab16(sb->s_minor_rev_level); 74.51 + sb->s_lastcheck = ext2fs_swab32(sb->s_lastcheck); 74.52 + sb->s_checkinterval = ext2fs_swab32(sb->s_checkinterval); 74.53 + sb->s_creator_os = ext2fs_swab32(sb->s_creator_os); 74.54 + sb->s_rev_level = ext2fs_swab32(sb->s_rev_level); 74.55 + sb->s_def_resuid = ext2fs_swab16(sb->s_def_resuid); 74.56 + sb->s_def_resgid = ext2fs_swab16(sb->s_def_resgid); 74.57 + sb->s_first_ino = ext2fs_swab32(sb->s_first_ino); 74.58 + sb->s_inode_size = ext2fs_swab16(sb->s_inode_size); 74.59 + sb->s_block_group_nr = ext2fs_swab16(sb->s_block_group_nr); 74.60 + sb->s_feature_compat = ext2fs_swab32(sb->s_feature_compat); 74.61 + sb->s_feature_incompat = ext2fs_swab32(sb->s_feature_incompat); 74.62 + sb->s_feature_ro_compat = ext2fs_swab32(sb->s_feature_ro_compat); 74.63 + /* sb->s_uuid is __u8 and does not need swabbing */ 74.64 + /* sb->s_volume_name is char and does not need swabbing */ 74.65 + /* sb->s_last_mounted is char and does not need swabbing */ 74.66 + sb->s_algorithm_usage_bitmap = ext2fs_swab32(sb->s_algorithm_usage_bitmap); 74.67 + /* sb->s_prealloc_blocks is __u8 and does not need swabbing */ 74.68 + /* sb->s_prealloc_dir_blocks is __u8 and does not need swabbing */ 74.69 + sb->s_reserved_gdt_blocks = ext2fs_swab16(sb->s_reserved_gdt_blocks); 74.70 + /* sb->s_journal_uuid is __u8 and does not need swabbing */ 74.71 + sb->s_journal_inum = ext2fs_swab32(sb->s_journal_inum); 74.72 + sb->s_journal_dev = ext2fs_swab32(sb->s_journal_dev); 74.73 + sb->s_last_orphan = ext2fs_swab32(sb->s_last_orphan); 74.74 + for (i = 0; i < 4; i++) 74.75 + sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]); 74.76 + /* sb->s_def_hash_version is __u8 and does not need swabbing */ 74.77 + /* sb->s_jnl_backup_type is __u8 and does not need swabbing */ 74.78 + sb->s_desc_size = ext2fs_swab16(sb->s_desc_size); 74.79 + sb->s_default_mount_opts = ext2fs_swab32(sb->s_default_mount_opts); 74.80 + sb->s_first_meta_bg = ext2fs_swab32(sb->s_first_meta_bg); 74.81 + sb->s_mkfs_time = ext2fs_swab32(sb->s_mkfs_time); 74.82 + /* if journal backup is for a valid extent-based journal... */ 74.83 + if (ext2fs_extent_header_verify(sb->s_jnl_blocks, 74.84 + sizeof(sb->s_jnl_blocks)) == 0) { 74.85 + /* ... swap only the journal i_size and i_size_high, 74.86 + * and the extent data is not swapped on read */ 74.87 + i = 15; 74.88 + } else { 74.89 + /* direct/indirect journal: swap it all */ 74.90 + i = 0; 74.91 + } 74.92 + for (; i < 17; i++) 74.93 + sb->s_jnl_blocks[i] = ext2fs_swab32(sb->s_jnl_blocks[i]); 74.94 + sb->s_blocks_count_hi = ext2fs_swab32(sb->s_blocks_count_hi); 74.95 + sb->s_r_blocks_count_hi = ext2fs_swab32(sb->s_r_blocks_count_hi); 74.96 + sb->s_free_blocks_hi = ext2fs_swab32(sb->s_free_blocks_hi); 74.97 + sb->s_min_extra_isize = ext2fs_swab16(sb->s_min_extra_isize); 74.98 + sb->s_want_extra_isize = ext2fs_swab16(sb->s_want_extra_isize); 74.99 + sb->s_flags = ext2fs_swab32(sb->s_flags); 74.100 + sb->s_raid_stride = ext2fs_swab16(sb->s_raid_stride); 74.101 + sb->s_mmp_update_interval = ext2fs_swab16(sb->s_mmp_update_interval); 74.102 + sb->s_mmp_block = ext2fs_swab64(sb->s_mmp_block); 74.103 + sb->s_raid_stripe_width = ext2fs_swab32(sb->s_raid_stripe_width); 74.104 + /* sb->s_log_groups_per_flex is __u8 and does not need swabbing */ 74.105 + /* sb->s_checksum_type is __u8 and does not need swabbing */ 74.106 + /* sb->s_encryption_level is __u8 and does not need swabbing */ 74.107 + /* sb->s_reserved_pad is __u8 and does not need swabbing */ 74.108 + sb->s_kbytes_written = ext2fs_swab64(sb->s_kbytes_written); 74.109 + sb->s_snapshot_inum = ext2fs_swab32(sb->s_snapshot_inum); 74.110 + sb->s_snapshot_id = ext2fs_swab32(sb->s_snapshot_id); 74.111 + sb->s_snapshot_r_blocks_count = 74.112 + ext2fs_swab64(sb->s_snapshot_r_blocks_count); 74.113 + sb->s_snapshot_list = ext2fs_swab32(sb->s_snapshot_list); 74.114 + sb->s_error_count = ext2fs_swab32(sb->s_error_count); 74.115 + sb->s_first_error_time = ext2fs_swab32(sb->s_first_error_time); 74.116 + sb->s_first_error_ino = ext2fs_swab32(sb->s_first_error_ino); 74.117 + sb->s_first_error_block = ext2fs_swab64(sb->s_first_error_block); 74.118 + /* sb->s_first_error_func is __u8 and does not need swabbing */ 74.119 + sb->s_last_error_time = ext2fs_swab32(sb->s_last_error_time); 74.120 + sb->s_last_error_ino = ext2fs_swab32(sb->s_last_error_ino); 74.121 + sb->s_last_error_block = ext2fs_swab64(sb->s_last_error_block); 74.122 + /* sb->s_last_error_func is __u8 and does not need swabbing */ 74.123 + /* sb->s_mount_opts is __u8 and does not need swabbing */ 74.124 + sb->s_usr_quota_inum = ext2fs_swab32(sb->s_usr_quota_inum); 74.125 + sb->s_grp_quota_inum = ext2fs_swab32(sb->s_grp_quota_inum); 74.126 + sb->s_overhead_clusters = ext2fs_swab32(sb->s_overhead_clusters); 74.127 + sb->s_backup_bgs[0] = ext2fs_swab32(sb->s_backup_bgs[0]); 74.128 + sb->s_backup_bgs[1] = ext2fs_swab32(sb->s_backup_bgs[1]); 74.129 + /* sb->s_encrypt_algos is __u8 and does not need swabbing */ 74.130 + /* sb->s_encrypt_pw_salt is __u8 and does not need swabbing */ 74.131 + sb->s_lpf_ino = ext2fs_swab32(sb->s_lpf_ino); 74.132 + sb->s_prj_quota_inum = ext2fs_swab32(sb->s_prj_quota_inum); 74.133 + sb->s_checksum_seed = ext2fs_swab32(sb->s_checksum_seed); 74.134 + /* s_*_time_hi are __u8 and does not need swabbing */ 74.135 + sb->s_encoding = ext2fs_swab16(sb->s_encoding); 74.136 + sb->s_encoding_flags = ext2fs_swab16(sb->s_encoding_flags); 74.137 + /* catch when new fields are used from s_reserved */ 74.138 + EXT2FS_BUILD_BUG_ON(sizeof(sb->s_reserved) != 95 * sizeof(__le32)); 74.139 + sb->s_checksum = ext2fs_swab32(sb->s_checksum); 74.140 +} 74.141 + 74.142 +void ext2fs_swap_group_desc2(ext2_filsys fs, struct ext2_group_desc *gdp) 74.143 +{ 74.144 + struct ext4_group_desc *gdp4 = (struct ext4_group_desc *)gdp; 74.145 + 74.146 + /* Do the 32-bit parts first */ 74.147 + gdp->bg_block_bitmap = ext2fs_swab32(gdp->bg_block_bitmap); 74.148 + gdp->bg_inode_bitmap = ext2fs_swab32(gdp->bg_inode_bitmap); 74.149 + gdp->bg_inode_table = ext2fs_swab32(gdp->bg_inode_table); 74.150 + gdp->bg_free_blocks_count = ext2fs_swab16(gdp->bg_free_blocks_count); 74.151 + gdp->bg_free_inodes_count = ext2fs_swab16(gdp->bg_free_inodes_count); 74.152 + gdp->bg_used_dirs_count = ext2fs_swab16(gdp->bg_used_dirs_count); 74.153 + gdp->bg_flags = ext2fs_swab16(gdp->bg_flags); 74.154 + gdp->bg_exclude_bitmap_lo = ext2fs_swab32(gdp->bg_exclude_bitmap_lo); 74.155 + gdp->bg_block_bitmap_csum_lo = 74.156 + ext2fs_swab16(gdp->bg_block_bitmap_csum_lo); 74.157 + gdp->bg_inode_bitmap_csum_lo = 74.158 + ext2fs_swab16(gdp->bg_inode_bitmap_csum_lo); 74.159 + gdp->bg_itable_unused = ext2fs_swab16(gdp->bg_itable_unused); 74.160 + gdp->bg_checksum = ext2fs_swab16(gdp->bg_checksum); 74.161 + /* If we're 32-bit, we're done */ 74.162 + if (fs == NULL || EXT2_DESC_SIZE(fs->super) < EXT2_MIN_DESC_SIZE_64BIT) 74.163 + return; 74.164 + 74.165 + /* Swap the 64-bit parts */ 74.166 + gdp4->bg_block_bitmap_hi = ext2fs_swab32(gdp4->bg_block_bitmap_hi); 74.167 + gdp4->bg_inode_bitmap_hi = ext2fs_swab32(gdp4->bg_inode_bitmap_hi); 74.168 + gdp4->bg_inode_table_hi = ext2fs_swab32(gdp4->bg_inode_table_hi); 74.169 + gdp4->bg_free_blocks_count_hi = 74.170 + ext2fs_swab16(gdp4->bg_free_blocks_count_hi); 74.171 + gdp4->bg_free_inodes_count_hi = 74.172 + ext2fs_swab16(gdp4->bg_free_inodes_count_hi); 74.173 + gdp4->bg_used_dirs_count_hi = 74.174 + ext2fs_swab16(gdp4->bg_used_dirs_count_hi); 74.175 + gdp4->bg_itable_unused_hi = ext2fs_swab16(gdp4->bg_itable_unused_hi); 74.176 + gdp4->bg_exclude_bitmap_hi = ext2fs_swab16(gdp4->bg_exclude_bitmap_hi); 74.177 + gdp4->bg_block_bitmap_csum_hi = 74.178 + ext2fs_swab16(gdp4->bg_block_bitmap_csum_hi); 74.179 + gdp4->bg_inode_bitmap_csum_hi = 74.180 + ext2fs_swab16(gdp4->bg_inode_bitmap_csum_hi); 74.181 + EXT2FS_BUILD_BUG_ON(sizeof(gdp4->bg_reserved) != sizeof(__u32)); 74.182 +} 74.183 + 74.184 +void ext2fs_swap_group_desc(struct ext2_group_desc *gdp) 74.185 +{ 74.186 + ext2fs_swap_group_desc2(0, gdp); 74.187 +} 74.188 + 74.189 + 74.190 +void ext2fs_swap_ext_attr_header(struct ext2_ext_attr_header *to_header, 74.191 + struct ext2_ext_attr_header *from_header) 74.192 +{ 74.193 + int n; 74.194 + 74.195 + to_header->h_magic = ext2fs_swab32(from_header->h_magic); 74.196 + to_header->h_blocks = ext2fs_swab32(from_header->h_blocks); 74.197 + to_header->h_refcount = ext2fs_swab32(from_header->h_refcount); 74.198 + to_header->h_hash = ext2fs_swab32(from_header->h_hash); 74.199 + to_header->h_checksum = ext2fs_swab32(from_header->h_checksum); 74.200 + for (n = 0; n < 3; n++) 74.201 + to_header->h_reserved[n] = 74.202 + ext2fs_swab32(from_header->h_reserved[n]); 74.203 +} 74.204 + 74.205 +void ext2fs_swap_ext_attr_entry(struct ext2_ext_attr_entry *to_entry, 74.206 + struct ext2_ext_attr_entry *from_entry) 74.207 +{ 74.208 + to_entry->e_value_offs = ext2fs_swab16(from_entry->e_value_offs); 74.209 + to_entry->e_value_inum = ext2fs_swab32(from_entry->e_value_inum); 74.210 + to_entry->e_value_size = ext2fs_swab32(from_entry->e_value_size); 74.211 + to_entry->e_hash = ext2fs_swab32(from_entry->e_hash); 74.212 +} 74.213 + 74.214 +void ext2fs_swap_ext_attr(char *to, char *from, int bufsize, int has_header) 74.215 +{ 74.216 + struct ext2_ext_attr_header *from_header = 74.217 + (struct ext2_ext_attr_header *)from; 74.218 + struct ext2_ext_attr_header *to_header = 74.219 + (struct ext2_ext_attr_header *)to; 74.220 + struct ext2_ext_attr_entry *from_entry, *to_entry; 74.221 + char *from_end = (char *)from_header + bufsize; 74.222 + 74.223 + if (to_header != from_header) 74.224 + memcpy(to_header, from_header, bufsize); 74.225 + 74.226 + if (has_header) { 74.227 + ext2fs_swap_ext_attr_header(to_header, from_header); 74.228 + 74.229 + from_entry = (struct ext2_ext_attr_entry *)(from_header+1); 74.230 + to_entry = (struct ext2_ext_attr_entry *)(to_header+1); 74.231 + } else { 74.232 + from_entry = (struct ext2_ext_attr_entry *)from_header; 74.233 + to_entry = (struct ext2_ext_attr_entry *)to_header; 74.234 + } 74.235 + 74.236 + while ((char *)from_entry < from_end && 74.237 + (char *)EXT2_EXT_ATTR_NEXT(from_entry) <= from_end && 74.238 + *(__u32 *)from_entry) { 74.239 + ext2fs_swap_ext_attr_entry(to_entry, from_entry); 74.240 + from_entry = EXT2_EXT_ATTR_NEXT(from_entry); 74.241 + to_entry = EXT2_EXT_ATTR_NEXT(to_entry); 74.242 + } 74.243 +} 74.244 + 74.245 +void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t, 74.246 + struct ext2_inode_large *f, int hostorder, 74.247 + int bufsize) 74.248 +{ 74.249 + unsigned i, extra_isize, attr_magic; 74.250 + int has_extents, has_inline_data, islnk, fast_symlink; 74.251 + unsigned int inode_size; 74.252 + __u32 *eaf, *eat; 74.253 + 74.254 + /* 74.255 + * Note that t and f may point to the same address. That's why 74.256 + * if (hostorder) condition is executed before swab calls and 74.257 + * if (!hostorder) afterwards. 74.258 + */ 74.259 + if (hostorder) { 74.260 + islnk = LINUX_S_ISLNK(f->i_mode); 74.261 + fast_symlink = ext2fs_is_fast_symlink(EXT2_INODE(f)); 74.262 + has_extents = (f->i_flags & EXT4_EXTENTS_FL) != 0; 74.263 + has_inline_data = (f->i_flags & EXT4_INLINE_DATA_FL) != 0; 74.264 + } 74.265 + 74.266 + t->i_mode = ext2fs_swab16(f->i_mode); 74.267 + t->i_uid = ext2fs_swab16(f->i_uid); 74.268 + t->i_size = ext2fs_swab32(f->i_size); 74.269 + t->i_atime = ext2fs_swab32(f->i_atime); 74.270 + t->i_ctime = ext2fs_swab32(f->i_ctime); 74.271 + t->i_mtime = ext2fs_swab32(f->i_mtime); 74.272 + t->i_dtime = ext2fs_swab32(f->i_dtime); 74.273 + t->i_gid = ext2fs_swab16(f->i_gid); 74.274 + t->i_links_count = ext2fs_swab16(f->i_links_count); 74.275 + t->i_file_acl = ext2fs_swab32(f->i_file_acl); 74.276 + t->i_blocks = ext2fs_swab32(f->i_blocks); 74.277 + t->i_flags = ext2fs_swab32(f->i_flags); 74.278 + t->i_size_high = ext2fs_swab32(f->i_size_high); 74.279 + 74.280 + if (!hostorder) { 74.281 + islnk = LINUX_S_ISLNK(t->i_mode); 74.282 + fast_symlink = ext2fs_is_fast_symlink(EXT2_INODE(t)); 74.283 + has_extents = (t->i_flags & EXT4_EXTENTS_FL) != 0; 74.284 + has_inline_data = (t->i_flags & EXT4_INLINE_DATA_FL) != 0; 74.285 + } 74.286 + 74.287 + /* 74.288 + * Extent data and inline data are swapped on access, not here 74.289 + */ 74.290 + if (!has_extents && !has_inline_data && (!islnk || !fast_symlink)) { 74.291 + for (i = 0; i < EXT2_N_BLOCKS; i++) 74.292 + t->i_block[i] = ext2fs_swab32(f->i_block[i]); 74.293 + } else if (t != f) { 74.294 + for (i = 0; i < EXT2_N_BLOCKS; i++) 74.295 + t->i_block[i] = f->i_block[i]; 74.296 + } 74.297 + t->i_generation = ext2fs_swab32(f->i_generation); 74.298 + t->i_faddr = ext2fs_swab32(f->i_faddr); 74.299 + 74.300 + switch (fs->super->s_creator_os) { 74.301 + case EXT2_OS_LINUX: 74.302 + t->osd1.linux1.l_i_version = 74.303 + ext2fs_swab32(f->osd1.linux1.l_i_version); 74.304 + t->osd2.linux2.l_i_blocks_hi = 74.305 + ext2fs_swab16(f->osd2.linux2.l_i_blocks_hi); 74.306 + t->osd2.linux2.l_i_file_acl_high = 74.307 + ext2fs_swab16(f->osd2.linux2.l_i_file_acl_high); 74.308 + t->osd2.linux2.l_i_uid_high = 74.309 + ext2fs_swab16 (f->osd2.linux2.l_i_uid_high); 74.310 + t->osd2.linux2.l_i_gid_high = 74.311 + ext2fs_swab16 (f->osd2.linux2.l_i_gid_high); 74.312 + t->osd2.linux2.l_i_checksum_lo = 74.313 + ext2fs_swab16(f->osd2.linux2.l_i_checksum_lo); 74.314 + break; 74.315 + case EXT2_OS_HURD: 74.316 + t->osd1.hurd1.h_i_translator = 74.317 + ext2fs_swab32 (f->osd1.hurd1.h_i_translator); 74.318 + t->osd2.hurd2.h_i_frag = f->osd2.hurd2.h_i_frag; 74.319 + t->osd2.hurd2.h_i_fsize = f->osd2.hurd2.h_i_fsize; 74.320 + t->osd2.hurd2.h_i_mode_high = 74.321 + ext2fs_swab16 (f->osd2.hurd2.h_i_mode_high); 74.322 + t->osd2.hurd2.h_i_uid_high = 74.323 + ext2fs_swab16 (f->osd2.hurd2.h_i_uid_high); 74.324 + t->osd2.hurd2.h_i_gid_high = 74.325 + ext2fs_swab16 (f->osd2.hurd2.h_i_gid_high); 74.326 + t->osd2.hurd2.h_i_author = 74.327 + ext2fs_swab32 (f->osd2.hurd2.h_i_author); 74.328 + break; 74.329 + default: 74.330 + break; 74.331 + } 74.332 + 74.333 + if (bufsize < (int) (sizeof(struct ext2_inode) + sizeof(__u16))) 74.334 + return; /* no i_extra_isize field */ 74.335 + 74.336 + if (hostorder) 74.337 + extra_isize = f->i_extra_isize; 74.338 + t->i_extra_isize = ext2fs_swab16(f->i_extra_isize); 74.339 + if (!hostorder) 74.340 + extra_isize = t->i_extra_isize; 74.341 + if (extra_isize > EXT2_INODE_SIZE(fs->super) - 74.342 + sizeof(struct ext2_inode)) { 74.343 + /* this is error case: i_extra_size is too large */ 74.344 + return; 74.345 + } 74.346 + if (extra_isize & 3) 74.347 + return; /* Illegal inode extra_isize */ 74.348 + 74.349 + inode_size = EXT2_GOOD_OLD_INODE_SIZE + extra_isize; 74.350 + if (inode_includes(inode_size, i_checksum_hi)) 74.351 + t->i_checksum_hi = ext2fs_swab16(f->i_checksum_hi); 74.352 + if (inode_includes(inode_size, i_ctime_extra)) 74.353 + t->i_ctime_extra = ext2fs_swab32(f->i_ctime_extra); 74.354 + if (inode_includes(inode_size, i_mtime_extra)) 74.355 + t->i_mtime_extra = ext2fs_swab32(f->i_mtime_extra); 74.356 + if (inode_includes(inode_size, i_atime_extra)) 74.357 + t->i_atime_extra = ext2fs_swab32(f->i_atime_extra); 74.358 + if (inode_includes(inode_size, i_crtime)) 74.359 + t->i_crtime = ext2fs_swab32(f->i_crtime); 74.360 + if (inode_includes(inode_size, i_crtime_extra)) 74.361 + t->i_crtime_extra = ext2fs_swab32(f->i_crtime_extra); 74.362 + if (inode_includes(inode_size, i_version_hi)) 74.363 + t->i_version_hi = ext2fs_swab32(f->i_version_hi); 74.364 + if (inode_includes(inode_size, i_projid)) 74.365 + t->i_projid = ext2fs_swab32(f->i_projid); 74.366 + /* catch new static fields added after i_projid */ 74.367 + EXT2FS_BUILD_BUG_ON(sizeof(struct ext2_inode_large) != 160); 74.368 + 74.369 + i = sizeof(struct ext2_inode) + extra_isize + sizeof(__u32); 74.370 + if (bufsize < (int) i) 74.371 + return; /* no space for EA magic */ 74.372 + 74.373 + eaf = (__u32 *) (((char *) f) + sizeof(struct ext2_inode) + 74.374 + extra_isize); 74.375 + 74.376 + attr_magic = *eaf; 74.377 + if (!hostorder) 74.378 + attr_magic = ext2fs_swab32(attr_magic); 74.379 + 74.380 + if (attr_magic != EXT2_EXT_ATTR_MAGIC) 74.381 + return; /* it seems no magic here */ 74.382 + 74.383 + eat = (__u32 *) (((char *) t) + sizeof(struct ext2_inode) + 74.384 + extra_isize); 74.385 + *eat = ext2fs_swab32(*eaf); 74.386 + 74.387 + /* convert EA(s) */ 74.388 + ext2fs_swap_ext_attr((char *) (eat + 1), (char *) (eaf + 1), 74.389 + bufsize - sizeof(struct ext2_inode) - 74.390 + extra_isize - sizeof(__u32), 0); 74.391 + 74.392 +} 74.393 + 74.394 +void ext2fs_swap_inode(ext2_filsys fs, struct ext2_inode *t, 74.395 + struct ext2_inode *f, int hostorder) 74.396 +{ 74.397 + ext2fs_swap_inode_full(fs, (struct ext2_inode_large *) t, 74.398 + (struct ext2_inode_large *) f, hostorder, 74.399 + sizeof(struct ext2_inode)); 74.400 +} 74.401 + 74.402 +void ext2fs_swap_mmp(struct mmp_struct *mmp) 74.403 +{ 74.404 + mmp->mmp_magic = ext2fs_swab32(mmp->mmp_magic); 74.405 + mmp->mmp_seq = ext2fs_swab32(mmp->mmp_seq); 74.406 + mmp->mmp_time = ext2fs_swab64(mmp->mmp_time); 74.407 + mmp->mmp_check_interval = ext2fs_swab16(mmp->mmp_check_interval); 74.408 + mmp->mmp_checksum = ext2fs_swab32(mmp->mmp_checksum); 74.409 +} 74.410 + 74.411 +errcode_t ext2fs_dirent_swab_in(ext2_filsys fs, char *buf, int flags) 74.412 +{ 74.413 + return ext2fs_dirent_swab_in2(fs, buf, fs->blocksize, flags); 74.414 +} 74.415 + 74.416 +errcode_t ext2fs_dirent_swab_in2(ext2_filsys fs, char *buf, 74.417 + size_t size, int flags) 74.418 +{ 74.419 + errcode_t retval; 74.420 + char *p, *end; 74.421 + struct ext2_dir_entry *dirent; 74.422 + unsigned int name_len, rec_len, left; 74.423 + 74.424 + p = (char *) buf; 74.425 + end = (char *) buf + size; 74.426 + left = size; 74.427 + while (p < end-8) { 74.428 + dirent = (struct ext2_dir_entry *) p; 74.429 + dirent->inode = ext2fs_swab32(dirent->inode); 74.430 + dirent->rec_len = ext2fs_swab16(dirent->rec_len); 74.431 + dirent->name_len = ext2fs_swab16(dirent->name_len); 74.432 + name_len = dirent->name_len; 74.433 + if (flags & EXT2_DIRBLOCK_V2_STRUCT) 74.434 + dirent->name_len = ext2fs_swab16(dirent->name_len); 74.435 + retval = ext2fs_get_rec_len(fs, dirent, &rec_len); 74.436 + if (retval) 74.437 + return retval; 74.438 + if ((rec_len < 8) || (rec_len % 4)) { 74.439 + rec_len = 8; 74.440 + retval = EXT2_ET_DIR_CORRUPTED; 74.441 + } else if (((name_len & 0xFF) + 8) > rec_len) 74.442 + retval = EXT2_ET_DIR_CORRUPTED; 74.443 + if (rec_len > left) 74.444 + return EXT2_ET_DIR_CORRUPTED; 74.445 + left -= rec_len; 74.446 + p += rec_len; 74.447 + } 74.448 + 74.449 + return 0; 74.450 +} 74.451 + 74.452 +errcode_t ext2fs_dirent_swab_out(ext2_filsys fs, char *buf, int flags) 74.453 +{ 74.454 + return ext2fs_dirent_swab_out2(fs, buf, fs->blocksize, flags); 74.455 +} 74.456 + 74.457 +errcode_t ext2fs_dirent_swab_out2(ext2_filsys fs, char *buf, 74.458 + size_t size, int flags) 74.459 +{ 74.460 + errcode_t retval; 74.461 + char *p, *end; 74.462 + unsigned int rec_len; 74.463 + struct ext2_dir_entry *dirent; 74.464 + 74.465 + p = buf; 74.466 + end = buf + size; 74.467 + while (p < end) { 74.468 + dirent = (struct ext2_dir_entry *) p; 74.469 + retval = ext2fs_get_rec_len(fs, dirent, &rec_len); 74.470 + if (retval) 74.471 + return retval; 74.472 + if ((rec_len < 8) || 74.473 + (rec_len % 4)) { 74.474 + ext2fs_free_mem(&buf); 74.475 + return EXT2_ET_DIR_CORRUPTED; 74.476 + } 74.477 + p += rec_len; 74.478 + dirent->inode = ext2fs_swab32(dirent->inode); 74.479 + dirent->rec_len = ext2fs_swab16(dirent->rec_len); 74.480 + dirent->name_len = ext2fs_swab16(dirent->name_len); 74.481 + if (rec_len > size) 74.482 + return EXT2_ET_DIR_CORRUPTED; 74.483 + size -= rec_len; 74.484 + 74.485 + if (flags & EXT2_DIRBLOCK_V2_STRUCT) 74.486 + dirent->name_len = ext2fs_swab16(dirent->name_len); 74.487 + } 74.488 + 74.489 + return 0; 74.490 +}
75.1 --- a/libext2fs/lib/libext2fs/symlink.c Sat Oct 02 23:57:02 2021 +0200 75.2 +++ b/libext2fs/lib/libext2fs/symlink.c Sat Oct 09 23:28:01 2021 +0200 75.3 @@ -54,6 +54,7 @@ 75.4 int fastlink, inlinelink; 75.5 unsigned int target_len; 75.6 char *block_buf = 0; 75.7 + int drop_refcount = 0; 75.8 75.9 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); 75.10 75.11 @@ -163,6 +164,14 @@ 75.12 } 75.13 75.14 /* 75.15 + * Update accounting.... 75.16 + */ 75.17 + if (!fastlink && !inlinelink) 75.18 + ext2fs_block_alloc_stats2(fs, blk, +1); 75.19 + ext2fs_inode_alloc_stats2(fs, ino, +1, 0); 75.20 + drop_refcount = 1; 75.21 + 75.22 + /* 75.23 * Link the symlink into the filesystem hierarchy 75.24 */ 75.25 if (name) { 75.26 @@ -178,17 +187,16 @@ 75.27 if (retval) 75.28 goto cleanup; 75.29 } 75.30 - 75.31 - /* 75.32 - * Update accounting.... 75.33 - */ 75.34 - if (!fastlink && !inlinelink) 75.35 - ext2fs_block_alloc_stats2(fs, blk, +1); 75.36 - ext2fs_inode_alloc_stats2(fs, ino, +1, 0); 75.37 + drop_refcount = 0; 75.38 75.39 cleanup: 75.40 if (block_buf) 75.41 ext2fs_free_mem(&block_buf); 75.42 + if (drop_refcount) { 75.43 + if (!fastlink && !inlinelink) 75.44 + ext2fs_block_alloc_stats2(fs, blk, -1); 75.45 + ext2fs_inode_alloc_stats2(fs, ino, -1, 0); 75.46 + } 75.47 return retval; 75.48 } 75.49
76.1 --- a/libext2fs/lib/libext2fs/unix_io.c Sat Oct 02 23:57:02 2021 +0200 76.2 +++ b/libext2fs/lib/libext2fs/unix_io.c Sat Oct 09 23:28:01 2021 +0200 76.3 @@ -67,6 +67,9 @@ 76.4 #if HAVE_LINUX_FALLOC_H 76.5 #include <linux/falloc.h> 76.6 #endif 76.7 +#ifdef HAVE_PTHREAD 76.8 +#include <pthread.h> 76.9 +#endif 76.10 76.11 #if defined(__linux__) && defined(_IO) && !defined(BLKROGET) 76.12 #define BLKROGET _IO(0x12, 94) /* Get read-only status (0 = read_write). */ 76.13 @@ -107,11 +110,58 @@ 76.14 struct unix_cache cache[CACHE_SIZE]; 76.15 void *bounce; 76.16 struct struct_io_stats io_stats; 76.17 +#ifdef HAVE_PTHREAD 76.18 + pthread_mutex_t cache_mutex; 76.19 + pthread_mutex_t bounce_mutex; 76.20 + pthread_mutex_t stats_mutex; 76.21 +#endif 76.22 }; 76.23 76.24 #define IS_ALIGNED(n, align) ((((uintptr_t) n) & \ 76.25 ((uintptr_t) ((align)-1))) == 0) 76.26 76.27 +typedef enum lock_kind { 76.28 + CACHE_MTX, BOUNCE_MTX, STATS_MTX 76.29 +} kind_t; 76.30 + 76.31 +#ifdef HAVE_PTHREAD 76.32 +static inline pthread_mutex_t *get_mutex(struct unix_private_data *data, 76.33 + kind_t kind) 76.34 +{ 76.35 + if (data->flags & IO_FLAG_THREADS) { 76.36 + switch (kind) { 76.37 + case CACHE_MTX: 76.38 + return &data->cache_mutex; 76.39 + case BOUNCE_MTX: 76.40 + return &data->bounce_mutex; 76.41 + case STATS_MTX: 76.42 + return &data->stats_mutex; 76.43 + } 76.44 + } 76.45 + return NULL; 76.46 +} 76.47 +#endif 76.48 + 76.49 +static inline void mutex_lock(struct unix_private_data *data, kind_t kind) 76.50 +{ 76.51 +#ifdef HAVE_PTHREAD 76.52 + pthread_mutex_t *mtx = get_mutex(data,kind); 76.53 + 76.54 + if (mtx) 76.55 + pthread_mutex_lock(mtx); 76.56 +#endif 76.57 +} 76.58 + 76.59 +static inline void mutex_unlock(struct unix_private_data *data, kind_t kind) 76.60 +{ 76.61 +#ifdef HAVE_PTHREAD 76.62 + pthread_mutex_t *mtx = get_mutex(data,kind); 76.63 + 76.64 + if (mtx) 76.65 + pthread_mutex_unlock(mtx); 76.66 +#endif 76.67 +} 76.68 + 76.69 static errcode_t unix_get_stats(io_channel channel, io_stats *stats) 76.70 { 76.71 errcode_t retval = 0; 76.72 @@ -122,8 +172,11 @@ 76.73 data = (struct unix_private_data *) channel->private_data; 76.74 EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL); 76.75 76.76 - if (stats) 76.77 + if (stats) { 76.78 + mutex_lock(data, STATS_MTX); 76.79 *stats = &data->io_stats; 76.80 + mutex_unlock(data, STATS_MTX); 76.81 + } 76.82 76.83 return retval; 76.84 } 76.85 @@ -165,23 +218,23 @@ 76.86 int actual = 0; 76.87 unsigned char *buf = bufv; 76.88 ssize_t really_read = 0; 76.89 + unsigned long long aligned_blk; 76.90 + int align_size, offset; 76.91 76.92 - size = (count < 0) ? -count : count * channel->block_size; 76.93 + size = (count < 0) ? -count : (ext2_loff_t) count * channel->block_size; 76.94 + mutex_lock(data, STATS_MTX); 76.95 data->io_stats.bytes_read += size; 76.96 + mutex_unlock(data, STATS_MTX); 76.97 location = ((ext2_loff_t) block * channel->block_size) + data->offset; 76.98 76.99 - if (data->flags & IO_FLAG_FORCE_BOUNCE) { 76.100 - if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) { 76.101 - retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.102 - goto error_out; 76.103 - } 76.104 + if (data->flags & IO_FLAG_FORCE_BOUNCE) 76.105 goto bounce_read; 76.106 - } 76.107 76.108 #ifdef HAVE_PREAD64 76.109 /* Try an aligned pread */ 76.110 if ((channel->align == 0) || 76.111 (IS_ALIGNED(buf, channel->align) && 76.112 + IS_ALIGNED(location, channel->align) && 76.113 IS_ALIGNED(size, channel->align))) { 76.114 actual = pread64(data->dev, buf, size, location); 76.115 if (actual == size) 76.116 @@ -193,6 +246,7 @@ 76.117 if ((sizeof(off_t) >= sizeof(ext2_loff_t)) && 76.118 ((channel->align == 0) || 76.119 (IS_ALIGNED(buf, channel->align) && 76.120 + IS_ALIGNED(location, channel->align) && 76.121 IS_ALIGNED(size, channel->align)))) { 76.122 actual = pread(data->dev, buf, size, location); 76.123 if (actual == size) 76.124 @@ -201,13 +255,15 @@ 76.125 } 76.126 #endif /* HAVE_PREAD */ 76.127 76.128 - if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) { 76.129 - retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.130 - goto error_out; 76.131 - } 76.132 if ((channel->align == 0) || 76.133 (IS_ALIGNED(buf, channel->align) && 76.134 + IS_ALIGNED(location, channel->align) && 76.135 IS_ALIGNED(size, channel->align))) { 76.136 + mutex_lock(data, BOUNCE_MTX); 76.137 + if (ext2fs_llseek(data->dev, location, SEEK_SET) < 0) { 76.138 + retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.139 + goto error_unlock; 76.140 + } 76.141 actual = read(data->dev, buf, size); 76.142 if (actual != size) { 76.143 short_read: 76.144 @@ -216,9 +272,9 @@ 76.145 actual = 0; 76.146 } else 76.147 retval = EXT2_ET_SHORT_READ; 76.148 - goto error_out; 76.149 + goto error_unlock; 76.150 } 76.151 - return 0; 76.152 + goto success_unlock; 76.153 } 76.154 76.155 #ifdef ALIGN_DEBUG 76.156 @@ -231,24 +287,48 @@ 76.157 * to the O_DIRECT rules, so we need to do this the hard way... 76.158 */ 76.159 bounce_read: 76.160 + if (channel->align == 0) 76.161 + channel->align = 1; 76.162 + if ((channel->block_size > channel->align) && 76.163 + (channel->block_size % channel->align) == 0) 76.164 + align_size = channel->block_size; 76.165 + else 76.166 + align_size = channel->align; 76.167 + aligned_blk = location / align_size; 76.168 + offset = location % align_size; 76.169 + 76.170 + mutex_lock(data, BOUNCE_MTX); 76.171 + if (ext2fs_llseek(data->dev, aligned_blk * align_size, SEEK_SET) < 0) { 76.172 + retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.173 + goto error_unlock; 76.174 + } 76.175 while (size > 0) { 76.176 - actual = read(data->dev, data->bounce, channel->block_size); 76.177 - if (actual != channel->block_size) { 76.178 + actual = read(data->dev, data->bounce, align_size); 76.179 + if (actual != align_size) { 76.180 + mutex_unlock(data, BOUNCE_MTX); 76.181 actual = really_read; 76.182 buf -= really_read; 76.183 size += really_read; 76.184 goto short_read; 76.185 } 76.186 actual = size; 76.187 - if (size > channel->block_size) 76.188 - actual = channel->block_size; 76.189 - memcpy(buf, data->bounce, actual); 76.190 + if (actual > align_size) 76.191 + actual = align_size; 76.192 + actual -= offset; 76.193 + memcpy(buf, data->bounce + offset, actual); 76.194 + 76.195 really_read += actual; 76.196 size -= actual; 76.197 buf += actual; 76.198 + offset = 0; 76.199 + aligned_blk++; 76.200 } 76.201 +success_unlock: 76.202 + mutex_unlock(data, BOUNCE_MTX); 76.203 return 0; 76.204 76.205 +error_unlock: 76.206 + mutex_unlock(data, BOUNCE_MTX); 76.207 error_out: 76.208 if (actual >= 0 && actual < size) 76.209 memset((char *) buf+actual, 0, size-actual); 76.210 @@ -268,6 +348,8 @@ 76.211 int actual = 0; 76.212 errcode_t retval; 76.213 const unsigned char *buf = bufv; 76.214 + unsigned long long aligned_blk; 76.215 + int align_size, offset; 76.216 76.217 if (count == 1) 76.218 size = channel->block_size; 76.219 @@ -275,24 +357,22 @@ 76.220 if (count < 0) 76.221 size = -count; 76.222 else 76.223 - size = count * channel->block_size; 76.224 + size = (ext2_loff_t) count * channel->block_size; 76.225 } 76.226 + mutex_lock(data, STATS_MTX); 76.227 data->io_stats.bytes_written += size; 76.228 + mutex_unlock(data, STATS_MTX); 76.229 76.230 location = ((ext2_loff_t) block * channel->block_size) + data->offset; 76.231 76.232 - if (data->flags & IO_FLAG_FORCE_BOUNCE) { 76.233 - if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) { 76.234 - retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.235 - goto error_out; 76.236 - } 76.237 + if (data->flags & IO_FLAG_FORCE_BOUNCE) 76.238 goto bounce_write; 76.239 - } 76.240 76.241 #ifdef HAVE_PWRITE64 76.242 /* Try an aligned pwrite */ 76.243 if ((channel->align == 0) || 76.244 (IS_ALIGNED(buf, channel->align) && 76.245 + IS_ALIGNED(location, channel->align) && 76.246 IS_ALIGNED(size, channel->align))) { 76.247 actual = pwrite64(data->dev, buf, size, location); 76.248 if (actual == size) 76.249 @@ -303,6 +383,7 @@ 76.250 if ((sizeof(off_t) >= sizeof(ext2_loff_t)) && 76.251 ((channel->align == 0) || 76.252 (IS_ALIGNED(buf, channel->align) && 76.253 + IS_ALIGNED(location, channel->align) && 76.254 IS_ALIGNED(size, channel->align)))) { 76.255 actual = pwrite(data->dev, buf, size, location); 76.256 if (actual == size) 76.257 @@ -310,15 +391,17 @@ 76.258 } 76.259 #endif /* HAVE_PWRITE */ 76.260 76.261 - if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) { 76.262 - retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.263 - goto error_out; 76.264 - } 76.265 - 76.266 if ((channel->align == 0) || 76.267 (IS_ALIGNED(buf, channel->align) && 76.268 + IS_ALIGNED(location, channel->align) && 76.269 IS_ALIGNED(size, channel->align))) { 76.270 + mutex_lock(data, BOUNCE_MTX); 76.271 + if (ext2fs_llseek(data->dev, location, SEEK_SET) < 0) { 76.272 + retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.273 + goto error_out; 76.274 + } 76.275 actual = write(data->dev, buf, size); 76.276 + mutex_unlock(data, BOUNCE_MTX); 76.277 if (actual < 0) { 76.278 retval = errno; 76.279 goto error_out; 76.280 @@ -340,40 +423,64 @@ 76.281 * to the O_DIRECT rules, so we need to do this the hard way... 76.282 */ 76.283 bounce_write: 76.284 + if (channel->align == 0) 76.285 + channel->align = 1; 76.286 + if ((channel->block_size > channel->align) && 76.287 + (channel->block_size % channel->align) == 0) 76.288 + align_size = channel->block_size; 76.289 + else 76.290 + align_size = channel->align; 76.291 + aligned_blk = location / align_size; 76.292 + offset = location % align_size; 76.293 + 76.294 while (size > 0) { 76.295 - if (size < channel->block_size) { 76.296 + int actual_w; 76.297 + 76.298 + mutex_lock(data, BOUNCE_MTX); 76.299 + if (size < align_size || offset) { 76.300 + if (ext2fs_llseek(data->dev, aligned_blk * align_size, 76.301 + SEEK_SET) < 0) { 76.302 + retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.303 + goto error_unlock; 76.304 + } 76.305 actual = read(data->dev, data->bounce, 76.306 - channel->block_size); 76.307 - if (actual != channel->block_size) { 76.308 + align_size); 76.309 + if (actual != align_size) { 76.310 if (actual < 0) { 76.311 retval = errno; 76.312 - goto error_out; 76.313 + goto error_unlock; 76.314 } 76.315 memset((char *) data->bounce + actual, 0, 76.316 - channel->block_size - actual); 76.317 + align_size - actual); 76.318 } 76.319 } 76.320 actual = size; 76.321 - if (size > channel->block_size) 76.322 - actual = channel->block_size; 76.323 - memcpy(data->bounce, buf, actual); 76.324 - if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) { 76.325 + if (actual > align_size) 76.326 + actual = align_size; 76.327 + actual -= offset; 76.328 + memcpy(((char *)data->bounce) + offset, buf, actual); 76.329 + if (ext2fs_llseek(data->dev, aligned_blk * align_size, SEEK_SET) < 0) { 76.330 retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; 76.331 - goto error_out; 76.332 + goto error_unlock; 76.333 } 76.334 - actual = write(data->dev, data->bounce, channel->block_size); 76.335 - if (actual < 0) { 76.336 + actual_w = write(data->dev, data->bounce, align_size); 76.337 + mutex_unlock(data, BOUNCE_MTX); 76.338 + if (actual_w < 0) { 76.339 retval = errno; 76.340 goto error_out; 76.341 } 76.342 - if (actual != channel->block_size) 76.343 + if (actual_w != align_size) 76.344 goto short_write; 76.345 size -= actual; 76.346 buf += actual; 76.347 location += actual; 76.348 + aligned_blk++; 76.349 + offset = 0; 76.350 } 76.351 return 0; 76.352 76.353 +error_unlock: 76.354 + mutex_unlock(data, BOUNCE_MTX); 76.355 error_out: 76.356 if (channel->write_error) 76.357 retval = (channel->write_error)(channel, block, count, buf, 76.358 @@ -481,24 +588,28 @@ 76.359 cache->access_time = ++data->access_time; 76.360 } 76.361 76.362 +#define FLUSH_INVALIDATE 0x01 76.363 +#define FLUSH_NOLOCK 0x02 76.364 + 76.365 /* 76.366 * Flush all of the blocks in the cache 76.367 */ 76.368 static errcode_t flush_cached_blocks(io_channel channel, 76.369 struct unix_private_data *data, 76.370 - int invalidate) 76.371 - 76.372 + int flags) 76.373 { 76.374 struct unix_cache *cache; 76.375 errcode_t retval, retval2; 76.376 int i; 76.377 76.378 retval2 = 0; 76.379 + if ((flags & FLUSH_NOLOCK) == 0) 76.380 + mutex_lock(data, CACHE_MTX); 76.381 for (i=0, cache = data->cache; i < CACHE_SIZE; i++, cache++) { 76.382 if (!cache->in_use) 76.383 continue; 76.384 76.385 - if (invalidate) 76.386 + if (flags & FLUSH_INVALIDATE) 76.387 cache->in_use = 0; 76.388 76.389 if (!cache->dirty) 76.390 @@ -511,6 +622,8 @@ 76.391 else 76.392 cache->dirty = 0; 76.393 } 76.394 + if ((flags & FLUSH_NOLOCK) == 0) 76.395 + mutex_unlock(data, CACHE_MTX); 76.396 return retval2; 76.397 } 76.398 #endif /* NO_IO_CACHE */ 76.399 @@ -597,6 +710,7 @@ 76.400 io->read_error = 0; 76.401 io->write_error = 0; 76.402 io->refcount = 1; 76.403 + io->flags = 0; 76.404 76.405 memset(data, 0, sizeof(struct unix_private_data)); 76.406 data->magic = EXT2_ET_MAGIC_UNIX_IO_CHANNEL; 76.407 @@ -704,6 +818,25 @@ 76.408 } 76.409 } 76.410 #endif 76.411 +#ifdef HAVE_PTHREAD 76.412 + if (flags & IO_FLAG_THREADS) { 76.413 + io->flags |= CHANNEL_FLAGS_THREADS; 76.414 + retval = pthread_mutex_init(&data->cache_mutex, NULL); 76.415 + if (retval) 76.416 + goto cleanup; 76.417 + retval = pthread_mutex_init(&data->bounce_mutex, NULL); 76.418 + if (retval) { 76.419 + pthread_mutex_destroy(&data->cache_mutex); 76.420 + goto cleanup; 76.421 + } 76.422 + retval = pthread_mutex_init(&data->stats_mutex, NULL); 76.423 + if (retval) { 76.424 + pthread_mutex_destroy(&data->cache_mutex); 76.425 + pthread_mutex_destroy(&data->bounce_mutex); 76.426 + goto cleanup; 76.427 + } 76.428 + } 76.429 +#endif 76.430 *channel = io; 76.431 return 0; 76.432 76.433 @@ -733,7 +866,7 @@ 76.434 #if defined(HAVE_FCNTL) 76.435 fd_flags = fcntl(fd, F_GETFD); 76.436 if (fd_flags == -1) 76.437 - return -EBADF; 76.438 + return EBADF; 76.439 76.440 flags = 0; 76.441 if (fd_flags & O_RDWR) 76.442 @@ -796,6 +929,13 @@ 76.443 if (close(data->dev) < 0) 76.444 retval = errno; 76.445 free_cache(data); 76.446 +#ifdef HAVE_PTHREAD 76.447 + if (data->flags & IO_FLAG_THREADS) { 76.448 + pthread_mutex_destroy(&data->cache_mutex); 76.449 + pthread_mutex_destroy(&data->bounce_mutex); 76.450 + pthread_mutex_destroy(&data->stats_mutex); 76.451 + } 76.452 +#endif 76.453 76.454 ext2fs_free_mem(&channel->private_data); 76.455 if (channel->name) 76.456 @@ -807,24 +947,27 @@ 76.457 static errcode_t unix_set_blksize(io_channel channel, int blksize) 76.458 { 76.459 struct unix_private_data *data; 76.460 - errcode_t retval; 76.461 + errcode_t retval = 0; 76.462 76.463 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); 76.464 data = (struct unix_private_data *) channel->private_data; 76.465 EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL); 76.466 76.467 if (channel->block_size != blksize) { 76.468 + mutex_lock(data, CACHE_MTX); 76.469 + mutex_lock(data, BOUNCE_MTX); 76.470 #ifndef NO_IO_CACHE 76.471 - if ((retval = flush_cached_blocks(channel, data, 0))) 76.472 + if ((retval = flush_cached_blocks(channel, data, FLUSH_NOLOCK))) 76.473 return retval; 76.474 #endif 76.475 76.476 channel->block_size = blksize; 76.477 free_cache(data); 76.478 - if ((retval = alloc_cache(channel, data))) 76.479 - return retval; 76.480 + retval = alloc_cache(channel, data); 76.481 + mutex_unlock(data, BOUNCE_MTX); 76.482 + mutex_unlock(data, CACHE_MTX); 76.483 } 76.484 - return 0; 76.485 + return retval; 76.486 } 76.487 76.488 static errcode_t unix_read_blk64(io_channel channel, unsigned long long block, 76.489 @@ -832,7 +975,7 @@ 76.490 { 76.491 struct unix_private_data *data; 76.492 struct unix_cache *cache, *reuse[READ_DIRECT_SIZE]; 76.493 - errcode_t retval; 76.494 + errcode_t retval = 0; 76.495 char *cp; 76.496 int i, j; 76.497 76.498 @@ -843,6 +986,8 @@ 76.499 #ifdef NO_IO_CACHE 76.500 return raw_read_blk(channel, data, block, count, buf); 76.501 #else 76.502 + if (data->flags & IO_FLAG_NOCACHE) 76.503 + return raw_read_blk(channel, data, block, count, buf); 76.504 /* 76.505 * If we're doing an odd-sized read or a very large read, 76.506 * flush out the cache and then do a direct read. 76.507 @@ -854,6 +999,7 @@ 76.508 } 76.509 76.510 cp = buf; 76.511 + mutex_lock(data, CACHE_MTX); 76.512 while (count > 0) { 76.513 /* If it's in the cache, use it! */ 76.514 if ((cache = find_cached_block(data, block, &reuse[0]))) { 76.515 @@ -876,10 +1022,11 @@ 76.516 if ((retval = raw_read_blk(channel, data, block, 1, 76.517 cache->buf))) { 76.518 cache->in_use = 0; 76.519 - return retval; 76.520 + break; 76.521 } 76.522 memcpy(cp, cache->buf, channel->block_size); 76.523 - return 0; 76.524 + retval = 0; 76.525 + break; 76.526 } 76.527 76.528 /* 76.529 @@ -893,7 +1040,7 @@ 76.530 printf("Reading %d blocks starting at %lu\n", i, block); 76.531 #endif 76.532 if ((retval = raw_read_blk(channel, data, block, i, cp))) 76.533 - return retval; 76.534 + break; 76.535 76.536 /* Save the results in the cache */ 76.537 for (j=0; j < i; j++) { 76.538 @@ -904,7 +1051,8 @@ 76.539 cp += channel->block_size; 76.540 } 76.541 } 76.542 - return 0; 76.543 + mutex_unlock(data, CACHE_MTX); 76.544 + return retval; 76.545 #endif /* NO_IO_CACHE */ 76.546 } 76.547 76.548 @@ -930,12 +1078,15 @@ 76.549 #ifdef NO_IO_CACHE 76.550 return raw_write_blk(channel, data, block, count, buf); 76.551 #else 76.552 + if (data->flags & IO_FLAG_NOCACHE) 76.553 + return raw_write_blk(channel, data, block, count, buf); 76.554 /* 76.555 * If we're doing an odd-sized write or a very large write, 76.556 * flush out the cache completely and then do a direct write. 76.557 */ 76.558 if (count < 0 || count > WRITE_DIRECT_SIZE) { 76.559 - if ((retval = flush_cached_blocks(channel, data, 1))) 76.560 + if ((retval = flush_cached_blocks(channel, data, 76.561 + FLUSH_INVALIDATE))) 76.562 return retval; 76.563 return raw_write_blk(channel, data, block, count, buf); 76.564 } 76.565 @@ -950,6 +1101,7 @@ 76.566 retval = raw_write_blk(channel, data, block, count, buf); 76.567 76.568 cp = buf; 76.569 + mutex_lock(data, CACHE_MTX); 76.570 while (count > 0) { 76.571 cache = find_cached_block(data, block, &reuse); 76.572 if (!cache) { 76.573 @@ -963,6 +1115,7 @@ 76.574 block++; 76.575 cp += channel->block_size; 76.576 } 76.577 + mutex_unlock(data, CACHE_MTX); 76.578 return retval; 76.579 #endif /* NO_IO_CACHE */ 76.580 } 76.581 @@ -1013,7 +1166,7 @@ 76.582 /* 76.583 * Flush out the cache completely 76.584 */ 76.585 - if ((retval = flush_cached_blocks(channel, data, 1))) 76.586 + if ((retval = flush_cached_blocks(channel, data, FLUSH_INVALIDATE))) 76.587 return retval; 76.588 #endif 76.589 76.590 @@ -1056,6 +1209,7 @@ 76.591 { 76.592 struct unix_private_data *data; 76.593 unsigned long long tmp; 76.594 + errcode_t retval; 76.595 char *end; 76.596 76.597 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); 76.598 @@ -1074,6 +1228,20 @@ 76.599 return EXT2_ET_INVALID_ARGUMENT; 76.600 return 0; 76.601 } 76.602 + if (!strcmp(option, "cache")) { 76.603 + if (!arg) 76.604 + return EXT2_ET_INVALID_ARGUMENT; 76.605 + if (!strcmp(arg, "on")) { 76.606 + data->flags &= ~IO_FLAG_NOCACHE; 76.607 + return 0; 76.608 + } 76.609 + if (!strcmp(arg, "off")) { 76.610 + retval = flush_cached_blocks(channel, data, 0); 76.611 + data->flags |= IO_FLAG_NOCACHE; 76.612 + return retval; 76.613 + } 76.614 + return EXT2_ET_INVALID_ARGUMENT; 76.615 + } 76.616 return EXT2_ET_INVALID_ARGUMENT; 76.617 } 76.618 76.619 @@ -1126,6 +1294,31 @@ 76.620 return EXT2_ET_UNIMPLEMENTED; 76.621 } 76.622 76.623 +/* 76.624 + * If we know about ZERO_RANGE, try that before we try PUNCH_HOLE because 76.625 + * ZERO_RANGE doesn't unmap preallocated blocks. We prefer fallocate because 76.626 + * it always invalidates page cache, and libext2fs requires that reads after 76.627 + * ZERO_RANGE return zeroes. 76.628 + */ 76.629 +static int __unix_zeroout(int fd, off_t offset, off_t len) 76.630 +{ 76.631 + int ret = -1; 76.632 + 76.633 +#if defined(HAVE_FALLOCATE) && defined(FALLOC_FL_ZERO_RANGE) 76.634 + ret = fallocate(fd, FALLOC_FL_ZERO_RANGE, offset, len); 76.635 + if (ret == 0) 76.636 + return 0; 76.637 +#endif 76.638 +#if defined(HAVE_FALLOCATE) && defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE) 76.639 + ret = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 76.640 + offset, len); 76.641 + if (ret == 0) 76.642 + return 0; 76.643 +#endif 76.644 + errno = EOPNOTSUPP; 76.645 + return ret; 76.646 +} 76.647 + 76.648 /* parameters might not be used if OS doesn't support zeroout */ 76.649 #if __GNUC_PREREQ (4, 6) 76.650 #pragma GCC diagnostic push 76.651 @@ -1144,10 +1337,7 @@ 76.652 if (safe_getenv("UNIX_IO_NOZEROOUT")) 76.653 goto unimplemented; 76.654 76.655 - if (channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE) { 76.656 - /* Not implemented until the BLKZEROOUT mess is fixed */ 76.657 - goto unimplemented; 76.658 - } else { 76.659 + if (!(channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE)) { 76.660 /* Regular file, try to use truncate/punch/zero. */ 76.661 struct stat statbuf; 76.662 76.663 @@ -1167,26 +1357,11 @@ 76.664 if (ret) 76.665 goto err; 76.666 } 76.667 -#if defined(HAVE_FALLOCATE) && (defined(FALLOC_FL_ZERO_RANGE) || \ 76.668 - (defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE))) 76.669 -#if defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE) 76.670 - ret = fallocate(data->dev, 76.671 - FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 76.672 - (off_t)(block) * channel->block_size + data->offset, 76.673 - (off_t)(count) * channel->block_size); 76.674 - if (ret == 0) 76.675 - goto err; 76.676 -#endif 76.677 -#ifdef FALLOC_FL_ZERO_RANGE 76.678 - ret = fallocate(data->dev, 76.679 - FALLOC_FL_ZERO_RANGE, 76.680 - (off_t)(block) * channel->block_size + data->offset, 76.681 - (off_t)(count) * channel->block_size); 76.682 -#endif 76.683 -#else 76.684 - goto unimplemented; 76.685 -#endif /* HAVE_FALLOCATE && (ZERO_RANGE || (PUNCH_HOLE && KEEP_SIZE)) */ 76.686 } 76.687 + 76.688 + ret = __unix_zeroout(data->dev, 76.689 + (off_t)(block) * channel->block_size + data->offset, 76.690 + (off_t)(count) * channel->block_size); 76.691 err: 76.692 if (ret < 0) { 76.693 if (errno == EOPNOTSUPP)
77.1 --- a/libext2fs/lib/libext2fs/unlink.c Sat Oct 02 23:57:02 2021 +0200 77.2 +++ b/libext2fs/lib/libext2fs/unlink.c Sat Oct 09 23:28:01 2021 +0200 77.3 @@ -49,7 +49,7 @@ 77.4 if (strncmp(ls->name, dirent->name, ext2fs_dirent_name_len(dirent))) 77.5 return 0; 77.6 } 77.7 - if (ls->inode) { 77.8 + if (!(ls->flags & EXT2FS_UNLINK_FORCE) && ls->inode) { 77.9 if (dirent->inode != ls->inode) 77.10 return 0; 77.11 } else { 77.12 @@ -70,7 +70,7 @@ 77.13 #endif 77.14 errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, 77.15 const char *name, ext2_ino_t ino, 77.16 - int flags EXT2FS_ATTR((unused))) 77.17 + int flags) 77.18 { 77.19 errcode_t retval; 77.20 struct link_struct ls; 77.21 @@ -86,7 +86,7 @@ 77.22 ls.name = name; 77.23 ls.namelen = name ? strlen(name) : 0; 77.24 ls.inode = ino; 77.25 - ls.flags = 0; 77.26 + ls.flags = flags; 77.27 ls.done = 0; 77.28 ls.prev = 0; 77.29
78.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 78.2 +++ b/libext2fs/lib/libext2fs/utf8data.h Sat Oct 09 23:28:01 2021 +0200 78.3 @@ -0,0 +1,4109 @@ 78.4 +/* This file is generated code, do not edit. */ 78.5 +#ifndef __INCLUDED_FROM_UTF8NORM_C__ 78.6 +#error Only nls_utf8-norm.c should include this file. 78.7 +#endif 78.8 + 78.9 +static const unsigned int utf8vers = 0xc0100; 78.10 + 78.11 +static const unsigned int utf8agetab[] = { 78.12 + 0, 78.13 + 0x10100, 78.14 + 0x20000, 78.15 + 0x20100, 78.16 + 0x30000, 78.17 + 0x30100, 78.18 + 0x30200, 78.19 + 0x40000, 78.20 + 0x40100, 78.21 + 0x50000, 78.22 + 0x50100, 78.23 + 0x50200, 78.24 + 0x60000, 78.25 + 0x60100, 78.26 + 0x60200, 78.27 + 0x60300, 78.28 + 0x70000, 78.29 + 0x80000, 78.30 + 0x90000, 78.31 + 0xa0000, 78.32 + 0xb0000, 78.33 + 0xc0000, 78.34 + 0xc0100 78.35 +}; 78.36 + 78.37 +static const struct utf8data utf8nfdicfdata[] = { 78.38 + { 0, 0 }, 78.39 + { 0x10100, 0 }, 78.40 + { 0x20000, 0 }, 78.41 + { 0x20100, 0 }, 78.42 + { 0x30000, 0 }, 78.43 + { 0x30100, 0 }, 78.44 + { 0x30200, 1792 }, 78.45 + { 0x40000, 3200 }, 78.46 + { 0x40100, 3200 }, 78.47 + { 0x50000, 3200 }, 78.48 + { 0x50100, 3200 }, 78.49 + { 0x50200, 3200 }, 78.50 + { 0x60000, 3200 }, 78.51 + { 0x60100, 3200 }, 78.52 + { 0x60200, 3200 }, 78.53 + { 0x60300, 3200 }, 78.54 + { 0x70000, 3200 }, 78.55 + { 0x80000, 3200 }, 78.56 + { 0x90000, 3200 }, 78.57 + { 0xa0000, 3200 }, 78.58 + { 0xb0000, 3200 }, 78.59 + { 0xc0000, 3200 }, 78.60 + { 0xc0100, 3200 } 78.61 +}; 78.62 + 78.63 +static const struct utf8data utf8nfdidata[] = { 78.64 + { 0, 896 }, 78.65 + { 0x10100, 896 }, 78.66 + { 0x20000, 896 }, 78.67 + { 0x20100, 896 }, 78.68 + { 0x30000, 896 }, 78.69 + { 0x30100, 896 }, 78.70 + { 0x30200, 2496 }, 78.71 + { 0x40000, 20736 }, 78.72 + { 0x40100, 20736 }, 78.73 + { 0x50000, 20736 }, 78.74 + { 0x50100, 20736 }, 78.75 + { 0x50200, 20736 }, 78.76 + { 0x60000, 20736 }, 78.77 + { 0x60100, 20736 }, 78.78 + { 0x60200, 20736 }, 78.79 + { 0x60300, 20736 }, 78.80 + { 0x70000, 20736 }, 78.81 + { 0x80000, 20736 }, 78.82 + { 0x90000, 20736 }, 78.83 + { 0xa0000, 20736 }, 78.84 + { 0xb0000, 20736 }, 78.85 + { 0xc0000, 20736 }, 78.86 + { 0xc0100, 20736 } 78.87 +}; 78.88 + 78.89 +static const unsigned char utf8data[64256] = { 78.90 + /* nfdicf_30100 */ 78.91 + 0xd7,0x07,0x66,0x84,0x0c,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x99,0x1a,0xe3,0x63,0x15, 78.92 + 0xe2,0x4c,0x0e,0xc1,0xe0,0x4e,0x0d,0xcf,0x86,0x65,0x2d,0x0d,0x01,0x00,0xd4,0xb8, 78.93 + 0xd3,0x27,0xe2,0x89,0xa3,0xe1,0xce,0x35,0xe0,0x2c,0x22,0xcf,0x86,0xc5,0xe4,0x15, 78.94 + 0x6d,0xe3,0x60,0x68,0xe2,0xf6,0x65,0xe1,0x29,0x65,0xe0,0xee,0x64,0xcf,0x86,0xe5, 78.95 + 0xb3,0x64,0x64,0x96,0x64,0x0b,0x00,0xd2,0x0e,0xe1,0xb5,0x3c,0xe0,0xba,0xa3,0xcf, 78.96 + 0x86,0xcf,0x06,0x01,0x00,0xd1,0x0c,0xe0,0x1e,0xa9,0xcf,0x86,0xcf,0x06,0x02,0xff, 78.97 + 0xff,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01, 78.98 + 0x00,0xe4,0xe1,0x45,0xe3,0x3b,0x45,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x87,0xad, 78.99 + 0xd0,0x21,0xcf,0x86,0xe5,0x81,0xaa,0xe4,0x00,0xaa,0xe3,0xbf,0xa9,0xe2,0x9e,0xa9, 78.100 + 0xe1,0x8d,0xa9,0x10,0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4, 78.101 + 0x00,0xcf,0x86,0xe5,0x63,0xac,0xd4,0x19,0xe3,0xa2,0xab,0xe2,0x81,0xab,0xe1,0x70, 78.102 + 0xab,0x10,0x08,0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0xe3, 78.103 + 0x09,0xac,0xe2,0xe8,0xab,0xe1,0xd7,0xab,0x10,0x08,0x01,0xff,0xe7,0xb8,0xb7,0x00, 78.104 + 0x01,0xff,0xe9,0x9b,0xbb,0x00,0x83,0xe2,0x19,0xfa,0xe1,0xf2,0xf6,0xe0,0x6f,0xf5, 78.105 + 0xcf,0x86,0xd5,0x31,0xc4,0xe3,0x54,0x4e,0xe2,0xf5,0x4c,0xe1,0xa4,0xcc,0xe0,0x9c, 78.106 + 0x4b,0xcf,0x86,0xe5,0x8e,0x49,0xe4,0xaf,0x46,0xe3,0x11,0xbd,0xe2,0x68,0xbc,0xe1, 78.107 + 0x43,0xbc,0xe0,0x1c,0xbc,0xcf,0x86,0xe5,0xe9,0xbb,0x94,0x07,0x63,0xd4,0xbb,0x07, 78.108 + 0x00,0x07,0x00,0xe4,0xdb,0xf4,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b, 78.109 + 0xe1,0xea,0xe1,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0xd9,0xe2,0xcf,0x86, 78.110 + 0xe5,0x9e,0xe2,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0xd9,0xe2,0xcf,0x06, 78.111 + 0x13,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x74,0xf4,0xe3,0x5d,0xf3, 78.112 + 0xd2,0xa0,0xe1,0x13,0xe7,0xd0,0x21,0xcf,0x86,0xe5,0x14,0xe4,0xe4,0x90,0xe3,0xe3, 78.113 + 0x4e,0xe3,0xe2,0x2d,0xe3,0xe1,0x1b,0xe3,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00, 78.114 + 0x05,0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0x70,0xe5,0xe3,0x2f,0xe5, 78.115 + 0xe2,0x0e,0xe5,0xe1,0xfd,0xe4,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff, 78.116 + 0xe5,0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0xf7,0xe5,0xe1,0xe6,0xe5,0x10,0x09, 78.117 + 0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0x17, 78.118 + 0xe6,0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac, 78.119 + 0x88,0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0x5d,0xe6,0xd2,0x14,0xe1,0x2c,0xe6, 78.120 + 0x10,0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1, 78.121 + 0x38,0xe6,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00, 78.122 + 0xd1,0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x8d,0xeb,0xd4,0x19,0xe3,0xc6,0xea,0xe2,0xa4, 78.123 + 0xea,0xe1,0x93,0xea,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5, 78.124 + 0xb7,0x00,0xd3,0x18,0xe2,0x10,0xeb,0xe1,0xff,0xea,0x10,0x09,0x05,0xff,0xf0,0xa3, 78.125 + 0xbd,0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0x28,0xeb,0x10, 78.126 + 0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10, 78.127 + 0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08, 78.128 + 0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0x2a, 78.129 + 0xed,0xd4,0x1a,0xe3,0x62,0xec,0xe2,0x48,0xec,0xe1,0x35,0xec,0x10,0x08,0x05,0xff, 78.130 + 0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0xaa,0xec, 78.131 + 0xe1,0x98,0xec,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3, 78.132 + 0x00,0xd2,0x13,0xe1,0xc6,0xec,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff, 78.133 + 0xe7,0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05, 78.134 + 0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05, 78.135 + 0xff,0xe7,0xaa,0xae,0x00,0xe0,0xdc,0xef,0xcf,0x86,0xd5,0x1d,0xe4,0x51,0xee,0xe3, 78.136 + 0x0d,0xee,0xe2,0xeb,0xed,0xe1,0xda,0xed,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f, 78.137 + 0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0xf8,0xee,0xe2,0xd4,0xee,0xe1, 78.138 + 0xc3,0xee,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00, 78.139 + 0xd3,0x18,0xe2,0x43,0xef,0xe1,0x32,0xef,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1, 78.140 + 0x00,0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0x5b,0xef,0x10,0x08,0x05, 78.141 + 0xff,0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05, 78.142 + 0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8, 78.143 + 0x9e,0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.144 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.145 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.146 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.147 + /* nfdi_30100 */ 78.148 + 0x57,0x04,0x01,0x00,0xc6,0xd5,0x16,0xe4,0xc2,0x59,0xe3,0xfb,0x54,0xe2,0x74,0x4f, 78.149 + 0xc1,0xe0,0xa0,0x4d,0xcf,0x86,0x65,0x84,0x4d,0x01,0x00,0xd4,0xb8,0xd3,0x27,0xe2, 78.150 + 0x0c,0xa0,0xe1,0xdf,0x8d,0xe0,0x39,0x71,0xcf,0x86,0xc5,0xe4,0x98,0x69,0xe3,0xe3, 78.151 + 0x64,0xe2,0x79,0x62,0xe1,0xac,0x61,0xe0,0x71,0x61,0xcf,0x86,0xe5,0x36,0x61,0x64, 78.152 + 0x19,0x61,0x0b,0x00,0xd2,0x0e,0xe1,0xc2,0xa0,0xe0,0x3d,0xa0,0xcf,0x86,0xcf,0x06, 78.153 + 0x01,0x00,0xd1,0x0c,0xe0,0xa1,0xa5,0xcf,0x86,0xcf,0x06,0x02,0xff,0xff,0xd0,0x08, 78.154 + 0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,0xe4,0x9e, 78.155 + 0xb6,0xe3,0x18,0xae,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x0a,0xaa,0xd0,0x21,0xcf, 78.156 + 0x86,0xe5,0x04,0xa7,0xe4,0x83,0xa6,0xe3,0x42,0xa6,0xe2,0x21,0xa6,0xe1,0x10,0xa6, 78.157 + 0x10,0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,0x00,0xcf,0x86, 78.158 + 0xe5,0xe6,0xa8,0xd4,0x19,0xe3,0x25,0xa8,0xe2,0x04,0xa8,0xe1,0xf3,0xa7,0x10,0x08, 78.159 + 0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0xe3,0x8c,0xa8,0xe2, 78.160 + 0x6b,0xa8,0xe1,0x5a,0xa8,0x10,0x08,0x01,0xff,0xe7,0xb8,0xb7,0x00,0x01,0xff,0xe9, 78.161 + 0x9b,0xbb,0x00,0x83,0xe2,0x9c,0xf6,0xe1,0x75,0xf3,0xe0,0xf2,0xf1,0xcf,0x86,0xd5, 78.162 + 0x31,0xc4,0xe3,0x6d,0xcc,0xe2,0x46,0xca,0xe1,0x27,0xc9,0xe0,0xb7,0xbf,0xcf,0x86, 78.163 + 0xe5,0xaa,0xbb,0xe4,0xa3,0xba,0xe3,0x94,0xb9,0xe2,0xeb,0xb8,0xe1,0xc6,0xb8,0xe0, 78.164 + 0x9f,0xb8,0xcf,0x86,0xe5,0x6c,0xb8,0x94,0x07,0x63,0x57,0xb8,0x07,0x00,0x07,0x00, 78.165 + 0xe4,0x5e,0xf1,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,0xe1,0x6d,0xde, 78.166 + 0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0x5c,0xdf,0xcf,0x86,0xe5,0x21,0xdf, 78.167 + 0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0x5c,0xdf,0xcf,0x06,0x13,0x00,0xcf, 78.168 + 0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0xf7,0xf0,0xe3,0xe0,0xef,0xd2,0xa0,0xe1, 78.169 + 0x96,0xe3,0xd0,0x21,0xcf,0x86,0xe5,0x97,0xe0,0xe4,0x13,0xe0,0xe3,0xd1,0xdf,0xe2, 78.170 + 0xb0,0xdf,0xe1,0x9e,0xdf,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,0xff,0xe4, 78.171 + 0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0xf3,0xe1,0xe3,0xb2,0xe1,0xe2,0x91,0xe1, 78.172 + 0xe1,0x80,0xe1,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,0x93,0xb6, 78.173 + 0x00,0xd4,0x34,0xd3,0x18,0xe2,0x7a,0xe2,0xe1,0x69,0xe2,0x10,0x09,0x05,0xff,0xf0, 78.174 + 0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0x9a,0xe2,0x91,0x11, 78.175 + 0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,0x88,0x00,0x05, 78.176 + 0xff,0xe5,0xac,0xbe,0x00,0xe3,0xe0,0xe2,0xd2,0x14,0xe1,0xaf,0xe2,0x10,0x08,0x05, 78.177 + 0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,0xbb,0xe2,0x10, 78.178 + 0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0xd1,0xd5,0xd0, 78.179 + 0x6a,0xcf,0x86,0xe5,0x10,0xe8,0xd4,0x19,0xe3,0x49,0xe7,0xe2,0x27,0xe7,0xe1,0x16, 78.180 + 0xe7,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,0xb7,0x00,0xd3, 78.181 + 0x18,0xe2,0x93,0xe7,0xe1,0x82,0xe7,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,0x9e,0x00, 78.182 + 0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xab,0xe7,0x10,0x08,0x05,0xff, 78.183 + 0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,0x08,0x05,0xff, 78.184 + 0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,0xff,0xe7, 78.185 + 0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0xad,0xe9,0xd4,0x1a, 78.186 + 0xe3,0xe5,0xe8,0xe2,0xcb,0xe8,0xe1,0xb8,0xe8,0x10,0x08,0x05,0xff,0xe7,0x9b,0xb4, 78.187 + 0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0x2d,0xe9,0xe1,0x1b,0xe9, 78.188 + 0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,0xd2,0x13, 78.189 + 0xe1,0x49,0xe9,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,0xe7,0xa9,0x80, 78.190 + 0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,0xff,0xf0,0xa5, 78.191 + 0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,0xff,0xe7,0xaa, 78.192 + 0xae,0x00,0xe0,0x5f,0xec,0xcf,0x86,0xd5,0x1d,0xe4,0xd4,0xea,0xe3,0x90,0xea,0xe2, 78.193 + 0x6e,0xea,0xe1,0x5d,0xea,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,0x05,0xff, 78.194 + 0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0x7b,0xeb,0xe2,0x57,0xeb,0xe1,0x46,0xeb,0x10, 78.195 + 0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,0xd3,0x18,0xe2, 78.196 + 0xc6,0xeb,0xe1,0xb5,0xeb,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00,0x05,0xff, 78.197 + 0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0xde,0xeb,0x10,0x08,0x05,0xff,0xe8,0x9a, 78.198 + 0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9c, 78.199 + 0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,0x86,0x00, 78.200 + 0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.201 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.202 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.203 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.204 + /* nfdicf_30200 */ 78.205 + 0xd7,0x07,0x66,0x84,0x05,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x99,0x13,0xe3,0x63,0x0e, 78.206 + 0xe2,0x4c,0x07,0xc1,0xe0,0x4e,0x06,0xcf,0x86,0x65,0x2d,0x06,0x01,0x00,0xd4,0x2a, 78.207 + 0xe3,0xd0,0x35,0xe2,0x88,0x9c,0xe1,0xcd,0x2e,0xe0,0x2b,0x1b,0xcf,0x86,0xc5,0xe4, 78.208 + 0x14,0x66,0xe3,0x5f,0x61,0xe2,0xf5,0x5e,0xe1,0x28,0x5e,0xe0,0xed,0x5d,0xcf,0x86, 78.209 + 0xe5,0xb2,0x5d,0x64,0x95,0x5d,0x0b,0x00,0x83,0xe2,0xa7,0xf3,0xe1,0x80,0xf0,0xe0, 78.210 + 0xfd,0xee,0xcf,0x86,0xd5,0x31,0xc4,0xe3,0xe2,0x47,0xe2,0x83,0x46,0xe1,0x32,0xc6, 78.211 + 0xe0,0x2a,0x45,0xcf,0x86,0xe5,0x1c,0x43,0xe4,0x3d,0x40,0xe3,0x9f,0xb6,0xe2,0xf6, 78.212 + 0xb5,0xe1,0xd1,0xb5,0xe0,0xaa,0xb5,0xcf,0x86,0xe5,0x77,0xb5,0x94,0x07,0x63,0x62, 78.213 + 0xb5,0x07,0x00,0x07,0x00,0xe4,0x69,0xee,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00, 78.214 + 0xd2,0x0b,0xe1,0x78,0xdb,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0x67,0xdc, 78.215 + 0xcf,0x86,0xe5,0x2c,0xdc,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0x67,0xdc, 78.216 + 0xcf,0x06,0x13,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x02,0xee,0xe3, 78.217 + 0xeb,0xec,0xd2,0xa0,0xe1,0xa1,0xe0,0xd0,0x21,0xcf,0x86,0xe5,0xa2,0xdd,0xe4,0x1e, 78.218 + 0xdd,0xe3,0xdc,0xdc,0xe2,0xbb,0xdc,0xe1,0xa9,0xdc,0x10,0x08,0x05,0xff,0xe4,0xb8, 78.219 + 0xbd,0x00,0x05,0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0xfe,0xde,0xe3, 78.220 + 0xbd,0xde,0xe2,0x9c,0xde,0xe1,0x8b,0xde,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00, 78.221 + 0x05,0xff,0xe5,0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0x85,0xdf,0xe1,0x74,0xdf, 78.222 + 0x10,0x09,0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00, 78.223 + 0xe2,0xa5,0xdf,0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff, 78.224 + 0xe5,0xac,0x88,0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0xeb,0xdf,0xd2,0x14,0xe1, 78.225 + 0xba,0xdf,0x10,0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98, 78.226 + 0x00,0xe1,0xc6,0xdf,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0, 78.227 + 0xa2,0x00,0xd1,0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x1b,0xe5,0xd4,0x19,0xe3,0x54,0xe4, 78.228 + 0xe2,0x32,0xe4,0xe1,0x21,0xe4,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff, 78.229 + 0xe6,0xb5,0xb7,0x00,0xd3,0x18,0xe2,0x9e,0xe4,0xe1,0x8d,0xe4,0x10,0x09,0x05,0xff, 78.230 + 0xf0,0xa3,0xbd,0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xb6, 78.231 + 0xe4,0x10,0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1, 78.232 + 0x11,0x10,0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00, 78.233 + 0x10,0x08,0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86, 78.234 + 0xe5,0xb8,0xe6,0xd4,0x1a,0xe3,0xf0,0xe5,0xe2,0xd6,0xe5,0xe1,0xc3,0xe5,0x10,0x08, 78.235 + 0x05,0xff,0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2, 78.236 + 0x38,0xe6,0xe1,0x26,0xe6,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4, 78.237 + 0x83,0xa3,0x00,0xd2,0x13,0xe1,0x54,0xe6,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00, 78.238 + 0x05,0xff,0xe7,0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc, 78.239 + 0x00,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7, 78.240 + 0x00,0x05,0xff,0xe7,0xaa,0xae,0x00,0xe0,0x6a,0xe9,0xcf,0x86,0xd5,0x1d,0xe4,0xdf, 78.241 + 0xe7,0xe3,0x9b,0xe7,0xe2,0x79,0xe7,0xe1,0x68,0xe7,0x10,0x09,0x05,0xff,0xf0,0xa3, 78.242 + 0x8d,0x9f,0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0x86,0xe8,0xe2,0x62, 78.243 + 0xe8,0xe1,0x51,0xe8,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f, 78.244 + 0x8a,0x00,0xd3,0x18,0xe2,0xd1,0xe8,0xe1,0xc0,0xe8,0x10,0x09,0x05,0xff,0xf0,0xa6, 78.245 + 0xbe,0xb1,0x00,0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0xe9,0xe8,0x10, 78.246 + 0x08,0x05,0xff,0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10, 78.247 + 0x08,0x05,0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05, 78.248 + 0xff,0xe8,0x9e,0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00, 78.249 + /* nfdi_30200 */ 78.250 + 0x57,0x04,0x01,0x00,0xc6,0xd5,0x16,0xe4,0x82,0x53,0xe3,0xbb,0x4e,0xe2,0x34,0x49, 78.251 + 0xc1,0xe0,0x60,0x47,0xcf,0x86,0x65,0x44,0x47,0x01,0x00,0xd4,0x2a,0xe3,0x1c,0x9a, 78.252 + 0xe2,0xcb,0x99,0xe1,0x9e,0x87,0xe0,0xf8,0x6a,0xcf,0x86,0xc5,0xe4,0x57,0x63,0xe3, 78.253 + 0xa2,0x5e,0xe2,0x38,0x5c,0xe1,0x6b,0x5b,0xe0,0x30,0x5b,0xcf,0x86,0xe5,0xf5,0x5a, 78.254 + 0x64,0xd8,0x5a,0x0b,0x00,0x83,0xe2,0xea,0xf0,0xe1,0xc3,0xed,0xe0,0x40,0xec,0xcf, 78.255 + 0x86,0xd5,0x31,0xc4,0xe3,0xbb,0xc6,0xe2,0x94,0xc4,0xe1,0x75,0xc3,0xe0,0x05,0xba, 78.256 + 0xcf,0x86,0xe5,0xf8,0xb5,0xe4,0xf1,0xb4,0xe3,0xe2,0xb3,0xe2,0x39,0xb3,0xe1,0x14, 78.257 + 0xb3,0xe0,0xed,0xb2,0xcf,0x86,0xe5,0xba,0xb2,0x94,0x07,0x63,0xa5,0xb2,0x07,0x00, 78.258 + 0x07,0x00,0xe4,0xac,0xeb,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd2,0x0b,0xe1, 78.259 + 0xbb,0xd8,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd1,0x0e,0xe0,0xaa,0xd9,0xcf,0x86,0xe5, 78.260 + 0x6f,0xd9,0xcf,0x06,0x11,0x00,0xd0,0x0b,0xcf,0x86,0xe5,0xaa,0xd9,0xcf,0x06,0x13, 78.261 + 0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x45,0xeb,0xe3,0x2e,0xea,0xd2, 78.262 + 0xa0,0xe1,0xe4,0xdd,0xd0,0x21,0xcf,0x86,0xe5,0xe5,0xda,0xe4,0x61,0xda,0xe3,0x1f, 78.263 + 0xda,0xe2,0xfe,0xd9,0xe1,0xec,0xd9,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05, 78.264 + 0xff,0xe4,0xb8,0xb8,0x00,0xcf,0x86,0xd5,0x1c,0xe4,0x41,0xdc,0xe3,0x00,0xdc,0xe2, 78.265 + 0xdf,0xdb,0xe1,0xce,0xdb,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5, 78.266 + 0x93,0xb6,0x00,0xd4,0x34,0xd3,0x18,0xe2,0xc8,0xdc,0xe1,0xb7,0xdc,0x10,0x09,0x05, 78.267 + 0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa,0x00,0xe2,0xe8,0xdc, 78.268 + 0x91,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0x8d,0xaa,0x00,0x05,0xff,0xe5,0xac,0x88, 78.269 + 0x00,0x05,0xff,0xe5,0xac,0xbe,0x00,0xe3,0x2e,0xdd,0xd2,0x14,0xe1,0xfd,0xdc,0x10, 78.270 + 0x08,0x05,0xff,0xe5,0xaf,0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0xe1,0x09, 78.271 + 0xdd,0x10,0x08,0x05,0xff,0xe5,0xbc,0xb3,0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0xd1, 78.272 + 0xd5,0xd0,0x6a,0xcf,0x86,0xe5,0x5e,0xe2,0xd4,0x19,0xe3,0x97,0xe1,0xe2,0x75,0xe1, 78.273 + 0xe1,0x64,0xe1,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff,0xe6,0xb5,0xb7, 78.274 + 0x00,0xd3,0x18,0xe2,0xe1,0xe1,0xe1,0xd0,0xe1,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd, 78.275 + 0x9e,0x00,0x05,0xff,0xf0,0xa3,0xbe,0x8e,0x00,0xd2,0x13,0xe1,0xf9,0xe1,0x10,0x08, 78.276 + 0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff,0xe7,0x81,0xb7,0x00,0xd1,0x11,0x10,0x08, 78.277 + 0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0,0xa4,0x89,0xa3,0x00,0x10,0x08,0x05, 78.278 + 0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xe4,0x8e,0xab,0x00,0xcf,0x86,0xe5,0xfb,0xe3, 78.279 + 0xd4,0x1a,0xe3,0x33,0xe3,0xe2,0x19,0xe3,0xe1,0x06,0xe3,0x10,0x08,0x05,0xff,0xe7, 78.280 + 0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0xd3,0x16,0xe2,0x7b,0xe3,0xe1, 78.281 + 0x69,0xe3,0x10,0x08,0x05,0xff,0xe7,0xa3,0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00, 78.282 + 0xd2,0x13,0xe1,0x97,0xe3,0x10,0x08,0x05,0xff,0xe4,0x84,0xaf,0x00,0x05,0xff,0xe7, 78.283 + 0xa9,0x80,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5,0xbc,0x00,0x05,0xff, 78.284 + 0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x05,0xff, 78.285 + 0xe7,0xaa,0xae,0x00,0xe0,0xad,0xe6,0xcf,0x86,0xd5,0x1d,0xe4,0x22,0xe5,0xe3,0xde, 78.286 + 0xe4,0xe2,0xbc,0xe4,0xe1,0xab,0xe4,0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00, 78.287 + 0x05,0xff,0xe4,0x8f,0x95,0x00,0xd4,0x19,0xe3,0xc9,0xe5,0xe2,0xa5,0xe5,0xe1,0x94, 78.288 + 0xe5,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f,0x8a,0x00,0xd3, 78.289 + 0x18,0xe2,0x14,0xe6,0xe1,0x03,0xe6,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00, 78.290 + 0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0xd2,0x13,0xe1,0x2c,0xe6,0x10,0x08,0x05,0xff, 78.291 + 0xe8,0x9a,0x88,0x00,0x05,0xff,0xe8,0x9c,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05,0xff, 78.292 + 0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8,0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e, 78.293 + 0x86,0x00,0x05,0xff,0xe4,0xb5,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.294 + /* nfdicf_c0100 */ 78.295 + 0xd7,0xb0,0x56,0x04,0x01,0x00,0x95,0xa8,0xd4,0x5e,0xd3,0x2e,0xd2,0x16,0xd1,0x0a, 78.296 + 0x10,0x04,0x01,0x00,0x01,0xff,0x61,0x00,0x10,0x06,0x01,0xff,0x62,0x00,0x01,0xff, 78.297 + 0x63,0x00,0xd1,0x0c,0x10,0x06,0x01,0xff,0x64,0x00,0x01,0xff,0x65,0x00,0x10,0x06, 78.298 + 0x01,0xff,0x66,0x00,0x01,0xff,0x67,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x06,0x01,0xff, 78.299 + 0x68,0x00,0x01,0xff,0x69,0x00,0x10,0x06,0x01,0xff,0x6a,0x00,0x01,0xff,0x6b,0x00, 78.300 + 0xd1,0x0c,0x10,0x06,0x01,0xff,0x6c,0x00,0x01,0xff,0x6d,0x00,0x10,0x06,0x01,0xff, 78.301 + 0x6e,0x00,0x01,0xff,0x6f,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x06,0x01,0xff, 78.302 + 0x70,0x00,0x01,0xff,0x71,0x00,0x10,0x06,0x01,0xff,0x72,0x00,0x01,0xff,0x73,0x00, 78.303 + 0xd1,0x0c,0x10,0x06,0x01,0xff,0x74,0x00,0x01,0xff,0x75,0x00,0x10,0x06,0x01,0xff, 78.304 + 0x76,0x00,0x01,0xff,0x77,0x00,0x92,0x16,0xd1,0x0c,0x10,0x06,0x01,0xff,0x78,0x00, 78.305 + 0x01,0xff,0x79,0x00,0x10,0x06,0x01,0xff,0x7a,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 78.306 + 0xc6,0xe5,0xf9,0x14,0xe4,0x6f,0x0d,0xe3,0x39,0x08,0xe2,0x22,0x01,0xc1,0xd0,0x24, 78.307 + 0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x07,0x63,0xd8,0x43,0x01,0x00,0x93,0x13,0x52, 78.308 + 0x04,0x01,0x00,0x91,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xce,0xbc,0x00,0x01,0x00, 78.309 + 0x01,0x00,0xcf,0x86,0xe5,0xb3,0x44,0xd4,0x7f,0xd3,0x3f,0xd2,0x20,0xd1,0x10,0x10, 78.310 + 0x08,0x01,0xff,0x61,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x81,0x00,0x10,0x08,0x01, 78.311 + 0xff,0x61,0xcc,0x82,0x00,0x01,0xff,0x61,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01, 78.312 + 0xff,0x61,0xcc,0x88,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x10,0x07,0x01,0xff,0xc3, 78.313 + 0xa6,0x00,0x01,0xff,0x63,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.314 + 0x65,0xcc,0x80,0x00,0x01,0xff,0x65,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x65,0xcc, 78.315 + 0x82,0x00,0x01,0xff,0x65,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc, 78.316 + 0x80,0x00,0x01,0xff,0x69,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x82,0x00, 78.317 + 0x01,0xff,0x69,0xcc,0x88,0x00,0xd3,0x3b,0xd2,0x1f,0xd1,0x0f,0x10,0x07,0x01,0xff, 78.318 + 0xc3,0xb0,0x00,0x01,0xff,0x6e,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x80, 78.319 + 0x00,0x01,0xff,0x6f,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x82, 78.320 + 0x00,0x01,0xff,0x6f,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x88,0x00,0x01, 78.321 + 0x00,0xd2,0x1f,0xd1,0x0f,0x10,0x07,0x01,0xff,0xc3,0xb8,0x00,0x01,0xff,0x75,0xcc, 78.322 + 0x80,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x82,0x00, 78.323 + 0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x88,0x00,0x01,0xff,0x79,0xcc,0x81,0x00, 78.324 + 0x10,0x07,0x01,0xff,0xc3,0xbe,0x00,0x01,0xff,0x73,0x73,0x00,0xe1,0xd4,0x03,0xe0, 78.325 + 0xeb,0x01,0xcf,0x86,0xd5,0xfb,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.326 + 0x01,0xff,0x61,0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x84,0x00,0x10,0x08,0x01,0xff, 78.327 + 0x61,0xcc,0x86,0x00,0x01,0xff,0x61,0xcc,0x86,0x00,0xd1,0x10,0x10,0x08,0x01,0xff, 78.328 + 0x61,0xcc,0xa8,0x00,0x01,0xff,0x61,0xcc,0xa8,0x00,0x10,0x08,0x01,0xff,0x63,0xcc, 78.329 + 0x81,0x00,0x01,0xff,0x63,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.330 + 0x63,0xcc,0x82,0x00,0x01,0xff,0x63,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x63,0xcc, 78.331 + 0x87,0x00,0x01,0xff,0x63,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x63,0xcc, 78.332 + 0x8c,0x00,0x01,0xff,0x63,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0x8c,0x00, 78.333 + 0x01,0xff,0x64,0xcc,0x8c,0x00,0xd3,0x3b,0xd2,0x1b,0xd1,0x0b,0x10,0x07,0x01,0xff, 78.334 + 0xc4,0x91,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x84,0x00,0x01,0xff,0x65, 78.335 + 0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x86,0x00,0x01,0xff,0x65, 78.336 + 0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x87,0x00,0x01,0xff,0x65,0xcc,0x87, 78.337 + 0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0xa8,0x00,0x01,0xff,0x65, 78.338 + 0xcc,0xa8,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x8c,0x00,0x01,0xff,0x65,0xcc,0x8c, 78.339 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x82,0x00,0x01,0xff,0x67,0xcc,0x82, 78.340 + 0x00,0x10,0x08,0x01,0xff,0x67,0xcc,0x86,0x00,0x01,0xff,0x67,0xcc,0x86,0x00,0xd4, 78.341 + 0x7b,0xd3,0x3b,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x87,0x00,0x01, 78.342 + 0xff,0x67,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x67,0xcc,0xa7,0x00,0x01,0xff,0x67, 78.343 + 0xcc,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x68,0xcc,0x82,0x00,0x01,0xff,0x68, 78.344 + 0xcc,0x82,0x00,0x10,0x07,0x01,0xff,0xc4,0xa7,0x00,0x01,0x00,0xd2,0x20,0xd1,0x10, 78.345 + 0x10,0x08,0x01,0xff,0x69,0xcc,0x83,0x00,0x01,0xff,0x69,0xcc,0x83,0x00,0x10,0x08, 78.346 + 0x01,0xff,0x69,0xcc,0x84,0x00,0x01,0xff,0x69,0xcc,0x84,0x00,0xd1,0x10,0x10,0x08, 78.347 + 0x01,0xff,0x69,0xcc,0x86,0x00,0x01,0xff,0x69,0xcc,0x86,0x00,0x10,0x08,0x01,0xff, 78.348 + 0x69,0xcc,0xa8,0x00,0x01,0xff,0x69,0xcc,0xa8,0x00,0xd3,0x37,0xd2,0x17,0xd1,0x0c, 78.349 + 0x10,0x08,0x01,0xff,0x69,0xcc,0x87,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xc4,0xb3, 78.350 + 0x00,0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6a,0xcc,0x82,0x00,0x01,0xff,0x6a, 78.351 + 0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x6b,0xcc,0xa7,0x00,0x01,0xff,0x6b,0xcc,0xa7, 78.352 + 0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x6c,0xcc,0x81,0x00,0x10, 78.353 + 0x08,0x01,0xff,0x6c,0xcc,0x81,0x00,0x01,0xff,0x6c,0xcc,0xa7,0x00,0xd1,0x10,0x10, 78.354 + 0x08,0x01,0xff,0x6c,0xcc,0xa7,0x00,0x01,0xff,0x6c,0xcc,0x8c,0x00,0x10,0x08,0x01, 78.355 + 0xff,0x6c,0xcc,0x8c,0x00,0x01,0xff,0xc5,0x80,0x00,0xcf,0x86,0xd5,0xed,0xd4,0x72, 78.356 + 0xd3,0x37,0xd2,0x17,0xd1,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xc5,0x82,0x00,0x10, 78.357 + 0x04,0x01,0x00,0x01,0xff,0x6e,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e, 78.358 + 0xcc,0x81,0x00,0x01,0xff,0x6e,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xa7, 78.359 + 0x00,0x01,0xff,0x6e,0xcc,0x8c,0x00,0xd2,0x1b,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e, 78.360 + 0xcc,0x8c,0x00,0x01,0xff,0xca,0xbc,0x6e,0x00,0x10,0x07,0x01,0xff,0xc5,0x8b,0x00, 78.361 + 0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc, 78.362 + 0x84,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x86,0x00,0x01,0xff,0x6f,0xcc,0x86,0x00, 78.363 + 0xd3,0x3b,0xd2,0x1b,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8b,0x00,0x01,0xff, 78.364 + 0x6f,0xcc,0x8b,0x00,0x10,0x07,0x01,0xff,0xc5,0x93,0x00,0x01,0x00,0xd1,0x10,0x10, 78.365 + 0x08,0x01,0xff,0x72,0xcc,0x81,0x00,0x01,0xff,0x72,0xcc,0x81,0x00,0x10,0x08,0x01, 78.366 + 0xff,0x72,0xcc,0xa7,0x00,0x01,0xff,0x72,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10, 78.367 + 0x08,0x01,0xff,0x72,0xcc,0x8c,0x00,0x01,0xff,0x72,0xcc,0x8c,0x00,0x10,0x08,0x01, 78.368 + 0xff,0x73,0xcc,0x81,0x00,0x01,0xff,0x73,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01, 78.369 + 0xff,0x73,0xcc,0x82,0x00,0x01,0xff,0x73,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x73, 78.370 + 0xcc,0xa7,0x00,0x01,0xff,0x73,0xcc,0xa7,0x00,0xd4,0x7b,0xd3,0x3b,0xd2,0x20,0xd1, 78.371 + 0x10,0x10,0x08,0x01,0xff,0x73,0xcc,0x8c,0x00,0x01,0xff,0x73,0xcc,0x8c,0x00,0x10, 78.372 + 0x08,0x01,0xff,0x74,0xcc,0xa7,0x00,0x01,0xff,0x74,0xcc,0xa7,0x00,0xd1,0x10,0x10, 78.373 + 0x08,0x01,0xff,0x74,0xcc,0x8c,0x00,0x01,0xff,0x74,0xcc,0x8c,0x00,0x10,0x07,0x01, 78.374 + 0xff,0xc5,0xa7,0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc, 78.375 + 0x83,0x00,0x01,0xff,0x75,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x84,0x00, 78.376 + 0x01,0xff,0x75,0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x86,0x00, 78.377 + 0x01,0xff,0x75,0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x8a,0x00,0x01,0xff, 78.378 + 0x75,0xcc,0x8a,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc, 78.379 + 0x8b,0x00,0x01,0xff,0x75,0xcc,0x8b,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xa8,0x00, 78.380 + 0x01,0xff,0x75,0xcc,0xa8,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x82,0x00, 78.381 + 0x01,0xff,0x77,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x79,0xcc,0x82,0x00,0x01,0xff, 78.382 + 0x79,0xcc,0x82,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x79,0xcc,0x88,0x00, 78.383 + 0x01,0xff,0x7a,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x81,0x00,0x01,0xff, 78.384 + 0x7a,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x87,0x00,0x01,0xff, 78.385 + 0x7a,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x8c,0x00,0x01,0xff,0x73,0x00, 78.386 + 0xe0,0x65,0x01,0xcf,0x86,0xd5,0xb4,0xd4,0x5a,0xd3,0x2f,0xd2,0x16,0xd1,0x0b,0x10, 78.387 + 0x04,0x01,0x00,0x01,0xff,0xc9,0x93,0x00,0x10,0x07,0x01,0xff,0xc6,0x83,0x00,0x01, 78.388 + 0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc6,0x85,0x00,0x01,0x00,0x10,0x07,0x01,0xff, 78.389 + 0xc9,0x94,0x00,0x01,0xff,0xc6,0x88,0x00,0xd2,0x19,0xd1,0x0b,0x10,0x04,0x01,0x00, 78.390 + 0x01,0xff,0xc9,0x96,0x00,0x10,0x07,0x01,0xff,0xc9,0x97,0x00,0x01,0xff,0xc6,0x8c, 78.391 + 0x00,0x51,0x04,0x01,0x00,0x10,0x07,0x01,0xff,0xc7,0x9d,0x00,0x01,0xff,0xc9,0x99, 78.392 + 0x00,0xd3,0x32,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01,0xff,0xc9,0x9b,0x00,0x01,0xff, 78.393 + 0xc6,0x92,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xc9,0xa0,0x00,0xd1,0x0b,0x10,0x07, 78.394 + 0x01,0xff,0xc9,0xa3,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xc9,0xa9,0x00,0x01,0xff, 78.395 + 0xc9,0xa8,0x00,0xd2,0x0f,0x91,0x0b,0x10,0x07,0x01,0xff,0xc6,0x99,0x00,0x01,0x00, 78.396 + 0x01,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xc9,0xaf,0x00,0x01,0xff,0xc9,0xb2,0x00, 78.397 + 0x10,0x04,0x01,0x00,0x01,0xff,0xc9,0xb5,0x00,0xd4,0x5d,0xd3,0x34,0xd2,0x1b,0xd1, 78.398 + 0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x10, 78.399 + 0x07,0x01,0xff,0xc6,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc6,0xa5, 78.400 + 0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xca,0x80,0x00,0x01,0xff,0xc6,0xa8,0x00,0xd2, 78.401 + 0x0f,0x91,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xca,0x83,0x00,0x01,0x00,0xd1,0x0b, 78.402 + 0x10,0x07,0x01,0xff,0xc6,0xad,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xca,0x88,0x00, 78.403 + 0x01,0xff,0x75,0xcc,0x9b,0x00,0xd3,0x33,0xd2,0x1d,0xd1,0x0f,0x10,0x08,0x01,0xff, 78.404 + 0x75,0xcc,0x9b,0x00,0x01,0xff,0xca,0x8a,0x00,0x10,0x07,0x01,0xff,0xca,0x8b,0x00, 78.405 + 0x01,0xff,0xc6,0xb4,0x00,0xd1,0x0b,0x10,0x04,0x01,0x00,0x01,0xff,0xc6,0xb6,0x00, 78.406 + 0x10,0x04,0x01,0x00,0x01,0xff,0xca,0x92,0x00,0xd2,0x0f,0x91,0x0b,0x10,0x07,0x01, 78.407 + 0xff,0xc6,0xb9,0x00,0x01,0x00,0x01,0x00,0x91,0x0b,0x10,0x07,0x01,0xff,0xc6,0xbd, 78.408 + 0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd4,0xd4,0x44,0xd3,0x16,0x52,0x04,0x01, 78.409 + 0x00,0x51,0x07,0x01,0xff,0xc7,0x86,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xc7,0x89, 78.410 + 0x00,0xd2,0x12,0x91,0x0b,0x10,0x07,0x01,0xff,0xc7,0x89,0x00,0x01,0x00,0x01,0xff, 78.411 + 0xc7,0x8c,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x61,0xcc,0x8c,0x00,0x10, 78.412 + 0x08,0x01,0xff,0x61,0xcc,0x8c,0x00,0x01,0xff,0x69,0xcc,0x8c,0x00,0xd3,0x46,0xd2, 78.413 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8c,0x00,0x01,0xff,0x6f,0xcc,0x8c, 78.414 + 0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x8c,0x00,0xd1, 78.415 + 0x12,0x10,0x08,0x01,0xff,0x75,0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84, 78.416 + 0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,0x00,0x01,0xff,0x75,0xcc,0x88, 78.417 + 0xcc,0x81,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x81, 78.418 + 0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x8c,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88, 78.419 + 0xcc,0x8c,0x00,0x01,0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0xd1,0x0e,0x10,0x0a,0x01, 78.420 + 0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0x01,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x88, 78.421 + 0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x88,0xcc,0x84,0x00,0xd4,0x87,0xd3,0x41,0xd2, 78.422 + 0x26,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x87,0xcc,0x84,0x00,0x01,0xff,0x61, 78.423 + 0xcc,0x87,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc3,0xa6,0xcc,0x84,0x00,0x01,0xff, 78.424 + 0xc3,0xa6,0xcc,0x84,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xc7,0xa5,0x00,0x01,0x00, 78.425 + 0x10,0x08,0x01,0xff,0x67,0xcc,0x8c,0x00,0x01,0xff,0x67,0xcc,0x8c,0x00,0xd2,0x20, 78.426 + 0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0x8c,0x00,0x01,0xff,0x6b,0xcc,0x8c,0x00, 78.427 + 0x10,0x08,0x01,0xff,0x6f,0xcc,0xa8,0x00,0x01,0xff,0x6f,0xcc,0xa8,0x00,0xd1,0x14, 78.428 + 0x10,0x0a,0x01,0xff,0x6f,0xcc,0xa8,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0xa8,0xcc, 78.429 + 0x84,0x00,0x10,0x09,0x01,0xff,0xca,0x92,0xcc,0x8c,0x00,0x01,0xff,0xca,0x92,0xcc, 78.430 + 0x8c,0x00,0xd3,0x38,0xd2,0x1a,0xd1,0x0f,0x10,0x08,0x01,0xff,0x6a,0xcc,0x8c,0x00, 78.431 + 0x01,0xff,0xc7,0xb3,0x00,0x10,0x07,0x01,0xff,0xc7,0xb3,0x00,0x01,0x00,0xd1,0x10, 78.432 + 0x10,0x08,0x01,0xff,0x67,0xcc,0x81,0x00,0x01,0xff,0x67,0xcc,0x81,0x00,0x10,0x07, 78.433 + 0x04,0xff,0xc6,0x95,0x00,0x04,0xff,0xc6,0xbf,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08, 78.434 + 0x04,0xff,0x6e,0xcc,0x80,0x00,0x04,0xff,0x6e,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff, 78.435 + 0x61,0xcc,0x8a,0xcc,0x81,0x00,0x01,0xff,0x61,0xcc,0x8a,0xcc,0x81,0x00,0xd1,0x12, 78.436 + 0x10,0x09,0x01,0xff,0xc3,0xa6,0xcc,0x81,0x00,0x01,0xff,0xc3,0xa6,0xcc,0x81,0x00, 78.437 + 0x10,0x09,0x01,0xff,0xc3,0xb8,0xcc,0x81,0x00,0x01,0xff,0xc3,0xb8,0xcc,0x81,0x00, 78.438 + 0xe2,0x31,0x02,0xe1,0xc3,0x44,0xe0,0xc8,0x01,0xcf,0x86,0xd5,0xfb,0xd4,0x80,0xd3, 78.439 + 0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0x8f,0x00,0x01,0xff,0x61, 78.440 + 0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x61,0xcc,0x91,0x00,0x01,0xff,0x61,0xcc,0x91, 78.441 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x8f,0x00,0x01,0xff,0x65,0xcc,0x8f, 78.442 + 0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x91,0x00,0x01,0xff,0x65,0xcc,0x91,0x00,0xd2, 78.443 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8f,0x00,0x01,0xff,0x69,0xcc,0x8f, 78.444 + 0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x91,0x00,0x01,0xff,0x69,0xcc,0x91,0x00,0xd1, 78.445 + 0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8f,0x00,0x01,0xff,0x6f,0xcc,0x8f,0x00,0x10, 78.446 + 0x08,0x01,0xff,0x6f,0xcc,0x91,0x00,0x01,0xff,0x6f,0xcc,0x91,0x00,0xd3,0x40,0xd2, 78.447 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x72,0xcc,0x8f,0x00,0x01,0xff,0x72,0xcc,0x8f, 78.448 + 0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0x91,0x00,0x01,0xff,0x72,0xcc,0x91,0x00,0xd1, 78.449 + 0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x8f,0x00,0x01,0xff,0x75,0xcc,0x8f,0x00,0x10, 78.450 + 0x08,0x01,0xff,0x75,0xcc,0x91,0x00,0x01,0xff,0x75,0xcc,0x91,0x00,0xd2,0x20,0xd1, 78.451 + 0x10,0x10,0x08,0x04,0xff,0x73,0xcc,0xa6,0x00,0x04,0xff,0x73,0xcc,0xa6,0x00,0x10, 78.452 + 0x08,0x04,0xff,0x74,0xcc,0xa6,0x00,0x04,0xff,0x74,0xcc,0xa6,0x00,0xd1,0x0b,0x10, 78.453 + 0x07,0x04,0xff,0xc8,0x9d,0x00,0x04,0x00,0x10,0x08,0x04,0xff,0x68,0xcc,0x8c,0x00, 78.454 + 0x04,0xff,0x68,0xcc,0x8c,0x00,0xd4,0x79,0xd3,0x31,0xd2,0x16,0xd1,0x0b,0x10,0x07, 78.455 + 0x06,0xff,0xc6,0x9e,0x00,0x07,0x00,0x10,0x07,0x04,0xff,0xc8,0xa3,0x00,0x04,0x00, 78.456 + 0xd1,0x0b,0x10,0x07,0x04,0xff,0xc8,0xa5,0x00,0x04,0x00,0x10,0x08,0x04,0xff,0x61, 78.457 + 0xcc,0x87,0x00,0x04,0xff,0x61,0xcc,0x87,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,0x04, 78.458 + 0xff,0x65,0xcc,0xa7,0x00,0x04,0xff,0x65,0xcc,0xa7,0x00,0x10,0x0a,0x04,0xff,0x6f, 78.459 + 0xcc,0x88,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x88,0xcc,0x84,0x00,0xd1,0x14,0x10, 78.460 + 0x0a,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84, 78.461 + 0x00,0x10,0x08,0x04,0xff,0x6f,0xcc,0x87,0x00,0x04,0xff,0x6f,0xcc,0x87,0x00,0xd3, 78.462 + 0x27,0xe2,0x21,0x43,0xd1,0x14,0x10,0x0a,0x04,0xff,0x6f,0xcc,0x87,0xcc,0x84,0x00, 78.463 + 0x04,0xff,0x6f,0xcc,0x87,0xcc,0x84,0x00,0x10,0x08,0x04,0xff,0x79,0xcc,0x84,0x00, 78.464 + 0x04,0xff,0x79,0xcc,0x84,0x00,0xd2,0x13,0x51,0x04,0x08,0x00,0x10,0x08,0x08,0xff, 78.465 + 0xe2,0xb1,0xa5,0x00,0x08,0xff,0xc8,0xbc,0x00,0xd1,0x0b,0x10,0x04,0x08,0x00,0x08, 78.466 + 0xff,0xc6,0x9a,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0xa6,0x00,0x08,0x00,0xcf,0x86, 78.467 + 0x95,0x5f,0x94,0x5b,0xd3,0x2f,0xd2,0x16,0xd1,0x0b,0x10,0x04,0x08,0x00,0x08,0xff, 78.468 + 0xc9,0x82,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xc6,0x80,0x00,0xd1,0x0e,0x10,0x07, 78.469 + 0x09,0xff,0xca,0x89,0x00,0x09,0xff,0xca,0x8c,0x00,0x10,0x07,0x09,0xff,0xc9,0x87, 78.470 + 0x00,0x09,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x09,0xff,0xc9,0x89,0x00,0x09,0x00, 78.471 + 0x10,0x07,0x09,0xff,0xc9,0x8b,0x00,0x09,0x00,0xd1,0x0b,0x10,0x07,0x09,0xff,0xc9, 78.472 + 0x8d,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xc9,0x8f,0x00,0x09,0x00,0x01,0x00,0x01, 78.473 + 0x00,0xd1,0x8b,0xd0,0x0c,0xcf,0x86,0xe5,0x10,0x43,0x64,0xef,0x42,0x01,0xe6,0xcf, 78.474 + 0x86,0xd5,0x2a,0xe4,0x99,0x43,0xe3,0x7f,0x43,0xd2,0x11,0xe1,0x5e,0x43,0x10,0x07, 78.475 + 0x01,0xff,0xcc,0x80,0x00,0x01,0xff,0xcc,0x81,0x00,0xe1,0x65,0x43,0x10,0x09,0x01, 78.476 + 0xff,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0xce,0xb9,0x00,0xd4,0x0f,0x93,0x0b,0x92, 78.477 + 0x07,0x61,0xab,0x43,0x01,0xea,0x06,0xe6,0x06,0xe6,0xd3,0x2c,0xd2,0x16,0xd1,0x0b, 78.478 + 0x10,0x07,0x0a,0xff,0xcd,0xb1,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,0xcd,0xb3,0x00, 78.479 + 0x0a,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xca,0xb9,0x00,0x01,0x00,0x10,0x07,0x0a, 78.480 + 0xff,0xcd,0xb7,0x00,0x0a,0x00,0xd2,0x07,0x61,0x97,0x43,0x00,0x00,0x51,0x04,0x09, 78.481 + 0x00,0x10,0x06,0x01,0xff,0x3b,0x00,0x10,0xff,0xcf,0xb3,0x00,0xe0,0x31,0x01,0xcf, 78.482 + 0x86,0xd5,0xd3,0xd4,0x5f,0xd3,0x21,0x52,0x04,0x00,0x00,0xd1,0x0d,0x10,0x04,0x01, 78.483 + 0x00,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x81, 78.484 + 0x00,0x01,0xff,0xc2,0xb7,0x00,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb5, 78.485 + 0xcc,0x81,0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb9, 78.486 + 0xcc,0x81,0x00,0x00,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00, 78.487 + 0x00,0x00,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x01,0xff,0xcf,0x89,0xcc, 78.488 + 0x81,0x00,0xd3,0x3c,0xd2,0x20,0xd1,0x12,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x88, 78.489 + 0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0x00,0x10,0x07,0x01,0xff,0xce,0xb2,0x00,0x01, 78.490 + 0xff,0xce,0xb3,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xce,0xb4,0x00,0x01,0xff,0xce, 78.491 + 0xb5,0x00,0x10,0x07,0x01,0xff,0xce,0xb6,0x00,0x01,0xff,0xce,0xb7,0x00,0xd2,0x1c, 78.492 + 0xd1,0x0e,0x10,0x07,0x01,0xff,0xce,0xb8,0x00,0x01,0xff,0xce,0xb9,0x00,0x10,0x07, 78.493 + 0x01,0xff,0xce,0xba,0x00,0x01,0xff,0xce,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff, 78.494 + 0xce,0xbc,0x00,0x01,0xff,0xce,0xbd,0x00,0x10,0x07,0x01,0xff,0xce,0xbe,0x00,0x01, 78.495 + 0xff,0xce,0xbf,0x00,0xe4,0x85,0x43,0xd3,0x35,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01, 78.496 + 0xff,0xcf,0x80,0x00,0x01,0xff,0xcf,0x81,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xcf, 78.497 + 0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xcf,0x84,0x00,0x01,0xff,0xcf,0x85,0x00, 78.498 + 0x10,0x07,0x01,0xff,0xcf,0x86,0x00,0x01,0xff,0xcf,0x87,0x00,0xe2,0x2b,0x43,0xd1, 78.499 + 0x0e,0x10,0x07,0x01,0xff,0xcf,0x88,0x00,0x01,0xff,0xcf,0x89,0x00,0x10,0x09,0x01, 78.500 + 0xff,0xce,0xb9,0xcc,0x88,0x00,0x01,0xff,0xcf,0x85,0xcc,0x88,0x00,0xcf,0x86,0xd5, 78.501 + 0x94,0xd4,0x3c,0xd3,0x13,0x92,0x0f,0x51,0x04,0x01,0x00,0x10,0x07,0x01,0xff,0xcf, 78.502 + 0x83,0x00,0x01,0x00,0x01,0x00,0xd2,0x07,0x61,0x3a,0x43,0x01,0x00,0xd1,0x12,0x10, 78.503 + 0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x10, 78.504 + 0x09,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x0a,0xff,0xcf,0x97,0x00,0xd3,0x2c,0xd2, 78.505 + 0x11,0xe1,0x46,0x43,0x10,0x07,0x01,0xff,0xce,0xb2,0x00,0x01,0xff,0xce,0xb8,0x00, 78.506 + 0xd1,0x10,0x10,0x09,0x01,0xff,0xcf,0x92,0xcc,0x88,0x00,0x01,0xff,0xcf,0x86,0x00, 78.507 + 0x10,0x07,0x01,0xff,0xcf,0x80,0x00,0x04,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x06, 78.508 + 0xff,0xcf,0x99,0x00,0x06,0x00,0x10,0x07,0x01,0xff,0xcf,0x9b,0x00,0x04,0x00,0xd1, 78.509 + 0x0b,0x10,0x07,0x01,0xff,0xcf,0x9d,0x00,0x04,0x00,0x10,0x07,0x01,0xff,0xcf,0x9f, 78.510 + 0x00,0x04,0x00,0xd4,0x58,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf, 78.511 + 0xa1,0x00,0x04,0x00,0x10,0x07,0x01,0xff,0xcf,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10, 78.512 + 0x07,0x01,0xff,0xcf,0xa5,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xcf,0xa7,0x00,0x01, 78.513 + 0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,0xa9,0x00,0x01,0x00,0x10,0x07, 78.514 + 0x01,0xff,0xcf,0xab,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xcf,0xad,0x00, 78.515 + 0x01,0x00,0x10,0x07,0x01,0xff,0xcf,0xaf,0x00,0x01,0x00,0xd3,0x2b,0xd2,0x12,0x91, 78.516 + 0x0e,0x10,0x07,0x01,0xff,0xce,0xba,0x00,0x01,0xff,0xcf,0x81,0x00,0x01,0x00,0xd1, 78.517 + 0x0e,0x10,0x07,0x05,0xff,0xce,0xb8,0x00,0x05,0xff,0xce,0xb5,0x00,0x10,0x04,0x06, 78.518 + 0x00,0x07,0xff,0xcf,0xb8,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x04,0x07,0x00,0x07,0xff, 78.519 + 0xcf,0xb2,0x00,0x10,0x07,0x07,0xff,0xcf,0xbb,0x00,0x07,0x00,0xd1,0x0b,0x10,0x04, 78.520 + 0x08,0x00,0x08,0xff,0xcd,0xbb,0x00,0x10,0x07,0x08,0xff,0xcd,0xbc,0x00,0x08,0xff, 78.521 + 0xcd,0xbd,0x00,0xe3,0xed,0x46,0xe2,0x3d,0x05,0xe1,0x27,0x02,0xe0,0x66,0x01,0xcf, 78.522 + 0x86,0xd5,0xf0,0xd4,0x7e,0xd3,0x40,0xd2,0x22,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0, 78.523 + 0xb5,0xcc,0x80,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x88,0x00,0x10,0x07,0x01,0xff,0xd1, 78.524 + 0x92,0x00,0x01,0xff,0xd0,0xb3,0xcc,0x81,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1, 78.525 + 0x94,0x00,0x01,0xff,0xd1,0x95,0x00,0x10,0x07,0x01,0xff,0xd1,0x96,0x00,0x01,0xff, 78.526 + 0xd1,0x96,0xcc,0x88,0x00,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x98,0x00, 78.527 + 0x01,0xff,0xd1,0x99,0x00,0x10,0x07,0x01,0xff,0xd1,0x9a,0x00,0x01,0xff,0xd1,0x9b, 78.528 + 0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xba,0xcc,0x81,0x00,0x04,0xff,0xd0,0xb8, 78.529 + 0xcc,0x80,0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x86,0x00,0x01,0xff,0xd1,0x9f, 78.530 + 0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd0,0xb0,0x00,0x01,0xff, 78.531 + 0xd0,0xb1,0x00,0x10,0x07,0x01,0xff,0xd0,0xb2,0x00,0x01,0xff,0xd0,0xb3,0x00,0xd1, 78.532 + 0x0e,0x10,0x07,0x01,0xff,0xd0,0xb4,0x00,0x01,0xff,0xd0,0xb5,0x00,0x10,0x07,0x01, 78.533 + 0xff,0xd0,0xb6,0x00,0x01,0xff,0xd0,0xb7,0x00,0xd2,0x1e,0xd1,0x10,0x10,0x07,0x01, 78.534 + 0xff,0xd0,0xb8,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x86,0x00,0x10,0x07,0x01,0xff,0xd0, 78.535 + 0xba,0x00,0x01,0xff,0xd0,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd0,0xbc,0x00, 78.536 + 0x01,0xff,0xd0,0xbd,0x00,0x10,0x07,0x01,0xff,0xd0,0xbe,0x00,0x01,0xff,0xd0,0xbf, 78.537 + 0x00,0xe4,0x25,0x42,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x80, 78.538 + 0x00,0x01,0xff,0xd1,0x81,0x00,0x10,0x07,0x01,0xff,0xd1,0x82,0x00,0x01,0xff,0xd1, 78.539 + 0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x84,0x00,0x01,0xff,0xd1,0x85,0x00, 78.540 + 0x10,0x07,0x01,0xff,0xd1,0x86,0x00,0x01,0xff,0xd1,0x87,0x00,0xd2,0x1c,0xd1,0x0e, 78.541 + 0x10,0x07,0x01,0xff,0xd1,0x88,0x00,0x01,0xff,0xd1,0x89,0x00,0x10,0x07,0x01,0xff, 78.542 + 0xd1,0x8a,0x00,0x01,0xff,0xd1,0x8b,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd1,0x8c, 78.543 + 0x00,0x01,0xff,0xd1,0x8d,0x00,0x10,0x07,0x01,0xff,0xd1,0x8e,0x00,0x01,0xff,0xd1, 78.544 + 0x8f,0x00,0xcf,0x86,0xd5,0x07,0x64,0xcf,0x41,0x01,0x00,0xd4,0x58,0xd3,0x2c,0xd2, 78.545 + 0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xa1,0x00,0x01,0x00,0x10,0x07,0x01,0xff, 78.546 + 0xd1,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xa5,0x00,0x01,0x00, 78.547 + 0x10,0x07,0x01,0xff,0xd1,0xa7,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01, 78.548 + 0xff,0xd1,0xa9,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xab,0x00,0x01,0x00,0xd1, 78.549 + 0x0b,0x10,0x07,0x01,0xff,0xd1,0xad,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xaf, 78.550 + 0x00,0x01,0x00,0xd3,0x33,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xb1,0x00, 78.551 + 0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xb3,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01, 78.552 + 0xff,0xd1,0xb5,0x00,0x01,0x00,0x10,0x09,0x01,0xff,0xd1,0xb5,0xcc,0x8f,0x00,0x01, 78.553 + 0xff,0xd1,0xb5,0xcc,0x8f,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd1,0xb9, 78.554 + 0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xbb,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07, 78.555 + 0x01,0xff,0xd1,0xbd,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd1,0xbf,0x00,0x01,0x00, 78.556 + 0xe0,0x41,0x01,0xcf,0x86,0xd5,0x8e,0xd4,0x36,0xd3,0x11,0xe2,0x91,0x41,0xe1,0x88, 78.557 + 0x41,0x10,0x07,0x01,0xff,0xd2,0x81,0x00,0x01,0x00,0xd2,0x0f,0x51,0x04,0x04,0x00, 78.558 + 0x10,0x07,0x06,0xff,0xd2,0x8b,0x00,0x06,0x00,0xd1,0x0b,0x10,0x07,0x04,0xff,0xd2, 78.559 + 0x8d,0x00,0x04,0x00,0x10,0x07,0x04,0xff,0xd2,0x8f,0x00,0x04,0x00,0xd3,0x2c,0xd2, 78.560 + 0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0x91,0x00,0x01,0x00,0x10,0x07,0x01,0xff, 78.561 + 0xd2,0x93,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0x95,0x00,0x01,0x00, 78.562 + 0x10,0x07,0x01,0xff,0xd2,0x97,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01, 78.563 + 0xff,0xd2,0x99,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0x9b,0x00,0x01,0x00,0xd1, 78.564 + 0x0b,0x10,0x07,0x01,0xff,0xd2,0x9d,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0x9f, 78.565 + 0x00,0x01,0x00,0xd4,0x58,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2, 78.566 + 0xa1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xa3,0x00,0x01,0x00,0xd1,0x0b,0x10, 78.567 + 0x07,0x01,0xff,0xd2,0xa5,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xa7,0x00,0x01, 78.568 + 0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xa9,0x00,0x01,0x00,0x10,0x07, 78.569 + 0x01,0xff,0xd2,0xab,0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xad,0x00, 78.570 + 0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xaf,0x00,0x01,0x00,0xd3,0x2c,0xd2,0x16,0xd1, 78.571 + 0x0b,0x10,0x07,0x01,0xff,0xd2,0xb1,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xb3, 78.572 + 0x00,0x01,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2,0xb5,0x00,0x01,0x00,0x10,0x07, 78.573 + 0x01,0xff,0xd2,0xb7,0x00,0x01,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd2, 78.574 + 0xb9,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xbb,0x00,0x01,0x00,0xd1,0x0b,0x10, 78.575 + 0x07,0x01,0xff,0xd2,0xbd,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xd2,0xbf,0x00,0x01, 78.576 + 0x00,0xcf,0x86,0xd5,0xdc,0xd4,0x5a,0xd3,0x36,0xd2,0x20,0xd1,0x10,0x10,0x07,0x01, 78.577 + 0xff,0xd3,0x8f,0x00,0x01,0xff,0xd0,0xb6,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0, 78.578 + 0xb6,0xcc,0x86,0x00,0x01,0xff,0xd3,0x84,0x00,0xd1,0x0b,0x10,0x04,0x01,0x00,0x06, 78.579 + 0xff,0xd3,0x86,0x00,0x10,0x04,0x06,0x00,0x01,0xff,0xd3,0x88,0x00,0xd2,0x16,0xd1, 78.580 + 0x0b,0x10,0x04,0x01,0x00,0x06,0xff,0xd3,0x8a,0x00,0x10,0x04,0x06,0x00,0x01,0xff, 78.581 + 0xd3,0x8c,0x00,0xe1,0x69,0x40,0x10,0x04,0x01,0x00,0x06,0xff,0xd3,0x8e,0x00,0xd3, 78.582 + 0x41,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xb0,0xcc,0x86,0x00,0x01,0xff, 78.583 + 0xd0,0xb0,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,0xb0,0xcc,0x88,0x00,0x01,0xff, 78.584 + 0xd0,0xb0,0xcc,0x88,0x00,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0x95,0x00,0x01,0x00, 78.585 + 0x10,0x09,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00, 78.586 + 0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0x99,0x00,0x01,0x00,0x10,0x09,0x01, 78.587 + 0xff,0xd3,0x99,0xcc,0x88,0x00,0x01,0xff,0xd3,0x99,0xcc,0x88,0x00,0xd1,0x12,0x10, 78.588 + 0x09,0x01,0xff,0xd0,0xb6,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb6,0xcc,0x88,0x00,0x10, 78.589 + 0x09,0x01,0xff,0xd0,0xb7,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb7,0xcc,0x88,0x00,0xd4, 78.590 + 0x82,0xd3,0x41,0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0xa1,0x00,0x01,0x00, 78.591 + 0x10,0x09,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00, 78.592 + 0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0xb8,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb8,0xcc, 78.593 + 0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0xbe,0xcc,0x88,0x00,0x01,0xff,0xd0,0xbe,0xcc, 78.594 + 0x88,0x00,0xd2,0x1d,0xd1,0x0b,0x10,0x07,0x01,0xff,0xd3,0xa9,0x00,0x01,0x00,0x10, 78.595 + 0x09,0x01,0xff,0xd3,0xa9,0xcc,0x88,0x00,0x01,0xff,0xd3,0xa9,0xcc,0x88,0x00,0xd1, 78.596 + 0x12,0x10,0x09,0x04,0xff,0xd1,0x8d,0xcc,0x88,0x00,0x04,0xff,0xd1,0x8d,0xcc,0x88, 78.597 + 0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x84,0x00,0x01,0xff,0xd1,0x83,0xcc,0x84, 78.598 + 0x00,0xd3,0x41,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x88,0x00, 78.599 + 0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00, 78.600 + 0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x87,0xcc, 78.601 + 0x88,0x00,0x01,0xff,0xd1,0x87,0xcc,0x88,0x00,0x10,0x07,0x08,0xff,0xd3,0xb7,0x00, 78.602 + 0x08,0x00,0xd2,0x1d,0xd1,0x12,0x10,0x09,0x01,0xff,0xd1,0x8b,0xcc,0x88,0x00,0x01, 78.603 + 0xff,0xd1,0x8b,0xcc,0x88,0x00,0x10,0x07,0x09,0xff,0xd3,0xbb,0x00,0x09,0x00,0xd1, 78.604 + 0x0b,0x10,0x07,0x09,0xff,0xd3,0xbd,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xd3,0xbf, 78.605 + 0x00,0x09,0x00,0xe1,0x26,0x02,0xe0,0x78,0x01,0xcf,0x86,0xd5,0xb0,0xd4,0x58,0xd3, 78.606 + 0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x81,0x00,0x06,0x00,0x10,0x07, 78.607 + 0x06,0xff,0xd4,0x83,0x00,0x06,0x00,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x85,0x00, 78.608 + 0x06,0x00,0x10,0x07,0x06,0xff,0xd4,0x87,0x00,0x06,0x00,0xd2,0x16,0xd1,0x0b,0x10, 78.609 + 0x07,0x06,0xff,0xd4,0x89,0x00,0x06,0x00,0x10,0x07,0x06,0xff,0xd4,0x8b,0x00,0x06, 78.610 + 0x00,0xd1,0x0b,0x10,0x07,0x06,0xff,0xd4,0x8d,0x00,0x06,0x00,0x10,0x07,0x06,0xff, 78.611 + 0xd4,0x8f,0x00,0x06,0x00,0xd3,0x2c,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x09,0xff,0xd4, 78.612 + 0x91,0x00,0x09,0x00,0x10,0x07,0x09,0xff,0xd4,0x93,0x00,0x09,0x00,0xd1,0x0b,0x10, 78.613 + 0x07,0x0a,0xff,0xd4,0x95,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff,0xd4,0x97,0x00,0x0a, 78.614 + 0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0x99,0x00,0x0a,0x00,0x10,0x07, 78.615 + 0x0a,0xff,0xd4,0x9b,0x00,0x0a,0x00,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0x9d,0x00, 78.616 + 0x0a,0x00,0x10,0x07,0x0a,0xff,0xd4,0x9f,0x00,0x0a,0x00,0xd4,0x58,0xd3,0x2c,0xd2, 78.617 + 0x16,0xd1,0x0b,0x10,0x07,0x0a,0xff,0xd4,0xa1,0x00,0x0a,0x00,0x10,0x07,0x0a,0xff, 78.618 + 0xd4,0xa3,0x00,0x0a,0x00,0xd1,0x0b,0x10,0x07,0x0b,0xff,0xd4,0xa5,0x00,0x0b,0x00, 78.619 + 0x10,0x07,0x0c,0xff,0xd4,0xa7,0x00,0x0c,0x00,0xd2,0x16,0xd1,0x0b,0x10,0x07,0x10, 78.620 + 0xff,0xd4,0xa9,0x00,0x10,0x00,0x10,0x07,0x10,0xff,0xd4,0xab,0x00,0x10,0x00,0xd1, 78.621 + 0x0b,0x10,0x07,0x10,0xff,0xd4,0xad,0x00,0x10,0x00,0x10,0x07,0x10,0xff,0xd4,0xaf, 78.622 + 0x00,0x10,0x00,0xd3,0x35,0xd2,0x19,0xd1,0x0b,0x10,0x04,0x00,0x00,0x01,0xff,0xd5, 78.623 + 0xa1,0x00,0x10,0x07,0x01,0xff,0xd5,0xa2,0x00,0x01,0xff,0xd5,0xa3,0x00,0xd1,0x0e, 78.624 + 0x10,0x07,0x01,0xff,0xd5,0xa4,0x00,0x01,0xff,0xd5,0xa5,0x00,0x10,0x07,0x01,0xff, 78.625 + 0xd5,0xa6,0x00,0x01,0xff,0xd5,0xa7,0x00,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff, 78.626 + 0xd5,0xa8,0x00,0x01,0xff,0xd5,0xa9,0x00,0x10,0x07,0x01,0xff,0xd5,0xaa,0x00,0x01, 78.627 + 0xff,0xd5,0xab,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,0xac,0x00,0x01,0xff,0xd5, 78.628 + 0xad,0x00,0x10,0x07,0x01,0xff,0xd5,0xae,0x00,0x01,0xff,0xd5,0xaf,0x00,0xcf,0x86, 78.629 + 0xe5,0x08,0x3f,0xd4,0x70,0xd3,0x38,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5, 78.630 + 0xb0,0x00,0x01,0xff,0xd5,0xb1,0x00,0x10,0x07,0x01,0xff,0xd5,0xb2,0x00,0x01,0xff, 78.631 + 0xd5,0xb3,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5,0xb4,0x00,0x01,0xff,0xd5,0xb5, 78.632 + 0x00,0x10,0x07,0x01,0xff,0xd5,0xb6,0x00,0x01,0xff,0xd5,0xb7,0x00,0xd2,0x1c,0xd1, 78.633 + 0x0e,0x10,0x07,0x01,0xff,0xd5,0xb8,0x00,0x01,0xff,0xd5,0xb9,0x00,0x10,0x07,0x01, 78.634 + 0xff,0xd5,0xba,0x00,0x01,0xff,0xd5,0xbb,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd5, 78.635 + 0xbc,0x00,0x01,0xff,0xd5,0xbd,0x00,0x10,0x07,0x01,0xff,0xd5,0xbe,0x00,0x01,0xff, 78.636 + 0xd5,0xbf,0x00,0xe3,0x87,0x3e,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd6,0x80, 78.637 + 0x00,0x01,0xff,0xd6,0x81,0x00,0x10,0x07,0x01,0xff,0xd6,0x82,0x00,0x01,0xff,0xd6, 78.638 + 0x83,0x00,0xd1,0x0e,0x10,0x07,0x01,0xff,0xd6,0x84,0x00,0x01,0xff,0xd6,0x85,0x00, 78.639 + 0x10,0x07,0x01,0xff,0xd6,0x86,0x00,0x00,0x00,0xe0,0x2f,0x3f,0xcf,0x86,0xe5,0xc0, 78.640 + 0x3e,0xe4,0x97,0x3e,0xe3,0x76,0x3e,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10, 78.641 + 0x04,0x01,0x00,0x01,0xff,0xd5,0xa5,0xd6,0x82,0x00,0xe4,0x3e,0x25,0xe3,0xc3,0x1a, 78.642 + 0xe2,0x7b,0x81,0xe1,0xc0,0x13,0xd0,0x1e,0xcf,0x86,0xc5,0xe4,0x08,0x4b,0xe3,0x53, 78.643 + 0x46,0xe2,0xe9,0x43,0xe1,0x1c,0x43,0xe0,0xe1,0x42,0xcf,0x86,0xe5,0xa6,0x42,0x64, 78.644 + 0x89,0x42,0x0b,0x00,0xcf,0x86,0xe5,0xfa,0x01,0xe4,0x03,0x56,0xe3,0x76,0x01,0xe2, 78.645 + 0x8e,0x53,0xd1,0x0c,0xe0,0xef,0x52,0xcf,0x86,0x65,0x8d,0x52,0x04,0x00,0xe0,0x0d, 78.646 + 0x01,0xcf,0x86,0xd5,0x0a,0xe4,0x10,0x53,0x63,0xff,0x52,0x0a,0x00,0xd4,0x80,0xd3, 78.647 + 0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x80,0x00,0x01,0xff,0xe2, 78.648 + 0xb4,0x81,0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x82,0x00,0x01,0xff,0xe2,0xb4,0x83, 78.649 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x84,0x00,0x01,0xff,0xe2,0xb4,0x85, 78.650 + 0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x86,0x00,0x01,0xff,0xe2,0xb4,0x87,0x00,0xd2, 78.651 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x88,0x00,0x01,0xff,0xe2,0xb4,0x89, 78.652 + 0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x8a,0x00,0x01,0xff,0xe2,0xb4,0x8b,0x00,0xd1, 78.653 + 0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x8c,0x00,0x01,0xff,0xe2,0xb4,0x8d,0x00,0x10, 78.654 + 0x08,0x01,0xff,0xe2,0xb4,0x8e,0x00,0x01,0xff,0xe2,0xb4,0x8f,0x00,0xd3,0x40,0xd2, 78.655 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x90,0x00,0x01,0xff,0xe2,0xb4,0x91, 78.656 + 0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0x92,0x00,0x01,0xff,0xe2,0xb4,0x93,0x00,0xd1, 78.657 + 0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x94,0x00,0x01,0xff,0xe2,0xb4,0x95,0x00,0x10, 78.658 + 0x08,0x01,0xff,0xe2,0xb4,0x96,0x00,0x01,0xff,0xe2,0xb4,0x97,0x00,0xd2,0x20,0xd1, 78.659 + 0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0x98,0x00,0x01,0xff,0xe2,0xb4,0x99,0x00,0x10, 78.660 + 0x08,0x01,0xff,0xe2,0xb4,0x9a,0x00,0x01,0xff,0xe2,0xb4,0x9b,0x00,0xd1,0x10,0x10, 78.661 + 0x08,0x01,0xff,0xe2,0xb4,0x9c,0x00,0x01,0xff,0xe2,0xb4,0x9d,0x00,0x10,0x08,0x01, 78.662 + 0xff,0xe2,0xb4,0x9e,0x00,0x01,0xff,0xe2,0xb4,0x9f,0x00,0xcf,0x86,0xe5,0x42,0x52, 78.663 + 0x94,0x50,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa0,0x00, 78.664 + 0x01,0xff,0xe2,0xb4,0xa1,0x00,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa2,0x00,0x01,0xff, 78.665 + 0xe2,0xb4,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0xb4,0xa4,0x00,0x01,0xff, 78.666 + 0xe2,0xb4,0xa5,0x00,0x10,0x04,0x00,0x00,0x0d,0xff,0xe2,0xb4,0xa7,0x00,0x52,0x04, 78.667 + 0x00,0x00,0x91,0x0c,0x10,0x04,0x00,0x00,0x0d,0xff,0xe2,0xb4,0xad,0x00,0x00,0x00, 78.668 + 0x01,0x00,0xd2,0x1b,0xe1,0xfc,0x52,0xe0,0xad,0x52,0xcf,0x86,0x95,0x0f,0x94,0x0b, 78.669 + 0x93,0x07,0x62,0x92,0x52,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xd1,0x13,0xe0, 78.670 + 0xd3,0x53,0xcf,0x86,0x95,0x0a,0xe4,0xa8,0x53,0x63,0x97,0x53,0x04,0x00,0x04,0x00, 78.671 + 0xd0,0x0d,0xcf,0x86,0x95,0x07,0x64,0x22,0x54,0x08,0x00,0x04,0x00,0xcf,0x86,0x55, 78.672 + 0x04,0x04,0x00,0x54,0x04,0x04,0x00,0xd3,0x07,0x62,0x2f,0x54,0x04,0x00,0xd2,0x20, 78.673 + 0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0xb0,0x00,0x11,0xff,0xe1,0x8f,0xb1,0x00, 78.674 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0xb2,0x00,0x11,0xff,0xe1,0x8f,0xb3,0x00,0x91,0x10, 78.675 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0xb4,0x00,0x11,0xff,0xe1,0x8f,0xb5,0x00,0x00,0x00, 78.676 + 0xd4,0x1c,0xe3,0xe0,0x56,0xe2,0x17,0x56,0xe1,0xda,0x55,0xe0,0xbb,0x55,0xcf,0x86, 78.677 + 0x95,0x0a,0xe4,0xa4,0x55,0x63,0x88,0x55,0x04,0x00,0x04,0x00,0xe3,0xd2,0x01,0xe2, 78.678 + 0x2b,0x5a,0xd1,0x0c,0xe0,0x4c,0x59,0xcf,0x86,0x65,0x25,0x59,0x0a,0x00,0xe0,0x9c, 78.679 + 0x59,0xcf,0x86,0xd5,0xc5,0xd4,0x45,0xd3,0x31,0xd2,0x1c,0xd1,0x0e,0x10,0x07,0x12, 78.680 + 0xff,0xd0,0xb2,0x00,0x12,0xff,0xd0,0xb4,0x00,0x10,0x07,0x12,0xff,0xd0,0xbe,0x00, 78.681 + 0x12,0xff,0xd1,0x81,0x00,0x51,0x07,0x12,0xff,0xd1,0x82,0x00,0x10,0x07,0x12,0xff, 78.682 + 0xd1,0x8a,0x00,0x12,0xff,0xd1,0xa3,0x00,0x92,0x10,0x91,0x0c,0x10,0x08,0x12,0xff, 78.683 + 0xea,0x99,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.684 + 0x10,0x08,0x14,0xff,0xe1,0x83,0x90,0x00,0x14,0xff,0xe1,0x83,0x91,0x00,0x10,0x08, 78.685 + 0x14,0xff,0xe1,0x83,0x92,0x00,0x14,0xff,0xe1,0x83,0x93,0x00,0xd1,0x10,0x10,0x08, 78.686 + 0x14,0xff,0xe1,0x83,0x94,0x00,0x14,0xff,0xe1,0x83,0x95,0x00,0x10,0x08,0x14,0xff, 78.687 + 0xe1,0x83,0x96,0x00,0x14,0xff,0xe1,0x83,0x97,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.688 + 0x14,0xff,0xe1,0x83,0x98,0x00,0x14,0xff,0xe1,0x83,0x99,0x00,0x10,0x08,0x14,0xff, 78.689 + 0xe1,0x83,0x9a,0x00,0x14,0xff,0xe1,0x83,0x9b,0x00,0xd1,0x10,0x10,0x08,0x14,0xff, 78.690 + 0xe1,0x83,0x9c,0x00,0x14,0xff,0xe1,0x83,0x9d,0x00,0x10,0x08,0x14,0xff,0xe1,0x83, 78.691 + 0x9e,0x00,0x14,0xff,0xe1,0x83,0x9f,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.692 + 0x10,0x08,0x14,0xff,0xe1,0x83,0xa0,0x00,0x14,0xff,0xe1,0x83,0xa1,0x00,0x10,0x08, 78.693 + 0x14,0xff,0xe1,0x83,0xa2,0x00,0x14,0xff,0xe1,0x83,0xa3,0x00,0xd1,0x10,0x10,0x08, 78.694 + 0x14,0xff,0xe1,0x83,0xa4,0x00,0x14,0xff,0xe1,0x83,0xa5,0x00,0x10,0x08,0x14,0xff, 78.695 + 0xe1,0x83,0xa6,0x00,0x14,0xff,0xe1,0x83,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.696 + 0x14,0xff,0xe1,0x83,0xa8,0x00,0x14,0xff,0xe1,0x83,0xa9,0x00,0x10,0x08,0x14,0xff, 78.697 + 0xe1,0x83,0xaa,0x00,0x14,0xff,0xe1,0x83,0xab,0x00,0xd1,0x10,0x10,0x08,0x14,0xff, 78.698 + 0xe1,0x83,0xac,0x00,0x14,0xff,0xe1,0x83,0xad,0x00,0x10,0x08,0x14,0xff,0xe1,0x83, 78.699 + 0xae,0x00,0x14,0xff,0xe1,0x83,0xaf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.700 + 0x14,0xff,0xe1,0x83,0xb0,0x00,0x14,0xff,0xe1,0x83,0xb1,0x00,0x10,0x08,0x14,0xff, 78.701 + 0xe1,0x83,0xb2,0x00,0x14,0xff,0xe1,0x83,0xb3,0x00,0xd1,0x10,0x10,0x08,0x14,0xff, 78.702 + 0xe1,0x83,0xb4,0x00,0x14,0xff,0xe1,0x83,0xb5,0x00,0x10,0x08,0x14,0xff,0xe1,0x83, 78.703 + 0xb6,0x00,0x14,0xff,0xe1,0x83,0xb7,0x00,0xd2,0x1c,0xd1,0x10,0x10,0x08,0x14,0xff, 78.704 + 0xe1,0x83,0xb8,0x00,0x14,0xff,0xe1,0x83,0xb9,0x00,0x10,0x08,0x14,0xff,0xe1,0x83, 78.705 + 0xba,0x00,0x00,0x00,0xd1,0x0c,0x10,0x04,0x00,0x00,0x14,0xff,0xe1,0x83,0xbd,0x00, 78.706 + 0x10,0x08,0x14,0xff,0xe1,0x83,0xbe,0x00,0x14,0xff,0xe1,0x83,0xbf,0x00,0xe2,0x9d, 78.707 + 0x08,0xe1,0x48,0x04,0xe0,0x1c,0x02,0xcf,0x86,0xe5,0x11,0x01,0xd4,0x84,0xd3,0x40, 78.708 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0xa5,0x00,0x01,0xff,0x61,0xcc, 78.709 + 0xa5,0x00,0x10,0x08,0x01,0xff,0x62,0xcc,0x87,0x00,0x01,0xff,0x62,0xcc,0x87,0x00, 78.710 + 0xd1,0x10,0x10,0x08,0x01,0xff,0x62,0xcc,0xa3,0x00,0x01,0xff,0x62,0xcc,0xa3,0x00, 78.711 + 0x10,0x08,0x01,0xff,0x62,0xcc,0xb1,0x00,0x01,0xff,0x62,0xcc,0xb1,0x00,0xd2,0x24, 78.712 + 0xd1,0x14,0x10,0x0a,0x01,0xff,0x63,0xcc,0xa7,0xcc,0x81,0x00,0x01,0xff,0x63,0xcc, 78.713 + 0xa7,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0x87,0x00,0x01,0xff,0x64,0xcc, 78.714 + 0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x64,0xcc,0xa3,0x00,0x01,0xff,0x64,0xcc, 78.715 + 0xa3,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0xb1,0x00,0x01,0xff,0x64,0xcc,0xb1,0x00, 78.716 + 0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x64,0xcc,0xa7,0x00,0x01,0xff, 78.717 + 0x64,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x64,0xcc,0xad,0x00,0x01,0xff,0x64,0xcc, 78.718 + 0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,0x84,0xcc,0x80,0x00,0x01,0xff, 78.719 + 0x65,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00, 78.720 + 0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.721 + 0x65,0xcc,0xad,0x00,0x01,0xff,0x65,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x65,0xcc, 78.722 + 0xb0,0x00,0x01,0xff,0x65,0xcc,0xb0,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc, 78.723 + 0xa7,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0xa7,0xcc,0x86,0x00,0x10,0x08,0x01,0xff, 78.724 + 0x66,0xcc,0x87,0x00,0x01,0xff,0x66,0xcc,0x87,0x00,0xd4,0x84,0xd3,0x40,0xd2,0x20, 78.725 + 0xd1,0x10,0x10,0x08,0x01,0xff,0x67,0xcc,0x84,0x00,0x01,0xff,0x67,0xcc,0x84,0x00, 78.726 + 0x10,0x08,0x01,0xff,0x68,0xcc,0x87,0x00,0x01,0xff,0x68,0xcc,0x87,0x00,0xd1,0x10, 78.727 + 0x10,0x08,0x01,0xff,0x68,0xcc,0xa3,0x00,0x01,0xff,0x68,0xcc,0xa3,0x00,0x10,0x08, 78.728 + 0x01,0xff,0x68,0xcc,0x88,0x00,0x01,0xff,0x68,0xcc,0x88,0x00,0xd2,0x20,0xd1,0x10, 78.729 + 0x10,0x08,0x01,0xff,0x68,0xcc,0xa7,0x00,0x01,0xff,0x68,0xcc,0xa7,0x00,0x10,0x08, 78.730 + 0x01,0xff,0x68,0xcc,0xae,0x00,0x01,0xff,0x68,0xcc,0xae,0x00,0xd1,0x10,0x10,0x08, 78.731 + 0x01,0xff,0x69,0xcc,0xb0,0x00,0x01,0xff,0x69,0xcc,0xb0,0x00,0x10,0x0a,0x01,0xff, 78.732 + 0x69,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0x69,0xcc,0x88,0xcc,0x81,0x00,0xd3,0x40, 78.733 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0x81,0x00,0x01,0xff,0x6b,0xcc, 78.734 + 0x81,0x00,0x10,0x08,0x01,0xff,0x6b,0xcc,0xa3,0x00,0x01,0xff,0x6b,0xcc,0xa3,0x00, 78.735 + 0xd1,0x10,0x10,0x08,0x01,0xff,0x6b,0xcc,0xb1,0x00,0x01,0xff,0x6b,0xcc,0xb1,0x00, 78.736 + 0x10,0x08,0x01,0xff,0x6c,0xcc,0xa3,0x00,0x01,0xff,0x6c,0xcc,0xa3,0x00,0xd2,0x24, 78.737 + 0xd1,0x14,0x10,0x0a,0x01,0xff,0x6c,0xcc,0xa3,0xcc,0x84,0x00,0x01,0xff,0x6c,0xcc, 78.738 + 0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x6c,0xcc,0xb1,0x00,0x01,0xff,0x6c,0xcc, 78.739 + 0xb1,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6c,0xcc,0xad,0x00,0x01,0xff,0x6c,0xcc, 78.740 + 0xad,0x00,0x10,0x08,0x01,0xff,0x6d,0xcc,0x81,0x00,0x01,0xff,0x6d,0xcc,0x81,0x00, 78.741 + 0xcf,0x86,0xe5,0x15,0x01,0xd4,0x88,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01, 78.742 + 0xff,0x6d,0xcc,0x87,0x00,0x01,0xff,0x6d,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x6d, 78.743 + 0xcc,0xa3,0x00,0x01,0xff,0x6d,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e, 78.744 + 0xcc,0x87,0x00,0x01,0xff,0x6e,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xa3, 78.745 + 0x00,0x01,0xff,0x6e,0xcc,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x6e, 78.746 + 0xcc,0xb1,0x00,0x01,0xff,0x6e,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x6e,0xcc,0xad, 78.747 + 0x00,0x01,0xff,0x6e,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x83, 78.748 + 0xcc,0x81,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x6f, 78.749 + 0xcc,0x83,0xcc,0x88,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x88,0x00,0xd3,0x48,0xd2, 78.750 + 0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x80,0x00,0x01,0xff,0x6f, 78.751 + 0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0x01, 78.752 + 0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x70,0xcc,0x81, 78.753 + 0x00,0x01,0xff,0x70,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x70,0xcc,0x87,0x00,0x01, 78.754 + 0xff,0x70,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x72,0xcc,0x87, 78.755 + 0x00,0x01,0xff,0x72,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0xa3,0x00,0x01, 78.756 + 0xff,0x72,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84, 78.757 + 0x00,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x72,0xcc,0xb1, 78.758 + 0x00,0x01,0xff,0x72,0xcc,0xb1,0x00,0xd4,0x8c,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10, 78.759 + 0x08,0x01,0xff,0x73,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x87,0x00,0x10,0x08,0x01, 78.760 + 0xff,0x73,0xcc,0xa3,0x00,0x01,0xff,0x73,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01, 78.761 + 0xff,0x73,0xcc,0x81,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x81,0xcc,0x87,0x00,0x10, 78.762 + 0x0a,0x01,0xff,0x73,0xcc,0x8c,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x8c,0xcc,0x87, 78.763 + 0x00,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x01, 78.764 + 0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x74,0xcc,0x87,0x00,0x01, 78.765 + 0xff,0x74,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x74,0xcc,0xa3,0x00,0x01, 78.766 + 0xff,0x74,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x74,0xcc,0xb1,0x00,0x01,0xff,0x74, 78.767 + 0xcc,0xb1,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x74,0xcc,0xad, 78.768 + 0x00,0x01,0xff,0x74,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xa4,0x00,0x01, 78.769 + 0xff,0x75,0xcc,0xa4,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0xb0,0x00,0x01, 78.770 + 0xff,0x75,0xcc,0xb0,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0xad,0x00,0x01,0xff,0x75, 78.771 + 0xcc,0xad,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81, 78.772 + 0x00,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x84, 78.773 + 0xcc,0x88,0x00,0x01,0xff,0x75,0xcc,0x84,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01, 78.774 + 0xff,0x76,0xcc,0x83,0x00,0x01,0xff,0x76,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x76, 78.775 + 0xcc,0xa3,0x00,0x01,0xff,0x76,0xcc,0xa3,0x00,0xe0,0x11,0x02,0xcf,0x86,0xd5,0xe2, 78.776 + 0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x80,0x00, 78.777 + 0x01,0xff,0x77,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x77,0xcc,0x81,0x00,0x01,0xff, 78.778 + 0x77,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x88,0x00,0x01,0xff, 78.779 + 0x77,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x77,0xcc,0x87,0x00,0x01,0xff,0x77,0xcc, 78.780 + 0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0xa3,0x00,0x01,0xff, 78.781 + 0x77,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x78,0xcc,0x87,0x00,0x01,0xff,0x78,0xcc, 78.782 + 0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x78,0xcc,0x88,0x00,0x01,0xff,0x78,0xcc, 78.783 + 0x88,0x00,0x10,0x08,0x01,0xff,0x79,0xcc,0x87,0x00,0x01,0xff,0x79,0xcc,0x87,0x00, 78.784 + 0xd3,0x33,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x82,0x00,0x01,0xff, 78.785 + 0x7a,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0xa3,0x00,0x01,0xff,0x7a,0xcc, 78.786 + 0xa3,0x00,0xe1,0x12,0x59,0x10,0x08,0x01,0xff,0x7a,0xcc,0xb1,0x00,0x01,0xff,0x7a, 78.787 + 0xcc,0xb1,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x8a,0x00,0x01, 78.788 + 0xff,0x79,0xcc,0x8a,0x00,0x10,0x08,0x01,0xff,0x61,0xca,0xbe,0x00,0x02,0xff,0x73, 78.789 + 0xcc,0x87,0x00,0x51,0x04,0x0a,0x00,0x10,0x07,0x0a,0xff,0x73,0x73,0x00,0x0a,0x00, 78.790 + 0xd4,0x98,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x61,0xcc,0xa3,0x00, 78.791 + 0x01,0xff,0x61,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x61,0xcc,0x89,0x00,0x01,0xff, 78.792 + 0x61,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00, 78.793 + 0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc, 78.794 + 0x80,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x80,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a, 78.795 + 0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x89,0x00, 78.796 + 0x10,0x0a,0x01,0xff,0x61,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc, 78.797 + 0x83,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff, 78.798 + 0x61,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00, 78.799 + 0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a, 78.800 + 0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x80,0x00, 78.801 + 0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc, 78.802 + 0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x61,0xcc,0x86,0xcc,0x83,0x00,0x01,0xff, 78.803 + 0x61,0xcc,0x86,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00, 78.804 + 0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.805 + 0x65,0xcc,0xa3,0x00,0x01,0xff,0x65,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x65,0xcc, 78.806 + 0x89,0x00,0x01,0xff,0x65,0xcc,0x89,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc, 78.807 + 0x83,0x00,0x01,0xff,0x65,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,0xcc, 78.808 + 0x81,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x81,0x00,0xcf,0x86,0xe5,0x31,0x01,0xd4, 78.809 + 0x90,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80, 78.810 + 0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x65,0xcc,0x82, 78.811 + 0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01, 78.812 + 0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x83,0x00,0x10, 78.813 + 0x0a,0x01,0xff,0x65,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x65,0xcc,0xa3,0xcc,0x82, 78.814 + 0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x89,0x00,0x01,0xff,0x69, 78.815 + 0xcc,0x89,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0xa3,0x00,0x01,0xff,0x69,0xcc,0xa3, 78.816 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0xa3,0x00,0x01,0xff,0x6f,0xcc,0xa3, 78.817 + 0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x89,0x00,0xd3, 78.818 + 0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x01, 78.819 + 0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80, 78.820 + 0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f, 78.821 + 0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x89,0x00,0x10,0x0a,0x01, 78.822 + 0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00,0xd2, 78.823 + 0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x6f, 78.824 + 0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0x01, 78.825 + 0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b, 78.826 + 0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x6f, 78.827 + 0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x89,0x00,0xd4,0x98,0xd3, 78.828 + 0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x01, 78.829 + 0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3, 78.830 + 0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75, 78.831 + 0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x89, 78.832 + 0x00,0x01,0xff,0x75,0xcc,0x89,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75, 78.833 + 0xcc,0x9b,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x81,0x00,0x10,0x0a,0x01, 78.834 + 0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00,0xd1, 78.835 + 0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x75,0xcc,0x9b, 78.836 + 0xcc,0x89,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x83,0x00,0x01,0xff,0x75, 78.837 + 0xcc,0x9b,0xcc,0x83,0x00,0xd3,0x44,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75, 78.838 + 0xcc,0x9b,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0xa3,0x00,0x10,0x08,0x01, 78.839 + 0xff,0x79,0xcc,0x80,0x00,0x01,0xff,0x79,0xcc,0x80,0x00,0xd1,0x10,0x10,0x08,0x01, 78.840 + 0xff,0x79,0xcc,0xa3,0x00,0x01,0xff,0x79,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x79, 78.841 + 0xcc,0x89,0x00,0x01,0xff,0x79,0xcc,0x89,0x00,0xd2,0x1c,0xd1,0x10,0x10,0x08,0x01, 78.842 + 0xff,0x79,0xcc,0x83,0x00,0x01,0xff,0x79,0xcc,0x83,0x00,0x10,0x08,0x0a,0xff,0xe1, 78.843 + 0xbb,0xbb,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xe1,0xbb,0xbd,0x00,0x0a, 78.844 + 0x00,0x10,0x08,0x0a,0xff,0xe1,0xbb,0xbf,0x00,0x0a,0x00,0xe1,0xbf,0x02,0xe0,0xa1, 78.845 + 0x01,0xcf,0x86,0xd5,0xc6,0xd4,0x6c,0xd3,0x18,0xe2,0x0e,0x59,0xe1,0xf7,0x58,0x10, 78.846 + 0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0x00,0xd2, 78.847 + 0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1, 78.848 + 0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff, 78.849 + 0xce,0xb1,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc, 78.850 + 0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01, 78.851 + 0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82, 78.852 + 0x00,0xd3,0x18,0xe2,0x4a,0x59,0xe1,0x33,0x59,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc, 78.853 + 0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01, 78.854 + 0xff,0xce,0xb5,0xcc,0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0x10,0x0b,0x01, 78.855 + 0xff,0xce,0xb5,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0xcc,0x80, 78.856 + 0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xb5,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff, 78.857 + 0xce,0xb5,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd4,0x6c,0xd3,0x18,0xe2,0x74,0x59, 78.858 + 0xe1,0x5d,0x59,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x93,0x00,0x01,0xff,0xce,0xb7, 78.859 + 0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x93,0x00, 78.860 + 0x01,0xff,0xce,0xb7,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc, 78.861 + 0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01, 78.862 + 0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x81, 78.863 + 0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb7, 78.864 + 0xcc,0x94,0xcd,0x82,0x00,0xd3,0x18,0xe2,0xb0,0x59,0xe1,0x99,0x59,0x10,0x09,0x01, 78.865 + 0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0x00,0xd2,0x28,0xd1, 78.866 + 0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94, 78.867 + 0x00,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9, 78.868 + 0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc, 78.869 + 0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce, 78.870 + 0xb9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcd,0x82,0x00,0xcf, 78.871 + 0x86,0xd5,0xac,0xd4,0x5a,0xd3,0x18,0xe2,0xed,0x59,0xe1,0xd6,0x59,0x10,0x09,0x01, 78.872 + 0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0x00,0xd2,0x28,0xd1, 78.873 + 0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94, 78.874 + 0x00,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf, 78.875 + 0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc, 78.876 + 0x81,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd3,0x18,0xe2, 78.877 + 0x17,0x5a,0xe1,0x00,0x5a,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x93,0x00,0x01,0xff, 78.878 + 0xcf,0x85,0xcc,0x94,0x00,0xd2,0x1c,0xd1,0x0d,0x10,0x04,0x00,0x00,0x01,0xff,0xcf, 78.879 + 0x85,0xcc,0x94,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x80, 78.880 + 0x00,0xd1,0x0f,0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x81,0x00, 78.881 + 0x10,0x04,0x00,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcd,0x82,0x00,0xe4,0xd3,0x5a, 78.882 + 0xd3,0x18,0xe2,0x52,0x5a,0xe1,0x3b,0x5a,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x93, 78.883 + 0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff, 78.884 + 0xcf,0x89,0xcc,0x93,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff, 78.885 + 0xcf,0x89,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x80,0x00, 78.886 + 0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xcf, 78.887 + 0x89,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82, 78.888 + 0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0x00,0xe0,0xd9,0x02,0xcf,0x86,0xe5, 78.889 + 0x91,0x01,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1, 78.890 + 0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d, 78.891 + 0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc, 78.892 + 0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93, 78.893 + 0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00, 78.894 + 0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xce, 78.895 + 0xb1,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff, 78.896 + 0xce,0xb1,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xce,0xb9,0x00, 78.897 + 0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce, 78.898 + 0xb1,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb1, 78.899 + 0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0xce, 78.900 + 0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01, 78.901 + 0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd3,0x64,0xd2,0x30,0xd1,0x16, 78.902 + 0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc, 78.903 + 0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,0xce,0xb9, 78.904 + 0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d, 78.905 + 0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc, 78.906 + 0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x82, 78.907 + 0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30, 78.908 + 0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xce, 78.909 + 0xb7,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80, 78.910 + 0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a, 78.911 + 0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xce, 78.912 + 0xb7,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93, 78.913 + 0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00, 78.914 + 0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93, 78.915 + 0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d,0x01,0xff, 78.916 + 0xcf,0x89,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc, 78.917 + 0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81, 78.918 + 0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00,0x10,0x0d, 78.919 + 0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc, 78.920 + 0x94,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89, 78.921 + 0xcc,0x93,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xce,0xb9,0x00,0x10,0x0d, 78.922 + 0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc, 78.923 + 0x94,0xcc,0x80,0xce,0xb9,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93, 78.924 + 0xcc,0x81,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0xce,0xb9,0x00, 78.925 + 0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xce,0xb9,0x00,0x01,0xff,0xcf, 78.926 + 0x89,0xcc,0x94,0xcd,0x82,0xce,0xb9,0x00,0xd3,0x49,0xd2,0x26,0xd1,0x12,0x10,0x09, 78.927 + 0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,0xce,0xb1,0xcc,0x84,0x00,0x10,0x0b, 78.928 + 0x01,0xff,0xce,0xb1,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb1,0xce,0xb9,0x00, 78.929 + 0xd1,0x0f,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10, 78.930 + 0x09,0x01,0xff,0xce,0xb1,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcd,0x82,0xce,0xb9, 78.931 + 0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff, 78.932 + 0xce,0xb1,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x80,0x00,0x01,0xff, 78.933 + 0xce,0xb1,0xcc,0x81,0x00,0xe1,0xf3,0x5a,0x10,0x09,0x01,0xff,0xce,0xb1,0xce,0xb9, 78.934 + 0x00,0x01,0x00,0xcf,0x86,0xd5,0xbd,0xd4,0x7e,0xd3,0x44,0xd2,0x21,0xd1,0x0d,0x10, 78.935 + 0x04,0x01,0x00,0x01,0xff,0xc2,0xa8,0xcd,0x82,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7, 78.936 + 0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xce,0xb7,0xce,0xb9,0x00,0xd1,0x0f,0x10,0x0b, 78.937 + 0x01,0xff,0xce,0xb7,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce, 78.938 + 0xb7,0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x24,0xd1, 78.939 + 0x12,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x81, 78.940 + 0x00,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x81, 78.941 + 0x00,0xe1,0x02,0x5b,0x10,0x09,0x01,0xff,0xce,0xb7,0xce,0xb9,0x00,0x01,0xff,0xe1, 78.942 + 0xbe,0xbf,0xcc,0x80,0x00,0xd3,0x18,0xe2,0x28,0x5b,0xe1,0x11,0x5b,0x10,0x09,0x01, 78.943 + 0xff,0xce,0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,0x84,0x00,0xe2,0x4c,0x5b, 78.944 + 0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc, 78.945 + 0x84,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,0xcc, 78.946 + 0x81,0x00,0xd4,0x51,0xd3,0x18,0xe2,0x6f,0x5b,0xe1,0x58,0x5b,0x10,0x09,0x01,0xff, 78.947 + 0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,0x00,0xd2,0x24,0xd1,0x12, 78.948 + 0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84,0x00, 78.949 + 0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00, 78.950 + 0xe1,0x8f,0x5b,0x10,0x09,0x01,0xff,0xcf,0x81,0xcc,0x94,0x00,0x01,0xff,0xc2,0xa8, 78.951 + 0xcc,0x80,0x00,0xd3,0x3b,0xd2,0x18,0x51,0x04,0x00,0x00,0x10,0x0b,0x01,0xff,0xcf, 78.952 + 0x89,0xcc,0x80,0xce,0xb9,0x00,0x01,0xff,0xcf,0x89,0xce,0xb9,0x00,0xd1,0x0f,0x10, 78.953 + 0x0b,0x01,0xff,0xcf,0x89,0xcc,0x81,0xce,0xb9,0x00,0x00,0x00,0x10,0x09,0x01,0xff, 78.954 + 0xcf,0x89,0xcd,0x82,0x00,0x01,0xff,0xcf,0x89,0xcd,0x82,0xce,0xb9,0x00,0xd2,0x24, 78.955 + 0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc, 78.956 + 0x81,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc, 78.957 + 0x81,0x00,0xe1,0x99,0x5b,0x10,0x09,0x01,0xff,0xcf,0x89,0xce,0xb9,0x00,0x01,0xff, 78.958 + 0xc2,0xb4,0x00,0xe0,0x0c,0x68,0xcf,0x86,0xe5,0x23,0x02,0xe4,0x25,0x01,0xe3,0x85, 78.959 + 0x5e,0xd2,0x2a,0xe1,0x5f,0x5c,0xe0,0xdd,0x5b,0xcf,0x86,0xe5,0xbb,0x5b,0x94,0x1b, 78.960 + 0xe3,0xa4,0x5b,0x92,0x14,0x91,0x10,0x10,0x08,0x01,0xff,0xe2,0x80,0x82,0x00,0x01, 78.961 + 0xff,0xe2,0x80,0x83,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd1,0xd6,0xd0,0x46,0xcf, 78.962 + 0x86,0x55,0x04,0x01,0x00,0xd4,0x29,0xd3,0x13,0x52,0x04,0x01,0x00,0x51,0x04,0x01, 78.963 + 0x00,0x10,0x07,0x01,0xff,0xcf,0x89,0x00,0x01,0x00,0x92,0x12,0x51,0x04,0x01,0x00, 78.964 + 0x10,0x06,0x01,0xff,0x6b,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x01,0x00,0xe3,0x25, 78.965 + 0x5d,0x92,0x10,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0x8e,0x00,0x01, 78.966 + 0x00,0x01,0x00,0xcf,0x86,0xd5,0x0a,0xe4,0x42,0x5d,0x63,0x2d,0x5d,0x06,0x00,0x94, 78.967 + 0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb0,0x00,0x01, 78.968 + 0xff,0xe2,0x85,0xb1,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xb2,0x00,0x01,0xff,0xe2, 78.969 + 0x85,0xb3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb4,0x00,0x01,0xff,0xe2, 78.970 + 0x85,0xb5,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xb6,0x00,0x01,0xff,0xe2,0x85,0xb7, 78.971 + 0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xb8,0x00,0x01,0xff,0xe2, 78.972 + 0x85,0xb9,0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xba,0x00,0x01,0xff,0xe2,0x85,0xbb, 78.973 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x85,0xbc,0x00,0x01,0xff,0xe2,0x85,0xbd, 78.974 + 0x00,0x10,0x08,0x01,0xff,0xe2,0x85,0xbe,0x00,0x01,0xff,0xe2,0x85,0xbf,0x00,0x01, 78.975 + 0x00,0xe0,0x34,0x5d,0xcf,0x86,0xe5,0x13,0x5d,0xe4,0xf2,0x5c,0xe3,0xe1,0x5c,0xe2, 78.976 + 0xd4,0x5c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x04,0xff,0xe2,0x86,0x84,0x00, 78.977 + 0xe3,0x23,0x61,0xe2,0xf0,0x60,0xd1,0x0c,0xe0,0x9d,0x60,0xcf,0x86,0x65,0x7e,0x60, 78.978 + 0x01,0x00,0xd0,0x62,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x18, 78.979 + 0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x90,0x00, 78.980 + 0x01,0xff,0xe2,0x93,0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x93, 78.981 + 0x92,0x00,0x01,0xff,0xe2,0x93,0x93,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x94,0x00, 78.982 + 0x01,0xff,0xe2,0x93,0x95,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe2,0x93,0x96,0x00, 78.983 + 0x01,0xff,0xe2,0x93,0x97,0x00,0x10,0x08,0x01,0xff,0xe2,0x93,0x98,0x00,0x01,0xff, 78.984 + 0xe2,0x93,0x99,0x00,0xcf,0x86,0xe5,0x57,0x60,0x94,0x80,0xd3,0x40,0xd2,0x20,0xd1, 78.985 + 0x10,0x10,0x08,0x01,0xff,0xe2,0x93,0x9a,0x00,0x01,0xff,0xe2,0x93,0x9b,0x00,0x10, 78.986 + 0x08,0x01,0xff,0xe2,0x93,0x9c,0x00,0x01,0xff,0xe2,0x93,0x9d,0x00,0xd1,0x10,0x10, 78.987 + 0x08,0x01,0xff,0xe2,0x93,0x9e,0x00,0x01,0xff,0xe2,0x93,0x9f,0x00,0x10,0x08,0x01, 78.988 + 0xff,0xe2,0x93,0xa0,0x00,0x01,0xff,0xe2,0x93,0xa1,0x00,0xd2,0x20,0xd1,0x10,0x10, 78.989 + 0x08,0x01,0xff,0xe2,0x93,0xa2,0x00,0x01,0xff,0xe2,0x93,0xa3,0x00,0x10,0x08,0x01, 78.990 + 0xff,0xe2,0x93,0xa4,0x00,0x01,0xff,0xe2,0x93,0xa5,0x00,0xd1,0x10,0x10,0x08,0x01, 78.991 + 0xff,0xe2,0x93,0xa6,0x00,0x01,0xff,0xe2,0x93,0xa7,0x00,0x10,0x08,0x01,0xff,0xe2, 78.992 + 0x93,0xa8,0x00,0x01,0xff,0xe2,0x93,0xa9,0x00,0x01,0x00,0xd4,0x0c,0xe3,0x33,0x62, 78.993 + 0xe2,0x2c,0x62,0xcf,0x06,0x04,0x00,0xe3,0x0c,0x65,0xe2,0xff,0x63,0xe1,0x2e,0x02, 78.994 + 0xe0,0x84,0x01,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.995 + 0x10,0x08,0x08,0xff,0xe2,0xb0,0xb0,0x00,0x08,0xff,0xe2,0xb0,0xb1,0x00,0x10,0x08, 78.996 + 0x08,0xff,0xe2,0xb0,0xb2,0x00,0x08,0xff,0xe2,0xb0,0xb3,0x00,0xd1,0x10,0x10,0x08, 78.997 + 0x08,0xff,0xe2,0xb0,0xb4,0x00,0x08,0xff,0xe2,0xb0,0xb5,0x00,0x10,0x08,0x08,0xff, 78.998 + 0xe2,0xb0,0xb6,0x00,0x08,0xff,0xe2,0xb0,0xb7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.999 + 0x08,0xff,0xe2,0xb0,0xb8,0x00,0x08,0xff,0xe2,0xb0,0xb9,0x00,0x10,0x08,0x08,0xff, 78.1000 + 0xe2,0xb0,0xba,0x00,0x08,0xff,0xe2,0xb0,0xbb,0x00,0xd1,0x10,0x10,0x08,0x08,0xff, 78.1001 + 0xe2,0xb0,0xbc,0x00,0x08,0xff,0xe2,0xb0,0xbd,0x00,0x10,0x08,0x08,0xff,0xe2,0xb0, 78.1002 + 0xbe,0x00,0x08,0xff,0xe2,0xb0,0xbf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.1003 + 0x08,0xff,0xe2,0xb1,0x80,0x00,0x08,0xff,0xe2,0xb1,0x81,0x00,0x10,0x08,0x08,0xff, 78.1004 + 0xe2,0xb1,0x82,0x00,0x08,0xff,0xe2,0xb1,0x83,0x00,0xd1,0x10,0x10,0x08,0x08,0xff, 78.1005 + 0xe2,0xb1,0x84,0x00,0x08,0xff,0xe2,0xb1,0x85,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1, 78.1006 + 0x86,0x00,0x08,0xff,0xe2,0xb1,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff, 78.1007 + 0xe2,0xb1,0x88,0x00,0x08,0xff,0xe2,0xb1,0x89,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1, 78.1008 + 0x8a,0x00,0x08,0xff,0xe2,0xb1,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe2,0xb1, 78.1009 + 0x8c,0x00,0x08,0xff,0xe2,0xb1,0x8d,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0x8e,0x00, 78.1010 + 0x08,0xff,0xe2,0xb1,0x8f,0x00,0x94,0x7c,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.1011 + 0x08,0xff,0xe2,0xb1,0x90,0x00,0x08,0xff,0xe2,0xb1,0x91,0x00,0x10,0x08,0x08,0xff, 78.1012 + 0xe2,0xb1,0x92,0x00,0x08,0xff,0xe2,0xb1,0x93,0x00,0xd1,0x10,0x10,0x08,0x08,0xff, 78.1013 + 0xe2,0xb1,0x94,0x00,0x08,0xff,0xe2,0xb1,0x95,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1, 78.1014 + 0x96,0x00,0x08,0xff,0xe2,0xb1,0x97,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff, 78.1015 + 0xe2,0xb1,0x98,0x00,0x08,0xff,0xe2,0xb1,0x99,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1, 78.1016 + 0x9a,0x00,0x08,0xff,0xe2,0xb1,0x9b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe2,0xb1, 78.1017 + 0x9c,0x00,0x08,0xff,0xe2,0xb1,0x9d,0x00,0x10,0x08,0x08,0xff,0xe2,0xb1,0x9e,0x00, 78.1018 + 0x00,0x00,0x08,0x00,0xcf,0x86,0xd5,0x07,0x64,0xef,0x61,0x08,0x00,0xd4,0x63,0xd3, 78.1019 + 0x32,0xd2,0x1b,0xd1,0x0c,0x10,0x08,0x09,0xff,0xe2,0xb1,0xa1,0x00,0x09,0x00,0x10, 78.1020 + 0x07,0x09,0xff,0xc9,0xab,0x00,0x09,0xff,0xe1,0xb5,0xbd,0x00,0xd1,0x0b,0x10,0x07, 78.1021 + 0x09,0xff,0xc9,0xbd,0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xa8, 78.1022 + 0x00,0xd2,0x18,0xd1,0x0c,0x10,0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xaa,0x00,0x10, 78.1023 + 0x04,0x09,0x00,0x09,0xff,0xe2,0xb1,0xac,0x00,0xd1,0x0b,0x10,0x04,0x09,0x00,0x0a, 78.1024 + 0xff,0xc9,0x91,0x00,0x10,0x07,0x0a,0xff,0xc9,0xb1,0x00,0x0a,0xff,0xc9,0x90,0x00, 78.1025 + 0xd3,0x27,0xd2,0x17,0xd1,0x0b,0x10,0x07,0x0b,0xff,0xc9,0x92,0x00,0x0a,0x00,0x10, 78.1026 + 0x08,0x0a,0xff,0xe2,0xb1,0xb3,0x00,0x0a,0x00,0x91,0x0c,0x10,0x04,0x09,0x00,0x09, 78.1027 + 0xff,0xe2,0xb1,0xb6,0x00,0x09,0x00,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10, 78.1028 + 0x07,0x0b,0xff,0xc8,0xbf,0x00,0x0b,0xff,0xc9,0x80,0x00,0xe0,0x83,0x01,0xcf,0x86, 78.1029 + 0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2, 78.1030 + 0x81,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x83,0x00,0x08,0x00,0xd1,0x0c, 78.1031 + 0x10,0x08,0x08,0xff,0xe2,0xb2,0x85,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2, 78.1032 + 0x87,0x00,0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x89,0x00, 78.1033 + 0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x8b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08, 78.1034 + 0x08,0xff,0xe2,0xb2,0x8d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x8f,0x00, 78.1035 + 0x08,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x91,0x00, 78.1036 + 0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x93,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08, 78.1037 + 0x08,0xff,0xe2,0xb2,0x95,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x97,0x00, 78.1038 + 0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0x99,0x00,0x08,0x00, 78.1039 + 0x10,0x08,0x08,0xff,0xe2,0xb2,0x9b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff, 78.1040 + 0xe2,0xb2,0x9d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0x9f,0x00,0x08,0x00, 78.1041 + 0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa1,0x00, 78.1042 + 0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa3,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08, 78.1043 + 0x08,0xff,0xe2,0xb2,0xa5,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa7,0x00, 78.1044 + 0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xa9,0x00,0x08,0x00, 78.1045 + 0x10,0x08,0x08,0xff,0xe2,0xb2,0xab,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff, 78.1046 + 0xe2,0xb2,0xad,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xaf,0x00,0x08,0x00, 78.1047 + 0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb1,0x00,0x08,0x00, 78.1048 + 0x10,0x08,0x08,0xff,0xe2,0xb2,0xb3,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff, 78.1049 + 0xe2,0xb2,0xb5,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb7,0x00,0x08,0x00, 78.1050 + 0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2,0xb9,0x00,0x08,0x00,0x10,0x08, 78.1051 + 0x08,0xff,0xe2,0xb2,0xbb,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb2, 78.1052 + 0xbd,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb2,0xbf,0x00,0x08,0x00,0xcf,0x86, 78.1053 + 0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3, 78.1054 + 0x81,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x83,0x00,0x08,0x00,0xd1,0x0c, 78.1055 + 0x10,0x08,0x08,0xff,0xe2,0xb3,0x85,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3, 78.1056 + 0x87,0x00,0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x89,0x00, 78.1057 + 0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x8b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08, 78.1058 + 0x08,0xff,0xe2,0xb3,0x8d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x8f,0x00, 78.1059 + 0x08,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x91,0x00, 78.1060 + 0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x93,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08, 78.1061 + 0x08,0xff,0xe2,0xb3,0x95,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x97,0x00, 78.1062 + 0x08,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0x99,0x00,0x08,0x00, 78.1063 + 0x10,0x08,0x08,0xff,0xe2,0xb3,0x9b,0x00,0x08,0x00,0xd1,0x0c,0x10,0x08,0x08,0xff, 78.1064 + 0xe2,0xb3,0x9d,0x00,0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0x9f,0x00,0x08,0x00, 78.1065 + 0xd4,0x3b,0xd3,0x1c,0x92,0x18,0xd1,0x0c,0x10,0x08,0x08,0xff,0xe2,0xb3,0xa1,0x00, 78.1066 + 0x08,0x00,0x10,0x08,0x08,0xff,0xe2,0xb3,0xa3,0x00,0x08,0x00,0x08,0x00,0xd2,0x10, 78.1067 + 0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x0b,0xff,0xe2,0xb3,0xac,0x00,0xe1,0x3b, 78.1068 + 0x5f,0x10,0x04,0x0b,0x00,0x0b,0xff,0xe2,0xb3,0xae,0x00,0xe3,0x40,0x5f,0x92,0x10, 78.1069 + 0x51,0x04,0x0b,0xe6,0x10,0x08,0x0d,0xff,0xe2,0xb3,0xb3,0x00,0x0d,0x00,0x00,0x00, 78.1070 + 0xe2,0x98,0x08,0xd1,0x0b,0xe0,0x11,0x67,0xcf,0x86,0xcf,0x06,0x01,0x00,0xe0,0x65, 78.1071 + 0x6c,0xcf,0x86,0xe5,0xa7,0x05,0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x0c,0xe2,0xf8, 78.1072 + 0x67,0xe1,0x8f,0x67,0xcf,0x06,0x04,0x00,0xe2,0xdb,0x01,0xe1,0x26,0x01,0xd0,0x09, 78.1073 + 0xcf,0x86,0x65,0xf4,0x67,0x0a,0x00,0xcf,0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2, 78.1074 + 0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a, 78.1075 + 0xff,0xea,0x99,0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x85, 78.1076 + 0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1, 78.1077 + 0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x89,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea, 78.1078 + 0x99,0x8b,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x8d,0x00,0x0a, 78.1079 + 0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x8f,0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1, 78.1080 + 0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x91,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea, 78.1081 + 0x99,0x93,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x95,0x00,0x0a, 78.1082 + 0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x97,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10, 78.1083 + 0x08,0x0a,0xff,0xea,0x99,0x99,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0x9b, 78.1084 + 0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0x9d,0x00,0x0a,0x00,0x10, 78.1085 + 0x08,0x0a,0xff,0xea,0x99,0x9f,0x00,0x0a,0x00,0xe4,0x5d,0x67,0xd3,0x30,0xd2,0x18, 78.1086 + 0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x99,0xa1,0x00,0x0c,0x00,0x10,0x08,0x0a,0xff, 78.1087 + 0xea,0x99,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x99,0xa5,0x00, 78.1088 + 0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99,0xa7,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c, 78.1089 + 0x10,0x08,0x0a,0xff,0xea,0x99,0xa9,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x99, 78.1090 + 0xab,0x00,0x0a,0x00,0xe1,0x0c,0x67,0x10,0x08,0x0a,0xff,0xea,0x99,0xad,0x00,0x0a, 78.1091 + 0x00,0xe0,0x35,0x67,0xcf,0x86,0x95,0xab,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c, 78.1092 + 0x10,0x08,0x0a,0xff,0xea,0x9a,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a, 78.1093 + 0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x85,0x00,0x0a,0x00, 78.1094 + 0x10,0x08,0x0a,0xff,0xea,0x9a,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08, 78.1095 + 0x0a,0xff,0xea,0x9a,0x89,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,0x8b,0x00, 78.1096 + 0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x8d,0x00,0x0a,0x00,0x10,0x08, 78.1097 + 0x0a,0xff,0xea,0x9a,0x8f,0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08, 78.1098 + 0x0a,0xff,0xea,0x9a,0x91,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9a,0x93,0x00, 78.1099 + 0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9a,0x95,0x00,0x0a,0x00,0x10,0x08, 78.1100 + 0x0a,0xff,0xea,0x9a,0x97,0x00,0x0a,0x00,0xe2,0x92,0x66,0xd1,0x0c,0x10,0x08,0x10, 78.1101 + 0xff,0xea,0x9a,0x99,0x00,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9a,0x9b,0x00,0x10, 78.1102 + 0x00,0x0b,0x00,0xe1,0x10,0x02,0xd0,0xb9,0xcf,0x86,0xd5,0x07,0x64,0x9e,0x66,0x08, 78.1103 + 0x00,0xd4,0x58,0xd3,0x28,0xd2,0x10,0x51,0x04,0x09,0x00,0x10,0x08,0x0a,0xff,0xea, 78.1104 + 0x9c,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xa5,0x00,0x0a, 78.1105 + 0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xa7,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10, 78.1106 + 0x08,0x0a,0xff,0xea,0x9c,0xa9,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xab, 78.1107 + 0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xad,0x00,0x0a,0x00,0x10, 78.1108 + 0x08,0x0a,0xff,0xea,0x9c,0xaf,0x00,0x0a,0x00,0xd3,0x28,0xd2,0x10,0x51,0x04,0x0a, 78.1109 + 0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb3,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a, 78.1110 + 0xff,0xea,0x9c,0xb5,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb7,0x00,0x0a, 78.1111 + 0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9c,0xb9,0x00,0x0a,0x00,0x10, 78.1112 + 0x08,0x0a,0xff,0xea,0x9c,0xbb,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea, 78.1113 + 0x9c,0xbd,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9c,0xbf,0x00,0x0a,0x00,0xcf, 78.1114 + 0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea, 78.1115 + 0x9d,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x83,0x00,0x0a,0x00,0xd1, 78.1116 + 0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x85,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea, 78.1117 + 0x9d,0x87,0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x89, 78.1118 + 0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x8b,0x00,0x0a,0x00,0xd1,0x0c,0x10, 78.1119 + 0x08,0x0a,0xff,0xea,0x9d,0x8d,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x8f, 78.1120 + 0x00,0x0a,0x00,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x91, 78.1121 + 0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x93,0x00,0x0a,0x00,0xd1,0x0c,0x10, 78.1122 + 0x08,0x0a,0xff,0xea,0x9d,0x95,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x97, 78.1123 + 0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0x99,0x00,0x0a, 78.1124 + 0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x9b,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a, 78.1125 + 0xff,0xea,0x9d,0x9d,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0x9f,0x00,0x0a, 78.1126 + 0x00,0xd4,0x60,0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa1, 78.1127 + 0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa3,0x00,0x0a,0x00,0xd1,0x0c,0x10, 78.1128 + 0x08,0x0a,0xff,0xea,0x9d,0xa5,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa7, 78.1129 + 0x00,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9d,0xa9,0x00,0x0a, 78.1130 + 0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xab,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a, 78.1131 + 0xff,0xea,0x9d,0xad,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xaf,0x00,0x0a, 78.1132 + 0x00,0x53,0x04,0x0a,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea, 78.1133 + 0x9d,0xba,0x00,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,0x9d,0xbc,0x00,0xd1,0x0c,0x10, 78.1134 + 0x04,0x0a,0x00,0x0a,0xff,0xe1,0xb5,0xb9,0x00,0x10,0x08,0x0a,0xff,0xea,0x9d,0xbf, 78.1135 + 0x00,0x0a,0x00,0xe0,0x71,0x01,0xcf,0x86,0xd5,0xa6,0xd4,0x4e,0xd3,0x30,0xd2,0x18, 78.1136 + 0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9e,0x81,0x00,0x0a,0x00,0x10,0x08,0x0a,0xff, 78.1137 + 0xea,0x9e,0x83,0x00,0x0a,0x00,0xd1,0x0c,0x10,0x08,0x0a,0xff,0xea,0x9e,0x85,0x00, 78.1138 + 0x0a,0x00,0x10,0x08,0x0a,0xff,0xea,0x9e,0x87,0x00,0x0a,0x00,0xd2,0x10,0x51,0x04, 78.1139 + 0x0a,0x00,0x10,0x04,0x0a,0x00,0x0a,0xff,0xea,0x9e,0x8c,0x00,0xe1,0x9a,0x64,0x10, 78.1140 + 0x04,0x0a,0x00,0x0c,0xff,0xc9,0xa5,0x00,0xd3,0x28,0xd2,0x18,0xd1,0x0c,0x10,0x08, 78.1141 + 0x0c,0xff,0xea,0x9e,0x91,0x00,0x0c,0x00,0x10,0x08,0x0d,0xff,0xea,0x9e,0x93,0x00, 78.1142 + 0x0d,0x00,0x51,0x04,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9e,0x97,0x00,0x10,0x00, 78.1143 + 0xd2,0x18,0xd1,0x0c,0x10,0x08,0x10,0xff,0xea,0x9e,0x99,0x00,0x10,0x00,0x10,0x08, 78.1144 + 0x10,0xff,0xea,0x9e,0x9b,0x00,0x10,0x00,0xd1,0x0c,0x10,0x08,0x10,0xff,0xea,0x9e, 78.1145 + 0x9d,0x00,0x10,0x00,0x10,0x08,0x10,0xff,0xea,0x9e,0x9f,0x00,0x10,0x00,0xd4,0x63, 78.1146 + 0xd3,0x30,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa1,0x00,0x0c,0x00, 78.1147 + 0x10,0x08,0x0c,0xff,0xea,0x9e,0xa3,0x00,0x0c,0x00,0xd1,0x0c,0x10,0x08,0x0c,0xff, 78.1148 + 0xea,0x9e,0xa5,0x00,0x0c,0x00,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa7,0x00,0x0c,0x00, 78.1149 + 0xd2,0x1a,0xd1,0x0c,0x10,0x08,0x0c,0xff,0xea,0x9e,0xa9,0x00,0x0c,0x00,0x10,0x07, 78.1150 + 0x0d,0xff,0xc9,0xa6,0x00,0x10,0xff,0xc9,0x9c,0x00,0xd1,0x0e,0x10,0x07,0x10,0xff, 78.1151 + 0xc9,0xa1,0x00,0x10,0xff,0xc9,0xac,0x00,0x10,0x07,0x12,0xff,0xc9,0xaa,0x00,0x14, 78.1152 + 0x00,0xd3,0x35,0xd2,0x1d,0xd1,0x0e,0x10,0x07,0x10,0xff,0xca,0x9e,0x00,0x10,0xff, 78.1153 + 0xca,0x87,0x00,0x10,0x07,0x11,0xff,0xca,0x9d,0x00,0x11,0xff,0xea,0xad,0x93,0x00, 78.1154 + 0xd1,0x0c,0x10,0x08,0x11,0xff,0xea,0x9e,0xb5,0x00,0x11,0x00,0x10,0x08,0x11,0xff, 78.1155 + 0xea,0x9e,0xb7,0x00,0x11,0x00,0xd2,0x18,0xd1,0x0c,0x10,0x08,0x14,0xff,0xea,0x9e, 78.1156 + 0xb9,0x00,0x14,0x00,0x10,0x08,0x15,0xff,0xea,0x9e,0xbb,0x00,0x15,0x00,0xd1,0x0c, 78.1157 + 0x10,0x08,0x15,0xff,0xea,0x9e,0xbd,0x00,0x15,0x00,0x10,0x08,0x15,0xff,0xea,0x9e, 78.1158 + 0xbf,0x00,0x15,0x00,0xcf,0x86,0xe5,0xd4,0x63,0x94,0x2f,0x93,0x2b,0xd2,0x10,0x51, 78.1159 + 0x04,0x00,0x00,0x10,0x08,0x15,0xff,0xea,0x9f,0x83,0x00,0x15,0x00,0xd1,0x0f,0x10, 78.1160 + 0x08,0x15,0xff,0xea,0x9e,0x94,0x00,0x15,0xff,0xca,0x82,0x00,0x10,0x08,0x15,0xff, 78.1161 + 0xe1,0xb6,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0xb4,0x66,0xd3,0x1d,0xe2, 78.1162 + 0x5b,0x64,0xe1,0x0a,0x64,0xe0,0xf7,0x63,0xcf,0x86,0xe5,0xd8,0x63,0x94,0x0b,0x93, 78.1163 + 0x07,0x62,0xc3,0x63,0x08,0x00,0x08,0x00,0x08,0x00,0xd2,0x0f,0xe1,0x5a,0x65,0xe0, 78.1164 + 0x27,0x65,0xcf,0x86,0x65,0x0c,0x65,0x0a,0x00,0xd1,0xab,0xd0,0x1a,0xcf,0x86,0xe5, 78.1165 + 0x17,0x66,0xe4,0xfa,0x65,0xe3,0xe1,0x65,0xe2,0xd4,0x65,0x91,0x08,0x10,0x04,0x00, 78.1166 + 0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x0b,0x93,0x07,0x62, 78.1167 + 0x27,0x66,0x11,0x00,0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff, 78.1168 + 0xe1,0x8e,0xa0,0x00,0x11,0xff,0xe1,0x8e,0xa1,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e, 78.1169 + 0xa2,0x00,0x11,0xff,0xe1,0x8e,0xa3,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e, 78.1170 + 0xa4,0x00,0x11,0xff,0xe1,0x8e,0xa5,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xa6,0x00, 78.1171 + 0x11,0xff,0xe1,0x8e,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e, 78.1172 + 0xa8,0x00,0x11,0xff,0xe1,0x8e,0xa9,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xaa,0x00, 78.1173 + 0x11,0xff,0xe1,0x8e,0xab,0x00,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xac,0x00, 78.1174 + 0x11,0xff,0xe1,0x8e,0xad,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xae,0x00,0x11,0xff, 78.1175 + 0xe1,0x8e,0xaf,0x00,0xe0,0xb2,0x65,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40, 78.1176 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb0,0x00,0x11,0xff,0xe1,0x8e, 78.1177 + 0xb1,0x00,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb2,0x00,0x11,0xff,0xe1,0x8e,0xb3,0x00, 78.1178 + 0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb4,0x00,0x11,0xff,0xe1,0x8e,0xb5,0x00, 78.1179 + 0x10,0x08,0x11,0xff,0xe1,0x8e,0xb6,0x00,0x11,0xff,0xe1,0x8e,0xb7,0x00,0xd2,0x20, 78.1180 + 0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8e,0xb8,0x00,0x11,0xff,0xe1,0x8e,0xb9,0x00, 78.1181 + 0x10,0x08,0x11,0xff,0xe1,0x8e,0xba,0x00,0x11,0xff,0xe1,0x8e,0xbb,0x00,0xd1,0x10, 78.1182 + 0x10,0x08,0x11,0xff,0xe1,0x8e,0xbc,0x00,0x11,0xff,0xe1,0x8e,0xbd,0x00,0x10,0x08, 78.1183 + 0x11,0xff,0xe1,0x8e,0xbe,0x00,0x11,0xff,0xe1,0x8e,0xbf,0x00,0xd3,0x40,0xd2,0x20, 78.1184 + 0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0x80,0x00,0x11,0xff,0xe1,0x8f,0x81,0x00, 78.1185 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0x82,0x00,0x11,0xff,0xe1,0x8f,0x83,0x00,0xd1,0x10, 78.1186 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0x84,0x00,0x11,0xff,0xe1,0x8f,0x85,0x00,0x10,0x08, 78.1187 + 0x11,0xff,0xe1,0x8f,0x86,0x00,0x11,0xff,0xe1,0x8f,0x87,0x00,0xd2,0x20,0xd1,0x10, 78.1188 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0x88,0x00,0x11,0xff,0xe1,0x8f,0x89,0x00,0x10,0x08, 78.1189 + 0x11,0xff,0xe1,0x8f,0x8a,0x00,0x11,0xff,0xe1,0x8f,0x8b,0x00,0xd1,0x10,0x10,0x08, 78.1190 + 0x11,0xff,0xe1,0x8f,0x8c,0x00,0x11,0xff,0xe1,0x8f,0x8d,0x00,0x10,0x08,0x11,0xff, 78.1191 + 0xe1,0x8f,0x8e,0x00,0x11,0xff,0xe1,0x8f,0x8f,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20, 78.1192 + 0xd1,0x10,0x10,0x08,0x11,0xff,0xe1,0x8f,0x90,0x00,0x11,0xff,0xe1,0x8f,0x91,0x00, 78.1193 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0x92,0x00,0x11,0xff,0xe1,0x8f,0x93,0x00,0xd1,0x10, 78.1194 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0x94,0x00,0x11,0xff,0xe1,0x8f,0x95,0x00,0x10,0x08, 78.1195 + 0x11,0xff,0xe1,0x8f,0x96,0x00,0x11,0xff,0xe1,0x8f,0x97,0x00,0xd2,0x20,0xd1,0x10, 78.1196 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0x98,0x00,0x11,0xff,0xe1,0x8f,0x99,0x00,0x10,0x08, 78.1197 + 0x11,0xff,0xe1,0x8f,0x9a,0x00,0x11,0xff,0xe1,0x8f,0x9b,0x00,0xd1,0x10,0x10,0x08, 78.1198 + 0x11,0xff,0xe1,0x8f,0x9c,0x00,0x11,0xff,0xe1,0x8f,0x9d,0x00,0x10,0x08,0x11,0xff, 78.1199 + 0xe1,0x8f,0x9e,0x00,0x11,0xff,0xe1,0x8f,0x9f,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.1200 + 0x10,0x08,0x11,0xff,0xe1,0x8f,0xa0,0x00,0x11,0xff,0xe1,0x8f,0xa1,0x00,0x10,0x08, 78.1201 + 0x11,0xff,0xe1,0x8f,0xa2,0x00,0x11,0xff,0xe1,0x8f,0xa3,0x00,0xd1,0x10,0x10,0x08, 78.1202 + 0x11,0xff,0xe1,0x8f,0xa4,0x00,0x11,0xff,0xe1,0x8f,0xa5,0x00,0x10,0x08,0x11,0xff, 78.1203 + 0xe1,0x8f,0xa6,0x00,0x11,0xff,0xe1,0x8f,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.1204 + 0x11,0xff,0xe1,0x8f,0xa8,0x00,0x11,0xff,0xe1,0x8f,0xa9,0x00,0x10,0x08,0x11,0xff, 78.1205 + 0xe1,0x8f,0xaa,0x00,0x11,0xff,0xe1,0x8f,0xab,0x00,0xd1,0x10,0x10,0x08,0x11,0xff, 78.1206 + 0xe1,0x8f,0xac,0x00,0x11,0xff,0xe1,0x8f,0xad,0x00,0x10,0x08,0x11,0xff,0xe1,0x8f, 78.1207 + 0xae,0x00,0x11,0xff,0xe1,0x8f,0xaf,0x00,0xd1,0x0c,0xe0,0xeb,0x63,0xcf,0x86,0xcf, 78.1208 + 0x06,0x02,0xff,0xff,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06, 78.1209 + 0xcf,0x06,0x01,0x00,0xd4,0xae,0xd3,0x09,0xe2,0x54,0x64,0xcf,0x06,0x01,0x00,0xd2, 78.1210 + 0x27,0xe1,0x1f,0x70,0xe0,0x26,0x6e,0xcf,0x86,0xe5,0x3f,0x6d,0xe4,0xce,0x6c,0xe3, 78.1211 + 0x99,0x6c,0xe2,0x78,0x6c,0xe1,0x67,0x6c,0x10,0x08,0x01,0xff,0xe5,0x88,0x87,0x00, 78.1212 + 0x01,0xff,0xe5,0xba,0xa6,0x00,0xe1,0x74,0x74,0xe0,0xe8,0x73,0xcf,0x86,0xe5,0x22, 78.1213 + 0x73,0xd4,0x3b,0x93,0x37,0xd2,0x1d,0xd1,0x0e,0x10,0x07,0x01,0xff,0x66,0x66,0x00, 78.1214 + 0x01,0xff,0x66,0x69,0x00,0x10,0x07,0x01,0xff,0x66,0x6c,0x00,0x01,0xff,0x66,0x66, 78.1215 + 0x69,0x00,0xd1,0x0f,0x10,0x08,0x01,0xff,0x66,0x66,0x6c,0x00,0x01,0xff,0x73,0x74, 78.1216 + 0x00,0x10,0x07,0x01,0xff,0x73,0x74,0x00,0x00,0x00,0x00,0x00,0xe3,0xc8,0x72,0xd2, 78.1217 + 0x11,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0xff,0xd5,0xb4,0xd5,0xb6,0x00, 78.1218 + 0xd1,0x12,0x10,0x09,0x01,0xff,0xd5,0xb4,0xd5,0xa5,0x00,0x01,0xff,0xd5,0xb4,0xd5, 78.1219 + 0xab,0x00,0x10,0x09,0x01,0xff,0xd5,0xbe,0xd5,0xb6,0x00,0x01,0xff,0xd5,0xb4,0xd5, 78.1220 + 0xad,0x00,0xd3,0x09,0xe2,0x40,0x74,0xcf,0x06,0x01,0x00,0xd2,0x13,0xe1,0x30,0x75, 78.1221 + 0xe0,0xc1,0x74,0xcf,0x86,0xe5,0x9e,0x74,0x64,0x8d,0x74,0x06,0xff,0x00,0xe1,0x96, 78.1222 + 0x75,0xe0,0x63,0x75,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08, 78.1223 + 0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x7c, 78.1224 + 0xd3,0x3c,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xef,0xbd,0x81,0x00, 78.1225 + 0x10,0x08,0x01,0xff,0xef,0xbd,0x82,0x00,0x01,0xff,0xef,0xbd,0x83,0x00,0xd1,0x10, 78.1226 + 0x10,0x08,0x01,0xff,0xef,0xbd,0x84,0x00,0x01,0xff,0xef,0xbd,0x85,0x00,0x10,0x08, 78.1227 + 0x01,0xff,0xef,0xbd,0x86,0x00,0x01,0xff,0xef,0xbd,0x87,0x00,0xd2,0x20,0xd1,0x10, 78.1228 + 0x10,0x08,0x01,0xff,0xef,0xbd,0x88,0x00,0x01,0xff,0xef,0xbd,0x89,0x00,0x10,0x08, 78.1229 + 0x01,0xff,0xef,0xbd,0x8a,0x00,0x01,0xff,0xef,0xbd,0x8b,0x00,0xd1,0x10,0x10,0x08, 78.1230 + 0x01,0xff,0xef,0xbd,0x8c,0x00,0x01,0xff,0xef,0xbd,0x8d,0x00,0x10,0x08,0x01,0xff, 78.1231 + 0xef,0xbd,0x8e,0x00,0x01,0xff,0xef,0xbd,0x8f,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.1232 + 0x10,0x08,0x01,0xff,0xef,0xbd,0x90,0x00,0x01,0xff,0xef,0xbd,0x91,0x00,0x10,0x08, 78.1233 + 0x01,0xff,0xef,0xbd,0x92,0x00,0x01,0xff,0xef,0xbd,0x93,0x00,0xd1,0x10,0x10,0x08, 78.1234 + 0x01,0xff,0xef,0xbd,0x94,0x00,0x01,0xff,0xef,0xbd,0x95,0x00,0x10,0x08,0x01,0xff, 78.1235 + 0xef,0xbd,0x96,0x00,0x01,0xff,0xef,0xbd,0x97,0x00,0x92,0x1c,0xd1,0x10,0x10,0x08, 78.1236 + 0x01,0xff,0xef,0xbd,0x98,0x00,0x01,0xff,0xef,0xbd,0x99,0x00,0x10,0x08,0x01,0xff, 78.1237 + 0xef,0xbd,0x9a,0x00,0x01,0x00,0x01,0x00,0x83,0xe2,0x87,0xb3,0xe1,0x60,0xb0,0xe0, 78.1238 + 0xdd,0xae,0xcf,0x86,0xe5,0x81,0x9b,0xc4,0xe3,0xc1,0x07,0xe2,0x62,0x06,0xe1,0x11, 78.1239 + 0x86,0xe0,0x09,0x05,0xcf,0x86,0xe5,0xfb,0x02,0xd4,0x1c,0xe3,0x7f,0x76,0xe2,0xd6, 78.1240 + 0x75,0xe1,0xb1,0x75,0xe0,0x8a,0x75,0xcf,0x86,0xe5,0x57,0x75,0x94,0x07,0x63,0x42, 78.1241 + 0x75,0x07,0x00,0x07,0x00,0xe3,0x2b,0x78,0xe2,0xf0,0x77,0xe1,0x77,0x01,0xe0,0x88, 78.1242 + 0x77,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09, 78.1243 + 0x05,0xff,0xf0,0x90,0x90,0xa8,0x00,0x05,0xff,0xf0,0x90,0x90,0xa9,0x00,0x10,0x09, 78.1244 + 0x05,0xff,0xf0,0x90,0x90,0xaa,0x00,0x05,0xff,0xf0,0x90,0x90,0xab,0x00,0xd1,0x12, 78.1245 + 0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xac,0x00,0x05,0xff,0xf0,0x90,0x90,0xad,0x00, 78.1246 + 0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xae,0x00,0x05,0xff,0xf0,0x90,0x90,0xaf,0x00, 78.1247 + 0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb0,0x00,0x05,0xff,0xf0, 78.1248 + 0x90,0x90,0xb1,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb2,0x00,0x05,0xff,0xf0, 78.1249 + 0x90,0x90,0xb3,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb4,0x00,0x05, 78.1250 + 0xff,0xf0,0x90,0x90,0xb5,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x90,0xb6,0x00,0x05, 78.1251 + 0xff,0xf0,0x90,0x90,0xb7,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff, 78.1252 + 0xf0,0x90,0x90,0xb8,0x00,0x05,0xff,0xf0,0x90,0x90,0xb9,0x00,0x10,0x09,0x05,0xff, 78.1253 + 0xf0,0x90,0x90,0xba,0x00,0x05,0xff,0xf0,0x90,0x90,0xbb,0x00,0xd1,0x12,0x10,0x09, 78.1254 + 0x05,0xff,0xf0,0x90,0x90,0xbc,0x00,0x05,0xff,0xf0,0x90,0x90,0xbd,0x00,0x10,0x09, 78.1255 + 0x05,0xff,0xf0,0x90,0x90,0xbe,0x00,0x05,0xff,0xf0,0x90,0x90,0xbf,0x00,0xd2,0x24, 78.1256 + 0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x80,0x00,0x05,0xff,0xf0,0x90,0x91, 78.1257 + 0x81,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x82,0x00,0x05,0xff,0xf0,0x90,0x91, 78.1258 + 0x83,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x84,0x00,0x05,0xff,0xf0, 78.1259 + 0x90,0x91,0x85,0x00,0x10,0x09,0x05,0xff,0xf0,0x90,0x91,0x86,0x00,0x05,0xff,0xf0, 78.1260 + 0x90,0x91,0x87,0x00,0x94,0x4c,0x93,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x05,0xff, 78.1261 + 0xf0,0x90,0x91,0x88,0x00,0x05,0xff,0xf0,0x90,0x91,0x89,0x00,0x10,0x09,0x05,0xff, 78.1262 + 0xf0,0x90,0x91,0x8a,0x00,0x05,0xff,0xf0,0x90,0x91,0x8b,0x00,0xd1,0x12,0x10,0x09, 78.1263 + 0x05,0xff,0xf0,0x90,0x91,0x8c,0x00,0x05,0xff,0xf0,0x90,0x91,0x8d,0x00,0x10,0x09, 78.1264 + 0x07,0xff,0xf0,0x90,0x91,0x8e,0x00,0x07,0xff,0xf0,0x90,0x91,0x8f,0x00,0x05,0x00, 78.1265 + 0x05,0x00,0xd0,0xa0,0xcf,0x86,0xd5,0x07,0x64,0x30,0x76,0x07,0x00,0xd4,0x07,0x63, 78.1266 + 0x3d,0x76,0x07,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90, 78.1267 + 0x93,0x98,0x00,0x12,0xff,0xf0,0x90,0x93,0x99,0x00,0x10,0x09,0x12,0xff,0xf0,0x90, 78.1268 + 0x93,0x9a,0x00,0x12,0xff,0xf0,0x90,0x93,0x9b,0x00,0xd1,0x12,0x10,0x09,0x12,0xff, 78.1269 + 0xf0,0x90,0x93,0x9c,0x00,0x12,0xff,0xf0,0x90,0x93,0x9d,0x00,0x10,0x09,0x12,0xff, 78.1270 + 0xf0,0x90,0x93,0x9e,0x00,0x12,0xff,0xf0,0x90,0x93,0x9f,0x00,0xd2,0x24,0xd1,0x12, 78.1271 + 0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa0,0x00,0x12,0xff,0xf0,0x90,0x93,0xa1,0x00, 78.1272 + 0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa2,0x00,0x12,0xff,0xf0,0x90,0x93,0xa3,0x00, 78.1273 + 0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa4,0x00,0x12,0xff,0xf0,0x90,0x93, 78.1274 + 0xa5,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xa6,0x00,0x12,0xff,0xf0,0x90,0x93, 78.1275 + 0xa7,0x00,0xcf,0x86,0xe5,0xc6,0x75,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10, 78.1276 + 0x09,0x12,0xff,0xf0,0x90,0x93,0xa8,0x00,0x12,0xff,0xf0,0x90,0x93,0xa9,0x00,0x10, 78.1277 + 0x09,0x12,0xff,0xf0,0x90,0x93,0xaa,0x00,0x12,0xff,0xf0,0x90,0x93,0xab,0x00,0xd1, 78.1278 + 0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xac,0x00,0x12,0xff,0xf0,0x90,0x93,0xad, 78.1279 + 0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xae,0x00,0x12,0xff,0xf0,0x90,0x93,0xaf, 78.1280 + 0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb0,0x00,0x12,0xff, 78.1281 + 0xf0,0x90,0x93,0xb1,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb2,0x00,0x12,0xff, 78.1282 + 0xf0,0x90,0x93,0xb3,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb4,0x00, 78.1283 + 0x12,0xff,0xf0,0x90,0x93,0xb5,0x00,0x10,0x09,0x12,0xff,0xf0,0x90,0x93,0xb6,0x00, 78.1284 + 0x12,0xff,0xf0,0x90,0x93,0xb7,0x00,0x93,0x28,0x92,0x24,0xd1,0x12,0x10,0x09,0x12, 78.1285 + 0xff,0xf0,0x90,0x93,0xb8,0x00,0x12,0xff,0xf0,0x90,0x93,0xb9,0x00,0x10,0x09,0x12, 78.1286 + 0xff,0xf0,0x90,0x93,0xba,0x00,0x12,0xff,0xf0,0x90,0x93,0xbb,0x00,0x00,0x00,0x12, 78.1287 + 0x00,0xd4,0x1f,0xe3,0xdf,0x76,0xe2,0x6a,0x76,0xe1,0x09,0x76,0xe0,0xea,0x75,0xcf, 78.1288 + 0x86,0xe5,0xb7,0x75,0x94,0x0a,0xe3,0xa2,0x75,0x62,0x99,0x75,0x07,0x00,0x07,0x00, 78.1289 + 0xe3,0xde,0x78,0xe2,0xaf,0x78,0xd1,0x09,0xe0,0x4c,0x78,0xcf,0x06,0x0b,0x00,0xe0, 78.1290 + 0x7f,0x78,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10, 78.1291 + 0x09,0x11,0xff,0xf0,0x90,0xb3,0x80,0x00,0x11,0xff,0xf0,0x90,0xb3,0x81,0x00,0x10, 78.1292 + 0x09,0x11,0xff,0xf0,0x90,0xb3,0x82,0x00,0x11,0xff,0xf0,0x90,0xb3,0x83,0x00,0xd1, 78.1293 + 0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x84,0x00,0x11,0xff,0xf0,0x90,0xb3,0x85, 78.1294 + 0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x86,0x00,0x11,0xff,0xf0,0x90,0xb3,0x87, 78.1295 + 0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x88,0x00,0x11,0xff, 78.1296 + 0xf0,0x90,0xb3,0x89,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8a,0x00,0x11,0xff, 78.1297 + 0xf0,0x90,0xb3,0x8b,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8c,0x00, 78.1298 + 0x11,0xff,0xf0,0x90,0xb3,0x8d,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x8e,0x00, 78.1299 + 0x11,0xff,0xf0,0x90,0xb3,0x8f,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11, 78.1300 + 0xff,0xf0,0x90,0xb3,0x90,0x00,0x11,0xff,0xf0,0x90,0xb3,0x91,0x00,0x10,0x09,0x11, 78.1301 + 0xff,0xf0,0x90,0xb3,0x92,0x00,0x11,0xff,0xf0,0x90,0xb3,0x93,0x00,0xd1,0x12,0x10, 78.1302 + 0x09,0x11,0xff,0xf0,0x90,0xb3,0x94,0x00,0x11,0xff,0xf0,0x90,0xb3,0x95,0x00,0x10, 78.1303 + 0x09,0x11,0xff,0xf0,0x90,0xb3,0x96,0x00,0x11,0xff,0xf0,0x90,0xb3,0x97,0x00,0xd2, 78.1304 + 0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x98,0x00,0x11,0xff,0xf0,0x90, 78.1305 + 0xb3,0x99,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9a,0x00,0x11,0xff,0xf0,0x90, 78.1306 + 0xb3,0x9b,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9c,0x00,0x11,0xff, 78.1307 + 0xf0,0x90,0xb3,0x9d,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0x9e,0x00,0x11,0xff, 78.1308 + 0xf0,0x90,0xb3,0x9f,0x00,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x11, 78.1309 + 0xff,0xf0,0x90,0xb3,0xa0,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa1,0x00,0x10,0x09,0x11, 78.1310 + 0xff,0xf0,0x90,0xb3,0xa2,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa3,0x00,0xd1,0x12,0x10, 78.1311 + 0x09,0x11,0xff,0xf0,0x90,0xb3,0xa4,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa5,0x00,0x10, 78.1312 + 0x09,0x11,0xff,0xf0,0x90,0xb3,0xa6,0x00,0x11,0xff,0xf0,0x90,0xb3,0xa7,0x00,0xd2, 78.1313 + 0x24,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xa8,0x00,0x11,0xff,0xf0,0x90, 78.1314 + 0xb3,0xa9,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xaa,0x00,0x11,0xff,0xf0,0x90, 78.1315 + 0xb3,0xab,0x00,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xac,0x00,0x11,0xff, 78.1316 + 0xf0,0x90,0xb3,0xad,0x00,0x10,0x09,0x11,0xff,0xf0,0x90,0xb3,0xae,0x00,0x11,0xff, 78.1317 + 0xf0,0x90,0xb3,0xaf,0x00,0x93,0x23,0x92,0x1f,0xd1,0x12,0x10,0x09,0x11,0xff,0xf0, 78.1318 + 0x90,0xb3,0xb0,0x00,0x11,0xff,0xf0,0x90,0xb3,0xb1,0x00,0x10,0x09,0x11,0xff,0xf0, 78.1319 + 0x90,0xb3,0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x15,0xe4,0x91, 78.1320 + 0x7b,0xe3,0x9b,0x79,0xe2,0x94,0x78,0xe1,0xe4,0x77,0xe0,0x9d,0x77,0xcf,0x06,0x0c, 78.1321 + 0x00,0xe4,0xeb,0x7e,0xe3,0x44,0x7e,0xe2,0xed,0x7d,0xd1,0x0c,0xe0,0xb2,0x7d,0xcf, 78.1322 + 0x86,0x65,0x93,0x7d,0x14,0x00,0xe0,0xb6,0x7d,0xcf,0x86,0x55,0x04,0x00,0x00,0xd4, 78.1323 + 0x90,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x80,0x00, 78.1324 + 0x10,0xff,0xf0,0x91,0xa3,0x81,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x82,0x00, 78.1325 + 0x10,0xff,0xf0,0x91,0xa3,0x83,0x00,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3, 78.1326 + 0x84,0x00,0x10,0xff,0xf0,0x91,0xa3,0x85,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3, 78.1327 + 0x86,0x00,0x10,0xff,0xf0,0x91,0xa3,0x87,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10, 78.1328 + 0xff,0xf0,0x91,0xa3,0x88,0x00,0x10,0xff,0xf0,0x91,0xa3,0x89,0x00,0x10,0x09,0x10, 78.1329 + 0xff,0xf0,0x91,0xa3,0x8a,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8b,0x00,0xd1,0x12,0x10, 78.1330 + 0x09,0x10,0xff,0xf0,0x91,0xa3,0x8c,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8d,0x00,0x10, 78.1331 + 0x09,0x10,0xff,0xf0,0x91,0xa3,0x8e,0x00,0x10,0xff,0xf0,0x91,0xa3,0x8f,0x00,0xd3, 78.1332 + 0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x90,0x00,0x10,0xff, 78.1333 + 0xf0,0x91,0xa3,0x91,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x92,0x00,0x10,0xff, 78.1334 + 0xf0,0x91,0xa3,0x93,0x00,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x94,0x00, 78.1335 + 0x10,0xff,0xf0,0x91,0xa3,0x95,0x00,0x10,0x09,0x10,0xff,0xf0,0x91,0xa3,0x96,0x00, 78.1336 + 0x10,0xff,0xf0,0x91,0xa3,0x97,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x10,0xff,0xf0, 78.1337 + 0x91,0xa3,0x98,0x00,0x10,0xff,0xf0,0x91,0xa3,0x99,0x00,0x10,0x09,0x10,0xff,0xf0, 78.1338 + 0x91,0xa3,0x9a,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9b,0x00,0xd1,0x12,0x10,0x09,0x10, 78.1339 + 0xff,0xf0,0x91,0xa3,0x9c,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9d,0x00,0x10,0x09,0x10, 78.1340 + 0xff,0xf0,0x91,0xa3,0x9e,0x00,0x10,0xff,0xf0,0x91,0xa3,0x9f,0x00,0xd1,0x11,0xe0, 78.1341 + 0x12,0x81,0xcf,0x86,0xe5,0x09,0x81,0xe4,0xd2,0x80,0xcf,0x06,0x00,0x00,0xe0,0xdb, 78.1342 + 0x82,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x09,0xe3,0x10,0x81,0xcf,0x06, 78.1343 + 0x0c,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xe2,0x3b,0x82,0xe1,0x16,0x82,0xd0,0x06, 78.1344 + 0xcf,0x06,0x00,0x00,0xcf,0x86,0xa5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1, 78.1345 + 0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa0,0x00,0x14,0xff,0xf0,0x96,0xb9,0xa1, 78.1346 + 0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa2,0x00,0x14,0xff,0xf0,0x96,0xb9,0xa3, 78.1347 + 0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa4,0x00,0x14,0xff,0xf0,0x96, 78.1348 + 0xb9,0xa5,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa6,0x00,0x14,0xff,0xf0,0x96, 78.1349 + 0xb9,0xa7,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xa8,0x00, 78.1350 + 0x14,0xff,0xf0,0x96,0xb9,0xa9,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xaa,0x00, 78.1351 + 0x14,0xff,0xf0,0x96,0xb9,0xab,0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9, 78.1352 + 0xac,0x00,0x14,0xff,0xf0,0x96,0xb9,0xad,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9, 78.1353 + 0xae,0x00,0x14,0xff,0xf0,0x96,0xb9,0xaf,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10, 78.1354 + 0x09,0x14,0xff,0xf0,0x96,0xb9,0xb0,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb1,0x00,0x10, 78.1355 + 0x09,0x14,0xff,0xf0,0x96,0xb9,0xb2,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb3,0x00,0xd1, 78.1356 + 0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb4,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb5, 78.1357 + 0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb6,0x00,0x14,0xff,0xf0,0x96,0xb9,0xb7, 78.1358 + 0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xb8,0x00,0x14,0xff, 78.1359 + 0xf0,0x96,0xb9,0xb9,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xba,0x00,0x14,0xff, 78.1360 + 0xf0,0x96,0xb9,0xbb,0x00,0xd1,0x12,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xbc,0x00, 78.1361 + 0x14,0xff,0xf0,0x96,0xb9,0xbd,0x00,0x10,0x09,0x14,0xff,0xf0,0x96,0xb9,0xbe,0x00, 78.1362 + 0x14,0xff,0xf0,0x96,0xb9,0xbf,0x00,0x14,0x00,0xd2,0x14,0xe1,0x25,0x82,0xe0,0x1c, 78.1363 + 0x82,0xcf,0x86,0xe5,0xdd,0x81,0xe4,0x9a,0x81,0xcf,0x06,0x12,0x00,0xd1,0x0b,0xe0, 78.1364 + 0x51,0x83,0xcf,0x86,0xcf,0x06,0x00,0x00,0xe0,0x95,0x8b,0xcf,0x86,0xd5,0x22,0xe4, 78.1365 + 0xd0,0x88,0xe3,0x93,0x88,0xe2,0x38,0x88,0xe1,0x31,0x88,0xe0,0x2a,0x88,0xcf,0x86, 78.1366 + 0xe5,0xfb,0x87,0xe4,0xe2,0x87,0x93,0x07,0x62,0xd1,0x87,0x12,0xe6,0x12,0xe6,0xe4, 78.1367 + 0x36,0x89,0xe3,0x2f,0x89,0xd2,0x09,0xe1,0xb8,0x88,0xcf,0x06,0x10,0x00,0xe1,0x1f, 78.1368 + 0x89,0xe0,0xec,0x88,0xcf,0x86,0xe5,0x21,0x01,0xd4,0x90,0xd3,0x48,0xd2,0x24,0xd1, 78.1369 + 0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa2,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xa3, 78.1370 + 0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa4,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xa5, 78.1371 + 0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa6,0x00,0x12,0xff,0xf0,0x9e, 78.1372 + 0xa4,0xa7,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xa8,0x00,0x12,0xff,0xf0,0x9e, 78.1373 + 0xa4,0xa9,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xaa,0x00, 78.1374 + 0x12,0xff,0xf0,0x9e,0xa4,0xab,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xac,0x00, 78.1375 + 0x12,0xff,0xf0,0x9e,0xa4,0xad,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4, 78.1376 + 0xae,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xaf,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4, 78.1377 + 0xb0,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb1,0x00,0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10, 78.1378 + 0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb2,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb3,0x00,0x10, 78.1379 + 0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb4,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb5,0x00,0xd1, 78.1380 + 0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb6,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb7, 78.1381 + 0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xb8,0x00,0x12,0xff,0xf0,0x9e,0xa4,0xb9, 78.1382 + 0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xba,0x00,0x12,0xff, 78.1383 + 0xf0,0x9e,0xa4,0xbb,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xbc,0x00,0x12,0xff, 78.1384 + 0xf0,0x9e,0xa4,0xbd,0x00,0xd1,0x12,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa4,0xbe,0x00, 78.1385 + 0x12,0xff,0xf0,0x9e,0xa4,0xbf,0x00,0x10,0x09,0x12,0xff,0xf0,0x9e,0xa5,0x80,0x00, 78.1386 + 0x12,0xff,0xf0,0x9e,0xa5,0x81,0x00,0x94,0x1e,0x93,0x1a,0x92,0x16,0x91,0x12,0x10, 78.1387 + 0x09,0x12,0xff,0xf0,0x9e,0xa5,0x82,0x00,0x12,0xff,0xf0,0x9e,0xa5,0x83,0x00,0x12, 78.1388 + 0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.1389 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.1390 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.1391 + /* nfdi_c0100 */ 78.1392 + 0x57,0x04,0x01,0x00,0xc6,0xe5,0xac,0x13,0xe4,0x41,0x0c,0xe3,0x7a,0x07,0xe2,0xf3, 78.1393 + 0x01,0xc1,0xd0,0x1f,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x15,0x53,0x04,0x01,0x00, 78.1394 + 0x52,0x04,0x01,0x00,0x91,0x09,0x10,0x04,0x01,0x00,0x01,0xff,0x00,0x01,0x00,0x01, 78.1395 + 0x00,0xcf,0x86,0xd5,0xe4,0xd4,0x7c,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01, 78.1396 + 0xff,0x41,0xcc,0x80,0x00,0x01,0xff,0x41,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x41, 78.1397 + 0xcc,0x82,0x00,0x01,0xff,0x41,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x41, 78.1398 + 0xcc,0x88,0x00,0x01,0xff,0x41,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x43, 78.1399 + 0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x80,0x00,0x01, 78.1400 + 0xff,0x45,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x82,0x00,0x01,0xff,0x45, 78.1401 + 0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x80,0x00,0x01,0xff,0x49, 78.1402 + 0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x82,0x00,0x01,0xff,0x49,0xcc,0x88, 78.1403 + 0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x4e,0xcc,0x83, 78.1404 + 0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x80,0x00,0x01,0xff,0x4f,0xcc,0x81,0x00,0xd1, 78.1405 + 0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x82,0x00,0x01,0xff,0x4f,0xcc,0x83,0x00,0x10, 78.1406 + 0x08,0x01,0xff,0x4f,0xcc,0x88,0x00,0x01,0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01, 78.1407 + 0x00,0x01,0xff,0x55,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x81,0x00,0x01, 78.1408 + 0xff,0x55,0xcc,0x82,0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x88,0x00,0x01, 78.1409 + 0xff,0x59,0xcc,0x81,0x00,0x01,0x00,0xd4,0x7c,0xd3,0x3c,0xd2,0x20,0xd1,0x10,0x10, 78.1410 + 0x08,0x01,0xff,0x61,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x81,0x00,0x10,0x08,0x01, 78.1411 + 0xff,0x61,0xcc,0x82,0x00,0x01,0xff,0x61,0xcc,0x83,0x00,0xd1,0x10,0x10,0x08,0x01, 78.1412 + 0xff,0x61,0xcc,0x88,0x00,0x01,0xff,0x61,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x01, 78.1413 + 0xff,0x63,0xcc,0xa7,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x65,0xcc,0x80, 78.1414 + 0x00,0x01,0xff,0x65,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x65,0xcc,0x82,0x00,0x01, 78.1415 + 0xff,0x65,0xcc,0x88,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x80,0x00,0x01, 78.1416 + 0xff,0x69,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x69,0xcc,0x82,0x00,0x01,0xff,0x69, 78.1417 + 0xcc,0x88,0x00,0xd3,0x38,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x6e, 78.1418 + 0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x81, 78.1419 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x6f,0xcc,0x82,0x00,0x01,0xff,0x6f,0xcc,0x83, 78.1420 + 0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x88,0x00,0x01,0x00,0xd2,0x1c,0xd1,0x0c,0x10, 78.1421 + 0x04,0x01,0x00,0x01,0xff,0x75,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x75,0xcc,0x81, 78.1422 + 0x00,0x01,0xff,0x75,0xcc,0x82,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x75,0xcc,0x88, 78.1423 + 0x00,0x01,0xff,0x79,0xcc,0x81,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x79,0xcc,0x88, 78.1424 + 0x00,0xe1,0x9a,0x03,0xe0,0xd3,0x01,0xcf,0x86,0xd5,0xf4,0xd4,0x80,0xd3,0x40,0xd2, 78.1425 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x84, 78.1426 + 0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x86,0x00,0x01,0xff,0x61,0xcc,0x86,0x00,0xd1, 78.1427 + 0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa8,0x00,0x01,0xff,0x61,0xcc,0xa8,0x00,0x10, 78.1428 + 0x08,0x01,0xff,0x43,0xcc,0x81,0x00,0x01,0xff,0x63,0xcc,0x81,0x00,0xd2,0x20,0xd1, 78.1429 + 0x10,0x10,0x08,0x01,0xff,0x43,0xcc,0x82,0x00,0x01,0xff,0x63,0xcc,0x82,0x00,0x10, 78.1430 + 0x08,0x01,0xff,0x43,0xcc,0x87,0x00,0x01,0xff,0x63,0xcc,0x87,0x00,0xd1,0x10,0x10, 78.1431 + 0x08,0x01,0xff,0x43,0xcc,0x8c,0x00,0x01,0xff,0x63,0xcc,0x8c,0x00,0x10,0x08,0x01, 78.1432 + 0xff,0x44,0xcc,0x8c,0x00,0x01,0xff,0x64,0xcc,0x8c,0x00,0xd3,0x34,0xd2,0x14,0x51, 78.1433 + 0x04,0x01,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x84,0x00,0x01,0xff,0x65,0xcc,0x84, 78.1434 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0x86, 78.1435 + 0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x87,0x00,0x01,0xff,0x65,0xcc,0x87,0x00,0xd2, 78.1436 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0xa8,0x00,0x01,0xff,0x65,0xcc,0xa8, 78.1437 + 0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x8c,0x00,0x01,0xff,0x65,0xcc,0x8c,0x00,0xd1, 78.1438 + 0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x82,0x00,0x01,0xff,0x67,0xcc,0x82,0x00,0x10, 78.1439 + 0x08,0x01,0xff,0x47,0xcc,0x86,0x00,0x01,0xff,0x67,0xcc,0x86,0x00,0xd4,0x74,0xd3, 78.1440 + 0x34,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x87,0x00,0x01,0xff,0x67, 78.1441 + 0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x47,0xcc,0xa7,0x00,0x01,0xff,0x67,0xcc,0xa7, 78.1442 + 0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0x82,0x00,0x01,0xff,0x68,0xcc,0x82, 78.1443 + 0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x83,0x00,0x01, 78.1444 + 0xff,0x69,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x84,0x00,0x01,0xff,0x69, 78.1445 + 0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x86,0x00,0x01,0xff,0x69, 78.1446 + 0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0xa8,0x00,0x01,0xff,0x69,0xcc,0xa8, 78.1447 + 0x00,0xd3,0x30,0xd2,0x10,0x91,0x0c,0x10,0x08,0x01,0xff,0x49,0xcc,0x87,0x00,0x01, 78.1448 + 0x00,0x01,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4a,0xcc,0x82,0x00,0x01,0xff,0x6a, 78.1449 + 0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x4b,0xcc,0xa7,0x00,0x01,0xff,0x6b,0xcc,0xa7, 78.1450 + 0x00,0xd2,0x1c,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x4c,0xcc,0x81,0x00,0x10, 78.1451 + 0x08,0x01,0xff,0x6c,0xcc,0x81,0x00,0x01,0xff,0x4c,0xcc,0xa7,0x00,0xd1,0x10,0x10, 78.1452 + 0x08,0x01,0xff,0x6c,0xcc,0xa7,0x00,0x01,0xff,0x4c,0xcc,0x8c,0x00,0x10,0x08,0x01, 78.1453 + 0xff,0x6c,0xcc,0x8c,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd4,0xd4,0x60,0xd3,0x30,0xd2, 78.1454 + 0x10,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x4e,0xcc,0x81,0x00,0xd1, 78.1455 + 0x10,0x10,0x08,0x01,0xff,0x6e,0xcc,0x81,0x00,0x01,0xff,0x4e,0xcc,0xa7,0x00,0x10, 78.1456 + 0x08,0x01,0xff,0x6e,0xcc,0xa7,0x00,0x01,0xff,0x4e,0xcc,0x8c,0x00,0xd2,0x10,0x91, 78.1457 + 0x0c,0x10,0x08,0x01,0xff,0x6e,0xcc,0x8c,0x00,0x01,0x00,0x01,0x00,0xd1,0x10,0x10, 78.1458 + 0x08,0x01,0xff,0x4f,0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0x84,0x00,0x10,0x08,0x01, 78.1459 + 0xff,0x4f,0xcc,0x86,0x00,0x01,0xff,0x6f,0xcc,0x86,0x00,0xd3,0x34,0xd2,0x14,0x91, 78.1460 + 0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x8b,0x00,0x01,0xff,0x6f,0xcc,0x8b,0x00,0x01, 78.1461 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x81,0x00,0x01,0xff,0x72,0xcc,0x81, 78.1462 + 0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0xa7,0x00,0x01,0xff,0x72,0xcc,0xa7,0x00,0xd2, 78.1463 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x8c,0x00,0x01,0xff,0x72,0xcc,0x8c, 78.1464 + 0x00,0x10,0x08,0x01,0xff,0x53,0xcc,0x81,0x00,0x01,0xff,0x73,0xcc,0x81,0x00,0xd1, 78.1465 + 0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x82,0x00,0x01,0xff,0x73,0xcc,0x82,0x00,0x10, 78.1466 + 0x08,0x01,0xff,0x53,0xcc,0xa7,0x00,0x01,0xff,0x73,0xcc,0xa7,0x00,0xd4,0x74,0xd3, 78.1467 + 0x34,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x8c,0x00,0x01,0xff,0x73, 78.1468 + 0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0xa7,0x00,0x01,0xff,0x74,0xcc,0xa7, 78.1469 + 0x00,0x91,0x10,0x10,0x08,0x01,0xff,0x54,0xcc,0x8c,0x00,0x01,0xff,0x74,0xcc,0x8c, 78.1470 + 0x00,0x01,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x83,0x00,0x01, 78.1471 + 0xff,0x75,0xcc,0x83,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x84,0x00,0x01,0xff,0x75, 78.1472 + 0xcc,0x84,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x86,0x00,0x01,0xff,0x75, 78.1473 + 0xcc,0x86,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x8a,0x00,0x01,0xff,0x75,0xcc,0x8a, 78.1474 + 0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x8b,0x00,0x01, 78.1475 + 0xff,0x75,0xcc,0x8b,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xa8,0x00,0x01,0xff,0x75, 78.1476 + 0xcc,0xa8,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0x82,0x00,0x01,0xff,0x77, 78.1477 + 0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x59,0xcc,0x82,0x00,0x01,0xff,0x79,0xcc,0x82, 78.1478 + 0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x59,0xcc,0x88,0x00,0x01,0xff,0x5a, 78.1479 + 0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x81,0x00,0x01,0xff,0x5a,0xcc,0x87, 78.1480 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x7a,0xcc,0x87,0x00,0x01,0xff,0x5a,0xcc,0x8c, 78.1481 + 0x00,0x10,0x08,0x01,0xff,0x7a,0xcc,0x8c,0x00,0x01,0x00,0xd0,0x4a,0xcf,0x86,0x55, 78.1482 + 0x04,0x01,0x00,0xd4,0x2c,0xd3,0x18,0x92,0x14,0x91,0x10,0x10,0x08,0x01,0xff,0x4f, 78.1483 + 0xcc,0x9b,0x00,0x01,0xff,0x6f,0xcc,0x9b,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01, 78.1484 + 0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0x55,0xcc,0x9b,0x00,0x93, 78.1485 + 0x14,0x92,0x10,0x91,0x0c,0x10,0x08,0x01,0xff,0x75,0xcc,0x9b,0x00,0x01,0x00,0x01, 78.1486 + 0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xb4,0xd4,0x24,0x53,0x04,0x01,0x00,0x52, 78.1487 + 0x04,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0x41,0xcc,0x8c,0x00,0x10, 78.1488 + 0x08,0x01,0xff,0x61,0xcc,0x8c,0x00,0x01,0xff,0x49,0xcc,0x8c,0x00,0xd3,0x46,0xd2, 78.1489 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x69,0xcc,0x8c,0x00,0x01,0xff,0x4f,0xcc,0x8c, 78.1490 + 0x00,0x10,0x08,0x01,0xff,0x6f,0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x8c,0x00,0xd1, 78.1491 + 0x12,0x10,0x08,0x01,0xff,0x75,0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x84, 78.1492 + 0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x84,0x00,0x01,0xff,0x55,0xcc,0x88, 78.1493 + 0xcc,0x81,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88,0xcc,0x81, 78.1494 + 0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x8c,0x00,0x10,0x0a,0x01,0xff,0x75,0xcc,0x88, 78.1495 + 0xcc,0x8c,0x00,0x01,0xff,0x55,0xcc,0x88,0xcc,0x80,0x00,0xd1,0x0e,0x10,0x0a,0x01, 78.1496 + 0xff,0x75,0xcc,0x88,0xcc,0x80,0x00,0x01,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x88, 78.1497 + 0xcc,0x84,0x00,0x01,0xff,0x61,0xcc,0x88,0xcc,0x84,0x00,0xd4,0x80,0xd3,0x3a,0xd2, 78.1498 + 0x26,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x87,0xcc,0x84,0x00,0x01,0xff,0x61, 78.1499 + 0xcc,0x87,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc3,0x86,0xcc,0x84,0x00,0x01,0xff, 78.1500 + 0xc3,0xa6,0xcc,0x84,0x00,0x51,0x04,0x01,0x00,0x10,0x08,0x01,0xff,0x47,0xcc,0x8c, 78.1501 + 0x00,0x01,0xff,0x67,0xcc,0x8c,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b, 78.1502 + 0xcc,0x8c,0x00,0x01,0xff,0x6b,0xcc,0x8c,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0xa8, 78.1503 + 0x00,0x01,0xff,0x6f,0xcc,0xa8,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0xa8, 78.1504 + 0xcc,0x84,0x00,0x01,0xff,0x6f,0xcc,0xa8,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xc6, 78.1505 + 0xb7,0xcc,0x8c,0x00,0x01,0xff,0xca,0x92,0xcc,0x8c,0x00,0xd3,0x24,0xd2,0x10,0x91, 78.1506 + 0x0c,0x10,0x08,0x01,0xff,0x6a,0xcc,0x8c,0x00,0x01,0x00,0x01,0x00,0x91,0x10,0x10, 78.1507 + 0x08,0x01,0xff,0x47,0xcc,0x81,0x00,0x01,0xff,0x67,0xcc,0x81,0x00,0x04,0x00,0xd2, 78.1508 + 0x24,0xd1,0x10,0x10,0x08,0x04,0xff,0x4e,0xcc,0x80,0x00,0x04,0xff,0x6e,0xcc,0x80, 78.1509 + 0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x8a,0xcc,0x81,0x00,0x01,0xff,0x61,0xcc,0x8a, 78.1510 + 0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xc3,0x86,0xcc,0x81,0x00,0x01,0xff, 78.1511 + 0xc3,0xa6,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xc3,0x98,0xcc,0x81,0x00,0x01,0xff, 78.1512 + 0xc3,0xb8,0xcc,0x81,0x00,0xe2,0x07,0x02,0xe1,0xae,0x01,0xe0,0x93,0x01,0xcf,0x86, 78.1513 + 0xd5,0xf4,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc, 78.1514 + 0x8f,0x00,0x01,0xff,0x61,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x91,0x00, 78.1515 + 0x01,0xff,0x61,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45,0xcc,0x8f,0x00, 78.1516 + 0x01,0xff,0x65,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x45,0xcc,0x91,0x00,0x01,0xff, 78.1517 + 0x65,0xcc,0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x8f,0x00, 78.1518 + 0x01,0xff,0x69,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0x91,0x00,0x01,0xff, 78.1519 + 0x69,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0x8f,0x00,0x01,0xff, 78.1520 + 0x6f,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x91,0x00,0x01,0xff,0x6f,0xcc, 78.1521 + 0x91,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52,0xcc,0x8f,0x00, 78.1522 + 0x01,0xff,0x72,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0x91,0x00,0x01,0xff, 78.1523 + 0x72,0xcc,0x91,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0x8f,0x00,0x01,0xff, 78.1524 + 0x75,0xcc,0x8f,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0x91,0x00,0x01,0xff,0x75,0xcc, 78.1525 + 0x91,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x04,0xff,0x53,0xcc,0xa6,0x00,0x04,0xff, 78.1526 + 0x73,0xcc,0xa6,0x00,0x10,0x08,0x04,0xff,0x54,0xcc,0xa6,0x00,0x04,0xff,0x74,0xcc, 78.1527 + 0xa6,0x00,0x51,0x04,0x04,0x00,0x10,0x08,0x04,0xff,0x48,0xcc,0x8c,0x00,0x04,0xff, 78.1528 + 0x68,0xcc,0x8c,0x00,0xd4,0x68,0xd3,0x20,0xd2,0x0c,0x91,0x08,0x10,0x04,0x06,0x00, 78.1529 + 0x07,0x00,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x08,0x04,0xff,0x41,0xcc,0x87,0x00, 78.1530 + 0x04,0xff,0x61,0xcc,0x87,0x00,0xd2,0x24,0xd1,0x10,0x10,0x08,0x04,0xff,0x45,0xcc, 78.1531 + 0xa7,0x00,0x04,0xff,0x65,0xcc,0xa7,0x00,0x10,0x0a,0x04,0xff,0x4f,0xcc,0x88,0xcc, 78.1532 + 0x84,0x00,0x04,0xff,0x6f,0xcc,0x88,0xcc,0x84,0x00,0xd1,0x14,0x10,0x0a,0x04,0xff, 78.1533 + 0x4f,0xcc,0x83,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc,0x83,0xcc,0x84,0x00,0x10,0x08, 78.1534 + 0x04,0xff,0x4f,0xcc,0x87,0x00,0x04,0xff,0x6f,0xcc,0x87,0x00,0x93,0x30,0xd2,0x24, 78.1535 + 0xd1,0x14,0x10,0x0a,0x04,0xff,0x4f,0xcc,0x87,0xcc,0x84,0x00,0x04,0xff,0x6f,0xcc, 78.1536 + 0x87,0xcc,0x84,0x00,0x10,0x08,0x04,0xff,0x59,0xcc,0x84,0x00,0x04,0xff,0x79,0xcc, 78.1537 + 0x84,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0xcf,0x86, 78.1538 + 0x95,0x14,0x94,0x10,0x93,0x0c,0x92,0x08,0x11,0x04,0x08,0x00,0x09,0x00,0x09,0x00, 78.1539 + 0x09,0x00,0x01,0x00,0x01,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x18, 78.1540 + 0x53,0x04,0x01,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x04,0x00, 78.1541 + 0x11,0x04,0x04,0x00,0x07,0x00,0x01,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,0x00, 78.1542 + 0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00, 78.1543 + 0x04,0x00,0x94,0x18,0x53,0x04,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x04,0x00, 78.1544 + 0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x07,0x00,0x07,0x00,0xe1,0x35,0x01,0xd0, 78.1545 + 0x72,0xcf,0x86,0xd5,0x24,0x54,0x04,0x01,0xe6,0xd3,0x10,0x52,0x04,0x01,0xe6,0x91, 78.1546 + 0x08,0x10,0x04,0x01,0xe6,0x01,0xe8,0x01,0xdc,0x92,0x0c,0x51,0x04,0x01,0xdc,0x10, 78.1547 + 0x04,0x01,0xe8,0x01,0xd8,0x01,0xdc,0xd4,0x2c,0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10, 78.1548 + 0x04,0x01,0xdc,0x01,0xca,0x10,0x04,0x01,0xca,0x01,0xdc,0x51,0x04,0x01,0xdc,0x10, 78.1549 + 0x04,0x01,0xdc,0x01,0xca,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0xca,0x01,0xdc,0x01, 78.1550 + 0xdc,0x01,0xdc,0xd3,0x08,0x12,0x04,0x01,0xdc,0x01,0x01,0xd2,0x0c,0x91,0x08,0x10, 78.1551 + 0x04,0x01,0x01,0x01,0xdc,0x01,0xdc,0x91,0x08,0x10,0x04,0x01,0xdc,0x01,0xe6,0x01, 78.1552 + 0xe6,0xcf,0x86,0xd5,0x7f,0xd4,0x47,0xd3,0x2e,0xd2,0x19,0xd1,0x0e,0x10,0x07,0x01, 78.1553 + 0xff,0xcc,0x80,0x00,0x01,0xff,0xcc,0x81,0x00,0x10,0x04,0x01,0xe6,0x01,0xff,0xcc, 78.1554 + 0x93,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xcc,0x88,0xcc,0x81,0x00,0x01,0xf0,0x10, 78.1555 + 0x04,0x04,0xe6,0x04,0xdc,0xd2,0x08,0x11,0x04,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10, 78.1556 + 0x04,0x04,0xe6,0x04,0xdc,0x10,0x04,0x04,0xdc,0x06,0xff,0x00,0xd3,0x18,0xd2,0x0c, 78.1557 + 0x51,0x04,0x07,0xe6,0x10,0x04,0x07,0xe6,0x07,0xdc,0x51,0x04,0x07,0xdc,0x10,0x04, 78.1558 + 0x07,0xdc,0x07,0xe6,0xd2,0x10,0xd1,0x08,0x10,0x04,0x08,0xe8,0x08,0xdc,0x10,0x04, 78.1559 + 0x08,0xdc,0x08,0xe6,0xd1,0x08,0x10,0x04,0x08,0xe9,0x07,0xea,0x10,0x04,0x07,0xea, 78.1560 + 0x07,0xe9,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0xea,0x10,0x04,0x04,0xe9, 78.1561 + 0x06,0xe6,0x06,0xe6,0x06,0xe6,0xd3,0x13,0x52,0x04,0x0a,0x00,0x91,0x0b,0x10,0x07, 78.1562 + 0x01,0xff,0xca,0xb9,0x00,0x01,0x00,0x0a,0x00,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10, 78.1563 + 0x04,0x01,0x00,0x09,0x00,0x51,0x04,0x09,0x00,0x10,0x06,0x01,0xff,0x3b,0x00,0x10, 78.1564 + 0x00,0xd0,0xe1,0xcf,0x86,0xd5,0x7a,0xd4,0x5f,0xd3,0x21,0x52,0x04,0x00,0x00,0xd1, 78.1565 + 0x0d,0x10,0x04,0x01,0x00,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x10,0x09,0x01,0xff, 78.1566 + 0xce,0x91,0xcc,0x81,0x00,0x01,0xff,0xc2,0xb7,0x00,0xd2,0x1f,0xd1,0x12,0x10,0x09, 78.1567 + 0x01,0xff,0xce,0x95,0xcc,0x81,0x00,0x01,0xff,0xce,0x97,0xcc,0x81,0x00,0x10,0x09, 78.1568 + 0x01,0xff,0xce,0x99,0xcc,0x81,0x00,0x00,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xce, 78.1569 + 0x9f,0xcc,0x81,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xa5,0xcc,0x81,0x00,0x01, 78.1570 + 0xff,0xce,0xa9,0xcc,0x81,0x00,0x93,0x17,0x92,0x13,0x91,0x0f,0x10,0x0b,0x01,0xff, 78.1571 + 0xce,0xb9,0xcc,0x88,0xcc,0x81,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4, 78.1572 + 0x4a,0xd3,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x01, 78.1573 + 0x00,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,0x88,0x00, 78.1574 + 0x01,0xff,0xce,0xa5,0xcc,0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc, 78.1575 + 0x81,0x00,0x01,0xff,0xce,0xb5,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc, 78.1576 + 0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x81,0x00,0x93,0x17,0x92,0x13,0x91,0x0f,0x10, 78.1577 + 0x0b,0x01,0xff,0xcf,0x85,0xcc,0x88,0xcc,0x81,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 78.1578 + 0x01,0x00,0xcf,0x86,0xd5,0x7b,0xd4,0x39,0x53,0x04,0x01,0x00,0xd2,0x16,0x51,0x04, 78.1579 + 0x01,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x88,0x00,0x01,0xff,0xcf,0x85,0xcc, 78.1580 + 0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x01,0xff,0xcf, 78.1581 + 0x85,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x0a,0x00,0xd3, 78.1582 + 0x26,0xd2,0x11,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xcf,0x92,0xcc, 78.1583 + 0x81,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xcf,0x92,0xcc,0x88,0x00,0x01,0x00,0x10, 78.1584 + 0x04,0x01,0x00,0x04,0x00,0xd2,0x0c,0x51,0x04,0x06,0x00,0x10,0x04,0x01,0x00,0x04, 78.1585 + 0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x01,0x00,0x04,0x00,0xd4, 78.1586 + 0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x01,0x00,0x01, 78.1587 + 0x00,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x06, 78.1588 + 0x00,0x07,0x00,0x12,0x04,0x07,0x00,0x08,0x00,0xe3,0x47,0x04,0xe2,0xbe,0x02,0xe1, 78.1589 + 0x07,0x01,0xd0,0x8b,0xcf,0x86,0xd5,0x6c,0xd4,0x53,0xd3,0x30,0xd2,0x1f,0xd1,0x12, 78.1590 + 0x10,0x09,0x04,0xff,0xd0,0x95,0xcc,0x80,0x00,0x01,0xff,0xd0,0x95,0xcc,0x88,0x00, 78.1591 + 0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x93,0xcc,0x81,0x00,0x51,0x04,0x01,0x00,0x10, 78.1592 + 0x04,0x01,0x00,0x01,0xff,0xd0,0x86,0xcc,0x88,0x00,0x52,0x04,0x01,0x00,0xd1,0x12, 78.1593 + 0x10,0x09,0x01,0xff,0xd0,0x9a,0xcc,0x81,0x00,0x04,0xff,0xd0,0x98,0xcc,0x80,0x00, 78.1594 + 0x10,0x09,0x01,0xff,0xd0,0xa3,0xcc,0x86,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0x92, 78.1595 + 0x11,0x91,0x0d,0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x98,0xcc,0x86,0x00,0x01,0x00, 78.1596 + 0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x92,0x11,0x91,0x0d,0x10,0x04, 78.1597 + 0x01,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x86,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5, 78.1598 + 0x57,0x54,0x04,0x01,0x00,0xd3,0x30,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0, 78.1599 + 0xb5,0xcc,0x80,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x88,0x00,0x10,0x04,0x01,0x00,0x01, 78.1600 + 0xff,0xd0,0xb3,0xcc,0x81,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff, 78.1601 + 0xd1,0x96,0xcc,0x88,0x00,0x52,0x04,0x01,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0, 78.1602 + 0xba,0xcc,0x81,0x00,0x04,0xff,0xd0,0xb8,0xcc,0x80,0x00,0x10,0x09,0x01,0xff,0xd1, 78.1603 + 0x83,0xcc,0x86,0x00,0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x1a,0x52,0x04,0x01,0x00, 78.1604 + 0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xd1,0xb4,0xcc,0x8f,0x00,0x01,0xff,0xd1, 78.1605 + 0xb5,0xcc,0x8f,0x00,0x01,0x00,0xd0,0x2e,0xcf,0x86,0x95,0x28,0x94,0x24,0xd3,0x18, 78.1606 + 0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0x51,0x04,0x01,0xe6, 78.1607 + 0x10,0x04,0x01,0xe6,0x0a,0xe6,0x92,0x08,0x11,0x04,0x04,0x00,0x06,0x00,0x04,0x00, 78.1608 + 0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0xbe,0xd4,0x4a,0xd3,0x2a,0xd2,0x1a,0xd1,0x0d, 78.1609 + 0x10,0x04,0x01,0x00,0x01,0xff,0xd0,0x96,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0, 78.1610 + 0xb6,0xcc,0x86,0x00,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04, 78.1611 + 0x06,0x00,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04, 78.1612 + 0x06,0x00,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x10,0x04,0x06,0x00, 78.1613 + 0x09,0x00,0xd3,0x3a,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0x90,0xcc,0x86, 78.1614 + 0x00,0x01,0xff,0xd0,0xb0,0xcc,0x86,0x00,0x10,0x09,0x01,0xff,0xd0,0x90,0xcc,0x88, 78.1615 + 0x00,0x01,0xff,0xd0,0xb0,0xcc,0x88,0x00,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff, 78.1616 + 0xd0,0x95,0xcc,0x86,0x00,0x01,0xff,0xd0,0xb5,0xcc,0x86,0x00,0xd2,0x16,0x51,0x04, 78.1617 + 0x01,0x00,0x10,0x09,0x01,0xff,0xd3,0x98,0xcc,0x88,0x00,0x01,0xff,0xd3,0x99,0xcc, 78.1618 + 0x88,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd0,0x96,0xcc,0x88,0x00,0x01,0xff,0xd0, 78.1619 + 0xb6,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0x97,0xcc,0x88,0x00,0x01,0xff,0xd0, 78.1620 + 0xb7,0xcc,0x88,0x00,0xd4,0x74,0xd3,0x3a,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09, 78.1621 + 0x01,0xff,0xd0,0x98,0xcc,0x84,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x84,0x00,0xd1,0x12, 78.1622 + 0x10,0x09,0x01,0xff,0xd0,0x98,0xcc,0x88,0x00,0x01,0xff,0xd0,0xb8,0xcc,0x88,0x00, 78.1623 + 0x10,0x09,0x01,0xff,0xd0,0x9e,0xcc,0x88,0x00,0x01,0xff,0xd0,0xbe,0xcc,0x88,0x00, 78.1624 + 0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff,0xd3,0xa8,0xcc,0x88,0x00,0x01, 78.1625 + 0xff,0xd3,0xa9,0xcc,0x88,0x00,0xd1,0x12,0x10,0x09,0x04,0xff,0xd0,0xad,0xcc,0x88, 78.1626 + 0x00,0x04,0xff,0xd1,0x8d,0xcc,0x88,0x00,0x10,0x09,0x01,0xff,0xd0,0xa3,0xcc,0x84, 78.1627 + 0x00,0x01,0xff,0xd1,0x83,0xcc,0x84,0x00,0xd3,0x3a,0xd2,0x24,0xd1,0x12,0x10,0x09, 78.1628 + 0x01,0xff,0xd0,0xa3,0xcc,0x88,0x00,0x01,0xff,0xd1,0x83,0xcc,0x88,0x00,0x10,0x09, 78.1629 + 0x01,0xff,0xd0,0xa3,0xcc,0x8b,0x00,0x01,0xff,0xd1,0x83,0xcc,0x8b,0x00,0x91,0x12, 78.1630 + 0x10,0x09,0x01,0xff,0xd0,0xa7,0xcc,0x88,0x00,0x01,0xff,0xd1,0x87,0xcc,0x88,0x00, 78.1631 + 0x08,0x00,0x92,0x16,0x91,0x12,0x10,0x09,0x01,0xff,0xd0,0xab,0xcc,0x88,0x00,0x01, 78.1632 + 0xff,0xd1,0x8b,0xcc,0x88,0x00,0x09,0x00,0x09,0x00,0xd1,0x74,0xd0,0x36,0xcf,0x86, 78.1633 + 0xd5,0x10,0x54,0x04,0x06,0x00,0x93,0x08,0x12,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00, 78.1634 + 0xd4,0x10,0x93,0x0c,0x52,0x04,0x0a,0x00,0x11,0x04,0x0b,0x00,0x0c,0x00,0x10,0x00, 78.1635 + 0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 78.1636 + 0x01,0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00, 78.1637 + 0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04, 78.1638 + 0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08, 78.1639 + 0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0xba, 78.1640 + 0xcf,0x86,0xd5,0x4c,0xd4,0x24,0x53,0x04,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04, 78.1641 + 0x14,0x00,0x01,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00, 78.1642 + 0x10,0x00,0x10,0x04,0x10,0x00,0x0d,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04, 78.1643 + 0x00,0x00,0x02,0xdc,0x02,0xe6,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xdc,0x02,0xe6, 78.1644 + 0x92,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xde,0x02,0xdc,0x02,0xe6,0xd4,0x2c, 78.1645 + 0xd3,0x10,0x92,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x08,0xdc,0x02,0xdc,0x02,0xdc, 78.1646 + 0xd2,0x0c,0x51,0x04,0x02,0xe6,0x10,0x04,0x02,0xdc,0x02,0xe6,0xd1,0x08,0x10,0x04, 78.1647 + 0x02,0xe6,0x02,0xde,0x10,0x04,0x02,0xe4,0x02,0xe6,0xd3,0x20,0xd2,0x10,0xd1,0x08, 78.1648 + 0x10,0x04,0x01,0x0a,0x01,0x0b,0x10,0x04,0x01,0x0c,0x01,0x0d,0xd1,0x08,0x10,0x04, 78.1649 + 0x01,0x0e,0x01,0x0f,0x10,0x04,0x01,0x10,0x01,0x11,0xd2,0x10,0xd1,0x08,0x10,0x04, 78.1650 + 0x01,0x12,0x01,0x13,0x10,0x04,0x09,0x13,0x01,0x14,0xd1,0x08,0x10,0x04,0x01,0x15, 78.1651 + 0x01,0x16,0x10,0x04,0x01,0x00,0x01,0x17,0xcf,0x86,0xd5,0x28,0x94,0x24,0x93,0x20, 78.1652 + 0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0x18,0x10,0x04,0x01,0x19,0x01,0x00, 78.1653 + 0xd1,0x08,0x10,0x04,0x02,0xe6,0x08,0xdc,0x10,0x04,0x08,0x00,0x08,0x12,0x00,0x00, 78.1654 + 0x01,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04, 78.1655 + 0x01,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x93,0x10, 78.1656 + 0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.1657 + 0xe2,0xfb,0x01,0xe1,0x2b,0x01,0xd0,0xa8,0xcf,0x86,0xd5,0x55,0xd4,0x28,0xd3,0x10, 78.1658 + 0x52,0x04,0x07,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,0x10,0x00,0x0a,0x00,0xd2,0x0c, 78.1659 + 0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x00,0x08,0x00,0x91,0x08,0x10,0x04,0x01,0x00, 78.1660 + 0x07,0x00,0x07,0x00,0xd3,0x0c,0x52,0x04,0x07,0xe6,0x11,0x04,0x07,0xe6,0x0a,0xe6, 78.1661 + 0xd2,0x10,0xd1,0x08,0x10,0x04,0x0a,0x1e,0x0a,0x1f,0x10,0x04,0x0a,0x20,0x01,0x00, 78.1662 + 0xd1,0x09,0x10,0x05,0x0f,0xff,0x00,0x00,0x00,0x10,0x04,0x08,0x00,0x01,0x00,0xd4, 78.1663 + 0x3d,0x93,0x39,0xd2,0x1a,0xd1,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x10,0x09,0x01, 78.1664 + 0xff,0xd8,0xa7,0xd9,0x93,0x00,0x01,0xff,0xd8,0xa7,0xd9,0x94,0x00,0xd1,0x12,0x10, 78.1665 + 0x09,0x01,0xff,0xd9,0x88,0xd9,0x94,0x00,0x01,0xff,0xd8,0xa7,0xd9,0x95,0x00,0x10, 78.1666 + 0x09,0x01,0xff,0xd9,0x8a,0xd9,0x94,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00, 78.1667 + 0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x86, 78.1668 + 0xd5,0x5c,0xd4,0x20,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04, 78.1669 + 0x01,0x00,0x01,0x1b,0xd1,0x08,0x10,0x04,0x01,0x1c,0x01,0x1d,0x10,0x04,0x01,0x1e, 78.1670 + 0x01,0x1f,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x20,0x01,0x21,0x10,0x04, 78.1671 + 0x01,0x22,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,0xe6,0x04,0xdc,0x10,0x04,0x07,0xdc, 78.1672 + 0x07,0xe6,0xd2,0x0c,0x91,0x08,0x10,0x04,0x07,0xe6,0x08,0xe6,0x08,0xe6,0xd1,0x08, 78.1673 + 0x10,0x04,0x08,0xdc,0x08,0xe6,0x10,0x04,0x08,0xe6,0x0c,0xdc,0xd4,0x10,0x53,0x04, 78.1674 + 0x01,0x00,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x06,0x00,0x93,0x10,0x92,0x0c, 78.1675 + 0x91,0x08,0x10,0x04,0x01,0x23,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x22, 78.1676 + 0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x08, 78.1677 + 0x11,0x04,0x04,0x00,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x04,0x00, 78.1678 + 0xcf,0x86,0xd5,0x5b,0xd4,0x2e,0xd3,0x1e,0x92,0x1a,0xd1,0x0d,0x10,0x09,0x01,0xff, 78.1679 + 0xdb,0x95,0xd9,0x94,0x00,0x01,0x00,0x10,0x09,0x01,0xff,0xdb,0x81,0xd9,0x94,0x00, 78.1680 + 0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00, 78.1681 + 0x04,0x00,0xd3,0x19,0xd2,0x11,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff, 78.1682 + 0xdb,0x92,0xd9,0x94,0x00,0x11,0x04,0x01,0x00,0x01,0xe6,0x52,0x04,0x01,0xe6,0xd1, 78.1683 + 0x08,0x10,0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0xd4,0x38,0xd3, 78.1684 + 0x1c,0xd2,0x0c,0x51,0x04,0x01,0xe6,0x10,0x04,0x01,0xe6,0x01,0xdc,0xd1,0x08,0x10, 78.1685 + 0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xe6,0xd2,0x10,0xd1,0x08,0x10, 78.1686 + 0x04,0x01,0xe6,0x01,0x00,0x10,0x04,0x01,0xdc,0x01,0xe6,0x91,0x08,0x10,0x04,0x01, 78.1687 + 0xe6,0x01,0xdc,0x07,0x00,0x53,0x04,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x04, 78.1688 + 0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x07,0x00,0xd1,0xc8,0xd0,0x76,0xcf, 78.1689 + 0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04, 78.1690 + 0x00,0x10,0x04,0x00,0x00,0x04,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04, 78.1691 + 0x00,0x04,0x24,0x04,0x00,0x04,0x00,0x04,0x00,0xd4,0x14,0x53,0x04,0x04,0x00,0x52, 78.1692 + 0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x07,0x00,0x07,0x00,0xd3,0x1c,0xd2, 78.1693 + 0x0c,0x91,0x08,0x10,0x04,0x04,0xe6,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04, 78.1694 + 0xdc,0x04,0xe6,0x10,0x04,0x04,0xe6,0x04,0xdc,0xd2,0x0c,0x51,0x04,0x04,0xdc,0x10, 78.1695 + 0x04,0x04,0xe6,0x04,0xdc,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10,0x04,0x04, 78.1696 + 0xdc,0x04,0xe6,0xcf,0x86,0xd5,0x3c,0x94,0x38,0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x04, 78.1697 + 0xe6,0x10,0x04,0x04,0xdc,0x04,0xe6,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10, 78.1698 + 0x04,0x04,0xdc,0x04,0xe6,0xd2,0x10,0xd1,0x08,0x10,0x04,0x04,0xdc,0x04,0xe6,0x10, 78.1699 + 0x04,0x04,0xe6,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x08, 78.1700 + 0x00,0x94,0x10,0x53,0x04,0x08,0x00,0x52,0x04,0x08,0x00,0x11,0x04,0x08,0x00,0x0a, 78.1701 + 0x00,0x0a,0x00,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,0x93, 78.1702 + 0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 78.1703 + 0x00,0xcf,0x86,0x55,0x04,0x09,0x00,0xd4,0x14,0x53,0x04,0x09,0x00,0x92,0x0c,0x51, 78.1704 + 0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xe6,0x09,0xe6,0xd3,0x10,0x92,0x0c,0x51, 78.1705 + 0x04,0x09,0xe6,0x10,0x04,0x09,0xdc,0x09,0xe6,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09, 78.1706 + 0x00,0x10,0x04,0x09,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x14,0xdc,0x14, 78.1707 + 0x00,0xe4,0xf8,0x57,0xe3,0x45,0x3f,0xe2,0xf4,0x3e,0xe1,0xc7,0x2c,0xe0,0x21,0x10, 78.1708 + 0xcf,0x86,0xc5,0xe4,0x80,0x08,0xe3,0xcb,0x03,0xe2,0x61,0x01,0xd1,0x94,0xd0,0x5a, 78.1709 + 0xcf,0x86,0xd5,0x20,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x52,0x04,0x0b,0x00,0x11,0x04, 78.1710 + 0x0b,0x00,0x0b,0xe6,0x92,0x0c,0x51,0x04,0x0b,0xe6,0x10,0x04,0x0b,0x00,0x0b,0xe6, 78.1711 + 0x0b,0xe6,0xd4,0x24,0xd3,0x10,0x52,0x04,0x0b,0xe6,0x91,0x08,0x10,0x04,0x0b,0x00, 78.1712 + 0x0b,0xe6,0x0b,0xe6,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xe6,0x0b,0xe6, 78.1713 + 0x11,0x04,0x0b,0xe6,0x00,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04, 78.1714 + 0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0xcf,0x86,0xd5,0x20,0x54,0x04,0x0c,0x00, 78.1715 + 0x53,0x04,0x0c,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0c,0xdc,0x0c,0xdc, 78.1716 + 0x51,0x04,0x00,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x13,0x00, 78.1717 + 0x92,0x0c,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.1718 + 0xd0,0x4a,0xcf,0x86,0x55,0x04,0x00,0x00,0xd4,0x20,0xd3,0x10,0x92,0x0c,0x91,0x08, 78.1719 + 0x10,0x04,0x0d,0x00,0x10,0x00,0x0d,0x00,0x0d,0x00,0x52,0x04,0x0d,0x00,0x91,0x08, 78.1720 + 0x10,0x04,0x0d,0x00,0x10,0x00,0x10,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x10,0x00, 78.1721 + 0x10,0x04,0x10,0x00,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x12,0x00, 78.1722 + 0x52,0x04,0x12,0x00,0x11,0x04,0x12,0x00,0x00,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04, 78.1723 + 0x00,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x14,0xdc, 78.1724 + 0x12,0xe6,0x12,0xe6,0xd4,0x30,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x12,0xe6,0x10,0x04, 78.1725 + 0x12,0x00,0x11,0xdc,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xdc,0x0d,0xe6,0xd2,0x0c, 78.1726 + 0x91,0x08,0x10,0x04,0x0d,0xe6,0x0d,0xdc,0x0d,0xe6,0x91,0x08,0x10,0x04,0x0d,0xe6, 78.1727 + 0x0d,0xdc,0x0d,0xdc,0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0d,0x1b,0x0d,0x1c, 78.1728 + 0x10,0x04,0x0d,0x1d,0x0d,0xe6,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xdc,0x0d,0xe6, 78.1729 + 0xd2,0x10,0xd1,0x08,0x10,0x04,0x0d,0xe6,0x0d,0xdc,0x10,0x04,0x0d,0xdc,0x0d,0xe6, 78.1730 + 0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xe6,0x10,0xe6,0xe1,0x3a,0x01,0xd0,0x77,0xcf, 78.1731 + 0x86,0xd5,0x20,0x94,0x1c,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x01, 78.1732 + 0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x07,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 78.1733 + 0x00,0xd4,0x1b,0x53,0x04,0x01,0x00,0x92,0x13,0x91,0x0f,0x10,0x04,0x01,0x00,0x01, 78.1734 + 0xff,0xe0,0xa4,0xa8,0xe0,0xa4,0xbc,0x00,0x01,0x00,0x01,0x00,0xd3,0x26,0xd2,0x13, 78.1735 + 0x91,0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xa4,0xb0,0xe0,0xa4,0xbc,0x00,0x01, 78.1736 + 0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xa4,0xb3,0xe0,0xa4,0xbc,0x00,0x01,0x00, 78.1737 + 0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,0x91,0x08,0x10,0x04,0x01,0x07, 78.1738 + 0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x8c,0xd4,0x18,0x53,0x04,0x01,0x00,0x52,0x04, 78.1739 + 0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0x09,0x10,0x04,0x0b,0x00,0x0c,0x00, 78.1740 + 0xd3,0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x01,0xe6,0x10,0x04,0x01,0xdc, 78.1741 + 0x01,0xe6,0x91,0x08,0x10,0x04,0x01,0xe6,0x0b,0x00,0x0c,0x00,0xd2,0x2c,0xd1,0x16, 78.1742 + 0x10,0x0b,0x01,0xff,0xe0,0xa4,0x95,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0x96, 78.1743 + 0xe0,0xa4,0xbc,0x00,0x10,0x0b,0x01,0xff,0xe0,0xa4,0x97,0xe0,0xa4,0xbc,0x00,0x01, 78.1744 + 0xff,0xe0,0xa4,0x9c,0xe0,0xa4,0xbc,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe0,0xa4, 78.1745 + 0xa1,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0xa2,0xe0,0xa4,0xbc,0x00,0x10,0x0b, 78.1746 + 0x01,0xff,0xe0,0xa4,0xab,0xe0,0xa4,0xbc,0x00,0x01,0xff,0xe0,0xa4,0xaf,0xe0,0xa4, 78.1747 + 0xbc,0x00,0x54,0x04,0x01,0x00,0xd3,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00, 78.1748 + 0x0a,0x00,0x10,0x04,0x0a,0x00,0x0c,0x00,0x0c,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04, 78.1749 + 0x10,0x00,0x0b,0x00,0x10,0x04,0x0b,0x00,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00, 78.1750 + 0x08,0x00,0x09,0x00,0xd0,0x86,0xcf,0x86,0xd5,0x44,0xd4,0x2c,0xd3,0x18,0xd2,0x0c, 78.1751 + 0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00, 78.1752 + 0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00, 78.1753 + 0x10,0x04,0x00,0x00,0x01,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00, 78.1754 + 0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04, 78.1755 + 0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00, 78.1756 + 0xd3,0x18,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00, 78.1757 + 0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00, 78.1758 + 0x91,0x08,0x10,0x04,0x01,0x07,0x07,0x00,0x01,0x00,0xcf,0x86,0xd5,0x7b,0xd4,0x42, 78.1759 + 0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04, 78.1760 + 0x00,0x00,0x01,0x00,0xd2,0x17,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04, 78.1761 + 0x00,0x00,0x01,0xff,0xe0,0xa7,0x87,0xe0,0xa6,0xbe,0x00,0xd1,0x0f,0x10,0x0b,0x01, 78.1762 + 0xff,0xe0,0xa7,0x87,0xe0,0xa7,0x97,0x00,0x01,0x09,0x10,0x04,0x08,0x00,0x00,0x00, 78.1763 + 0xd3,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00, 78.1764 + 0x52,0x04,0x00,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe0,0xa6,0xa1,0xe0,0xa6,0xbc, 78.1765 + 0x00,0x01,0xff,0xe0,0xa6,0xa2,0xe0,0xa6,0xbc,0x00,0x10,0x04,0x00,0x00,0x01,0xff, 78.1766 + 0xe0,0xa6,0xaf,0xe0,0xa6,0xbc,0x00,0xd4,0x10,0x93,0x0c,0x52,0x04,0x01,0x00,0x11, 78.1767 + 0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01, 78.1768 + 0x00,0x10,0x04,0x01,0x00,0x0b,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x14,0xe6,0x00, 78.1769 + 0x00,0xe2,0x48,0x02,0xe1,0x4f,0x01,0xd0,0xa4,0xcf,0x86,0xd5,0x4c,0xd4,0x34,0xd3, 78.1770 + 0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x10,0x04,0x01,0x00,0x07, 78.1771 + 0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01, 78.1772 + 0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01, 78.1773 + 0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00, 78.1774 + 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91, 78.1775 + 0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x2e,0xd2,0x17,0xd1, 78.1776 + 0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xa8,0xb2, 78.1777 + 0xe0,0xa8,0xbc,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x0b,0x01,0xff, 78.1778 + 0xe0,0xa8,0xb8,0xe0,0xa8,0xbc,0x00,0x00,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00, 78.1779 + 0x00,0x91,0x08,0x10,0x04,0x01,0x07,0x00,0x00,0x01,0x00,0xcf,0x86,0xd5,0x80,0xd4, 78.1780 + 0x34,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x51, 78.1781 + 0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01, 78.1782 + 0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x01, 78.1783 + 0x09,0x00,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x00, 78.1784 + 0x00,0x00,0x00,0xd2,0x25,0xd1,0x0f,0x10,0x04,0x00,0x00,0x01,0xff,0xe0,0xa8,0x96, 78.1785 + 0xe0,0xa8,0xbc,0x00,0x10,0x0b,0x01,0xff,0xe0,0xa8,0x97,0xe0,0xa8,0xbc,0x00,0x01, 78.1786 + 0xff,0xe0,0xa8,0x9c,0xe0,0xa8,0xbc,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00, 78.1787 + 0x10,0x0b,0x01,0xff,0xe0,0xa8,0xab,0xe0,0xa8,0xbc,0x00,0x00,0x00,0xd4,0x10,0x93, 78.1788 + 0x0c,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x14,0x52, 78.1789 + 0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x0a,0x00,0x10,0x04,0x14,0x00,0x00, 78.1790 + 0x00,0x00,0x00,0xd0,0x82,0xcf,0x86,0xd5,0x40,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x91, 78.1791 + 0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01, 78.1792 + 0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x01,0x00,0x10, 78.1793 + 0x04,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x00, 78.1794 + 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91, 78.1795 + 0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x18,0xd2,0x0c,0x91, 78.1796 + 0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01, 78.1797 + 0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01, 78.1798 + 0x07,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x10,0x52,0x04,0x01, 78.1799 + 0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01, 78.1800 + 0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x01,0x09,0x00, 78.1801 + 0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 78.1802 + 0x00,0x00,0x00,0xd4,0x18,0x93,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x07, 78.1803 + 0x00,0x07,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x10,0x92,0x0c,0x91, 78.1804 + 0x08,0x10,0x04,0x0d,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10, 78.1805 + 0x04,0x00,0x00,0x11,0x00,0x13,0x00,0x13,0x00,0xe1,0x24,0x01,0xd0,0x86,0xcf,0x86, 78.1806 + 0xd5,0x44,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00, 78.1807 + 0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00, 78.1808 + 0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x93,0x14, 78.1809 + 0x92,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00, 78.1810 + 0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04, 78.1811 + 0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04, 78.1812 + 0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x01,0x00, 78.1813 + 0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,0x07,0x01,0x00, 78.1814 + 0x01,0x00,0xcf,0x86,0xd5,0x73,0xd4,0x45,0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08, 78.1815 + 0x10,0x04,0x0a,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x0f, 78.1816 + 0x10,0x0b,0x01,0xff,0xe0,0xad,0x87,0xe0,0xad,0x96,0x00,0x00,0x00,0x10,0x04,0x00, 78.1817 + 0x00,0x01,0xff,0xe0,0xad,0x87,0xe0,0xac,0xbe,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff, 78.1818 + 0xe0,0xad,0x87,0xe0,0xad,0x97,0x00,0x01,0x09,0x00,0x00,0xd3,0x0c,0x52,0x04,0x00, 78.1819 + 0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x52,0x04,0x00,0x00,0xd1,0x16,0x10,0x0b,0x01, 78.1820 + 0xff,0xe0,0xac,0xa1,0xe0,0xac,0xbc,0x00,0x01,0xff,0xe0,0xac,0xa2,0xe0,0xac,0xbc, 78.1821 + 0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01, 78.1822 + 0x00,0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91, 78.1823 + 0x08,0x10,0x04,0x01,0x00,0x07,0x00,0x0c,0x00,0x0c,0x00,0x00,0x00,0xd0,0xb1,0xcf, 78.1824 + 0x86,0xd5,0x63,0xd4,0x28,0xd3,0x14,0xd2,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x91, 78.1825 + 0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10, 78.1826 + 0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd3,0x1f,0xd2,0x0c,0x91, 78.1827 + 0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0, 78.1828 + 0xae,0x92,0xe0,0xaf,0x97,0x00,0x01,0x00,0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04, 78.1829 + 0x00,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x01,0x00, 78.1830 + 0x00,0x00,0x01,0x00,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04, 78.1831 + 0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd2,0x0c, 78.1832 + 0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00, 78.1833 + 0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x08,0x00,0x01,0x00, 78.1834 + 0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xcf,0x86, 78.1835 + 0xd5,0x61,0xd4,0x45,0xd3,0x14,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00, 78.1836 + 0x00,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x08,0x10,0x04,0x01,0x00, 78.1837 + 0x00,0x00,0x10,0x0b,0x01,0xff,0xe0,0xaf,0x86,0xe0,0xae,0xbe,0x00,0x01,0xff,0xe0, 78.1838 + 0xaf,0x87,0xe0,0xae,0xbe,0x00,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xaf,0x86,0xe0, 78.1839 + 0xaf,0x97,0x00,0x01,0x09,0x00,0x00,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0a, 78.1840 + 0x00,0x00,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0x00, 78.1841 + 0x00,0xd4,0x14,0x93,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x08, 78.1842 + 0x00,0x01,0x00,0x01,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01, 78.1843 + 0x00,0x07,0x00,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x00, 78.1844 + 0x00,0x00,0x00,0xe3,0x1c,0x04,0xe2,0x1a,0x02,0xd1,0xf3,0xd0,0x76,0xcf,0x86,0xd5, 78.1845 + 0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01, 78.1846 + 0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x91, 78.1847 + 0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10, 78.1848 + 0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01, 78.1849 + 0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd3, 78.1850 + 0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x01,0x00,0x01,0x00,0xd2, 78.1851 + 0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x01, 78.1852 + 0x00,0xcf,0x86,0xd5,0x53,0xd4,0x2f,0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10, 78.1853 + 0x04,0x01,0x00,0x00,0x00,0x01,0x00,0xd2,0x13,0x91,0x0f,0x10,0x0b,0x01,0xff,0xe0, 78.1854 + 0xb1,0x86,0xe0,0xb1,0x96,0x00,0x00,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00, 78.1855 + 0x01,0x09,0x00,0x00,0xd3,0x14,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00, 78.1856 + 0x01,0x54,0x10,0x04,0x01,0x5b,0x00,0x00,0x92,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04, 78.1857 + 0x11,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,0x00, 78.1858 + 0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x52,0x04,0x00,0x00, 78.1859 + 0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0x0a,0x00,0xd0,0x76,0xcf,0x86, 78.1860 + 0xd5,0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x10,0x00, 78.1861 + 0x01,0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00, 78.1862 + 0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08, 78.1863 + 0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x14,0x53,0x04, 78.1864 + 0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00, 78.1865 + 0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00, 78.1866 + 0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x07,0x07,0x07,0x00, 78.1867 + 0x01,0x00,0xcf,0x86,0xd5,0x82,0xd4,0x5e,0xd3,0x2a,0xd2,0x13,0x91,0x0f,0x10,0x0b, 78.1868 + 0x01,0xff,0xe0,0xb2,0xbf,0xe0,0xb3,0x95,0x00,0x01,0x00,0x01,0x00,0xd1,0x08,0x10, 78.1869 + 0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3, 78.1870 + 0x95,0x00,0xd2,0x28,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,0x96, 78.1871 + 0x00,0x00,0x00,0x10,0x0b,0x01,0xff,0xe0,0xb3,0x86,0xe0,0xb3,0x82,0x00,0x01,0xff, 78.1872 + 0xe0,0xb3,0x86,0xe0,0xb3,0x82,0xe0,0xb3,0x95,0x00,0x91,0x08,0x10,0x04,0x01,0x00, 78.1873 + 0x01,0x09,0x00,0x00,0xd3,0x14,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00, 78.1874 + 0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00, 78.1875 + 0x10,0x04,0x01,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04,0x01,0x00, 78.1876 + 0x09,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x93,0x14,0x92,0x10,0xd1,0x08, 78.1877 + 0x10,0x04,0x00,0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.1878 + 0xe1,0x06,0x01,0xd0,0x6e,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x91, 78.1879 + 0x08,0x10,0x04,0x13,0x00,0x10,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x01, 78.1880 + 0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01, 78.1881 + 0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01, 78.1882 + 0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x01, 78.1883 + 0x00,0x0c,0x00,0x01,0x00,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01, 78.1884 + 0x00,0x10,0x04,0x0c,0x00,0x13,0x09,0x91,0x08,0x10,0x04,0x13,0x09,0x0a,0x00,0x01, 78.1885 + 0x00,0xcf,0x86,0xd5,0x65,0xd4,0x45,0xd3,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10, 78.1886 + 0x04,0x0a,0x00,0x00,0x00,0x01,0x00,0xd2,0x1e,0xd1,0x08,0x10,0x04,0x01,0x00,0x00, 78.1887 + 0x00,0x10,0x0b,0x01,0xff,0xe0,0xb5,0x86,0xe0,0xb4,0xbe,0x00,0x01,0xff,0xe0,0xb5, 78.1888 + 0x87,0xe0,0xb4,0xbe,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe0,0xb5,0x86,0xe0,0xb5, 78.1889 + 0x97,0x00,0x01,0x09,0x10,0x04,0x0c,0x00,0x12,0x00,0xd3,0x10,0x52,0x04,0x00,0x00, 78.1890 + 0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x01,0x00,0x52,0x04,0x12,0x00,0x51,0x04, 78.1891 + 0x12,0x00,0x10,0x04,0x12,0x00,0x11,0x00,0xd4,0x14,0x93,0x10,0xd2,0x08,0x11,0x04, 78.1892 + 0x01,0x00,0x0a,0x00,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3,0x0c,0x52,0x04, 78.1893 + 0x0a,0x00,0x11,0x04,0x0a,0x00,0x12,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x12,0x00, 78.1894 + 0x0a,0x00,0x0a,0x00,0x0a,0x00,0xd0,0x5a,0xcf,0x86,0xd5,0x34,0xd4,0x18,0x93,0x14, 78.1895 + 0xd2,0x08,0x11,0x04,0x00,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x04,0x00, 78.1896 + 0x04,0x00,0x04,0x00,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04, 78.1897 + 0x04,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x04,0x00,0x04,0x00,0x54,0x04, 78.1898 + 0x04,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x04,0x00,0x10,0x04,0x00,0x00,0x04,0x00, 78.1899 + 0x04,0x00,0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x04,0x00,0x00,0x00, 78.1900 + 0xcf,0x86,0xd5,0x77,0xd4,0x28,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00, 78.1901 + 0x10,0x04,0x04,0x00,0x00,0x00,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x04,0x09, 78.1902 + 0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x04,0x00,0xd3,0x14,0x52,0x04, 78.1903 + 0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x10,0x04,0x04,0x00,0x00,0x00, 78.1904 + 0xd2,0x13,0x51,0x04,0x04,0x00,0x10,0x0b,0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8a, 78.1905 + 0x00,0x04,0x00,0xd1,0x19,0x10,0x0b,0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8f,0x00, 78.1906 + 0x04,0xff,0xe0,0xb7,0x99,0xe0,0xb7,0x8f,0xe0,0xb7,0x8a,0x00,0x10,0x0b,0x04,0xff, 78.1907 + 0xe0,0xb7,0x99,0xe0,0xb7,0x9f,0x00,0x04,0x00,0xd4,0x10,0x93,0x0c,0x52,0x04,0x00, 78.1908 + 0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x93,0x14,0xd2,0x08,0x11,0x04,0x00, 78.1909 + 0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe2, 78.1910 + 0x31,0x01,0xd1,0x58,0xd0,0x3a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c, 78.1911 + 0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 78.1912 + 0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x67,0x10,0x04, 78.1913 + 0x01,0x09,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x01,0x00,0xcf,0x86, 78.1914 + 0x95,0x18,0xd4,0x0c,0x53,0x04,0x01,0x00,0x12,0x04,0x01,0x6b,0x01,0x00,0x53,0x04, 78.1915 + 0x01,0x00,0x12,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd0,0x9e,0xcf,0x86,0xd5,0x54, 78.1916 + 0xd4,0x3c,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x04, 78.1917 + 0x01,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x15,0x00, 78.1918 + 0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x15,0x00,0x10,0x04,0x01,0x00, 78.1919 + 0x00,0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,0x15,0x00,0xd3,0x08,0x12,0x04, 78.1920 + 0x15,0x00,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00,0x01,0x00, 78.1921 + 0x01,0x00,0xd4,0x30,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00, 78.1922 + 0x01,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x10,0x04,0x00,0x00,0x01,0x00, 78.1923 + 0xd2,0x08,0x11,0x04,0x15,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x01,0x00, 78.1924 + 0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x76,0x10,0x04,0x15,0x09, 78.1925 + 0x01,0x00,0x11,0x04,0x01,0x00,0x00,0x00,0xcf,0x86,0x95,0x34,0xd4,0x20,0xd3,0x14, 78.1926 + 0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x01,0x00, 78.1927 + 0x00,0x00,0x52,0x04,0x01,0x7a,0x11,0x04,0x01,0x00,0x00,0x00,0x53,0x04,0x01,0x00, 78.1928 + 0xd2,0x08,0x11,0x04,0x01,0x00,0x00,0x00,0x11,0x04,0x01,0x00,0x0d,0x00,0x00,0x00, 78.1929 + 0xe1,0x2b,0x01,0xd0,0x3e,0xcf,0x86,0xd5,0x14,0x54,0x04,0x02,0x00,0x53,0x04,0x02, 78.1930 + 0x00,0x92,0x08,0x11,0x04,0x02,0xdc,0x02,0x00,0x02,0x00,0x54,0x04,0x02,0x00,0xd3, 78.1931 + 0x14,0x52,0x04,0x02,0x00,0xd1,0x08,0x10,0x04,0x02,0x00,0x02,0xdc,0x10,0x04,0x02, 78.1932 + 0x00,0x02,0xdc,0x92,0x0c,0x91,0x08,0x10,0x04,0x02,0x00,0x02,0xd8,0x02,0x00,0x02, 78.1933 + 0x00,0xcf,0x86,0xd5,0x73,0xd4,0x36,0xd3,0x17,0x92,0x13,0x51,0x04,0x02,0x00,0x10, 78.1934 + 0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x82,0xe0,0xbe,0xb7,0x00,0x02,0x00,0xd2,0x0c, 78.1935 + 0x91,0x08,0x10,0x04,0x00,0x00,0x02,0x00,0x02,0x00,0x91,0x0f,0x10,0x04,0x02,0x00, 78.1936 + 0x02,0xff,0xe0,0xbd,0x8c,0xe0,0xbe,0xb7,0x00,0x02,0x00,0xd3,0x26,0xd2,0x13,0x51, 78.1937 + 0x04,0x02,0x00,0x10,0x0b,0x02,0xff,0xe0,0xbd,0x91,0xe0,0xbe,0xb7,0x00,0x02,0x00, 78.1938 + 0x51,0x04,0x02,0x00,0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x96,0xe0,0xbe,0xb7, 78.1939 + 0x00,0x52,0x04,0x02,0x00,0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbd,0x9b,0xe0,0xbe, 78.1940 + 0xb7,0x00,0x02,0x00,0x02,0x00,0xd4,0x27,0x53,0x04,0x02,0x00,0xd2,0x17,0xd1,0x0f, 78.1941 + 0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbd,0x80,0xe0,0xbe,0xb5,0x00,0x10,0x04,0x04, 78.1942 + 0x00,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0xd3,0x35,0xd2, 78.1943 + 0x17,0xd1,0x08,0x10,0x04,0x00,0x00,0x02,0x81,0x10,0x04,0x02,0x82,0x02,0xff,0xe0, 78.1944 + 0xbd,0xb1,0xe0,0xbd,0xb2,0x00,0xd1,0x0f,0x10,0x04,0x02,0x84,0x02,0xff,0xe0,0xbd, 78.1945 + 0xb1,0xe0,0xbd,0xb4,0x00,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xb2,0xe0,0xbe,0x80,0x00, 78.1946 + 0x02,0x00,0xd2,0x13,0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xb3,0xe0,0xbe,0x80, 78.1947 + 0x00,0x02,0x00,0x02,0x82,0x11,0x04,0x02,0x82,0x02,0x00,0xd0,0xd3,0xcf,0x86,0xd5, 78.1948 + 0x65,0xd4,0x27,0xd3,0x1f,0xd2,0x13,0x91,0x0f,0x10,0x04,0x02,0x82,0x02,0xff,0xe0, 78.1949 + 0xbd,0xb1,0xe0,0xbe,0x80,0x00,0x02,0xe6,0x91,0x08,0x10,0x04,0x02,0x09,0x02,0x00, 78.1950 + 0x02,0xe6,0x12,0x04,0x02,0x00,0x0c,0x00,0xd3,0x1f,0xd2,0x13,0x51,0x04,0x02,0x00, 78.1951 + 0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0x92,0xe0,0xbe,0xb7,0x00,0x51,0x04,0x02, 78.1952 + 0x00,0x10,0x04,0x04,0x00,0x02,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x02, 78.1953 + 0x00,0x02,0x00,0x91,0x0f,0x10,0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0x9c,0xe0,0xbe, 78.1954 + 0xb7,0x00,0x02,0x00,0xd4,0x3d,0xd3,0x26,0xd2,0x13,0x51,0x04,0x02,0x00,0x10,0x0b, 78.1955 + 0x02,0xff,0xe0,0xbe,0xa1,0xe0,0xbe,0xb7,0x00,0x02,0x00,0x51,0x04,0x02,0x00,0x10, 78.1956 + 0x04,0x02,0x00,0x02,0xff,0xe0,0xbe,0xa6,0xe0,0xbe,0xb7,0x00,0x52,0x04,0x02,0x00, 78.1957 + 0x91,0x0f,0x10,0x0b,0x02,0xff,0xe0,0xbe,0xab,0xe0,0xbe,0xb7,0x00,0x02,0x00,0x04, 78.1958 + 0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x02,0x00,0x02,0x00,0x02, 78.1959 + 0x00,0xd2,0x13,0x91,0x0f,0x10,0x04,0x04,0x00,0x02,0xff,0xe0,0xbe,0x90,0xe0,0xbe, 78.1960 + 0xb5,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0xcf,0x86, 78.1961 + 0x95,0x4c,0xd4,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04, 78.1962 + 0x04,0xdc,0x04,0x00,0x52,0x04,0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x00,0x00, 78.1963 + 0x10,0x04,0x0a,0x00,0x04,0x00,0xd3,0x14,0xd2,0x08,0x11,0x04,0x08,0x00,0x0a,0x00, 78.1964 + 0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0b,0x00,0x92,0x10,0xd1,0x08,0x10,0x04, 78.1965 + 0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86, 78.1966 + 0xe5,0xf7,0x04,0xe4,0x79,0x03,0xe3,0x7b,0x01,0xe2,0x04,0x01,0xd1,0x7f,0xd0,0x65, 78.1967 + 0xcf,0x86,0x55,0x04,0x04,0x00,0xd4,0x33,0xd3,0x1f,0xd2,0x0c,0x51,0x04,0x04,0x00, 78.1968 + 0x10,0x04,0x0a,0x00,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x0b,0x04,0xff,0xe1,0x80, 78.1969 + 0xa5,0xe1,0x80,0xae,0x00,0x04,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x0a,0x00,0x04, 78.1970 + 0x00,0x10,0x04,0x04,0x00,0x0a,0x00,0x04,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x04, 78.1971 + 0x00,0x10,0x04,0x04,0x00,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,0x04,0x00,0x04, 78.1972 + 0x07,0x92,0x10,0xd1,0x08,0x10,0x04,0x04,0x00,0x04,0x09,0x10,0x04,0x0a,0x09,0x0a, 78.1973 + 0x00,0x0a,0x00,0xcf,0x86,0x95,0x14,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92, 78.1974 + 0x08,0x11,0x04,0x04,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xd0,0x2e,0xcf,0x86,0x95, 78.1975 + 0x28,0xd4,0x14,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a, 78.1976 + 0x00,0x0a,0xdc,0x0a,0x00,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00,0x0b, 78.1977 + 0x00,0x11,0x04,0x0b,0x00,0x0a,0x00,0x01,0x00,0xcf,0x86,0xd5,0x24,0x94,0x20,0xd3, 78.1978 + 0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x52, 78.1979 + 0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x54, 78.1980 + 0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01, 78.1981 + 0x00,0x06,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x06,0x00,0x08,0x00,0x10,0x04,0x08, 78.1982 + 0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0d,0x00,0x0d,0x00,0xd1,0x3e,0xd0, 78.1983 + 0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x1d,0x54,0x04,0x01,0x00,0x53,0x04,0x01, 78.1984 + 0x00,0xd2,0x08,0x11,0x04,0x01,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b, 78.1985 + 0x00,0x01,0xff,0x00,0x94,0x15,0x93,0x11,0x92,0x0d,0x91,0x09,0x10,0x05,0x01,0xff, 78.1986 + 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x1e,0xcf,0x86,0x55, 78.1987 + 0x04,0x01,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01, 78.1988 + 0x00,0x0b,0x00,0x0b,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54, 78.1989 + 0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x92,0x08,0x11,0x04,0x01,0x00,0x0b,0x00,0x0b, 78.1990 + 0x00,0xe2,0x21,0x01,0xd1,0x6c,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10, 78.1991 + 0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x04,0x00, 78.1992 + 0x04,0x00,0x04,0x00,0xcf,0x86,0x95,0x48,0xd4,0x24,0xd3,0x10,0x52,0x04,0x04,0x00, 78.1993 + 0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04, 78.1994 + 0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0xd3,0x10,0x52,0x04, 78.1995 + 0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08, 78.1996 + 0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x04,0x00, 78.1997 + 0xd0,0x62,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x10,0x52,0x04,0x04,0x00,0x51,0x04, 78.1998 + 0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00, 78.1999 + 0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0xd4,0x14,0x53,0x04, 78.2000 + 0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00, 78.2001 + 0xd3,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04, 78.2002 + 0x04,0x00,0x00,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00, 78.2003 + 0x00,0x00,0xcf,0x86,0xd5,0x38,0xd4,0x24,0xd3,0x14,0xd2,0x0c,0x91,0x08,0x10,0x04, 78.2004 + 0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x52,0x04,0x04,0x00, 78.2005 + 0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x93,0x10,0x52,0x04,0x04,0x00, 78.2006 + 0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x94,0x14,0x53,0x04, 78.2007 + 0x04,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00, 78.2008 + 0x04,0x00,0xd1,0x9c,0xd0,0x3e,0xcf,0x86,0x95,0x38,0xd4,0x14,0x53,0x04,0x04,0x00, 78.2009 + 0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0xd3,0x14, 78.2010 + 0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x04,0x00,0x11,0x04,0x04,0x00, 78.2011 + 0x00,0x00,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00, 78.2012 + 0x04,0x00,0xcf,0x86,0xd5,0x34,0xd4,0x14,0x93,0x10,0x52,0x04,0x04,0x00,0x51,0x04, 78.2013 + 0x04,0x00,0x10,0x04,0x04,0x00,0x08,0x00,0x04,0x00,0x53,0x04,0x04,0x00,0xd2,0x0c, 78.2014 + 0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x00,0x00, 78.2015 + 0x0c,0xe6,0x10,0x04,0x0c,0xe6,0x08,0xe6,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08, 78.2016 + 0x10,0x04,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x53,0x04,0x04,0x00, 78.2017 + 0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xd0,0x1a, 78.2018 + 0xcf,0x86,0x95,0x14,0x54,0x04,0x08,0x00,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04, 78.2019 + 0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04, 78.2020 + 0x04,0x00,0xd3,0x10,0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x11,0x00, 78.2021 + 0x00,0x00,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x00,0x00,0xd3,0x30,0xd2,0x2a, 78.2022 + 0xd1,0x24,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08, 78.2023 + 0x10,0x04,0x0b,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00, 78.2024 + 0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xd2,0x6c,0xd1,0x24, 78.2025 + 0xd0,0x06,0xcf,0x06,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00, 78.2026 + 0x93,0x10,0x52,0x04,0x04,0x00,0x51,0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x0b,0x00, 78.2027 + 0x0b,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00, 78.2028 + 0x52,0x04,0x04,0x00,0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00, 78.2029 + 0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08, 78.2030 + 0x10,0x04,0x04,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04, 78.2031 + 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x80,0xd0,0x46,0xcf,0x86,0xd5,0x28, 78.2032 + 0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,0x06,0x00, 78.2033 + 0x00,0x00,0x06,0x00,0x93,0x10,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04,0x06,0x09, 78.2034 + 0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x06,0x00,0x93,0x14,0x52,0x04,0x06,0x00, 78.2035 + 0xd1,0x08,0x10,0x04,0x06,0x09,0x06,0x00,0x10,0x04,0x06,0x00,0x00,0x00,0x00,0x00, 78.2036 + 0xcf,0x86,0xd5,0x10,0x54,0x04,0x06,0x00,0x93,0x08,0x12,0x04,0x06,0x00,0x00,0x00, 78.2037 + 0x00,0x00,0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x08,0x10,0x04, 78.2038 + 0x06,0x00,0x00,0x00,0x06,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00, 78.2039 + 0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0xd0,0x1b,0xcf,0x86,0x55,0x04,0x04,0x00, 78.2040 + 0x54,0x04,0x04,0x00,0x93,0x0d,0x52,0x04,0x04,0x00,0x11,0x05,0x04,0xff,0x00,0x04, 78.2041 + 0x00,0x04,0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x04,0x00,0xd3,0x10,0x92,0x0c,0x51, 78.2042 + 0x04,0x04,0x00,0x10,0x04,0x04,0x09,0x04,0x00,0x04,0x00,0x52,0x04,0x04,0x00,0x91, 78.2043 + 0x08,0x10,0x04,0x04,0x00,0x07,0xe6,0x00,0x00,0xd4,0x10,0x53,0x04,0x04,0x00,0x92, 78.2044 + 0x08,0x11,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x07,0x00,0x92,0x08,0x11, 78.2045 + 0x04,0x07,0x00,0x00,0x00,0x00,0x00,0xe4,0xb7,0x03,0xe3,0x58,0x01,0xd2,0x8f,0xd1, 78.2046 + 0x53,0xd0,0x35,0xcf,0x86,0x95,0x2f,0xd4,0x1f,0x53,0x04,0x04,0x00,0xd2,0x0d,0x51, 78.2047 + 0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x04,0xff,0x00,0x51,0x05,0x04,0xff,0x00,0x10, 78.2048 + 0x05,0x04,0xff,0x00,0x00,0x00,0x53,0x04,0x04,0x00,0x92,0x08,0x11,0x04,0x04,0x00, 78.2049 + 0x00,0x00,0x00,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04,0x00,0x54,0x04,0x04,0x00, 78.2050 + 0x53,0x04,0x04,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00, 78.2051 + 0x00,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x04,0x00,0x94,0x18,0x53,0x04,0x04,0x00, 78.2052 + 0x92,0x10,0xd1,0x08,0x10,0x04,0x04,0x00,0x04,0xe4,0x10,0x04,0x0a,0x00,0x00,0x00, 78.2053 + 0x00,0x00,0x0b,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,0x93,0x0c, 78.2054 + 0x52,0x04,0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd1,0x80,0xd0,0x42, 78.2055 + 0xcf,0x86,0xd5,0x1c,0x54,0x04,0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00, 78.2056 + 0xd1,0x08,0x10,0x04,0x07,0x00,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0xd4,0x0c, 78.2057 + 0x53,0x04,0x07,0x00,0x12,0x04,0x07,0x00,0x00,0x00,0x53,0x04,0x07,0x00,0x92,0x10, 78.2058 + 0xd1,0x08,0x10,0x04,0x07,0x00,0x07,0xde,0x10,0x04,0x07,0xe6,0x07,0xdc,0x00,0x00, 78.2059 + 0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00, 78.2060 + 0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0xd4,0x10,0x53,0x04,0x07,0x00, 78.2061 + 0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x07,0x00, 78.2062 + 0x91,0x08,0x10,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x1a,0xcf,0x86, 78.2063 + 0x55,0x04,0x08,0x00,0x94,0x10,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,0x08,0x00, 78.2064 + 0x0b,0x00,0x00,0x00,0x08,0x00,0xcf,0x86,0x95,0x28,0xd4,0x10,0x53,0x04,0x08,0x00, 78.2065 + 0x92,0x08,0x11,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x08,0x00,0xd2,0x0c, 78.2066 + 0x51,0x04,0x08,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x08,0x00, 78.2067 + 0x07,0x00,0xd2,0xe4,0xd1,0x80,0xd0,0x2e,0xcf,0x86,0x95,0x28,0x54,0x04,0x08,0x00, 78.2068 + 0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x08,0xe6, 78.2069 + 0xd2,0x0c,0x91,0x08,0x10,0x04,0x08,0xdc,0x08,0x00,0x08,0x00,0x11,0x04,0x00,0x00, 78.2070 + 0x08,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00, 78.2071 + 0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0xd4,0x14, 78.2072 + 0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x09,0x0b,0x00,0x0b,0x00,0x0b,0x00, 78.2073 + 0x0b,0x00,0xd3,0x10,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xe6, 78.2074 + 0x0b,0xe6,0x52,0x04,0x0b,0xe6,0xd1,0x08,0x10,0x04,0x0b,0xe6,0x00,0x00,0x10,0x04, 78.2075 + 0x00,0x00,0x0b,0xdc,0xd0,0x5e,0xcf,0x86,0xd5,0x20,0xd4,0x10,0x53,0x04,0x0b,0x00, 78.2076 + 0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0b,0x00,0x92,0x08, 78.2077 + 0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd4,0x10,0x53,0x04,0x0b,0x00,0x52,0x04, 78.2078 + 0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x10,0xe6,0x91,0x08, 78.2079 + 0x10,0x04,0x10,0xe6,0x10,0xdc,0x10,0xdc,0xd2,0x0c,0x51,0x04,0x10,0xdc,0x10,0x04, 78.2080 + 0x10,0xdc,0x10,0xe6,0xd1,0x08,0x10,0x04,0x10,0xe6,0x10,0xdc,0x10,0x04,0x10,0x00, 78.2081 + 0x00,0x00,0xcf,0x06,0x00,0x00,0xe1,0x1e,0x01,0xd0,0xaa,0xcf,0x86,0xd5,0x6e,0xd4, 78.2082 + 0x53,0xd3,0x17,0x52,0x04,0x09,0x00,0x51,0x04,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1, 78.2083 + 0xac,0x85,0xe1,0xac,0xb5,0x00,0x09,0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x09,0xff, 78.2084 + 0xe1,0xac,0x87,0xe1,0xac,0xb5,0x00,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,0x89, 78.2085 + 0xe1,0xac,0xb5,0x00,0x09,0x00,0xd1,0x0f,0x10,0x0b,0x09,0xff,0xe1,0xac,0x8b,0xe1, 78.2086 + 0xac,0xb5,0x00,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac,0x8d,0xe1,0xac,0xb5,0x00, 78.2087 + 0x09,0x00,0x93,0x17,0x92,0x13,0x51,0x04,0x09,0x00,0x10,0x0b,0x09,0xff,0xe1,0xac, 78.2088 + 0x91,0xe1,0xac,0xb5,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x54,0x04,0x09,0x00,0xd3, 78.2089 + 0x10,0x52,0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x07,0x09,0x00,0x09,0x00,0xd2, 78.2090 + 0x13,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xac,0xba,0xe1,0xac, 78.2091 + 0xb5,0x00,0x91,0x0f,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xac,0xbc,0xe1,0xac,0xb5, 78.2092 + 0x00,0x09,0x00,0xcf,0x86,0xd5,0x3d,0x94,0x39,0xd3,0x31,0xd2,0x25,0xd1,0x16,0x10, 78.2093 + 0x0b,0x09,0xff,0xe1,0xac,0xbe,0xe1,0xac,0xb5,0x00,0x09,0xff,0xe1,0xac,0xbf,0xe1, 78.2094 + 0xac,0xb5,0x00,0x10,0x04,0x09,0x00,0x09,0xff,0xe1,0xad,0x82,0xe1,0xac,0xb5,0x00, 78.2095 + 0x91,0x08,0x10,0x04,0x09,0x09,0x09,0x00,0x09,0x00,0x12,0x04,0x09,0x00,0x00,0x00, 78.2096 + 0x09,0x00,0xd4,0x1c,0x53,0x04,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09,0x00,0x10,0x04, 78.2097 + 0x09,0x00,0x09,0xe6,0x91,0x08,0x10,0x04,0x09,0xdc,0x09,0xe6,0x09,0xe6,0xd3,0x08, 78.2098 + 0x12,0x04,0x09,0xe6,0x09,0x00,0x52,0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00, 78.2099 + 0x00,0x00,0x00,0x00,0xd0,0x2e,0xcf,0x86,0x55,0x04,0x0a,0x00,0xd4,0x18,0x53,0x04, 78.2100 + 0x0a,0x00,0xd2,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x09,0x0d,0x09,0x11,0x04, 78.2101 + 0x0d,0x00,0x0a,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,0x11,0x04,0x0a,0x00,0x0d,0x00, 78.2102 + 0x0d,0x00,0xcf,0x86,0x55,0x04,0x0c,0x00,0xd4,0x14,0x93,0x10,0x52,0x04,0x0c,0x00, 78.2103 + 0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x07,0x0c,0x00,0x0c,0x00,0xd3,0x0c,0x92,0x08, 78.2104 + 0x11,0x04,0x0c,0x00,0x0c,0x09,0x00,0x00,0x12,0x04,0x00,0x00,0x0c,0x00,0xe3,0xb2, 78.2105 + 0x01,0xe2,0x09,0x01,0xd1,0x4c,0xd0,0x2a,0xcf,0x86,0x55,0x04,0x0a,0x00,0x54,0x04, 78.2106 + 0x0a,0x00,0xd3,0x10,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04,0x0a,0x00, 78.2107 + 0x0a,0x07,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0a,0x00,0x0a,0x00, 78.2108 + 0xcf,0x86,0x95,0x1c,0x94,0x18,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00, 78.2109 + 0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00, 78.2110 + 0xd0,0x3a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x12,0x00,0x92,0x0c,0x91,0x08, 78.2111 + 0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x54,0x04,0x14,0x00, 78.2112 + 0x53,0x04,0x14,0x00,0xd2,0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00, 78.2113 + 0x91,0x08,0x10,0x04,0x00,0x00,0x14,0x00,0x14,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x08, 78.2114 + 0x13,0x04,0x0d,0x00,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x0b,0xe6,0x10,0x04, 78.2115 + 0x0b,0xe6,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x01,0x0b,0xdc,0x0b,0xdc,0x92,0x08, 78.2116 + 0x11,0x04,0x0b,0xdc,0x0b,0xe6,0x0b,0xdc,0xd4,0x28,0xd3,0x10,0x92,0x0c,0x91,0x08, 78.2117 + 0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x01,0x0b,0x01,0xd2,0x0c,0x91,0x08,0x10,0x04, 78.2118 + 0x0b,0x01,0x0b,0x00,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0xdc,0x0b,0x00, 78.2119 + 0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0d,0x00,0xd1,0x08, 78.2120 + 0x10,0x04,0x0d,0xe6,0x0d,0x00,0x10,0x04,0x0d,0x00,0x13,0x00,0x92,0x0c,0x51,0x04, 78.2121 + 0x10,0xe6,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd1,0x1c,0xd0,0x06,0xcf,0x06, 78.2122 + 0x07,0x00,0xcf,0x86,0x55,0x04,0x07,0x00,0x94,0x0c,0x53,0x04,0x07,0x00,0x12,0x04, 78.2123 + 0x07,0x00,0x08,0x00,0x08,0x00,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0xd5,0x40, 78.2124 + 0xd4,0x2c,0xd3,0x10,0x92,0x0c,0x51,0x04,0x08,0xe6,0x10,0x04,0x08,0xdc,0x08,0xe6, 78.2125 + 0x09,0xe6,0xd2,0x0c,0x51,0x04,0x09,0xe6,0x10,0x04,0x09,0xdc,0x0a,0xe6,0xd1,0x08, 78.2126 + 0x10,0x04,0x0a,0xe6,0x0a,0xea,0x10,0x04,0x0a,0xd6,0x0a,0xdc,0x93,0x10,0x92,0x0c, 78.2127 + 0x91,0x08,0x10,0x04,0x0a,0xca,0x0a,0xe6,0x0a,0xe6,0x0a,0xe6,0x0a,0xe6,0xd4,0x14, 78.2128 + 0x93,0x10,0x52,0x04,0x0a,0xe6,0x51,0x04,0x0a,0xe6,0x10,0x04,0x0a,0xe6,0x10,0xe6, 78.2129 + 0x10,0xe6,0xd3,0x10,0x52,0x04,0x10,0xe6,0x51,0x04,0x10,0xe6,0x10,0x04,0x13,0xe8, 78.2130 + 0x13,0xe4,0xd2,0x10,0xd1,0x08,0x10,0x04,0x13,0xe4,0x13,0xdc,0x10,0x04,0x00,0x00, 78.2131 + 0x12,0xe6,0xd1,0x08,0x10,0x04,0x0c,0xe9,0x0b,0xdc,0x10,0x04,0x09,0xe6,0x09,0xdc, 78.2132 + 0xe2,0x80,0x08,0xe1,0x48,0x04,0xe0,0x1c,0x02,0xcf,0x86,0xe5,0x11,0x01,0xd4,0x84, 78.2133 + 0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa5,0x00,0x01,0xff, 78.2134 + 0x61,0xcc,0xa5,0x00,0x10,0x08,0x01,0xff,0x42,0xcc,0x87,0x00,0x01,0xff,0x62,0xcc, 78.2135 + 0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x42,0xcc,0xa3,0x00,0x01,0xff,0x62,0xcc, 78.2136 + 0xa3,0x00,0x10,0x08,0x01,0xff,0x42,0xcc,0xb1,0x00,0x01,0xff,0x62,0xcc,0xb1,0x00, 78.2137 + 0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x43,0xcc,0xa7,0xcc,0x81,0x00,0x01,0xff, 78.2138 + 0x63,0xcc,0xa7,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0x87,0x00,0x01,0xff, 78.2139 + 0x64,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x44,0xcc,0xa3,0x00,0x01,0xff, 78.2140 + 0x64,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0xb1,0x00,0x01,0xff,0x64,0xcc, 78.2141 + 0xb1,0x00,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x44,0xcc,0xa7,0x00, 78.2142 + 0x01,0xff,0x64,0xcc,0xa7,0x00,0x10,0x08,0x01,0xff,0x44,0xcc,0xad,0x00,0x01,0xff, 78.2143 + 0x64,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x45,0xcc,0x84,0xcc,0x80,0x00, 78.2144 + 0x01,0xff,0x65,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,0x84,0xcc, 78.2145 + 0x81,0x00,0x01,0xff,0x65,0xcc,0x84,0xcc,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.2146 + 0x01,0xff,0x45,0xcc,0xad,0x00,0x01,0xff,0x65,0xcc,0xad,0x00,0x10,0x08,0x01,0xff, 78.2147 + 0x45,0xcc,0xb0,0x00,0x01,0xff,0x65,0xcc,0xb0,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff, 78.2148 + 0x45,0xcc,0xa7,0xcc,0x86,0x00,0x01,0xff,0x65,0xcc,0xa7,0xcc,0x86,0x00,0x10,0x08, 78.2149 + 0x01,0xff,0x46,0xcc,0x87,0x00,0x01,0xff,0x66,0xcc,0x87,0x00,0xd4,0x84,0xd3,0x40, 78.2150 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x47,0xcc,0x84,0x00,0x01,0xff,0x67,0xcc, 78.2151 + 0x84,0x00,0x10,0x08,0x01,0xff,0x48,0xcc,0x87,0x00,0x01,0xff,0x68,0xcc,0x87,0x00, 78.2152 + 0xd1,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0xa3,0x00,0x01,0xff,0x68,0xcc,0xa3,0x00, 78.2153 + 0x10,0x08,0x01,0xff,0x48,0xcc,0x88,0x00,0x01,0xff,0x68,0xcc,0x88,0x00,0xd2,0x20, 78.2154 + 0xd1,0x10,0x10,0x08,0x01,0xff,0x48,0xcc,0xa7,0x00,0x01,0xff,0x68,0xcc,0xa7,0x00, 78.2155 + 0x10,0x08,0x01,0xff,0x48,0xcc,0xae,0x00,0x01,0xff,0x68,0xcc,0xae,0x00,0xd1,0x10, 78.2156 + 0x10,0x08,0x01,0xff,0x49,0xcc,0xb0,0x00,0x01,0xff,0x69,0xcc,0xb0,0x00,0x10,0x0a, 78.2157 + 0x01,0xff,0x49,0xcc,0x88,0xcc,0x81,0x00,0x01,0xff,0x69,0xcc,0x88,0xcc,0x81,0x00, 78.2158 + 0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,0xcc,0x81,0x00,0x01,0xff, 78.2159 + 0x6b,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x4b,0xcc,0xa3,0x00,0x01,0xff,0x6b,0xcc, 78.2160 + 0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4b,0xcc,0xb1,0x00,0x01,0xff,0x6b,0xcc, 78.2161 + 0xb1,0x00,0x10,0x08,0x01,0xff,0x4c,0xcc,0xa3,0x00,0x01,0xff,0x6c,0xcc,0xa3,0x00, 78.2162 + 0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4c,0xcc,0xa3,0xcc,0x84,0x00,0x01,0xff, 78.2163 + 0x6c,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x4c,0xcc,0xb1,0x00,0x01,0xff, 78.2164 + 0x6c,0xcc,0xb1,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4c,0xcc,0xad,0x00,0x01,0xff, 78.2165 + 0x6c,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x4d,0xcc,0x81,0x00,0x01,0xff,0x6d,0xcc, 78.2166 + 0x81,0x00,0xcf,0x86,0xe5,0x15,0x01,0xd4,0x88,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10, 78.2167 + 0x08,0x01,0xff,0x4d,0xcc,0x87,0x00,0x01,0xff,0x6d,0xcc,0x87,0x00,0x10,0x08,0x01, 78.2168 + 0xff,0x4d,0xcc,0xa3,0x00,0x01,0xff,0x6d,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01, 78.2169 + 0xff,0x4e,0xcc,0x87,0x00,0x01,0xff,0x6e,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x4e, 78.2170 + 0xcc,0xa3,0x00,0x01,0xff,0x6e,0xcc,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01, 78.2171 + 0xff,0x4e,0xcc,0xb1,0x00,0x01,0xff,0x6e,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x4e, 78.2172 + 0xcc,0xad,0x00,0x01,0xff,0x6e,0xcc,0xad,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f, 78.2173 + 0xcc,0x83,0xcc,0x81,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01, 78.2174 + 0xff,0x4f,0xcc,0x83,0xcc,0x88,0x00,0x01,0xff,0x6f,0xcc,0x83,0xcc,0x88,0x00,0xd3, 78.2175 + 0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x84,0xcc,0x80,0x00,0x01, 78.2176 + 0xff,0x6f,0xcc,0x84,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x84,0xcc,0x81, 78.2177 + 0x00,0x01,0xff,0x6f,0xcc,0x84,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x50, 78.2178 + 0xcc,0x81,0x00,0x01,0xff,0x70,0xcc,0x81,0x00,0x10,0x08,0x01,0xff,0x50,0xcc,0x87, 78.2179 + 0x00,0x01,0xff,0x70,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x52, 78.2180 + 0xcc,0x87,0x00,0x01,0xff,0x72,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x52,0xcc,0xa3, 78.2181 + 0x00,0x01,0xff,0x72,0xcc,0xa3,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x52,0xcc,0xa3, 78.2182 + 0xcc,0x84,0x00,0x01,0xff,0x72,0xcc,0xa3,0xcc,0x84,0x00,0x10,0x08,0x01,0xff,0x52, 78.2183 + 0xcc,0xb1,0x00,0x01,0xff,0x72,0xcc,0xb1,0x00,0xd4,0x8c,0xd3,0x48,0xd2,0x20,0xd1, 78.2184 + 0x10,0x10,0x08,0x01,0xff,0x53,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x87,0x00,0x10, 78.2185 + 0x08,0x01,0xff,0x53,0xcc,0xa3,0x00,0x01,0xff,0x73,0xcc,0xa3,0x00,0xd1,0x14,0x10, 78.2186 + 0x0a,0x01,0xff,0x53,0xcc,0x81,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x81,0xcc,0x87, 78.2187 + 0x00,0x10,0x0a,0x01,0xff,0x53,0xcc,0x8c,0xcc,0x87,0x00,0x01,0xff,0x73,0xcc,0x8c, 78.2188 + 0xcc,0x87,0x00,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff,0x53,0xcc,0xa3,0xcc,0x87, 78.2189 + 0x00,0x01,0xff,0x73,0xcc,0xa3,0xcc,0x87,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0x87, 78.2190 + 0x00,0x01,0xff,0x74,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x54,0xcc,0xa3, 78.2191 + 0x00,0x01,0xff,0x74,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x54,0xcc,0xb1,0x00,0x01, 78.2192 + 0xff,0x74,0xcc,0xb1,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x54, 78.2193 + 0xcc,0xad,0x00,0x01,0xff,0x74,0xcc,0xad,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xa4, 78.2194 + 0x00,0x01,0xff,0x75,0xcc,0xa4,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x55,0xcc,0xb0, 78.2195 + 0x00,0x01,0xff,0x75,0xcc,0xb0,0x00,0x10,0x08,0x01,0xff,0x55,0xcc,0xad,0x00,0x01, 78.2196 + 0xff,0x75,0xcc,0xad,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x55,0xcc,0x83, 78.2197 + 0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x83,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x55, 78.2198 + 0xcc,0x84,0xcc,0x88,0x00,0x01,0xff,0x75,0xcc,0x84,0xcc,0x88,0x00,0xd1,0x10,0x10, 78.2199 + 0x08,0x01,0xff,0x56,0xcc,0x83,0x00,0x01,0xff,0x76,0xcc,0x83,0x00,0x10,0x08,0x01, 78.2200 + 0xff,0x56,0xcc,0xa3,0x00,0x01,0xff,0x76,0xcc,0xa3,0x00,0xe0,0x10,0x02,0xcf,0x86, 78.2201 + 0xd5,0xe1,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc, 78.2202 + 0x80,0x00,0x01,0xff,0x77,0xcc,0x80,0x00,0x10,0x08,0x01,0xff,0x57,0xcc,0x81,0x00, 78.2203 + 0x01,0xff,0x77,0xcc,0x81,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0x88,0x00, 78.2204 + 0x01,0xff,0x77,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x57,0xcc,0x87,0x00,0x01,0xff, 78.2205 + 0x77,0xcc,0x87,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x57,0xcc,0xa3,0x00, 78.2206 + 0x01,0xff,0x77,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x58,0xcc,0x87,0x00,0x01,0xff, 78.2207 + 0x78,0xcc,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x58,0xcc,0x88,0x00,0x01,0xff, 78.2208 + 0x78,0xcc,0x88,0x00,0x10,0x08,0x01,0xff,0x59,0xcc,0x87,0x00,0x01,0xff,0x79,0xcc, 78.2209 + 0x87,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x5a,0xcc,0x82,0x00, 78.2210 + 0x01,0xff,0x7a,0xcc,0x82,0x00,0x10,0x08,0x01,0xff,0x5a,0xcc,0xa3,0x00,0x01,0xff, 78.2211 + 0x7a,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x5a,0xcc,0xb1,0x00,0x01,0xff, 78.2212 + 0x7a,0xcc,0xb1,0x00,0x10,0x08,0x01,0xff,0x68,0xcc,0xb1,0x00,0x01,0xff,0x74,0xcc, 78.2213 + 0x88,0x00,0x92,0x1d,0xd1,0x10,0x10,0x08,0x01,0xff,0x77,0xcc,0x8a,0x00,0x01,0xff, 78.2214 + 0x79,0xcc,0x8a,0x00,0x10,0x04,0x01,0x00,0x02,0xff,0xc5,0xbf,0xcc,0x87,0x00,0x0a, 78.2215 + 0x00,0xd4,0x98,0xd3,0x48,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x41,0xcc,0xa3, 78.2216 + 0x00,0x01,0xff,0x61,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x41,0xcc,0x89,0x00,0x01, 78.2217 + 0xff,0x61,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x81, 78.2218 + 0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82, 78.2219 + 0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x80,0x00,0xd2,0x28,0xd1,0x14,0x10, 78.2220 + 0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x82,0xcc,0x89, 78.2221 + 0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x61,0xcc,0x82, 78.2222 + 0xcc,0x83,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0xa3,0xcc,0x82,0x00,0x01, 78.2223 + 0xff,0x61,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x81, 78.2224 + 0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x81,0x00,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10, 78.2225 + 0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x80,0x00,0x01,0xff,0x61,0xcc,0x86,0xcc,0x80, 78.2226 + 0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x89,0x00,0x01,0xff,0x61,0xcc,0x86, 78.2227 + 0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x41,0xcc,0x86,0xcc,0x83,0x00,0x01, 78.2228 + 0xff,0x61,0xcc,0x86,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x41,0xcc,0xa3,0xcc,0x86, 78.2229 + 0x00,0x01,0xff,0x61,0xcc,0xa3,0xcc,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01, 78.2230 + 0xff,0x45,0xcc,0xa3,0x00,0x01,0xff,0x65,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x45, 78.2231 + 0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x89,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x45, 78.2232 + 0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc,0x82, 78.2233 + 0xcc,0x81,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x81,0x00,0xcf,0x86,0xe5,0x31,0x01, 78.2234 + 0xd4,0x90,0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x45,0xcc,0x82,0xcc, 78.2235 + 0x80,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0x45,0xcc, 78.2236 + 0x82,0xcc,0x89,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x89,0x00,0xd1,0x14,0x10,0x0a, 78.2237 + 0x01,0xff,0x45,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x65,0xcc,0x82,0xcc,0x83,0x00, 78.2238 + 0x10,0x0a,0x01,0xff,0x45,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff,0x65,0xcc,0xa3,0xcc, 78.2239 + 0x82,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0x49,0xcc,0x89,0x00,0x01,0xff, 78.2240 + 0x69,0xcc,0x89,0x00,0x10,0x08,0x01,0xff,0x49,0xcc,0xa3,0x00,0x01,0xff,0x69,0xcc, 78.2241 + 0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0x4f,0xcc,0xa3,0x00,0x01,0xff,0x6f,0xcc, 78.2242 + 0xa3,0x00,0x10,0x08,0x01,0xff,0x4f,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x89,0x00, 78.2243 + 0xd3,0x50,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x82,0xcc,0x81,0x00, 78.2244 + 0x01,0xff,0x6f,0xcc,0x82,0xcc,0x81,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x82,0xcc, 78.2245 + 0x80,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x80,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff, 78.2246 + 0x4f,0xcc,0x82,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x89,0x00,0x10,0x0a, 78.2247 + 0x01,0xff,0x4f,0xcc,0x82,0xcc,0x83,0x00,0x01,0xff,0x6f,0xcc,0x82,0xcc,0x83,0x00, 78.2248 + 0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0xa3,0xcc,0x82,0x00,0x01,0xff, 78.2249 + 0x6f,0xcc,0xa3,0xcc,0x82,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,0x81,0x00, 78.2250 + 0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x81,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc, 78.2251 + 0x9b,0xcc,0x80,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff, 78.2252 + 0x4f,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x89,0x00,0xd4,0x98, 78.2253 + 0xd3,0x48,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc,0x83,0x00, 78.2254 + 0x01,0xff,0x6f,0xcc,0x9b,0xcc,0x83,0x00,0x10,0x0a,0x01,0xff,0x4f,0xcc,0x9b,0xcc, 78.2255 + 0xa3,0x00,0x01,0xff,0x6f,0xcc,0x9b,0xcc,0xa3,0x00,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2256 + 0x55,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff,0x55,0xcc, 78.2257 + 0x89,0x00,0x01,0xff,0x75,0xcc,0x89,0x00,0xd2,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff, 78.2258 + 0x55,0xcc,0x9b,0xcc,0x81,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x81,0x00,0x10,0x0a, 78.2259 + 0x01,0xff,0x55,0xcc,0x9b,0xcc,0x80,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0x80,0x00, 78.2260 + 0xd1,0x14,0x10,0x0a,0x01,0xff,0x55,0xcc,0x9b,0xcc,0x89,0x00,0x01,0xff,0x75,0xcc, 78.2261 + 0x9b,0xcc,0x89,0x00,0x10,0x0a,0x01,0xff,0x55,0xcc,0x9b,0xcc,0x83,0x00,0x01,0xff, 78.2262 + 0x75,0xcc,0x9b,0xcc,0x83,0x00,0xd3,0x44,0xd2,0x24,0xd1,0x14,0x10,0x0a,0x01,0xff, 78.2263 + 0x55,0xcc,0x9b,0xcc,0xa3,0x00,0x01,0xff,0x75,0xcc,0x9b,0xcc,0xa3,0x00,0x10,0x08, 78.2264 + 0x01,0xff,0x59,0xcc,0x80,0x00,0x01,0xff,0x79,0xcc,0x80,0x00,0xd1,0x10,0x10,0x08, 78.2265 + 0x01,0xff,0x59,0xcc,0xa3,0x00,0x01,0xff,0x79,0xcc,0xa3,0x00,0x10,0x08,0x01,0xff, 78.2266 + 0x59,0xcc,0x89,0x00,0x01,0xff,0x79,0xcc,0x89,0x00,0x92,0x14,0x91,0x10,0x10,0x08, 78.2267 + 0x01,0xff,0x59,0xcc,0x83,0x00,0x01,0xff,0x79,0xcc,0x83,0x00,0x0a,0x00,0x0a,0x00, 78.2268 + 0xe1,0xc0,0x04,0xe0,0x80,0x02,0xcf,0x86,0xe5,0x2d,0x01,0xd4,0xa8,0xd3,0x54,0xd2, 78.2269 + 0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x93,0x00,0x01,0xff,0xce,0xb1, 78.2270 + 0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff, 78.2271 + 0xce,0xb1,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc, 78.2272 + 0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01, 78.2273 + 0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82, 78.2274 + 0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x91,0xcc,0x93,0x00,0x01,0xff, 78.2275 + 0xce,0x91,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x80,0x00, 78.2276 + 0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce, 78.2277 + 0x91,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x81,0x00,0x10, 78.2278 + 0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x91,0xcc,0x94, 78.2279 + 0xcd,0x82,0x00,0xd3,0x42,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc, 78.2280 + 0x93,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb5,0xcc, 78.2281 + 0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10, 78.2282 + 0x0b,0x01,0xff,0xce,0xb5,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb5,0xcc,0x94, 78.2283 + 0xcc,0x81,0x00,0x00,0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x95,0xcc, 78.2284 + 0x93,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x95,0xcc, 78.2285 + 0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x95,0xcc,0x94,0xcc,0x80,0x00,0x91,0x16,0x10, 78.2286 + 0x0b,0x01,0xff,0xce,0x95,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x95,0xcc,0x94, 78.2287 + 0xcc,0x81,0x00,0x00,0x00,0xd4,0xa8,0xd3,0x54,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01, 78.2288 + 0xff,0xce,0xb7,0xcc,0x93,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0x00,0x10,0x0b,0x01, 78.2289 + 0xff,0xce,0xb7,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80, 78.2290 + 0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff, 78.2291 + 0xce,0xb7,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd, 78.2292 + 0x82,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x82,0x00,0xd2,0x28,0xd1,0x12,0x10, 78.2293 + 0x09,0x01,0xff,0xce,0x97,0xcc,0x93,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0x00,0x10, 78.2294 + 0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x97,0xcc,0x94, 78.2295 + 0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x81,0x00, 78.2296 + 0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc, 78.2297 + 0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcd,0x82,0x00,0xd3,0x54,0xd2, 78.2298 + 0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x93,0x00,0x01,0xff,0xce,0xb9, 78.2299 + 0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff, 78.2300 + 0xce,0xb9,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb9,0xcc, 78.2301 + 0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01, 78.2302 + 0xff,0xce,0xb9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9,0xcc,0x94,0xcd,0x82, 78.2303 + 0x00,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x99,0xcc,0x93,0x00,0x01,0xff, 78.2304 + 0xce,0x99,0xcc,0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0x99,0xcc,0x93,0xcc,0x80,0x00, 78.2305 + 0x01,0xff,0xce,0x99,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce, 78.2306 + 0x99,0xcc,0x93,0xcc,0x81,0x00,0x01,0xff,0xce,0x99,0xcc,0x94,0xcc,0x81,0x00,0x10, 78.2307 + 0x0b,0x01,0xff,0xce,0x99,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0x99,0xcc,0x94, 78.2308 + 0xcd,0x82,0x00,0xcf,0x86,0xe5,0x13,0x01,0xd4,0x84,0xd3,0x42,0xd2,0x28,0xd1,0x12, 78.2309 + 0x10,0x09,0x01,0xff,0xce,0xbf,0xcc,0x93,0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0x00, 78.2310 + 0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc, 78.2311 + 0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0xbf,0xcc,0x93,0xcc,0x81, 78.2312 + 0x00,0x01,0xff,0xce,0xbf,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd2,0x28,0xd1,0x12, 78.2313 + 0x10,0x09,0x01,0xff,0xce,0x9f,0xcc,0x93,0x00,0x01,0xff,0xce,0x9f,0xcc,0x94,0x00, 78.2314 + 0x10,0x0b,0x01,0xff,0xce,0x9f,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce,0x9f,0xcc, 78.2315 + 0x94,0xcc,0x80,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xce,0x9f,0xcc,0x93,0xcc,0x81, 78.2316 + 0x00,0x01,0xff,0xce,0x9f,0xcc,0x94,0xcc,0x81,0x00,0x00,0x00,0xd3,0x54,0xd2,0x28, 78.2317 + 0xd1,0x12,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x93,0x00,0x01,0xff,0xcf,0x85,0xcc, 78.2318 + 0x94,0x00,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf, 78.2319 + 0x85,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x93, 78.2320 + 0xcc,0x81,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff, 78.2321 + 0xcf,0x85,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xcf,0x85,0xcc,0x94,0xcd,0x82,0x00, 78.2322 + 0xd2,0x1c,0xd1,0x0d,0x10,0x04,0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0x00,0x10, 78.2323 + 0x04,0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x0f,0x10,0x04, 78.2324 + 0x00,0x00,0x01,0xff,0xce,0xa5,0xcc,0x94,0xcc,0x81,0x00,0x10,0x04,0x00,0x00,0x01, 78.2325 + 0xff,0xce,0xa5,0xcc,0x94,0xcd,0x82,0x00,0xd4,0xa8,0xd3,0x54,0xd2,0x28,0xd1,0x12, 78.2326 + 0x10,0x09,0x01,0xff,0xcf,0x89,0xcc,0x93,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0x00, 78.2327 + 0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc, 78.2328 + 0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x81, 78.2329 + 0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89, 78.2330 + 0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0x00,0xd2,0x28, 78.2331 + 0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xa9,0xcc,0x93,0x00,0x01,0xff,0xce,0xa9,0xcc, 78.2332 + 0x94,0x00,0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x80,0x00,0x01,0xff,0xce, 78.2333 + 0xa9,0xcc,0x94,0xcc,0x80,0x00,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93, 78.2334 + 0xcc,0x81,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcc,0x81,0x00,0x10,0x0b,0x01,0xff, 78.2335 + 0xce,0xa9,0xcc,0x93,0xcd,0x82,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcd,0x82,0x00, 78.2336 + 0xd3,0x48,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x80,0x00,0x01, 78.2337 + 0xff,0xce,0xb1,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb5,0xcc,0x80,0x00,0x01, 78.2338 + 0xff,0xce,0xb5,0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb7,0xcc,0x80, 78.2339 + 0x00,0x01,0xff,0xce,0xb7,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcc,0x80, 78.2340 + 0x00,0x01,0xff,0xce,0xb9,0xcc,0x81,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff, 78.2341 + 0xce,0xbf,0xcc,0x80,0x00,0x01,0xff,0xce,0xbf,0xcc,0x81,0x00,0x10,0x09,0x01,0xff, 78.2342 + 0xcf,0x85,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85,0xcc,0x81,0x00,0x91,0x12,0x10,0x09, 78.2343 + 0x01,0xff,0xcf,0x89,0xcc,0x80,0x00,0x01,0xff,0xcf,0x89,0xcc,0x81,0x00,0x00,0x00, 78.2344 + 0xe0,0xe1,0x02,0xcf,0x86,0xe5,0x91,0x01,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16, 78.2345 + 0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc, 78.2346 + 0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x80,0xcd,0x85, 78.2347 + 0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d, 78.2348 + 0x01,0xff,0xce,0xb1,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc, 78.2349 + 0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb1,0xcc,0x93,0xcd,0x82, 78.2350 + 0xcd,0x85,0x00,0x01,0xff,0xce,0xb1,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x30, 78.2351 + 0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x91,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce, 78.2352 + 0x91,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x80, 78.2353 + 0xcd,0x85,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a, 78.2354 + 0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce, 78.2355 + 0x91,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0x91,0xcc,0x93, 78.2356 + 0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0x91,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00, 78.2357 + 0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcd,0x85, 78.2358 + 0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xb7, 78.2359 + 0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x80,0xcd, 78.2360 + 0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0xb7,0xcc,0x93,0xcc,0x81,0xcd,0x85, 78.2361 + 0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff, 78.2362 + 0xce,0xb7,0xcc,0x93,0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcc,0x94,0xcd, 78.2363 + 0x82,0xcd,0x85,0x00,0xd2,0x30,0xd1,0x16,0x10,0x0b,0x01,0xff,0xce,0x97,0xcc,0x93, 78.2364 + 0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff, 78.2365 + 0xce,0x97,0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcc, 78.2366 + 0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff,0xce,0x97,0xcc,0x93,0xcc,0x81, 78.2367 + 0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc,0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d, 78.2368 + 0x01,0xff,0xce,0x97,0xcc,0x93,0xcd,0x82,0xcd,0x85,0x00,0x01,0xff,0xce,0x97,0xcc, 78.2369 + 0x94,0xcd,0x82,0xcd,0x85,0x00,0xd4,0xc8,0xd3,0x64,0xd2,0x30,0xd1,0x16,0x10,0x0b, 78.2370 + 0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd, 78.2371 + 0x85,0x00,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcc,0x80,0xcd,0x85,0x00,0x01, 78.2372 + 0xff,0xcf,0x89,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d,0x01,0xff, 78.2373 + 0xcf,0x89,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcc, 78.2374 + 0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xcf,0x89,0xcc,0x93,0xcd,0x82,0xcd,0x85, 78.2375 + 0x00,0x01,0xff,0xcf,0x89,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x30,0xd1,0x16, 78.2376 + 0x10,0x0b,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc, 78.2377 + 0x94,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x80,0xcd,0x85, 78.2378 + 0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcc,0x80,0xcd,0x85,0x00,0xd1,0x1a,0x10,0x0d, 78.2379 + 0x01,0xff,0xce,0xa9,0xcc,0x93,0xcc,0x81,0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc, 78.2380 + 0x94,0xcc,0x81,0xcd,0x85,0x00,0x10,0x0d,0x01,0xff,0xce,0xa9,0xcc,0x93,0xcd,0x82, 78.2381 + 0xcd,0x85,0x00,0x01,0xff,0xce,0xa9,0xcc,0x94,0xcd,0x82,0xcd,0x85,0x00,0xd3,0x49, 78.2382 + 0xd2,0x26,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0xb1,0xcc,0x86,0x00,0x01,0xff,0xce, 78.2383 + 0xb1,0xcc,0x84,0x00,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x80,0xcd,0x85,0x00,0x01, 78.2384 + 0xff,0xce,0xb1,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xce,0xb1,0xcc,0x81, 78.2385 + 0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb1,0xcd,0x82,0x00,0x01,0xff, 78.2386 + 0xce,0xb1,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce, 78.2387 + 0x91,0xcc,0x86,0x00,0x01,0xff,0xce,0x91,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce, 78.2388 + 0x91,0xcc,0x80,0x00,0x01,0xff,0xce,0x91,0xcc,0x81,0x00,0xd1,0x0d,0x10,0x09,0x01, 78.2389 + 0xff,0xce,0x91,0xcd,0x85,0x00,0x01,0x00,0x10,0x07,0x01,0xff,0xce,0xb9,0x00,0x01, 78.2390 + 0x00,0xcf,0x86,0xe5,0x16,0x01,0xd4,0x8f,0xd3,0x44,0xd2,0x21,0xd1,0x0d,0x10,0x04, 78.2391 + 0x01,0x00,0x01,0xff,0xc2,0xa8,0xcd,0x82,0x00,0x10,0x0b,0x01,0xff,0xce,0xb7,0xcc, 78.2392 + 0x80,0xcd,0x85,0x00,0x01,0xff,0xce,0xb7,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01, 78.2393 + 0xff,0xce,0xb7,0xcc,0x81,0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb7, 78.2394 + 0xcd,0x82,0x00,0x01,0xff,0xce,0xb7,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12, 78.2395 + 0x10,0x09,0x01,0xff,0xce,0x95,0xcc,0x80,0x00,0x01,0xff,0xce,0x95,0xcc,0x81,0x00, 78.2396 + 0x10,0x09,0x01,0xff,0xce,0x97,0xcc,0x80,0x00,0x01,0xff,0xce,0x97,0xcc,0x81,0x00, 78.2397 + 0xd1,0x13,0x10,0x09,0x01,0xff,0xce,0x97,0xcd,0x85,0x00,0x01,0xff,0xe1,0xbe,0xbf, 78.2398 + 0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0xe1,0xbe,0xbf,0xcc,0x81,0x00,0x01,0xff,0xe1, 78.2399 + 0xbe,0xbf,0xcd,0x82,0x00,0xd3,0x40,0xd2,0x28,0xd1,0x12,0x10,0x09,0x01,0xff,0xce, 78.2400 + 0xb9,0xcc,0x86,0x00,0x01,0xff,0xce,0xb9,0xcc,0x84,0x00,0x10,0x0b,0x01,0xff,0xce, 78.2401 + 0xb9,0xcc,0x88,0xcc,0x80,0x00,0x01,0xff,0xce,0xb9,0xcc,0x88,0xcc,0x81,0x00,0x51, 78.2402 + 0x04,0x00,0x00,0x10,0x09,0x01,0xff,0xce,0xb9,0xcd,0x82,0x00,0x01,0xff,0xce,0xb9, 78.2403 + 0xcc,0x88,0xcd,0x82,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce,0x99,0xcc, 78.2404 + 0x86,0x00,0x01,0xff,0xce,0x99,0xcc,0x84,0x00,0x10,0x09,0x01,0xff,0xce,0x99,0xcc, 78.2405 + 0x80,0x00,0x01,0xff,0xce,0x99,0xcc,0x81,0x00,0xd1,0x0e,0x10,0x04,0x00,0x00,0x01, 78.2406 + 0xff,0xe1,0xbf,0xbe,0xcc,0x80,0x00,0x10,0x0a,0x01,0xff,0xe1,0xbf,0xbe,0xcc,0x81, 78.2407 + 0x00,0x01,0xff,0xe1,0xbf,0xbe,0xcd,0x82,0x00,0xd4,0x93,0xd3,0x4e,0xd2,0x28,0xd1, 78.2408 + 0x12,0x10,0x09,0x01,0xff,0xcf,0x85,0xcc,0x86,0x00,0x01,0xff,0xcf,0x85,0xcc,0x84, 78.2409 + 0x00,0x10,0x0b,0x01,0xff,0xcf,0x85,0xcc,0x88,0xcc,0x80,0x00,0x01,0xff,0xcf,0x85, 78.2410 + 0xcc,0x88,0xcc,0x81,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xcf,0x81,0xcc,0x93,0x00, 78.2411 + 0x01,0xff,0xcf,0x81,0xcc,0x94,0x00,0x10,0x09,0x01,0xff,0xcf,0x85,0xcd,0x82,0x00, 78.2412 + 0x01,0xff,0xcf,0x85,0xcc,0x88,0xcd,0x82,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01, 78.2413 + 0xff,0xce,0xa5,0xcc,0x86,0x00,0x01,0xff,0xce,0xa5,0xcc,0x84,0x00,0x10,0x09,0x01, 78.2414 + 0xff,0xce,0xa5,0xcc,0x80,0x00,0x01,0xff,0xce,0xa5,0xcc,0x81,0x00,0xd1,0x12,0x10, 78.2415 + 0x09,0x01,0xff,0xce,0xa1,0xcc,0x94,0x00,0x01,0xff,0xc2,0xa8,0xcc,0x80,0x00,0x10, 78.2416 + 0x09,0x01,0xff,0xc2,0xa8,0xcc,0x81,0x00,0x01,0xff,0x60,0x00,0xd3,0x3b,0xd2,0x18, 78.2417 + 0x51,0x04,0x00,0x00,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x80,0xcd,0x85,0x00,0x01, 78.2418 + 0xff,0xcf,0x89,0xcd,0x85,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xcf,0x89,0xcc,0x81, 78.2419 + 0xcd,0x85,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xcf,0x89,0xcd,0x82,0x00,0x01,0xff, 78.2420 + 0xcf,0x89,0xcd,0x82,0xcd,0x85,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xce, 78.2421 + 0x9f,0xcc,0x80,0x00,0x01,0xff,0xce,0x9f,0xcc,0x81,0x00,0x10,0x09,0x01,0xff,0xce, 78.2422 + 0xa9,0xcc,0x80,0x00,0x01,0xff,0xce,0xa9,0xcc,0x81,0x00,0xd1,0x10,0x10,0x09,0x01, 78.2423 + 0xff,0xce,0xa9,0xcd,0x85,0x00,0x01,0xff,0xc2,0xb4,0x00,0x10,0x04,0x01,0x00,0x00, 78.2424 + 0x00,0xe0,0x7e,0x0c,0xcf,0x86,0xe5,0xbb,0x08,0xe4,0x14,0x06,0xe3,0xf7,0x02,0xe2, 78.2425 + 0xbd,0x01,0xd1,0xd0,0xd0,0x4f,0xcf,0x86,0xd5,0x2e,0x94,0x2a,0xd3,0x18,0x92,0x14, 78.2426 + 0x91,0x10,0x10,0x08,0x01,0xff,0xe2,0x80,0x82,0x00,0x01,0xff,0xe2,0x80,0x83,0x00, 78.2427 + 0x01,0x00,0x01,0x00,0x92,0x0d,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff, 78.2428 + 0x00,0x01,0xff,0x00,0x01,0x00,0x94,0x1b,0x53,0x04,0x01,0x00,0xd2,0x09,0x11,0x04, 78.2429 + 0x01,0x00,0x01,0xff,0x00,0x51,0x05,0x01,0xff,0x00,0x10,0x05,0x01,0xff,0x00,0x04, 78.2430 + 0x00,0x01,0x00,0xcf,0x86,0xd5,0x48,0xd4,0x1c,0xd3,0x10,0x52,0x04,0x01,0x00,0x51, 78.2431 + 0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x52,0x04,0x04,0x00,0x11,0x04,0x04, 78.2432 + 0x00,0x06,0x00,0xd3,0x1c,0xd2,0x0c,0x51,0x04,0x06,0x00,0x10,0x04,0x06,0x00,0x07, 78.2433 + 0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x08,0x00,0x10,0x04,0x08,0x00,0x06,0x00,0x52, 78.2434 + 0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x06,0x00,0xd4,0x23,0xd3, 78.2435 + 0x14,0x52,0x05,0x06,0xff,0x00,0x91,0x0a,0x10,0x05,0x0a,0xff,0x00,0x00,0xff,0x00, 78.2436 + 0x0f,0xff,0x00,0x92,0x0a,0x11,0x05,0x0f,0xff,0x00,0x01,0xff,0x00,0x01,0xff,0x00, 78.2437 + 0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x06,0x00,0x00,0x00,0x01,0x00, 78.2438 + 0x01,0x00,0xd0,0x7e,0xcf,0x86,0xd5,0x34,0xd4,0x14,0x53,0x04,0x01,0x00,0x52,0x04, 78.2439 + 0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0xd3,0x10,0x52,0x04, 78.2440 + 0x08,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0c,0x00,0x0c,0x00,0x52,0x04,0x0c,0x00, 78.2441 + 0x91,0x08,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00, 78.2442 + 0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x02,0x00,0x91,0x08,0x10,0x04, 78.2443 + 0x03,0x00,0x04,0x00,0x04,0x00,0xd3,0x10,0xd2,0x08,0x11,0x04,0x06,0x00,0x08,0x00, 78.2444 + 0x11,0x04,0x08,0x00,0x0b,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00, 78.2445 + 0x10,0x04,0x0e,0x00,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x11,0x00,0x13,0x00, 78.2446 + 0xcf,0x86,0xd5,0x28,0x54,0x04,0x00,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x01,0xe6, 78.2447 + 0x01,0x01,0x01,0xe6,0xd2,0x0c,0x51,0x04,0x01,0x01,0x10,0x04,0x01,0x01,0x01,0xe6, 78.2448 + 0x91,0x08,0x10,0x04,0x01,0xe6,0x01,0x00,0x01,0x00,0xd4,0x30,0xd3,0x1c,0xd2,0x0c, 78.2449 + 0x91,0x08,0x10,0x04,0x01,0x00,0x01,0xe6,0x04,0x00,0xd1,0x08,0x10,0x04,0x06,0x00, 78.2450 + 0x06,0x01,0x10,0x04,0x06,0x01,0x06,0xe6,0x92,0x10,0xd1,0x08,0x10,0x04,0x06,0xdc, 78.2451 + 0x06,0xe6,0x10,0x04,0x06,0x01,0x08,0x01,0x09,0xdc,0x93,0x10,0x92,0x0c,0x91,0x08, 78.2452 + 0x10,0x04,0x0a,0xe6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x81,0xd0,0x4f, 78.2453 + 0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x29,0xd3,0x13,0x52,0x04,0x01,0x00,0x51,0x04, 78.2454 + 0x01,0x00,0x10,0x07,0x01,0xff,0xce,0xa9,0x00,0x01,0x00,0x92,0x12,0x51,0x04,0x01, 78.2455 + 0x00,0x10,0x06,0x01,0xff,0x4b,0x00,0x01,0xff,0x41,0xcc,0x8a,0x00,0x01,0x00,0x53, 78.2456 + 0x04,0x01,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x04, 78.2457 + 0x00,0x07,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0x95, 78.2458 + 0x2c,0xd4,0x18,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0xd1,0x08,0x10,0x04,0x08, 78.2459 + 0x00,0x09,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x0b, 78.2460 + 0x00,0x10,0x04,0x0b,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x68,0xcf, 78.2461 + 0x86,0xd5,0x48,0xd4,0x28,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01, 78.2462 + 0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x92,0x0c,0x91, 78.2463 + 0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x11,0x00,0x00,0x00,0x53,0x04,0x01,0x00,0x92, 78.2464 + 0x18,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x86,0x90,0xcc,0xb8,0x00,0x01, 78.2465 + 0xff,0xe2,0x86,0x92,0xcc,0xb8,0x00,0x01,0x00,0x94,0x1a,0x53,0x04,0x01,0x00,0x52, 78.2466 + 0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x86,0x94,0xcc,0xb8, 78.2467 + 0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x2e,0x94,0x2a,0x53,0x04,0x01,0x00,0x52, 78.2468 + 0x04,0x01,0x00,0xd1,0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,0x87,0x90,0xcc,0xb8, 78.2469 + 0x00,0x10,0x0a,0x01,0xff,0xe2,0x87,0x94,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x87,0x92, 78.2470 + 0xcc,0xb8,0x00,0x01,0x00,0xd4,0x14,0x53,0x04,0x01,0x00,0x92,0x0c,0x51,0x04,0x01, 78.2471 + 0x00,0x10,0x04,0x01,0x00,0x04,0x00,0x04,0x00,0x93,0x08,0x12,0x04,0x04,0x00,0x06, 78.2472 + 0x00,0x06,0x00,0xe2,0x38,0x02,0xe1,0x3f,0x01,0xd0,0x68,0xcf,0x86,0xd5,0x3e,0x94, 78.2473 + 0x3a,0xd3,0x16,0x52,0x04,0x01,0x00,0x91,0x0e,0x10,0x0a,0x01,0xff,0xe2,0x88,0x83, 78.2474 + 0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0xd2,0x12,0x91,0x0e,0x10,0x04,0x01,0x00,0x01, 78.2475 + 0xff,0xe2,0x88,0x88,0xcc,0xb8,0x00,0x01,0x00,0x91,0x0e,0x10,0x0a,0x01,0xff,0xe2, 78.2476 + 0x88,0x8b,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x24,0x93,0x20,0x52, 78.2477 + 0x04,0x01,0x00,0xd1,0x0e,0x10,0x0a,0x01,0xff,0xe2,0x88,0xa3,0xcc,0xb8,0x00,0x01, 78.2478 + 0x00,0x10,0x0a,0x01,0xff,0xe2,0x88,0xa5,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01, 78.2479 + 0x00,0xcf,0x86,0xd5,0x48,0x94,0x44,0xd3,0x2e,0xd2,0x12,0x91,0x0e,0x10,0x04,0x01, 78.2480 + 0x00,0x01,0xff,0xe2,0x88,0xbc,0xcc,0xb8,0x00,0x01,0x00,0xd1,0x0e,0x10,0x0a,0x01, 78.2481 + 0xff,0xe2,0x89,0x83,0xcc,0xb8,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe2, 78.2482 + 0x89,0x85,0xcc,0xb8,0x00,0x92,0x12,0x91,0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2, 78.2483 + 0x89,0x88,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x40,0xd3,0x1e,0x92, 78.2484 + 0x1a,0xd1,0x0c,0x10,0x08,0x01,0xff,0x3d,0xcc,0xb8,0x00,0x01,0x00,0x10,0x0a,0x01, 78.2485 + 0xff,0xe2,0x89,0xa1,0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1, 78.2486 + 0x0e,0x10,0x04,0x01,0x00,0x01,0xff,0xe2,0x89,0x8d,0xcc,0xb8,0x00,0x10,0x08,0x01, 78.2487 + 0xff,0x3c,0xcc,0xb8,0x00,0x01,0xff,0x3e,0xcc,0xb8,0x00,0xd3,0x30,0xd2,0x18,0x91, 78.2488 + 0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xa4,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xa5, 78.2489 + 0xcc,0xb8,0x00,0x01,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xb2,0xcc,0xb8, 78.2490 + 0x00,0x01,0xff,0xe2,0x89,0xb3,0xcc,0xb8,0x00,0x01,0x00,0x92,0x18,0x91,0x14,0x10, 78.2491 + 0x0a,0x01,0xff,0xe2,0x89,0xb6,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xb7,0xcc,0xb8, 78.2492 + 0x00,0x01,0x00,0x01,0x00,0xd0,0x86,0xcf,0x86,0xd5,0x50,0x94,0x4c,0xd3,0x30,0xd2, 78.2493 + 0x18,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xba,0xcc,0xb8,0x00,0x01,0xff,0xe2, 78.2494 + 0x89,0xbb,0xcc,0xb8,0x00,0x01,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0x82, 78.2495 + 0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x83,0xcc,0xb8,0x00,0x01,0x00,0x92,0x18,0x91, 78.2496 + 0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0x86,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x87, 78.2497 + 0xcc,0xb8,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x30,0x53,0x04,0x01,0x00,0x52, 78.2498 + 0x04,0x01,0x00,0xd1,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xa2,0xcc,0xb8,0x00,0x01, 78.2499 + 0xff,0xe2,0x8a,0xa8,0xcc,0xb8,0x00,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xa9,0xcc,0xb8, 78.2500 + 0x00,0x01,0xff,0xe2,0x8a,0xab,0xcc,0xb8,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01, 78.2501 + 0x00,0xd4,0x5c,0xd3,0x2c,0x92,0x28,0xd1,0x14,0x10,0x0a,0x01,0xff,0xe2,0x89,0xbc, 78.2502 + 0xcc,0xb8,0x00,0x01,0xff,0xe2,0x89,0xbd,0xcc,0xb8,0x00,0x10,0x0a,0x01,0xff,0xe2, 78.2503 + 0x8a,0x91,0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0x92,0xcc,0xb8,0x00,0x01,0x00,0xd2, 78.2504 + 0x18,0x51,0x04,0x01,0x00,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xb2,0xcc,0xb8,0x00,0x01, 78.2505 + 0xff,0xe2,0x8a,0xb3,0xcc,0xb8,0x00,0x91,0x14,0x10,0x0a,0x01,0xff,0xe2,0x8a,0xb4, 78.2506 + 0xcc,0xb8,0x00,0x01,0xff,0xe2,0x8a,0xb5,0xcc,0xb8,0x00,0x01,0x00,0x93,0x0c,0x92, 78.2507 + 0x08,0x11,0x04,0x01,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xd1,0x64,0xd0,0x3e,0xcf, 78.2508 + 0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01,0x00,0x04, 78.2509 + 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x94,0x20,0x53,0x04,0x01,0x00,0x92, 78.2510 + 0x18,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x80,0x88,0x00,0x10,0x08,0x01, 78.2511 + 0xff,0xe3,0x80,0x89,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01, 78.2512 + 0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10, 78.2513 + 0x04,0x01,0x00,0x04,0x00,0x91,0x08,0x10,0x04,0x06,0x00,0x04,0x00,0x04,0x00,0xd0, 78.2514 + 0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51, 78.2515 + 0x04,0x04,0x00,0x10,0x04,0x04,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0xd5, 78.2516 + 0x2c,0xd4,0x14,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x51,0x04,0x06,0x00,0x10, 78.2517 + 0x04,0x06,0x00,0x07,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,0x08, 78.2518 + 0x00,0x08,0x00,0x08,0x00,0x12,0x04,0x08,0x00,0x09,0x00,0xd4,0x14,0x53,0x04,0x09, 78.2519 + 0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xd3, 78.2520 + 0x08,0x12,0x04,0x0c,0x00,0x10,0x00,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10, 78.2521 + 0x00,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0xd3,0xa6,0xd2, 78.2522 + 0x74,0xd1,0x40,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x18,0x93,0x14,0x52, 78.2523 + 0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x04,0x00,0x10,0x04,0x04,0x00,0x00, 78.2524 + 0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x01,0x00,0x92, 78.2525 + 0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 78.2526 + 0x00,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x14,0x53, 78.2527 + 0x04,0x01,0x00,0x92,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x06, 78.2528 + 0x00,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x51,0x04,0x06,0x00,0x10,0x04,0x06, 78.2529 + 0x00,0x07,0x00,0xd1,0x06,0xcf,0x06,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54, 78.2530 + 0x04,0x01,0x00,0x93,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x06,0x00,0x06, 78.2531 + 0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x13,0x04,0x04, 78.2532 + 0x00,0x06,0x00,0xd2,0xdc,0xd1,0x48,0xd0,0x26,0xcf,0x86,0x95,0x20,0x54,0x04,0x01, 78.2533 + 0x00,0xd3,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x07,0x00,0x06,0x00,0x92,0x0c,0x91, 78.2534 + 0x08,0x10,0x04,0x08,0x00,0x04,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55, 78.2535 + 0x04,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x04,0x00,0x06, 78.2536 + 0x00,0x06,0x00,0x52,0x04,0x06,0x00,0x11,0x04,0x06,0x00,0x08,0x00,0xd0,0x5e,0xcf, 78.2537 + 0x86,0xd5,0x2c,0xd4,0x10,0x53,0x04,0x06,0x00,0x92,0x08,0x11,0x04,0x06,0x00,0x07, 78.2538 + 0x00,0x07,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0x52, 78.2539 + 0x04,0x08,0x00,0x91,0x08,0x10,0x04,0x08,0x00,0x0a,0x00,0x0b,0x00,0xd4,0x10,0x93, 78.2540 + 0x0c,0x92,0x08,0x11,0x04,0x07,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0xd3,0x10,0x92, 78.2541 + 0x0c,0x51,0x04,0x08,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x52,0x04,0x0a, 78.2542 + 0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x1c,0x94, 78.2543 + 0x18,0xd3,0x08,0x12,0x04,0x0a,0x00,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b, 78.2544 + 0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0b,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51, 78.2545 + 0x04,0x0b,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0c,0x00,0x0b,0x00,0x0b,0x00,0xd1, 78.2546 + 0xa8,0xd0,0x42,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10, 78.2547 + 0x04,0x10,0x00,0x01,0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x0c,0x00,0x01, 78.2548 + 0x00,0x92,0x08,0x11,0x04,0x01,0x00,0x0c,0x00,0x01,0x00,0x01,0x00,0x94,0x14,0x53, 78.2549 + 0x04,0x01,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x01,0x00,0x01, 78.2550 + 0x00,0x01,0x00,0xcf,0x86,0xd5,0x40,0xd4,0x18,0x53,0x04,0x01,0x00,0x52,0x04,0x01, 78.2551 + 0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x01,0x00,0x10,0x04,0x0c,0x00,0x01,0x00,0xd3, 78.2552 + 0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x0c,0x00,0x51,0x04,0x0c, 78.2553 + 0x00,0x10,0x04,0x01,0x00,0x0b,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10, 78.2554 + 0x04,0x01,0x00,0x0c,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c, 78.2555 + 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x06,0x00,0x93,0x0c,0x52,0x04,0x06,0x00,0x11, 78.2556 + 0x04,0x06,0x00,0x01,0x00,0x01,0x00,0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01, 78.2557 + 0x00,0x93,0x10,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x0c,0x00,0x0c, 78.2558 + 0x00,0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c, 78.2559 + 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10, 78.2560 + 0x04,0x01,0x00,0x0c,0x00,0xcf,0x86,0xd5,0x2c,0x94,0x28,0xd3,0x10,0x52,0x04,0x08, 78.2561 + 0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x09,0x00,0xd2,0x0c,0x51,0x04,0x09, 78.2562 + 0x00,0x10,0x04,0x09,0x00,0x0d,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x0d,0x00,0x0c, 78.2563 + 0x00,0x06,0x00,0x94,0x0c,0x53,0x04,0x06,0x00,0x12,0x04,0x06,0x00,0x0a,0x00,0x06, 78.2564 + 0x00,0xe4,0x39,0x01,0xd3,0x0c,0xd2,0x06,0xcf,0x06,0x04,0x00,0xcf,0x06,0x06,0x00, 78.2565 + 0xd2,0x30,0xd1,0x06,0xcf,0x06,0x06,0x00,0xd0,0x06,0xcf,0x06,0x06,0x00,0xcf,0x86, 78.2566 + 0x95,0x1e,0x54,0x04,0x06,0x00,0x53,0x04,0x06,0x00,0x52,0x04,0x06,0x00,0x91,0x0e, 78.2567 + 0x10,0x0a,0x06,0xff,0xe2,0xab,0x9d,0xcc,0xb8,0x00,0x06,0x00,0x06,0x00,0x06,0x00, 78.2568 + 0xd1,0x80,0xd0,0x3a,0xcf,0x86,0xd5,0x28,0xd4,0x10,0x53,0x04,0x07,0x00,0x52,0x04, 78.2569 + 0x07,0x00,0x11,0x04,0x07,0x00,0x08,0x00,0xd3,0x08,0x12,0x04,0x08,0x00,0x09,0x00, 78.2570 + 0x92,0x0c,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x94,0x0c, 78.2571 + 0x93,0x08,0x12,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x86,0xd5,0x30, 78.2572 + 0xd4,0x14,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00, 78.2573 + 0x10,0x00,0x10,0x00,0xd3,0x10,0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00, 78.2574 + 0x0b,0x00,0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x10,0x00,0x10,0x00,0x54,0x04, 78.2575 + 0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x10,0x00, 78.2576 + 0xd0,0x32,0xcf,0x86,0xd5,0x14,0x54,0x04,0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00, 78.2577 + 0x11,0x04,0x10,0x00,0x00,0x00,0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00, 78.2578 + 0xd2,0x08,0x11,0x04,0x10,0x00,0x14,0x00,0x91,0x08,0x10,0x04,0x14,0x00,0x10,0x00, 78.2579 + 0x10,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08, 78.2580 + 0x10,0x04,0x10,0x00,0x15,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x92,0x0c,0x51,0x04, 78.2581 + 0x10,0x00,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd4,0x0c,0x53,0x04, 78.2582 + 0x14,0x00,0x12,0x04,0x14,0x00,0x11,0x00,0x53,0x04,0x14,0x00,0x52,0x04,0x14,0x00, 78.2583 + 0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x15,0x00,0xe3,0xb9,0x01,0xd2,0xac,0xd1, 78.2584 + 0x68,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x08,0x00,0x94,0x14,0x53,0x04,0x08,0x00,0x52, 78.2585 + 0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0x08,0x00,0xcf, 78.2586 + 0x86,0xd5,0x18,0x54,0x04,0x08,0x00,0x53,0x04,0x08,0x00,0x52,0x04,0x08,0x00,0x51, 78.2587 + 0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x09,0x00,0x52, 78.2588 + 0x04,0x09,0x00,0x91,0x08,0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0xd3,0x10,0x92, 78.2589 + 0x0c,0x91,0x08,0x10,0x04,0x0b,0x00,0x0a,0x00,0x0a,0x00,0x09,0x00,0x52,0x04,0x0a, 78.2590 + 0x00,0x11,0x04,0x0a,0x00,0x0b,0x00,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0x55, 78.2591 + 0x04,0x08,0x00,0xd4,0x1c,0x53,0x04,0x08,0x00,0xd2,0x0c,0x51,0x04,0x08,0x00,0x10, 78.2592 + 0x04,0x08,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0b,0xe6,0xd3, 78.2593 + 0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0d,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10, 78.2594 + 0x04,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0xd1,0x6c,0xd0,0x2a,0xcf,0x86,0x55, 78.2595 + 0x04,0x08,0x00,0x94,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10, 78.2596 + 0x04,0x00,0x00,0x0d,0x00,0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d, 78.2597 + 0x00,0x00,0x00,0x08,0x00,0xcf,0x86,0x55,0x04,0x08,0x00,0xd4,0x1c,0xd3,0x0c,0x52, 78.2598 + 0x04,0x08,0x00,0x11,0x04,0x08,0x00,0x0d,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00, 78.2599 + 0x00,0x10,0x04,0x00,0x00,0x08,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c, 78.2600 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10, 78.2601 + 0x04,0x00,0x00,0x0c,0x09,0xd0,0x5a,0xcf,0x86,0xd5,0x18,0x54,0x04,0x08,0x00,0x93, 78.2602 + 0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0x00, 78.2603 + 0x00,0xd4,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08, 78.2604 + 0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00, 78.2605 + 0x00,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00, 78.2606 + 0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00,0x00,0xcf, 78.2607 + 0x86,0x95,0x40,0xd4,0x20,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10, 78.2608 + 0x04,0x08,0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08, 78.2609 + 0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08, 78.2610 + 0x00,0x00,0x00,0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x00, 78.2611 + 0x00,0x0a,0xe6,0xd2,0x9c,0xd1,0x68,0xd0,0x32,0xcf,0x86,0xd5,0x14,0x54,0x04,0x08, 78.2612 + 0x00,0x53,0x04,0x08,0x00,0x52,0x04,0x0a,0x00,0x11,0x04,0x08,0x00,0x0a,0x00,0x54, 78.2613 + 0x04,0x0a,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0a,0x00,0x0b,0x00,0x0d, 78.2614 + 0x00,0x0d,0x00,0x12,0x04,0x0d,0x00,0x10,0x00,0xcf,0x86,0x95,0x30,0x94,0x2c,0xd3, 78.2615 + 0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x12,0x00,0x91,0x08,0x10, 78.2616 + 0x04,0x12,0x00,0x13,0x00,0x13,0x00,0xd2,0x08,0x11,0x04,0x13,0x00,0x14,0x00,0x51, 78.2617 + 0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf, 78.2618 + 0x86,0x95,0x18,0x54,0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,0x04,0x04, 78.2619 + 0x00,0x10,0x04,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xcf,0x86,0x55,0x04,0x04, 78.2620 + 0x00,0x54,0x04,0x04,0x00,0x93,0x08,0x12,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0xd1, 78.2621 + 0x06,0xcf,0x06,0x04,0x00,0xd0,0x06,0xcf,0x06,0x04,0x00,0xcf,0x86,0xd5,0x14,0x54, 78.2622 + 0x04,0x04,0x00,0x93,0x0c,0x52,0x04,0x04,0x00,0x11,0x04,0x04,0x00,0x00,0x00,0x00, 78.2623 + 0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x04,0x00,0x12,0x04,0x04,0x00,0x00,0x00,0xcf, 78.2624 + 0x86,0xe5,0xa6,0x05,0xe4,0x9f,0x05,0xe3,0x96,0x04,0xe2,0xe4,0x03,0xe1,0xc0,0x01, 78.2625 + 0xd0,0x3e,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x1c,0x53,0x04,0x01,0x00,0xd2,0x0c, 78.2626 + 0x51,0x04,0x01,0x00,0x10,0x04,0x01,0xda,0x01,0xe4,0x91,0x08,0x10,0x04,0x01,0xe8, 78.2627 + 0x01,0xde,0x01,0xe0,0x53,0x04,0x01,0x00,0xd2,0x0c,0x51,0x04,0x04,0x00,0x10,0x04, 78.2628 + 0x04,0x00,0x06,0x00,0x51,0x04,0x06,0x00,0x10,0x04,0x04,0x00,0x01,0x00,0xcf,0x86, 78.2629 + 0xd5,0xaa,0xd4,0x32,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00, 78.2630 + 0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81, 78.2631 + 0x8b,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x8d,0xe3,0x82, 78.2632 + 0x99,0x00,0x01,0x00,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81, 78.2633 + 0x8f,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x91,0xe3,0x82, 78.2634 + 0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x93,0xe3,0x82,0x99, 78.2635 + 0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x95,0xe3,0x82,0x99,0x00,0x01,0x00, 78.2636 + 0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x97,0xe3,0x82,0x99,0x00,0x01, 78.2637 + 0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0x99,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,0x0f, 78.2638 + 0x10,0x0b,0x01,0xff,0xe3,0x81,0x9b,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01, 78.2639 + 0xff,0xe3,0x81,0x9d,0xe3,0x82,0x99,0x00,0x01,0x00,0xd4,0x53,0xd3,0x3c,0xd2,0x1e, 78.2640 + 0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0x9f,0xe3,0x82,0x99,0x00,0x01,0x00,0x10, 78.2641 + 0x0b,0x01,0xff,0xe3,0x81,0xa1,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x04, 78.2642 + 0x01,0x00,0x01,0xff,0xe3,0x81,0xa4,0xe3,0x82,0x99,0x00,0x10,0x04,0x01,0x00,0x01, 78.2643 + 0xff,0xe3,0x81,0xa6,0xe3,0x82,0x99,0x00,0x92,0x13,0x91,0x0f,0x10,0x04,0x01,0x00, 78.2644 + 0x01,0xff,0xe3,0x81,0xa8,0xe3,0x82,0x99,0x00,0x01,0x00,0x01,0x00,0xd3,0x4a,0xd2, 78.2645 + 0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe3,0x81,0xaf,0xe3,0x82,0x99,0x00,0x01,0xff, 78.2646 + 0xe3,0x81,0xaf,0xe3,0x82,0x9a,0x00,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x81,0xb2, 78.2647 + 0xe3,0x82,0x99,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb2,0xe3,0x82,0x9a, 78.2648 + 0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb5,0xe3,0x82,0x99,0x00,0x01,0xff, 78.2649 + 0xe3,0x81,0xb5,0xe3,0x82,0x9a,0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x04,0x01,0x00,0x01, 78.2650 + 0xff,0xe3,0x81,0xb8,0xe3,0x82,0x99,0x00,0x10,0x0b,0x01,0xff,0xe3,0x81,0xb8,0xe3, 78.2651 + 0x82,0x9a,0x00,0x01,0x00,0x91,0x16,0x10,0x0b,0x01,0xff,0xe3,0x81,0xbb,0xe3,0x82, 78.2652 + 0x99,0x00,0x01,0xff,0xe3,0x81,0xbb,0xe3,0x82,0x9a,0x00,0x01,0x00,0xd0,0xee,0xcf, 78.2653 + 0x86,0xd5,0x42,0x54,0x04,0x01,0x00,0xd3,0x1b,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10, 78.2654 + 0x0b,0x01,0xff,0xe3,0x81,0x86,0xe3,0x82,0x99,0x00,0x06,0x00,0x10,0x04,0x06,0x00, 78.2655 + 0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x01,0x08,0x10,0x04,0x01,0x08, 78.2656 + 0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0x9d,0xe3,0x82,0x99, 78.2657 + 0x00,0x06,0x00,0xd4,0x32,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,0x01, 78.2658 + 0x00,0x01,0x00,0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3, 78.2659 + 0x82,0xab,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xad,0xe3, 78.2660 + 0x82,0x99,0x00,0x01,0x00,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3, 78.2661 + 0x82,0xaf,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb1,0xe3, 78.2662 + 0x82,0x99,0x00,0x01,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb3,0xe3,0x82, 78.2663 + 0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb5,0xe3,0x82,0x99,0x00,0x01, 78.2664 + 0x00,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb7,0xe3,0x82,0x99,0x00, 78.2665 + 0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x82,0xb9,0xe3,0x82,0x99,0x00,0x01,0x00,0xd1, 78.2666 + 0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xbb,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x0b, 78.2667 + 0x01,0xff,0xe3,0x82,0xbd,0xe3,0x82,0x99,0x00,0x01,0x00,0xcf,0x86,0xd5,0xd5,0xd4, 78.2668 + 0x53,0xd3,0x3c,0xd2,0x1e,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3,0x82,0xbf,0xe3,0x82, 78.2669 + 0x99,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0x81,0xe3,0x82,0x99,0x00,0x01, 78.2670 + 0x00,0xd1,0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x84,0xe3,0x82,0x99,0x00, 78.2671 + 0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x86,0xe3,0x82,0x99,0x00,0x92,0x13,0x91, 78.2672 + 0x0f,0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x88,0xe3,0x82,0x99,0x00,0x01,0x00, 78.2673 + 0x01,0x00,0xd3,0x4a,0xd2,0x25,0xd1,0x16,0x10,0x0b,0x01,0xff,0xe3,0x83,0x8f,0xe3, 78.2674 + 0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x8f,0xe3,0x82,0x9a,0x00,0x10,0x04,0x01,0x00, 78.2675 + 0x01,0xff,0xe3,0x83,0x92,0xe3,0x82,0x99,0x00,0xd1,0x0f,0x10,0x0b,0x01,0xff,0xe3, 78.2676 + 0x83,0x92,0xe3,0x82,0x9a,0x00,0x01,0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0x95,0xe3, 78.2677 + 0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x95,0xe3,0x82,0x9a,0x00,0xd2,0x1e,0xd1,0x0f, 78.2678 + 0x10,0x04,0x01,0x00,0x01,0xff,0xe3,0x83,0x98,0xe3,0x82,0x99,0x00,0x10,0x0b,0x01, 78.2679 + 0xff,0xe3,0x83,0x98,0xe3,0x82,0x9a,0x00,0x01,0x00,0x91,0x16,0x10,0x0b,0x01,0xff, 78.2680 + 0xe3,0x83,0x9b,0xe3,0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0x9b,0xe3,0x82,0x9a,0x00, 78.2681 + 0x01,0x00,0x54,0x04,0x01,0x00,0xd3,0x22,0x52,0x04,0x01,0x00,0xd1,0x0f,0x10,0x0b, 78.2682 + 0x01,0xff,0xe3,0x82,0xa6,0xe3,0x82,0x99,0x00,0x01,0x00,0x10,0x04,0x01,0x00,0x01, 78.2683 + 0xff,0xe3,0x83,0xaf,0xe3,0x82,0x99,0x00,0xd2,0x25,0xd1,0x16,0x10,0x0b,0x01,0xff, 78.2684 + 0xe3,0x83,0xb0,0xe3,0x82,0x99,0x00,0x01,0xff,0xe3,0x83,0xb1,0xe3,0x82,0x99,0x00, 78.2685 + 0x10,0x0b,0x01,0xff,0xe3,0x83,0xb2,0xe3,0x82,0x99,0x00,0x01,0x00,0x51,0x04,0x01, 78.2686 + 0x00,0x10,0x0b,0x01,0xff,0xe3,0x83,0xbd,0xe3,0x82,0x99,0x00,0x06,0x00,0xd1,0x65, 78.2687 + 0xd0,0x46,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,0x00,0x00,0x91,0x08, 78.2688 + 0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd4,0x18,0x53,0x04, 78.2689 + 0x01,0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x0a,0x00,0x10,0x04, 78.2690 + 0x13,0x00,0x14,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00, 78.2691 + 0x01,0x00,0x01,0x00,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x94,0x15,0x93,0x11, 78.2692 + 0x52,0x04,0x01,0x00,0x91,0x09,0x10,0x05,0x01,0xff,0x00,0x01,0x00,0x01,0x00,0x01, 78.2693 + 0x00,0x01,0x00,0xd0,0x32,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x01,0x00,0x52, 78.2694 + 0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x54, 78.2695 + 0x04,0x04,0x00,0x53,0x04,0x04,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c, 78.2696 + 0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,0x08,0x00,0x0a,0x00,0x94, 78.2697 + 0x0c,0x93,0x08,0x12,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0xd2,0xa4,0xd1, 78.2698 + 0x5c,0xd0,0x22,0xcf,0x86,0x95,0x1c,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x52, 78.2699 + 0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x07,0x00,0x10,0x04,0x07,0x00,0x00, 78.2700 + 0x00,0x01,0x00,0xcf,0x86,0xd5,0x20,0xd4,0x0c,0x93,0x08,0x12,0x04,0x01,0x00,0x0b, 78.2701 + 0x00,0x0b,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00,0x06,0x00,0x06, 78.2702 + 0x00,0x06,0x00,0x06,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01, 78.2703 + 0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x08,0x00,0x01,0x00,0xd0,0x1e,0xcf,0x86,0x55, 78.2704 + 0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x01, 78.2705 + 0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xcf,0x86,0xd5,0x10,0x94,0x0c,0x53, 78.2706 + 0x04,0x01,0x00,0x12,0x04,0x01,0x00,0x07,0x00,0x01,0x00,0x54,0x04,0x01,0x00,0x53, 78.2707 + 0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x16, 78.2708 + 0x00,0xd1,0x30,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54, 78.2709 + 0x04,0x01,0x00,0xd3,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01, 78.2710 + 0x00,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x01,0x00,0x01, 78.2711 + 0x00,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x01,0x00,0x53, 78.2712 + 0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x07,0x00,0x54,0x04,0x01, 78.2713 + 0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01, 78.2714 + 0x00,0x07,0x00,0xcf,0x06,0x04,0x00,0xcf,0x06,0x04,0x00,0xd1,0x48,0xd0,0x40,0xcf, 78.2715 + 0x86,0xd5,0x06,0xcf,0x06,0x04,0x00,0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x2c,0xd2, 78.2716 + 0x06,0xcf,0x06,0x04,0x00,0xd1,0x06,0xcf,0x06,0x04,0x00,0xd0,0x1a,0xcf,0x86,0x55, 78.2717 + 0x04,0x04,0x00,0x54,0x04,0x04,0x00,0x93,0x0c,0x52,0x04,0x04,0x00,0x11,0x04,0x04, 78.2718 + 0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x07,0x00,0xcf,0x06,0x01,0x00,0xcf,0x86,0xcf, 78.2719 + 0x06,0x01,0x00,0xcf,0x86,0xcf,0x06,0x01,0x00,0xe2,0x71,0x05,0xd1,0x8c,0xd0,0x08, 78.2720 + 0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00,0xd4,0x06, 78.2721 + 0xcf,0x06,0x01,0x00,0xd3,0x06,0xcf,0x06,0x01,0x00,0xd2,0x06,0xcf,0x06,0x01,0x00, 78.2722 + 0xd1,0x06,0xcf,0x06,0x01,0x00,0xd0,0x22,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x10, 78.2723 + 0x93,0x0c,0x52,0x04,0x01,0x00,0x11,0x04,0x01,0x00,0x08,0x00,0x08,0x00,0x53,0x04, 78.2724 + 0x08,0x00,0x12,0x04,0x08,0x00,0x0a,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x18,0xd3,0x08, 78.2725 + 0x12,0x04,0x0a,0x00,0x0b,0x00,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0d,0x00, 78.2726 + 0x11,0x00,0x11,0x00,0x93,0x0c,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x13,0x00, 78.2727 + 0x13,0x00,0x94,0x14,0x53,0x04,0x13,0x00,0x92,0x0c,0x51,0x04,0x13,0x00,0x10,0x04, 78.2728 + 0x13,0x00,0x14,0x00,0x14,0x00,0x00,0x00,0xe0,0xdb,0x04,0xcf,0x86,0xe5,0xdf,0x01, 78.2729 + 0xd4,0x06,0xcf,0x06,0x04,0x00,0xd3,0x74,0xd2,0x6e,0xd1,0x06,0xcf,0x06,0x04,0x00, 78.2730 + 0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x04,0x00,0x52,0x04,0x04,0x00, 78.2731 + 0x91,0x08,0x10,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xd4,0x10,0x93,0x0c, 78.2732 + 0x92,0x08,0x11,0x04,0x04,0x00,0x06,0x00,0x04,0x00,0x04,0x00,0x93,0x10,0x52,0x04, 78.2733 + 0x04,0x00,0x91,0x08,0x10,0x04,0x06,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xcf,0x86, 78.2734 + 0x95,0x24,0x94,0x20,0x93,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x04,0x00,0x06,0x00, 78.2735 + 0x04,0x00,0xd1,0x08,0x10,0x04,0x04,0x00,0x06,0x00,0x10,0x04,0x04,0x00,0x00,0x00, 78.2736 + 0x00,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x06,0x0a,0x00,0xd2,0x84,0xd1,0x4c,0xd0,0x16, 78.2737 + 0xcf,0x86,0x55,0x04,0x0a,0x00,0x94,0x0c,0x53,0x04,0x0a,0x00,0x12,0x04,0x0a,0x00, 78.2738 + 0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x0a,0x00,0xd4,0x1c,0xd3,0x0c,0x92,0x08, 78.2739 + 0x11,0x04,0x0c,0x00,0x0a,0x00,0x0a,0x00,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00, 78.2740 + 0x10,0x04,0x0a,0x00,0x0a,0xe6,0xd3,0x08,0x12,0x04,0x0a,0x00,0x0d,0xe6,0x52,0x04, 78.2741 + 0x0d,0xe6,0x11,0x04,0x0a,0xe6,0x0a,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04, 78.2742 + 0x0a,0x00,0x53,0x04,0x0a,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04, 78.2743 + 0x11,0xe6,0x0d,0xe6,0x0b,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00, 78.2744 + 0x93,0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,0x00,0x00,0xd1,0x40, 78.2745 + 0xd0,0x3a,0xcf,0x86,0xd5,0x24,0x54,0x04,0x08,0x00,0xd3,0x10,0x52,0x04,0x08,0x00, 78.2746 + 0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x09,0x00,0x92,0x0c,0x51,0x04,0x09,0x00, 78.2747 + 0x10,0x04,0x09,0x00,0x0a,0x00,0x0a,0x00,0x94,0x10,0x93,0x0c,0x92,0x08,0x11,0x04, 78.2748 + 0x09,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xcf,0x06,0x0a,0x00,0xd0,0x5e, 78.2749 + 0xcf,0x86,0xd5,0x28,0xd4,0x18,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00,0xd1,0x08, 78.2750 + 0x10,0x04,0x0a,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x11,0x00,0x93,0x0c,0x92,0x08, 78.2751 + 0x11,0x04,0x0c,0x00,0x0d,0x00,0x10,0x00,0x10,0x00,0xd4,0x1c,0x53,0x04,0x0c,0x00, 78.2752 + 0xd2,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0d,0x00,0x10,0x00,0x51,0x04,0x10,0x00, 78.2753 + 0x10,0x04,0x12,0x00,0x14,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x10,0x00,0x11,0x00, 78.2754 + 0x11,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x1c, 78.2755 + 0x94,0x18,0x93,0x14,0xd2,0x08,0x11,0x04,0x00,0x00,0x15,0x00,0x51,0x04,0x15,0x00, 78.2756 + 0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x00,0x00,0xd3,0x10, 78.2757 + 0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x92,0x0c, 78.2758 + 0x51,0x04,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0a,0x00,0x0a,0x00,0xe4,0xf2,0x02,0xe3, 78.2759 + 0x65,0x01,0xd2,0x98,0xd1,0x48,0xd0,0x36,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10, 78.2760 + 0x52,0x04,0x08,0x00,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x09,0x08,0x00,0x08,0x00, 78.2761 + 0x08,0x00,0xd4,0x0c,0x53,0x04,0x08,0x00,0x12,0x04,0x08,0x00,0x00,0x00,0x53,0x04, 78.2762 + 0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04, 78.2763 + 0x09,0x00,0x54,0x04,0x09,0x00,0x13,0x04,0x09,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06, 78.2764 + 0x0a,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x1c,0xd3,0x10,0x52,0x04,0x0a,0x00,0x91,0x08, 78.2765 + 0x10,0x04,0x0a,0x09,0x12,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00, 78.2766 + 0x0a,0x00,0x53,0x04,0x0a,0x00,0x92,0x08,0x11,0x04,0x0a,0x00,0x00,0x00,0x00,0x00, 78.2767 + 0x54,0x04,0x0b,0xe6,0xd3,0x0c,0x92,0x08,0x11,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00, 78.2768 + 0x52,0x04,0x0b,0x00,0x11,0x04,0x11,0x00,0x14,0x00,0xd1,0x60,0xd0,0x22,0xcf,0x86, 78.2769 + 0x55,0x04,0x0a,0x00,0x94,0x18,0x53,0x04,0x0a,0x00,0xd2,0x0c,0x51,0x04,0x0a,0x00, 78.2770 + 0x10,0x04,0x0a,0x00,0x0a,0xdc,0x11,0x04,0x0a,0xdc,0x0a,0x00,0x0a,0x00,0xcf,0x86, 78.2771 + 0xd5,0x24,0x54,0x04,0x0a,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0a,0x00,0x10,0x04, 78.2772 + 0x0a,0x00,0x0a,0x09,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04, 78.2773 + 0x00,0x00,0x0a,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00, 78.2774 + 0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,0x86,0x55,0x04, 78.2775 + 0x0b,0x00,0x54,0x04,0x0b,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04, 78.2776 + 0x0b,0x00,0x0b,0x07,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x34,0xd4,0x20,0xd3,0x10, 78.2777 + 0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x09,0x0b,0x00,0x0b,0x00,0x0b,0x00,0x52,0x04, 78.2778 + 0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x53,0x04,0x0b,0x00, 78.2779 + 0xd2,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x0b,0x00,0x54,0x04, 78.2780 + 0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04, 78.2781 + 0x10,0x00,0x00,0x00,0xd2,0xd0,0xd1,0x50,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0a,0x00, 78.2782 + 0x54,0x04,0x0a,0x00,0x93,0x10,0x52,0x04,0x0a,0x00,0x51,0x04,0x0a,0x00,0x10,0x04, 78.2783 + 0x0a,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x20,0xd4,0x10,0x53,0x04,0x0a,0x00, 78.2784 + 0x52,0x04,0x0a,0x00,0x11,0x04,0x0a,0x00,0x00,0x00,0x53,0x04,0x0a,0x00,0x92,0x08, 78.2785 + 0x11,0x04,0x0a,0x00,0x00,0x00,0x0a,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00, 78.2786 + 0x12,0x04,0x0b,0x00,0x10,0x00,0xd0,0x3a,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04, 78.2787 + 0x0b,0x00,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0xe6, 78.2788 + 0xd1,0x08,0x10,0x04,0x0b,0xdc,0x0b,0x00,0x10,0x04,0x0b,0x00,0x0b,0xe6,0xd2,0x0c, 78.2789 + 0x91,0x08,0x10,0x04,0x0b,0xe6,0x0b,0x00,0x0b,0x00,0x11,0x04,0x0b,0x00,0x0b,0xe6, 78.2790 + 0xcf,0x86,0xd5,0x2c,0xd4,0x18,0x93,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00, 78.2791 + 0x0b,0xe6,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x00,0x00, 78.2792 + 0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00,0x54,0x04, 78.2793 + 0x0d,0x00,0x93,0x10,0x52,0x04,0x0d,0x00,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x09, 78.2794 + 0x00,0x00,0x00,0x00,0xd1,0x8c,0xd0,0x72,0xcf,0x86,0xd5,0x4c,0xd4,0x30,0xd3,0x18, 78.2795 + 0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00, 78.2796 + 0x10,0x04,0x0c,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00, 78.2797 + 0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x93,0x18,0xd2,0x0c, 78.2798 + 0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04, 78.2799 + 0x0c,0x00,0x00,0x00,0x00,0x00,0x94,0x20,0xd3,0x10,0x52,0x04,0x0c,0x00,0x51,0x04, 78.2800 + 0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00, 78.2801 + 0x10,0x04,0x0c,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0x94,0x10, 78.2802 + 0x93,0x0c,0x52,0x04,0x11,0x00,0x11,0x04,0x10,0x00,0x15,0x00,0x00,0x00,0x11,0x00, 78.2803 + 0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x55,0x04,0x0b,0x00,0xd4,0x14,0x53,0x04, 78.2804 + 0x0b,0x00,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x0b,0x09,0x00,0x00, 78.2805 + 0x53,0x04,0x0b,0x00,0x92,0x08,0x11,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0xcf,0x06, 78.2806 + 0x02,0xff,0xff,0xcf,0x86,0xcf,0x06,0x02,0xff,0xff,0xd1,0x76,0xd0,0x09,0xcf,0x86, 78.2807 + 0xcf,0x06,0x02,0xff,0xff,0xcf,0x86,0x85,0xd4,0x07,0xcf,0x06,0x02,0xff,0xff,0xd3, 78.2808 + 0x07,0xcf,0x06,0x02,0xff,0xff,0xd2,0x07,0xcf,0x06,0x02,0xff,0xff,0xd1,0x07,0xcf, 78.2809 + 0x06,0x02,0xff,0xff,0xd0,0x18,0xcf,0x86,0x55,0x05,0x02,0xff,0xff,0x94,0x0d,0x93, 78.2810 + 0x09,0x12,0x05,0x02,0xff,0xff,0x00,0x00,0x00,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x24, 78.2811 + 0x94,0x20,0xd3,0x10,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00, 78.2812 + 0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00, 78.2813 + 0x0b,0x00,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0x12,0x04,0x0b,0x00,0x00,0x00, 78.2814 + 0xd0,0x08,0xcf,0x86,0xcf,0x06,0x01,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x01,0x00, 78.2815 + 0xe4,0x9c,0x10,0xe3,0x16,0x08,0xd2,0x06,0xcf,0x06,0x01,0x00,0xe1,0x08,0x04,0xe0, 78.2816 + 0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10, 78.2817 + 0x08,0x01,0xff,0xe8,0xb1,0x88,0x00,0x01,0xff,0xe6,0x9b,0xb4,0x00,0x10,0x08,0x01, 78.2818 + 0xff,0xe8,0xbb,0x8a,0x00,0x01,0xff,0xe8,0xb3,0x88,0x00,0xd1,0x10,0x10,0x08,0x01, 78.2819 + 0xff,0xe6,0xbb,0x91,0x00,0x01,0xff,0xe4,0xb8,0xb2,0x00,0x10,0x08,0x01,0xff,0xe5, 78.2820 + 0x8f,0xa5,0x00,0x01,0xff,0xe9,0xbe,0x9c,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01, 78.2821 + 0xff,0xe9,0xbe,0x9c,0x00,0x01,0xff,0xe5,0xa5,0x91,0x00,0x10,0x08,0x01,0xff,0xe9, 78.2822 + 0x87,0x91,0x00,0x01,0xff,0xe5,0x96,0x87,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5, 78.2823 + 0xa5,0x88,0x00,0x01,0xff,0xe6,0x87,0xb6,0x00,0x10,0x08,0x01,0xff,0xe7,0x99,0xa9, 78.2824 + 0x00,0x01,0xff,0xe7,0xbe,0x85,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01, 78.2825 + 0xff,0xe8,0x98,0xbf,0x00,0x01,0xff,0xe8,0x9e,0xba,0x00,0x10,0x08,0x01,0xff,0xe8, 78.2826 + 0xa3,0xb8,0x00,0x01,0xff,0xe9,0x82,0x8f,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6, 78.2827 + 0xa8,0x82,0x00,0x01,0xff,0xe6,0xb4,0x9b,0x00,0x10,0x08,0x01,0xff,0xe7,0x83,0x99, 78.2828 + 0x00,0x01,0xff,0xe7,0x8f,0x9e,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8, 78.2829 + 0x90,0xbd,0x00,0x01,0xff,0xe9,0x85,0xaa,0x00,0x10,0x08,0x01,0xff,0xe9,0xa7,0xb1, 78.2830 + 0x00,0x01,0xff,0xe4,0xba,0x82,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x8d,0xb5, 78.2831 + 0x00,0x01,0xff,0xe6,0xac,0x84,0x00,0x10,0x08,0x01,0xff,0xe7,0x88,0x9b,0x00,0x01, 78.2832 + 0xff,0xe8,0x98,0xad,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01, 78.2833 + 0xff,0xe9,0xb8,0x9e,0x00,0x01,0xff,0xe5,0xb5,0x90,0x00,0x10,0x08,0x01,0xff,0xe6, 78.2834 + 0xbf,0xab,0x00,0x01,0xff,0xe8,0x97,0x8d,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8, 78.2835 + 0xa5,0xa4,0x00,0x01,0xff,0xe6,0x8b,0x89,0x00,0x10,0x08,0x01,0xff,0xe8,0x87,0x98, 78.2836 + 0x00,0x01,0xff,0xe8,0xa0,0x9f,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5, 78.2837 + 0xbb,0x8a,0x00,0x01,0xff,0xe6,0x9c,0x97,0x00,0x10,0x08,0x01,0xff,0xe6,0xb5,0xaa, 78.2838 + 0x00,0x01,0xff,0xe7,0x8b,0xbc,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0x83,0x8e, 78.2839 + 0x00,0x01,0xff,0xe4,0xbe,0x86,0x00,0x10,0x08,0x01,0xff,0xe5,0x86,0xb7,0x00,0x01, 78.2840 + 0xff,0xe5,0x8b,0x9e,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6, 78.2841 + 0x93,0x84,0x00,0x01,0xff,0xe6,0xab,0x93,0x00,0x10,0x08,0x01,0xff,0xe7,0x88,0x90, 78.2842 + 0x00,0x01,0xff,0xe7,0x9b,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x80,0x81, 78.2843 + 0x00,0x01,0xff,0xe8,0x98,0x86,0x00,0x10,0x08,0x01,0xff,0xe8,0x99,0x9c,0x00,0x01, 78.2844 + 0xff,0xe8,0xb7,0xaf,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0x9c,0xb2, 78.2845 + 0x00,0x01,0xff,0xe9,0xad,0xaf,0x00,0x10,0x08,0x01,0xff,0xe9,0xb7,0xba,0x00,0x01, 78.2846 + 0xff,0xe7,0xa2,0x8c,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0xa5,0xbf,0x00,0x01, 78.2847 + 0xff,0xe7,0xb6,0xa0,0x00,0x10,0x08,0x01,0xff,0xe8,0x8f,0x89,0x00,0x01,0xff,0xe9, 78.2848 + 0x8c,0x84,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.2849 + 0x10,0x08,0x01,0xff,0xe9,0xb9,0xbf,0x00,0x01,0xff,0xe8,0xab,0x96,0x00,0x10,0x08, 78.2850 + 0x01,0xff,0xe5,0xa3,0x9f,0x00,0x01,0xff,0xe5,0xbc,0x84,0x00,0xd1,0x10,0x10,0x08, 78.2851 + 0x01,0xff,0xe7,0xb1,0xa0,0x00,0x01,0xff,0xe8,0x81,0xbe,0x00,0x10,0x08,0x01,0xff, 78.2852 + 0xe7,0x89,0xa2,0x00,0x01,0xff,0xe7,0xa3,0x8a,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.2853 + 0x01,0xff,0xe8,0xb3,0x82,0x00,0x01,0xff,0xe9,0x9b,0xb7,0x00,0x10,0x08,0x01,0xff, 78.2854 + 0xe5,0xa3,0x98,0x00,0x01,0xff,0xe5,0xb1,0xa2,0x00,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2855 + 0xe6,0xa8,0x93,0x00,0x01,0xff,0xe6,0xb7,0x9a,0x00,0x10,0x08,0x01,0xff,0xe6,0xbc, 78.2856 + 0x8f,0x00,0x01,0xff,0xe7,0xb4,0xaf,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.2857 + 0x01,0xff,0xe7,0xb8,0xb7,0x00,0x01,0xff,0xe9,0x99,0x8b,0x00,0x10,0x08,0x01,0xff, 78.2858 + 0xe5,0x8b,0x92,0x00,0x01,0xff,0xe8,0x82,0x8b,0x00,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2859 + 0xe5,0x87,0x9c,0x00,0x01,0xff,0xe5,0x87,0x8c,0x00,0x10,0x08,0x01,0xff,0xe7,0xa8, 78.2860 + 0x9c,0x00,0x01,0xff,0xe7,0xb6,0xbe,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2861 + 0xe8,0x8f,0xb1,0x00,0x01,0xff,0xe9,0x99,0xb5,0x00,0x10,0x08,0x01,0xff,0xe8,0xae, 78.2862 + 0x80,0x00,0x01,0xff,0xe6,0x8b,0x8f,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0xa8, 78.2863 + 0x82,0x00,0x01,0xff,0xe8,0xab,0xbe,0x00,0x10,0x08,0x01,0xff,0xe4,0xb8,0xb9,0x00, 78.2864 + 0x01,0xff,0xe5,0xaf,0xa7,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.2865 + 0x01,0xff,0xe6,0x80,0x92,0x00,0x01,0xff,0xe7,0x8e,0x87,0x00,0x10,0x08,0x01,0xff, 78.2866 + 0xe7,0x95,0xb0,0x00,0x01,0xff,0xe5,0x8c,0x97,0x00,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2867 + 0xe7,0xa3,0xbb,0x00,0x01,0xff,0xe4,0xbe,0xbf,0x00,0x10,0x08,0x01,0xff,0xe5,0xbe, 78.2868 + 0xa9,0x00,0x01,0xff,0xe4,0xb8,0x8d,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2869 + 0xe6,0xb3,0x8c,0x00,0x01,0xff,0xe6,0x95,0xb8,0x00,0x10,0x08,0x01,0xff,0xe7,0xb4, 78.2870 + 0xa2,0x00,0x01,0xff,0xe5,0x8f,0x83,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0xa1, 78.2871 + 0x9e,0x00,0x01,0xff,0xe7,0x9c,0x81,0x00,0x10,0x08,0x01,0xff,0xe8,0x91,0x89,0x00, 78.2872 + 0x01,0xff,0xe8,0xaa,0xaa,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2873 + 0xe6,0xae,0xba,0x00,0x01,0xff,0xe8,0xbe,0xb0,0x00,0x10,0x08,0x01,0xff,0xe6,0xb2, 78.2874 + 0x88,0x00,0x01,0xff,0xe6,0x8b,0xbe,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x8b, 78.2875 + 0xa5,0x00,0x01,0xff,0xe6,0x8e,0xa0,0x00,0x10,0x08,0x01,0xff,0xe7,0x95,0xa5,0x00, 78.2876 + 0x01,0xff,0xe4,0xba,0xae,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x85, 78.2877 + 0xa9,0x00,0x01,0xff,0xe5,0x87,0x89,0x00,0x10,0x08,0x01,0xff,0xe6,0xa2,0x81,0x00, 78.2878 + 0x01,0xff,0xe7,0xb3,0xa7,0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0x89,0xaf,0x00, 78.2879 + 0x01,0xff,0xe8,0xab,0x92,0x00,0x10,0x08,0x01,0xff,0xe9,0x87,0x8f,0x00,0x01,0xff, 78.2880 + 0xe5,0x8b,0xb5,0x00,0xe0,0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40, 78.2881 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe5,0x91,0x82,0x00,0x01,0xff,0xe5,0xa5, 78.2882 + 0xb3,0x00,0x10,0x08,0x01,0xff,0xe5,0xbb,0xac,0x00,0x01,0xff,0xe6,0x97,0x85,0x00, 78.2883 + 0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0xbf,0xbe,0x00,0x01,0xff,0xe7,0xa4,0xaa,0x00, 78.2884 + 0x10,0x08,0x01,0xff,0xe9,0x96,0xad,0x00,0x01,0xff,0xe9,0xa9,0xaa,0x00,0xd2,0x20, 78.2885 + 0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xba,0x97,0x00,0x01,0xff,0xe9,0xbb,0x8e,0x00, 78.2886 + 0x10,0x08,0x01,0xff,0xe5,0x8a,0x9b,0x00,0x01,0xff,0xe6,0x9b,0x86,0x00,0xd1,0x10, 78.2887 + 0x10,0x08,0x01,0xff,0xe6,0xad,0xb7,0x00,0x01,0xff,0xe8,0xbd,0xa2,0x00,0x10,0x08, 78.2888 + 0x01,0xff,0xe5,0xb9,0xb4,0x00,0x01,0xff,0xe6,0x86,0x90,0x00,0xd3,0x40,0xd2,0x20, 78.2889 + 0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x88,0x80,0x00,0x01,0xff,0xe6,0x92,0x9a,0x00, 78.2890 + 0x10,0x08,0x01,0xff,0xe6,0xbc,0xa3,0x00,0x01,0xff,0xe7,0x85,0x89,0x00,0xd1,0x10, 78.2891 + 0x10,0x08,0x01,0xff,0xe7,0x92,0x89,0x00,0x01,0xff,0xe7,0xa7,0x8a,0x00,0x10,0x08, 78.2892 + 0x01,0xff,0xe7,0xb7,0xb4,0x00,0x01,0xff,0xe8,0x81,0xaf,0x00,0xd2,0x20,0xd1,0x10, 78.2893 + 0x10,0x08,0x01,0xff,0xe8,0xbc,0xa6,0x00,0x01,0xff,0xe8,0x93,0xae,0x00,0x10,0x08, 78.2894 + 0x01,0xff,0xe9,0x80,0xa3,0x00,0x01,0xff,0xe9,0x8d,0x8a,0x00,0xd1,0x10,0x10,0x08, 78.2895 + 0x01,0xff,0xe5,0x88,0x97,0x00,0x01,0xff,0xe5,0x8a,0xa3,0x00,0x10,0x08,0x01,0xff, 78.2896 + 0xe5,0x92,0xbd,0x00,0x01,0xff,0xe7,0x83,0x88,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20, 78.2897 + 0xd1,0x10,0x10,0x08,0x01,0xff,0xe8,0xa3,0x82,0x00,0x01,0xff,0xe8,0xaa,0xaa,0x00, 78.2898 + 0x10,0x08,0x01,0xff,0xe5,0xbb,0x89,0x00,0x01,0xff,0xe5,0xbf,0xb5,0x00,0xd1,0x10, 78.2899 + 0x10,0x08,0x01,0xff,0xe6,0x8d,0xbb,0x00,0x01,0xff,0xe6,0xae,0xae,0x00,0x10,0x08, 78.2900 + 0x01,0xff,0xe7,0xb0,0xbe,0x00,0x01,0xff,0xe7,0x8d,0xb5,0x00,0xd2,0x20,0xd1,0x10, 78.2901 + 0x10,0x08,0x01,0xff,0xe4,0xbb,0xa4,0x00,0x01,0xff,0xe5,0x9b,0xb9,0x00,0x10,0x08, 78.2902 + 0x01,0xff,0xe5,0xaf,0xa7,0x00,0x01,0xff,0xe5,0xb6,0xba,0x00,0xd1,0x10,0x10,0x08, 78.2903 + 0x01,0xff,0xe6,0x80,0x9c,0x00,0x01,0xff,0xe7,0x8e,0xb2,0x00,0x10,0x08,0x01,0xff, 78.2904 + 0xe7,0x91,0xa9,0x00,0x01,0xff,0xe7,0xbe,0x9a,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.2905 + 0x10,0x08,0x01,0xff,0xe8,0x81,0x86,0x00,0x01,0xff,0xe9,0x88,0xb4,0x00,0x10,0x08, 78.2906 + 0x01,0xff,0xe9,0x9b,0xb6,0x00,0x01,0xff,0xe9,0x9d,0x88,0x00,0xd1,0x10,0x10,0x08, 78.2907 + 0x01,0xff,0xe9,0xa0,0x98,0x00,0x01,0xff,0xe4,0xbe,0x8b,0x00,0x10,0x08,0x01,0xff, 78.2908 + 0xe7,0xa6,0xae,0x00,0x01,0xff,0xe9,0x86,0xb4,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.2909 + 0x01,0xff,0xe9,0x9a,0xb8,0x00,0x01,0xff,0xe6,0x83,0xa1,0x00,0x10,0x08,0x01,0xff, 78.2910 + 0xe4,0xba,0x86,0x00,0x01,0xff,0xe5,0x83,0x9a,0x00,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2911 + 0xe5,0xaf,0xae,0x00,0x01,0xff,0xe5,0xb0,0xbf,0x00,0x10,0x08,0x01,0xff,0xe6,0x96, 78.2912 + 0x99,0x00,0x01,0xff,0xe6,0xa8,0x82,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3, 78.2913 + 0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0x87,0x8e,0x00,0x01,0xff,0xe7, 78.2914 + 0x99,0x82,0x00,0x10,0x08,0x01,0xff,0xe8,0x93,0xbc,0x00,0x01,0xff,0xe9,0x81,0xbc, 78.2915 + 0x00,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xbe,0x8d,0x00,0x01,0xff,0xe6,0x9a,0x88, 78.2916 + 0x00,0x10,0x08,0x01,0xff,0xe9,0x98,0xae,0x00,0x01,0xff,0xe5,0x8a,0x89,0x00,0xd2, 78.2917 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x9d,0xbb,0x00,0x01,0xff,0xe6,0x9f,0xb3, 78.2918 + 0x00,0x10,0x08,0x01,0xff,0xe6,0xb5,0x81,0x00,0x01,0xff,0xe6,0xba,0x9c,0x00,0xd1, 78.2919 + 0x10,0x10,0x08,0x01,0xff,0xe7,0x90,0x89,0x00,0x01,0xff,0xe7,0x95,0x99,0x00,0x10, 78.2920 + 0x08,0x01,0xff,0xe7,0xa1,0xab,0x00,0x01,0xff,0xe7,0xb4,0x90,0x00,0xd3,0x40,0xd2, 78.2921 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe9,0xa1,0x9e,0x00,0x01,0xff,0xe5,0x85,0xad, 78.2922 + 0x00,0x10,0x08,0x01,0xff,0xe6,0x88,0xae,0x00,0x01,0xff,0xe9,0x99,0xb8,0x00,0xd1, 78.2923 + 0x10,0x10,0x08,0x01,0xff,0xe5,0x80,0xab,0x00,0x01,0xff,0xe5,0xb4,0x99,0x00,0x10, 78.2924 + 0x08,0x01,0xff,0xe6,0xb7,0xaa,0x00,0x01,0xff,0xe8,0xbc,0xaa,0x00,0xd2,0x20,0xd1, 78.2925 + 0x10,0x10,0x08,0x01,0xff,0xe5,0xbe,0x8b,0x00,0x01,0xff,0xe6,0x85,0x84,0x00,0x10, 78.2926 + 0x08,0x01,0xff,0xe6,0xa0,0x97,0x00,0x01,0xff,0xe7,0x8e,0x87,0x00,0xd1,0x10,0x10, 78.2927 + 0x08,0x01,0xff,0xe9,0x9a,0x86,0x00,0x01,0xff,0xe5,0x88,0xa9,0x00,0x10,0x08,0x01, 78.2928 + 0xff,0xe5,0x90,0x8f,0x00,0x01,0xff,0xe5,0xb1,0xa5,0x00,0xd4,0x80,0xd3,0x40,0xd2, 78.2929 + 0x20,0xd1,0x10,0x10,0x08,0x01,0xff,0xe6,0x98,0x93,0x00,0x01,0xff,0xe6,0x9d,0x8e, 78.2930 + 0x00,0x10,0x08,0x01,0xff,0xe6,0xa2,0xa8,0x00,0x01,0xff,0xe6,0xb3,0xa5,0x00,0xd1, 78.2931 + 0x10,0x10,0x08,0x01,0xff,0xe7,0x90,0x86,0x00,0x01,0xff,0xe7,0x97,0xa2,0x00,0x10, 78.2932 + 0x08,0x01,0xff,0xe7,0xbd,0xb9,0x00,0x01,0xff,0xe8,0xa3,0x8f,0x00,0xd2,0x20,0xd1, 78.2933 + 0x10,0x10,0x08,0x01,0xff,0xe8,0xa3,0xa1,0x00,0x01,0xff,0xe9,0x87,0x8c,0x00,0x10, 78.2934 + 0x08,0x01,0xff,0xe9,0x9b,0xa2,0x00,0x01,0xff,0xe5,0x8c,0xbf,0x00,0xd1,0x10,0x10, 78.2935 + 0x08,0x01,0xff,0xe6,0xba,0xba,0x00,0x01,0xff,0xe5,0x90,0x9d,0x00,0x10,0x08,0x01, 78.2936 + 0xff,0xe7,0x87,0x90,0x00,0x01,0xff,0xe7,0x92,0x98,0x00,0xd3,0x40,0xd2,0x20,0xd1, 78.2937 + 0x10,0x10,0x08,0x01,0xff,0xe8,0x97,0xba,0x00,0x01,0xff,0xe9,0x9a,0xa3,0x00,0x10, 78.2938 + 0x08,0x01,0xff,0xe9,0xb1,0x97,0x00,0x01,0xff,0xe9,0xba,0x9f,0x00,0xd1,0x10,0x10, 78.2939 + 0x08,0x01,0xff,0xe6,0x9e,0x97,0x00,0x01,0xff,0xe6,0xb7,0x8b,0x00,0x10,0x08,0x01, 78.2940 + 0xff,0xe8,0x87,0xa8,0x00,0x01,0xff,0xe7,0xab,0x8b,0x00,0xd2,0x20,0xd1,0x10,0x10, 78.2941 + 0x08,0x01,0xff,0xe7,0xac,0xa0,0x00,0x01,0xff,0xe7,0xb2,0x92,0x00,0x10,0x08,0x01, 78.2942 + 0xff,0xe7,0x8b,0x80,0x00,0x01,0xff,0xe7,0x82,0x99,0x00,0xd1,0x10,0x10,0x08,0x01, 78.2943 + 0xff,0xe8,0xad,0x98,0x00,0x01,0xff,0xe4,0xbb,0x80,0x00,0x10,0x08,0x01,0xff,0xe8, 78.2944 + 0x8c,0xb6,0x00,0x01,0xff,0xe5,0x88,0xba,0x00,0xe2,0xad,0x06,0xe1,0xc4,0x03,0xe0, 78.2945 + 0xcb,0x01,0xcf,0x86,0xd5,0xe4,0xd4,0x74,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.2946 + 0x01,0xff,0xe5,0x88,0x87,0x00,0x01,0xff,0xe5,0xba,0xa6,0x00,0x10,0x08,0x01,0xff, 78.2947 + 0xe6,0x8b,0x93,0x00,0x01,0xff,0xe7,0xb3,0x96,0x00,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2948 + 0xe5,0xae,0x85,0x00,0x01,0xff,0xe6,0xb4,0x9e,0x00,0x10,0x08,0x01,0xff,0xe6,0x9a, 78.2949 + 0xb4,0x00,0x01,0xff,0xe8,0xbc,0xbb,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x01,0xff, 78.2950 + 0xe8,0xa1,0x8c,0x00,0x01,0xff,0xe9,0x99,0x8d,0x00,0x10,0x08,0x01,0xff,0xe8,0xa6, 78.2951 + 0x8b,0x00,0x01,0xff,0xe5,0xbb,0x93,0x00,0x91,0x10,0x10,0x08,0x01,0xff,0xe5,0x85, 78.2952 + 0x80,0x00,0x01,0xff,0xe5,0x97,0x80,0x00,0x01,0x00,0xd3,0x34,0xd2,0x18,0xd1,0x0c, 78.2953 + 0x10,0x08,0x01,0xff,0xe5,0xa1,0x9a,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0xe6,0x99, 78.2954 + 0xb4,0x00,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe5,0x87,0x9e,0x00, 78.2955 + 0x10,0x08,0x01,0xff,0xe7,0x8c,0xaa,0x00,0x01,0xff,0xe7,0x9b,0x8a,0x00,0xd2,0x20, 78.2956 + 0xd1,0x10,0x10,0x08,0x01,0xff,0xe7,0xa4,0xbc,0x00,0x01,0xff,0xe7,0xa5,0x9e,0x00, 78.2957 + 0x10,0x08,0x01,0xff,0xe7,0xa5,0xa5,0x00,0x01,0xff,0xe7,0xa6,0x8f,0x00,0xd1,0x10, 78.2958 + 0x10,0x08,0x01,0xff,0xe9,0x9d,0x96,0x00,0x01,0xff,0xe7,0xb2,0xbe,0x00,0x10,0x08, 78.2959 + 0x01,0xff,0xe7,0xbe,0xbd,0x00,0x01,0x00,0xd4,0x64,0xd3,0x30,0xd2,0x18,0xd1,0x0c, 78.2960 + 0x10,0x08,0x01,0xff,0xe8,0x98,0x92,0x00,0x01,0x00,0x10,0x08,0x01,0xff,0xe8,0xab, 78.2961 + 0xb8,0x00,0x01,0x00,0xd1,0x0c,0x10,0x04,0x01,0x00,0x01,0xff,0xe9,0x80,0xb8,0x00, 78.2962 + 0x10,0x08,0x01,0xff,0xe9,0x83,0xbd,0x00,0x01,0x00,0xd2,0x14,0x51,0x04,0x01,0x00, 78.2963 + 0x10,0x08,0x01,0xff,0xe9,0xa3,0xaf,0x00,0x01,0xff,0xe9,0xa3,0xbc,0x00,0xd1,0x10, 78.2964 + 0x10,0x08,0x01,0xff,0xe9,0xa4,0xa8,0x00,0x01,0xff,0xe9,0xb6,0xb4,0x00,0x10,0x08, 78.2965 + 0x0d,0xff,0xe9,0x83,0x9e,0x00,0x0d,0xff,0xe9,0x9a,0xb7,0x00,0xd3,0x40,0xd2,0x20, 78.2966 + 0xd1,0x10,0x10,0x08,0x06,0xff,0xe4,0xbe,0xae,0x00,0x06,0xff,0xe5,0x83,0xa7,0x00, 78.2967 + 0x10,0x08,0x06,0xff,0xe5,0x85,0x8d,0x00,0x06,0xff,0xe5,0x8b,0x89,0x00,0xd1,0x10, 78.2968 + 0x10,0x08,0x06,0xff,0xe5,0x8b,0xa4,0x00,0x06,0xff,0xe5,0x8d,0x91,0x00,0x10,0x08, 78.2969 + 0x06,0xff,0xe5,0x96,0x9d,0x00,0x06,0xff,0xe5,0x98,0x86,0x00,0xd2,0x20,0xd1,0x10, 78.2970 + 0x10,0x08,0x06,0xff,0xe5,0x99,0xa8,0x00,0x06,0xff,0xe5,0xa1,0x80,0x00,0x10,0x08, 78.2971 + 0x06,0xff,0xe5,0xa2,0xa8,0x00,0x06,0xff,0xe5,0xb1,0xa4,0x00,0xd1,0x10,0x10,0x08, 78.2972 + 0x06,0xff,0xe5,0xb1,0xae,0x00,0x06,0xff,0xe6,0x82,0x94,0x00,0x10,0x08,0x06,0xff, 78.2973 + 0xe6,0x85,0xa8,0x00,0x06,0xff,0xe6,0x86,0x8e,0x00,0xcf,0x86,0xe5,0x01,0x01,0xd4, 78.2974 + 0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe6,0x87,0xb2,0x00,0x06, 78.2975 + 0xff,0xe6,0x95,0x8f,0x00,0x10,0x08,0x06,0xff,0xe6,0x97,0xa2,0x00,0x06,0xff,0xe6, 78.2976 + 0x9a,0x91,0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe6,0xa2,0x85,0x00,0x06,0xff,0xe6, 78.2977 + 0xb5,0xb7,0x00,0x10,0x08,0x06,0xff,0xe6,0xb8,0x9a,0x00,0x06,0xff,0xe6,0xbc,0xa2, 78.2978 + 0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0x85,0xae,0x00,0x06,0xff,0xe7, 78.2979 + 0x88,0xab,0x00,0x10,0x08,0x06,0xff,0xe7,0x90,0xa2,0x00,0x06,0xff,0xe7,0xa2,0x91, 78.2980 + 0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa4,0xbe,0x00,0x06,0xff,0xe7,0xa5,0x89, 78.2981 + 0x00,0x10,0x08,0x06,0xff,0xe7,0xa5,0x88,0x00,0x06,0xff,0xe7,0xa5,0x90,0x00,0xd3, 78.2982 + 0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa5,0x96,0x00,0x06,0xff,0xe7, 78.2983 + 0xa5,0x9d,0x00,0x10,0x08,0x06,0xff,0xe7,0xa6,0x8d,0x00,0x06,0xff,0xe7,0xa6,0x8e, 78.2984 + 0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xa9,0x80,0x00,0x06,0xff,0xe7,0xaa,0x81, 78.2985 + 0x00,0x10,0x08,0x06,0xff,0xe7,0xaf,0x80,0x00,0x06,0xff,0xe7,0xb7,0xb4,0x00,0xd2, 78.2986 + 0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe7,0xb8,0x89,0x00,0x06,0xff,0xe7,0xb9,0x81, 78.2987 + 0x00,0x10,0x08,0x06,0xff,0xe7,0xbd,0xb2,0x00,0x06,0xff,0xe8,0x80,0x85,0x00,0xd1, 78.2988 + 0x10,0x10,0x08,0x06,0xff,0xe8,0x87,0xad,0x00,0x06,0xff,0xe8,0x89,0xb9,0x00,0x10, 78.2989 + 0x08,0x06,0xff,0xe8,0x89,0xb9,0x00,0x06,0xff,0xe8,0x91,0x97,0x00,0xd4,0x75,0xd3, 78.2990 + 0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe8,0xa4,0x90,0x00,0x06,0xff,0xe8, 78.2991 + 0xa6,0x96,0x00,0x10,0x08,0x06,0xff,0xe8,0xac,0x81,0x00,0x06,0xff,0xe8,0xac,0xb9, 78.2992 + 0x00,0xd1,0x10,0x10,0x08,0x06,0xff,0xe8,0xb3,0x93,0x00,0x06,0xff,0xe8,0xb4,0x88, 78.2993 + 0x00,0x10,0x08,0x06,0xff,0xe8,0xbe,0xb6,0x00,0x06,0xff,0xe9,0x80,0xb8,0x00,0xd2, 78.2994 + 0x20,0xd1,0x10,0x10,0x08,0x06,0xff,0xe9,0x9b,0xa3,0x00,0x06,0xff,0xe9,0x9f,0xbf, 78.2995 + 0x00,0x10,0x08,0x06,0xff,0xe9,0xa0,0xbb,0x00,0x0b,0xff,0xe6,0x81,0xb5,0x00,0x91, 78.2996 + 0x11,0x10,0x09,0x0b,0xff,0xf0,0xa4,0x8b,0xae,0x00,0x0b,0xff,0xe8,0x88,0x98,0x00, 78.2997 + 0x00,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe4,0xb8,0xa6,0x00, 78.2998 + 0x08,0xff,0xe5,0x86,0xb5,0x00,0x10,0x08,0x08,0xff,0xe5,0x85,0xa8,0x00,0x08,0xff, 78.2999 + 0xe4,0xbe,0x80,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0x85,0x85,0x00,0x08,0xff, 78.3000 + 0xe5,0x86,0x80,0x00,0x10,0x08,0x08,0xff,0xe5,0x8b,0x87,0x00,0x08,0xff,0xe5,0x8b, 78.3001 + 0xba,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0x96,0x9d,0x00,0x08,0xff, 78.3002 + 0xe5,0x95,0x95,0x00,0x10,0x08,0x08,0xff,0xe5,0x96,0x99,0x00,0x08,0xff,0xe5,0x97, 78.3003 + 0xa2,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe5,0xa1,0x9a,0x00,0x08,0xff,0xe5,0xa2, 78.3004 + 0xb3,0x00,0x10,0x08,0x08,0xff,0xe5,0xa5,0x84,0x00,0x08,0xff,0xe5,0xa5,0x94,0x00, 78.3005 + 0xe0,0x04,0x02,0xcf,0x86,0xe5,0x01,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.3006 + 0x10,0x08,0x08,0xff,0xe5,0xa9,0xa2,0x00,0x08,0xff,0xe5,0xac,0xa8,0x00,0x10,0x08, 78.3007 + 0x08,0xff,0xe5,0xbb,0x92,0x00,0x08,0xff,0xe5,0xbb,0x99,0x00,0xd1,0x10,0x10,0x08, 78.3008 + 0x08,0xff,0xe5,0xbd,0xa9,0x00,0x08,0xff,0xe5,0xbe,0xad,0x00,0x10,0x08,0x08,0xff, 78.3009 + 0xe6,0x83,0x98,0x00,0x08,0xff,0xe6,0x85,0x8e,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.3010 + 0x08,0xff,0xe6,0x84,0x88,0x00,0x08,0xff,0xe6,0x86,0x8e,0x00,0x10,0x08,0x08,0xff, 78.3011 + 0xe6,0x85,0xa0,0x00,0x08,0xff,0xe6,0x87,0xb2,0x00,0xd1,0x10,0x10,0x08,0x08,0xff, 78.3012 + 0xe6,0x88,0xb4,0x00,0x08,0xff,0xe6,0x8f,0x84,0x00,0x10,0x08,0x08,0xff,0xe6,0x90, 78.3013 + 0x9c,0x00,0x08,0xff,0xe6,0x91,0x92,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.3014 + 0x08,0xff,0xe6,0x95,0x96,0x00,0x08,0xff,0xe6,0x99,0xb4,0x00,0x10,0x08,0x08,0xff, 78.3015 + 0xe6,0x9c,0x97,0x00,0x08,0xff,0xe6,0x9c,0x9b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff, 78.3016 + 0xe6,0x9d,0x96,0x00,0x08,0xff,0xe6,0xad,0xb9,0x00,0x10,0x08,0x08,0xff,0xe6,0xae, 78.3017 + 0xba,0x00,0x08,0xff,0xe6,0xb5,0x81,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff, 78.3018 + 0xe6,0xbb,0x9b,0x00,0x08,0xff,0xe6,0xbb,0x8b,0x00,0x10,0x08,0x08,0xff,0xe6,0xbc, 78.3019 + 0xa2,0x00,0x08,0xff,0xe7,0x80,0x9e,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe7,0x85, 78.3020 + 0xae,0x00,0x08,0xff,0xe7,0x9e,0xa7,0x00,0x10,0x08,0x08,0xff,0xe7,0x88,0xb5,0x00, 78.3021 + 0x08,0xff,0xe7,0x8a,0xaf,0x00,0xd4,0x80,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.3022 + 0x08,0xff,0xe7,0x8c,0xaa,0x00,0x08,0xff,0xe7,0x91,0xb1,0x00,0x10,0x08,0x08,0xff, 78.3023 + 0xe7,0x94,0x86,0x00,0x08,0xff,0xe7,0x94,0xbb,0x00,0xd1,0x10,0x10,0x08,0x08,0xff, 78.3024 + 0xe7,0x98,0x9d,0x00,0x08,0xff,0xe7,0x98,0x9f,0x00,0x10,0x08,0x08,0xff,0xe7,0x9b, 78.3025 + 0x8a,0x00,0x08,0xff,0xe7,0x9b,0x9b,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff, 78.3026 + 0xe7,0x9b,0xb4,0x00,0x08,0xff,0xe7,0x9d,0x8a,0x00,0x10,0x08,0x08,0xff,0xe7,0x9d, 78.3027 + 0x80,0x00,0x08,0xff,0xe7,0xa3,0x8c,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe7,0xaa, 78.3028 + 0xb1,0x00,0x08,0xff,0xe7,0xaf,0x80,0x00,0x10,0x08,0x08,0xff,0xe7,0xb1,0xbb,0x00, 78.3029 + 0x08,0xff,0xe7,0xb5,0x9b,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff, 78.3030 + 0xe7,0xb7,0xb4,0x00,0x08,0xff,0xe7,0xbc,0xbe,0x00,0x10,0x08,0x08,0xff,0xe8,0x80, 78.3031 + 0x85,0x00,0x08,0xff,0xe8,0x8d,0x92,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0x8f, 78.3032 + 0xaf,0x00,0x08,0xff,0xe8,0x9d,0xb9,0x00,0x10,0x08,0x08,0xff,0xe8,0xa5,0x81,0x00, 78.3033 + 0x08,0xff,0xe8,0xa6,0x86,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0xa6, 78.3034 + 0x96,0x00,0x08,0xff,0xe8,0xaa,0xbf,0x00,0x10,0x08,0x08,0xff,0xe8,0xab,0xb8,0x00, 78.3035 + 0x08,0xff,0xe8,0xab,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff,0xe8,0xac,0x81,0x00, 78.3036 + 0x08,0xff,0xe8,0xab,0xbe,0x00,0x10,0x08,0x08,0xff,0xe8,0xab,0xad,0x00,0x08,0xff, 78.3037 + 0xe8,0xac,0xb9,0x00,0xcf,0x86,0x95,0xde,0xd4,0x81,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.3038 + 0x10,0x08,0x08,0xff,0xe8,0xae,0x8a,0x00,0x08,0xff,0xe8,0xb4,0x88,0x00,0x10,0x08, 78.3039 + 0x08,0xff,0xe8,0xbc,0xb8,0x00,0x08,0xff,0xe9,0x81,0xb2,0x00,0xd1,0x10,0x10,0x08, 78.3040 + 0x08,0xff,0xe9,0x86,0x99,0x00,0x08,0xff,0xe9,0x89,0xb6,0x00,0x10,0x08,0x08,0xff, 78.3041 + 0xe9,0x99,0xbc,0x00,0x08,0xff,0xe9,0x9b,0xa3,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.3042 + 0x08,0xff,0xe9,0x9d,0x96,0x00,0x08,0xff,0xe9,0x9f,0x9b,0x00,0x10,0x08,0x08,0xff, 78.3043 + 0xe9,0x9f,0xbf,0x00,0x08,0xff,0xe9,0xa0,0x8b,0x00,0xd1,0x10,0x10,0x08,0x08,0xff, 78.3044 + 0xe9,0xa0,0xbb,0x00,0x08,0xff,0xe9,0xac,0x92,0x00,0x10,0x08,0x08,0xff,0xe9,0xbe, 78.3045 + 0x9c,0x00,0x08,0xff,0xf0,0xa2,0xa1,0x8a,0x00,0xd3,0x45,0xd2,0x22,0xd1,0x12,0x10, 78.3046 + 0x09,0x08,0xff,0xf0,0xa2,0xa1,0x84,0x00,0x08,0xff,0xf0,0xa3,0x8f,0x95,0x00,0x10, 78.3047 + 0x08,0x08,0xff,0xe3,0xae,0x9d,0x00,0x08,0xff,0xe4,0x80,0x98,0x00,0xd1,0x11,0x10, 78.3048 + 0x08,0x08,0xff,0xe4,0x80,0xb9,0x00,0x08,0xff,0xf0,0xa5,0x89,0x89,0x00,0x10,0x09, 78.3049 + 0x08,0xff,0xf0,0xa5,0xb3,0x90,0x00,0x08,0xff,0xf0,0xa7,0xbb,0x93,0x00,0x92,0x14, 78.3050 + 0x91,0x10,0x10,0x08,0x08,0xff,0xe9,0xbd,0x83,0x00,0x08,0xff,0xe9,0xbe,0x8e,0x00, 78.3051 + 0x00,0x00,0x00,0x00,0x00,0x00,0xe1,0x94,0x01,0xe0,0x08,0x01,0xcf,0x86,0xd5,0x42, 78.3052 + 0xd4,0x14,0x93,0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00, 78.3053 + 0x00,0x00,0x00,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00, 78.3054 + 0x01,0x00,0x01,0x00,0x52,0x04,0x00,0x00,0xd1,0x0d,0x10,0x04,0x00,0x00,0x04,0xff, 78.3055 + 0xd7,0x99,0xd6,0xb4,0x00,0x10,0x04,0x01,0x1a,0x01,0xff,0xd7,0xb2,0xd6,0xb7,0x00, 78.3056 + 0xd4,0x42,0x53,0x04,0x01,0x00,0xd2,0x16,0x51,0x04,0x01,0x00,0x10,0x09,0x01,0xff, 78.3057 + 0xd7,0xa9,0xd7,0x81,0x00,0x01,0xff,0xd7,0xa9,0xd7,0x82,0x00,0xd1,0x16,0x10,0x0b, 78.3058 + 0x01,0xff,0xd7,0xa9,0xd6,0xbc,0xd7,0x81,0x00,0x01,0xff,0xd7,0xa9,0xd6,0xbc,0xd7, 78.3059 + 0x82,0x00,0x10,0x09,0x01,0xff,0xd7,0x90,0xd6,0xb7,0x00,0x01,0xff,0xd7,0x90,0xd6, 78.3060 + 0xb8,0x00,0xd3,0x43,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x90,0xd6,0xbc, 78.3061 + 0x00,0x01,0xff,0xd7,0x91,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x92,0xd6,0xbc, 78.3062 + 0x00,0x01,0xff,0xd7,0x93,0xd6,0xbc,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x94, 78.3063 + 0xd6,0xbc,0x00,0x01,0xff,0xd7,0x95,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x96, 78.3064 + 0xd6,0xbc,0x00,0x00,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0x98,0xd6, 78.3065 + 0xbc,0x00,0x01,0xff,0xd7,0x99,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0x9a,0xd6, 78.3066 + 0xbc,0x00,0x01,0xff,0xd7,0x9b,0xd6,0xbc,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xd7, 78.3067 + 0x9c,0xd6,0xbc,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xd7,0x9e,0xd6,0xbc,0x00,0x00, 78.3068 + 0x00,0xcf,0x86,0x95,0x85,0x94,0x81,0xd3,0x3e,0xd2,0x1f,0xd1,0x12,0x10,0x09,0x01, 78.3069 + 0xff,0xd7,0xa0,0xd6,0xbc,0x00,0x01,0xff,0xd7,0xa1,0xd6,0xbc,0x00,0x10,0x04,0x00, 78.3070 + 0x00,0x01,0xff,0xd7,0xa3,0xd6,0xbc,0x00,0xd1,0x0d,0x10,0x09,0x01,0xff,0xd7,0xa4, 78.3071 + 0xd6,0xbc,0x00,0x00,0x00,0x10,0x09,0x01,0xff,0xd7,0xa6,0xd6,0xbc,0x00,0x01,0xff, 78.3072 + 0xd7,0xa7,0xd6,0xbc,0x00,0xd2,0x24,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7,0xa8,0xd6, 78.3073 + 0xbc,0x00,0x01,0xff,0xd7,0xa9,0xd6,0xbc,0x00,0x10,0x09,0x01,0xff,0xd7,0xaa,0xd6, 78.3074 + 0xbc,0x00,0x01,0xff,0xd7,0x95,0xd6,0xb9,0x00,0xd1,0x12,0x10,0x09,0x01,0xff,0xd7, 78.3075 + 0x91,0xd6,0xbf,0x00,0x01,0xff,0xd7,0x9b,0xd6,0xbf,0x00,0x10,0x09,0x01,0xff,0xd7, 78.3076 + 0xa4,0xd6,0xbf,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04, 78.3077 + 0x01,0x00,0x54,0x04,0x01,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x01,0x00,0x0c,0x00, 78.3078 + 0x0c,0x00,0x0c,0x00,0xcf,0x86,0x95,0x24,0xd4,0x10,0x93,0x0c,0x92,0x08,0x11,0x04, 78.3079 + 0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x00,0x00, 78.3080 + 0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xd3,0x5a,0xd2,0x06, 78.3081 + 0xcf,0x06,0x01,0x00,0xd1,0x14,0xd0,0x06,0xcf,0x06,0x01,0x00,0xcf,0x86,0x95,0x08, 78.3082 + 0x14,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,0x04, 78.3083 + 0x01,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 78.3084 + 0x01,0x00,0xcf,0x86,0xd5,0x0c,0x94,0x08,0x13,0x04,0x01,0x00,0x00,0x00,0x05,0x00, 78.3085 + 0x54,0x04,0x05,0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x91,0x08,0x10,0x04, 78.3086 + 0x06,0x00,0x07,0x00,0x00,0x00,0xd2,0xce,0xd1,0xa5,0xd0,0x37,0xcf,0x86,0xd5,0x15, 78.3087 + 0x54,0x05,0x06,0xff,0x00,0x53,0x04,0x08,0x00,0x92,0x08,0x11,0x04,0x08,0x00,0x00, 78.3088 + 0x00,0x00,0x00,0x94,0x1c,0xd3,0x10,0x52,0x04,0x01,0xe6,0x51,0x04,0x0a,0xe6,0x10, 78.3089 + 0x04,0x0a,0xe6,0x10,0xdc,0x52,0x04,0x10,0xdc,0x11,0x04,0x10,0xdc,0x11,0xe6,0x01, 78.3090 + 0x00,0xcf,0x86,0xd5,0x38,0xd4,0x24,0xd3,0x14,0x52,0x04,0x01,0x00,0xd1,0x08,0x10, 78.3091 + 0x04,0x01,0x00,0x06,0x00,0x10,0x04,0x06,0x00,0x07,0x00,0x92,0x0c,0x91,0x08,0x10, 78.3092 + 0x04,0x07,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x93,0x10,0x92,0x0c,0x51,0x04,0x01, 78.3093 + 0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd4,0x18,0xd3,0x10,0x52, 78.3094 + 0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x12,0x04,0x01, 78.3095 + 0x00,0x00,0x00,0x93,0x18,0xd2,0x0c,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06, 78.3096 + 0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xd0,0x06,0xcf, 78.3097 + 0x06,0x01,0x00,0xcf,0x86,0x55,0x04,0x01,0x00,0x54,0x04,0x01,0x00,0x53,0x04,0x01, 78.3098 + 0x00,0x52,0x04,0x01,0x00,0xd1,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x10,0x04,0x00, 78.3099 + 0x00,0x01,0xff,0x00,0xd1,0x50,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x93,0x10, 78.3100 + 0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 78.3101 + 0x01,0x00,0x01,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x01,0x00,0x53,0x04,0x01,0x00, 78.3102 + 0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x06,0x00,0x94,0x14, 78.3103 + 0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x06,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 78.3104 + 0x01,0x00,0x01,0x00,0xd0,0x2f,0xcf,0x86,0x55,0x04,0x01,0x00,0xd4,0x15,0x93,0x11, 78.3105 + 0x92,0x0d,0x91,0x09,0x10,0x05,0x01,0xff,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 78.3106 + 0x00,0x53,0x04,0x01,0x00,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01, 78.3107 + 0x00,0x00,0x00,0xcf,0x86,0xd5,0x38,0xd4,0x18,0xd3,0x0c,0x92,0x08,0x11,0x04,0x00, 78.3108 + 0x00,0x01,0x00,0x01,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd3, 78.3109 + 0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x01,0x00,0x01,0x00,0xd2,0x08,0x11,0x04,0x00, 78.3110 + 0x00,0x01,0x00,0x91,0x08,0x10,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0xd4,0x20,0xd3, 78.3111 + 0x10,0x52,0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x52, 78.3112 + 0x04,0x01,0x00,0x51,0x04,0x01,0x00,0x10,0x04,0x01,0x00,0x00,0x00,0x53,0x05,0x00, 78.3113 + 0xff,0x00,0xd2,0x0d,0x91,0x09,0x10,0x05,0x00,0xff,0x00,0x04,0x00,0x04,0x00,0x91, 78.3114 + 0x08,0x10,0x04,0x03,0x00,0x01,0x00,0x01,0x00,0x83,0xe2,0x46,0x3e,0xe1,0x1f,0x3b, 78.3115 + 0xe0,0x9c,0x39,0xcf,0x86,0xe5,0x40,0x26,0xc4,0xe3,0x16,0x14,0xe2,0xef,0x11,0xe1, 78.3116 + 0xd0,0x10,0xe0,0x60,0x07,0xcf,0x86,0xe5,0x53,0x03,0xe4,0x4c,0x02,0xe3,0x3d,0x01, 78.3117 + 0xd2,0x94,0xd1,0x70,0xd0,0x4a,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x07,0x00, 78.3118 + 0x52,0x04,0x07,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00, 78.3119 + 0xd4,0x14,0x93,0x10,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00, 78.3120 + 0x00,0x00,0x07,0x00,0x53,0x04,0x07,0x00,0xd2,0x0c,0x51,0x04,0x07,0x00,0x10,0x04, 78.3121 + 0x07,0x00,0x00,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0xcf,0x86, 78.3122 + 0x95,0x20,0xd4,0x10,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00, 78.3123 + 0x00,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00, 78.3124 + 0x00,0x00,0xd0,0x06,0xcf,0x06,0x07,0x00,0xcf,0x86,0x55,0x04,0x07,0x00,0x54,0x04, 78.3125 + 0x07,0x00,0x53,0x04,0x07,0x00,0x92,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00, 78.3126 + 0x00,0x00,0x00,0x00,0xd1,0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0x94,0x1c,0x93,0x18, 78.3127 + 0xd2,0x0c,0x51,0x04,0x07,0x00,0x10,0x04,0x07,0x00,0x00,0x00,0x51,0x04,0x00,0x00, 78.3128 + 0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x54,0x04,0x07,0x00,0x93,0x10, 78.3129 + 0x52,0x04,0x07,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0x07,0x00, 78.3130 + 0xcf,0x06,0x08,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x2c,0xd4,0x20,0x53,0x04,0x08,0x00, 78.3131 + 0xd2,0x0c,0x51,0x04,0x08,0x00,0x10,0x04,0x08,0x00,0x10,0x00,0xd1,0x08,0x10,0x04, 78.3132 + 0x10,0x00,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x53,0x04,0x0a,0x00,0x12,0x04, 78.3133 + 0x0a,0x00,0x00,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00, 78.3134 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04, 78.3135 + 0x00,0x00,0x0a,0x00,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,0x52,0x04,0x0a,0x00, 78.3136 + 0x91,0x08,0x10,0x04,0x0a,0x00,0x0a,0xdc,0x00,0x00,0xd2,0x5e,0xd1,0x06,0xcf,0x06, 78.3137 + 0x00,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00, 78.3138 + 0x52,0x04,0x0a,0x00,0x91,0x08,0x10,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0x0a,0x00, 78.3139 + 0xcf,0x86,0xd5,0x18,0x54,0x04,0x0a,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04, 78.3140 + 0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c, 78.3141 + 0x91,0x08,0x10,0x04,0x10,0xdc,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x53,0x04, 78.3142 + 0x10,0x00,0x12,0x04,0x10,0x00,0x00,0x00,0xd1,0x70,0xd0,0x36,0xcf,0x86,0xd5,0x18, 78.3143 + 0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,0x04,0x05,0x00,0x51,0x04,0x05,0x00, 78.3144 + 0x10,0x04,0x05,0x00,0x10,0x00,0x94,0x18,0xd3,0x08,0x12,0x04,0x05,0x00,0x00,0x00, 78.3145 + 0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x13,0x00,0x13,0x00,0x05,0x00, 78.3146 + 0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x05,0x00,0x92,0x0c,0x51,0x04,0x05,0x00, 78.3147 + 0x10,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x0c, 78.3148 + 0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x10,0xe6,0x92,0x0c,0x51,0x04,0x10,0xe6, 78.3149 + 0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04, 78.3150 + 0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04, 78.3151 + 0x00,0x00,0x07,0x00,0x08,0x00,0xcf,0x86,0x95,0x1c,0xd4,0x0c,0x93,0x08,0x12,0x04, 78.3152 + 0x08,0x00,0x00,0x00,0x08,0x00,0x93,0x0c,0x52,0x04,0x08,0x00,0x11,0x04,0x08,0x00, 78.3153 + 0x00,0x00,0x00,0x00,0x00,0x00,0xd3,0xba,0xd2,0x80,0xd1,0x34,0xd0,0x1a,0xcf,0x86, 78.3154 + 0x55,0x04,0x05,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00, 78.3155 + 0x07,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0x95,0x14,0x94,0x10,0x53,0x04,0x05,0x00, 78.3156 + 0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0xd0,0x2a, 78.3157 + 0xcf,0x86,0xd5,0x14,0x54,0x04,0x07,0x00,0x53,0x04,0x07,0x00,0x52,0x04,0x07,0x00, 78.3158 + 0x11,0x04,0x07,0x00,0x00,0x00,0x94,0x10,0x53,0x04,0x07,0x00,0x92,0x08,0x11,0x04, 78.3159 + 0x07,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0xcf,0x86,0xd5,0x10,0x54,0x04,0x12,0x00, 78.3160 + 0x93,0x08,0x12,0x04,0x12,0x00,0x00,0x00,0x12,0x00,0x54,0x04,0x12,0x00,0x53,0x04, 78.3161 + 0x12,0x00,0x12,0x04,0x12,0x00,0x00,0x00,0xd1,0x34,0xd0,0x12,0xcf,0x86,0x55,0x04, 78.3162 + 0x10,0x00,0x94,0x08,0x13,0x04,0x10,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04, 78.3163 + 0x10,0x00,0x94,0x18,0xd3,0x08,0x12,0x04,0x10,0x00,0x00,0x00,0x52,0x04,0x00,0x00, 78.3164 + 0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0xcf,0x06,0x00,0x00, 78.3165 + 0xd2,0x06,0xcf,0x06,0x10,0x00,0xd1,0x40,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00, 78.3166 + 0x54,0x04,0x10,0x00,0x93,0x10,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04, 78.3167 + 0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x10,0x00,0x93,0x0c, 78.3168 + 0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x08,0x13,0x04, 78.3169 + 0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe4,0xce,0x02,0xe3,0x45,0x01, 78.3170 + 0xd2,0xd0,0xd1,0x70,0xd0,0x52,0xcf,0x86,0xd5,0x20,0x94,0x1c,0xd3,0x0c,0x52,0x04, 78.3171 + 0x07,0x00,0x11,0x04,0x07,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x07,0x00, 78.3172 + 0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x54,0x04,0x07,0x00,0xd3,0x10,0x52,0x04, 78.3173 + 0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04,0x00,0x00,0x07,0x00,0xd2,0x0c,0x91,0x08, 78.3174 + 0x10,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x07,0x00,0x00,0x00, 78.3175 + 0x10,0x04,0x00,0x00,0x07,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,0x0b,0x00,0x93,0x10, 78.3176 + 0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x00,0x00,0x0b,0x00,0x0b,0x00, 78.3177 + 0x10,0x00,0xd0,0x32,0xcf,0x86,0xd5,0x18,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00, 78.3178 + 0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x94,0x14, 78.3179 + 0x93,0x10,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00, 78.3180 + 0x10,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x11,0x00,0xd3,0x14, 78.3181 + 0xd2,0x0c,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x11,0x04,0x11,0x00, 78.3182 + 0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00, 78.3183 + 0xd1,0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x1c,0x54,0x04,0x09,0x00,0x53,0x04,0x09,0x00, 78.3184 + 0xd2,0x08,0x11,0x04,0x09,0x00,0x0b,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00, 78.3185 + 0x09,0x00,0x54,0x04,0x0a,0x00,0x53,0x04,0x0a,0x00,0xd2,0x08,0x11,0x04,0x0a,0x00, 78.3186 + 0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0a,0x00,0xcf,0x06,0x00,0x00, 78.3187 + 0xd0,0x1a,0xcf,0x86,0x55,0x04,0x0d,0x00,0x54,0x04,0x0d,0x00,0x53,0x04,0x0d,0x00, 78.3188 + 0x52,0x04,0x00,0x00,0x11,0x04,0x11,0x00,0x0d,0x00,0xcf,0x86,0x95,0x14,0x54,0x04, 78.3189 + 0x11,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x11,0x00, 78.3190 + 0x11,0x00,0xd2,0xec,0xd1,0xa4,0xd0,0x76,0xcf,0x86,0xd5,0x48,0xd4,0x28,0xd3,0x14, 78.3191 + 0x52,0x04,0x08,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x08,0x00,0x10,0x04,0x08,0x00, 78.3192 + 0x00,0x00,0x52,0x04,0x00,0x00,0xd1,0x08,0x10,0x04,0x08,0x00,0x08,0xdc,0x10,0x04, 78.3193 + 0x08,0x00,0x08,0xe6,0xd3,0x10,0x52,0x04,0x08,0x00,0x91,0x08,0x10,0x04,0x00,0x00, 78.3194 + 0x08,0x00,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x08,0x00,0x08,0x00, 78.3195 + 0x08,0x00,0x54,0x04,0x08,0x00,0xd3,0x0c,0x52,0x04,0x08,0x00,0x11,0x04,0x14,0x00, 78.3196 + 0x00,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x08,0xe6,0x08,0x01,0x10,0x04,0x08,0xdc, 78.3197 + 0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x08,0x09,0xcf,0x86,0x95,0x28, 78.3198 + 0xd4,0x14,0x53,0x04,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00, 78.3199 + 0x00,0x00,0x00,0x00,0x53,0x04,0x08,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x08,0x00, 78.3200 + 0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0xd0,0x0a,0xcf,0x86,0x15,0x04,0x10,0x00, 78.3201 + 0x00,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x24,0xd3,0x14,0x52,0x04,0x10,0x00, 78.3202 + 0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0xe6,0x10,0x04,0x10,0xdc,0x00,0x00,0x92,0x0c, 78.3203 + 0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x52,0x04, 78.3204 + 0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,0x54, 78.3205 + 0xd0,0x26,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x52,0x04, 78.3206 + 0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00, 78.3207 + 0x0b,0x00,0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x0b,0x00,0x93,0x0c, 78.3208 + 0x52,0x04,0x0b,0x00,0x11,0x04,0x0b,0x00,0x00,0x00,0x0b,0x00,0x54,0x04,0x0b,0x00, 78.3209 + 0x93,0x10,0x92,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00, 78.3210 + 0x0b,0x00,0xd0,0x42,0xcf,0x86,0xd5,0x28,0x54,0x04,0x10,0x00,0xd3,0x0c,0x92,0x08, 78.3211 + 0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00, 78.3212 + 0x10,0x00,0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x14, 78.3213 + 0x53,0x04,0x00,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00, 78.3214 + 0x10,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x96,0xd2,0x68,0xd1,0x24,0xd0,0x06, 78.3215 + 0xcf,0x06,0x0b,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x0b,0x00,0x92,0x0c, 78.3216 + 0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.3217 + 0xd0,0x1e,0xcf,0x86,0x55,0x04,0x11,0x00,0x54,0x04,0x11,0x00,0x93,0x10,0x92,0x0c, 78.3218 + 0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86, 78.3219 + 0x55,0x04,0x11,0x00,0x54,0x04,0x11,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x11,0x00, 78.3220 + 0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x11,0x00, 78.3221 + 0x11,0x00,0xd1,0x28,0xd0,0x22,0xcf,0x86,0x55,0x04,0x14,0x00,0xd4,0x0c,0x93,0x08, 78.3222 + 0x12,0x04,0x14,0x00,0x14,0xe6,0x00,0x00,0x53,0x04,0x14,0x00,0x92,0x08,0x11,0x04, 78.3223 + 0x14,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd2,0x2a, 78.3224 + 0xd1,0x24,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04, 78.3225 + 0x0b,0x00,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04, 78.3226 + 0x0b,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x58,0xd0,0x12,0xcf,0x86,0x55,0x04, 78.3227 + 0x14,0x00,0x94,0x08,0x13,0x04,0x14,0x00,0x00,0x00,0x14,0x00,0xcf,0x86,0x95,0x40, 78.3228 + 0xd4,0x24,0xd3,0x0c,0x52,0x04,0x14,0x00,0x11,0x04,0x14,0x00,0x14,0xdc,0xd2,0x0c, 78.3229 + 0x51,0x04,0x14,0xe6,0x10,0x04,0x14,0xe6,0x14,0xdc,0x91,0x08,0x10,0x04,0x14,0xe6, 78.3230 + 0x14,0xdc,0x14,0xdc,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0xdc,0x14,0x00, 78.3231 + 0x14,0x00,0x14,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.3232 + 0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x15,0x00, 78.3233 + 0x93,0x10,0x52,0x04,0x15,0x00,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00, 78.3234 + 0x00,0x00,0xcf,0x86,0xe5,0x0f,0x06,0xe4,0xf8,0x03,0xe3,0x02,0x02,0xd2,0xfb,0xd1, 78.3235 + 0x4c,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0xd5,0x2c,0xd4,0x1c,0xd3,0x10,0x52, 78.3236 + 0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x09,0x0c,0x00,0x52,0x04,0x0c, 78.3237 + 0x00,0x11,0x04,0x0c,0x00,0x00,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x0c, 78.3238 + 0x00,0x0c,0x00,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00, 78.3239 + 0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x09,0xd0,0x69,0xcf,0x86,0xd5, 78.3240 + 0x32,0x54,0x04,0x0b,0x00,0x53,0x04,0x0b,0x00,0xd2,0x15,0x51,0x04,0x0b,0x00,0x10, 78.3241 + 0x0d,0x0b,0xff,0xf0,0x91,0x82,0x99,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x91,0x11, 78.3242 + 0x10,0x0d,0x0b,0xff,0xf0,0x91,0x82,0x9b,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x0b, 78.3243 + 0x00,0xd4,0x1d,0x53,0x04,0x0b,0x00,0x92,0x15,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b, 78.3244 + 0x00,0x0b,0xff,0xf0,0x91,0x82,0xa5,0xf0,0x91,0x82,0xba,0x00,0x0b,0x00,0x53,0x04, 78.3245 + 0x0b,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0b,0x09,0x10,0x04,0x0b,0x07, 78.3246 + 0x0b,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x20,0x94,0x1c,0xd3,0x0c,0x92,0x08,0x11,0x04, 78.3247 + 0x0b,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00, 78.3248 + 0x14,0x00,0x00,0x00,0x0d,0x00,0xd4,0x14,0x53,0x04,0x0d,0x00,0x92,0x0c,0x91,0x08, 78.3249 + 0x10,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0d,0x00,0x92,0x08, 78.3250 + 0x11,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0xd1,0x96,0xd0,0x5c,0xcf,0x86,0xd5,0x18, 78.3251 + 0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x0d,0xe6,0x10,0x04,0x0d,0xe6,0x0d,0x00, 78.3252 + 0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd4,0x26,0x53,0x04,0x0d,0x00,0x52,0x04,0x0d,0x00, 78.3253 + 0x51,0x04,0x0d,0x00,0x10,0x0d,0x0d,0xff,0xf0,0x91,0x84,0xb1,0xf0,0x91,0x84,0xa7, 78.3254 + 0x00,0x0d,0xff,0xf0,0x91,0x84,0xb2,0xf0,0x91,0x84,0xa7,0x00,0x93,0x18,0xd2,0x0c, 78.3255 + 0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x0d,0x09,0x91,0x08,0x10,0x04,0x0d,0x09, 78.3256 + 0x00,0x00,0x0d,0x00,0x0d,0x00,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04, 78.3257 + 0x0d,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x10,0x00, 78.3258 + 0x54,0x04,0x10,0x00,0x93,0x18,0xd2,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00, 78.3259 + 0x10,0x07,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd0,0x06, 78.3260 + 0xcf,0x06,0x0d,0x00,0xcf,0x86,0xd5,0x40,0xd4,0x2c,0xd3,0x10,0x92,0x0c,0x91,0x08, 78.3261 + 0x10,0x04,0x0d,0x09,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04, 78.3262 + 0x0d,0x00,0x11,0x00,0x10,0x04,0x11,0x07,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00, 78.3263 + 0x10,0x00,0x00,0x00,0x53,0x04,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04, 78.3264 + 0x10,0x00,0x11,0x00,0x11,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04, 78.3265 + 0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x93,0x10,0x52,0x04,0x10,0x00, 78.3266 + 0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0xc8,0xd1,0x48, 78.3267 + 0xd0,0x42,0xcf,0x86,0xd5,0x18,0x54,0x04,0x10,0x00,0x93,0x10,0x92,0x0c,0x51,0x04, 78.3268 + 0x10,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x54,0x04,0x10,0x00, 78.3269 + 0xd3,0x14,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0x09,0x10,0x04, 78.3270 + 0x10,0x07,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x12,0x00, 78.3271 + 0x00,0x00,0xcf,0x06,0x00,0x00,0xd0,0x52,0xcf,0x86,0xd5,0x3c,0xd4,0x28,0xd3,0x10, 78.3272 + 0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0xd2,0x0c, 78.3273 + 0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04, 78.3274 + 0x00,0x00,0x11,0x00,0x53,0x04,0x11,0x00,0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00, 78.3275 + 0x10,0x04,0x00,0x00,0x11,0x00,0x94,0x10,0x53,0x04,0x11,0x00,0x92,0x08,0x11,0x04, 78.3276 + 0x11,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00,0xd4,0x18, 78.3277 + 0x53,0x04,0x10,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x10,0x00,0x10,0x07,0x10,0x04, 78.3278 + 0x10,0x09,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00, 78.3279 + 0x00,0x00,0x00,0x00,0xe1,0x27,0x01,0xd0,0x8a,0xcf,0x86,0xd5,0x44,0xd4,0x2c,0xd3, 78.3280 + 0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x10,0x00,0x10,0x00,0x91,0x08,0x10, 78.3281 + 0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,0x00,0xd1,0x08,0x10,0x04,0x10, 78.3282 + 0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x93,0x14,0x92,0x10,0xd1,0x08,0x10, 78.3283 + 0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xd4, 78.3284 + 0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10, 78.3285 + 0x00,0x10,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10, 78.3286 + 0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd2,0x0c,0x51,0x04,0x10, 78.3287 + 0x00,0x10,0x04,0x00,0x00,0x14,0x07,0x91,0x08,0x10,0x04,0x10,0x07,0x10,0x00,0x10, 78.3288 + 0x00,0xcf,0x86,0xd5,0x6a,0xd4,0x42,0xd3,0x14,0x52,0x04,0x10,0x00,0xd1,0x08,0x10, 78.3289 + 0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0xd2,0x19,0xd1,0x08,0x10, 78.3290 + 0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0xff,0xf0,0x91,0x8d,0x87,0xf0, 78.3291 + 0x91,0x8c,0xbe,0x00,0x91,0x11,0x10,0x0d,0x10,0xff,0xf0,0x91,0x8d,0x87,0xf0,0x91, 78.3292 + 0x8d,0x97,0x00,0x10,0x09,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11, 78.3293 + 0x00,0x00,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x52, 78.3294 + 0x04,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd4,0x1c,0xd3, 78.3295 + 0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x00,0x00,0x10,0xe6,0x52,0x04,0x10,0xe6,0x91, 78.3296 + 0x08,0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x10,0xe6,0x91, 78.3297 + 0x08,0x10,0x04,0x10,0xe6,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3, 78.3298 + 0x30,0x01,0xd2,0xb7,0xd1,0x48,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x95,0x3c, 78.3299 + 0xd4,0x1c,0x93,0x18,0xd2,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x09,0x12,0x00, 78.3300 + 0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x07,0x12,0x00,0x12,0x00,0x53,0x04,0x12,0x00, 78.3301 + 0xd2,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x00,0x00,0x12,0x00,0xd1,0x08,0x10,0x04, 78.3302 + 0x00,0x00,0x12,0x00,0x10,0x04,0x14,0xe6,0x15,0x00,0x00,0x00,0xd0,0x45,0xcf,0x86, 78.3303 + 0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0xd2,0x15,0x51,0x04, 78.3304 + 0x10,0x00,0x10,0x04,0x10,0x00,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xba, 78.3305 + 0x00,0xd1,0x11,0x10,0x0d,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xb0,0x00, 78.3306 + 0x10,0x00,0x10,0x0d,0x10,0xff,0xf0,0x91,0x92,0xb9,0xf0,0x91,0x92,0xbd,0x00,0x10, 78.3307 + 0x00,0xcf,0x86,0x95,0x24,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10, 78.3308 + 0x04,0x10,0x09,0x10,0x07,0x10,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11, 78.3309 + 0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0, 78.3310 + 0x40,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x0c,0x52,0x04,0x10, 78.3311 + 0x00,0x11,0x04,0x10,0x00,0x00,0x00,0xd2,0x1e,0x51,0x04,0x10,0x00,0x10,0x0d,0x10, 78.3312 + 0xff,0xf0,0x91,0x96,0xb8,0xf0,0x91,0x96,0xaf,0x00,0x10,0xff,0xf0,0x91,0x96,0xb9, 78.3313 + 0xf0,0x91,0x96,0xaf,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x10,0x09,0xcf, 78.3314 + 0x86,0x95,0x2c,0xd4,0x1c,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x07,0x10, 78.3315 + 0x00,0x10,0x00,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,0x11,0x00,0x11,0x00,0x53, 78.3316 + 0x04,0x11,0x00,0x52,0x04,0x11,0x00,0x11,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0xd2, 78.3317 + 0xa0,0xd1,0x5c,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x53, 78.3318 + 0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x10, 78.3319 + 0x09,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x93,0x10,0x52,0x04,0x10,0x00,0x91,0x08,0x10, 78.3320 + 0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11, 78.3321 + 0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12, 78.3322 + 0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x2a,0xcf, 78.3323 + 0x86,0x55,0x04,0x0d,0x00,0x54,0x04,0x0d,0x00,0xd3,0x10,0x52,0x04,0x0d,0x00,0x51, 78.3324 + 0x04,0x0d,0x00,0x10,0x04,0x0d,0x09,0x0d,0x07,0x92,0x0c,0x91,0x08,0x10,0x04,0x15, 78.3325 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x95,0x14,0x94,0x10,0x53,0x04,0x0d, 78.3326 + 0x00,0x92,0x08,0x11,0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1, 78.3327 + 0x40,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0x54,0x04,0x11,0x00,0x53,0x04,0x11,0x00,0xd2, 78.3328 + 0x0c,0x51,0x04,0x11,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00, 78.3329 + 0x00,0x11,0x00,0x11,0x00,0x94,0x14,0x53,0x04,0x11,0x00,0x92,0x0c,0x51,0x04,0x11, 78.3330 + 0x00,0x10,0x04,0x11,0x00,0x11,0x09,0x00,0x00,0x11,0x00,0xcf,0x06,0x00,0x00,0xcf, 78.3331 + 0x06,0x00,0x00,0xe4,0x59,0x01,0xd3,0xb2,0xd2,0x5c,0xd1,0x28,0xd0,0x22,0xcf,0x86, 78.3332 + 0x55,0x04,0x14,0x00,0x54,0x04,0x14,0x00,0x53,0x04,0x14,0x00,0x92,0x10,0xd1,0x08, 78.3333 + 0x10,0x04,0x14,0x00,0x14,0x09,0x10,0x04,0x14,0x07,0x14,0x00,0x00,0x00,0xcf,0x06, 78.3334 + 0x00,0x00,0xd0,0x0a,0xcf,0x86,0x15,0x04,0x00,0x00,0x10,0x00,0xcf,0x86,0x55,0x04, 78.3335 + 0x10,0x00,0x54,0x04,0x10,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04, 78.3336 + 0x10,0x00,0x00,0x00,0x00,0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04, 78.3337 + 0x00,0x00,0x10,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04, 78.3338 + 0x00,0x00,0x94,0x10,0x53,0x04,0x15,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x15,0x00, 78.3339 + 0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x14,0x54,0x04,0x15,0x00,0x53,0x04,0x15,0x00, 78.3340 + 0x92,0x08,0x11,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x94,0x1c,0x93,0x18,0xd2,0x0c, 78.3341 + 0x91,0x08,0x10,0x04,0x15,0x09,0x15,0x00,0x15,0x00,0x91,0x08,0x10,0x04,0x15,0x00, 78.3342 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0xa0,0xd1,0x3c,0xd0,0x1e,0xcf,0x86, 78.3343 + 0x55,0x04,0x13,0x00,0x54,0x04,0x13,0x00,0x93,0x10,0x52,0x04,0x13,0x00,0x91,0x08, 78.3344 + 0x10,0x04,0x13,0x09,0x13,0x00,0x13,0x00,0x13,0x00,0xcf,0x86,0x95,0x18,0x94,0x14, 78.3345 + 0x93,0x10,0x52,0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x13,0x09, 78.3346 + 0x00,0x00,0x13,0x00,0x13,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x2c,0xd4,0x10,0x93,0x0c, 78.3347 + 0x52,0x04,0x13,0x00,0x11,0x04,0x15,0x00,0x13,0x00,0x13,0x00,0x53,0x04,0x13,0x00, 78.3348 + 0xd2,0x0c,0x91,0x08,0x10,0x04,0x13,0x00,0x13,0x09,0x13,0x00,0x91,0x08,0x10,0x04, 78.3349 + 0x13,0x00,0x14,0x00,0x13,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x13,0x00, 78.3350 + 0x10,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04, 78.3351 + 0x10,0x00,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04, 78.3352 + 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,0xa9,0x01,0xd2, 78.3353 + 0xb0,0xd1,0x6c,0xd0,0x3e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x53,0x04,0x12,0x00,0x92, 78.3354 + 0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x54, 78.3355 + 0x04,0x12,0x00,0xd3,0x10,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12, 78.3356 + 0x00,0x00,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x12, 78.3357 + 0x09,0xcf,0x86,0xd5,0x14,0x94,0x10,0x93,0x0c,0x52,0x04,0x12,0x00,0x11,0x04,0x12, 78.3358 + 0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12, 78.3359 + 0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0xd0,0x3e,0xcf, 78.3360 + 0x86,0xd5,0x14,0x54,0x04,0x12,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x00,0x00,0x12, 78.3361 + 0x00,0x12,0x00,0x12,0x00,0xd4,0x14,0x53,0x04,0x12,0x00,0x92,0x0c,0x91,0x08,0x10, 78.3362 + 0x04,0x00,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x93,0x10,0x52,0x04,0x12,0x00,0x51, 78.3363 + 0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1, 78.3364 + 0xa0,0xd0,0x52,0xcf,0x86,0xd5,0x24,0x94,0x20,0xd3,0x10,0x52,0x04,0x13,0x00,0x51, 78.3365 + 0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x13,0x00,0x10, 78.3366 + 0x04,0x00,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x54,0x04,0x13,0x00,0xd3,0x10,0x52, 78.3367 + 0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0xd2,0x0c,0x51, 78.3368 + 0x04,0x00,0x00,0x10,0x04,0x13,0x00,0x00,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x00, 78.3369 + 0x00,0x13,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x18,0x93,0x14,0xd2,0x0c,0x51,0x04,0x13, 78.3370 + 0x00,0x10,0x04,0x13,0x07,0x13,0x00,0x11,0x04,0x13,0x09,0x13,0x00,0x00,0x00,0x53, 78.3371 + 0x04,0x13,0x00,0x92,0x08,0x11,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x94,0x20,0xd3, 78.3372 + 0x10,0x52,0x04,0x14,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x92, 78.3373 + 0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd0, 78.3374 + 0x52,0xcf,0x86,0xd5,0x3c,0xd4,0x14,0x53,0x04,0x14,0x00,0x52,0x04,0x14,0x00,0x51, 78.3375 + 0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x14, 78.3376 + 0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x14, 78.3377 + 0x09,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94, 78.3378 + 0x10,0x53,0x04,0x14,0x00,0x92,0x08,0x11,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00, 78.3379 + 0x00,0xcf,0x06,0x00,0x00,0xd2,0x2a,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf, 78.3380 + 0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x14,0x00,0x53,0x04,0x14, 78.3381 + 0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1, 78.3382 + 0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x15, 78.3383 + 0x00,0x54,0x04,0x15,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04,0x15,0x00,0x00,0x00,0x00, 78.3384 + 0x00,0x52,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0xd0, 78.3385 + 0xca,0xcf,0x86,0xd5,0xc2,0xd4,0x54,0xd3,0x06,0xcf,0x06,0x09,0x00,0xd2,0x06,0xcf, 78.3386 + 0x06,0x09,0x00,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x09,0x00,0xcf,0x86,0x55,0x04,0x09, 78.3387 + 0x00,0x94,0x14,0x53,0x04,0x09,0x00,0x52,0x04,0x09,0x00,0x51,0x04,0x09,0x00,0x10, 78.3388 + 0x04,0x09,0x00,0x10,0x00,0x10,0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x10, 78.3389 + 0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x11,0x00,0x00, 78.3390 + 0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x68,0xd2,0x46,0xd1,0x40,0xd0, 78.3391 + 0x06,0xcf,0x06,0x09,0x00,0xcf,0x86,0x55,0x04,0x09,0x00,0xd4,0x20,0xd3,0x10,0x92, 78.3392 + 0x0c,0x51,0x04,0x09,0x00,0x10,0x04,0x09,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10, 78.3393 + 0x00,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x93,0x10,0x52,0x04,0x09, 78.3394 + 0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x11, 78.3395 + 0x00,0xd1,0x1c,0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x95,0x10,0x94,0x0c,0x93, 78.3396 + 0x08,0x12,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00, 78.3397 + 0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x4c,0xd4,0x06,0xcf, 78.3398 + 0x06,0x0b,0x00,0xd3,0x40,0xd2,0x3a,0xd1,0x34,0xd0,0x2e,0xcf,0x86,0x55,0x04,0x0b, 78.3399 + 0x00,0xd4,0x14,0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10, 78.3400 + 0x04,0x0b,0x00,0x00,0x00,0x53,0x04,0x15,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x15, 78.3401 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf, 78.3402 + 0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x4c,0xd0,0x44,0xcf, 78.3403 + 0x86,0xd5,0x3c,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2, 78.3404 + 0x2a,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x11,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x93, 78.3405 + 0x10,0x52,0x04,0x11,0x00,0x51,0x04,0x11,0x00,0x10,0x04,0x11,0x00,0x00,0x00,0x00, 78.3406 + 0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00, 78.3407 + 0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xe0,0xd2,0x01,0xcf,0x86,0xd5,0x06,0xcf,0x06, 78.3408 + 0x00,0x00,0xe4,0x0b,0x01,0xd3,0x06,0xcf,0x06,0x0c,0x00,0xd2,0x84,0xd1,0x50,0xd0, 78.3409 + 0x1e,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x92, 78.3410 + 0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5, 78.3411 + 0x18,0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x51,0x04,0x10, 78.3412 + 0x00,0x10,0x04,0x10,0x00,0x00,0x00,0x94,0x14,0x53,0x04,0x10,0x00,0xd2,0x08,0x11, 78.3413 + 0x04,0x10,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0xd0,0x06,0xcf, 78.3414 + 0x06,0x00,0x00,0xcf,0x86,0xd5,0x08,0x14,0x04,0x00,0x00,0x10,0x00,0xd4,0x10,0x53, 78.3415 + 0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00,0x00,0x93,0x10,0x52, 78.3416 + 0x04,0x10,0x01,0x91,0x08,0x10,0x04,0x10,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0xd1, 78.3417 + 0x6c,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x10,0x00,0x54,0x04,0x10,0x00,0x93,0x10,0x52, 78.3418 + 0x04,0x10,0xe6,0x51,0x04,0x10,0xe6,0x10,0x04,0x10,0xe6,0x10,0x00,0x10,0x00,0xcf, 78.3419 + 0x86,0xd5,0x24,0xd4,0x10,0x93,0x0c,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00, 78.3420 + 0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x00, 78.3421 + 0x00,0x10,0x00,0x10,0x00,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51,0x04,0x10,0x00,0x10, 78.3422 + 0x04,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x00, 78.3423 + 0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x10,0x00,0x10,0x00,0xd0,0x0e,0xcf,0x86,0x95, 78.3424 + 0x08,0x14,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf, 78.3425 + 0x06,0x00,0x00,0xd2,0x30,0xd1,0x0c,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x06,0x14, 78.3426 + 0x00,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04,0x14,0x00,0x53,0x04,0x14,0x00,0x92, 78.3427 + 0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf, 78.3428 + 0x06,0x00,0x00,0xd1,0x4c,0xd0,0x06,0xcf,0x06,0x0d,0x00,0xcf,0x86,0xd5,0x2c,0x94, 78.3429 + 0x28,0xd3,0x10,0x52,0x04,0x0d,0x00,0x91,0x08,0x10,0x04,0x0d,0x00,0x15,0x00,0x15, 78.3430 + 0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x51,0x04,0x00, 78.3431 + 0x00,0x10,0x04,0x00,0x00,0x15,0x00,0x0d,0x00,0x54,0x04,0x0d,0x00,0x53,0x04,0x0d, 78.3432 + 0x00,0x52,0x04,0x0d,0x00,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x15,0x00,0xd0, 78.3433 + 0x1e,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x15,0x00,0x52,0x04,0x00,0x00,0x51, 78.3434 + 0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x00,0x00,0xcf,0x86,0x55, 78.3435 + 0x04,0x00,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x12,0x00,0x13, 78.3436 + 0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xcf,0x06,0x12,0x00,0xe2, 78.3437 + 0xc6,0x01,0xd1,0x8e,0xd0,0x86,0xcf,0x86,0xd5,0x48,0xd4,0x06,0xcf,0x06,0x12,0x00, 78.3438 + 0xd3,0x06,0xcf,0x06,0x12,0x00,0xd2,0x06,0xcf,0x06,0x12,0x00,0xd1,0x06,0xcf,0x06, 78.3439 + 0x12,0x00,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x55,0x04,0x12,0x00,0xd4,0x14, 78.3440 + 0x53,0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x91,0x08,0x10,0x04,0x12,0x00,0x14,0x00, 78.3441 + 0x14,0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0x00,0x00, 78.3442 + 0xd4,0x36,0xd3,0x06,0xcf,0x06,0x12,0x00,0xd2,0x2a,0xd1,0x06,0xcf,0x06,0x12,0x00, 78.3443 + 0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x55,0x04,0x12,0x00,0x54,0x04,0x12,0x00, 78.3444 + 0x93,0x10,0x92,0x0c,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00, 78.3445 + 0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00, 78.3446 + 0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0xa2,0xd4,0x9c,0xd3,0x74, 78.3447 + 0xd2,0x26,0xd1,0x20,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x94,0x10,0x93,0x0c,0x92,0x08, 78.3448 + 0x11,0x04,0x0c,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0xcf,0x06, 78.3449 + 0x13,0x00,0xcf,0x06,0x13,0x00,0xd1,0x48,0xd0,0x1e,0xcf,0x86,0x95,0x18,0x54,0x04, 78.3450 + 0x13,0x00,0x53,0x04,0x13,0x00,0x52,0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04, 78.3451 + 0x13,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0xd5,0x18,0x54,0x04,0x00,0x00,0x93,0x10, 78.3452 + 0x92,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.3453 + 0x94,0x0c,0x93,0x08,0x12,0x04,0x00,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0xcf,0x06, 78.3454 + 0x13,0x00,0xd2,0x22,0xd1,0x06,0xcf,0x06,0x13,0x00,0xd0,0x06,0xcf,0x06,0x13,0x00, 78.3455 + 0xcf,0x86,0x55,0x04,0x13,0x00,0x54,0x04,0x13,0x00,0x53,0x04,0x13,0x00,0x12,0x04, 78.3456 + 0x13,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06, 78.3457 + 0x00,0x00,0xd3,0x7f,0xd2,0x79,0xd1,0x34,0xd0,0x06,0xcf,0x06,0x10,0x00,0xcf,0x86, 78.3458 + 0x55,0x04,0x10,0x00,0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00, 78.3459 + 0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00, 78.3460 + 0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f,0xcf,0x86,0xd5,0x2c, 78.3461 + 0xd4,0x14,0x53,0x04,0x10,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00, 78.3462 + 0x00,0x00,0x00,0x00,0x53,0x04,0x10,0x00,0xd2,0x08,0x11,0x04,0x10,0x00,0x00,0x00, 78.3463 + 0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x01,0x10,0x00,0x94,0x0d,0x93,0x09,0x12,0x05, 78.3464 + 0x10,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00, 78.3465 + 0x00,0xcf,0x06,0x00,0x00,0xe1,0x96,0x04,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00, 78.3466 + 0xcf,0x86,0xe5,0x33,0x04,0xe4,0x83,0x02,0xe3,0xf8,0x01,0xd2,0x26,0xd1,0x06,0xcf, 78.3467 + 0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x55,0x04,0x05,0x00,0x54, 78.3468 + 0x04,0x05,0x00,0x93,0x0c,0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x00,0x00,0x00, 78.3469 + 0x00,0xd1,0xef,0xd0,0x2a,0xcf,0x86,0x55,0x04,0x05,0x00,0x94,0x20,0xd3,0x10,0x52, 78.3470 + 0x04,0x05,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0x92,0x0c,0x91, 78.3471 + 0x08,0x10,0x04,0x00,0x00,0x0a,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0xd5, 78.3472 + 0x2a,0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52,0x04,0x05,0x00,0x51,0x04,0x05, 78.3473 + 0x00,0x10,0x0d,0x05,0xff,0xf0,0x9d,0x85,0x97,0xf0,0x9d,0x85,0xa5,0x00,0x05,0xff, 78.3474 + 0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0x00,0xd4,0x75,0xd3,0x61,0xd2,0x44,0xd1, 78.3475 + 0x22,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85, 78.3476 + 0xae,0x00,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xaf, 78.3477 + 0x00,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85, 78.3478 + 0xb0,0x00,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xb1, 78.3479 + 0x00,0xd1,0x15,0x10,0x11,0x05,0xff,0xf0,0x9d,0x85,0x98,0xf0,0x9d,0x85,0xa5,0xf0, 78.3480 + 0x9d,0x85,0xb2,0x00,0x05,0xd8,0x10,0x04,0x05,0xd8,0x05,0x01,0xd2,0x08,0x11,0x04, 78.3481 + 0x05,0x01,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x05,0xe2,0x05,0xd8,0xd3,0x12, 78.3482 + 0x92,0x0d,0x51,0x04,0x05,0xd8,0x10,0x04,0x05,0xd8,0x05,0xff,0x00,0x05,0xff,0x00, 78.3483 + 0x92,0x0e,0x51,0x05,0x05,0xff,0x00,0x10,0x05,0x05,0xff,0x00,0x05,0xdc,0x05,0xdc, 78.3484 + 0xd0,0x97,0xcf,0x86,0xd5,0x28,0x94,0x24,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x05,0xdc, 78.3485 + 0x10,0x04,0x05,0xdc,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x05,0xe6,0x05,0xe6, 78.3486 + 0x92,0x08,0x11,0x04,0x05,0xe6,0x05,0xdc,0x05,0x00,0x05,0x00,0xd4,0x14,0x53,0x04, 78.3487 + 0x05,0x00,0xd2,0x08,0x11,0x04,0x05,0x00,0x05,0xe6,0x11,0x04,0x05,0xe6,0x05,0x00, 78.3488 + 0x53,0x04,0x05,0x00,0xd2,0x15,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x05,0xff, 78.3489 + 0xf0,0x9d,0x86,0xb9,0xf0,0x9d,0x85,0xa5,0x00,0xd1,0x1e,0x10,0x0d,0x05,0xff,0xf0, 78.3490 + 0x9d,0x86,0xba,0xf0,0x9d,0x85,0xa5,0x00,0x05,0xff,0xf0,0x9d,0x86,0xb9,0xf0,0x9d, 78.3491 + 0x85,0xa5,0xf0,0x9d,0x85,0xae,0x00,0x10,0x11,0x05,0xff,0xf0,0x9d,0x86,0xba,0xf0, 78.3492 + 0x9d,0x85,0xa5,0xf0,0x9d,0x85,0xae,0x00,0x05,0xff,0xf0,0x9d,0x86,0xb9,0xf0,0x9d, 78.3493 + 0x85,0xa5,0xf0,0x9d,0x85,0xaf,0x00,0xcf,0x86,0xd5,0x31,0xd4,0x21,0x93,0x1d,0x92, 78.3494 + 0x19,0x91,0x15,0x10,0x11,0x05,0xff,0xf0,0x9d,0x86,0xba,0xf0,0x9d,0x85,0xa5,0xf0, 78.3495 + 0x9d,0x85,0xaf,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x53,0x04,0x05,0x00, 78.3496 + 0x52,0x04,0x05,0x00,0x11,0x04,0x05,0x00,0x11,0x00,0x94,0x14,0x53,0x04,0x11,0x00, 78.3497 + 0x92,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 78.3498 + 0xd2,0x44,0xd1,0x28,0xd0,0x06,0xcf,0x06,0x08,0x00,0xcf,0x86,0x95,0x1c,0x94,0x18, 78.3499 + 0x93,0x14,0xd2,0x08,0x11,0x04,0x08,0x00,0x08,0xe6,0x91,0x08,0x10,0x04,0x08,0xe6, 78.3500 + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00, 78.3501 + 0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x14,0x00,0x93,0x08,0x12,0x04,0x14,0x00, 78.3502 + 0x00,0x00,0x00,0x00,0xd1,0x40,0xd0,0x06,0xcf,0x06,0x07,0x00,0xcf,0x86,0xd5,0x18, 78.3503 + 0x54,0x04,0x07,0x00,0x93,0x10,0x52,0x04,0x07,0x00,0x51,0x04,0x07,0x00,0x10,0x04, 78.3504 + 0x07,0x00,0x00,0x00,0x00,0x00,0x54,0x04,0x09,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04, 78.3505 + 0x09,0x00,0x14,0x00,0x14,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14,0x00,0x00,0x00, 78.3506 + 0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xe3,0x5f,0x01,0xd2,0xb4,0xd1,0x24,0xd0, 78.3507 + 0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x54,0x04,0x05,0x00,0x93,0x10,0x52, 78.3508 + 0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0x05, 78.3509 + 0x00,0xd0,0x6a,0xcf,0x86,0xd5,0x18,0x54,0x04,0x05,0x00,0x53,0x04,0x05,0x00,0x52, 78.3510 + 0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0xd4,0x34,0xd3, 78.3511 + 0x1c,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xd1,0x08,0x10, 78.3512 + 0x04,0x00,0x00,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xd2,0x0c,0x91,0x08,0x10, 78.3513 + 0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05, 78.3514 + 0x00,0x53,0x04,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05, 78.3515 + 0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0xcf,0x86,0x95,0x20,0x94, 78.3516 + 0x1c,0x93,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x05,0x00,0x07,0x00,0x05,0x00,0x91, 78.3517 + 0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0xd1, 78.3518 + 0xa4,0xd0,0x6a,0xcf,0x86,0xd5,0x48,0xd4,0x28,0xd3,0x10,0x52,0x04,0x05,0x00,0x51, 78.3519 + 0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10, 78.3520 + 0x04,0x05,0x00,0x00,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0xd3, 78.3521 + 0x10,0x52,0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x52, 78.3522 + 0x04,0x05,0x00,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x54,0x04,0x05, 78.3523 + 0x00,0x53,0x04,0x05,0x00,0xd2,0x0c,0x51,0x04,0x05,0x00,0x10,0x04,0x00,0x00,0x05, 78.3524 + 0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00,0x00,0x00,0xcf,0x86,0x95,0x34,0xd4, 78.3525 + 0x20,0xd3,0x14,0x52,0x04,0x05,0x00,0xd1,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x10, 78.3526 + 0x04,0x05,0x00,0x00,0x00,0x92,0x08,0x11,0x04,0x00,0x00,0x05,0x00,0x05,0x00,0x93, 78.3527 + 0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x05,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0x05, 78.3528 + 0x00,0x05,0x00,0xcf,0x06,0x05,0x00,0xd2,0x26,0xd1,0x06,0xcf,0x06,0x05,0x00,0xd0, 78.3529 + 0x1a,0xcf,0x86,0x55,0x04,0x05,0x00,0x94,0x10,0x93,0x0c,0x52,0x04,0x05,0x00,0x11, 78.3530 + 0x04,0x08,0x00,0x00,0x00,0x05,0x00,0x05,0x00,0xcf,0x06,0x05,0x00,0xd1,0x06,0xcf, 78.3531 + 0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53, 78.3532 + 0x04,0x05,0x00,0xd2,0x08,0x11,0x04,0x05,0x00,0x09,0x00,0x11,0x04,0x00,0x00,0x05, 78.3533 + 0x00,0x05,0x00,0x05,0x00,0xd4,0x52,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,0x46,0xd1, 78.3534 + 0x06,0xcf,0x06,0x11,0x00,0xd0,0x3a,0xcf,0x86,0xd5,0x20,0xd4,0x0c,0x53,0x04,0x11, 78.3535 + 0x00,0x12,0x04,0x11,0x00,0x00,0x00,0x53,0x04,0x00,0x00,0x92,0x0c,0x51,0x04,0x00, 78.3536 + 0x00,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91, 78.3537 + 0x08,0x10,0x04,0x00,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00,0xcf, 78.3538 + 0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xe0,0xc2,0x03,0xcf,0x86, 78.3539 + 0xe5,0x03,0x01,0xd4,0xfc,0xd3,0xc0,0xd2,0x66,0xd1,0x60,0xd0,0x5a,0xcf,0x86,0xd5, 78.3540 + 0x2c,0xd4,0x14,0x93,0x10,0x52,0x04,0x12,0xe6,0x51,0x04,0x12,0xe6,0x10,0x04,0x12, 78.3541 + 0xe6,0x00,0x00,0x12,0xe6,0x53,0x04,0x12,0xe6,0x92,0x10,0xd1,0x08,0x10,0x04,0x12, 78.3542 + 0xe6,0x00,0x00,0x10,0x04,0x00,0x00,0x12,0xe6,0x12,0xe6,0x94,0x28,0xd3,0x18,0xd2, 78.3543 + 0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,0x00,0x00,0x12,0xe6,0x91,0x08,0x10,0x04,0x12, 78.3544 + 0xe6,0x00,0x00,0x12,0xe6,0x92,0x0c,0x51,0x04,0x12,0xe6,0x10,0x04,0x12,0xe6,0x00, 78.3545 + 0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0x54,0xd0, 78.3546 + 0x36,0xcf,0x86,0x55,0x04,0x15,0x00,0xd4,0x14,0x53,0x04,0x15,0x00,0x52,0x04,0x15, 78.3547 + 0x00,0x91,0x08,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd3,0x10,0x52,0x04,0x15, 78.3548 + 0xe6,0x51,0x04,0x15,0xe6,0x10,0x04,0x15,0xe6,0x15,0x00,0x52,0x04,0x15,0x00,0x11, 78.3549 + 0x04,0x15,0x00,0x00,0x00,0xcf,0x86,0x95,0x18,0x94,0x14,0x53,0x04,0x15,0x00,0xd2, 78.3550 + 0x08,0x11,0x04,0x15,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x15,0x00,0x00,0x00,0x00, 78.3551 + 0x00,0xcf,0x06,0x00,0x00,0xd2,0x36,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf, 78.3552 + 0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x15,0x00,0xd4,0x0c,0x53,0x04,0x15,0x00,0x12, 78.3553 + 0x04,0x15,0x00,0x15,0xe6,0x53,0x04,0x15,0x00,0xd2,0x08,0x11,0x04,0x15,0x00,0x00, 78.3554 + 0x00,0x51,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x15,0x00,0xcf,0x06,0x00,0x00,0xcf, 78.3555 + 0x06,0x00,0x00,0xd4,0x82,0xd3,0x7c,0xd2,0x3e,0xd1,0x06,0xcf,0x06,0x10,0x00,0xd0, 78.3556 + 0x06,0xcf,0x06,0x10,0x00,0xcf,0x86,0x95,0x2c,0xd4,0x18,0x93,0x14,0x52,0x04,0x10, 78.3557 + 0x00,0xd1,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x10,0x00,0x10, 78.3558 + 0x00,0x93,0x10,0x52,0x04,0x10,0xdc,0x51,0x04,0x10,0xdc,0x10,0x04,0x10,0xdc,0x00, 78.3559 + 0x00,0x00,0x00,0x00,0x00,0xd1,0x38,0xd0,0x06,0xcf,0x06,0x12,0x00,0xcf,0x86,0x95, 78.3560 + 0x2c,0xd4,0x18,0xd3,0x08,0x12,0x04,0x12,0x00,0x12,0xe6,0x92,0x0c,0x51,0x04,0x12, 78.3561 + 0xe6,0x10,0x04,0x12,0x07,0x15,0x00,0x00,0x00,0x53,0x04,0x12,0x00,0xd2,0x08,0x11, 78.3562 + 0x04,0x12,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x06,0x00, 78.3563 + 0x00,0xcf,0x06,0x00,0x00,0xd3,0x82,0xd2,0x48,0xd1,0x24,0xd0,0x06,0xcf,0x06,0x00, 78.3564 + 0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x93,0x10,0x92,0x0c,0x91, 78.3565 + 0x08,0x10,0x04,0x00,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0xd0,0x1e,0xcf, 78.3566 + 0x86,0x55,0x04,0x14,0x00,0x54,0x04,0x14,0x00,0x93,0x10,0x52,0x04,0x14,0x00,0x91, 78.3567 + 0x08,0x10,0x04,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1, 78.3568 + 0x34,0xd0,0x2e,0xcf,0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10, 78.3569 + 0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x15,0x00,0x54,0x04,0x15, 78.3570 + 0x00,0x53,0x04,0x15,0x00,0x52,0x04,0x15,0x00,0x11,0x04,0x15,0x00,0x00,0x00,0xcf, 78.3571 + 0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xe2,0xb2,0x01,0xe1,0x41,0x01,0xd0,0x6e,0xcf, 78.3572 + 0x86,0xd5,0x18,0x94,0x14,0x93,0x10,0x52,0x04,0x0d,0x00,0x91,0x08,0x10,0x04,0x00, 78.3573 + 0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd4,0x30,0xd3,0x20,0xd2,0x10,0xd1, 78.3574 + 0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10, 78.3575 + 0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x92,0x0c,0x91,0x08,0x10, 78.3576 + 0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x0d,0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0d, 78.3577 + 0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d,0x00,0x92,0x10,0xd1,0x08,0x10,0x04,0x00, 78.3578 + 0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x00,0x00,0xcf,0x86,0xd5,0x74,0xd4, 78.3579 + 0x34,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x00,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x51, 78.3580 + 0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00, 78.3581 + 0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x0d, 78.3582 + 0x00,0x0d,0x00,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10, 78.3583 + 0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00, 78.3584 + 0x00,0x0d,0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x00, 78.3585 + 0x00,0x0d,0x00,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10,0x04,0x00,0x00,0x0d, 78.3586 + 0x00,0xd4,0x30,0xd3,0x20,0xd2,0x10,0xd1,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x10, 78.3587 + 0x04,0x0d,0x00,0x00,0x00,0xd1,0x08,0x10,0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x00, 78.3588 + 0x00,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d, 78.3589 + 0x00,0xd3,0x10,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0x0d, 78.3590 + 0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0xd1,0x08,0x10, 78.3591 + 0x04,0x0d,0x00,0x00,0x00,0x10,0x04,0x0d,0x00,0x00,0x00,0xd0,0x56,0xcf,0x86,0xd5, 78.3592 + 0x20,0xd4,0x14,0x53,0x04,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10,0x04,0x00, 78.3593 + 0x00,0x0d,0x00,0x0d,0x00,0x53,0x04,0x0d,0x00,0x12,0x04,0x0d,0x00,0x00,0x00,0xd4, 78.3594 + 0x28,0xd3,0x18,0xd2,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x91, 78.3595 + 0x08,0x10,0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x92,0x0c,0x51,0x04,0x0d,0x00,0x10, 78.3596 + 0x04,0x00,0x00,0x0d,0x00,0x0d,0x00,0x53,0x04,0x0d,0x00,0x12,0x04,0x0d,0x00,0x00, 78.3597 + 0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x93,0x0c,0x92,0x08,0x11, 78.3598 + 0x04,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86,0xe5, 78.3599 + 0x96,0x05,0xe4,0x28,0x03,0xe3,0xed,0x01,0xd2,0xa0,0xd1,0x1c,0xd0,0x16,0xcf,0x86, 78.3600 + 0x55,0x04,0x0a,0x00,0x94,0x0c,0x53,0x04,0x0a,0x00,0x12,0x04,0x0a,0x00,0x00,0x00, 78.3601 + 0x0a,0x00,0xcf,0x06,0x0a,0x00,0xd0,0x46,0xcf,0x86,0xd5,0x10,0x54,0x04,0x0a,0x00, 78.3602 + 0x93,0x08,0x12,0x04,0x0a,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x0c,0x00, 78.3603 + 0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00,0xd3,0x10, 78.3604 + 0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x52,0x04, 78.3605 + 0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,0xcf,0x86,0xd5,0x28, 78.3606 + 0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00, 78.3607 + 0x0c,0x00,0x0c,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x00,0x00,0x0c,0x00, 78.3608 + 0x0c,0x00,0x0c,0x00,0x0c,0x00,0x54,0x04,0x10,0x00,0x93,0x0c,0x52,0x04,0x10,0x00, 78.3609 + 0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd1,0xe4,0xd0,0x5a,0xcf,0x86,0xd5,0x20, 78.3610 + 0x94,0x1c,0x53,0x04,0x0b,0x00,0xd2,0x0c,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00, 78.3611 + 0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0xd4,0x14, 78.3612 + 0x53,0x04,0x0b,0x00,0x52,0x04,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04,0x0b,0x00, 78.3613 + 0x14,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x0c,0x00, 78.3614 + 0x0c,0x00,0x52,0x04,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x10,0x04, 78.3615 + 0x0c,0x00,0x0b,0x00,0xcf,0x86,0xd5,0x4c,0xd4,0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04, 78.3616 + 0x0c,0x00,0x10,0x04,0x0b,0x00,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0b,0x00, 78.3617 + 0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0b,0x00,0x51,0x04,0x0b,0x00,0x10,0x04, 78.3618 + 0x0b,0x00,0x0c,0x00,0xd3,0x10,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04, 78.3619 + 0x0c,0x00,0x0b,0x00,0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00, 78.3620 + 0x0b,0x00,0xd4,0x18,0x53,0x04,0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0d,0x00, 78.3621 + 0x91,0x08,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x53,0x04,0x0c,0x00,0xd2,0x10, 78.3622 + 0xd1,0x08,0x10,0x04,0x0c,0x00,0x0b,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0xd1,0x08, 78.3623 + 0x10,0x04,0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x0b,0x00,0xd0,0x4e,0xcf,0x86, 78.3624 + 0xd5,0x34,0xd4,0x14,0x53,0x04,0x0c,0x00,0xd2,0x08,0x11,0x04,0x0c,0x00,0x0b,0x00, 78.3625 + 0x11,0x04,0x0b,0x00,0x0c,0x00,0xd3,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0b,0x00, 78.3626 + 0x0c,0x00,0x0c,0x00,0x0c,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00, 78.3627 + 0x12,0x00,0x12,0x00,0x94,0x14,0x53,0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x91,0x08, 78.3628 + 0x10,0x04,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00, 78.3629 + 0x94,0x10,0x93,0x0c,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x0c,0x00,0x0c,0x00, 78.3630 + 0x0c,0x00,0xd2,0x7e,0xd1,0x78,0xd0,0x3e,0xcf,0x86,0xd5,0x1c,0x94,0x18,0x93,0x14, 78.3631 + 0x92,0x10,0xd1,0x08,0x10,0x04,0x0b,0x00,0x0c,0x00,0x10,0x04,0x0c,0x00,0x00,0x00, 78.3632 + 0x00,0x00,0x00,0x00,0x0b,0x00,0x54,0x04,0x0b,0x00,0xd3,0x0c,0x92,0x08,0x11,0x04, 78.3633 + 0x0b,0x00,0x0c,0x00,0x0c,0x00,0x92,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00, 78.3634 + 0x12,0x00,0x00,0x00,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x53,0x04,0x0b,0x00,0x92,0x0c, 78.3635 + 0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x0c,0x92,0x08, 78.3636 + 0x11,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x10,0x93,0x0c,0x52,0x04, 78.3637 + 0x13,0x00,0x11,0x04,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00, 78.3638 + 0xd1,0x58,0xd0,0x3a,0xcf,0x86,0x55,0x04,0x0c,0x00,0xd4,0x20,0xd3,0x10,0x92,0x0c, 78.3639 + 0x91,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x52,0x04,0x10,0x00, 78.3640 + 0x91,0x08,0x10,0x04,0x10,0x00,0x11,0x00,0x11,0x00,0x93,0x10,0x52,0x04,0x0c,0x00, 78.3641 + 0x51,0x04,0x0c,0x00,0x10,0x04,0x10,0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x55,0x04, 78.3642 + 0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x52,0x04,0x0c,0x00,0x91,0x08, 78.3643 + 0x10,0x04,0x0c,0x00,0x10,0x00,0x11,0x00,0xd0,0x16,0xcf,0x86,0x95,0x10,0x54,0x04, 78.3644 + 0x0c,0x00,0x93,0x08,0x12,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x0c,0x00,0xcf,0x86, 78.3645 + 0xd5,0x34,0xd4,0x28,0xd3,0x10,0x52,0x04,0x0c,0x00,0x91,0x08,0x10,0x04,0x0c,0x00, 78.3646 + 0x10,0x00,0x0c,0x00,0xd2,0x0c,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00, 78.3647 + 0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0x93,0x08,0x12,0x04,0x11,0x00, 78.3648 + 0x10,0x00,0x10,0x00,0x54,0x04,0x0c,0x00,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04, 78.3649 + 0x0c,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x11,0x00,0xd3,0xfc,0xd2,0x6c,0xd1,0x3c, 78.3650 + 0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00, 78.3651 + 0x52,0x04,0x0c,0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x10,0x00,0xcf,0x86, 78.3652 + 0x95,0x18,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x10,0x00, 78.3653 + 0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xd0,0x06,0xcf,0x06,0x0c,0x00, 78.3654 + 0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0xd2,0x0c, 78.3655 + 0x91,0x08,0x10,0x04,0x10,0x00,0x0c,0x00,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00, 78.3656 + 0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0xd1,0x54,0xd0,0x1a,0xcf,0x86,0x55,0x04, 78.3657 + 0x0c,0x00,0x54,0x04,0x0c,0x00,0x53,0x04,0x0c,0x00,0x52,0x04,0x0c,0x00,0x11,0x04, 78.3658 + 0x0c,0x00,0x10,0x00,0xcf,0x86,0xd5,0x1c,0x94,0x18,0xd3,0x08,0x12,0x04,0x0d,0x00, 78.3659 + 0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04,0x10,0x00,0x11,0x00,0x11,0x00, 78.3660 + 0x0c,0x00,0xd4,0x08,0x13,0x04,0x0c,0x00,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c, 78.3661 + 0x51,0x04,0x10,0x00,0x10,0x04,0x12,0x00,0x10,0x00,0x10,0x00,0xd0,0x1e,0xcf,0x86, 78.3662 + 0x55,0x04,0x10,0x00,0x94,0x14,0x93,0x10,0x52,0x04,0x10,0x00,0x91,0x08,0x10,0x04, 78.3663 + 0x12,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xcf,0x86,0x55,0x04,0x10,0x00, 78.3664 + 0x54,0x04,0x10,0x00,0x53,0x04,0x10,0x00,0x92,0x0c,0x51,0x04,0x10,0x00,0x10,0x04, 78.3665 + 0x10,0x00,0x0c,0x00,0x0c,0x00,0xe2,0x19,0x01,0xd1,0xa8,0xd0,0x7e,0xcf,0x86,0xd5, 78.3666 + 0x4c,0xd4,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x0d,0x00,0x0c,0x00,0x0c, 78.3667 + 0x00,0x0c,0x00,0x0c,0x00,0xd3,0x1c,0xd2,0x0c,0x91,0x08,0x10,0x04,0x0c,0x00,0x0d, 78.3668 + 0x00,0x0c,0x00,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0d, 78.3669 + 0x00,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0c,0x00,0x0d,0x00,0x10,0x04,0x0c,0x00,0x0d, 78.3670 + 0x00,0x51,0x04,0x0c,0x00,0x10,0x04,0x0c,0x00,0x0d,0x00,0xd4,0x1c,0xd3,0x0c,0x52, 78.3671 + 0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x0d,0x00,0x52,0x04,0x0c,0x00,0x91,0x08,0x10, 78.3672 + 0x04,0x0d,0x00,0x0c,0x00,0x0d,0x00,0x93,0x10,0x52,0x04,0x0c,0x00,0x91,0x08,0x10, 78.3673 + 0x04,0x0d,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0xcf,0x86,0x95,0x24,0x94,0x20,0x93, 78.3674 + 0x1c,0xd2,0x10,0xd1,0x08,0x10,0x04,0x0c,0x00,0x10,0x00,0x10,0x04,0x10,0x00,0x11, 78.3675 + 0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x10,0x00,0x10, 78.3676 + 0x00,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0xd5,0x30,0xd4,0x10,0x93,0x0c,0x52, 78.3677 + 0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x10,0x00,0x10,0x00,0x93,0x1c,0xd2,0x10,0xd1, 78.3678 + 0x08,0x10,0x04,0x11,0x00,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0x91,0x08,0x10, 78.3679 + 0x04,0x13,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0xd4,0x14,0x53,0x04,0x10,0x00,0x52, 78.3680 + 0x04,0x10,0x00,0x91,0x08,0x10,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0xd3,0x10,0x52, 78.3681 + 0x04,0x10,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0x92,0x10,0xd1, 78.3682 + 0x08,0x10,0x04,0x13,0x00,0x14,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd1, 78.3683 + 0x1c,0xd0,0x06,0xcf,0x06,0x0c,0x00,0xcf,0x86,0x55,0x04,0x0c,0x00,0x54,0x04,0x0c, 78.3684 + 0x00,0x93,0x08,0x12,0x04,0x0c,0x00,0x00,0x00,0x00,0x00,0xd0,0x06,0xcf,0x06,0x10, 78.3685 + 0x00,0xcf,0x86,0xd5,0x24,0x54,0x04,0x10,0x00,0xd3,0x10,0x52,0x04,0x10,0x00,0x91, 78.3686 + 0x08,0x10,0x04,0x10,0x00,0x14,0x00,0x14,0x00,0x92,0x0c,0x91,0x08,0x10,0x04,0x14, 78.3687 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x0c,0x53,0x04,0x15,0x00,0x12,0x04,0x15, 78.3688 + 0x00,0x00,0x00,0x00,0x00,0xe4,0x40,0x02,0xe3,0xc9,0x01,0xd2,0x5c,0xd1,0x34,0xd0, 78.3689 + 0x16,0xcf,0x86,0x95,0x10,0x94,0x0c,0x53,0x04,0x10,0x00,0x12,0x04,0x10,0x00,0x00, 78.3690 + 0x00,0x10,0x00,0x10,0x00,0xcf,0x86,0x95,0x18,0xd4,0x08,0x13,0x04,0x10,0x00,0x00, 78.3691 + 0x00,0x53,0x04,0x10,0x00,0x92,0x08,0x11,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x10, 78.3692 + 0x00,0xd0,0x22,0xcf,0x86,0xd5,0x0c,0x94,0x08,0x13,0x04,0x10,0x00,0x00,0x00,0x10, 78.3693 + 0x00,0x94,0x10,0x53,0x04,0x10,0x00,0x52,0x04,0x10,0x00,0x11,0x04,0x10,0x00,0x00, 78.3694 + 0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xd1,0xc0,0xd0,0x5e,0xcf,0x86,0xd5,0x30,0xd4, 78.3695 + 0x14,0x53,0x04,0x13,0x00,0x52,0x04,0x13,0x00,0x91,0x08,0x10,0x04,0x00,0x00,0x15, 78.3696 + 0x00,0x15,0x00,0x53,0x04,0x11,0x00,0xd2,0x0c,0x91,0x08,0x10,0x04,0x11,0x00,0x12, 78.3697 + 0x00,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13,0x00,0xd4,0x08,0x13, 78.3698 + 0x04,0x12,0x00,0x13,0x00,0xd3,0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x12,0x00,0x13, 78.3699 + 0x00,0x10,0x04,0x13,0x00,0x12,0x00,0x12,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12, 78.3700 + 0x00,0x10,0x04,0x12,0x00,0x15,0x00,0xcf,0x86,0xd5,0x28,0xd4,0x14,0x53,0x04,0x12, 78.3701 + 0x00,0x52,0x04,0x12,0x00,0x91,0x08,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x53, 78.3702 + 0x04,0x12,0x00,0x52,0x04,0x12,0x00,0x51,0x04,0x12,0x00,0x10,0x04,0x12,0x00,0x13, 78.3703 + 0x00,0xd4,0x0c,0x53,0x04,0x13,0x00,0x12,0x04,0x13,0x00,0x14,0x00,0xd3,0x1c,0xd2, 78.3704 + 0x10,0xd1,0x08,0x10,0x04,0x14,0x00,0x15,0x00,0x10,0x04,0x00,0x00,0x14,0x00,0x51, 78.3705 + 0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x00,0x00,0x10, 78.3706 + 0x04,0x14,0x00,0x15,0x00,0x14,0x00,0xd0,0x62,0xcf,0x86,0xd5,0x24,0xd4,0x14,0x93, 78.3707 + 0x10,0x52,0x04,0x11,0x00,0x91,0x08,0x10,0x04,0x11,0x00,0x12,0x00,0x12,0x00,0x12, 78.3708 + 0x00,0x93,0x0c,0x92,0x08,0x11,0x04,0x12,0x00,0x13,0x00,0x13,0x00,0x14,0x00,0xd4, 78.3709 + 0x2c,0xd3,0x18,0xd2,0x0c,0x51,0x04,0x14,0x00,0x10,0x04,0x14,0x00,0x00,0x00,0x91, 78.3710 + 0x08,0x10,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10, 78.3711 + 0x04,0x15,0x00,0x00,0x00,0x11,0x04,0x00,0x00,0x15,0x00,0x53,0x04,0x14,0x00,0x92, 78.3712 + 0x08,0x11,0x04,0x14,0x00,0x15,0x00,0x15,0x00,0xcf,0x86,0xd5,0x30,0x94,0x2c,0xd3, 78.3713 + 0x14,0x92,0x10,0xd1,0x08,0x10,0x04,0x11,0x00,0x14,0x00,0x10,0x04,0x14,0x00,0x15, 78.3714 + 0x00,0x15,0x00,0xd2,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x91, 78.3715 + 0x08,0x10,0x04,0x00,0x00,0x15,0x00,0x15,0x00,0x13,0x00,0x94,0x14,0x93,0x10,0x52, 78.3716 + 0x04,0x13,0x00,0x51,0x04,0x13,0x00,0x10,0x04,0x13,0x00,0x14,0x00,0x14,0x00,0x14, 78.3717 + 0x00,0xd2,0x70,0xd1,0x40,0xd0,0x06,0xcf,0x06,0x15,0x00,0xcf,0x86,0xd5,0x10,0x54, 78.3718 + 0x04,0x15,0x00,0x93,0x08,0x12,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0xd4,0x10,0x53, 78.3719 + 0x04,0x14,0x00,0x52,0x04,0x14,0x00,0x11,0x04,0x14,0x00,0x00,0x00,0xd3,0x08,0x12, 78.3720 + 0x04,0x15,0x00,0x00,0x00,0x92,0x0c,0x51,0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00, 78.3721 + 0x00,0x00,0x00,0xd0,0x2a,0xcf,0x86,0x95,0x24,0xd4,0x14,0x93,0x10,0x92,0x0c,0x51, 78.3722 + 0x04,0x15,0x00,0x10,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x93,0x0c,0x52, 78.3723 + 0x04,0x15,0x00,0x11,0x04,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00, 78.3724 + 0x00,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00, 78.3725 + 0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55, 78.3726 + 0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11, 78.3727 + 0x04,0x00,0x00,0x02,0x00,0xe4,0xf9,0x12,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00, 78.3728 + 0xd2,0xc2,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x05,0x00,0xd0,0x44,0xcf,0x86,0xd5,0x3c, 78.3729 + 0xd4,0x06,0xcf,0x06,0x05,0x00,0xd3,0x06,0xcf,0x06,0x05,0x00,0xd2,0x2a,0xd1,0x06, 78.3730 + 0xcf,0x06,0x05,0x00,0xd0,0x06,0xcf,0x06,0x05,0x00,0xcf,0x86,0x95,0x18,0x54,0x04, 78.3731 + 0x05,0x00,0x93,0x10,0x52,0x04,0x05,0x00,0x51,0x04,0x05,0x00,0x10,0x04,0x05,0x00, 78.3732 + 0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x0b,0x00,0xcf,0x06,0x0b,0x00,0xcf,0x86, 78.3733 + 0xd5,0x3c,0xd4,0x06,0xcf,0x06,0x0b,0x00,0xd3,0x06,0xcf,0x06,0x0b,0x00,0xd2,0x06, 78.3734 + 0xcf,0x06,0x0b,0x00,0xd1,0x24,0xd0,0x1e,0xcf,0x86,0x55,0x04,0x0b,0x00,0x54,0x04, 78.3735 + 0x0b,0x00,0x93,0x10,0x52,0x04,0x0b,0x00,0x91,0x08,0x10,0x04,0x0b,0x00,0x00,0x00, 78.3736 + 0x00,0x00,0x00,0x00,0xcf,0x06,0x0c,0x00,0xcf,0x06,0x0c,0x00,0xd4,0x32,0xd3,0x2c, 78.3737 + 0xd2,0x26,0xd1,0x20,0xd0,0x1a,0xcf,0x86,0x95,0x14,0x54,0x04,0x0c,0x00,0x53,0x04, 78.3738 + 0x0c,0x00,0x52,0x04,0x0c,0x00,0x11,0x04,0x0c,0x00,0x00,0x00,0x11,0x00,0xcf,0x06, 78.3739 + 0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06,0x11,0x00,0xcf,0x06, 78.3740 + 0x11,0x00,0xd1,0x48,0xd0,0x40,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x11,0x00,0xd4,0x06, 78.3741 + 0xcf,0x06,0x11,0x00,0xd3,0x06,0xcf,0x06,0x11,0x00,0xd2,0x26,0xd1,0x06,0xcf,0x06, 78.3742 + 0x11,0x00,0xd0,0x1a,0xcf,0x86,0x55,0x04,0x11,0x00,0x94,0x10,0x93,0x0c,0x92,0x08, 78.3743 + 0x11,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0xcf,0x06,0x13,0x00, 78.3744 + 0xcf,0x06,0x13,0x00,0xcf,0x86,0xcf,0x06,0x13,0x00,0xd0,0x44,0xcf,0x86,0xd5,0x06, 78.3745 + 0xcf,0x06,0x13,0x00,0xd4,0x36,0xd3,0x06,0xcf,0x06,0x13,0x00,0xd2,0x06,0xcf,0x06, 78.3746 + 0x13,0x00,0xd1,0x06,0xcf,0x06,0x13,0x00,0xd0,0x06,0xcf,0x06,0x13,0x00,0xcf,0x86, 78.3747 + 0x55,0x04,0x13,0x00,0x94,0x14,0x93,0x10,0x92,0x0c,0x91,0x08,0x10,0x04,0x13,0x00, 78.3748 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x86, 78.3749 + 0xd5,0x06,0xcf,0x06,0x00,0x00,0xe4,0x68,0x11,0xe3,0x51,0x10,0xe2,0x17,0x08,0xe1, 78.3750 + 0x06,0x04,0xe0,0x03,0x02,0xcf,0x86,0xe5,0x06,0x01,0xd4,0x82,0xd3,0x41,0xd2,0x21, 78.3751 + 0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,0xb8,0xbd,0x00,0x05,0xff,0xe4,0xb8,0xb8,0x00, 78.3752 + 0x10,0x08,0x05,0xff,0xe4,0xb9,0x81,0x00,0x05,0xff,0xf0,0xa0,0x84,0xa2,0x00,0xd1, 78.3753 + 0x10,0x10,0x08,0x05,0xff,0xe4,0xbd,0xa0,0x00,0x05,0xff,0xe4,0xbe,0xae,0x00,0x10, 78.3754 + 0x08,0x05,0xff,0xe4,0xbe,0xbb,0x00,0x05,0xff,0xe5,0x80,0x82,0x00,0xd2,0x20,0xd1, 78.3755 + 0x10,0x10,0x08,0x05,0xff,0xe5,0x81,0xba,0x00,0x05,0xff,0xe5,0x82,0x99,0x00,0x10, 78.3756 + 0x08,0x05,0xff,0xe5,0x83,0xa7,0x00,0x05,0xff,0xe5,0x83,0x8f,0x00,0xd1,0x11,0x10, 78.3757 + 0x08,0x05,0xff,0xe3,0x92,0x9e,0x00,0x05,0xff,0xf0,0xa0,0x98,0xba,0x00,0x10,0x08, 78.3758 + 0x05,0xff,0xe5,0x85,0x8d,0x00,0x05,0xff,0xe5,0x85,0x94,0x00,0xd3,0x42,0xd2,0x21, 78.3759 + 0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x85,0xa4,0x00,0x05,0xff,0xe5,0x85,0xb7,0x00, 78.3760 + 0x10,0x09,0x05,0xff,0xf0,0xa0,0x94,0x9c,0x00,0x05,0xff,0xe3,0x92,0xb9,0x00,0xd1, 78.3761 + 0x10,0x10,0x08,0x05,0xff,0xe5,0x85,0xa7,0x00,0x05,0xff,0xe5,0x86,0x8d,0x00,0x10, 78.3762 + 0x09,0x05,0xff,0xf0,0xa0,0x95,0x8b,0x00,0x05,0xff,0xe5,0x86,0x97,0x00,0xd2,0x20, 78.3763 + 0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x86,0xa4,0x00,0x05,0xff,0xe4,0xbb,0x8c,0x00, 78.3764 + 0x10,0x08,0x05,0xff,0xe5,0x86,0xac,0x00,0x05,0xff,0xe5,0x86,0xb5,0x00,0xd1,0x11, 78.3765 + 0x10,0x09,0x05,0xff,0xf0,0xa9,0x87,0x9f,0x00,0x05,0xff,0xe5,0x87,0xb5,0x00,0x10, 78.3766 + 0x08,0x05,0xff,0xe5,0x88,0x83,0x00,0x05,0xff,0xe3,0x93,0x9f,0x00,0xd4,0x80,0xd3, 78.3767 + 0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x88,0xbb,0x00,0x05,0xff,0xe5, 78.3768 + 0x89,0x86,0x00,0x10,0x08,0x05,0xff,0xe5,0x89,0xb2,0x00,0x05,0xff,0xe5,0x89,0xb7, 78.3769 + 0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe3,0x94,0x95,0x00,0x05,0xff,0xe5,0x8b,0x87, 78.3770 + 0x00,0x10,0x08,0x05,0xff,0xe5,0x8b,0x89,0x00,0x05,0xff,0xe5,0x8b,0xa4,0x00,0xd2, 78.3771 + 0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x8b,0xba,0x00,0x05,0xff,0xe5,0x8c,0x85, 78.3772 + 0x00,0x10,0x08,0x05,0xff,0xe5,0x8c,0x86,0x00,0x05,0xff,0xe5,0x8c,0x97,0x00,0xd1, 78.3773 + 0x10,0x10,0x08,0x05,0xff,0xe5,0x8d,0x89,0x00,0x05,0xff,0xe5,0x8d,0x91,0x00,0x10, 78.3774 + 0x08,0x05,0xff,0xe5,0x8d,0x9a,0x00,0x05,0xff,0xe5,0x8d,0xb3,0x00,0xd3,0x39,0xd2, 78.3775 + 0x18,0x91,0x10,0x10,0x08,0x05,0xff,0xe5,0x8d,0xbd,0x00,0x05,0xff,0xe5,0x8d,0xbf, 78.3776 + 0x00,0x05,0xff,0xe5,0x8d,0xbf,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa0,0xa8, 78.3777 + 0xac,0x00,0x05,0xff,0xe7,0x81,0xb0,0x00,0x10,0x08,0x05,0xff,0xe5,0x8f,0x8a,0x00, 78.3778 + 0x05,0xff,0xe5,0x8f,0x9f,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa0, 78.3779 + 0xad,0xa3,0x00,0x05,0xff,0xe5,0x8f,0xab,0x00,0x10,0x08,0x05,0xff,0xe5,0x8f,0xb1, 78.3780 + 0x00,0x05,0xff,0xe5,0x90,0x86,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x92,0x9e, 78.3781 + 0x00,0x05,0xff,0xe5,0x90,0xb8,0x00,0x10,0x08,0x05,0xff,0xe5,0x91,0x88,0x00,0x05, 78.3782 + 0xff,0xe5,0x91,0xa8,0x00,0xcf,0x86,0xe5,0x02,0x01,0xd4,0x80,0xd3,0x40,0xd2,0x20, 78.3783 + 0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0x92,0xa2,0x00,0x05,0xff,0xe5,0x93,0xb6,0x00, 78.3784 + 0x10,0x08,0x05,0xff,0xe5,0x94,0x90,0x00,0x05,0xff,0xe5,0x95,0x93,0x00,0xd1,0x10, 78.3785 + 0x10,0x08,0x05,0xff,0xe5,0x95,0xa3,0x00,0x05,0xff,0xe5,0x96,0x84,0x00,0x10,0x08, 78.3786 + 0x05,0xff,0xe5,0x96,0x84,0x00,0x05,0xff,0xe5,0x96,0x99,0x00,0xd2,0x20,0xd1,0x10, 78.3787 + 0x10,0x08,0x05,0xff,0xe5,0x96,0xab,0x00,0x05,0xff,0xe5,0x96,0xb3,0x00,0x10,0x08, 78.3788 + 0x05,0xff,0xe5,0x97,0x82,0x00,0x05,0xff,0xe5,0x9c,0x96,0x00,0xd1,0x10,0x10,0x08, 78.3789 + 0x05,0xff,0xe5,0x98,0x86,0x00,0x05,0xff,0xe5,0x9c,0x97,0x00,0x10,0x08,0x05,0xff, 78.3790 + 0xe5,0x99,0x91,0x00,0x05,0xff,0xe5,0x99,0xb4,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10, 78.3791 + 0x10,0x08,0x05,0xff,0xe5,0x88,0x87,0x00,0x05,0xff,0xe5,0xa3,0xae,0x00,0x10,0x08, 78.3792 + 0x05,0xff,0xe5,0x9f,0x8e,0x00,0x05,0xff,0xe5,0x9f,0xb4,0x00,0xd1,0x10,0x10,0x08, 78.3793 + 0x05,0xff,0xe5,0xa0,0x8d,0x00,0x05,0xff,0xe5,0x9e,0x8b,0x00,0x10,0x08,0x05,0xff, 78.3794 + 0xe5,0xa0,0xb2,0x00,0x05,0xff,0xe5,0xa0,0xb1,0x00,0xd2,0x21,0xd1,0x11,0x10,0x08, 78.3795 + 0x05,0xff,0xe5,0xa2,0xac,0x00,0x05,0xff,0xf0,0xa1,0x93,0xa4,0x00,0x10,0x08,0x05, 78.3796 + 0xff,0xe5,0xa3,0xb2,0x00,0x05,0xff,0xe5,0xa3,0xb7,0x00,0xd1,0x10,0x10,0x08,0x05, 78.3797 + 0xff,0xe5,0xa4,0x86,0x00,0x05,0xff,0xe5,0xa4,0x9a,0x00,0x10,0x08,0x05,0xff,0xe5, 78.3798 + 0xa4,0xa2,0x00,0x05,0xff,0xe5,0xa5,0xa2,0x00,0xd4,0x7b,0xd3,0x42,0xd2,0x22,0xd1, 78.3799 + 0x12,0x10,0x09,0x05,0xff,0xf0,0xa1,0x9a,0xa8,0x00,0x05,0xff,0xf0,0xa1,0x9b,0xaa, 78.3800 + 0x00,0x10,0x08,0x05,0xff,0xe5,0xa7,0xac,0x00,0x05,0xff,0xe5,0xa8,0x9b,0x00,0xd1, 78.3801 + 0x10,0x10,0x08,0x05,0xff,0xe5,0xa8,0xa7,0x00,0x05,0xff,0xe5,0xa7,0x98,0x00,0x10, 78.3802 + 0x08,0x05,0xff,0xe5,0xa9,0xa6,0x00,0x05,0xff,0xe3,0x9b,0xae,0x00,0xd2,0x18,0x91, 78.3803 + 0x10,0x10,0x08,0x05,0xff,0xe3,0x9b,0xbc,0x00,0x05,0xff,0xe5,0xac,0x88,0x00,0x05, 78.3804 + 0xff,0xe5,0xac,0xbe,0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa1,0xa7,0x88,0x00, 78.3805 + 0x05,0xff,0xe5,0xaf,0x83,0x00,0x10,0x08,0x05,0xff,0xe5,0xaf,0x98,0x00,0x05,0xff, 78.3806 + 0xe5,0xaf,0xa7,0x00,0xd3,0x41,0xd2,0x21,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xaf, 78.3807 + 0xb3,0x00,0x05,0xff,0xf0,0xa1,0xac,0x98,0x00,0x10,0x08,0x05,0xff,0xe5,0xaf,0xbf, 78.3808 + 0x00,0x05,0xff,0xe5,0xb0,0x86,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xbd,0x93, 78.3809 + 0x00,0x05,0xff,0xe5,0xb0,0xa2,0x00,0x10,0x08,0x05,0xff,0xe3,0x9e,0x81,0x00,0x05, 78.3810 + 0xff,0xe5,0xb1,0xa0,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb1,0xae, 78.3811 + 0x00,0x05,0xff,0xe5,0xb3,0x80,0x00,0x10,0x08,0x05,0xff,0xe5,0xb2,0x8d,0x00,0x05, 78.3812 + 0xff,0xf0,0xa1,0xb7,0xa4,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xb5,0x83,0x00, 78.3813 + 0x05,0xff,0xf0,0xa1,0xb7,0xa6,0x00,0x10,0x08,0x05,0xff,0xe5,0xb5,0xae,0x00,0x05, 78.3814 + 0xff,0xe5,0xb5,0xab,0x00,0xe0,0x04,0x02,0xcf,0x86,0xd5,0xfe,0xd4,0x82,0xd3,0x40, 78.3815 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb5,0xbc,0x00,0x05,0xff,0xe5,0xb7, 78.3816 + 0xa1,0x00,0x10,0x08,0x05,0xff,0xe5,0xb7,0xa2,0x00,0x05,0xff,0xe3,0xa0,0xaf,0x00, 78.3817 + 0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb7,0xbd,0x00,0x05,0xff,0xe5,0xb8,0xa8,0x00, 78.3818 + 0x10,0x08,0x05,0xff,0xe5,0xb8,0xbd,0x00,0x05,0xff,0xe5,0xb9,0xa9,0x00,0xd2,0x21, 78.3819 + 0xd1,0x11,0x10,0x08,0x05,0xff,0xe3,0xa1,0xa2,0x00,0x05,0xff,0xf0,0xa2,0x86,0x83, 78.3820 + 0x00,0x10,0x08,0x05,0xff,0xe3,0xa1,0xbc,0x00,0x05,0xff,0xe5,0xba,0xb0,0x00,0xd1, 78.3821 + 0x10,0x10,0x08,0x05,0xff,0xe5,0xba,0xb3,0x00,0x05,0xff,0xe5,0xba,0xb6,0x00,0x10, 78.3822 + 0x08,0x05,0xff,0xe5,0xbb,0x8a,0x00,0x05,0xff,0xf0,0xaa,0x8e,0x92,0x00,0xd3,0x3b, 78.3823 + 0xd2,0x22,0xd1,0x11,0x10,0x08,0x05,0xff,0xe5,0xbb,0xbe,0x00,0x05,0xff,0xf0,0xa2, 78.3824 + 0x8c,0xb1,0x00,0x10,0x09,0x05,0xff,0xf0,0xa2,0x8c,0xb1,0x00,0x05,0xff,0xe8,0x88, 78.3825 + 0x81,0x00,0x51,0x08,0x05,0xff,0xe5,0xbc,0xa2,0x00,0x10,0x08,0x05,0xff,0xe3,0xa3, 78.3826 + 0x87,0x00,0x05,0xff,0xf0,0xa3,0x8a,0xb8,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05, 78.3827 + 0xff,0xf0,0xa6,0x87,0x9a,0x00,0x05,0xff,0xe5,0xbd,0xa2,0x00,0x10,0x08,0x05,0xff, 78.3828 + 0xe5,0xbd,0xab,0x00,0x05,0xff,0xe3,0xa3,0xa3,0x00,0xd1,0x10,0x10,0x08,0x05,0xff, 78.3829 + 0xe5,0xbe,0x9a,0x00,0x05,0xff,0xe5,0xbf,0x8d,0x00,0x10,0x08,0x05,0xff,0xe5,0xbf, 78.3830 + 0x97,0x00,0x05,0xff,0xe5,0xbf,0xb9,0x00,0xd4,0x81,0xd3,0x41,0xd2,0x20,0xd1,0x10, 78.3831 + 0x10,0x08,0x05,0xff,0xe6,0x82,0x81,0x00,0x05,0xff,0xe3,0xa4,0xba,0x00,0x10,0x08, 78.3832 + 0x05,0xff,0xe3,0xa4,0x9c,0x00,0x05,0xff,0xe6,0x82,0x94,0x00,0xd1,0x11,0x10,0x09, 78.3833 + 0x05,0xff,0xf0,0xa2,0x9b,0x94,0x00,0x05,0xff,0xe6,0x83,0x87,0x00,0x10,0x08,0x05, 78.3834 + 0xff,0xe6,0x85,0x88,0x00,0x05,0xff,0xe6,0x85,0x8c,0x00,0xd2,0x20,0xd1,0x10,0x10, 78.3835 + 0x08,0x05,0xff,0xe6,0x85,0x8e,0x00,0x05,0xff,0xe6,0x85,0x8c,0x00,0x10,0x08,0x05, 78.3836 + 0xff,0xe6,0x85,0xba,0x00,0x05,0xff,0xe6,0x86,0x8e,0x00,0xd1,0x10,0x10,0x08,0x05, 78.3837 + 0xff,0xe6,0x86,0xb2,0x00,0x05,0xff,0xe6,0x86,0xa4,0x00,0x10,0x08,0x05,0xff,0xe6, 78.3838 + 0x86,0xaf,0x00,0x05,0xff,0xe6,0x87,0x9e,0x00,0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10, 78.3839 + 0x08,0x05,0xff,0xe6,0x87,0xb2,0x00,0x05,0xff,0xe6,0x87,0xb6,0x00,0x10,0x08,0x05, 78.3840 + 0xff,0xe6,0x88,0x90,0x00,0x05,0xff,0xe6,0x88,0x9b,0x00,0xd1,0x10,0x10,0x08,0x05, 78.3841 + 0xff,0xe6,0x89,0x9d,0x00,0x05,0xff,0xe6,0x8a,0xb1,0x00,0x10,0x08,0x05,0xff,0xe6, 78.3842 + 0x8b,0x94,0x00,0x05,0xff,0xe6,0x8d,0x90,0x00,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05, 78.3843 + 0xff,0xf0,0xa2,0xac,0x8c,0x00,0x05,0xff,0xe6,0x8c,0xbd,0x00,0x10,0x08,0x05,0xff, 78.3844 + 0xe6,0x8b,0xbc,0x00,0x05,0xff,0xe6,0x8d,0xa8,0x00,0xd1,0x10,0x10,0x08,0x05,0xff, 78.3845 + 0xe6,0x8e,0x83,0x00,0x05,0xff,0xe6,0x8f,0xa4,0x00,0x10,0x09,0x05,0xff,0xf0,0xa2, 78.3846 + 0xaf,0xb1,0x00,0x05,0xff,0xe6,0x90,0xa2,0x00,0xcf,0x86,0xe5,0x03,0x01,0xd4,0x81, 78.3847 + 0xd3,0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x8f,0x85,0x00,0x05,0xff, 78.3848 + 0xe6,0x8e,0xa9,0x00,0x10,0x08,0x05,0xff,0xe3,0xa8,0xae,0x00,0x05,0xff,0xe6,0x91, 78.3849 + 0xa9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x91,0xbe,0x00,0x05,0xff,0xe6,0x92, 78.3850 + 0x9d,0x00,0x10,0x08,0x05,0xff,0xe6,0x91,0xb7,0x00,0x05,0xff,0xe3,0xa9,0xac,0x00, 78.3851 + 0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x95,0x8f,0x00,0x05,0xff,0xe6,0x95, 78.3852 + 0xac,0x00,0x10,0x09,0x05,0xff,0xf0,0xa3,0x80,0x8a,0x00,0x05,0xff,0xe6,0x97,0xa3, 78.3853 + 0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9b,0xb8,0x00,0x05,0xff,0xe6,0x99,0x89, 78.3854 + 0x00,0x10,0x08,0x05,0xff,0xe3,0xac,0x99,0x00,0x05,0xff,0xe6,0x9a,0x91,0x00,0xd3, 78.3855 + 0x40,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe3,0xac,0x88,0x00,0x05,0xff,0xe3, 78.3856 + 0xab,0xa4,0x00,0x10,0x08,0x05,0xff,0xe5,0x86,0x92,0x00,0x05,0xff,0xe5,0x86,0x95, 78.3857 + 0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9c,0x80,0x00,0x05,0xff,0xe6,0x9a,0x9c, 78.3858 + 0x00,0x10,0x08,0x05,0xff,0xe8,0x82,0xad,0x00,0x05,0xff,0xe4,0x8f,0x99,0x00,0xd2, 78.3859 + 0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9c,0x97,0x00,0x05,0xff,0xe6,0x9c,0x9b, 78.3860 + 0x00,0x10,0x08,0x05,0xff,0xe6,0x9c,0xa1,0x00,0x05,0xff,0xe6,0x9d,0x9e,0x00,0xd1, 78.3861 + 0x11,0x10,0x08,0x05,0xff,0xe6,0x9d,0x93,0x00,0x05,0xff,0xf0,0xa3,0x8f,0x83,0x00, 78.3862 + 0x10,0x08,0x05,0xff,0xe3,0xad,0x89,0x00,0x05,0xff,0xe6,0x9f,0xba,0x00,0xd4,0x82, 78.3863 + 0xd3,0x41,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0x9e,0x85,0x00,0x05,0xff, 78.3864 + 0xe6,0xa1,0x92,0x00,0x10,0x08,0x05,0xff,0xe6,0xa2,0x85,0x00,0x05,0xff,0xf0,0xa3, 78.3865 + 0x91,0xad,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xa2,0x8e,0x00,0x05,0xff,0xe6, 78.3866 + 0xa0,0x9f,0x00,0x10,0x08,0x05,0xff,0xe6,0xa4,0x94,0x00,0x05,0xff,0xe3,0xae,0x9d, 78.3867 + 0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xa5,0x82,0x00,0x05,0xff,0xe6, 78.3868 + 0xa6,0xa3,0x00,0x10,0x08,0x05,0xff,0xe6,0xa7,0xaa,0x00,0x05,0xff,0xe6,0xaa,0xa8, 78.3869 + 0x00,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa3,0x9a,0xa3,0x00,0x05,0xff,0xe6,0xab, 78.3870 + 0x9b,0x00,0x10,0x08,0x05,0xff,0xe3,0xb0,0x98,0x00,0x05,0xff,0xe6,0xac,0xa1,0x00, 78.3871 + 0xd3,0x42,0xd2,0x21,0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa3,0xa2,0xa7,0x00,0x05, 78.3872 + 0xff,0xe6,0xad,0x94,0x00,0x10,0x08,0x05,0xff,0xe3,0xb1,0x8e,0x00,0x05,0xff,0xe6, 78.3873 + 0xad,0xb2,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xae,0x9f,0x00,0x05,0xff,0xe6, 78.3874 + 0xae,0xba,0x00,0x10,0x08,0x05,0xff,0xe6,0xae,0xbb,0x00,0x05,0xff,0xf0,0xa3,0xaa, 78.3875 + 0x8d,0x00,0xd2,0x23,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa1,0xb4,0x8b,0x00,0x05, 78.3876 + 0xff,0xf0,0xa3,0xab,0xba,0x00,0x10,0x08,0x05,0xff,0xe6,0xb1,0x8e,0x00,0x05,0xff, 78.3877 + 0xf0,0xa3,0xb2,0xbc,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb2,0xbf,0x00,0x05, 78.3878 + 0xff,0xe6,0xb3,0x8d,0x00,0x10,0x08,0x05,0xff,0xe6,0xb1,0xa7,0x00,0x05,0xff,0xe6, 78.3879 + 0xb4,0x96,0x00,0xe1,0x1d,0x04,0xe0,0x0c,0x02,0xcf,0x86,0xe5,0x08,0x01,0xd4,0x82, 78.3880 + 0xd3,0x41,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb4,0xbe,0x00,0x05,0xff, 78.3881 + 0xe6,0xb5,0xb7,0x00,0x10,0x08,0x05,0xff,0xe6,0xb5,0x81,0x00,0x05,0xff,0xe6,0xb5, 78.3882 + 0xa9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb5,0xb8,0x00,0x05,0xff,0xe6,0xb6, 78.3883 + 0x85,0x00,0x10,0x09,0x05,0xff,0xf0,0xa3,0xb4,0x9e,0x00,0x05,0xff,0xe6,0xb4,0xb4, 78.3884 + 0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe6,0xb8,0xaf,0x00,0x05,0xff,0xe6, 78.3885 + 0xb9,0xae,0x00,0x10,0x08,0x05,0xff,0xe3,0xb4,0xb3,0x00,0x05,0xff,0xe6,0xbb,0x8b, 78.3886 + 0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe6,0xbb,0x87,0x00,0x05,0xff,0xf0,0xa3,0xbb, 78.3887 + 0x91,0x00,0x10,0x08,0x05,0xff,0xe6,0xb7,0xb9,0x00,0x05,0xff,0xe6,0xbd,0xae,0x00, 78.3888 + 0xd3,0x42,0xd2,0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa3,0xbd,0x9e,0x00,0x05, 78.3889 + 0xff,0xf0,0xa3,0xbe,0x8e,0x00,0x10,0x08,0x05,0xff,0xe6,0xbf,0x86,0x00,0x05,0xff, 78.3890 + 0xe7,0x80,0xb9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x80,0x9e,0x00,0x05,0xff, 78.3891 + 0xe7,0x80,0x9b,0x00,0x10,0x08,0x05,0xff,0xe3,0xb6,0x96,0x00,0x05,0xff,0xe7,0x81, 78.3892 + 0x8a,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x81,0xbd,0x00,0x05,0xff, 78.3893 + 0xe7,0x81,0xb7,0x00,0x10,0x08,0x05,0xff,0xe7,0x82,0xad,0x00,0x05,0xff,0xf0,0xa0, 78.3894 + 0x94,0xa5,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x85,0x85,0x00,0x05,0xff,0xf0, 78.3895 + 0xa4,0x89,0xa3,0x00,0x10,0x08,0x05,0xff,0xe7,0x86,0x9c,0x00,0x05,0xff,0xf0,0xa4, 78.3896 + 0x8e,0xab,0x00,0xd4,0x7b,0xd3,0x43,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7, 78.3897 + 0x88,0xa8,0x00,0x05,0xff,0xe7,0x88,0xb5,0x00,0x10,0x08,0x05,0xff,0xe7,0x89,0x90, 78.3898 + 0x00,0x05,0xff,0xf0,0xa4,0x98,0x88,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x8a, 78.3899 + 0x80,0x00,0x05,0xff,0xe7,0x8a,0x95,0x00,0x10,0x09,0x05,0xff,0xf0,0xa4,0x9c,0xb5, 78.3900 + 0x00,0x05,0xff,0xf0,0xa4,0xa0,0x94,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff, 78.3901 + 0xe7,0x8d,0xba,0x00,0x05,0xff,0xe7,0x8e,0x8b,0x00,0x10,0x08,0x05,0xff,0xe3,0xba, 78.3902 + 0xac,0x00,0x05,0xff,0xe7,0x8e,0xa5,0x00,0x51,0x08,0x05,0xff,0xe3,0xba,0xb8,0x00, 78.3903 + 0x10,0x08,0x05,0xff,0xe7,0x91,0x87,0x00,0x05,0xff,0xe7,0x91,0x9c,0x00,0xd3,0x42, 78.3904 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x91,0xb1,0x00,0x05,0xff,0xe7,0x92, 78.3905 + 0x85,0x00,0x10,0x08,0x05,0xff,0xe7,0x93,0x8a,0x00,0x05,0xff,0xe3,0xbc,0x9b,0x00, 78.3906 + 0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x94,0xa4,0x00,0x05,0xff,0xf0,0xa4,0xb0,0xb6, 78.3907 + 0x00,0x10,0x08,0x05,0xff,0xe7,0x94,0xbe,0x00,0x05,0xff,0xf0,0xa4,0xb2,0x92,0x00, 78.3908 + 0xd2,0x22,0xd1,0x11,0x10,0x08,0x05,0xff,0xe7,0x95,0xb0,0x00,0x05,0xff,0xf0,0xa2, 78.3909 + 0x86,0x9f,0x00,0x10,0x08,0x05,0xff,0xe7,0x98,0x90,0x00,0x05,0xff,0xf0,0xa4,0xbe, 78.3910 + 0xa1,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa4,0xbe,0xb8,0x00,0x05,0xff,0xf0, 78.3911 + 0xa5,0x81,0x84,0x00,0x10,0x08,0x05,0xff,0xe3,0xbf,0xbc,0x00,0x05,0xff,0xe4,0x80, 78.3912 + 0x88,0x00,0xcf,0x86,0xe5,0x04,0x01,0xd4,0x7d,0xd3,0x3c,0xd2,0x23,0xd1,0x11,0x10, 78.3913 + 0x08,0x05,0xff,0xe7,0x9b,0xb4,0x00,0x05,0xff,0xf0,0xa5,0x83,0xb3,0x00,0x10,0x09, 78.3914 + 0x05,0xff,0xf0,0xa5,0x83,0xb2,0x00,0x05,0xff,0xf0,0xa5,0x84,0x99,0x00,0x91,0x11, 78.3915 + 0x10,0x09,0x05,0xff,0xf0,0xa5,0x84,0xb3,0x00,0x05,0xff,0xe7,0x9c,0x9e,0x00,0x05, 78.3916 + 0xff,0xe7,0x9c,0x9f,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0x9d,0x8a, 78.3917 + 0x00,0x05,0xff,0xe4,0x80,0xb9,0x00,0x10,0x08,0x05,0xff,0xe7,0x9e,0x8b,0x00,0x05, 78.3918 + 0xff,0xe4,0x81,0x86,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe4,0x82,0x96,0x00,0x05, 78.3919 + 0xff,0xf0,0xa5,0x90,0x9d,0x00,0x10,0x08,0x05,0xff,0xe7,0xa1,0x8e,0x00,0x05,0xff, 78.3920 + 0xe7,0xa2,0x8c,0x00,0xd3,0x43,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0xa3, 78.3921 + 0x8c,0x00,0x05,0xff,0xe4,0x83,0xa3,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0x98,0xa6, 78.3922 + 0x00,0x05,0xff,0xe7,0xa5,0x96,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0x9a, 78.3923 + 0x9a,0x00,0x05,0xff,0xf0,0xa5,0x9b,0x85,0x00,0x10,0x08,0x05,0xff,0xe7,0xa6,0x8f, 78.3924 + 0x00,0x05,0xff,0xe7,0xa7,0xab,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe4, 78.3925 + 0x84,0xaf,0x00,0x05,0xff,0xe7,0xa9,0x80,0x00,0x10,0x08,0x05,0xff,0xe7,0xa9,0x8a, 78.3926 + 0x00,0x05,0xff,0xe7,0xa9,0x8f,0x00,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa5,0xa5, 78.3927 + 0xbc,0x00,0x05,0xff,0xf0,0xa5,0xaa,0xa7,0x00,0x10,0x09,0x05,0xff,0xf0,0xa5,0xaa, 78.3928 + 0xa7,0x00,0x05,0xff,0xe7,0xab,0xae,0x00,0xd4,0x83,0xd3,0x42,0xd2,0x21,0xd1,0x11, 78.3929 + 0x10,0x08,0x05,0xff,0xe4,0x88,0x82,0x00,0x05,0xff,0xf0,0xa5,0xae,0xab,0x00,0x10, 78.3930 + 0x08,0x05,0xff,0xe7,0xaf,0x86,0x00,0x05,0xff,0xe7,0xaf,0x89,0x00,0xd1,0x11,0x10, 78.3931 + 0x08,0x05,0xff,0xe4,0x88,0xa7,0x00,0x05,0xff,0xf0,0xa5,0xb2,0x80,0x00,0x10,0x08, 78.3932 + 0x05,0xff,0xe7,0xb3,0x92,0x00,0x05,0xff,0xe4,0x8a,0xa0,0x00,0xd2,0x21,0xd1,0x10, 78.3933 + 0x10,0x08,0x05,0xff,0xe7,0xb3,0xa8,0x00,0x05,0xff,0xe7,0xb3,0xa3,0x00,0x10,0x08, 78.3934 + 0x05,0xff,0xe7,0xb4,0x80,0x00,0x05,0xff,0xf0,0xa5,0xbe,0x86,0x00,0xd1,0x10,0x10, 78.3935 + 0x08,0x05,0xff,0xe7,0xb5,0xa3,0x00,0x05,0xff,0xe4,0x8c,0x81,0x00,0x10,0x08,0x05, 78.3936 + 0xff,0xe7,0xb7,0x87,0x00,0x05,0xff,0xe7,0xb8,0x82,0x00,0xd3,0x44,0xd2,0x22,0xd1, 78.3937 + 0x10,0x10,0x08,0x05,0xff,0xe7,0xb9,0x85,0x00,0x05,0xff,0xe4,0x8c,0xb4,0x00,0x10, 78.3938 + 0x09,0x05,0xff,0xf0,0xa6,0x88,0xa8,0x00,0x05,0xff,0xf0,0xa6,0x89,0x87,0x00,0xd1, 78.3939 + 0x11,0x10,0x08,0x05,0xff,0xe4,0x8d,0x99,0x00,0x05,0xff,0xf0,0xa6,0x8b,0x99,0x00, 78.3940 + 0x10,0x08,0x05,0xff,0xe7,0xbd,0xba,0x00,0x05,0xff,0xf0,0xa6,0x8c,0xbe,0x00,0xd2, 78.3941 + 0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe7,0xbe,0x95,0x00,0x05,0xff,0xe7,0xbf,0xba, 78.3942 + 0x00,0x10,0x08,0x05,0xff,0xe8,0x80,0x85,0x00,0x05,0xff,0xf0,0xa6,0x93,0x9a,0x00, 78.3943 + 0xd1,0x11,0x10,0x09,0x05,0xff,0xf0,0xa6,0x94,0xa3,0x00,0x05,0xff,0xe8,0x81,0xa0, 78.3944 + 0x00,0x10,0x09,0x05,0xff,0xf0,0xa6,0x96,0xa8,0x00,0x05,0xff,0xe8,0x81,0xb0,0x00, 78.3945 + 0xe0,0x11,0x02,0xcf,0x86,0xe5,0x07,0x01,0xd4,0x85,0xd3,0x42,0xd2,0x21,0xd1,0x11, 78.3946 + 0x10,0x09,0x05,0xff,0xf0,0xa3,0x8d,0x9f,0x00,0x05,0xff,0xe4,0x8f,0x95,0x00,0x10, 78.3947 + 0x08,0x05,0xff,0xe8,0x82,0xb2,0x00,0x05,0xff,0xe8,0x84,0x83,0x00,0xd1,0x10,0x10, 78.3948 + 0x08,0x05,0xff,0xe4,0x90,0x8b,0x00,0x05,0xff,0xe8,0x84,0xbe,0x00,0x10,0x08,0x05, 78.3949 + 0xff,0xe5,0xaa,0xb5,0x00,0x05,0xff,0xf0,0xa6,0x9e,0xa7,0x00,0xd2,0x23,0xd1,0x12, 78.3950 + 0x10,0x09,0x05,0xff,0xf0,0xa6,0x9e,0xb5,0x00,0x05,0xff,0xf0,0xa3,0x8e,0x93,0x00, 78.3951 + 0x10,0x09,0x05,0xff,0xf0,0xa3,0x8e,0x9c,0x00,0x05,0xff,0xe8,0x88,0x81,0x00,0xd1, 78.3952 + 0x10,0x10,0x08,0x05,0xff,0xe8,0x88,0x84,0x00,0x05,0xff,0xe8,0xbe,0x9e,0x00,0x10, 78.3953 + 0x08,0x05,0xff,0xe4,0x91,0xab,0x00,0x05,0xff,0xe8,0x8a,0x91,0x00,0xd3,0x41,0xd2, 78.3954 + 0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8a,0x8b,0x00,0x05,0xff,0xe8,0x8a,0x9d, 78.3955 + 0x00,0x10,0x08,0x05,0xff,0xe5,0x8a,0xb3,0x00,0x05,0xff,0xe8,0x8a,0xb1,0x00,0xd1, 78.3956 + 0x10,0x10,0x08,0x05,0xff,0xe8,0x8a,0xb3,0x00,0x05,0xff,0xe8,0x8a,0xbd,0x00,0x10, 78.3957 + 0x08,0x05,0xff,0xe8,0x8b,0xa6,0x00,0x05,0xff,0xf0,0xa6,0xac,0xbc,0x00,0xd2,0x20, 78.3958 + 0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8b,0xa5,0x00,0x05,0xff,0xe8,0x8c,0x9d,0x00, 78.3959 + 0x10,0x08,0x05,0xff,0xe8,0x8d,0xa3,0x00,0x05,0xff,0xe8,0x8e,0xad,0x00,0xd1,0x10, 78.3960 + 0x10,0x08,0x05,0xff,0xe8,0x8c,0xa3,0x00,0x05,0xff,0xe8,0x8e,0xbd,0x00,0x10,0x08, 78.3961 + 0x05,0xff,0xe8,0x8f,0xa7,0x00,0x05,0xff,0xe8,0x91,0x97,0x00,0xd4,0x85,0xd3,0x43, 78.3962 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x8d,0x93,0x00,0x05,0xff,0xe8,0x8f, 78.3963 + 0x8a,0x00,0x10,0x08,0x05,0xff,0xe8,0x8f,0x8c,0x00,0x05,0xff,0xe8,0x8f,0x9c,0x00, 78.3964 + 0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa6,0xb0,0xb6,0x00,0x05,0xff,0xf0,0xa6,0xb5, 78.3965 + 0xab,0x00,0x10,0x09,0x05,0xff,0xf0,0xa6,0xb3,0x95,0x00,0x05,0xff,0xe4,0x94,0xab, 78.3966 + 0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x93,0xb1,0x00,0x05,0xff,0xe8, 78.3967 + 0x93,0xb3,0x00,0x10,0x08,0x05,0xff,0xe8,0x94,0x96,0x00,0x05,0xff,0xf0,0xa7,0x8f, 78.3968 + 0x8a,0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe8,0x95,0xa4,0x00,0x05,0xff,0xf0,0xa6, 78.3969 + 0xbc,0xac,0x00,0x10,0x08,0x05,0xff,0xe4,0x95,0x9d,0x00,0x05,0xff,0xe4,0x95,0xa1, 78.3970 + 0x00,0xd3,0x42,0xd2,0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa6,0xbe,0xb1,0x00, 78.3971 + 0x05,0xff,0xf0,0xa7,0x83,0x92,0x00,0x10,0x08,0x05,0xff,0xe4,0x95,0xab,0x00,0x05, 78.3972 + 0xff,0xe8,0x99,0x90,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x99,0x9c,0x00,0x05, 78.3973 + 0xff,0xe8,0x99,0xa7,0x00,0x10,0x08,0x05,0xff,0xe8,0x99,0xa9,0x00,0x05,0xff,0xe8, 78.3974 + 0x9a,0xa9,0x00,0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9a,0x88,0x00,0x05, 78.3975 + 0xff,0xe8,0x9c,0x8e,0x00,0x10,0x08,0x05,0xff,0xe8,0x9b,0xa2,0x00,0x05,0xff,0xe8, 78.3976 + 0x9d,0xb9,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe8,0x9c,0xa8,0x00,0x05,0xff,0xe8, 78.3977 + 0x9d,0xab,0x00,0x10,0x08,0x05,0xff,0xe8,0x9e,0x86,0x00,0x05,0xff,0xe4,0x97,0x97, 78.3978 + 0x00,0xcf,0x86,0xe5,0x08,0x01,0xd4,0x83,0xd3,0x41,0xd2,0x20,0xd1,0x10,0x10,0x08, 78.3979 + 0x05,0xff,0xe8,0x9f,0xa1,0x00,0x05,0xff,0xe8,0xa0,0x81,0x00,0x10,0x08,0x05,0xff, 78.3980 + 0xe4,0x97,0xb9,0x00,0x05,0xff,0xe8,0xa1,0xa0,0x00,0xd1,0x11,0x10,0x08,0x05,0xff, 78.3981 + 0xe8,0xa1,0xa3,0x00,0x05,0xff,0xf0,0xa7,0x99,0xa7,0x00,0x10,0x08,0x05,0xff,0xe8, 78.3982 + 0xa3,0x97,0x00,0x05,0xff,0xe8,0xa3,0x9e,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05, 78.3983 + 0xff,0xe4,0x98,0xb5,0x00,0x05,0xff,0xe8,0xa3,0xba,0x00,0x10,0x08,0x05,0xff,0xe3, 78.3984 + 0x92,0xbb,0x00,0x05,0xff,0xf0,0xa7,0xa2,0xae,0x00,0xd1,0x11,0x10,0x09,0x05,0xff, 78.3985 + 0xf0,0xa7,0xa5,0xa6,0x00,0x05,0xff,0xe4,0x9a,0xbe,0x00,0x10,0x08,0x05,0xff,0xe4, 78.3986 + 0x9b,0x87,0x00,0x05,0xff,0xe8,0xaa,0xa0,0x00,0xd3,0x41,0xd2,0x21,0xd1,0x10,0x10, 78.3987 + 0x08,0x05,0xff,0xe8,0xab,0xad,0x00,0x05,0xff,0xe8,0xae,0x8a,0x00,0x10,0x08,0x05, 78.3988 + 0xff,0xe8,0xb1,0x95,0x00,0x05,0xff,0xf0,0xa7,0xb2,0xa8,0x00,0xd1,0x10,0x10,0x08, 78.3989 + 0x05,0xff,0xe8,0xb2,0xab,0x00,0x05,0xff,0xe8,0xb3,0x81,0x00,0x10,0x08,0x05,0xff, 78.3990 + 0xe8,0xb4,0x9b,0x00,0x05,0xff,0xe8,0xb5,0xb7,0x00,0xd2,0x22,0xd1,0x12,0x10,0x09, 78.3991 + 0x05,0xff,0xf0,0xa7,0xbc,0xaf,0x00,0x05,0xff,0xf0,0xa0,0xa0,0x84,0x00,0x10,0x08, 78.3992 + 0x05,0xff,0xe8,0xb7,0x8b,0x00,0x05,0xff,0xe8,0xb6,0xbc,0x00,0xd1,0x11,0x10,0x08, 78.3993 + 0x05,0xff,0xe8,0xb7,0xb0,0x00,0x05,0xff,0xf0,0xa0,0xa3,0x9e,0x00,0x10,0x08,0x05, 78.3994 + 0xff,0xe8,0xbb,0x94,0x00,0x05,0xff,0xe8,0xbc,0xb8,0x00,0xd4,0x84,0xd3,0x43,0xd2, 78.3995 + 0x22,0xd1,0x12,0x10,0x09,0x05,0xff,0xf0,0xa8,0x97,0x92,0x00,0x05,0xff,0xf0,0xa8, 78.3996 + 0x97,0xad,0x00,0x10,0x08,0x05,0xff,0xe9,0x82,0x94,0x00,0x05,0xff,0xe9,0x83,0xb1, 78.3997 + 0x00,0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x84,0x91,0x00,0x05,0xff,0xf0,0xa8,0x9c, 78.3998 + 0xae,0x00,0x10,0x08,0x05,0xff,0xe9,0x84,0x9b,0x00,0x05,0xff,0xe9,0x88,0xb8,0x00, 78.3999 + 0xd2,0x20,0xd1,0x10,0x10,0x08,0x05,0xff,0xe9,0x8b,0x97,0x00,0x05,0xff,0xe9,0x8b, 78.4000 + 0x98,0x00,0x10,0x08,0x05,0xff,0xe9,0x89,0xbc,0x00,0x05,0xff,0xe9,0x8f,0xb9,0x00, 78.4001 + 0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x90,0x95,0x00,0x05,0xff,0xf0,0xa8,0xaf,0xba, 78.4002 + 0x00,0x10,0x08,0x05,0xff,0xe9,0x96,0x8b,0x00,0x05,0xff,0xe4,0xa6,0x95,0x00,0xd3, 78.4003 + 0x43,0xd2,0x21,0xd1,0x11,0x10,0x08,0x05,0xff,0xe9,0x96,0xb7,0x00,0x05,0xff,0xf0, 78.4004 + 0xa8,0xb5,0xb7,0x00,0x10,0x08,0x05,0xff,0xe4,0xa7,0xa6,0x00,0x05,0xff,0xe9,0x9b, 78.4005 + 0x83,0x00,0xd1,0x10,0x10,0x08,0x05,0xff,0xe5,0xb6,0xb2,0x00,0x05,0xff,0xe9,0x9c, 78.4006 + 0xa3,0x00,0x10,0x09,0x05,0xff,0xf0,0xa9,0x85,0x85,0x00,0x05,0xff,0xf0,0xa9,0x88, 78.4007 + 0x9a,0x00,0xd2,0x21,0xd1,0x10,0x10,0x08,0x05,0xff,0xe4,0xa9,0xae,0x00,0x05,0xff, 78.4008 + 0xe4,0xa9,0xb6,0x00,0x10,0x08,0x05,0xff,0xe9,0x9f,0xa0,0x00,0x05,0xff,0xf0,0xa9, 78.4009 + 0x90,0x8a,0x00,0x91,0x11,0x10,0x08,0x05,0xff,0xe4,0xaa,0xb2,0x00,0x05,0xff,0xf0, 78.4010 + 0xa9,0x92,0x96,0x00,0x05,0xff,0xe9,0xa0,0x8b,0x00,0xe2,0x10,0x01,0xe1,0x09,0x01, 78.4011 + 0xe0,0x02,0x01,0xcf,0x86,0x95,0xfb,0xd4,0x82,0xd3,0x41,0xd2,0x21,0xd1,0x11,0x10, 78.4012 + 0x08,0x05,0xff,0xe9,0xa0,0xa9,0x00,0x05,0xff,0xf0,0xa9,0x96,0xb6,0x00,0x10,0x08, 78.4013 + 0x05,0xff,0xe9,0xa3,0xa2,0x00,0x05,0xff,0xe4,0xac,0xb3,0x00,0xd1,0x10,0x10,0x08, 78.4014 + 0x05,0xff,0xe9,0xa4,0xa9,0x00,0x05,0xff,0xe9,0xa6,0xa7,0x00,0x10,0x08,0x05,0xff, 78.4015 + 0xe9,0xa7,0x82,0x00,0x05,0xff,0xe9,0xa7,0xbe,0x00,0xd2,0x21,0xd1,0x11,0x10,0x08, 78.4016 + 0x05,0xff,0xe4,0xaf,0x8e,0x00,0x05,0xff,0xf0,0xa9,0xac,0xb0,0x00,0x10,0x08,0x05, 78.4017 + 0xff,0xe9,0xac,0x92,0x00,0x05,0xff,0xe9,0xb1,0x80,0x00,0xd1,0x10,0x10,0x08,0x05, 78.4018 + 0xff,0xe9,0xb3,0xbd,0x00,0x05,0xff,0xe4,0xb3,0x8e,0x00,0x10,0x08,0x05,0xff,0xe4, 78.4019 + 0xb3,0xad,0x00,0x05,0xff,0xe9,0xb5,0xa7,0x00,0xd3,0x44,0xd2,0x23,0xd1,0x11,0x10, 78.4020 + 0x09,0x05,0xff,0xf0,0xaa,0x83,0x8e,0x00,0x05,0xff,0xe4,0xb3,0xb8,0x00,0x10,0x09, 78.4021 + 0x05,0xff,0xf0,0xaa,0x84,0x85,0x00,0x05,0xff,0xf0,0xaa,0x88,0x8e,0x00,0xd1,0x11, 78.4022 + 0x10,0x09,0x05,0xff,0xf0,0xaa,0x8a,0x91,0x00,0x05,0xff,0xe9,0xba,0xbb,0x00,0x10, 78.4023 + 0x08,0x05,0xff,0xe4,0xb5,0x96,0x00,0x05,0xff,0xe9,0xbb,0xb9,0x00,0xd2,0x20,0xd1, 78.4024 + 0x10,0x10,0x08,0x05,0xff,0xe9,0xbb,0xbe,0x00,0x05,0xff,0xe9,0xbc,0x85,0x00,0x10, 78.4025 + 0x08,0x05,0xff,0xe9,0xbc,0x8f,0x00,0x05,0xff,0xe9,0xbc,0x96,0x00,0x91,0x11,0x10, 78.4026 + 0x08,0x05,0xff,0xe9,0xbc,0xbb,0x00,0x05,0xff,0xf0,0xaa,0x98,0x80,0x00,0x00,0x00, 78.4027 + 0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xcf,0x06,0x00,0x00,0xd3,0x06, 78.4028 + 0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00, 78.4029 + 0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00, 78.4030 + 0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd3,0x08, 78.4031 + 0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08, 78.4032 + 0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86, 78.4033 + 0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06, 78.4034 + 0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06, 78.4035 + 0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04, 78.4036 + 0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,0x86,0xd5,0xc0, 78.4037 + 0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06, 78.4038 + 0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06, 78.4039 + 0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00, 78.4040 + 0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06, 78.4041 + 0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04, 78.4042 + 0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00, 78.4043 + 0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00, 78.4044 + 0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00, 78.4045 + 0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06, 78.4046 + 0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00, 78.4047 + 0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00, 78.4048 + 0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd4,0x60, 78.4049 + 0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00, 78.4050 + 0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00, 78.4051 + 0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06, 78.4052 + 0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00, 78.4053 + 0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00, 78.4054 + 0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xd3,0x08, 78.4055 + 0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08, 78.4056 + 0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86, 78.4057 + 0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06, 78.4058 + 0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06, 78.4059 + 0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04, 78.4060 + 0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xe0,0x83,0x01,0xcf, 78.4061 + 0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf, 78.4062 + 0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf, 78.4063 + 0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf, 78.4064 + 0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1, 78.4065 + 0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00, 78.4066 + 0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00, 78.4067 + 0x00,0x02,0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf, 78.4068 + 0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf, 78.4069 + 0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00, 78.4070 + 0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf, 78.4071 + 0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54, 78.4072 + 0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02, 78.4073 + 0x00,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf, 78.4074 + 0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf, 78.4075 + 0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00, 78.4076 + 0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf, 78.4077 + 0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54, 78.4078 + 0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02, 78.4079 + 0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00, 78.4080 + 0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00, 78.4081 + 0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3, 78.4082 + 0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00, 78.4083 + 0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00, 78.4084 + 0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf, 78.4085 + 0x86,0xd5,0xc0,0xd4,0x60,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf, 78.4086 + 0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf, 78.4087 + 0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf, 78.4088 + 0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1, 78.4089 + 0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00, 78.4090 + 0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00, 78.4091 + 0x00,0x02,0x00,0xd3,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf, 78.4092 + 0x06,0x00,0x00,0xd1,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf, 78.4093 + 0x06,0x00,0x00,0xcf,0x86,0xd5,0x06,0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00, 78.4094 + 0x00,0xd3,0x06,0xcf,0x06,0x00,0x00,0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf, 78.4095 + 0x06,0x00,0x00,0xd0,0x06,0xcf,0x06,0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54, 78.4096 + 0x04,0x00,0x00,0x53,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02, 78.4097 + 0x00,0xd4,0xd9,0xd3,0x81,0xd2,0x79,0xd1,0x71,0xd0,0x69,0xcf,0x86,0xd5,0x60,0xd4, 78.4098 + 0x59,0xd3,0x52,0xd2,0x33,0xd1,0x2c,0xd0,0x25,0xcf,0x86,0x95,0x1e,0x94,0x19,0x93, 78.4099 + 0x14,0x92,0x0f,0x91,0x0a,0x10,0x05,0x00,0xff,0x00,0x05,0xff,0x00,0x00,0xff,0x00, 78.4100 + 0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x05,0xff,0x00,0xcf,0x06,0x05,0xff, 78.4101 + 0x00,0xcf,0x06,0x00,0xff,0x00,0xd1,0x07,0xcf,0x06,0x07,0xff,0x00,0xd0,0x07,0xcf, 78.4102 + 0x06,0x07,0xff,0x00,0xcf,0x86,0x55,0x05,0x07,0xff,0x00,0x14,0x05,0x07,0xff,0x00, 78.4103 + 0x00,0xff,0x00,0xcf,0x06,0x00,0xff,0x00,0xcf,0x06,0x00,0xff,0x00,0xcf,0x06,0x00, 78.4104 + 0xff,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86, 78.4105 + 0xcf,0x06,0x00,0x00,0xd2,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xd1,0x08,0xcf,0x86, 78.4106 + 0xcf,0x06,0x00,0x00,0xd0,0x08,0xcf,0x86,0xcf,0x06,0x00,0x00,0xcf,0x86,0xd5,0x06, 78.4107 + 0xcf,0x06,0x00,0x00,0xd4,0x06,0xcf,0x06,0x00,0x00,0xd3,0x06,0xcf,0x06,0x00,0x00, 78.4108 + 0xd2,0x06,0xcf,0x06,0x00,0x00,0xd1,0x06,0xcf,0x06,0x00,0x00,0xd0,0x06,0xcf,0x06, 78.4109 + 0x00,0x00,0xcf,0x86,0x55,0x04,0x00,0x00,0x54,0x04,0x00,0x00,0x53,0x04,0x00,0x00, 78.4110 + 0x52,0x04,0x00,0x00,0x11,0x04,0x00,0x00,0x02,0x00,0xcf,0x86,0xcf,0x06,0x02,0x00, 78.4111 + 0x81,0x80,0xcf,0x86,0x85,0x84,0xcf,0x86,0xcf,0x06,0x02,0x00,0x00,0x00,0x00,0x00 78.4112 +};
79.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 79.2 +++ b/libext2fs/lib/libext2fs/utf8n.h Sat Oct 09 23:28:01 2021 +0200 79.3 @@ -0,0 +1,120 @@ 79.4 +/* 79.5 + * Copyright (c) 2014 SGI. 79.6 + * All rights reserved. 79.7 + * 79.8 + * This program is free software; you can redistribute it and/or 79.9 + * modify it under the terms of the GNU General Public License as 79.10 + * published by the Free Software Foundation. 79.11 + * 79.12 + * This program is distributed in the hope that it would be useful, 79.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 79.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 79.15 + * GNU General Public License for more details. 79.16 + * 79.17 + */ 79.18 + 79.19 +/* This code is copied from the linux kernel. We have a userspace 79.20 + * version here to such that hashes will match that implementation. 79.21 + */ 79.22 + 79.23 +#ifndef UTF8NORM_H 79.24 +#define UTF8NORM_H 79.25 + 79.26 +#include <stdint.h> 79.27 +#include <unistd.h> 79.28 +#include <string.h> 79.29 + 79.30 +/* Encoding a unicode version number as a single unsigned int. */ 79.31 +#define UNICODE_MAJ_SHIFT (16) 79.32 +#define UNICODE_MIN_SHIFT (8) 79.33 + 79.34 +#define UNICODE_AGE(MAJ, MIN, REV) \ 79.35 + (((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) | \ 79.36 + ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) | \ 79.37 + ((unsigned int)(REV))) 79.38 + 79.39 +/* Highest unicode version supported by the data tables. */ 79.40 +extern int utf8version_is_supported(uint8_t maj, uint8_t min, uint8_t rev); 79.41 +extern int utf8version_latest(void); 79.42 + 79.43 +/* 79.44 + * Look for the correct const struct utf8data for a unicode version. 79.45 + * Returns NULL if the version requested is too new. 79.46 + * 79.47 + * Two normalization forms are supported: nfdi and nfdicf. 79.48 + * 79.49 + * nfdi: 79.50 + * - Apply unicode normalization form NFD. 79.51 + * - Remove any Default_Ignorable_Code_Point. 79.52 + * 79.53 + * nfdicf: 79.54 + * - Apply unicode normalization form NFD. 79.55 + * - Remove any Default_Ignorable_Code_Point. 79.56 + * - Apply a full casefold (C + F). 79.57 + */ 79.58 +extern const struct utf8data *utf8nfdi(unsigned int maxage); 79.59 +extern const struct utf8data *utf8nfdicf(unsigned int maxage); 79.60 + 79.61 +/* 79.62 + * Determine the maximum age of any unicode character in the string. 79.63 + * Returns 0 if only unassigned code points are present. 79.64 + * Returns -1 if the input is not valid UTF-8. 79.65 + */ 79.66 +extern int utf8agemax(const struct utf8data *data, const char *s); 79.67 +extern int utf8nagemax(const struct utf8data *data, const char *s, size_t len); 79.68 + 79.69 +/* 79.70 + * Determine the minimum age of any unicode character in the string. 79.71 + * Returns 0 if any unassigned code points are present. 79.72 + * Returns -1 if the input is not valid UTF-8. 79.73 + */ 79.74 +extern int utf8agemin(const struct utf8data *data, const char *s); 79.75 +extern int utf8nagemin(const struct utf8data *data, const char *s, size_t len); 79.76 + 79.77 +/* 79.78 + * Determine the length of the normalized from of the string, 79.79 + * excluding any terminating NULL byte. 79.80 + * Returns 0 if only ignorable code points are present. 79.81 + * Returns -1 if the input is not valid UTF-8. 79.82 + */ 79.83 +extern ssize_t utf8len(const struct utf8data *data, const char *s); 79.84 +extern ssize_t utf8nlen(const struct utf8data *data, const char *s, size_t len); 79.85 + 79.86 +/* Needed in struct utf8cursor below. */ 79.87 +#define UTF8HANGULLEAF (12) 79.88 + 79.89 +/* 79.90 + * Cursor structure used by the normalizer. 79.91 + */ 79.92 +struct utf8cursor { 79.93 + const struct utf8data *data; 79.94 + const char *s; 79.95 + const char *p; 79.96 + const char *ss; 79.97 + const char *sp; 79.98 + unsigned int len; 79.99 + unsigned int slen; 79.100 + short int ccc; 79.101 + short int nccc; 79.102 + unsigned char hangul[UTF8HANGULLEAF]; 79.103 +}; 79.104 + 79.105 +/* 79.106 + * Initialize a utf8cursor to normalize a string. 79.107 + * Returns 0 on success. 79.108 + * Returns -1 on failure. 79.109 + */ 79.110 +extern int utf8cursor(struct utf8cursor *u8c, const struct utf8data *data, 79.111 + const char *s); 79.112 +extern int utf8ncursor(struct utf8cursor *u8c, const struct utf8data *data, 79.113 + const char *s, size_t len); 79.114 + 79.115 +/* 79.116 + * Get the next byte in the normalization. 79.117 + * Returns a value > 0 && < 256 on success. 79.118 + * Returns 0 when the end of the normalization is reached. 79.119 + * Returns -1 if the string being normalized is not valid UTF-8. 79.120 + */ 79.121 +extern int utf8byte(struct utf8cursor *u8c); 79.122 + 79.123 +#endif /* UTF8NORM_H */
80.1 --- a/libext2fs/lib/libsupport/common.h Sat Oct 02 23:57:02 2021 +0200 80.2 +++ b/libext2fs/lib/libsupport/common.h Sat Oct 09 23:28:01 2021 +0200 80.3 @@ -22,12 +22,12 @@ 80.4 #endif 80.5 80.6 #define log_err(format, arg ...) \ 80.7 - fprintf(stderr, "[ERROR] %s:%d:%s:: " format "\n", \ 80.8 + fprintf(stderr, "[ERROR] %s:%d:%s: " format "\n", \ 80.9 __FILE__, __LINE__, __func__, ## arg) 80.10 80.11 #ifdef DEBUG_QUOTA 80.12 # define log_debug(format, arg ...) \ 80.13 - fprintf(stderr, "[DEBUG] %s:%d:%s:: " format "\n", \ 80.14 + fprintf(stderr, "[DEBUG] %s:%d:%s: " format "\n", \ 80.15 __FILE__, __LINE__, __func__, ## arg) 80.16 #else 80.17 # define log_debug(...)
81.1 --- a/libext2fs/lib/libsupport/dict.c Sat Oct 02 23:57:02 2021 +0200 81.2 +++ b/libext2fs/lib/libsupport/dict.c Sat Oct 09 23:28:01 2021 +0200 81.3 @@ -267,6 +267,7 @@ 81.4 new->allocnode = dnode_alloc; 81.5 new->freenode = dnode_free; 81.6 new->context = NULL; 81.7 + new->cmp_ctx = NULL; 81.8 new->nodecount = 0; 81.9 new->maxcount = maxcount; 81.10 new->nilnode.left = &new->nilnode; 81.11 @@ -294,6 +295,14 @@ 81.12 dict->context = context; 81.13 } 81.14 81.15 +void dict_set_cmp_context(dict_t *dict, void *cmp_ctx) 81.16 +{ 81.17 + dict_assert (!dict->cmp_ctx); 81.18 + dict_assert (dict_count(dict) == 0); 81.19 + 81.20 + dict->cmp_ctx = cmp_ctx; 81.21 +} 81.22 + 81.23 #ifdef E2FSCK_NOTUSED 81.24 /* 81.25 * Free a dynamically allocated dictionary object. Removing the nodes 81.26 @@ -467,7 +476,7 @@ 81.27 /* simple binary search adapted for trees that contain duplicate keys */ 81.28 81.29 while (root != nil) { 81.30 - result = dict->compare(key, root->key); 81.31 + result = dict->compare(dict->cmp_ctx, key, root->key); 81.32 if (result < 0) 81.33 root = root->left; 81.34 else if (result > 0) 81.35 @@ -479,7 +488,8 @@ 81.36 do { 81.37 saved = root; 81.38 root = root->left; 81.39 - while (root != nil && dict->compare(key, root->key)) 81.40 + while (root != nil 81.41 + && dict->compare(dict->cmp_ctx, key, root->key)) 81.42 root = root->right; 81.43 } while (root != nil); 81.44 return saved; 81.45 @@ -503,7 +513,7 @@ 81.46 dnode_t *tentative = 0; 81.47 81.48 while (root != nil) { 81.49 - int result = dict->compare(key, root->key); 81.50 + int result = dict->compare(dict->cmp_ctx, key, root->key); 81.51 81.52 if (result > 0) { 81.53 root = root->right; 81.54 @@ -535,7 +545,7 @@ 81.55 dnode_t *tentative = 0; 81.56 81.57 while (root != nil) { 81.58 - int result = dict->compare(key, root->key); 81.59 + int result = dict->compare(dict->cmp_ctx, key, root->key); 81.60 81.61 if (result < 0) { 81.62 root = root->left; 81.63 @@ -580,7 +590,7 @@ 81.64 81.65 while (where != nil) { 81.66 parent = where; 81.67 - result = dict->compare(key, where->key); 81.68 + result = dict->compare(dict->cmp_ctx, key, where->key); 81.69 /* trap attempts at duplicate key insertion unless it's explicitly allowed */ 81.70 dict_assert (dict->dupes || result != 0); 81.71 if (result < 0) 81.72 @@ -1261,7 +1271,7 @@ 81.73 return tokcount; 81.74 } 81.75 81.76 -static int comparef(const void *key1, const void *key2) 81.77 +static int comparef(const void *cmp_ctx, const void *key1, const void *key2) 81.78 { 81.79 return strcmp(key1, key2); 81.80 }
82.1 --- a/libext2fs/lib/libsupport/dict.h Sat Oct 02 23:57:02 2021 +0200 82.2 +++ b/libext2fs/lib/libsupport/dict.h Sat Oct 09 23:28:01 2021 +0200 82.3 @@ -56,7 +56,7 @@ 82.4 #endif 82.5 } dnode_t; 82.6 82.7 -typedef int (*dict_comp_t)(const void *, const void *); 82.8 +typedef int (*dict_comp_t)(const void *, const void *, const void *); 82.9 typedef dnode_t *(*dnode_alloc_t)(void *); 82.10 typedef void (*dnode_free_t)(dnode_t *, void *); 82.11 82.12 @@ -69,6 +69,7 @@ 82.13 dnode_alloc_t dict_allocnode; 82.14 dnode_free_t dict_freenode; 82.15 void *dict_context; 82.16 + void *cmp_ctx; 82.17 int dict_dupes; 82.18 #else 82.19 int dict_dummmy; 82.20 @@ -88,6 +89,7 @@ 82.21 82.22 extern dict_t *dict_create(dictcount_t, dict_comp_t); 82.23 extern void dict_set_allocator(dict_t *, dnode_alloc_t, dnode_free_t, void *); 82.24 +extern void dict_set_cmp_context(dict_t *, void *); 82.25 extern void dict_destroy(dict_t *); 82.26 extern void dict_free_nodes(dict_t *); 82.27 extern void dict_free(dict_t *);
83.1 --- a/libext2fs/lib/libsupport/mkquota.c Sat Oct 02 23:57:02 2021 +0200 83.2 +++ b/libext2fs/lib/libsupport/mkquota.c Sat Oct 09 23:28:01 2021 +0200 83.3 @@ -234,7 +234,7 @@ 83.4 /* Helper functions for computing quota in memory. */ 83.5 /******************************************************************/ 83.6 83.7 -static int dict_uint_cmp(const void *a, const void *b) 83.8 +static int dict_uint_cmp(const void *cmp_ctx, const void *a, const void *b) 83.9 { 83.10 unsigned int c, d; 83.11 83.12 @@ -503,8 +503,8 @@ 83.13 if (inode->i_links_count && 83.14 (ino == EXT2_ROOT_INO || 83.15 ino >= EXT2_FIRST_INODE(fs->super))) { 83.16 - space = ext2fs_inode_i_blocks(fs, 83.17 - EXT2_INODE(inode)) << 9; 83.18 + space = ext2fs_get_stat_i_blocks(fs, 83.19 + EXT2_INODE(inode)) << 9; 83.20 quota_data_add(qctx, inode, ino, space); 83.21 quota_data_inodes(qctx, inode, ino, +1); 83.22 } 83.23 @@ -671,6 +671,7 @@ 83.24 err = qh.qh_ops->scan_dquots(&qh, scan_dquots_callback, &scan_data); 83.25 if (err) { 83.26 log_debug("Error scanning dquots"); 83.27 + *usage_inconsistent = 1; 83.28 goto out_close_qh; 83.29 } 83.30
84.1 --- a/libext2fs/lib/libsupport/plausible.c Sat Oct 02 23:57:02 2021 +0200 84.2 +++ b/libext2fs/lib/libsupport/plausible.c Sat Oct 09 23:28:01 2021 +0200 84.3 @@ -101,7 +101,6 @@ 84.4 ext2_filsys fs; 84.5 errcode_t retval; 84.6 time_t tm; 84.7 - char buf[80]; 84.8 84.9 retval = ext2fs_open2(device, 0, EXT2_FLAG_64BITS, 0, 0, 84.10 unix_io_manager, &fs); 84.11 @@ -111,13 +110,10 @@ 84.12 84.13 if (sb->s_mtime) { 84.14 tm = sb->s_mtime; 84.15 - if (sb->s_last_mounted[0]) { 84.16 - memset(buf, 0, sizeof(buf)); 84.17 - strncpy(buf, sb->s_last_mounted, 84.18 - sizeof(sb->s_last_mounted)); 84.19 - printf(_("\tlast mounted on %s on %s"), buf, 84.20 - ctime(&tm)); 84.21 - } else 84.22 + if (sb->s_last_mounted[0]) 84.23 + printf(_("\tlast mounted on %.*s on %s"), 84.24 + EXT2_LEN_STR(sb->s_last_mounted), ctime(&tm)); 84.25 + else 84.26 printf(_("\tlast mounted on %s"), ctime(&tm)); 84.27 } else if (sb->s_mkfs_time) { 84.28 tm = sb->s_mkfs_time;
85.1 --- a/libext2fs/lib/libsupport/quotaio.c Sat Oct 02 23:57:02 2021 +0200 85.2 +++ b/libext2fs/lib/libsupport/quotaio.c Sat Oct 09 23:28:01 2021 +0200 85.3 @@ -105,19 +105,6 @@ 85.4 } 85.5 } 85.6 85.7 -static int compute_num_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)), 85.8 - blk64_t *blocknr EXT2FS_ATTR((unused)), 85.9 - e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), 85.10 - blk64_t ref_block EXT2FS_ATTR((unused)), 85.11 - int ref_offset EXT2FS_ATTR((unused)), 85.12 - void *private) 85.13 -{ 85.14 - blk64_t *num_blocks = private; 85.15 - 85.16 - *num_blocks += 1; 85.17 - return 0; 85.18 -} 85.19 - 85.20 errcode_t quota_inode_truncate(ext2_filsys fs, ext2_ino_t ino) 85.21 { 85.22 struct ext2_inode inode; 85.23 @@ -147,18 +134,6 @@ 85.24 return err; 85.25 } 85.26 85.27 -static ext2_off64_t compute_inode_size(ext2_filsys fs, ext2_ino_t ino) 85.28 -{ 85.29 - blk64_t num_blocks = 0; 85.30 - 85.31 - ext2fs_block_iterate3(fs, ino, 85.32 - BLOCK_FLAG_READ_ONLY, 85.33 - NULL, 85.34 - compute_num_blocks_proc, 85.35 - &num_blocks); 85.36 - return num_blocks * fs->blocksize; 85.37 -} 85.38 - 85.39 /* Functions to read/write quota file. */ 85.40 static unsigned int quota_write_nomount(struct quota_file *qf, 85.41 ext2_loff_t offset, 85.42 @@ -413,17 +388,8 @@ 85.43 85.44 if (h->qh_ops->end_io && h->qh_ops->end_io(h) < 0) 85.45 return EIO; 85.46 - if (h->qh_qf.e2_file) { 85.47 - __u64 new_size, size; 85.48 - 85.49 - new_size = compute_inode_size(h->qh_qf.fs, h->qh_qf.ino); 85.50 - ext2fs_file_flush(h->qh_qf.e2_file); 85.51 - if (ext2fs_file_get_lsize(h->qh_qf.e2_file, &size)) 85.52 - new_size = 0; 85.53 - if (size != new_size) 85.54 - ext2fs_file_set_size2(h->qh_qf.e2_file, new_size); 85.55 + if (h->qh_qf.e2_file) 85.56 ext2fs_file_close(h->qh_qf.e2_file); 85.57 - } 85.58 if (qctx->quota_file[h->qh_type] == h) 85.59 ext2fs_free_mem(&qctx->quota_file[h->qh_type]); 85.60 return 0;
86.1 --- a/libext2fs/lib/libsupport/quotaio_tree.c Sat Oct 02 23:57:02 2021 +0200 86.2 +++ b/libext2fs/lib/libsupport/quotaio_tree.c Sat Oct 09 23:28:01 2021 +0200 86.3 @@ -540,6 +540,17 @@ 86.4 return dquot; 86.5 } 86.6 86.7 +static int check_reference(struct quota_handle *h, unsigned int blk) 86.8 +{ 86.9 + if (blk >= h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks) { 86.10 + log_err("Illegal reference (%u >= %u) in %s quota file", 86.11 + blk, h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks, 86.12 + quota_type2name(h->qh_type)); 86.13 + return -1; 86.14 + } 86.15 + return 0; 86.16 +} 86.17 + 86.18 /* 86.19 * Scan all dquots in file and call callback on each 86.20 */ 86.21 @@ -558,7 +569,7 @@ 86.22 int entries, i; 86.23 86.24 if (!buf) 86.25 - return 0; 86.26 + return -1; 86.27 86.28 set_bit(bitmap, blk); 86.29 read_blk(dquot->dq_h, blk, buf); 86.30 @@ -580,23 +591,12 @@ 86.31 return entries; 86.32 } 86.33 86.34 -static void check_reference(struct quota_handle *h, unsigned int blk) 86.35 -{ 86.36 - if (blk >= h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks) 86.37 - log_err("Illegal reference (%u >= %u) in %s quota file. " 86.38 - "Quota file is probably corrupted.\n" 86.39 - "Please run e2fsck (8) to fix it.", 86.40 - blk, 86.41 - h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks, 86.42 - quota_type2name(h->qh_type)); 86.43 -} 86.44 - 86.45 static int report_tree(struct dquot *dquot, unsigned int blk, int depth, 86.46 char *bitmap, 86.47 int (*process_dquot) (struct dquot *, void *), 86.48 void *data) 86.49 { 86.50 - int entries = 0, i; 86.51 + int entries = 0, ret, i; 86.52 dqbuf_t buf = getdqbuf(); 86.53 __le32 *ref = (__le32 *) buf; 86.54 86.55 @@ -607,22 +607,40 @@ 86.56 if (depth == QT_TREEDEPTH - 1) { 86.57 for (i = 0; i < QT_BLKSIZE >> 2; i++) { 86.58 blk = ext2fs_le32_to_cpu(ref[i]); 86.59 - check_reference(dquot->dq_h, blk); 86.60 - if (blk && !get_bit(bitmap, blk)) 86.61 - entries += report_block(dquot, blk, bitmap, 86.62 - process_dquot, data); 86.63 + if (check_reference(dquot->dq_h, blk)) { 86.64 + entries = -1; 86.65 + goto errout; 86.66 + } 86.67 + if (blk && !get_bit(bitmap, blk)) { 86.68 + ret = report_block(dquot, blk, bitmap, 86.69 + process_dquot, data); 86.70 + if (ret < 0) { 86.71 + entries = ret; 86.72 + goto errout; 86.73 + } 86.74 + entries += ret; 86.75 + } 86.76 } 86.77 } else { 86.78 for (i = 0; i < QT_BLKSIZE >> 2; i++) { 86.79 blk = ext2fs_le32_to_cpu(ref[i]); 86.80 if (blk) { 86.81 - check_reference(dquot->dq_h, blk); 86.82 - entries += report_tree(dquot, blk, depth + 1, 86.83 - bitmap, process_dquot, 86.84 - data); 86.85 + if (check_reference(dquot->dq_h, blk)) { 86.86 + entries = -1; 86.87 + goto errout; 86.88 + } 86.89 + ret = report_tree(dquot, blk, depth + 1, 86.90 + bitmap, process_dquot, 86.91 + data); 86.92 + if (ret < 0) { 86.93 + entries = ret; 86.94 + goto errout; 86.95 + } 86.96 + entries += ret; 86.97 } 86.98 } 86.99 } 86.100 +errout: 86.101 freedqbuf(buf); 86.102 return entries; 86.103 } 86.104 @@ -642,6 +660,7 @@ 86.105 int (*process_dquot) (struct dquot *, void *), 86.106 void *data) 86.107 { 86.108 + int ret; 86.109 char *bitmap; 86.110 struct v2_mem_dqinfo *v2info = &h->qh_info.u.v2_mdqi; 86.111 struct qtree_mem_dqinfo *info = &v2info->dqi_qtree; 86.112 @@ -655,10 +674,14 @@ 86.113 ext2fs_free_mem(&dquot); 86.114 return -1; 86.115 } 86.116 - v2info->dqi_used_entries = report_tree(dquot, QT_TREEOFF, 0, bitmap, 86.117 - process_dquot, data); 86.118 + ret = report_tree(dquot, QT_TREEOFF, 0, bitmap, process_dquot, data); 86.119 + if (ret < 0) 86.120 + goto errout; 86.121 + v2info->dqi_used_entries = ret; 86.122 v2info->dqi_data_blocks = find_set_bits(bitmap, info->dqi_blocks); 86.123 + ret = 0; 86.124 +errout: 86.125 ext2fs_free_mem(&bitmap); 86.126 ext2fs_free_mem(&dquot); 86.127 - return 0; 86.128 + return ret; 86.129 }
87.1 --- a/libext2fs/lib/libsupport/quotaio_v2.c Sat Oct 02 23:57:02 2021 +0200 87.2 +++ b/libext2fs/lib/libsupport/quotaio_v2.c Sat Oct 09 23:28:01 2021 +0200 87.3 @@ -175,6 +175,8 @@ 87.4 static int v2_init_io(struct quota_handle *h) 87.5 { 87.6 struct v2_disk_dqinfo ddqinfo; 87.7 + struct v2_mem_dqinfo *info; 87.8 + __u64 filesize; 87.9 87.10 h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size = 87.11 sizeof(struct v2r1_disk_dqblk); 87.12 @@ -185,6 +187,33 @@ 87.13 sizeof(ddqinfo)) != sizeof(ddqinfo)) 87.14 return -1; 87.15 v2_disk2memdqinfo(&h->qh_info, &ddqinfo); 87.16 + 87.17 + /* Check to make sure quota file info is sane */ 87.18 + info = &h->qh_info.u.v2_mdqi; 87.19 + if (ext2fs_file_get_lsize(h->qh_qf.e2_file, &filesize)) 87.20 + return -1; 87.21 + if ((filesize > (1U << 31)) || 87.22 + (info->dqi_qtree.dqi_blocks > 87.23 + (filesize + QT_BLKSIZE - 1) >> QT_BLKSIZE_BITS)) { 87.24 + log_err("Quota inode %u corrupted: file size %llu; " 87.25 + "dqi_blocks %u", h->qh_qf.ino, 87.26 + (unsigned long long) filesize, 87.27 + info->dqi_qtree.dqi_blocks); 87.28 + return -1; 87.29 + } 87.30 + if (info->dqi_qtree.dqi_free_blk >= info->dqi_qtree.dqi_blocks) { 87.31 + log_err("Quota inode %u corrupted: free_blk %u; dqi_blocks %u", 87.32 + h->qh_qf.ino, info->dqi_qtree.dqi_free_blk, 87.33 + info->dqi_qtree.dqi_blocks); 87.34 + return -1; 87.35 + } 87.36 + if (info->dqi_qtree.dqi_free_entry >= info->dqi_qtree.dqi_blocks) { 87.37 + log_err("Quota inode %u corrupted: free_entry %u; " 87.38 + "dqi_blocks %u", h->qh_qf.ino, 87.39 + info->dqi_qtree.dqi_free_entry, 87.40 + info->dqi_qtree.dqi_blocks); 87.41 + return -1; 87.42 + } 87.43 return 0; 87.44 } 87.45
88.1 --- a/libext2fs/lib/version.h Sat Oct 02 23:57:02 2021 +0200 88.2 +++ b/libext2fs/lib/version.h Sat Oct 09 23:28:01 2021 +0200 88.3 @@ -7,5 +7,5 @@ 88.4 * file may be redistributed under the GNU Public License v2. 88.5 */ 88.6 88.7 -#define E2FSPROGS_VERSION "1.44.5" 88.8 -#define E2FSPROGS_DATE "15-Dec-2018" 88.9 +#define E2FSPROGS_VERSION "1.46.2" 88.10 +#define E2FSPROGS_DATE "28-Feb-2021"
89.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 89.2 +++ b/libext2fs/tools/get_config Sat Oct 09 23:28:01 2021 +0200 89.3 @@ -0,0 +1,19 @@ 89.4 +#!/bin/sh 89.5 + 89.6 +# Find definition usage in the available sources. 89.7 + 89.8 +E2FSPROGS=$1 89.9 + 89.10 +# Find definition names. 89.11 + 89.12 +for DEF in `grep '#define' "$E2FSPROGS/lib/config.h" | sed 's/#define //;s/ .*$//' | grep -e '^[A-Z_]'` ; do 89.13 + 89.14 + # Look for use of each definition in the libext2fs sources, filtering out 89.15 + # definitions that are not used. 89.16 + 89.17 + if find "$E2FSPROGS/lib" -mindepth 2 -name '*.[ch]' | xargs grep -q -e "$DEF" ; then 89.18 + grep "#define $DEF" "$E2FSPROGS/lib/config.h" 89.19 + fi 89.20 +done 89.21 + 89.22 +# vim: tabstop=4 expandtab shiftwidth=4
90.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 90.2 +++ b/libext2fs/tools/make_config Sat Oct 09 23:28:01 2021 +0200 90.3 @@ -0,0 +1,30 @@ 90.4 +#!/bin/sh 90.5 + 90.6 +# Find definition usage in this package's sources. 90.7 + 90.8 +THISDIR=`dirname "$0"` 90.9 +PKGDIR=`dirname "$THISDIR"` 90.10 +CONFIG=$1 90.11 + 90.12 +if [ ! -e "$CONFIG" ] ; then 90.13 + cat 1>&2 <<EOF 90.14 +Please specify the location of lib/config.h in the e2fsprogs distribution. 90.15 +EOF 90.16 + exit 1 90.17 +fi 90.18 + 90.19 +# Insert base configuration. 90.20 + 90.21 +cat "$PKGDIR/lib/config.h.in-l4re" > "$PKGDIR/lib/config.h" 90.22 + 90.23 +# Find definition names in the sources and insert appropriate configuration 90.24 +# settings. 90.25 + 90.26 +DEFS='HAVE_[0-9A-Z_]*\|TLS\|VERSION' 90.27 + 90.28 +for SETTING in `find "$PKGDIR/include" "$PKGDIR/lib" -mindepth 2 -type f -name '*.[ch]' | xargs grep -o "$DEFS" | cut -d: -f2 | sort -u` ; do 90.29 + grep -e "$SETTING" "$CONFIG" | grep '#define' 90.30 +done \ 90.31 +| uniq >> "$PKGDIR/lib/config.h" 90.32 + 90.33 +# vim: tabstop=4 expandtab shiftwidth=4