FreeRDP
ncrush.c
1 
22 #include <freerdp/config.h>
23 
24 #include <winpr/assert.h>
25 #include <winpr/cast.h>
26 #include <winpr/crt.h>
27 #include <winpr/print.h>
28 #include <winpr/bitstream.h>
29 
30 #include <freerdp/log.h>
31 #include <freerdp/types.h>
32 
33 #include "ncrush.h"
34 
35 #define TAG FREERDP_TAG("codec")
36 
37 struct s_NCRUSH_CONTEXT
38 {
39  ALIGN64 BOOL Compressor;
40  ALIGN64 BYTE* HistoryPtr;
41  ALIGN64 UINT32 HistoryOffset;
42  ALIGN64 UINT32 HistoryEndOffset;
43  ALIGN64 UINT32 HistoryBufferSize;
44  ALIGN64 BYTE HistoryBuffer[65536];
45  ALIGN64 UINT32 HistoryBufferFence;
46  ALIGN64 UINT32 OffsetCache[4];
47  ALIGN64 UINT16 HashTable[65536];
48  ALIGN64 UINT16 MatchTable[65536];
49  ALIGN64 BYTE HuffTableCopyOffset[1024];
50  ALIGN64 BYTE HuffTableLOM[4096];
51 };
52 
53 static const UINT16 HuffTableLEC[8192] = {
54  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
55  0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
56  0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
57  0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
58  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
59  0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
60  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
61  0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
62  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
63  0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
64  0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
65  0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
66  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
67  0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
68  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
69  0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
70  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
71  0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
72  0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
73  0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
74  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
75  0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
76  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
77  0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
78  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
79  0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
80  0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
81  0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
82  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
83  0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
84  0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
85  0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
86  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
87  0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
88  0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
89  0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
90  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
91  0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
92  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
93  0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
94  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
95  0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
96  0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
97  0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
98  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
99  0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
100  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
101  0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
102  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
103  0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
104  0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
105  0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
106  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
107  0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
108  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
109  0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
110  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
111  0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
112  0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
113  0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
114  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
115  0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
116  0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
117  0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
118  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
119  0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
120  0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
121  0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
122  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
123  0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
124  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
125  0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
126  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
127  0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
128  0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
129  0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
130  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
131  0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
132  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
133  0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
134  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
135  0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
136  0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
137  0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
138  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
139  0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
140  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
141  0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
142  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
143  0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
144  0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
145  0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
146  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
147  0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
148  0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
149  0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
150  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
151  0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
152  0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
153  0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
154  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
155  0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
156  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
157  0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
158  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
159  0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
160  0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
161  0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
162  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
163  0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
164  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
165  0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
166  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
167  0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
168  0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
169  0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
170  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
171  0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
172  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
173  0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
174  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
175  0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
176  0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
177  0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
178  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
179  0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
180  0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
181  0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
182  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
183  0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
184  0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
185  0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
186  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
187  0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
188  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
189  0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
190  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
191  0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
192  0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
193  0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
194  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
195  0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
196  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
197  0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
198  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
199  0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
200  0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
201  0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
202  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
203  0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
204  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
205  0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
206  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
207  0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
208  0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
209  0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
210  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
211  0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
212  0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
213  0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
214  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
215  0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
216  0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
217  0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
218  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
219  0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
220  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
221  0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
222  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
223  0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
224  0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD0AB, 0x510B, 0x611F, 0x610D, 0x9027,
225  0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3,
226  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A,
227  0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A,
228  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070,
229  0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8,
230  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0,
231  0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099,
232  0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C,
233  0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE,
234  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F,
235  0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C,
236  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044,
237  0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB,
238  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC,
239  0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5,
240  0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031,
241  0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF,
242  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052,
243  0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C,
244  0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088,
245  0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA,
246  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6,
247  0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093,
248  0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037,
249  0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7,
250  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058,
251  0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073,
252  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050,
253  0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2,
254  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D,
255  0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC,
256  0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A,
257  0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9,
258  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A,
259  0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085,
260  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081,
261  0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF,
262  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2,
263  0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F,
264  0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041,
265  0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5,
266  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066,
267  0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069,
268  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042,
269  0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8,
270  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4,
271  0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2,
272  0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C,
273  0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC,
274  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D,
275  0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089,
276  0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082,
277  0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6,
278  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC,
279  0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096,
280  0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038,
281  0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA,
282  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C,
283  0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076,
284  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051,
285  0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5,
286  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032,
287  0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF,
288  0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028,
289  0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6,
290  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045,
291  0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D,
292  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078,
293  0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB,
294  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE,
295  0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C,
296  0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E,
297  0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2,
298  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063,
299  0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F,
300  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048,
301  0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE,
302  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD,
303  0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8,
304  0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033,
305  0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3,
306  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055,
307  0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F,
308  0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090,
309  0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2,
310  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
311  0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
312  0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
313  0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
314  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
315  0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
316  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
317  0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
318  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
319  0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
320  0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
321  0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
322  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
323  0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
324  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
325  0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
326  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
327  0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
328  0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
329  0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
330  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
331  0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
332  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
333  0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
334  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
335  0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
336  0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
337  0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
338  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
339  0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
340  0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
341  0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
342  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
343  0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
344  0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
345  0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
346  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
347  0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
348  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
349  0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
350  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
351  0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
352  0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
353  0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
354  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
355  0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
356  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
357  0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
358  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
359  0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
360  0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
361  0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
362  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
363  0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
364  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
365  0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
366  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
367  0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
368  0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
369  0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
370  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
371  0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
372  0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
373  0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
374  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
375  0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
376  0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
377  0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
378  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
379  0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
380  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
381  0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
382  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
383  0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
384  0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
385  0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
386  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
387  0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
388  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
389  0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
390  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
391  0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
392  0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
393  0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
394  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
395  0x610C, 0x9026, 0x611E, 0xD101, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
396  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
397  0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
398  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
399  0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
400  0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
401  0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
402  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
403  0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
404  0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
405  0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
406  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
407  0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
408  0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
409  0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
410  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
411  0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
412  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
413  0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
414  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
415  0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
416  0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
417  0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
418  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
419  0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
420  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
421  0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
422  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
423  0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
424  0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
425  0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
426  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
427  0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
428  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
429  0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
430  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
431  0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
432  0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
433  0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
434  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
435  0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
436  0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
437  0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
438  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
439  0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
440  0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
441  0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
442  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
443  0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
444  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
445  0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
446  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
447  0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
448  0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
449  0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
450  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
451  0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
452  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
453  0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
454  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
455  0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
456  0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
457  0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
458  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
459  0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
460  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
461  0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
462  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
463  0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
464  0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
465  0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
466  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
467  0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
468  0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
469  0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
470  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
471  0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
472  0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
473  0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
474  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
475  0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
476  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
477  0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
478  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
479  0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
480  0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027,
481  0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3,
482  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A,
483  0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A,
484  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070,
485  0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8,
486  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0,
487  0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099,
488  0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C,
489  0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE,
490  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F,
491  0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C,
492  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044,
493  0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB,
494  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC,
495  0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5,
496  0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031,
497  0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF,
498  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052,
499  0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C,
500  0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088,
501  0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA,
502  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6,
503  0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093,
504  0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037,
505  0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7,
506  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058,
507  0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073,
508  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050,
509  0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2,
510  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D,
511  0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC,
512  0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A,
513  0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9,
514  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A,
515  0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085,
516  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081,
517  0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF,
518  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2,
519  0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F,
520  0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041,
521  0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5,
522  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066,
523  0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069,
524  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042,
525  0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8,
526  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4,
527  0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2,
528  0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C,
529  0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC,
530  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D,
531  0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089,
532  0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082,
533  0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6,
534  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC,
535  0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096,
536  0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038,
537  0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA,
538  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C,
539  0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076,
540  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051,
541  0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5,
542  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032,
543  0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF,
544  0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028,
545  0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6,
546  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045,
547  0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D,
548  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078,
549  0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB,
550  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE,
551  0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C,
552  0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E,
553  0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2,
554  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063,
555  0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F,
556  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048,
557  0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE,
558  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD,
559  0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8,
560  0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033,
561  0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3,
562  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055,
563  0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F,
564  0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090,
565  0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD100,
566  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
567  0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
568  0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
569  0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
570  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
571  0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
572  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
573  0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
574  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
575  0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
576  0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
577  0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
578  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
579  0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
580  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
581  0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
582  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
583  0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
584  0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
585  0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
586  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
587  0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
588  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
589  0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
590  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
591  0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
592  0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
593  0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
594  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
595  0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
596  0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
597  0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
598  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
599  0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
600  0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
601  0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
602  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
603  0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
604  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
605  0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
606  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
607  0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
608  0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
609  0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
610  0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
611  0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
612  0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
613  0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
614  0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
615  0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
616  0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
617  0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
618  0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
619  0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
620  0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
621  0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
622  0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
623  0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
624  0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
625  0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
626  0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
627  0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
628  0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
629  0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
630  0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
631  0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
632  0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
633  0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
634  0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
635  0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
636  0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
637  0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
638  0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
639  0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
640  0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
641  0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
642  0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
643  0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
644  0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
645  0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
646  0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
647  0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
648  0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
649  0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
650  0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
651  0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
652  0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
653  0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
654  0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
655  0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
656  0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
657  0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
658  0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
659  0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
660  0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
661  0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
662  0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
663  0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
664  0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
665  0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
666  0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
667  0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
668  0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
669  0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
670  0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
671  0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
672  0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
673  0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
674  0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
675  0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
676  0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
677  0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
678  0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
679  0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
680  0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
681  0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
682  0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
683  0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
684  0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
685  0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
686  0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
687  0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
688  0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
689  0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
690  0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
691  0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
692  0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
693  0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
694  0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
695  0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
696  0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
697  0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
698  0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
699  0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
700  0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
701  0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
702  0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
703  0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
704  0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
705  0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
706  0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
707  0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
708  0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
709  0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
710  0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
711  0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
712  0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
713  0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
714  0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
715  0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
716  0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
717  0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
718  0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
719  0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
720  0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
721  0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
722  0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
723  0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
724  0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
725  0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
726  0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
727  0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
728  0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
729  0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
730  0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
731  0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
732  0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
733  0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
734  0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
735  0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
736  0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD125
737 };
738 
739 static const UINT16 HuffTableLOM[512] = {
740  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
741  0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
742  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012, 0x2001, 0x4000, 0x3002, 0x4008,
743  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010,
744  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
745  0x2001, 0x4006, 0x3004, 0x9018, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
746  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008,
747  0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9013,
748  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
749  0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
750  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901C, 0x2001, 0x4000, 0x3002, 0x4008,
751  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D,
752  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009,
753  0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
754  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008,
755  0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901A,
756  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
757  0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
758  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9016, 0x2001, 0x4000, 0x3002, 0x4008,
759  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x8011,
760  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
761  0x2001, 0x4006, 0x3004, 0x901E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
762  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008,
763  0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012,
764  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
765  0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
766  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9019, 0x2001, 0x4000, 0x3002, 0x4008,
767  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E,
768  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009,
769  0x2001, 0x4006, 0x3004, 0x9014, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
770  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008,
771  0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901D,
772  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
773  0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
774  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008,
775  0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010,
776  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
777  0x2001, 0x4006, 0x3004, 0x901B, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
778  0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008,
779  0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9017,
780  0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
781  0x2001, 0x4006, 0x3004, 0x8011, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
782  0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901F
783 };
784 
785 static const BYTE HuffTableMask[39] = {
786  0x11, /* 0 */
787  0x9E, /* 1 */
788  0xA1, /* 2 */
789  0x00, /* 3 */
790  0x00, /* 4 */
791  0x01, /* 5 */
792  0x00, /* 6 */
793  0x03, /* 7 */
794  0x00, /* 8 */
795  0x07, /* 9 */
796  0x00, /* 10 */
797  0x0F, /* 11 */
798  0x00, /* 12 */
799  0x1F, /* 13 */
800  0x00, /* 14 */
801  0x3F, /* 15 */
802  0x00, /* 16 */
803  0x7F, /* 17 */
804  0x00, /* 18 */
805  0xFF, /* 19 */
806  0x00, /* 20 */
807  0xFF, /* 21 */
808  0x01, /* 22 */
809  0xFF, /* 23 */
810  0x03, /* 24 */
811  0xFF, /* 25 */
812  0x07, /* 26 */
813  0xFF, /* 27 */
814  0x0F, /* 28 */
815  0xFF, /* 29 */
816  0x1F, /* 30 */
817  0xFF, /* 31 */
818  0x3F, /* 32 */
819  0xFF, /* 33 */
820  0x7F, /* 34 */
821  0xFF, /* 35 */
822  0xFF, /* 36 */
823  0x00, /* 37 */
824  0x00 /* 38 */
825 };
826 
827 static const BYTE HuffLengthLEC[294] = {
828  6, /* 0 */
829  6, /* 1 */
830  6, /* 2 */
831  7, /* 3 */
832  7, /* 4 */
833  7, /* 5 */
834  7, /* 6 */
835  7, /* 7 */
836  7, /* 8 */
837  7, /* 9 */
838  7, /* 10 */
839  8, /* 11 */
840  8, /* 12 */
841  8, /* 13 */
842  8, /* 14 */
843  8, /* 15 */
844  8, /* 16 */
845  8, /* 17 */
846  9, /* 18 */
847  8, /* 19 */
848  9, /* 20 */
849  9, /* 21 */
850  9, /* 22 */
851  9, /* 23 */
852  8, /* 24 */
853  8, /* 25 */
854  9, /* 26 */
855  9, /* 27 */
856  9, /* 28 */
857  9, /* 29 */
858  9, /* 30 */
859  9, /* 31 */
860  8, /* 32 */
861  9, /* 33 */
862  9, /* 34 */
863  10, /* 35 */
864  9, /* 36 */
865  9, /* 37 */
866  9, /* 38 */
867  9, /* 39 */
868  9, /* 40 */
869  9, /* 41 */
870  9, /* 42 */
871  10, /* 43 */
872  9, /* 44 */
873  10, /* 45 */
874  10, /* 46 */
875  10, /* 47 */
876  9, /* 48 */
877  9, /* 49 */
878  10, /* 50 */
879  9, /* 51 */
880  10, /* 52 */
881  9, /* 53 */
882  10, /* 54 */
883  9, /* 55 */
884  9, /* 56 */
885  9, /* 57 */
886  10, /* 58 */
887  10, /* 59 */
888  9, /* 60 */
889  10, /* 61 */
890  9, /* 62 */
891  9, /* 63 */
892  8, /* 64 */
893  9, /* 65 */
894  9, /* 66 */
895  9, /* 67 */
896  9, /* 68 */
897  10, /* 69 */
898  10, /* 70 */
899  10, /* 71 */
900  9, /* 72 */
901  9, /* 73 */
902  10, /* 74 */
903  10, /* 75 */
904  10, /* 76 */
905  10, /* 77 */
906  10, /* 78 */
907  10, /* 79 */
908  9, /* 80 */
909  9, /* 81 */
910  10, /* 82 */
911  10, /* 83 */
912  10, /* 84 */
913  10, /* 85 */
914  10, /* 86 */
915  10, /* 87 */
916  10, /* 88 */
917  9, /* 89 */
918  10, /* 90 */
919  10, /* 91 */
920  10, /* 92 */
921  10, /* 93 */
922  10, /* 94 */
923  10, /* 95 */
924  8, /* 96 */
925  10, /* 97 */
926  10, /* 98 */
927  10, /* 99 */
928  10, /* 100 */
929  10, /* 101 */
930  10, /* 102 */
931  10, /* 103 */
932  10, /* 104 */
933  10, /* 105 */
934  10, /* 106 */
935  10, /* 107 */
936  10, /* 108 */
937  10, /* 109 */
938  10, /* 110 */
939  10, /* 111 */
940  9, /* 112 */
941  10, /* 113 */
942  10, /* 114 */
943  10, /* 115 */
944  10, /* 116 */
945  10, /* 117 */
946  10, /* 118 */
947  10, /* 119 */
948  9, /* 120 */
949  10, /* 121 */
950  10, /* 122 */
951  10, /* 123 */
952  10, /* 124 */
953  10, /* 125 */
954  10, /* 126 */
955  9, /* 127 */
956  7, /* 128 */
957  9, /* 129 */
958  9, /* 130 */
959  10, /* 131 */
960  9, /* 132 */
961  10, /* 133 */
962  10, /* 134 */
963  10, /* 135 */
964  9, /* 136 */
965  10, /* 137 */
966  10, /* 138 */
967  10, /* 139 */
968  10, /* 140 */
969  10, /* 141 */
970  10, /* 142 */
971  10, /* 143 */
972  9, /* 144 */
973  10, /* 145 */
974  10, /* 146 */
975  10, /* 147 */
976  10, /* 148 */
977  10, /* 149 */
978  10, /* 150 */
979  10, /* 151 */
980  10, /* 152 */
981  10, /* 153 */
982  10, /* 154 */
983  10, /* 155 */
984  10, /* 156 */
985  10, /* 157 */
986  10, /* 158 */
987  10, /* 159 */
988  10, /* 160 */
989  10, /* 161 */
990  10, /* 162 */
991  10, /* 163 */
992  10, /* 164 */
993  10, /* 165 */
994  10, /* 166 */
995  10, /* 167 */
996  10, /* 168 */
997  10, /* 169 */
998  10, /* 170 */
999  13, /* 171 */
1000  10, /* 172 */
1001  10, /* 173 */
1002  10, /* 174 */
1003  10, /* 175 */
1004  10, /* 176 */
1005  10, /* 177 */
1006  11, /* 178 */
1007  10, /* 179 */
1008  10, /* 180 */
1009  10, /* 181 */
1010  10, /* 182 */
1011  10, /* 183 */
1012  10, /* 184 */
1013  10, /* 185 */
1014  10, /* 186 */
1015  10, /* 187 */
1016  10, /* 188 */
1017  10, /* 189 */
1018  10, /* 190 */
1019  10, /* 191 */
1020  9, /* 192 */
1021  10, /* 193 */
1022  10, /* 194 */
1023  10, /* 195 */
1024  10, /* 196 */
1025  10, /* 197 */
1026  9, /* 198 */
1027  10, /* 199 */
1028  10, /* 200 */
1029  10, /* 201 */
1030  10, /* 202 */
1031  10, /* 203 */
1032  9, /* 204 */
1033  10, /* 205 */
1034  10, /* 206 */
1035  10, /* 207 */
1036  9, /* 208 */
1037  10, /* 209 */
1038  10, /* 210 */
1039  10, /* 211 */
1040  10, /* 212 */
1041  10, /* 213 */
1042  10, /* 214 */
1043  10, /* 215 */
1044  10, /* 216 */
1045  10, /* 217 */
1046  10, /* 218 */
1047  10, /* 219 */
1048  10, /* 220 */
1049  10, /* 221 */
1050  10, /* 222 */
1051  10, /* 223 */
1052  9, /* 224 */
1053  10, /* 225 */
1054  10, /* 226 */
1055  10, /* 227 */
1056  10, /* 228 */
1057  10, /* 229 */
1058  10, /* 230 */
1059  10, /* 231 */
1060  10, /* 232 */
1061  10, /* 233 */
1062  10, /* 234 */
1063  10, /* 235 */
1064  10, /* 236 */
1065  10, /* 237 */
1066  9, /* 238 */
1067  10, /* 239 */
1068  8, /* 240 */
1069  9, /* 241 */
1070  9, /* 242 */
1071  10, /* 243 */
1072  9, /* 244 */
1073  10, /* 245 */
1074  10, /* 246 */
1075  10, /* 247 */
1076  9, /* 248 */
1077  10, /* 249 */
1078  10, /* 250 */
1079  10, /* 251 */
1080  9, /* 252 */
1081  9, /* 253 */
1082  8, /* 254 */
1083  7, /* 255 */
1084  13, /* 256 */
1085  13, /* 257 */
1086  7, /* 258 */
1087  7, /* 259 */
1088  10, /* 260 */
1089  7, /* 261 */
1090  7, /* 262 */
1091  6, /* 263 */
1092  6, /* 264 */
1093  6, /* 265 */
1094  6, /* 266 */
1095  5, /* 267 */
1096  6, /* 268 */
1097  6, /* 269 */
1098  6, /* 270 */
1099  5, /* 271 */
1100  6, /* 272 */
1101  5, /* 273 */
1102  6, /* 274 */
1103  6, /* 275 */
1104  6, /* 276 */
1105  6, /* 277 */
1106  6, /* 278 */
1107  6, /* 279 */
1108  6, /* 280 */
1109  6, /* 281 */
1110  6, /* 282 */
1111  6, /* 283 */
1112  6, /* 284 */
1113  6, /* 285 */
1114  6, /* 286 */
1115  6, /* 287 */
1116  8, /* 288 */
1117  5, /* 289 */
1118  6, /* 290 */
1119  7, /* 291 */
1120  7, /* 292 */
1121  13 /* 293 */
1122 };
1123 
1124 static const BYTE HuffCodeLEC[588] = {
1125  0x04, /* 0 */
1126  0x00, /* 1 */
1127  0x24, /* 2 */
1128  0x00, /* 3 */
1129  0x14, /* 4 */
1130  0x00, /* 5 */
1131  0x11, /* 6 */
1132  0x00, /* 7 */
1133  0x51, /* 8 */
1134  0x00, /* 9 */
1135  0x31, /* 10 */
1136  0x00, /* 11 */
1137  0x71, /* 12 */
1138  0x00, /* 13 */
1139  0x09, /* 14 */
1140  0x00, /* 15 */
1141  0x49, /* 16 */
1142  0x00, /* 17 */
1143  0x29, /* 18 */
1144  0x00, /* 19 */
1145  0x69, /* 20 */
1146  0x00, /* 21 */
1147  0x15, /* 22 */
1148  0x00, /* 23 */
1149  0x95, /* 24 */
1150  0x00, /* 25 */
1151  0x55, /* 26 */
1152  0x00, /* 27 */
1153  0xD5, /* 28 */
1154  0x00, /* 29 */
1155  0x35, /* 30 */
1156  0x00, /* 31 */
1157  0xB5, /* 32 */
1158  0x00, /* 33 */
1159  0x75, /* 34 */
1160  0x00, /* 35 */
1161  0x1D, /* 36 */
1162  0x00, /* 37 */
1163  0xF5, /* 38 */
1164  0x00, /* 39 */
1165  0x1D, /* 40 */
1166  0x01, /* 41 */
1167  0x9D, /* 42 */
1168  0x00, /* 43 */
1169  0x9D, /* 44 */
1170  0x01, /* 45 */
1171  0x5D, /* 46 */
1172  0x00, /* 47 */
1173  0x0D, /* 48 */
1174  0x00, /* 49 */
1175  0x8D, /* 50 */
1176  0x00, /* 51 */
1177  0x5D, /* 52 */
1178  0x01, /* 53 */
1179  0xDD, /* 54 */
1180  0x00, /* 55 */
1181  0xDD, /* 56 */
1182  0x01, /* 57 */
1183  0x3D, /* 58 */
1184  0x00, /* 59 */
1185  0x3D, /* 60 */
1186  0x01, /* 61 */
1187  0xBD, /* 62 */
1188  0x00, /* 63 */
1189  0x4D, /* 64 */
1190  0x00, /* 65 */
1191  0xBD, /* 66 */
1192  0x01, /* 67 */
1193  0x7D, /* 68 */
1194  0x00, /* 69 */
1195  0x6B, /* 70 */
1196  0x00, /* 71 */
1197  0x7D, /* 72 */
1198  0x01, /* 73 */
1199  0xFD, /* 74 */
1200  0x00, /* 75 */
1201  0xFD, /* 76 */
1202  0x01, /* 77 */
1203  0x03, /* 78 */
1204  0x00, /* 79 */
1205  0x03, /* 80 */
1206  0x01, /* 81 */
1207  0x83, /* 82 */
1208  0x00, /* 83 */
1209  0x83, /* 84 */
1210  0x01, /* 85 */
1211  0x6B, /* 86 */
1212  0x02, /* 87 */
1213  0x43, /* 88 */
1214  0x00, /* 89 */
1215  0x6B, /* 90 */
1216  0x01, /* 91 */
1217  0x6B, /* 92 */
1218  0x03, /* 93 */
1219  0xEB, /* 94 */
1220  0x00, /* 95 */
1221  0x43, /* 96 */
1222  0x01, /* 97 */
1223  0xC3, /* 98 */
1224  0x00, /* 99 */
1225  0xEB, /* 100 */
1226  0x02, /* 101 */
1227  0xC3, /* 102 */
1228  0x01, /* 103 */
1229  0xEB, /* 104 */
1230  0x01, /* 105 */
1231  0x23, /* 106 */
1232  0x00, /* 107 */
1233  0xEB, /* 108 */
1234  0x03, /* 109 */
1235  0x23, /* 110 */
1236  0x01, /* 111 */
1237  0xA3, /* 112 */
1238  0x00, /* 113 */
1239  0xA3, /* 114 */
1240  0x01, /* 115 */
1241  0x1B, /* 116 */
1242  0x00, /* 117 */
1243  0x1B, /* 118 */
1244  0x02, /* 119 */
1245  0x63, /* 120 */
1246  0x00, /* 121 */
1247  0x1B, /* 122 */
1248  0x01, /* 123 */
1249  0x63, /* 124 */
1250  0x01, /* 125 */
1251  0xE3, /* 126 */
1252  0x00, /* 127 */
1253  0xCD, /* 128 */
1254  0x00, /* 129 */
1255  0xE3, /* 130 */
1256  0x01, /* 131 */
1257  0x13, /* 132 */
1258  0x00, /* 133 */
1259  0x13, /* 134 */
1260  0x01, /* 135 */
1261  0x93, /* 136 */
1262  0x00, /* 137 */
1263  0x1B, /* 138 */
1264  0x03, /* 139 */
1265  0x9B, /* 140 */
1266  0x00, /* 141 */
1267  0x9B, /* 142 */
1268  0x02, /* 143 */
1269  0x93, /* 144 */
1270  0x01, /* 145 */
1271  0x53, /* 146 */
1272  0x00, /* 147 */
1273  0x9B, /* 148 */
1274  0x01, /* 149 */
1275  0x9B, /* 150 */
1276  0x03, /* 151 */
1277  0x5B, /* 152 */
1278  0x00, /* 153 */
1279  0x5B, /* 154 */
1280  0x02, /* 155 */
1281  0x5B, /* 156 */
1282  0x01, /* 157 */
1283  0x5B, /* 158 */
1284  0x03, /* 159 */
1285  0x53, /* 160 */
1286  0x01, /* 161 */
1287  0xD3, /* 162 */
1288  0x00, /* 163 */
1289  0xDB, /* 164 */
1290  0x00, /* 165 */
1291  0xDB, /* 166 */
1292  0x02, /* 167 */
1293  0xDB, /* 168 */
1294  0x01, /* 169 */
1295  0xDB, /* 170 */
1296  0x03, /* 171 */
1297  0x3B, /* 172 */
1298  0x00, /* 173 */
1299  0x3B, /* 174 */
1300  0x02, /* 175 */
1301  0x3B, /* 176 */
1302  0x01, /* 177 */
1303  0xD3, /* 178 */
1304  0x01, /* 179 */
1305  0x3B, /* 180 */
1306  0x03, /* 181 */
1307  0xBB, /* 182 */
1308  0x00, /* 183 */
1309  0xBB, /* 184 */
1310  0x02, /* 185 */
1311  0xBB, /* 186 */
1312  0x01, /* 187 */
1313  0xBB, /* 188 */
1314  0x03, /* 189 */
1315  0x7B, /* 190 */
1316  0x00, /* 191 */
1317  0x2D, /* 192 */
1318  0x00, /* 193 */
1319  0x7B, /* 194 */
1320  0x02, /* 195 */
1321  0x7B, /* 196 */
1322  0x01, /* 197 */
1323  0x7B, /* 198 */
1324  0x03, /* 199 */
1325  0xFB, /* 200 */
1326  0x00, /* 201 */
1327  0xFB, /* 202 */
1328  0x02, /* 203 */
1329  0xFB, /* 204 */
1330  0x01, /* 205 */
1331  0xFB, /* 206 */
1332  0x03, /* 207 */
1333  0x07, /* 208 */
1334  0x00, /* 209 */
1335  0x07, /* 210 */
1336  0x02, /* 211 */
1337  0x07, /* 212 */
1338  0x01, /* 213 */
1339  0x07, /* 214 */
1340  0x03, /* 215 */
1341  0x87, /* 216 */
1342  0x00, /* 217 */
1343  0x87, /* 218 */
1344  0x02, /* 219 */
1345  0x87, /* 220 */
1346  0x01, /* 221 */
1347  0x87, /* 222 */
1348  0x03, /* 223 */
1349  0x33, /* 224 */
1350  0x00, /* 225 */
1351  0x47, /* 226 */
1352  0x00, /* 227 */
1353  0x47, /* 228 */
1354  0x02, /* 229 */
1355  0x47, /* 230 */
1356  0x01, /* 231 */
1357  0x47, /* 232 */
1358  0x03, /* 233 */
1359  0xC7, /* 234 */
1360  0x00, /* 235 */
1361  0xC7, /* 236 */
1362  0x02, /* 237 */
1363  0xC7, /* 238 */
1364  0x01, /* 239 */
1365  0x33, /* 240 */
1366  0x01, /* 241 */
1367  0xC7, /* 242 */
1368  0x03, /* 243 */
1369  0x27, /* 244 */
1370  0x00, /* 245 */
1371  0x27, /* 246 */
1372  0x02, /* 247 */
1373  0x27, /* 248 */
1374  0x01, /* 249 */
1375  0x27, /* 250 */
1376  0x03, /* 251 */
1377  0xA7, /* 252 */
1378  0x00, /* 253 */
1379  0xB3, /* 254 */
1380  0x00, /* 255 */
1381  0x19, /* 256 */
1382  0x00, /* 257 */
1383  0xB3, /* 258 */
1384  0x01, /* 259 */
1385  0x73, /* 260 */
1386  0x00, /* 261 */
1387  0xA7, /* 262 */
1388  0x02, /* 263 */
1389  0x73, /* 264 */
1390  0x01, /* 265 */
1391  0xA7, /* 266 */
1392  0x01, /* 267 */
1393  0xA7, /* 268 */
1394  0x03, /* 269 */
1395  0x67, /* 270 */
1396  0x00, /* 271 */
1397  0xF3, /* 272 */
1398  0x00, /* 273 */
1399  0x67, /* 274 */
1400  0x02, /* 275 */
1401  0x67, /* 276 */
1402  0x01, /* 277 */
1403  0x67, /* 278 */
1404  0x03, /* 279 */
1405  0xE7, /* 280 */
1406  0x00, /* 281 */
1407  0xE7, /* 282 */
1408  0x02, /* 283 */
1409  0xE7, /* 284 */
1410  0x01, /* 285 */
1411  0xE7, /* 286 */
1412  0x03, /* 287 */
1413  0xF3, /* 288 */
1414  0x01, /* 289 */
1415  0x17, /* 290 */
1416  0x00, /* 291 */
1417  0x17, /* 292 */
1418  0x02, /* 293 */
1419  0x17, /* 294 */
1420  0x01, /* 295 */
1421  0x17, /* 296 */
1422  0x03, /* 297 */
1423  0x97, /* 298 */
1424  0x00, /* 299 */
1425  0x97, /* 300 */
1426  0x02, /* 301 */
1427  0x97, /* 302 */
1428  0x01, /* 303 */
1429  0x97, /* 304 */
1430  0x03, /* 305 */
1431  0x57, /* 306 */
1432  0x00, /* 307 */
1433  0x57, /* 308 */
1434  0x02, /* 309 */
1435  0x57, /* 310 */
1436  0x01, /* 311 */
1437  0x57, /* 312 */
1438  0x03, /* 313 */
1439  0xD7, /* 314 */
1440  0x00, /* 315 */
1441  0xD7, /* 316 */
1442  0x02, /* 317 */
1443  0xD7, /* 318 */
1444  0x01, /* 319 */
1445  0xD7, /* 320 */
1446  0x03, /* 321 */
1447  0x37, /* 322 */
1448  0x00, /* 323 */
1449  0x37, /* 324 */
1450  0x02, /* 325 */
1451  0x37, /* 326 */
1452  0x01, /* 327 */
1453  0x37, /* 328 */
1454  0x03, /* 329 */
1455  0xB7, /* 330 */
1456  0x00, /* 331 */
1457  0xB7, /* 332 */
1458  0x02, /* 333 */
1459  0xB7, /* 334 */
1460  0x01, /* 335 */
1461  0xB7, /* 336 */
1462  0x03, /* 337 */
1463  0x77, /* 338 */
1464  0x00, /* 339 */
1465  0x77, /* 340 */
1466  0x02, /* 341 */
1467  0xFF, /* 342 */
1468  0x07, /* 343 */
1469  0x77, /* 344 */
1470  0x01, /* 345 */
1471  0x77, /* 346 */
1472  0x03, /* 347 */
1473  0xF7, /* 348 */
1474  0x00, /* 349 */
1475  0xF7, /* 350 */
1476  0x02, /* 351 */
1477  0xF7, /* 352 */
1478  0x01, /* 353 */
1479  0xF7, /* 354 */
1480  0x03, /* 355 */
1481  0xFF, /* 356 */
1482  0x03, /* 357 */
1483  0x0F, /* 358 */
1484  0x00, /* 359 */
1485  0x0F, /* 360 */
1486  0x02, /* 361 */
1487  0x0F, /* 362 */
1488  0x01, /* 363 */
1489  0x0F, /* 364 */
1490  0x03, /* 365 */
1491  0x8F, /* 366 */
1492  0x00, /* 367 */
1493  0x8F, /* 368 */
1494  0x02, /* 369 */
1495  0x8F, /* 370 */
1496  0x01, /* 371 */
1497  0x8F, /* 372 */
1498  0x03, /* 373 */
1499  0x4F, /* 374 */
1500  0x00, /* 375 */
1501  0x4F, /* 376 */
1502  0x02, /* 377 */
1503  0x4F, /* 378 */
1504  0x01, /* 379 */
1505  0x4F, /* 380 */
1506  0x03, /* 381 */
1507  0xCF, /* 382 */
1508  0x00, /* 383 */
1509  0x0B, /* 384 */
1510  0x00, /* 385 */
1511  0xCF, /* 386 */
1512  0x02, /* 387 */
1513  0xCF, /* 388 */
1514  0x01, /* 389 */
1515  0xCF, /* 390 */
1516  0x03, /* 391 */
1517  0x2F, /* 392 */
1518  0x00, /* 393 */
1519  0x2F, /* 394 */
1520  0x02, /* 395 */
1521  0x0B, /* 396 */
1522  0x01, /* 397 */
1523  0x2F, /* 398 */
1524  0x01, /* 399 */
1525  0x2F, /* 400 */
1526  0x03, /* 401 */
1527  0xAF, /* 402 */
1528  0x00, /* 403 */
1529  0xAF, /* 404 */
1530  0x02, /* 405 */
1531  0xAF, /* 406 */
1532  0x01, /* 407 */
1533  0x8B, /* 408 */
1534  0x00, /* 409 */
1535  0xAF, /* 410 */
1536  0x03, /* 411 */
1537  0x6F, /* 412 */
1538  0x00, /* 413 */
1539  0x6F, /* 414 */
1540  0x02, /* 415 */
1541  0x8B, /* 416 */
1542  0x01, /* 417 */
1543  0x6F, /* 418 */
1544  0x01, /* 419 */
1545  0x6F, /* 420 */
1546  0x03, /* 421 */
1547  0xEF, /* 422 */
1548  0x00, /* 423 */
1549  0xEF, /* 424 */
1550  0x02, /* 425 */
1551  0xEF, /* 426 */
1552  0x01, /* 427 */
1553  0xEF, /* 428 */
1554  0x03, /* 429 */
1555  0x1F, /* 430 */
1556  0x00, /* 431 */
1557  0x1F, /* 432 */
1558  0x02, /* 433 */
1559  0x1F, /* 434 */
1560  0x01, /* 435 */
1561  0x1F, /* 436 */
1562  0x03, /* 437 */
1563  0x9F, /* 438 */
1564  0x00, /* 439 */
1565  0x9F, /* 440 */
1566  0x02, /* 441 */
1567  0x9F, /* 442 */
1568  0x01, /* 443 */
1569  0x9F, /* 444 */
1570  0x03, /* 445 */
1571  0x5F, /* 446 */
1572  0x00, /* 447 */
1573  0x4B, /* 448 */
1574  0x00, /* 449 */
1575  0x5F, /* 450 */
1576  0x02, /* 451 */
1577  0x5F, /* 452 */
1578  0x01, /* 453 */
1579  0x5F, /* 454 */
1580  0x03, /* 455 */
1581  0xDF, /* 456 */
1582  0x00, /* 457 */
1583  0xDF, /* 458 */
1584  0x02, /* 459 */
1585  0xDF, /* 460 */
1586  0x01, /* 461 */
1587  0xDF, /* 462 */
1588  0x03, /* 463 */
1589  0x3F, /* 464 */
1590  0x00, /* 465 */
1591  0x3F, /* 466 */
1592  0x02, /* 467 */
1593  0x3F, /* 468 */
1594  0x01, /* 469 */
1595  0x3F, /* 470 */
1596  0x03, /* 471 */
1597  0xBF, /* 472 */
1598  0x00, /* 473 */
1599  0xBF, /* 474 */
1600  0x02, /* 475 */
1601  0x4B, /* 476 */
1602  0x01, /* 477 */
1603  0xBF, /* 478 */
1604  0x01, /* 479 */
1605  0xAD, /* 480 */
1606  0x00, /* 481 */
1607  0xCB, /* 482 */
1608  0x00, /* 483 */
1609  0xCB, /* 484 */
1610  0x01, /* 485 */
1611  0xBF, /* 486 */
1612  0x03, /* 487 */
1613  0x2B, /* 488 */
1614  0x00, /* 489 */
1615  0x7F, /* 490 */
1616  0x00, /* 491 */
1617  0x7F, /* 492 */
1618  0x02, /* 493 */
1619  0x7F, /* 494 */
1620  0x01, /* 495 */
1621  0x2B, /* 496 */
1622  0x01, /* 497 */
1623  0x7F, /* 498 */
1624  0x03, /* 499 */
1625  0xFF, /* 500 */
1626  0x00, /* 501 */
1627  0xFF, /* 502 */
1628  0x02, /* 503 */
1629  0xAB, /* 504 */
1630  0x00, /* 505 */
1631  0xAB, /* 506 */
1632  0x01, /* 507 */
1633  0x6D, /* 508 */
1634  0x00, /* 509 */
1635  0x59, /* 510 */
1636  0x00, /* 511 */
1637  0xFF, /* 512 */
1638  0x17, /* 513 */
1639  0xFF, /* 514 */
1640  0x0F, /* 515 */
1641  0x39, /* 516 */
1642  0x00, /* 517 */
1643  0x79, /* 518 */
1644  0x00, /* 519 */
1645  0xFF, /* 520 */
1646  0x01, /* 521 */
1647  0x05, /* 522 */
1648  0x00, /* 523 */
1649  0x45, /* 524 */
1650  0x00, /* 525 */
1651  0x34, /* 526 */
1652  0x00, /* 527 */
1653  0x0C, /* 528 */
1654  0x00, /* 529 */
1655  0x2C, /* 530 */
1656  0x00, /* 531 */
1657  0x1C, /* 532 */
1658  0x00, /* 533 */
1659  0x00, /* 534 */
1660  0x00, /* 535 */
1661  0x3C, /* 536 */
1662  0x00, /* 537 */
1663  0x02, /* 538 */
1664  0x00, /* 539 */
1665  0x22, /* 540 */
1666  0x00, /* 541 */
1667  0x10, /* 542 */
1668  0x00, /* 543 */
1669  0x12, /* 544 */
1670  0x00, /* 545 */
1671  0x08, /* 546 */
1672  0x00, /* 547 */
1673  0x32, /* 548 */
1674  0x00, /* 549 */
1675  0x0A, /* 550 */
1676  0x00, /* 551 */
1677  0x2A, /* 552 */
1678  0x00, /* 553 */
1679  0x1A, /* 554 */
1680  0x00, /* 555 */
1681  0x3A, /* 556 */
1682  0x00, /* 557 */
1683  0x06, /* 558 */
1684  0x00, /* 559 */
1685  0x26, /* 560 */
1686  0x00, /* 561 */
1687  0x16, /* 562 */
1688  0x00, /* 563 */
1689  0x36, /* 564 */
1690  0x00, /* 565 */
1691  0x0E, /* 566 */
1692  0x00, /* 567 */
1693  0x2E, /* 568 */
1694  0x00, /* 569 */
1695  0x1E, /* 570 */
1696  0x00, /* 571 */
1697  0x3E, /* 572 */
1698  0x00, /* 573 */
1699  0x01, /* 574 */
1700  0x00, /* 575 */
1701  0xED, /* 576 */
1702  0x00, /* 577 */
1703  0x18, /* 578 */
1704  0x00, /* 579 */
1705  0x21, /* 580 */
1706  0x00, /* 581 */
1707  0x25, /* 582 */
1708  0x00, /* 583 */
1709  0x65, /* 584 */
1710  0x00, /* 585 */
1711  0xFF, /* 586 */
1712  0x1F /* 587 */
1713 };
1714 
1715 static const BYTE HuffLengthLOM[32] = {
1716  4, /* 0 */
1717  2, /* 1 */
1718  3, /* 2 */
1719  4, /* 3 */
1720  3, /* 4 */
1721  4, /* 5 */
1722  4, /* 6 */
1723  5, /* 7 */
1724  4, /* 8 */
1725  5, /* 9 */
1726  5, /* 10 */
1727  6, /* 11 */
1728  6, /* 12 */
1729  7, /* 13 */
1730  7, /* 14 */
1731  8, /* 15 */
1732  7, /* 16 */
1733  8, /* 17 */
1734  8, /* 18 */
1735  9, /* 19 */
1736  9, /* 20 */
1737  8, /* 21 */
1738  9, /* 22 */
1739  9, /* 23 */
1740  9, /* 24 */
1741  9, /* 25 */
1742  9, /* 26 */
1743  9, /* 27 */
1744  9, /* 28 */
1745  9, /* 29 */
1746  9, /* 30 */
1747  9 /* 31 */
1748 };
1749 
1750 static const UINT16 HuffCodeLOM[32] = {
1751  0x0001, /* 0 */
1752  0x0000, /* 1 */
1753  0x0002, /* 2 */
1754  0x0009, /* 3 */
1755  0x0006, /* 4 */
1756  0x0005, /* 5 */
1757  0x000D, /* 6 */
1758  0x000B, /* 7 */
1759  0x0003, /* 8 */
1760  0x001B, /* 9 */
1761  0x0007, /* 10 */
1762  0x0017, /* 11 */
1763  0x0037, /* 12 */
1764  0x000F, /* 13 */
1765  0x004F, /* 14 */
1766  0x006F, /* 15 */
1767  0x002F, /* 16 */
1768  0x00EF, /* 17 */
1769  0x001F, /* 18 */
1770  0x005F, /* 19 */
1771  0x015F, /* 20 */
1772  0x009F, /* 21 */
1773  0x00DF, /* 22 */
1774  0x01DF, /* 23 */
1775  0x003F, /* 24 */
1776  0x013F, /* 25 */
1777  0x00BF, /* 26 */
1778  0x01BF, /* 27 */
1779  0x007F, /* 28 */
1780  0x017F, /* 29 */
1781  0x00FF, /* 30 */
1782  0x01FF /* 31 */
1783 };
1784 
1785 static const UINT32 CopyOffsetBitsLUT[32] = {
1786  0x0, /* 0 */
1787  0x0, /* 1 */
1788  0x0, /* 2 */
1789  0x0, /* 3 */
1790  0x1, /* 4 */
1791  0x1, /* 5 */
1792  0x2, /* 6 */
1793  0x2, /* 7 */
1794  0x3, /* 8 */
1795  0x3, /* 9 */
1796  0x4, /* 10 */
1797  0x4, /* 11 */
1798  0x5, /* 12 */
1799  0x5, /* 13 */
1800  0x6, /* 14 */
1801  0x6, /* 15 */
1802  0x7, /* 16 */
1803  0x7, /* 17 */
1804  0x8, /* 18 */
1805  0x8, /* 19 */
1806  0x9, /* 20 */
1807  0x9, /* 21 */
1808  0xA, /* 22 */
1809  0xA, /* 23 */
1810  0xB, /* 24 */
1811  0xB, /* 25 */
1812  0xC, /* 26 */
1813  0xC, /* 27 */
1814  0xD, /* 28 */
1815  0xD, /* 29 */
1816  0xE, /* 30 */
1817  0xE /* 31 */
1818 };
1819 
1820 static const UINT32 CopyOffsetBaseLUT[32] = {
1821  0x1, /* 0 */
1822  0x2, /* 1 */
1823  0x3, /* 2 */
1824  0x4, /* 3 */
1825  0x5, /* 4 */
1826  0x7, /* 5 */
1827  0x9, /* 6 */
1828  0xD, /* 7 */
1829  0x11, /* 8 */
1830  0x19, /* 9 */
1831  0x21, /* 10 */
1832  0x31, /* 11 */
1833  0x41, /* 12 */
1834  0x61, /* 13 */
1835  0x81, /* 14 */
1836  0xC1, /* 15 */
1837  0x101, /* 16 */
1838  0x181, /* 17 */
1839  0x201, /* 18 */
1840  0x301, /* 19 */
1841  0x401, /* 20 */
1842  0x601, /* 21 */
1843  0x801, /* 22 */
1844  0xC01, /* 23 */
1845  0x1001, /* 24 */
1846  0x1801, /* 25 */
1847  0x2001, /* 26 */
1848  0x3001, /* 27 */
1849  0x4001, /* 28 */
1850  0x6001, /* 29 */
1851  0x8001, /* 30 */
1852  0xC001 /* 31 */
1853 };
1854 
1855 static const UINT32 LOMBitsLUT[30] = {
1856  0x0, /* 0 */
1857  0x0, /* 1 */
1858  0x0, /* 2 */
1859  0x0, /* 3 */
1860  0x0, /* 4 */
1861  0x0, /* 5 */
1862  0x0, /* 6 */
1863  0x0, /* 7 */
1864  0x1, /* 8 */
1865  0x1, /* 9 */
1866  0x1, /* 10 */
1867  0x1, /* 11 */
1868  0x2, /* 12 */
1869  0x2, /* 13 */
1870  0x2, /* 14 */
1871  0x2, /* 15 */
1872  0x3, /* 16 */
1873  0x3, /* 17 */
1874  0x3, /* 18 */
1875  0x3, /* 19 */
1876  0x4, /* 20 */
1877  0x4, /* 21 */
1878  0x4, /* 22 */
1879  0x4, /* 23 */
1880  0x6, /* 24 */
1881  0x6, /* 25 */
1882  0x8, /* 26 */
1883  0x8, /* 27 */
1884  0xE, /* 28 */
1885  0xE /* 29 */
1886 };
1887 
1888 static const UINT32 LOMBaseLUT[30] = {
1889  0x2, /* 0 */
1890  0x3, /* 1 */
1891  0x4, /* 2 */
1892  0x5, /* 3 */
1893  0x6, /* 4 */
1894  0x7, /* 5 */
1895  0x8, /* 6 */
1896  0x9, /* 7 */
1897  0xA, /* 8 */
1898  0xC, /* 9 */
1899  0xE, /* 10 */
1900  0x10, /* 11 */
1901  0x12, /* 12 */
1902  0x16, /* 13 */
1903  0x1A, /* 14 */
1904  0x1E, /* 15 */
1905  0x22, /* 16 */
1906  0x2A, /* 17 */
1907  0x32, /* 18 */
1908  0x3A, /* 19 */
1909  0x42, /* 20 */
1910  0x52, /* 21 */
1911  0x62, /* 22 */
1912  0x72, /* 23 */
1913  0x82, /* 24 */
1914  0xC2, /* 25 */
1915  0x102, /* 26 */
1916  0x202, /* 27 */
1917  0x2, /* 28 */
1918  0x2 /* 29 */
1919 };
1920 
1921 static INLINE UINT16 get_word(const BYTE* data)
1922 {
1923  UINT16 tmp = 0;
1924 
1925  WINPR_ASSERT(data);
1926  tmp = *data++;
1927  tmp |= *data << 8;
1928  return tmp;
1929 }
1930 
1931 static INLINE UINT32 get_dword(const BYTE* data)
1932 {
1933  UINT32 tmp = 0;
1934  WINPR_ASSERT(data);
1935  tmp = *data++;
1936  tmp |= (UINT32)*data++ << 8U;
1937  tmp |= (UINT32)*data++ << 16U;
1938  tmp |= (UINT32)*data++ << 24U;
1939  return tmp;
1940 }
1941 
1942 static INLINE BOOL NCrushFetchBits(const BYTE** SrcPtr, const BYTE** SrcEnd, INT32* nbits,
1943  UINT32* bits)
1944 {
1945  WINPR_ASSERT(SrcPtr);
1946  WINPR_ASSERT(SrcEnd);
1947  WINPR_ASSERT(nbits);
1948  WINPR_ASSERT(bits);
1949 
1950  if (*nbits < 16)
1951  {
1952  if ((*SrcPtr + 1) >= *SrcEnd)
1953  {
1954  if (*SrcPtr >= *SrcEnd)
1955  {
1956  if (*nbits < 0)
1957  return FALSE;
1958  }
1959  else
1960  {
1961  const UINT32 src = *(*SrcPtr)++;
1962  const UINT32 val = (src << *nbits);
1963  *bits += val;
1964  *nbits += 8;
1965  }
1966  }
1967  else
1968  {
1969  UINT32 tmp = *(*SrcPtr)++;
1970  tmp |= ((*(*SrcPtr)++) << 8) & 0xFF00;
1971  *bits += (tmp << *nbits) & UINT32_MAX;
1972  *nbits += 16;
1973  }
1974  }
1975 
1976  return TRUE;
1977 }
1978 
1979 static INLINE void NCrushWriteStart(UINT32* bits, UINT32* offset, UINT32* accumulator)
1980 {
1981  WINPR_ASSERT(bits);
1982  WINPR_ASSERT(offset);
1983  WINPR_ASSERT(accumulator);
1984 
1985  *bits = 0;
1986  *offset = 0;
1987  *accumulator = 0;
1988 }
1989 
1990 static INLINE void NCrushWriteBits(BYTE** DstPtr, UINT32* accumulator, UINT32* offset, UINT32 _bits,
1991  UINT32 _nbits)
1992 {
1993  WINPR_ASSERT(DstPtr);
1994  WINPR_ASSERT(accumulator);
1995  WINPR_ASSERT(offset);
1996 
1997  *accumulator |= _bits << *offset;
1998  *offset += _nbits;
1999 
2000  if (*offset >= 16)
2001  {
2002  *(*DstPtr)++ = (*accumulator & 0xFF);
2003  *(*DstPtr)++ = ((*accumulator >> 8) & 0xFF);
2004  *accumulator >>= 16;
2005  *offset -= 16;
2006  }
2007 }
2008 
2009 static INLINE void NCrushWriteFinish(BYTE** DstPtr, UINT32 accumulator)
2010 {
2011  WINPR_ASSERT(DstPtr);
2012 
2013  *(*DstPtr)++ = accumulator & 0xFF;
2014  *(*DstPtr)++ = (accumulator >> 8) & 0xFF;
2015 }
2016 
2017 int ncrush_decompress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2018  const BYTE** ppDstData, UINT32* pDstSize, UINT32 flags)
2019 {
2020  UINT32 index = 0;
2021  BYTE Literal = 0;
2022  UINT32 IndexLEC = 0;
2023  UINT32 BitLength = 0;
2024  UINT32 CopyOffset = 0;
2025  UINT32 CopyLength = 0;
2026  UINT32 OldCopyOffset = 0;
2027  const BYTE* CopyOffsetPtr = NULL;
2028  UINT32 LengthOfMatch = 0;
2029  UINT32 CopyOffsetIndex = 0;
2030  UINT32 OffsetCacheIndex = 0;
2031  UINT32 CopyOffsetBits = 0;
2032  UINT32 CopyOffsetBase = 0;
2033  UINT32 LengthOfMatchBits = 0;
2034  UINT32 LengthOfMatchBase = 0;
2035 
2036  WINPR_ASSERT(ncrush);
2037  WINPR_ASSERT(pSrcData);
2038  WINPR_ASSERT(ppDstData);
2039  WINPR_ASSERT(pDstSize);
2040 
2041  if (ncrush->HistoryEndOffset != 65535)
2042  return -1001;
2043 
2044  BYTE* HistoryBuffer = ncrush->HistoryBuffer;
2045  const BYTE* HistoryBufferEnd = &HistoryBuffer[ncrush->HistoryEndOffset];
2046 
2047  if (flags & PACKET_AT_FRONT)
2048  {
2049  if ((ncrush->HistoryPtr - 32768) <= HistoryBuffer)
2050  return -1002;
2051 
2052  MoveMemory(HistoryBuffer, (ncrush->HistoryPtr - 32768), 32768);
2053  ncrush->HistoryPtr = &(HistoryBuffer[32768]);
2054  ZeroMemory(&HistoryBuffer[32768], 32768);
2055  }
2056 
2057  if (flags & PACKET_FLUSHED)
2058  {
2059  ncrush->HistoryPtr = HistoryBuffer;
2060  ZeroMemory(HistoryBuffer, sizeof(ncrush->HistoryBuffer));
2061  ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2062  }
2063 
2064  BYTE* HistoryPtr = ncrush->HistoryPtr;
2065 
2066  if (!(flags & PACKET_COMPRESSED))
2067  {
2068  *ppDstData = pSrcData;
2069  *pDstSize = SrcSize;
2070  return 1;
2071  }
2072 
2073  if (SrcSize < 4)
2074  {
2075  WLog_ERR(TAG, "Input size short: SrcSize %" PRIu32 " < 4", SrcSize);
2076  return -1;
2077  }
2078 
2079  const BYTE* SrcEnd = &pSrcData[SrcSize];
2080  const BYTE* SrcPtr = pSrcData + 4;
2081 
2082  INT32 nbits = 32;
2083  UINT32 bits = get_dword(pSrcData);
2084  while (1)
2085  {
2086  while (1)
2087  {
2088  const UINT16 Mask = get_word(&HuffTableMask[29]);
2089  const UINT32 MaskedBits = bits & Mask;
2090  if (MaskedBits >= ARRAYSIZE(HuffTableLEC))
2091  return -1;
2092  IndexLEC = HuffTableLEC[MaskedBits] & 0xFFF;
2093  BitLength = HuffTableLEC[MaskedBits] >> 12;
2094  bits >>= BitLength;
2095  nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2096 
2097  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2098  return -1;
2099 
2100  if (IndexLEC >= 256)
2101  break;
2102 
2103  if (HistoryPtr >= HistoryBufferEnd)
2104  {
2105  WLog_ERR(TAG, "ncrush_decompress error: HistoryPtr (%p) >= HistoryBufferEnd (%p)",
2106  (const void*)HistoryPtr, (const void*)HistoryBufferEnd);
2107  return -1003;
2108  }
2109 
2110  Literal = (HuffTableLEC[MaskedBits] & 0xFF);
2111  *HistoryPtr++ = Literal;
2112  }
2113 
2114  if (IndexLEC == 256)
2115  break; /* EOS */
2116 
2117  CopyOffsetIndex = IndexLEC - 257;
2118 
2119  if (CopyOffsetIndex >= 32)
2120  {
2121  OffsetCacheIndex = IndexLEC - 289;
2122 
2123  if (OffsetCacheIndex >= 4)
2124  return -1004;
2125 
2126  {
2127  CopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2128  const UINT16 Mask = get_word(&HuffTableMask[21]);
2129  const UINT32 MaskedBits = bits & Mask;
2130  if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2131  return -1;
2132  LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2133  BitLength = HuffTableLOM[MaskedBits] >> 12;
2134  bits >>= BitLength;
2135  nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2136  }
2137 
2138  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2139  return -1;
2140 
2141  if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2142  return -1;
2143 
2144  LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2145 
2146  if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2147  return -1;
2148  LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2149 
2150  if (LengthOfMatchBits)
2151  {
2152  const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2153  if (idx >= ARRAYSIZE(HuffTableMask))
2154  return -1;
2155 
2156  const UINT16 Mask = get_word(&HuffTableMask[idx]);
2157  const UINT32 MaskedBits = bits & Mask;
2158  bits >>= LengthOfMatchBits;
2159  nbits -= WINPR_ASSERTING_INT_CAST(int32_t, LengthOfMatchBits);
2160  LengthOfMatchBase += MaskedBits;
2161 
2162  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2163  return -1;
2164  }
2165 
2166  OldCopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2167  ncrush->OffsetCache[OffsetCacheIndex] = ncrush->OffsetCache[0];
2168  ncrush->OffsetCache[0] = OldCopyOffset;
2169  }
2170  else
2171  {
2172  if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2173  return -1;
2174 
2175  CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2176 
2177  if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBaseLUT))
2178  return -1;
2179  CopyOffsetBase = CopyOffsetBaseLUT[CopyOffsetIndex];
2180  CopyOffset = CopyOffsetBase - 1;
2181 
2182  if (CopyOffsetBits)
2183  {
2184  const size_t idx = (2ull * CopyOffsetBits) + 3ull;
2185  if (idx >= ARRAYSIZE(HuffTableMask))
2186  return -1;
2187 
2188  {
2189  const UINT16 Mask = get_word(&HuffTableMask[idx]);
2190  const UINT32 MaskedBits = bits & Mask;
2191  const UINT32 tmp = CopyOffsetBase + MaskedBits;
2192  if (tmp < 1)
2193  return -1;
2194  CopyOffset = tmp - 1;
2195  }
2196  bits >>= CopyOffsetBits;
2197  nbits -= WINPR_ASSERTING_INT_CAST(int32_t, CopyOffsetBits);
2198 
2199  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2200  return -1;
2201  }
2202  {
2203  const UINT16 Mask = get_word(&HuffTableMask[21]);
2204  const UINT32 MaskedBits = bits & Mask;
2205  if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2206  return -1;
2207 
2208  LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2209  BitLength = HuffTableLOM[MaskedBits] >> 12;
2210  bits >>= BitLength;
2211  nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2212  }
2213  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2214  return -1;
2215 
2216  if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2217  return -1;
2218 
2219  LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2220 
2221  if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2222  return -1;
2223  LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2224 
2225  if (LengthOfMatchBits)
2226  {
2227  const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2228  if (idx >= ARRAYSIZE(HuffTableMask))
2229  return -1;
2230 
2231  const UINT16 Mask = get_word(&HuffTableMask[idx]);
2232  const UINT32 MaskedBits = bits & Mask;
2233  bits >>= LengthOfMatchBits;
2234  nbits -= WINPR_ASSERTING_INT_CAST(int32_t, LengthOfMatchBits);
2235  LengthOfMatchBase += MaskedBits;
2236 
2237  if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2238  return -1;
2239  }
2240 
2241  ncrush->OffsetCache[3] = ncrush->OffsetCache[2];
2242  ncrush->OffsetCache[2] = ncrush->OffsetCache[1];
2243  ncrush->OffsetCache[1] = ncrush->OffsetCache[0];
2244  ncrush->OffsetCache[0] = CopyOffset;
2245  }
2246 
2247  CopyOffsetPtr = &HistoryBuffer[(HistoryPtr - HistoryBuffer - CopyOffset) & 0xFFFF];
2248  LengthOfMatch = LengthOfMatchBase;
2249 
2250  if (LengthOfMatch < 2)
2251  return -1005;
2252 
2253  if ((CopyOffsetPtr >= (HistoryBufferEnd - LengthOfMatch)) ||
2254  (HistoryPtr >= (HistoryBufferEnd - LengthOfMatch)))
2255  return -1006;
2256 
2257  CopyOffsetPtr = HistoryPtr - CopyOffset;
2258  index = 0;
2259  CopyLength = (LengthOfMatch > CopyOffset) ? CopyOffset : LengthOfMatch;
2260 
2261  if (CopyOffsetPtr >= HistoryBuffer)
2262  {
2263  while (CopyLength > 0)
2264  {
2265  *HistoryPtr++ = *CopyOffsetPtr++;
2266  CopyLength--;
2267  }
2268 
2269  while (LengthOfMatch > CopyOffset)
2270  {
2271  index = ((index >= CopyOffset)) ? 0 : index;
2272  *HistoryPtr++ = *(CopyOffsetPtr + index++);
2273  LengthOfMatch--;
2274  }
2275  }
2276  else
2277  {
2278  CopyOffsetPtr = HistoryBufferEnd - (CopyOffset - (HistoryPtr - HistoryBuffer));
2279  CopyOffsetPtr++;
2280 
2281  while (CopyLength && (CopyOffsetPtr <= HistoryBufferEnd))
2282  {
2283  *HistoryPtr++ = *CopyOffsetPtr++;
2284  CopyLength--;
2285  }
2286 
2287  CopyOffsetPtr = HistoryBuffer;
2288 
2289  while (LengthOfMatch > CopyOffset)
2290  {
2291  index = ((index >= CopyOffset)) ? 0 : index;
2292  *HistoryPtr++ = *(CopyOffsetPtr + index++);
2293  LengthOfMatch--;
2294  }
2295  }
2296 
2297  LengthOfMatch = LengthOfMatchBase;
2298 
2299  if (LengthOfMatch == 2)
2300  continue;
2301  }
2302 
2303  if (IndexLEC != 256)
2304  return -1;
2305 
2306  if (ncrush->HistoryBufferFence != 0xABABABAB)
2307  {
2308  WLog_ERR(TAG, "NCrushDecompress: history buffer fence was overwritten, potential buffer "
2309  "overflow detected!");
2310  return -1007;
2311  }
2312 
2313  const intptr_t hsize = HistoryPtr - ncrush->HistoryPtr;
2314  WINPR_ASSERT(hsize >= 0);
2315  WINPR_ASSERT(hsize <= UINT32_MAX);
2316  *pDstSize = (UINT32)hsize;
2317  *ppDstData = ncrush->HistoryPtr;
2318  ncrush->HistoryPtr = HistoryPtr;
2319  return 1;
2320 }
2321 
2322 static int ncrush_hash_table_add(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2323  UINT32 HistoryOffset)
2324 {
2325  const BYTE* SrcPtr = pSrcData;
2326  UINT32 Offset = HistoryOffset;
2327  UINT32 EndOffset = Offset + SrcSize - 8;
2328 
2329  WINPR_ASSERT(ncrush);
2330  WINPR_ASSERT(pSrcData);
2331  WINPR_ASSERT(Offset + SrcSize >= 8);
2332 
2333  while (Offset < EndOffset)
2334  {
2335  const UINT16 Hash = ncrush->HashTable[get_word(SrcPtr)];
2336  ncrush->HashTable[get_word(SrcPtr)] = WINPR_ASSERTING_INT_CAST(UINT16, Offset);
2337  ncrush->MatchTable[Offset] = Hash;
2338  SrcPtr++;
2339  Offset++;
2340  }
2341 
2342  return 1;
2343 }
2344 
2345 static intptr_t ncrush_find_match_length(const BYTE* Ptr1, const BYTE* Ptr2, const BYTE* HistoryPtr)
2346 {
2347  BYTE val1 = 0;
2348  BYTE val2 = 0;
2349  const BYTE* Ptr = Ptr1;
2350 
2351  WINPR_ASSERT(Ptr1);
2352  WINPR_ASSERT(Ptr2);
2353  WINPR_ASSERT(HistoryPtr);
2354 
2355  do
2356  {
2357  if (Ptr1 > HistoryPtr)
2358  break;
2359 
2360  val1 = *Ptr1++;
2361  val2 = *Ptr2++;
2362  } while (val1 == val2);
2363 
2364  return Ptr1 - (Ptr + 1);
2365 }
2366 
2367 static int ncrush_find_best_match(NCRUSH_CONTEXT* ncrush, UINT16 HistoryOffset,
2368  UINT32* pMatchOffset)
2369 {
2370  int Length = 0;
2371 
2372  WINPR_ASSERT(ncrush);
2373  WINPR_ASSERT(pMatchOffset);
2374 
2375  if (!ncrush->MatchTable[HistoryOffset])
2376  return -1;
2377 
2378  int MatchLength = 2;
2379  UINT16 Offset = HistoryOffset;
2380  BYTE* HistoryBuffer = (BYTE*)ncrush->HistoryBuffer;
2381 
2382  ncrush->MatchTable[0] = HistoryOffset;
2383  UINT16 MatchOffset = ncrush->MatchTable[HistoryOffset];
2384  UINT16 NextOffset = ncrush->MatchTable[Offset];
2385  BYTE* MatchPtr = &HistoryBuffer[MatchLength];
2386 
2387  for (int i = 0; i < 4; i++)
2388  {
2389  int j = -1;
2390 
2391  if (j < 0)
2392  {
2393  Offset = ncrush->MatchTable[NextOffset];
2394 
2395  if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2396  j = 0;
2397  }
2398 
2399  if (j < 0)
2400  {
2401  NextOffset = ncrush->MatchTable[Offset];
2402 
2403  if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2404  j = 1;
2405  }
2406 
2407  if (j < 0)
2408  {
2409  Offset = ncrush->MatchTable[NextOffset];
2410 
2411  if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2412  j = 2;
2413  }
2414 
2415  if (j < 0)
2416  {
2417  NextOffset = ncrush->MatchTable[Offset];
2418 
2419  if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2420  j = 3;
2421  }
2422 
2423  if (j < 0)
2424  {
2425  Offset = ncrush->MatchTable[NextOffset];
2426 
2427  if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2428  j = 4;
2429  }
2430 
2431  if (j < 0)
2432  {
2433  NextOffset = ncrush->MatchTable[Offset];
2434 
2435  if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2436  j = 5;
2437  }
2438 
2439  if (j >= 0)
2440  {
2441  if ((j % 2) == 0)
2442  Offset = NextOffset;
2443 
2444  if ((Offset != HistoryOffset) && Offset)
2445  {
2446  const intptr_t len =
2447  ncrush_find_match_length(&HistoryBuffer[HistoryOffset + 2],
2448  &HistoryBuffer[Offset + 2], ncrush->HistoryPtr);
2449  WINPR_ASSERT(len < INT_MAX - 2);
2450  WINPR_ASSERT(len > INT_MIN + 2);
2451 
2452  Length = (int)len + 2;
2453 
2454  if (Length < 2)
2455  return -1;
2456 
2457  if (Length > 16)
2458  break;
2459 
2460  if (Length > MatchLength)
2461  {
2462  MatchLength = Length;
2463  MatchOffset = Offset;
2464  }
2465 
2466  if ((Length <= MatchLength) ||
2467  (&HistoryBuffer[HistoryOffset + 2] < ncrush->HistoryPtr))
2468  {
2469  NextOffset = ncrush->MatchTable[Offset];
2470  MatchPtr = &HistoryBuffer[MatchLength];
2471  continue;
2472  }
2473  }
2474 
2475  break;
2476  }
2477  }
2478 
2479  ncrush->MatchTable[0] = 0;
2480  *pMatchOffset = MatchOffset;
2481  return MatchLength;
2482 }
2483 
2484 static int ncrush_move_encoder_windows(NCRUSH_CONTEXT* ncrush, BYTE* HistoryPtr)
2485 {
2486  WINPR_ASSERT(ncrush);
2487  WINPR_ASSERT(HistoryPtr);
2488 
2489  const size_t history_half = ARRAYSIZE(ncrush->HistoryBuffer) / 2;
2490  if (HistoryPtr < &ncrush->HistoryBuffer[history_half])
2491  return -1;
2492 
2493  if (HistoryPtr > &ncrush->HistoryBuffer[ARRAYSIZE(ncrush->HistoryBuffer)])
2494  return -1;
2495 
2496  MoveMemory(ncrush->HistoryBuffer, HistoryPtr - history_half, history_half * sizeof(BYTE));
2497  const intptr_t hsize = HistoryPtr - history_half - ncrush->HistoryBuffer;
2498  WINPR_ASSERT(hsize <= UINT16_MAX);
2499  WINPR_ASSERT(hsize >= 0);
2500  INT32 HistoryOffset = (INT32)hsize;
2501 
2502  for (size_t i = 0; i < ARRAYSIZE(ncrush->HashTable); i++)
2503  {
2504  const INT32 NewHash = ncrush->HashTable[i] - HistoryOffset;
2505  ncrush->HashTable[i] = (NewHash <= 0) ? 0 : WINPR_ASSERTING_INT_CAST(UINT16, NewHash);
2506  }
2507 
2508  const size_t match_half = ARRAYSIZE(ncrush->MatchTable) / 2;
2509  for (size_t j = 0; j < match_half; j++)
2510  {
2511  if ((size_t)HistoryOffset + j >= ARRAYSIZE(ncrush->MatchTable))
2512  continue;
2513 
2514  const INT32 NewMatch = ncrush->MatchTable[(size_t)HistoryOffset + j] - HistoryOffset;
2515  ncrush->MatchTable[j] = (NewMatch <= 0) ? 0 : WINPR_ASSERTING_INT_CAST(UINT16, NewMatch);
2516  }
2517 
2518  ZeroMemory(&ncrush->MatchTable[match_half], match_half * sizeof(UINT16));
2519  return 1;
2520 }
2521 
2522 int ncrush_compress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstBuffer,
2523  const BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags)
2524 {
2525  BYTE Literal = 0;
2526  const BYTE* SrcPtr = NULL;
2527  BYTE* DstPtr = NULL;
2528  UINT32 bits = 0;
2529  UINT32 offset = 0;
2530  UINT32 MaskedBits = 0;
2531  UINT32 accumulator = 0;
2532  const BYTE* SrcEndPtr = NULL;
2533  BYTE* DstEndPtr = NULL;
2534  BYTE* HistoryPtr = NULL;
2535  BYTE* pDstData = NULL;
2536  UINT32 DstSize = 0;
2537  BOOL PacketAtFront = FALSE;
2538  BOOL PacketFlushed = FALSE;
2539  UINT32 MatchLength = 0;
2540  UINT32 IndexLEC = 0;
2541  UINT32 IndexLOM = 0;
2542  UINT32 IndexCO = 0;
2543  UINT32 CodeLEC = 0;
2544  UINT32 BitLength = 0;
2545  UINT32 CopyOffset = 0;
2546  UINT32 MatchOffset = 0;
2547  UINT32 OldCopyOffset = 0;
2548  UINT32* OffsetCache = NULL;
2549  UINT32 OffsetCacheIndex = 0;
2550  UINT32 HistoryOffset = 0;
2551  BYTE* HistoryBuffer = NULL;
2552  UINT32 HistoryBufferSize = 0;
2553  BYTE* HistoryBufferEndPtr = NULL;
2554  UINT32 CopyOffsetIndex = 0;
2555  UINT32 CopyOffsetBits = 0;
2556  UINT32 CompressionLevel = 2;
2557 
2558  WINPR_ASSERT(ncrush);
2559 
2560  WINPR_ASSERT(ncrush);
2561  WINPR_ASSERT(pSrcData);
2562  WINPR_ASSERT(pDstBuffer);
2563  WINPR_ASSERT(ppDstData);
2564  WINPR_ASSERT(pDstSize);
2565  WINPR_ASSERT(pFlags);
2566 
2567  HistoryBuffer = ncrush->HistoryBuffer;
2568  *pFlags = 0;
2569 
2570  if ((SrcSize + ncrush->HistoryOffset) >= 65529)
2571  {
2572  if (ncrush->HistoryOffset == (ncrush->HistoryBufferSize + 1))
2573  {
2574  ncrush->HistoryOffset = 0;
2575  ncrush->HistoryPtr = HistoryBuffer;
2576  PacketFlushed = TRUE;
2577  }
2578  else
2579  {
2580  if (ncrush_move_encoder_windows(ncrush, &(HistoryBuffer[ncrush->HistoryOffset])) < 0)
2581  return -1001;
2582 
2583  ncrush->HistoryPtr = &HistoryBuffer[32768];
2584  ncrush->HistoryOffset = 32768;
2585  PacketAtFront = TRUE;
2586  }
2587  }
2588  else
2589  {
2590  *pFlags = 0;
2591  }
2592 
2593  pDstData = pDstBuffer;
2594  *ppDstData = pDstBuffer;
2595 
2596  if (!pDstData)
2597  return -1002;
2598 
2599  DstSize = *pDstSize;
2600 
2601  if (DstSize < SrcSize)
2602  return -1003;
2603 
2604  DstSize = SrcSize;
2605  NCrushWriteStart(&bits, &offset, &accumulator);
2606  DstPtr = pDstData;
2607  SrcPtr = pSrcData;
2608  SrcEndPtr = &pSrcData[SrcSize];
2609  DstEndPtr = &pDstData[DstSize - 1];
2610  OffsetCache = ncrush->OffsetCache;
2611  HistoryPtr = &HistoryBuffer[ncrush->HistoryOffset];
2612  HistoryBufferEndPtr = &HistoryBuffer[65536];
2613  HistoryBufferSize = ncrush->HistoryBufferSize;
2614  CopyOffset = 0;
2615  MatchOffset = 0;
2616  const intptr_t thsize = HistoryPtr - HistoryBuffer;
2617 
2618  ncrush_hash_table_add(ncrush, pSrcData, SrcSize, WINPR_ASSERTING_INT_CAST(UINT32, thsize));
2619  CopyMemory(HistoryPtr, pSrcData, SrcSize);
2620  ncrush->HistoryPtr = &HistoryPtr[SrcSize];
2621 
2622  while (SrcPtr < (SrcEndPtr - 2))
2623  {
2624  MatchLength = 0;
2625  const intptr_t hsize = HistoryPtr - HistoryBuffer;
2626  WINPR_ASSERT(hsize <= UINT32_MAX);
2627  WINPR_ASSERT(hsize >= 0);
2628  HistoryOffset = (UINT32)hsize;
2629 
2630  if (ncrush->HistoryPtr && (HistoryPtr > ncrush->HistoryPtr))
2631  return -1;
2632 
2633  if (HistoryOffset >= 65536)
2634  return -1004;
2635 
2636  if (ncrush->MatchTable[HistoryOffset])
2637  {
2638  int rc = 0;
2639 
2640  MatchOffset = 0;
2641  rc = ncrush_find_best_match(ncrush, WINPR_ASSERTING_INT_CAST(UINT16, HistoryOffset),
2642  &MatchOffset);
2643 
2644  if (rc < 0)
2645  return -1005;
2646  MatchLength = (UINT32)rc;
2647  }
2648 
2649  if (MatchLength)
2650  CopyOffset = (HistoryBufferSize - 1) & (HistoryPtr - &HistoryBuffer[MatchOffset]);
2651 
2652  if ((MatchLength == 2) && (CopyOffset >= 64))
2653  MatchLength = 0;
2654 
2655  if (MatchLength == 0)
2656  {
2657  /* Literal */
2658  Literal = *SrcPtr++;
2659  HistoryPtr++;
2660 
2661  if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #1 */
2662  {
2663  ncrush_context_reset(ncrush, TRUE);
2664  *pFlags = PACKET_FLUSHED;
2665  *pFlags |= CompressionLevel;
2666  *ppDstData = pSrcData;
2667  *pDstSize = SrcSize;
2668  return 1;
2669  }
2670 
2671  IndexLEC = Literal;
2672  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2673  return -1;
2674  BitLength = HuffLengthLEC[IndexLEC];
2675 
2676  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2677  return -1;
2678  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2679 
2680  if (BitLength > 15)
2681  return -1006;
2682 
2683  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2684  }
2685  else
2686  {
2687  HistoryPtr += MatchLength;
2688  SrcPtr += MatchLength;
2689 
2690  if (!MatchLength)
2691  return -1007;
2692 
2693  if ((DstPtr + 8) > DstEndPtr) /* PACKET_FLUSH #2 */
2694  {
2695  ncrush_context_reset(ncrush, TRUE);
2696  *pFlags = PACKET_FLUSHED;
2697  *pFlags |= CompressionLevel;
2698  *ppDstData = pSrcData;
2699  *pDstSize = SrcSize;
2700  return 1;
2701  }
2702 
2703  OffsetCacheIndex = 5;
2704 
2705  if ((CopyOffset == OffsetCache[0]) || (CopyOffset == OffsetCache[1]) ||
2706  (CopyOffset == OffsetCache[2]) || (CopyOffset == OffsetCache[3]))
2707  {
2708  if (CopyOffset == OffsetCache[3])
2709  {
2710  OldCopyOffset = OffsetCache[3];
2711  OffsetCache[3] = OffsetCache[0];
2712  OffsetCache[0] = OldCopyOffset;
2713  OffsetCacheIndex = 3;
2714  }
2715  else
2716  {
2717  if (CopyOffset == OffsetCache[2])
2718  {
2719  OldCopyOffset = OffsetCache[2];
2720  OffsetCache[2] = OffsetCache[0];
2721  OffsetCache[0] = OldCopyOffset;
2722  OffsetCacheIndex = 2;
2723  }
2724  else
2725  {
2726  if (CopyOffset == OffsetCache[1])
2727  {
2728  OldCopyOffset = OffsetCache[1];
2729  OffsetCache[1] = OffsetCache[0];
2730  OffsetCache[0] = OldCopyOffset;
2731  OffsetCacheIndex = 1;
2732  }
2733  else
2734  {
2735  if (CopyOffset == OffsetCache[0])
2736  {
2737  OffsetCacheIndex = 0;
2738  }
2739  }
2740  }
2741  }
2742  }
2743  else
2744  {
2745  OffsetCache[3] = OffsetCache[2];
2746  OffsetCache[2] = OffsetCache[1];
2747  OffsetCache[1] = OffsetCache[0];
2748  OffsetCache[0] = CopyOffset;
2749  }
2750 
2751  if (OffsetCacheIndex >= 4)
2752  {
2753  /* CopyOffset not in OffsetCache */
2754  if (CopyOffset >= 256)
2755  bits = (CopyOffset >> 7) + 256;
2756  else
2757  bits = CopyOffset;
2758 
2759  CopyOffsetIndex = ncrush->HuffTableCopyOffset[bits + 2];
2760 
2761  if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2762  return -1;
2763 
2764  CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2765  IndexLEC = 257 + CopyOffsetIndex;
2766  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2767  return -1;
2768  BitLength = HuffLengthLEC[IndexLEC];
2769 
2770  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2771  return -1;
2772  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2773 
2774  if (BitLength > 15)
2775  return -1008;
2776 
2777  if (CopyOffsetBits > 18)
2778  return -1009;
2779 
2780  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2781  UINT16 Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << CopyOffsetBits) - 1);
2782  MaskedBits = CopyOffset & Mask;
2783  NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, CopyOffsetBits);
2784 
2785  if ((MatchLength - 2) >= 768)
2786  IndexCO = 28;
2787  else
2788  IndexCO = ncrush->HuffTableLOM[MatchLength];
2789 
2790  if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2791  return -1;
2792  BitLength = HuffLengthLOM[IndexCO];
2793 
2794  if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2795  return -1;
2796  IndexLOM = LOMBitsLUT[IndexCO];
2797 
2798  if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2799  return -1;
2800  NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2801  Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << IndexLOM) - 1);
2802  MaskedBits = (MatchLength - 2) & Mask;
2803  NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2804 
2805  if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2806  return -1;
2807  if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2808  return -1010;
2809  }
2810  else
2811  {
2812  /* CopyOffset in OffsetCache */
2813  IndexLEC = 289 + OffsetCacheIndex;
2814  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2815  return -1;
2816  BitLength = HuffLengthLEC[IndexLEC];
2817  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2818  return -1;
2819  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2820 
2821  if (BitLength >= 15)
2822  return -1011;
2823 
2824  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2825 
2826  if ((MatchLength - 2) >= 768)
2827  IndexCO = 28;
2828  else
2829  IndexCO = ncrush->HuffTableLOM[MatchLength];
2830 
2831  if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2832  return -1;
2833 
2834  BitLength = HuffLengthLOM[IndexCO];
2835 
2836  if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2837  return -1;
2838  IndexLOM = LOMBitsLUT[IndexCO];
2839 
2840  if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2841  return -1;
2842  NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2843  const UINT16 Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << IndexLOM) - 1);
2844  MaskedBits = (MatchLength - 2) & Mask;
2845  NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2846 
2847  if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2848  return -1;
2849  if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2850  return -1012;
2851  }
2852  }
2853 
2854  if (HistoryPtr >= HistoryBufferEndPtr)
2855  return -1013;
2856  }
2857 
2858  while (SrcPtr < SrcEndPtr)
2859  {
2860  if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #3 */
2861  {
2862  ncrush_context_reset(ncrush, TRUE);
2863  *pFlags = PACKET_FLUSHED;
2864  *pFlags |= CompressionLevel;
2865  *ppDstData = pSrcData;
2866  *pDstSize = SrcSize;
2867  return 1;
2868  }
2869 
2870  Literal = *SrcPtr++;
2871  HistoryPtr++;
2872  IndexLEC = Literal;
2873  if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2874  return -1;
2875  if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2876  return -1;
2877  BitLength = HuffLengthLEC[IndexLEC];
2878  CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2879 
2880  if (BitLength > 15)
2881  return -1014;
2882 
2883  NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2884  }
2885 
2886  if ((DstPtr + 4) >= DstEndPtr) /* PACKET_FLUSH #4 */
2887  {
2888  ncrush_context_reset(ncrush, TRUE);
2889  *pFlags = PACKET_FLUSHED;
2890  *pFlags |= CompressionLevel;
2891  *ppDstData = pSrcData;
2892  *pDstSize = SrcSize;
2893  return 1;
2894  }
2895 
2896  IndexLEC = 256;
2897  BitLength = HuffLengthLEC[IndexLEC];
2898 
2899  if (BitLength > 15)
2900  return -1015;
2901 
2902  bits = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2903  NCrushWriteBits(&DstPtr, &accumulator, &offset, bits, BitLength);
2904  NCrushWriteFinish(&DstPtr, accumulator);
2905  const intptr_t dsize = DstPtr - pDstData;
2906  WINPR_ASSERT(dsize <= UINT32_MAX);
2907  WINPR_ASSERT(dsize >= 0);
2908  *pDstSize = (UINT32)dsize;
2909 
2910  if (*pDstSize > SrcSize)
2911  return -1016;
2912 
2913  *pFlags |= PACKET_COMPRESSED;
2914  *pFlags |= CompressionLevel;
2915 
2916  if (PacketAtFront)
2917  *pFlags |= PACKET_AT_FRONT;
2918 
2919  if (PacketFlushed)
2920  *pFlags |= PACKET_FLUSHED;
2921 
2922  const intptr_t diff = HistoryPtr - HistoryBuffer;
2923  if (diff > UINT32_MAX)
2924  return -1;
2925 
2926  ncrush->HistoryOffset = (UINT32)diff;
2927 
2928  if (ncrush->HistoryOffset >= ncrush->HistoryBufferSize)
2929  return -1;
2930 
2931  return 1;
2932 }
2933 
2934 static int ncrush_generate_tables(NCRUSH_CONTEXT* context)
2935 {
2936  WINPR_ASSERT(context);
2937  WINPR_ASSERT(28 < ARRAYSIZE(LOMBitsLUT));
2938 
2939  UINT32 cnt = 0;
2940  for (BYTE i = 0; i < 28; i++)
2941  {
2942  for (UINT32 j = 0; j < 1 << LOMBitsLUT[i]; j++)
2943  {
2944  size_t l = (cnt++) + 2ull;
2945  context->HuffTableLOM[l] = i;
2946  }
2947  }
2948 
2949  for (UINT32 k = 2; k < 4096; k++)
2950  {
2951  size_t i = 28;
2952  if ((k - 2) < 768)
2953  i = context->HuffTableLOM[k];
2954 
2955  if (i >= ARRAYSIZE(LOMBitsLUT))
2956  return -1;
2957  if (i >= ARRAYSIZE(LOMBaseLUT))
2958  return -1;
2959 
2960  if (((((1 << LOMBitsLUT[i]) - 1) & (k - 2)) + LOMBaseLUT[i]) != k)
2961  return -1;
2962  }
2963 
2964  size_t k = 0;
2965  for (BYTE i = 0; i < 16; i++)
2966  {
2967  for (size_t j = 0; j < 1 << CopyOffsetBitsLUT[i]; j++)
2968  {
2969  size_t l = k++ + 2ull;
2970  context->HuffTableCopyOffset[l] = i;
2971  }
2972  }
2973 
2974  k /= 128;
2975 
2976  for (BYTE i = 16; i < 32; i++)
2977  {
2978  const UINT32 lut = CopyOffsetBitsLUT[i];
2979  WINPR_ASSERT(lut >= 7);
2980  for (size_t j = 0; j < 1 << (lut - 7); j++)
2981  {
2982  size_t l = k++ + 2 + 256ull;
2983  context->HuffTableCopyOffset[l] = i;
2984  }
2985  }
2986 
2987  if ((k + 256) > 1024)
2988  return -1;
2989 
2990  return 1;
2991 }
2992 
2993 void ncrush_context_reset(NCRUSH_CONTEXT* ncrush, BOOL flush)
2994 {
2995  WINPR_ASSERT(ncrush);
2996 
2997  ZeroMemory(&(ncrush->HistoryBuffer), sizeof(ncrush->HistoryBuffer));
2998  ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2999  ZeroMemory(&(ncrush->MatchTable), sizeof(ncrush->MatchTable));
3000  ZeroMemory(&(ncrush->HashTable), sizeof(ncrush->HashTable));
3001 
3002  if (flush)
3003  ncrush->HistoryOffset = ncrush->HistoryBufferSize + 1;
3004  else
3005  ncrush->HistoryOffset = 0;
3006 
3007  ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3008 }
3009 
3010 NCRUSH_CONTEXT* ncrush_context_new(BOOL Compressor)
3011 {
3012  NCRUSH_CONTEXT* ncrush = (NCRUSH_CONTEXT*)calloc(1, sizeof(NCRUSH_CONTEXT));
3013 
3014  if (!ncrush)
3015  goto fail;
3016 
3017  ncrush->Compressor = Compressor;
3018  ncrush->HistoryBufferSize = 65536;
3019  ncrush->HistoryEndOffset = ncrush->HistoryBufferSize - 1;
3020  ncrush->HistoryBufferFence = 0xABABABAB;
3021  ncrush->HistoryOffset = 0;
3022  ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3023 
3024  if (ncrush_generate_tables(ncrush) < 0)
3025  {
3026  WLog_DBG(TAG, "ncrush_context_new: failed to initialize tables");
3027  goto fail;
3028  }
3029 
3030  ncrush_context_reset(ncrush, FALSE);
3031 
3032  return ncrush;
3033 fail:
3034  ncrush_context_free(ncrush);
3035  return NULL;
3036 }
3037 
3038 void ncrush_context_free(NCRUSH_CONTEXT* ncrush)
3039 {
3040  free(ncrush);
3041 }