1 /*
2 * Library DEFLATE decompression testing program
3 *
4 * Copyright (C) 2018-2021, Joachim Metz <joachim.metz@gmail.com>
5 *
6 * Refer to AUTHORS for acknowledgements.
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22 #include <common.h>
23 #include <memory.h>
24 #include <file_stream.h>
25 #include <types.h>
26
27 #if defined( HAVE_STDLIB_H ) || defined( WINAPI )
28 #include <stdlib.h>
29 #endif
30
31 #include "fsapfs_test_libcerror.h"
32 #include "fsapfs_test_libcnotify.h"
33 #include "fsapfs_test_libfsapfs.h"
34 #include "fsapfs_test_macros.h"
35 #include "fsapfs_test_unused.h"
36
37 #include "../libfsapfs/libfsapfs_deflate.h"
38
39 /* Define to make fsapfs_test_deflate generate verbose output
40 #define FSAPFS_TEST_DEFLATE
41 */
42
43 uint8_t fsapfs_test_deflate_compressed_byte_stream[ 2627 ] = {
44 0x78, 0xda, 0xbd, 0x59, 0x6d, 0x8f, 0xdb, 0xb8, 0x11, 0xfe, 0x7c, 0xfa, 0x15, 0xc4, 0x7e, 0xb9,
45 0x5d, 0xc0, 0x75, 0x5e, 0x7b, 0x45, 0x0f, 0x45, 0x81, 0xed, 0xde, 0x26, 0xdd, 0x62, 0x2f, 0x0d,
46 0xb2, 0x97, 0x16, 0xfd, 0x48, 0x4b, 0xb4, 0xcd, 0x46, 0x12, 0x5d, 0x52, 0x5a, 0xc7, 0xfd, 0xf5,
47 0x7d, 0x66, 0x86, 0x94, 0x28, 0xd9, 0xde, 0xec, 0xe1, 0x80, 0x06, 0x38, 0x5c, 0x62, 0x93, 0xc3,
48 0x79, 0x7d, 0xe6, 0x99, 0xf1, 0x77, 0xdf, 0x29, 0xa5, 0xde, 0x7f, 0xf8, 0xac, 0xee, 0x6f, 0x1f,
49 0x1e, 0x6e, 0x3f, 0xa9, 0xf7, 0xb7, 0x1f, 0x6e, 0x3f, 0x5d, 0xdf, 0xab, 0x8f, 0x9f, 0xff, 0x72,
50 0x7f, 0x77, 0xa3, 0xf0, 0xdf, 0xed, 0x87, 0x87, 0xdb, 0x42, 0x9d, 0xfe, 0xf3, 0x0f, 0xe3, 0x83,
51 0x75, 0xad, 0x7a, 0xb3, 0x50, 0xaf, 0xff, 0xa8, 0xfe, 0xd6, 0xb7, 0x46, 0xbd, 0x7e, 0xf9, 0xf2,
52 0x0f, 0x45, 0xa1, 0x6e, 0xdc, 0xee, 0xe0, 0xed, 0x66, 0xdb, 0xa9, 0xcb, 0x9b, 0x2b, 0xfe, 0x50,
53 0xbd, 0xf3, 0xc6, 0xa8, 0x07, 0xb7, 0xee, 0xf6, 0xda, 0x1b, 0xf5, 0xce, 0xf5, 0x6d, 0xa5, 0x3b,
54 0xdc, 0x5e, 0xa8, 0xbb, 0xb6, 0x5c, 0xaa, 0x3f, 0x6d, 0xbb, 0x6e, 0xf7, 0xe3, 0x8b, 0x17, 0xeb,
55 0xb0, 0x5e, 0x3a, 0xbf, 0x79, 0xf1, 0xe7, 0x42, 0xdd, 0x3e, 0x1a, 0x7f, 0x70, 0x10, 0x6a, 0x83,
56 0xda, 0x19, 0xdf, 0xd8, 0xae, 0x33, 0x95, 0xea, 0x9c, 0x2a, 0x21, 0x5d, 0xe9, 0xb6, 0x52, 0x95,
57 0x0d, 0x9d, 0xb7, 0xab, 0xbe, 0x33, 0x0a, 0x67, 0x57, 0x90, 0xd7, 0xd0, 0x97, 0xd6, 0x84, 0x42,
58 0xb9, 0xb5, 0xea, 0xb6, 0xb8, 0x59, 0xdb, 0xd2, 0xb4, 0xc1, 0xa8, 0xca, 0x95, 0x7d, 0x63, 0xda,
59 0x6e, 0xa1, 0x70, 0x5e, 0x95, 0x5b, 0xdd, 0x6e, 0x6c, 0xbb, 0x51, 0xb6, 0x23, 0xf1, 0xad, 0xeb,
60 0x94, 0xae, 0x6b, 0xb7, 0x37, 0xd5, 0xb2, 0x80, 0xfe, 0xea, 0x17, 0xba, 0xfa, 0x18, 0xed, 0x63,
61 0x51, 0x46, 0xfc, 0x64, 0x42, 0x30, 0x5e, 0xbd, 0x37, 0xad, 0xf1, 0xba, 0x56, 0x1f, 0xfb, 0x15,
62 0xe4, 0xab, 0xfb, 0xf8, 0x86, 0x6d, 0x4b, 0xe7, 0x77, 0xce, 0xeb, 0x0e, 0x1a, 0xd0, 0x95, 0x0e,
63 0x6a, 0x07, 0x56, 0xb5, 0x74, 0x6d, 0x65, 0xc9, 0xde, 0x40, 0xe2, 0x92, 0xe4, 0x37, 0xb9, 0xec,
64 0xa9, 0xd0, 0x22, 0x0a, 0x5d, 0xa8, 0xd0, 0xef, 0x76, 0xb5, 0x21, 0xdd, 0x61, 0xfe, 0xea, 0xc0,
65 0xe7, 0x75, 0x25, 0xd2, 0x70, 0x9c, 0x5d, 0x13, 0x02, 0x8b, 0xae, 0xe1, 0x10, 0x3a, 0x64, 0x60,
66 0xca, 0x92, 0xec, 0x78, 0xb9, 0x54, 0xd7, 0xe3, 0xd1, 0x9f, 0xcc, 0xda, 0xb6, 0xa2, 0xc5, 0x52,
67 0xd1, 0xd7, 0xd7, 0x41, 0xf5, 0x01, 0x17, 0xb6, 0xc6, 0x1b, 0x8b, 0x50, 0x5c, 0xb0, 0xcb, 0xe2,
68 0xcb, 0x17, 0xca, 0x9b, 0x35, 0x14, 0x25, 0x97, 0x9f, 0x54, 0x58, 0x9c, 0x51, 0x9c, 0x76, 0xc6,
69 0x82, 0xcd, 0xa6, 0xa3, 0x17, 0x6c, 0xdc, 0xc7, 0xfb, 0x6f, 0xc9, 0x3b, 0x23, 0x88, 0xed, 0xb8,
70 0xf8, 0x05, 0x67, 0xee, 0xed, 0xca, 0x6b, 0x7f, 0xc8, 0xe5, 0x68, 0x38, 0x16, 0xb2, 0x60, 0xc2,
71 0xde, 0xf9, 0x2f, 0x6a, 0x43, 0xff, 0x68, 0x93, 0x9b, 0x46, 0x53, 0x16, 0x85, 0xc3, 0x23, 0x1e,
72 0x9f, 0xe9, 0x16, 0x7a, 0xa9, 0x6b, 0x78, 0xd4, 0x96, 0x9c, 0x7f, 0xca, 0x79, 0x48, 0xb9, 0x71,
73 0xcd, 0xca, 0xd2, 0xc5, 0x7f, 0x92, 0x18, 0x1d, 0x54, 0x45, 0xae, 0x9a, 0xb8, 0xf2, 0xba, 0x55,
74 0x17, 0xd9, 0xbd, 0x0b, 0xca, 0x1b, 0xdd, 0x1e, 0xe4, 0x61, 0x08, 0xee, 0x54, 0xa3, 0xbf, 0x18,
75 0x76, 0x28, 0x19, 0x85, 0x57, 0x2c, 0x22, 0xe6, 0xd7, 0xba, 0x34, 0x6a, 0xe7, 0xdd, 0xa3, 0xad,
76 0x4c, 0x55, 0xc4, 0xf0, 0x45, 0x4b, 0x24, 0x17, 0xf7, 0x5b, 0x5b, 0x6e, 0x53, 0x16, 0xb2, 0x9e,
77 0x7b, 0x0b, 0x19, 0x2b, 0x4d, 0x91, 0x81, 0x82, 0xd9, 0x85, 0x65, 0x21, 0x21, 0x44, 0xe2, 0x6a,
78 0xe4, 0xc5, 0xaa, 0xac, 0x75, 0xe0, 0x84, 0x82, 0x1f, 0xf8, 0xaf, 0x83, 0xda, 0x93, 0x77, 0x48,
79 0x78, 0x65, 0x90, 0x42, 0x15, 0x0e, 0x36, 0xae, 0x32, 0x05, 0xae, 0xf4, 0x81, 0xc5, 0x9c, 0x52,
80 0x73, 0x76, 0x5d, 0xcc, 0x57, 0x17, 0x13, 0x27, 0x89, 0xfd, 0x62, 0x3d, 0xee, 0x55, 0x7d, 0x29,
81 0xf7, 0x4a, 0x3e, 0x44, 0xa2, 0xe1, 0xd8, 0xda, 0xb6, 0x5f, 0xe4, 0x95, 0x22, 0x77, 0xf9, 0xde,
82 0x76, 0xdb, 0xc9, 0x03, 0x54, 0x70, 0x78, 0x5e, 0xfb, 0xce, 0x96, 0x7d, 0xad, 0xfd, 0xbc, 0xf4,
83 0xe2, 0xb9, 0x82, 0x2f, 0x8a, 0xbf, 0xe8, 0xe3, 0x69, 0xd4, 0xf6, 0x08, 0x5b, 0xa3, 0x2b, 0xc6,
84 0x0b, 0x5d, 0x07, 0xe0, 0x04, 0x4a, 0xda, 0xc4, 0x1c, 0xbc, 0x87, 0x26, 0xf0, 0x7f, 0x84, 0xac,
85 0x8b, 0xa5, 0x14, 0x39, 0xbe, 0xf8, 0x19, 0xca, 0x36, 0x48, 0xba, 0x1b, 0xe7, 0xbd, 0x09, 0x3b,
86 0x2a, 0x53, 0x28, 0xfc, 0xe0, 0x7a, 0x5f, 0xa2, 0x02, 0xd6, 0x27, 0xb2, 0xa3, 0x31, 0x1a, 0xa5,
87 0x06, 0xa9, 0xc5, 0xa9, 0x3b, 0x7c, 0xe5, 0x48, 0xb9, 0x85, 0x32, 0x5f, 0xcb, 0xba, 0xaf, 0xc4,
88 0x19, 0x07, 0x15, 0xe4, 0x6c, 0x49, 0xb1, 0xa0, 0x0b, 0x00, 0x8d, 0x01, 0x1c, 0x8e, 0x2d, 0xa3,
89 0xec, 0x5a, 0x10, 0x84, 0x04, 0x44, 0x87, 0x92, 0xdd, 0x22, 0x6a, 0xc1, 0xd5, 0x11, 0x40, 0x01,
90 0xa8, 0xc5, 0x24, 0x5b, 0x32, 0x5f, 0x4b, 0x19, 0x72, 0x66, 0xa5, 0x4c, 0x22, 0x47, 0x24, 0xec,
91 0x1e, 0xfd, 0x30, 0xb5, 0x25, 0x8f, 0xd6, 0x0d, 0x94, 0xfc, 0x96, 0x27, 0xdc, 0xea, 0xdf, 0xa6,
92 0xec, 0xd8, 0x1e, 0x7a, 0xf0, 0x05, 0x0e, 0x67, 0x26, 0x0e, 0x3e, 0x99, 0x28, 0x06, 0xb4, 0xcc,
93 0x3c, 0x82, 0x6e, 0xa0, 0x0b, 0xd2, 0xb5, 0xef, 0x6c, 0x6d, 0xbb, 0x03, 0x25, 0xd5, 0xc6, 0x6b,
94 0xc0, 0x67, 0x6b, 0x0c, 0xe5, 0x24, 0xc9, 0xf0, 0x46, 0x52, 0x8d, 0x2e, 0x1d, 0xbb, 0x69, 0xed,
95 0x5d, 0xc3, 0xda, 0x4c, 0x9e, 0xa1, 0x12, 0x1b, 0x9d, 0x4f, 0xb7, 0x1e, 0x0e, 0x40, 0xc9, 0x26,
96 0x26, 0x15, 0x9a, 0xc5, 0x49, 0xa7, 0xb3, 0x67, 0x5e, 0x2d, 0xd5, 0xed, 0xd7, 0xd2, 0xec, 0xd8,
97 0x0f, 0x80, 0x9b, 0x07, 0x18, 0x79, 0x8c, 0xdb, 0x1f, 0xef, 0xf9, 0xf0, 0xbf, 0x5c, 0x8f, 0xfc,
98 0xa3, 0x0a, 0x68, 0x1f, 0xcd, 0x61, 0x0e, 0x4d, 0xe8, 0x77, 0x00, 0xa0, 0x20, 0x02, 0x02, 0x24,
99 0x90, 0xad, 0x6f, 0x87, 0x36, 0x15, 0x81, 0x8a, 0x33, 0xdc, 0x41, 0xe3, 0x95, 0x21, 0x6d, 0x57,
100 0xd4, 0x26, 0xa9, 0xaa, 0xc2, 0x53, 0x0f, 0xbf, 0x5e, 0x42, 0x75, 0x7a, 0x93, 0xae, 0xfc, 0xec,
101 0x2a, 0xbb, 0xb6, 0x63, 0x84, 0x03, 0x1f, 0xb9, 0x5b, 0xab, 0x03, 0xa9, 0x47, 0x5f, 0x8a, 0x6a,
102 0x68, 0xa1, 0xd3, 0xe2, 0xe2, 0x4c, 0xa1, 0xa8, 0xd0, 0x49, 0x2f, 0x47, 0xa3, 0x13, 0x03, 0xbe,
103 0x2b, 0x80, 0x10, 0x12, 0x98, 0x1c, 0x7d, 0xd7, 0x7d, 0x5b, 0x26, 0x14, 0xa5, 0x08, 0xd2, 0xa7,
104 0x2b, 0x23, 0x2d, 0xcb, 0x0a, 0x20, 0x4c, 0xe1, 0xb6, 0x60, 0xa4, 0x04, 0x46, 0x72, 0xde, 0xa8,
105 0x41, 0xe8, 0x65, 0x0e, 0xd0, 0x04, 0xac, 0xc8, 0xea, 0x0d, 0x37, 0x6c, 0xc0, 0x42, 0xa0, 0xdc,
106 0xde, 0x6f, 0x0d, 0x67, 0xf0, 0xa8, 0x08, 0xdc, 0x66, 0xdb, 0x47, 0x87, 0x74, 0xbe, 0x5a, 0xd0,
107 0x37, 0xad, 0xd8, 0x38, 0x0d, 0xc1, 0x68, 0x67, 0x13, 0x3d, 0x53, 0x44, 0x70, 0xf9, 0x91, 0x1c,
108 0xa3, 0xf4, 0x55, 0x0c, 0xcd, 0xa4, 0x5f, 0x8c, 0x50, 0xc8, 0xfa, 0x8a, 0xdc, 0x2f, 0xc8, 0x6d,
109 0xb4, 0x18, 0x87, 0x5c, 0xd4, 0x04, 0x44, 0x66, 0x8d, 0x9c, 0xec, 0x60, 0x32, 0xc9, 0xc1, 0xb5,
110 0x1e, 0xc4, 0x46, 0x4a, 0xd5, 0x4a, 0xad, 0x99, 0x47, 0xd2, 0x7f, 0xd6, 0x6f, 0x2a, 0x67, 0x04,
111 0xea, 0xd9, 0x49, 0x0c, 0xb4, 0x74, 0x7f, 0xee, 0xc9, 0xc5, 0xd4, 0x3f, 0x01, 0x55, 0x51, 0x2b,
112 0x87, 0x66, 0x4f, 0xe4, 0x42, 0xaa, 0x1a, 0xff, 0x80, 0x02, 0x4d, 0xa0, 0xeb, 0x7b, 0xbc, 0x8b,
113 0xe7, 0x3c, 0x83, 0x28, 0x59, 0x6c, 0x3b, 0xb0, 0xa6, 0x1e, 0x6c, 0x04, 0xad, 0xc4, 0x9b, 0x46,
114 0x5b, 0x24, 0x1d, 0xd5, 0x2b, 0x72, 0x64, 0xdd, 0xd7, 0x0b, 0x3c, 0xc3, 0xe6, 0xaf, 0x46, 0xf3,
115 0x87, 0xa4, 0x5a, 0x08, 0x40, 0xb7, 0xc4, 0xbd, 0xa2, 0xef, 0xce, 0xf0, 0x0d, 0xb7, 0x26, 0x19,
116 0xb9, 0xe7, 0x94, 0x16, 0x53, 0x57, 0xb5, 0xa1, 0x5c, 0x60, 0xef, 0x51, 0x10, 0x38, 0x0b, 0xdf,
117 0x2c, 0xd5, 0xdf, 0x05, 0x28, 0x08, 0x53, 0x88, 0xf8, 0x45, 0xba, 0xc4, 0x89, 0x0b, 0x03, 0xbc,
118 0xc5, 0x03, 0x5c, 0xc6, 0xa9, 0x73, 0xfd, 0xd5, 0x68, 0xd2, 0xee, 0x9d, 0xad, 0x4d, 0x18, 0xc0,
119 0x2a, 0x47, 0x1b, 0xf2, 0x40, 0xec, 0xb7, 0xb9, 0x97, 0x29, 0x0b, 0x32, 0x3a, 0x86, 0x7f, 0x67,
120 0xd2, 0x0b, 0x0d, 0xc6, 0xc3, 0x72, 0xd7, 0xb6, 0x96, 0x98, 0x31, 0xc9, 0x8c, 0xae, 0x9b, 0x76,
121 0xa6, 0x59, 0x59, 0x87, 0x1e, 0xcd, 0x47, 0x14, 0x28, 0x58, 0x81, 0xe8, 0x3e, 0x66, 0x7a, 0x6e,
122 0x2d, 0xc5, 0x53, 0x6e, 0x1d, 0xdc, 0x31, 0xcb, 0x22, 0xa4, 0x85, 0xc8, 0xce, 0xf4, 0xaa, 0x8a,
123 0x41, 0xb1, 0x48, 0x00, 0x6a, 0x0b, 0xa2, 0x2b, 0x3c, 0xb7, 0x45, 0xfe, 0x7b, 0x18, 0x54, 0x93,
124 0x66, 0xba, 0x31, 0x38, 0x88, 0xc8, 0x73, 0x99, 0x81, 0xf7, 0xf6, 0x65, 0x87, 0x84, 0x2b, 0x6a,
125 0x8d, 0x17, 0x3b, 0x21, 0x99, 0xba, 0x2c, 0x41, 0xc9, 0x1c, 0x9d, 0x22, 0x00, 0x46, 0x5b, 0xab,
126 0xa1, 0x7a, 0xe9, 0x5d, 0xa0, 0x94, 0x44, 0x33, 0x36, 0x43, 0x9a, 0xc9, 0x05, 0xc0, 0xe0, 0xae,
127 0x66, 0xb6, 0x7a, 0xd9, 0x19, 0x4e, 0xbd, 0xb5, 0xd9, 0x1b, 0xee, 0xdb, 0x86, 0x8a, 0x4b, 0xd5,
128 0xa6, 0xdd, 0x74, 0x5b, 0x94, 0x17, 0x55, 0x40, 0x85, 0xda, 0x46, 0x99, 0x26, 0x17, 0xad, 0x1d,
129 0x31, 0x66, 0x84, 0x6e, 0x28, 0xa4, 0xf7, 0xf6, 0x91, 0x49, 0x44, 0x83, 0xeb, 0x48, 0x7c, 0x98,
130 0x03, 0x2f, 0x48, 0x32, 0x19, 0x0d, 0xb7, 0xe5, 0xd5, 0x98, 0xc7, 0x90, 0x03, 0x10, 0xeb, 0x20,
131 0xa3, 0x2c, 0x4c, 0x4d, 0xa9, 0xd5, 0x75, 0x91, 0x4b, 0xca, 0xa9, 0xe1, 0x08, 0x7d, 0x48, 0x69,
132 0x4e, 0x8c, 0x8b, 0x7a, 0x20, 0x6e, 0x27, 0xc8, 0x9d, 0xf1, 0xbf, 0x65, 0xca, 0xf5, 0xeb, 0x12,
133 0xfc, 0x64, 0x47, 0xfd, 0x66, 0xae, 0x03, 0x6b, 0x39, 0x05, 0x8c, 0x58, 0x0e, 0xf1, 0xf1, 0x71,
134 0x96, 0x20, 0x59, 0x69, 0x9c, 0x60, 0xc9, 0x6f, 0x97, 0xd3, 0xde, 0x11, 0x4e, 0xf7, 0x83, 0x69,
135 0xb7, 0x3a, 0x9f, 0x37, 0x92, 0x2d, 0x45, 0x07, 0xc0, 0xa1, 0xae, 0xb3, 0x31, 0x04, 0x8d, 0x0b,
136 0x82, 0x1b, 0xea, 0x02, 0x8f, 0x06, 0xa0, 0x81, 0x50, 0x50, 0xb2, 0xa0, 0x63, 0x63, 0x00, 0x82,
137 0x09, 0x39, 0x5a, 0x47, 0xf5, 0x8b, 0x39, 0xa7, 0x48, 0x6e, 0x83, 0x3e, 0x9d, 0x66, 0x3d, 0x22,
138 0x4c, 0xcd, 0xc8, 0x2f, 0xac, 0xf5, 0x04, 0x25, 0x30, 0xd4, 0xd0, 0x90, 0x64, 0x90, 0x84, 0xa8,
139 0x4f, 0xea, 0xbf, 0x95, 0x59, 0xf5, 0x1b, 0x9e, 0x9b, 0xb8, 0x0c, 0x66, 0x3d, 0xc2, 0x4a, 0x93,
140 0x61, 0xee, 0x05, 0x05, 0x39, 0xe4, 0x40, 0x88, 0xdf, 0x9e, 0x2b, 0xc7, 0x6c, 0x48, 0x60, 0xc7,
141 0xfc, 0x5f, 0xb3, 0x65, 0xc6, 0x36, 0x7f, 0x43, 0xbe, 0xa8, 0xf2, 0x0a, 0x13, 0xf0, 0x31, 0x9f,
142 0x62, 0x9d, 0x31, 0xd4, 0xa2, 0x26, 0x0f, 0x81, 0x45, 0xcb, 0x10, 0x2d, 0xce, 0x01, 0x87, 0xef,
143 0x29, 0x12, 0xdc, 0x6d, 0xbe, 0x9a, 0xb2, 0xcf, 0x69, 0x94, 0x61, 0x0d, 0xe6, 0x57, 0x06, 0xe2,
144 0x35, 0x38, 0xa1, 0x71, 0x22, 0x00, 0x1f, 0xc2, 0x0f, 0x51, 0xf0, 0x82, 0x5a, 0xee, 0xde, 0x00,
145 0x2d, 0xa8, 0xf5, 0x4a, 0x83, 0x37, 0x2d, 0xae, 0x57, 0xd6, 0x53, 0xca, 0x45, 0xde, 0xd4, 0xd3,
146 0xe8, 0xcb, 0xa0, 0x1e, 0xbd, 0xb7, 0xcb, 0xc8, 0xd3, 0x39, 0xe3, 0x67, 0x96, 0x57, 0x57, 0xea,
147 0x27, 0xa7, 0xb2, 0xce, 0x32, 0xcb, 0x0c, 0xfa, 0xf3, 0xf2, 0x2a, 0xf2, 0x19, 0x3e, 0xf0, 0x14,
148 0x41, 0xcf, 0x7a, 0xd7, 0x50, 0x48, 0xf4, 0x78, 0x92, 0x74, 0x34, 0x8b, 0x3e, 0xcd, 0x72, 0x29,
149 0x7d, 0x34, 0x77, 0x94, 0x24, 0x20, 0xf4, 0xb6, 0xe3, 0x5e, 0x86, 0x0f, 0x45, 0x4a, 0x5e, 0xb6,
150 0x1c, 0x2f, 0x59, 0x4d, 0x2c, 0x72, 0x0f, 0xa5, 0xdb, 0x70, 0x9e, 0xc4, 0x57, 0x31, 0x77, 0xa5,
151 0x69, 0x68, 0x4e, 0x83, 0x53, 0x1e, 0x25, 0x72, 0x92, 0x4d, 0x3e, 0x49, 0xca, 0x31, 0x6b, 0xa7,
152 0x20, 0xc4, 0x99, 0x2b, 0xbf, 0x3a, 0x9b, 0x38, 0xa4, 0xba, 0x93, 0x94, 0x46, 0xb7, 0x2d, 0x11,
153 0xd0, 0x9d, 0x29, 0xe5, 0x74, 0xc6, 0x2a, 0x7f, 0x98, 0x07, 0x91, 0xd2, 0xa6, 0x4c, 0x94, 0x32,
154 0x49, 0x38, 0x15, 0x80, 0xe5, 0x10, 0xb4, 0x57, 0x57, 0xea, 0x33, 0x55, 0xd6, 0xe8, 0xb2, 0xb0,
155 0xd5, 0x54, 0x5c, 0x75, 0x4c, 0xbd, 0xc6, 0xd0, 0xd2, 0xc5, 0x86, 0x86, 0xa5, 0xa7, 0xc9, 0x30,
156 0x8d, 0x82, 0x63, 0xc4, 0x52, 0xdf, 0xbd, 0x1e, 0x25, 0x8d, 0x57, 0x91, 0x57, 0x94, 0x3b, 0xec,
157 0xf8, 0x4b, 0xa2, 0x6e, 0x44, 0x24, 0xf1, 0x77, 0xdf, 0xc3, 0x58, 0xdb, 0x0c, 0x62, 0x4e, 0x32,
158 0x5c, 0x20, 0x93, 0x47, 0xdb, 0xa7, 0xd1, 0x02, 0xc9, 0xdf, 0x0e, 0x23, 0x11, 0x45, 0xed, 0x7b,
159 0xaa, 0xb7, 0x66, 0xd7, 0x23, 0xb0, 0x43, 0xec, 0x79, 0x4c, 0x90, 0xa8, 0x5f, 0x02, 0x0d, 0xf6,
160 0x19, 0x03, 0x23, 0xf7, 0xe3, 0x6f, 0x40, 0xe2, 0x33, 0xf1, 0x4b, 0x42, 0x66, 0x1a, 0x24, 0xaa,
161 0x31, 0xcc, 0xdc, 0xbf, 0x63, 0x84, 0xe9, 0x2c, 0x99, 0x99, 0x8d, 0xc5, 0x3c, 0xac, 0x4e, 0xd7,
162 0x6c, 0xb2, 0xb1, 0x51, 0xe6, 0x4a, 0x7d, 0x14, 0x56, 0x01, 0xfe, 0x14, 0x3a, 0xb4, 0x78, 0xc9,
163 0xa3, 0xbb, 0x96, 0xf2, 0x36, 0x9b, 0x79, 0x5c, 0x0b, 0xed, 0x22, 0x24, 0xef, 0x5d, 0x5f, 0x57,
164 0xe3, 0x6e, 0x81, 0xe1, 0x8d, 0x68, 0xe1, 0x7f, 0x7a, 0xeb, 0x85, 0x6b, 0x44, 0xa6, 0x22, 0xb8,
165 0x6e, 0x47, 0x59, 0xd3, 0xb9, 0x65, 0xc8, 0x94, 0x22, 0xee, 0x0d, 0x99, 0x2d, 0x92, 0x83, 0xf8,
166 0x35, 0xc1, 0x06, 0x80, 0x53, 0x47, 0xde, 0x65, 0x5b, 0x8f, 0xe4, 0x49, 0x71, 0xb6, 0x86, 0x98,
167 0x0a, 0x7b, 0xc4, 0xe1, 0x6b, 0xb6, 0x83, 0xe5, 0x08, 0xb0, 0x99, 0xd3, 0x15, 0x91, 0x5e, 0x9e,
168 0xa2, 0x66, 0xbe, 0x7d, 0x48, 0x15, 0x17, 0xf7, 0x0f, 0x52, 0x73, 0x11, 0xbf, 0xe8, 0xe6, 0xf3,
169 0x2a, 0xef, 0xd4, 0xa0, 0xac, 0x2e, 0xef, 0xb8, 0x22, 0xc9, 0x9d, 0xbc, 0xe2, 0x91, 0xa1, 0xf0,
170 0x6d, 0xf5, 0x52, 0x4a, 0xff, 0x5c, 0x30, 0x54, 0xd3, 0x87, 0x8e, 0x98, 0x99, 0x74, 0x92, 0xd4,
171 0xb8, 0x9e, 0x44, 0x35, 0x72, 0xc4, 0x59, 0xa4, 0x12, 0x07, 0x54, 0x66, 0x99, 0x86, 0xba, 0x89,
172 0x36, 0xaf, 0x84, 0xaa, 0xf1, 0xa3, 0x29, 0xa6, 0x73, 0xf5, 0x48, 0x42, 0xae, 0x61, 0xa4, 0x01,
173 0xbf, 0x06, 0x21, 0x78, 0x62, 0xc9, 0x41, 0xe2, 0x34, 0x3a, 0x5c, 0x51, 0xca, 0xfe, 0x3e, 0x63,
174 0x47, 0xc3, 0xcc, 0x3d, 0x61, 0x48, 0xe8, 0x77, 0xb0, 0x3a, 0x01, 0x45, 0x9c, 0x79, 0xac, 0x89,
175 0x00, 0x4b, 0xfb, 0xe2, 0xb8, 0x68, 0xca, 0xb7, 0x1c, 0x45, 0xaa, 0x29, 0x5a, 0x8a, 0xb0, 0xae,
176 0x36, 0x21, 0x38, 0x6d, 0xb6, 0xea, 0x51, 0x60, 0xa2, 0x50, 0x12, 0x71, 0x19, 0x34, 0xe3, 0x77,
177 0xc5, 0xa9, 0xc7, 0x88, 0x59, 0x65, 0x0e, 0x8f, 0xdc, 0x3a, 0x7e, 0x31, 0xe3, 0x0c, 0xc5, 0xa4,
178 0xc5, 0xe4, 0x33, 0x82, 0x8e, 0xab, 0xb0, 0x0c, 0x02, 0x4f, 0x50, 0xbe, 0x22, 0x8d, 0x0a, 0xb1,
179 0x52, 0xbf, 0xc9, 0xb1, 0xa7, 0x9c, 0xe4, 0xe8, 0x89, 0x13, 0xb4, 0x24, 0x60, 0x74, 0xc8, 0xdc,
180 0x47, 0x72, 0xa6, 0x5b, 0xc5, 0x05, 0x14, 0x1b, 0x04, 0x89, 0x00, 0x88, 0x9f, 0xf8, 0x29, 0x0b,
181 0xca, 0x42, 0x7a, 0x3f, 0x19, 0x6a, 0xaa, 0x73, 0x0d, 0xf8, 0x88, 0x4a, 0x3d, 0x41, 0xf7, 0x4e,
182 0xda, 0x21, 0xad, 0x75, 0x98, 0x65, 0x49, 0xca, 0xb8, 0x6f, 0x3c, 0xb5, 0x1a, 0x5d, 0x44, 0xf8,
183 0x40, 0x2e, 0x49, 0xf9, 0xef, 0x69, 0xa9, 0x4d, 0xf0, 0xb2, 0xb6, 0xd2, 0xfc, 0xd9, 0x81, 0xc9,
184 0x7b, 0x74, 0x22, 0xb3, 0x3a, 0x4d, 0x91, 0x13, 0x7f, 0xb1, 0xf2, 0x3f, 0x2c, 0xd5, 0x27, 0xf3,
185 0x68, 0x43, 0xb6, 0x51, 0x79, 0xf6, 0x0f, 0x02, 0xc3, 0xc0, 0x7a, 0xee, 0xc7, 0x0f, 0xc9, 0x7e,
186 0xba, 0x13, 0xb6, 0x44, 0xba, 0xf9, 0x99, 0xb8, 0x3f, 0x6b, 0xcd, 0x3e, 0x41, 0x52, 0x28, 0x9e,
187 0xfd, 0x13, 0x84, 0xec, 0xc0, 0xd0, 0x09, 0x19, 0x8c, 0xf1, 0xff, 0xa5, 0x7a, 0xa0, 0x6c, 0x84,
188 0xb4, 0xb4, 0xf7, 0x08, 0xd2, 0xc9, 0x68, 0x4d, 0x83, 0x59, 0x93, 0xb6, 0xad, 0x28, 0x9a, 0xb0,
189 0xb3, 0xde, 0x76, 0x09, 0xc1, 0x53, 0x83, 0x8c, 0x37, 0xa4, 0xa1, 0x40, 0xd7, 0x02, 0x50, 0x09,
190 0x6e, 0x48, 0x17, 0x2a, 0x83, 0x21, 0xa2, 0xe6, 0x2d, 0x50, 0x55, 0xe1, 0x78, 0x60, 0x85, 0x11,
191 0x61, 0x74, 0x32, 0xca, 0x03, 0xc6, 0x86, 0xd2, 0xf8, 0xb8, 0x80, 0xba, 0x25, 0x4e, 0x9f, 0x10,
192 0x16, 0x91, 0xdc, 0x20, 0x1f, 0xa8, 0x54, 0xe9, 0x27, 0x1c, 0xc4, 0xa2, 0x87, 0x03, 0x28, 0x24,
193 0xe9, 0x04, 0x46, 0xdf, 0x95, 0xf1, 0x0c, 0x71, 0x79, 0xa9, 0x83, 0x9e, 0x52, 0x91, 0x00, 0xe5,
194 0x0d, 0xee, 0x13, 0x9f, 0x1f, 0xe0, 0x2a, 0xd5, 0xaf, 0xc2, 0x9b, 0x34, 0xde, 0x44, 0x11, 0x59,
195 0x47, 0x7e, 0xb6, 0x0f, 0x2f, 0x88, 0x9a, 0xa3, 0x02, 0x68, 0x32, 0x1e, 0x56, 0xd1, 0x17, 0x05,
196 0x6f, 0x36, 0x0c, 0x2f, 0xbe, 0x88, 0xef, 0x91, 0x22, 0x5b, 0xfd, 0x28, 0xf0, 0x1a, 0xf1, 0x17,
197 0x4f, 0x0c, 0x15, 0xab, 0x26, 0x3f, 0x00, 0x15, 0xd9, 0x0f, 0x40, 0xc6, 0x72, 0x69, 0xb1, 0x3e,
198 0x94, 0xe5, 0x12, 0xff, 0xbc, 0x03, 0x79, 0xd9, 0x68, 0xcc, 0x54, 0x28, 0xc6, 0x93, 0x71, 0x41,
199 0x7f, 0x2e, 0xaf, 0x92, 0xe3, 0xd4, 0xd4, 0x71, 0x45, 0xee, 0xb8, 0x71, 0x0f, 0xc5, 0x1e, 0xa4,
200 0x01, 0x75, 0xea, 0xfd, 0x5f, 0xf1, 0x53, 0xcf, 0xb0, 0x77, 0xdb, 0x3a, 0xda, 0x37, 0x91, 0xe6,
201 0x67, 0x7f, 0x3c, 0x3b, 0x23, 0x44, 0xc9, 0xf6, 0xea, 0xd9, 0x16, 0xc6, 0xad, 0xe6, 0xb1, 0x91,
202 0x4f, 0x67, 0x07, 0x12, 0xf4, 0x2b, 0xf4, 0xd4, 0x94, 0xc0, 0x25, 0x1a, 0x46, 0x01, 0x98, 0xe0,
203 0x68, 0xac, 0x7b, 0x5a, 0xa7, 0x0c, 0x15, 0xf7, 0xfc, 0x1f, 0xfd, 0x40, 0x73, 0xeb, 0x9a, 0x93,
204 0xe3, 0xb0, 0x88, 0x01, 0xa5, 0x37, 0xbe, 0x0f, 0x62, 0x4c, 0xa9, 0xd0, 0x78, 0x3b, 0xfe, 0xf9,
205 0x8e, 0x83, 0x5a, 0xd2, 0x3a, 0x59, 0xd3, 0x70, 0x15, 0x43, 0x3c, 0x16, 0x45, 0x41, 0xa3, 0x84,
206 0x66, 0x7c, 0xd4, 0x7d, 0xb7, 0x75, 0xde, 0xfe, 0x57, 0x50, 0x82, 0x3a, 0x2d, 0x59, 0x46, 0xbf,
207 0x7d, 0x8a, 0x87, 0xf9, 0x9d, 0x74, 0x33, 0x0e, 0x79, 0xc5, 0xf8, 0x73, 0xcd, 0xff, 0x00, 0x30,
208 0x4a, 0x56, 0xa4 };
209
210 uint8_t fsapfs_test_deflate_uncompressed_byte_stream[ 7640 ] = {
211 0x09, 0x09, 0x20, 0x20, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x45, 0x53, 0x53, 0x45, 0x52, 0x20,
212 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4c,
213 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
214 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65,
215 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x2c, 0x20, 0x32, 0x39, 0x20, 0x4a, 0x75, 0x6e, 0x65,
216 0x20, 0x32, 0x30, 0x30, 0x37, 0x0a, 0x0a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
217 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x30, 0x37, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20,
218 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74,
219 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x3c, 0x68, 0x74, 0x74, 0x70, 0x3a,
220 0x2f, 0x2f, 0x66, 0x73, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x45, 0x76, 0x65,
221 0x72, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74,
222 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64,
223 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x62, 0x61, 0x74,
224 0x69, 0x6d, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x0a, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
225 0x69, 0x73, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
226 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x69, 0x6e,
227 0x67, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
228 0x77, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65,
229 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55,
230 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20,
231 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69,
232 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x0a, 0x74, 0x68, 0x65, 0x20,
233 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74,
234 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
235 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e,
236 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x0a, 0x4c, 0x69, 0x63, 0x65,
237 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65,
238 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
239 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20,
240 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x2e, 0x0a, 0x0a, 0x20,
241 0x20, 0x30, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x44,
242 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x0a, 0x0a, 0x20, 0x20,
243 0x41, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x68, 0x65, 0x72, 0x65, 0x69, 0x6e, 0x2c, 0x20,
244 0x22, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x72,
245 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
246 0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65,
247 0x73, 0x73, 0x65, 0x72, 0x0a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62,
248 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64,
249 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x22, 0x20, 0x72,
250 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
251 0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x0a, 0x47, 0x65,
252 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63,
253 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x4c, 0x69,
254 0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f,
255 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20,
256 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73,
257 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
258 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
259 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65,
260 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
261 0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x6e, 0x20, 0x22,
262 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x69, 0x73, 0x20,
263 0x61, 0x6e, 0x79, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61,
264 0x6b, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e,
265 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64,
266 0x0a, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c,
267 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
268 0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x62, 0x61, 0x73, 0x65,
269 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
270 0x2e, 0x0a, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62,
271 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
272 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
273 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x65, 0x6d, 0x65,
274 0x64, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x0a, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x69, 0x6e,
275 0x67, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x70,
276 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c,
277 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x20, 0x22, 0x43, 0x6f,
278 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x22, 0x20, 0x69, 0x73, 0x20,
279 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20,
280 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20,
281 0x6c, 0x69, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x69,
282 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20,
283 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61,
284 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
285 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x0a,
286 0x77, 0x69, 0x74, 0x68, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43,
287 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x61, 0x73,
288 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x63, 0x61,
289 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64,
290 0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68,
291 0x65, 0x20, 0x22, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65,
292 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22,
293 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20,
294 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x43,
295 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75,
296 0x72, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62,
297 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75,
298 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
299 0x63, 0x6f, 0x64, 0x65, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e,
300 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65,
301 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e,
302 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x73, 0x6f, 0x6c, 0x61,
303 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20,
304 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
305 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74,
306 0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
307 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x43, 0x6f, 0x72, 0x72, 0x65,
308 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
309 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
310 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x6d,
311 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
312 0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x75, 0x72,
313 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
314 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63,
315 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x64, 0x61, 0x74, 0x61, 0x0a,
316 0x61, 0x6e, 0x64, 0x20, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x67,
317 0x72, 0x61, 0x6d, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
318 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
319 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x66, 0x72,
320 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
321 0x6f, 0x6e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e,
322 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x4c, 0x69, 0x62,
323 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f,
324 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x2e, 0x0a, 0x0a, 0x20, 0x20,
325 0x31, 0x2e, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20,
326 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
327 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75,
328 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, 0x63, 0x6f,
329 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72,
330 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x33, 0x20, 0x61, 0x6e, 0x64, 0x20,
331 0x34, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
332 0x65, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20,
333 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
334 0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50,
335 0x4c, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x32, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69,
336 0x6e, 0x67, 0x20, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x56, 0x65, 0x72, 0x73,
337 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20,
338 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66,
339 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x61, 0x6e,
340 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66,
341 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x0a, 0x66, 0x61, 0x63, 0x69,
342 0x6c, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61,
343 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74,
344 0x61, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64,
345 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
346 0x6f, 0x6e, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65,
347 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x28, 0x6f, 0x74, 0x68, 0x65, 0x72,
348 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x67, 0x75,
349 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e,
350 0x20, 0x74, 0x68, 0x65, 0x0a, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73,
351 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
352 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61,
353 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64,
354 0x69, 0x66, 0x69, 0x65, 0x64, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x0a, 0x0a,
355 0x20, 0x20, 0x20, 0x61, 0x29, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73,
356 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
357 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x6b, 0x65,
358 0x20, 0x61, 0x20, 0x67, 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x61, 0x69, 0x74, 0x68, 0x20, 0x65, 0x66,
359 0x66, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72,
360 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
361 0x76, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
362 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70,
363 0x70, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
364 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x74, 0x68, 0x65,
365 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20,
366 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x65,
367 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x77, 0x68, 0x61, 0x74, 0x65, 0x76,
368 0x65, 0x72, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70,
369 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6d,
370 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x66, 0x75, 0x6c, 0x2c, 0x20, 0x6f, 0x72, 0x0a, 0x0a, 0x20,
371 0x20, 0x20, 0x62, 0x29, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47,
372 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x6e,
373 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
374 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20,
375 0x6f, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e,
376 0x73, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f,
377 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x33,
378 0x2e, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x49, 0x6e,
379 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x4d, 0x61, 0x74, 0x65,
380 0x72, 0x69, 0x61, 0x6c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
381 0x79, 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x0a,
382 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f,
383 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x70,
384 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e,
385 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69,
386 0x61, 0x6c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x0a, 0x61, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
387 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x61,
388 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
389 0x79, 0x2e, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76,
390 0x65, 0x79, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x0a, 0x63,
391 0x6f, 0x64, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20,
392 0x6f, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x2c, 0x20,
393 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x69,
394 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74,
395 0x65, 0x64, 0x0a, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x6e,
396 0x6f, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x75,
397 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
398 0x72, 0x73, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75,
399 0x72, 0x65, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61,
400 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6d, 0x61,
401 0x6c, 0x6c, 0x20, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e,
402 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
403 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x0a, 0x28, 0x74, 0x65, 0x6e, 0x20, 0x6f,
404 0x72, 0x20, 0x66, 0x65, 0x77, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x69, 0x6e,
405 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f,
406 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c,
407 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x29, 0x20, 0x47,
408 0x69, 0x76, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f,
409 0x74, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63,
410 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
411 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x0a,
412 0x20, 0x20, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73,
413 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61,
414 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x6e,
415 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x20,
416 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73,
417 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x29,
418 0x20, 0x41, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f,
419 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
420 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e,
421 0x55, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c,
422 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
423 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x34, 0x2e, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
424 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75,
425 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, 0x43, 0x6f,
426 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x75, 0x6e, 0x64, 0x65,
427 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20,
428 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x0a, 0x74, 0x61, 0x6b,
429 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2c, 0x20, 0x65, 0x66, 0x66,
430 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20,
431 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63,
432 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x70, 0x6f, 0x72,
433 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62,
434 0x72, 0x61, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69,
435 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57,
436 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x0a,
437 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20,
438 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x6d,
439 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x66,
440 0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x65, 0x61, 0x63,
441 0x68, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69,
442 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x29, 0x20, 0x47, 0x69, 0x76, 0x65, 0x20,
443 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65,
444 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20,
445 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20,
446 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65,
447 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64,
448 0x20, 0x69, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
449 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20,
450 0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x63,
451 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c,
452 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x29, 0x20, 0x41,
453 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6d,
454 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
455 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e,
456 0x55, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c,
457 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
458 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x63, 0x29, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x61,
459 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x74,
460 0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x20, 0x63, 0x6f, 0x70,
461 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, 0x64,
462 0x75, 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
463 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
464 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65,
465 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
466 0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20,
467 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c,
468 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
469 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73,
470 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x70,
471 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47,
472 0x50, 0x4c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x63, 0x65,
473 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x20,
474 0x20, 0x20, 0x64, 0x29, 0x20, 0x44, 0x6f, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74,
475 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20,
476 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x29, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20,
477 0x74, 0x68, 0x65, 0x20, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x72,
478 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
479 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73,
480 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
481 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
482 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x41,
483 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x20,
484 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
485 0x20, 0x73, 0x75, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x2c, 0x20, 0x61,
486 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x74,
487 0x68, 0x61, 0x74, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
488 0x75, 0x73, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
489 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x69,
490 0x6e, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
491 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69,
492 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x20, 0x20,
493 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20,
494 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75,
495 0x63, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x43, 0x6f,
496 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x69, 0x6e, 0x20,
497 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x6e, 0x6e, 0x65,
498 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x73,
499 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
500 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x76,
501 0x65, 0x79, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x72,
502 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63,
503 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x29, 0x20, 0x55, 0x73,
504 0x65, 0x20, 0x61, 0x20, 0x73, 0x75, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x68, 0x61,
505 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x6d, 0x65, 0x63, 0x68,
506 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x69, 0x6e,
507 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
508 0x20, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x20, 0x20, 0x41, 0x20, 0x73, 0x75,
509 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d,
510 0x20, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x28, 0x61, 0x29,
511 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x61, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, 0x69, 0x6d,
512 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20,
513 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61,
514 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6f,
515 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d,
516 0x70, 0x75, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x79, 0x73,
517 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x62, 0x29, 0x20, 0x77, 0x69, 0x6c,
518 0x6c, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
519 0x6c, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69,
520 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
521 0x20, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
522 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
523 0x63, 0x65, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69,
524 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x0a, 0x20, 0x20,
525 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x0a, 0x0a,
526 0x20, 0x20, 0x20, 0x65, 0x29, 0x20, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x49, 0x6e,
527 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72,
528 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6f, 0x6e, 0x6c, 0x79,
529 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x74,
530 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65,
531 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
532 0x65, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
533 0x6f, 0x6e, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
534 0x20, 0x36, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x4e, 0x55,
535 0x20, 0x47, 0x50, 0x4c, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74,
536 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61,
537 0x74, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
538 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61,
539 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x6e,
540 0x64, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69,
541 0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20,
542 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20,
543 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79,
544 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20,
545 0x72, 0x65, 0x6c, 0x69, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20,
546 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74,
547 0x68, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72,
548 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x6e, 0x6b,
549 0x65, 0x64, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x28, 0x49, 0x66, 0x0a,
550 0x20, 0x20, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
551 0x6e, 0x20, 0x34, 0x64, 0x30, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x61,
552 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
553 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61,
554 0x6e, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61,
555 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20,
556 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65,
557 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
558 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x49, 0x66,
559 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
560 0x34, 0x64, 0x31, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x72,
561 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
562 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
563 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6e,
564 0x6e, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79,
565 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
566 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x0a, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72,
567 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65,
568 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e,
569 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x35, 0x2e, 0x20, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64,
570 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59,
571 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x62,
572 0x72, 0x61, 0x72, 0x79, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20,
573 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20,
574 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x4c, 0x69, 0x62,
575 0x72, 0x61, 0x72, 0x79, 0x20, 0x73, 0x69, 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x73, 0x69, 0x64,
576 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x6c, 0x69,
577 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77,
578 0x69, 0x74, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72,
579 0x79, 0x0a, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61,
580 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63,
581 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e,
582 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
583 0x69, 0x73, 0x0a, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20,
584 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f,
585 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x75,
586 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x6f,
587 0x75, 0x72, 0x0a, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f,
588 0x75, 0x20, 0x64, 0x6f, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
589 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20,
590 0x61, 0x29, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x68, 0x65,
591 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72,
592 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66,
593 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x62,
594 0x61, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c,
595 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
596 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
597 0x72, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69,
598 0x74, 0x69, 0x65, 0x73, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x65,
599 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d,
600 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
601 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x29, 0x20, 0x47, 0x69, 0x76, 0x65, 0x20, 0x70,
602 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20,
603 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65,
604 0x64, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70,
605 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x73, 0x20,
606 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20,
607 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x61, 0x6e, 0x64,
608 0x20, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x65, 0x72,
609 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20,
610 0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x6e,
611 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66,
612 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x0a,
613 0x0a, 0x20, 0x20, 0x36, 0x2e, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64, 0x20, 0x56, 0x65,
614 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e,
615 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
616 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e,
617 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66,
618 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e,
619 0x20, 0x6d, 0x61, 0x79, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x72, 0x65, 0x76,
620 0x69, 0x73, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x6e, 0x65, 0x77, 0x20,
621 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
622 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72,
623 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73,
624 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74,
625 0x69, 0x6d, 0x65, 0x2e, 0x20, 0x53, 0x75, 0x63, 0x68, 0x20, 0x6e, 0x65, 0x77, 0x0a, 0x76, 0x65,
626 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73,
627 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x70, 0x69, 0x72, 0x69, 0x74,
628 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20,
629 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x79,
630 0x0a, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69,
631 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6e, 0x65, 0x77,
632 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e,
633 0x63, 0x65, 0x72, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x76,
634 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
635 0x61, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67,
636 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e,
637 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20,
638 0x61, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20,
639 0x69, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61,
640 0x74, 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62,
641 0x65, 0x72, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x6f, 0x66, 0x20,
642 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47,
643 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69,
644 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x22, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6c, 0x61,
645 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x0a, 0x61, 0x70, 0x70,
646 0x6c, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20,
647 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
648 0x6f, 0x66, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
649 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69,
650 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20,
651 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x76,
652 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79,
653 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x70,
654 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
655 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f,
656 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65,
657 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x0a,
658 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73,
659 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x76,
660 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66,
661 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x0a,
662 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c,
663 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20,
664 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
665 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65,
666 0x73, 0x73, 0x65, 0x72, 0x0a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62,
667 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x65, 0x76, 0x65, 0x72,
668 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
669 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20,
670 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49,
671 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x61, 0x73,
672 0x20, 0x79, 0x6f, 0x75, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x69, 0x74,
673 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
674 0x61, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x69,
675 0x64, 0x65, 0x0a, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72,
676 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
677 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e,
678 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65,
679 0x6e, 0x73, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x2c,
680 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x27, 0x73, 0x20, 0x70, 0x75,
681 0x62, 0x6c, 0x69, 0x63, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f,
682 0x66, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20,
683 0x61, 0x6e, 0x79, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x0a, 0x70,
684 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
685 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x74,
686 0x6f, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x76, 0x65,
687 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x4c, 0x69,
688 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x0a, 0x0a };
689
690 #if defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT )
691
692 /* Tests the libfsapfs_deflate_bit_stream_get_value function
693 * Returns 1 if successful or 0 if not
694 */
fsapfs_test_deflate_bit_stream_get_value(void)695 int fsapfs_test_deflate_bit_stream_get_value(
696 void )
697 {
698 libfsapfs_deflate_bit_stream_t bit_stream;
699
700 libcerror_error_t *error = NULL;
701 void *memset_result = NULL;
702 uint32_t value_32bit = 0;
703 int result = 0;
704
705 /* Initialize test
706 */
707 memset_result = memory_set(
708 &bit_stream,
709 0,
710 sizeof( libfsapfs_deflate_bit_stream_t ) );
711
712 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
713 "memset_result",
714 memset_result );
715
716 /* Test regular cases
717 */
718 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
719 bit_stream.byte_stream_size = 2627;
720 bit_stream.byte_stream_offset = 0;
721 bit_stream.bit_buffer = 0;
722 bit_stream.bit_buffer_size = 0;
723
724 result = libfsapfs_deflate_bit_stream_get_value(
725 &bit_stream,
726 0,
727 &value_32bit,
728 &error );
729
730 FSAPFS_TEST_ASSERT_EQUAL_INT(
731 "result",
732 result,
733 1 );
734
735 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
736 "value_32bit",
737 value_32bit,
738 (uint32_t) 0x00000000UL );
739
740 FSAPFS_TEST_ASSERT_IS_NULL(
741 "error",
742 error );
743
744 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
745 "bit_stream.byte_stream_offset",
746 bit_stream.byte_stream_offset,
747 (size_t) 0 );
748
749 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
750 "bit_stream.bit_buffer",
751 bit_stream.bit_buffer,
752 (uint32_t) 0x00000000UL );
753
754 FSAPFS_TEST_ASSERT_EQUAL_UINT8(
755 "bit_stream.bit_buffer_size",
756 bit_stream.bit_buffer_size,
757 (uint8_t) 0 );
758
759 result = libfsapfs_deflate_bit_stream_get_value(
760 &bit_stream,
761 4,
762 &value_32bit,
763 &error );
764
765 FSAPFS_TEST_ASSERT_EQUAL_INT(
766 "result",
767 result,
768 1 );
769
770 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
771 "value_32bit",
772 value_32bit,
773 (uint32_t) 0x00000008UL );
774
775 FSAPFS_TEST_ASSERT_IS_NULL(
776 "error",
777 error );
778
779 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
780 "bit_stream.byte_stream_offset",
781 bit_stream.byte_stream_offset,
782 (size_t) 1 );
783
784 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
785 "bit_stream.bit_buffer",
786 bit_stream.bit_buffer,
787 (uint32_t) 0x00000007UL );
788
789 FSAPFS_TEST_ASSERT_EQUAL_UINT8(
790 "bit_stream.bit_buffer_size",
791 bit_stream.bit_buffer_size,
792 (uint8_t) 4 );
793
794 result = libfsapfs_deflate_bit_stream_get_value(
795 &bit_stream,
796 12,
797 &value_32bit,
798 &error );
799
800 FSAPFS_TEST_ASSERT_EQUAL_INT(
801 "result",
802 result,
803 1 );
804
805 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
806 "value_32bit",
807 value_32bit,
808 (uint32_t) 0x00000da7UL );
809
810 FSAPFS_TEST_ASSERT_IS_NULL(
811 "error",
812 error );
813
814 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
815 "bit_stream.byte_stream_offset",
816 bit_stream.byte_stream_offset,
817 (size_t) 2 );
818
819 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
820 "bit_stream.bit_buffer",
821 bit_stream.bit_buffer,
822 (uint32_t) 0x00000000UL );
823
824 FSAPFS_TEST_ASSERT_EQUAL_UINT8(
825 "bit_stream.bit_buffer_size",
826 bit_stream.bit_buffer_size,
827 (uint8_t) 0 );
828
829 result = libfsapfs_deflate_bit_stream_get_value(
830 &bit_stream,
831 32,
832 &value_32bit,
833 &error );
834
835 FSAPFS_TEST_ASSERT_EQUAL_INT(
836 "result",
837 result,
838 1 );
839
840 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
841 "value_32bit",
842 value_32bit,
843 (uint32_t) 0x8f6d59bdUL );
844
845 FSAPFS_TEST_ASSERT_IS_NULL(
846 "error",
847 error );
848
849 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
850 "bit_stream.byte_stream_offset",
851 bit_stream.byte_stream_offset,
852 (size_t) 6 );
853
854 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
855 "bit_stream.bit_buffer",
856 bit_stream.bit_buffer,
857 (uint32_t) 0x00000000UL );
858
859 FSAPFS_TEST_ASSERT_EQUAL_UINT8(
860 "bit_stream.bit_buffer_size",
861 bit_stream.bit_buffer_size,
862 (uint8_t) 0 );
863
864 /* Test error cases
865 */
866 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
867 bit_stream.byte_stream_size = 2627;
868 bit_stream.byte_stream_offset = 0;
869 bit_stream.bit_buffer = 0;
870 bit_stream.bit_buffer_size = 0;
871
872 result = libfsapfs_deflate_bit_stream_get_value(
873 NULL,
874 32,
875 &value_32bit,
876 &error );
877
878 FSAPFS_TEST_ASSERT_EQUAL_INT(
879 "result",
880 result,
881 -1 );
882
883 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
884 "error",
885 error );
886
887 libcerror_error_free(
888 &error );
889
890 result = libfsapfs_deflate_bit_stream_get_value(
891 &bit_stream,
892 64,
893 &value_32bit,
894 &error );
895
896 FSAPFS_TEST_ASSERT_EQUAL_INT(
897 "result",
898 result,
899 -1 );
900
901 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
902 "error",
903 error );
904
905 libcerror_error_free(
906 &error );
907
908 result = libfsapfs_deflate_bit_stream_get_value(
909 &bit_stream,
910 32,
911 NULL,
912 &error );
913
914 FSAPFS_TEST_ASSERT_EQUAL_INT(
915 "result",
916 result,
917 -1 );
918
919 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
920 "error",
921 error );
922
923 libcerror_error_free(
924 &error );
925
926 bit_stream.byte_stream_offset = 2627;
927 bit_stream.bit_buffer_size = 0;
928
929 result = libfsapfs_deflate_bit_stream_get_value(
930 &bit_stream,
931 32,
932 &value_32bit,
933 &error );
934
935 bit_stream.byte_stream_offset = 0;
936
937 FSAPFS_TEST_ASSERT_EQUAL_INT(
938 "result",
939 result,
940 -1 );
941
942 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
943 "error",
944 error );
945
946 libcerror_error_free(
947 &error );
948
949 return( 1 );
950
951 on_error:
952 if( error != NULL )
953 {
954 libcerror_error_free(
955 &error );
956 }
957 return( 0 );
958 }
959
960 /* Tests the libfsapfs_deflate_huffman_table_construct function
961 * Returns 1 if successful or 0 if not
962 */
fsapfs_test_deflate_huffman_table_construct(void)963 int fsapfs_test_deflate_huffman_table_construct(
964 void )
965 {
966 uint16_t code_size_array[ 318 ];
967
968 libfsapfs_deflate_huffman_table_t table;
969
970 libcerror_error_t *error = NULL;
971 void *memset_result = NULL;
972 uint16_t symbol = 0;
973 int result = 0;
974
975 #if defined( HAVE_FSAPFS_TEST_MEMORY )
976 int number_of_memset_fail_tests = 2;
977 int test_number = 0;
978 #endif
979
980 /* Initialize test
981 */
982 memset_result = memory_set(
983 &table,
984 0,
985 sizeof( libfsapfs_deflate_huffman_table_t ) );
986
987 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
988 "memset_result",
989 memset_result );
990
991 for( symbol = 0;
992 symbol < 318;
993 symbol++ )
994 {
995 if( symbol < 144 )
996 {
997 code_size_array[ symbol ] = 8;
998 }
999 else if( symbol < 256 )
1000 {
1001 code_size_array[ symbol ] = 9;
1002 }
1003 else if( symbol < 280 )
1004 {
1005 code_size_array[ symbol ] = 7;
1006 }
1007 else if( symbol < 288 )
1008 {
1009 code_size_array[ symbol ] = 8;
1010 }
1011 else
1012 {
1013 code_size_array[ symbol ] = 5;
1014 }
1015 }
1016 /* Test regular cases
1017 */
1018 result = libfsapfs_deflate_huffman_table_construct(
1019 &table,
1020 code_size_array,
1021 288,
1022 &error );
1023
1024 FSAPFS_TEST_ASSERT_EQUAL_INT(
1025 "result",
1026 result,
1027 1 );
1028
1029 FSAPFS_TEST_ASSERT_IS_NULL(
1030 "error",
1031 error );
1032
1033 /* Test error cases
1034 */
1035 result = libfsapfs_deflate_huffman_table_construct(
1036 NULL,
1037 code_size_array,
1038 288,
1039 &error );
1040
1041 FSAPFS_TEST_ASSERT_EQUAL_INT(
1042 "result",
1043 result,
1044 -1 );
1045
1046 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1047 "error",
1048 error );
1049
1050 libcerror_error_free(
1051 &error );
1052
1053 result = libfsapfs_deflate_huffman_table_construct(
1054 &table,
1055 NULL,
1056 288,
1057 &error );
1058
1059 FSAPFS_TEST_ASSERT_EQUAL_INT(
1060 "result",
1061 result,
1062 -1 );
1063
1064 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1065 "error",
1066 error );
1067
1068 libcerror_error_free(
1069 &error );
1070
1071 result = libfsapfs_deflate_huffman_table_construct(
1072 &table,
1073 code_size_array,
1074 -1,
1075 &error );
1076
1077 FSAPFS_TEST_ASSERT_EQUAL_INT(
1078 "result",
1079 result,
1080 -1 );
1081
1082 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1083 "error",
1084 error );
1085
1086 libcerror_error_free(
1087 &error );
1088
1089 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1090
1091 for( test_number = 0;
1092 test_number < number_of_memset_fail_tests;
1093 test_number++ )
1094 {
1095 /* Test libfsapfs_write_io_handle_initialize with memset failing
1096 */
1097 fsapfs_test_memset_attempts_before_fail = test_number;
1098
1099 result = libfsapfs_deflate_huffman_table_construct(
1100 &table,
1101 code_size_array,
1102 288,
1103 &error );
1104
1105 if( fsapfs_test_memset_attempts_before_fail != -1 )
1106 {
1107 fsapfs_test_memset_attempts_before_fail = -1;
1108 }
1109 else
1110 {
1111 FSAPFS_TEST_ASSERT_EQUAL_INT(
1112 "result",
1113 result,
1114 -1 );
1115
1116 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1117 "error",
1118 error );
1119
1120 libcerror_error_free(
1121 &error );
1122 }
1123 }
1124 #endif /* defined( HAVE_FSAPFS_TEST_MEMORY ) */
1125
1126 /* TODO test errornous data */
1127
1128 return( 1 );
1129
1130 on_error:
1131 if( error != NULL )
1132 {
1133 libcerror_error_free(
1134 &error );
1135 }
1136 return( 0 );
1137 }
1138
1139 /* Tests the libfsapfs_deflate_bit_stream_get_huffman_encoded_value function
1140 * Returns 1 if successful or 0 if not
1141 */
fsapfs_test_deflate_bit_stream_get_huffman_encoded_value(void)1142 int fsapfs_test_deflate_bit_stream_get_huffman_encoded_value(
1143 void )
1144 {
1145 libfsapfs_deflate_bit_stream_t bit_stream;
1146 libfsapfs_deflate_huffman_table_t distances_table;
1147 libfsapfs_deflate_huffman_table_t literals_table;
1148
1149 libcerror_error_t *error = NULL;
1150 void *memset_result = NULL;
1151 uint32_t value_32bit = 0;
1152 int result = 0;
1153
1154 /* Initialize test
1155 */
1156 memset_result = memory_set(
1157 &bit_stream,
1158 0,
1159 sizeof( libfsapfs_deflate_bit_stream_t ) );
1160
1161 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1162 "memset_result",
1163 memset_result );
1164
1165 memset_result = memory_set(
1166 &distances_table,
1167 0,
1168 sizeof( libfsapfs_deflate_huffman_table_t ) );
1169
1170 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1171 "memset_result",
1172 memset_result );
1173
1174 memset_result = memory_set(
1175 &literals_table,
1176 0,
1177 sizeof( libfsapfs_deflate_huffman_table_t ) );
1178
1179 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1180 "memset_result",
1181 memset_result );
1182
1183 result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1184 &literals_table,
1185 &distances_table,
1186 &error );
1187
1188 FSAPFS_TEST_ASSERT_EQUAL_INT(
1189 "result",
1190 result,
1191 1 );
1192
1193 FSAPFS_TEST_ASSERT_IS_NULL(
1194 "error",
1195 error );
1196
1197 /* Test regular cases
1198 */
1199 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
1200 bit_stream.byte_stream_size = 2627;
1201 bit_stream.byte_stream_offset = 2;
1202 bit_stream.bit_buffer = 0;
1203 bit_stream.bit_buffer_size = 0;
1204
1205 value_32bit = 0;
1206
1207 result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1208 &bit_stream,
1209 &literals_table,
1210 &value_32bit,
1211 &error );
1212
1213 FSAPFS_TEST_ASSERT_EQUAL_INT(
1214 "result",
1215 result,
1216 1 );
1217
1218 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1219 "value_32bit",
1220 value_32bit,
1221 (uint32_t) 141 );
1222
1223 FSAPFS_TEST_ASSERT_IS_NULL(
1224 "error",
1225 error );
1226
1227 /* Test error cases
1228 */
1229 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
1230 bit_stream.byte_stream_size = 2627;
1231 bit_stream.byte_stream_offset = 2;
1232 bit_stream.bit_buffer = 0;
1233 bit_stream.bit_buffer_size = 0;
1234
1235 value_32bit = 0;
1236
1237 result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1238 NULL,
1239 &literals_table,
1240 &value_32bit,
1241 &error );
1242
1243 FSAPFS_TEST_ASSERT_EQUAL_INT(
1244 "result",
1245 result,
1246 -1 );
1247
1248 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1249 "error",
1250 error );
1251
1252 libcerror_error_free(
1253 &error );
1254
1255 result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1256 &bit_stream,
1257 NULL,
1258 &value_32bit,
1259 &error );
1260
1261 FSAPFS_TEST_ASSERT_EQUAL_INT(
1262 "result",
1263 result,
1264 -1 );
1265
1266 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1267 "error",
1268 error );
1269
1270 libcerror_error_free(
1271 &error );
1272
1273 result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1274 &bit_stream,
1275 &literals_table,
1276 NULL,
1277 &error );
1278
1279 FSAPFS_TEST_ASSERT_EQUAL_INT(
1280 "result",
1281 result,
1282 -1 );
1283
1284 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1285 "error",
1286 error );
1287
1288 libcerror_error_free(
1289 &error );
1290
1291 bit_stream.byte_stream_offset = 2627;
1292 bit_stream.bit_buffer_size = 0;
1293
1294 result = libfsapfs_deflate_bit_stream_get_huffman_encoded_value(
1295 &bit_stream,
1296 &literals_table,
1297 &value_32bit,
1298 &error );
1299
1300 bit_stream.byte_stream_offset = 2;
1301
1302 FSAPFS_TEST_ASSERT_EQUAL_INT(
1303 "result",
1304 result,
1305 -1 );
1306
1307 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1308 "error",
1309 error );
1310
1311 libcerror_error_free(
1312 &error );
1313
1314 return( 1 );
1315
1316 on_error:
1317 if( error != NULL )
1318 {
1319 libcerror_error_free(
1320 &error );
1321 }
1322 return( 0 );
1323 }
1324
1325 /* Tests the libfsapfs_deflate_initialize_dynamic_huffman_tables function
1326 * Returns 1 if successful or 0 if not
1327 */
fsapfs_test_deflate_initialize_dynamic_huffman_tables(void)1328 int fsapfs_test_deflate_initialize_dynamic_huffman_tables(
1329 void )
1330 {
1331 libfsapfs_deflate_bit_stream_t bit_stream;
1332 libfsapfs_deflate_huffman_table_t distances_table;
1333 libfsapfs_deflate_huffman_table_t literals_table;
1334
1335 libcerror_error_t *error = NULL;
1336 void *memset_result = NULL;
1337 uint32_t value_32bit = 0;
1338 int result = 0;
1339
1340 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1341 int number_of_memset_fail_tests = 6;
1342 int test_number = 0;
1343 #endif
1344
1345 /* Initialize test
1346 */
1347 memset_result = memory_set(
1348 &bit_stream,
1349 0,
1350 sizeof( libfsapfs_deflate_bit_stream_t ) );
1351
1352 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1353 "memset_result",
1354 memset_result );
1355
1356 memset_result = memory_set(
1357 &distances_table,
1358 0,
1359 sizeof( libfsapfs_deflate_huffman_table_t ) );
1360
1361 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1362 "memset_result",
1363 memset_result );
1364
1365 memset_result = memory_set(
1366 &literals_table,
1367 0,
1368 sizeof( libfsapfs_deflate_huffman_table_t ) );
1369
1370 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1371 "memset_result",
1372 memset_result );
1373
1374 /* Test regular cases
1375 */
1376 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
1377 bit_stream.byte_stream_size = 2627;
1378 bit_stream.byte_stream_offset = 2;
1379 bit_stream.bit_buffer = 0;
1380 bit_stream.bit_buffer_size = 0;
1381
1382 result = libfsapfs_deflate_bit_stream_get_value(
1383 &bit_stream,
1384 3,
1385 &value_32bit,
1386 &error );
1387
1388 FSAPFS_TEST_ASSERT_EQUAL_INT(
1389 "result",
1390 result,
1391 1 );
1392
1393 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1394 "value_32bit",
1395 value_32bit,
1396 (uint32_t) 0x00000005UL );
1397
1398 FSAPFS_TEST_ASSERT_IS_NULL(
1399 "error",
1400 error );
1401
1402 result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1403 &bit_stream,
1404 &literals_table,
1405 &distances_table,
1406 &error );
1407
1408 FSAPFS_TEST_ASSERT_EQUAL_INT(
1409 "result",
1410 result,
1411 1 );
1412
1413 FSAPFS_TEST_ASSERT_IS_NULL(
1414 "error",
1415 error );
1416
1417 /* Test error cases
1418 */
1419 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
1420 bit_stream.byte_stream_size = 2627;
1421 bit_stream.byte_stream_offset = 2;
1422 bit_stream.bit_buffer = 0;
1423 bit_stream.bit_buffer_size = 0;
1424
1425 result = libfsapfs_deflate_bit_stream_get_value(
1426 &bit_stream,
1427 3,
1428 &value_32bit,
1429 &error );
1430
1431 FSAPFS_TEST_ASSERT_EQUAL_INT(
1432 "result",
1433 result,
1434 1 );
1435
1436 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1437 "value_32bit",
1438 value_32bit,
1439 (uint32_t) 0x00000005UL );
1440
1441 FSAPFS_TEST_ASSERT_IS_NULL(
1442 "error",
1443 error );
1444
1445 result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1446 NULL,
1447 &literals_table,
1448 &distances_table,
1449 &error );
1450
1451 FSAPFS_TEST_ASSERT_EQUAL_INT(
1452 "result",
1453 result,
1454 -1 );
1455
1456 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1457 "error",
1458 error );
1459
1460 libcerror_error_free(
1461 &error );
1462
1463 result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1464 &bit_stream,
1465 NULL,
1466 &distances_table,
1467 &error );
1468
1469 FSAPFS_TEST_ASSERT_EQUAL_INT(
1470 "result",
1471 result,
1472 -1 );
1473
1474 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1475 "error",
1476 error );
1477
1478 libcerror_error_free(
1479 &error );
1480
1481 result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1482 &bit_stream,
1483 &literals_table,
1484 NULL,
1485 &error );
1486
1487 FSAPFS_TEST_ASSERT_EQUAL_INT(
1488 "result",
1489 result,
1490 -1 );
1491
1492 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1493 "error",
1494 error );
1495
1496 libcerror_error_free(
1497 &error );
1498
1499 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1500
1501 for( test_number = 0;
1502 test_number < number_of_memset_fail_tests;
1503 test_number++ )
1504 {
1505 /* Test libfsapfs_write_io_handle_initialize with memset failing
1506 */
1507 fsapfs_test_memset_attempts_before_fail = test_number;
1508
1509 result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1510 &bit_stream,
1511 &literals_table,
1512 &distances_table,
1513 &error );
1514
1515 if( fsapfs_test_memset_attempts_before_fail != -1 )
1516 {
1517 fsapfs_test_memset_attempts_before_fail = -1;
1518 }
1519 else
1520 {
1521 FSAPFS_TEST_ASSERT_EQUAL_INT(
1522 "result",
1523 result,
1524 -1 );
1525
1526 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1527 "error",
1528 error );
1529
1530 libcerror_error_free(
1531 &error );
1532 }
1533 }
1534 #endif /* defined( HAVE_FSAPFS_TEST_MEMORY ) */
1535
1536 return( 1 );
1537
1538 on_error:
1539 if( error != NULL )
1540 {
1541 libcerror_error_free(
1542 &error );
1543 }
1544 return( 0 );
1545 }
1546
1547 /* Tests the libfsapfs_deflate_initialize_fixed_huffman_tables function
1548 * Returns 1 if successful or 0 if not
1549 */
fsapfs_test_deflate_initialize_fixed_huffman_tables(void)1550 int fsapfs_test_deflate_initialize_fixed_huffman_tables(
1551 void )
1552 {
1553 libfsapfs_deflate_huffman_table_t distances_table;
1554 libfsapfs_deflate_huffman_table_t literals_table;
1555
1556 libcerror_error_t *error = NULL;
1557 void *memset_result = NULL;
1558 int result = 0;
1559
1560 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1561 int number_of_memset_fail_tests = 4;
1562 int test_number = 0;
1563 #endif
1564
1565 /* Initialize test
1566 */
1567 memset_result = memory_set(
1568 &distances_table,
1569 0,
1570 sizeof( libfsapfs_deflate_huffman_table_t ) );
1571
1572 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1573 "memset_result",
1574 memset_result );
1575
1576 memset_result = memory_set(
1577 &literals_table,
1578 0,
1579 sizeof( libfsapfs_deflate_huffman_table_t ) );
1580
1581 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1582 "memset_result",
1583 memset_result );
1584
1585 /* Test regular cases
1586 */
1587 result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1588 &literals_table,
1589 &distances_table,
1590 &error );
1591
1592 FSAPFS_TEST_ASSERT_EQUAL_INT(
1593 "result",
1594 result,
1595 1 );
1596
1597 FSAPFS_TEST_ASSERT_IS_NULL(
1598 "error",
1599 error );
1600
1601 /* Test error cases
1602 */
1603 result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1604 NULL,
1605 &distances_table,
1606 &error );
1607
1608 FSAPFS_TEST_ASSERT_EQUAL_INT(
1609 "result",
1610 result,
1611 -1 );
1612
1613 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1614 "error",
1615 error );
1616
1617 libcerror_error_free(
1618 &error );
1619
1620 result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1621 &literals_table,
1622 NULL,
1623 &error );
1624
1625 FSAPFS_TEST_ASSERT_EQUAL_INT(
1626 "result",
1627 result,
1628 -1 );
1629
1630 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1631 "error",
1632 error );
1633
1634 libcerror_error_free(
1635 &error );
1636
1637 #if defined( HAVE_FSAPFS_TEST_MEMORY )
1638
1639 for( test_number = 0;
1640 test_number < number_of_memset_fail_tests;
1641 test_number++ )
1642 {
1643 /* Test libfsapfs_write_io_handle_initialize with memset failing
1644 */
1645 fsapfs_test_memset_attempts_before_fail = test_number;
1646
1647 result = libfsapfs_deflate_initialize_fixed_huffman_tables(
1648 &literals_table,
1649 &distances_table,
1650 &error );
1651
1652 if( fsapfs_test_memset_attempts_before_fail != -1 )
1653 {
1654 fsapfs_test_memset_attempts_before_fail = -1;
1655 }
1656 else
1657 {
1658 FSAPFS_TEST_ASSERT_EQUAL_INT(
1659 "result",
1660 result,
1661 -1 );
1662
1663 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1664 "error",
1665 error );
1666
1667 libcerror_error_free(
1668 &error );
1669 }
1670 }
1671 #endif /* defined( HAVE_FSAPFS_TEST_MEMORY ) */
1672
1673 return( 1 );
1674
1675 on_error:
1676 if( error != NULL )
1677 {
1678 libcerror_error_free(
1679 &error );
1680 }
1681 return( 0 );
1682 }
1683
1684 /* Tests the libfsapfs_deflate_decode_huffman function
1685 * Returns 1 if successful or 0 if not
1686 */
fsapfs_test_deflate_decode_huffman(void)1687 int fsapfs_test_deflate_decode_huffman(
1688 void )
1689 {
1690 uint8_t uncompressed_data[ 8192 ];
1691
1692 libfsapfs_deflate_bit_stream_t bit_stream;
1693 libfsapfs_deflate_huffman_table_t distances_table;
1694 libfsapfs_deflate_huffman_table_t literals_table;
1695
1696 libcerror_error_t *error = NULL;
1697 void *memset_result = NULL;
1698 size_t uncompressed_data_offset = 0;
1699 uint32_t value_32bit = 0;
1700 int result = 0;
1701
1702 /* Initialize test
1703 */
1704 memset_result = memory_set(
1705 &bit_stream,
1706 0,
1707 sizeof( libfsapfs_deflate_bit_stream_t ) );
1708
1709 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1710 "memset_result",
1711 memset_result );
1712
1713 memset_result = memory_set(
1714 &distances_table,
1715 0,
1716 sizeof( libfsapfs_deflate_huffman_table_t ) );
1717
1718 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1719 "memset_result",
1720 memset_result );
1721
1722 memset_result = memory_set(
1723 &literals_table,
1724 0,
1725 sizeof( libfsapfs_deflate_huffman_table_t ) );
1726
1727 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1728 "memset_result",
1729 memset_result );
1730
1731 /* Test regular cases
1732 */
1733 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
1734 bit_stream.byte_stream_size = 2627;
1735 bit_stream.byte_stream_offset = 2;
1736 bit_stream.bit_buffer = 0;
1737 bit_stream.bit_buffer_size = 0;
1738
1739 result = libfsapfs_deflate_bit_stream_get_value(
1740 &bit_stream,
1741 3,
1742 &value_32bit,
1743 &error );
1744
1745 FSAPFS_TEST_ASSERT_EQUAL_INT(
1746 "result",
1747 result,
1748 1 );
1749
1750 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1751 "value_32bit",
1752 value_32bit,
1753 (uint32_t) 0x00000005UL );
1754
1755 FSAPFS_TEST_ASSERT_IS_NULL(
1756 "error",
1757 error );
1758
1759 result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1760 &bit_stream,
1761 &literals_table,
1762 &distances_table,
1763 &error );
1764
1765 FSAPFS_TEST_ASSERT_EQUAL_INT(
1766 "result",
1767 result,
1768 1 );
1769
1770 FSAPFS_TEST_ASSERT_IS_NULL(
1771 "error",
1772 error );
1773
1774 result = libfsapfs_deflate_decode_huffman(
1775 &bit_stream,
1776 &literals_table,
1777 &distances_table,
1778 uncompressed_data,
1779 8192,
1780 &uncompressed_data_offset,
1781 &error );
1782
1783 FSAPFS_TEST_ASSERT_EQUAL_INT(
1784 "result",
1785 result,
1786 1 );
1787
1788 FSAPFS_TEST_ASSERT_IS_NULL(
1789 "error",
1790 error );
1791
1792 /* Test error cases
1793 */
1794 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
1795 bit_stream.byte_stream_size = 2627;
1796 bit_stream.byte_stream_offset = 2;
1797 bit_stream.bit_buffer = 0;
1798 bit_stream.bit_buffer_size = 0;
1799
1800 result = libfsapfs_deflate_bit_stream_get_value(
1801 &bit_stream,
1802 3,
1803 &value_32bit,
1804 &error );
1805
1806 FSAPFS_TEST_ASSERT_EQUAL_INT(
1807 "result",
1808 result,
1809 1 );
1810
1811 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1812 "value_32bit",
1813 value_32bit,
1814 (uint32_t) 0x00000005UL );
1815
1816 FSAPFS_TEST_ASSERT_IS_NULL(
1817 "error",
1818 error );
1819
1820 result = libfsapfs_deflate_initialize_dynamic_huffman_tables(
1821 &bit_stream,
1822 &literals_table,
1823 &distances_table,
1824 &error );
1825
1826 FSAPFS_TEST_ASSERT_EQUAL_INT(
1827 "result",
1828 result,
1829 1 );
1830
1831 FSAPFS_TEST_ASSERT_IS_NULL(
1832 "error",
1833 error );
1834
1835 result = libfsapfs_deflate_decode_huffman(
1836 NULL,
1837 &literals_table,
1838 &distances_table,
1839 uncompressed_data,
1840 8192,
1841 &uncompressed_data_offset,
1842 &error );
1843
1844 FSAPFS_TEST_ASSERT_EQUAL_INT(
1845 "result",
1846 result,
1847 -1 );
1848
1849 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1850 "error",
1851 error );
1852
1853 libcerror_error_free(
1854 &error );
1855
1856 result = libfsapfs_deflate_decode_huffman(
1857 &bit_stream,
1858 NULL,
1859 &distances_table,
1860 uncompressed_data,
1861 8192,
1862 &uncompressed_data_offset,
1863 &error );
1864
1865 FSAPFS_TEST_ASSERT_EQUAL_INT(
1866 "result",
1867 result,
1868 -1 );
1869
1870 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1871 "error",
1872 error );
1873
1874 libcerror_error_free(
1875 &error );
1876
1877 result = libfsapfs_deflate_decode_huffman(
1878 &bit_stream,
1879 &literals_table,
1880 NULL,
1881 uncompressed_data,
1882 8192,
1883 &uncompressed_data_offset,
1884 &error );
1885
1886 FSAPFS_TEST_ASSERT_EQUAL_INT(
1887 "result",
1888 result,
1889 -1 );
1890
1891 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1892 "error",
1893 error );
1894
1895 libcerror_error_free(
1896 &error );
1897
1898 result = libfsapfs_deflate_decode_huffman(
1899 &bit_stream,
1900 &literals_table,
1901 &distances_table,
1902 NULL,
1903 8192,
1904 &uncompressed_data_offset,
1905 &error );
1906
1907 FSAPFS_TEST_ASSERT_EQUAL_INT(
1908 "result",
1909 result,
1910 -1 );
1911
1912 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1913 "error",
1914 error );
1915
1916 libcerror_error_free(
1917 &error );
1918
1919 result = libfsapfs_deflate_decode_huffman(
1920 &bit_stream,
1921 &literals_table,
1922 &distances_table,
1923 uncompressed_data,
1924 (size_t) SSIZE_MAX + 1,
1925 &uncompressed_data_offset,
1926 &error );
1927
1928 FSAPFS_TEST_ASSERT_EQUAL_INT(
1929 "result",
1930 result,
1931 -1 );
1932
1933 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1934 "error",
1935 error );
1936
1937 libcerror_error_free(
1938 &error );
1939
1940 result = libfsapfs_deflate_decode_huffman(
1941 &bit_stream,
1942 &literals_table,
1943 &distances_table,
1944 uncompressed_data,
1945 8192,
1946 NULL,
1947 &error );
1948
1949 FSAPFS_TEST_ASSERT_EQUAL_INT(
1950 "result",
1951 result,
1952 -1 );
1953
1954 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
1955 "error",
1956 error );
1957
1958 libcerror_error_free(
1959 &error );
1960
1961 return( 1 );
1962
1963 on_error:
1964 if( error != NULL )
1965 {
1966 libcerror_error_free(
1967 &error );
1968 }
1969 return( 0 );
1970 }
1971
1972 /* Tests the libfsapfs_deflate_calculate_adler32 function
1973 * Returns 1 if successful or 0 if not
1974 */
fsapfs_test_deflate_calculate_adler32(void)1975 int fsapfs_test_deflate_calculate_adler32(
1976 void )
1977 {
1978 libcerror_error_t *error = NULL;
1979 uint32_t checksum = 0;
1980 int result = 0;
1981
1982 /* Test regular cases
1983 */
1984 result = libfsapfs_deflate_calculate_adler32(
1985 &checksum,
1986 fsapfs_test_deflate_uncompressed_byte_stream,
1987 7640,
1988 1,
1989 &error );
1990
1991 FSAPFS_TEST_ASSERT_EQUAL_INT(
1992 "result",
1993 result,
1994 1 );
1995
1996 FSAPFS_TEST_ASSERT_EQUAL_UINT32(
1997 "checksum",
1998 checksum,
1999 (uint32_t) 0x304a56a4UL );
2000
2001 FSAPFS_TEST_ASSERT_IS_NULL(
2002 "error",
2003 error );
2004
2005 /* Test error cases
2006 */
2007 result = libfsapfs_deflate_calculate_adler32(
2008 NULL,
2009 fsapfs_test_deflate_uncompressed_byte_stream,
2010 7640,
2011 1,
2012 &error );
2013
2014 FSAPFS_TEST_ASSERT_EQUAL_INT(
2015 "result",
2016 result,
2017 -1 );
2018
2019 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2020 "error",
2021 error );
2022
2023 libcerror_error_free(
2024 &error );
2025
2026 result = libfsapfs_deflate_calculate_adler32(
2027 &checksum,
2028 NULL,
2029 7640,
2030 1,
2031 &error );
2032
2033 FSAPFS_TEST_ASSERT_EQUAL_INT(
2034 "result",
2035 result,
2036 -1 );
2037
2038 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2039 "error",
2040 error );
2041
2042 libcerror_error_free(
2043 &error );
2044
2045 result = libfsapfs_deflate_calculate_adler32(
2046 &checksum,
2047 fsapfs_test_deflate_uncompressed_byte_stream,
2048 (size_t) SSIZE_MAX + 1,
2049 1,
2050 &error );
2051
2052 FSAPFS_TEST_ASSERT_EQUAL_INT(
2053 "result",
2054 result,
2055 -1 );
2056
2057 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2058 "error",
2059 error );
2060
2061 libcerror_error_free(
2062 &error );
2063
2064 return( 1 );
2065
2066 on_error:
2067 if( error != NULL )
2068 {
2069 libcerror_error_free(
2070 &error );
2071 }
2072 return( 0 );
2073 }
2074
2075 /* Tests the libfsapfs_deflate_read_data_header function
2076 * Returns 1 if successful or 0 if not
2077 */
fsapfs_test_deflate_read_data_header(void)2078 int fsapfs_test_deflate_read_data_header(
2079 void )
2080 {
2081 libcerror_error_t *error = NULL;
2082 size_t uncompressed_data_offset = 0;
2083 int result = 0;
2084
2085 /* Test regular cases
2086 */
2087 uncompressed_data_offset = 0;
2088
2089 result = libfsapfs_deflate_read_data_header(
2090 fsapfs_test_deflate_compressed_byte_stream,
2091 2627,
2092 &uncompressed_data_offset,
2093 &error );
2094
2095 FSAPFS_TEST_ASSERT_EQUAL_INT(
2096 "result",
2097 result,
2098 1 );
2099
2100 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2101 "uncompressed_data_offset",
2102 uncompressed_data_offset,
2103 (size_t) 2 );
2104
2105 FSAPFS_TEST_ASSERT_IS_NULL(
2106 "error",
2107 error );
2108
2109 /* Test error cases
2110 */
2111 uncompressed_data_offset = 0;
2112
2113 result = libfsapfs_deflate_read_data_header(
2114 NULL,
2115 2627,
2116 &uncompressed_data_offset,
2117 &error );
2118
2119 FSAPFS_TEST_ASSERT_EQUAL_INT(
2120 "result",
2121 result,
2122 -1 );
2123
2124 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2125 "error",
2126 error );
2127
2128 libcerror_error_free(
2129 &error );
2130
2131 result = libfsapfs_deflate_read_data_header(
2132 fsapfs_test_deflate_compressed_byte_stream,
2133 (size_t) SSIZE_MAX + 1,
2134 &uncompressed_data_offset,
2135 &error );
2136
2137 FSAPFS_TEST_ASSERT_EQUAL_INT(
2138 "result",
2139 result,
2140 -1 );
2141
2142 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2143 "error",
2144 error );
2145
2146 libcerror_error_free(
2147 &error );
2148
2149 result = libfsapfs_deflate_read_data_header(
2150 fsapfs_test_deflate_compressed_byte_stream,
2151 2627,
2152 NULL,
2153 &error );
2154
2155 FSAPFS_TEST_ASSERT_EQUAL_INT(
2156 "result",
2157 result,
2158 -1 );
2159
2160 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2161 "error",
2162 error );
2163
2164 libcerror_error_free(
2165 &error );
2166
2167 result = libfsapfs_deflate_read_data_header(
2168 fsapfs_test_deflate_compressed_byte_stream,
2169 1,
2170 &uncompressed_data_offset,
2171 &error );
2172
2173 FSAPFS_TEST_ASSERT_EQUAL_INT(
2174 "result",
2175 result,
2176 -1 );
2177
2178 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2179 "error",
2180 error );
2181
2182 libcerror_error_free(
2183 &error );
2184
2185 /* TODO test compression_method != 8 */
2186 /* TODO test compression_window_size > 32768 */
2187
2188 return( 1 );
2189
2190 on_error:
2191 if( error != NULL )
2192 {
2193 libcerror_error_free(
2194 &error );
2195 }
2196 return( 0 );
2197 }
2198
2199 /* Tests the libfsapfs_deflate_read_block function
2200 * Returns 1 if successful or 0 if not
2201 */
fsapfs_test_deflate_read_block(void)2202 int fsapfs_test_deflate_read_block(
2203 void )
2204 {
2205 uint8_t uncompressed_data[ 8192 ];
2206
2207 libfsapfs_deflate_bit_stream_t bit_stream;
2208
2209 libcerror_error_t *error = NULL;
2210 void *memset_result = NULL;
2211 size_t uncompressed_data_offset = 0;
2212 size_t uncompressed_data_size = 7640;
2213 uint8_t last_block_flag = 0;
2214 int result = 0;
2215
2216 /* Initialize test
2217 */
2218 memset_result = memory_set(
2219 &bit_stream,
2220 0,
2221 sizeof( libfsapfs_deflate_bit_stream_t ) );
2222
2223 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2224 "memset_result",
2225 memset_result );
2226
2227 /* Test regular cases
2228 */
2229 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
2230 bit_stream.byte_stream_size = 2627;
2231 bit_stream.byte_stream_offset = 2;
2232 bit_stream.bit_buffer = 0;
2233 bit_stream.bit_buffer_size = 0;
2234
2235 result = libfsapfs_deflate_read_block(
2236 &bit_stream,
2237 uncompressed_data,
2238 uncompressed_data_size,
2239 &uncompressed_data_offset,
2240 &last_block_flag,
2241 &error );
2242
2243 FSAPFS_TEST_ASSERT_EQUAL_INT(
2244 "result",
2245 result,
2246 1 );
2247
2248 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2249 "uncompressed_data_size",
2250 uncompressed_data_size,
2251 (size_t) 7640 );
2252
2253 FSAPFS_TEST_ASSERT_IS_NULL(
2254 "error",
2255 error );
2256
2257 /* TODO: test uncompressed data too small */
2258
2259 /* Test error cases
2260 */
2261 bit_stream.byte_stream = fsapfs_test_deflate_compressed_byte_stream;
2262 bit_stream.byte_stream_size = 2627;
2263 bit_stream.byte_stream_offset = 2;
2264 bit_stream.bit_buffer = 0;
2265 bit_stream.bit_buffer_size = 0;
2266
2267 result = libfsapfs_deflate_read_block(
2268 NULL,
2269 uncompressed_data,
2270 uncompressed_data_size,
2271 &uncompressed_data_offset,
2272 &last_block_flag,
2273 &error );
2274
2275 FSAPFS_TEST_ASSERT_EQUAL_INT(
2276 "result",
2277 result,
2278 -1 );
2279
2280 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2281 "error",
2282 error );
2283
2284 libcerror_error_free(
2285 &error );
2286
2287 result = libfsapfs_deflate_read_block(
2288 &bit_stream,
2289 NULL,
2290 uncompressed_data_size,
2291 &uncompressed_data_offset,
2292 &last_block_flag,
2293 &error );
2294
2295 FSAPFS_TEST_ASSERT_EQUAL_INT(
2296 "result",
2297 result,
2298 -1 );
2299
2300 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2301 "error",
2302 error );
2303
2304 libcerror_error_free(
2305 &error );
2306
2307 result = libfsapfs_deflate_read_block(
2308 &bit_stream,
2309 uncompressed_data,
2310 (size_t) SSIZE_MAX + 1,
2311 &uncompressed_data_offset,
2312 &last_block_flag,
2313 &error );
2314
2315 FSAPFS_TEST_ASSERT_EQUAL_INT(
2316 "result",
2317 result,
2318 -1 );
2319
2320 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2321 "error",
2322 error );
2323
2324 libcerror_error_free(
2325 &error );
2326
2327 result = libfsapfs_deflate_read_block(
2328 &bit_stream,
2329 uncompressed_data,
2330 uncompressed_data_size,
2331 NULL,
2332 &last_block_flag,
2333 &error );
2334
2335 FSAPFS_TEST_ASSERT_EQUAL_INT(
2336 "result",
2337 result,
2338 -1 );
2339
2340 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2341 "error",
2342 error );
2343
2344 libcerror_error_free(
2345 &error );
2346
2347 result = libfsapfs_deflate_read_block(
2348 &bit_stream,
2349 uncompressed_data,
2350 uncompressed_data_size,
2351 &uncompressed_data_offset,
2352 NULL,
2353 &error );
2354
2355 FSAPFS_TEST_ASSERT_EQUAL_INT(
2356 "result",
2357 result,
2358 -1 );
2359
2360 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2361 "error",
2362 error );
2363
2364 libcerror_error_free(
2365 &error );
2366
2367 return( 1 );
2368
2369 on_error:
2370 if( error != NULL )
2371 {
2372 libcerror_error_free(
2373 &error );
2374 }
2375 return( 0 );
2376 }
2377
2378 /* Tests the libfsapfs_deflate_decompress function
2379 * Returns 1 if successful or 0 if not
2380 */
fsapfs_test_deflate_decompress(void)2381 int fsapfs_test_deflate_decompress(
2382 void )
2383 {
2384 uint8_t uncompressed_data[ 8192 ];
2385
2386 libcerror_error_t *error = NULL;
2387 size_t uncompressed_data_size = 7640;
2388 int result = 0;
2389
2390 /* Test regular cases
2391 */
2392 result = libfsapfs_deflate_decompress(
2393 &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2394 2627 - 6,
2395 uncompressed_data,
2396 &uncompressed_data_size,
2397 &error );
2398
2399 FSAPFS_TEST_ASSERT_EQUAL_INT(
2400 "result",
2401 result,
2402 1 );
2403
2404 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2405 "uncompressed_data_size",
2406 uncompressed_data_size,
2407 (size_t) 7640 );
2408
2409 FSAPFS_TEST_ASSERT_IS_NULL(
2410 "error",
2411 error );
2412
2413 /* TODO: test uncompressed data too small */
2414
2415 /* Test error cases
2416 */
2417 result = libfsapfs_deflate_decompress(
2418 NULL,
2419 2627 - 6,
2420 uncompressed_data,
2421 &uncompressed_data_size,
2422 &error );
2423
2424 FSAPFS_TEST_ASSERT_EQUAL_INT(
2425 "result",
2426 result,
2427 -1 );
2428
2429 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2430 "error",
2431 error );
2432
2433 libcerror_error_free(
2434 &error );
2435
2436 result = libfsapfs_deflate_decompress(
2437 &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2438 (size_t) SSIZE_MAX + 1,
2439 uncompressed_data,
2440 &uncompressed_data_size,
2441 &error );
2442
2443 FSAPFS_TEST_ASSERT_EQUAL_INT(
2444 "result",
2445 result,
2446 -1 );
2447
2448 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2449 "error",
2450 error );
2451
2452 libcerror_error_free(
2453 &error );
2454
2455 result = libfsapfs_deflate_decompress(
2456 &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2457 2627 - 6,
2458 NULL,
2459 &uncompressed_data_size,
2460 &error );
2461
2462 FSAPFS_TEST_ASSERT_EQUAL_INT(
2463 "result",
2464 result,
2465 -1 );
2466
2467 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2468 "error",
2469 error );
2470
2471 libcerror_error_free(
2472 &error );
2473
2474 result = libfsapfs_deflate_decompress(
2475 &( fsapfs_test_deflate_compressed_byte_stream[ 2 ] ),
2476 2627 - 6,
2477 uncompressed_data,
2478 NULL,
2479 &error );
2480
2481 FSAPFS_TEST_ASSERT_EQUAL_INT(
2482 "result",
2483 result,
2484 -1 );
2485
2486 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2487 "error",
2488 error );
2489
2490 libcerror_error_free(
2491 &error );
2492
2493 return( 1 );
2494
2495 on_error:
2496 if( error != NULL )
2497 {
2498 libcerror_error_free(
2499 &error );
2500 }
2501 return( 0 );
2502 }
2503
2504 /* Tests the libfsapfs_deflate_decompress_zlib function
2505 * Returns 1 if successful or 0 if not
2506 */
fsapfs_test_deflate_decompress_zlib(void)2507 int fsapfs_test_deflate_decompress_zlib(
2508 void )
2509 {
2510 uint8_t uncompressed_data[ 8192 ];
2511
2512 libcerror_error_t *error = NULL;
2513 size_t uncompressed_data_size = 7640;
2514 int result = 0;
2515
2516 /* Test regular cases
2517 */
2518 result = libfsapfs_deflate_decompress_zlib(
2519 fsapfs_test_deflate_compressed_byte_stream,
2520 2627,
2521 uncompressed_data,
2522 &uncompressed_data_size,
2523 &error );
2524
2525 FSAPFS_TEST_ASSERT_EQUAL_INT(
2526 "result",
2527 result,
2528 1 );
2529
2530 FSAPFS_TEST_ASSERT_EQUAL_SIZE(
2531 "uncompressed_data_size",
2532 uncompressed_data_size,
2533 (size_t) 7640 );
2534
2535 FSAPFS_TEST_ASSERT_IS_NULL(
2536 "error",
2537 error );
2538
2539 /* TODO: test uncompressed data too small */
2540
2541 /* Test error cases
2542 */
2543 result = libfsapfs_deflate_decompress_zlib(
2544 NULL,
2545 2627,
2546 uncompressed_data,
2547 &uncompressed_data_size,
2548 &error );
2549
2550 FSAPFS_TEST_ASSERT_EQUAL_INT(
2551 "result",
2552 result,
2553 -1 );
2554
2555 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2556 "error",
2557 error );
2558
2559 libcerror_error_free(
2560 &error );
2561
2562 result = libfsapfs_deflate_decompress_zlib(
2563 fsapfs_test_deflate_compressed_byte_stream,
2564 (size_t) SSIZE_MAX + 1,
2565 uncompressed_data,
2566 &uncompressed_data_size,
2567 &error );
2568
2569 FSAPFS_TEST_ASSERT_EQUAL_INT(
2570 "result",
2571 result,
2572 -1 );
2573
2574 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2575 "error",
2576 error );
2577
2578 libcerror_error_free(
2579 &error );
2580
2581 result = libfsapfs_deflate_decompress_zlib(
2582 fsapfs_test_deflate_compressed_byte_stream,
2583 2627,
2584 NULL,
2585 &uncompressed_data_size,
2586 &error );
2587
2588 FSAPFS_TEST_ASSERT_EQUAL_INT(
2589 "result",
2590 result,
2591 -1 );
2592
2593 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2594 "error",
2595 error );
2596
2597 libcerror_error_free(
2598 &error );
2599
2600 result = libfsapfs_deflate_decompress_zlib(
2601 fsapfs_test_deflate_compressed_byte_stream,
2602 2627,
2603 uncompressed_data,
2604 NULL,
2605 &error );
2606
2607 FSAPFS_TEST_ASSERT_EQUAL_INT(
2608 "result",
2609 result,
2610 -1 );
2611
2612 FSAPFS_TEST_ASSERT_IS_NOT_NULL(
2613 "error",
2614 error );
2615
2616 libcerror_error_free(
2617 &error );
2618
2619 return( 1 );
2620
2621 on_error:
2622 if( error != NULL )
2623 {
2624 libcerror_error_free(
2625 &error );
2626 }
2627 return( 0 );
2628 }
2629
2630 #endif /* defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT ) */
2631
2632 /* The main program
2633 */
2634 #if defined( HAVE_WIDE_SYSTEM_CHARACTER )
wmain(int argc FSAPFS_TEST_ATTRIBUTE_UNUSED,wchar_t * const argv[]FSAPFS_TEST_ATTRIBUTE_UNUSED)2635 int wmain(
2636 int argc FSAPFS_TEST_ATTRIBUTE_UNUSED,
2637 wchar_t * const argv[] FSAPFS_TEST_ATTRIBUTE_UNUSED )
2638 #else
2639 int main(
2640 int argc FSAPFS_TEST_ATTRIBUTE_UNUSED,
2641 char * const argv[] FSAPFS_TEST_ATTRIBUTE_UNUSED )
2642 #endif
2643 {
2644 FSAPFS_TEST_UNREFERENCED_PARAMETER( argc )
2645 FSAPFS_TEST_UNREFERENCED_PARAMETER( argv )
2646
2647 #if defined( HAVE_DEBUG_OUTPUT ) && defined( FSAPFS_TEST_DEFLATE )
2648 libcnotify_verbose_set(
2649 1 );
2650 libcnotify_stream_set(
2651 stderr,
2652 NULL );
2653 #endif
2654
2655 #if defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT )
2656
2657 FSAPFS_TEST_RUN(
2658 "libfsapfs_deflate_bit_stream_get_value",
2659 fsapfs_test_deflate_bit_stream_get_value );
2660
2661 FSAPFS_TEST_RUN(
2662 "libfsapfs_deflate_huffman_table_construct",
2663 fsapfs_test_deflate_huffman_table_construct );
2664
2665 FSAPFS_TEST_RUN(
2666 "libfsapfs_deflate_bit_stream_get_huffman_encoded_value",
2667 fsapfs_test_deflate_bit_stream_get_huffman_encoded_value );
2668
2669 FSAPFS_TEST_RUN(
2670 "libfsapfs_deflate_initialize_dynamic_huffman_tables",
2671 fsapfs_test_deflate_initialize_dynamic_huffman_tables );
2672
2673 FSAPFS_TEST_RUN(
2674 "libfsapfs_deflate_initialize_fixed_huffman_tables",
2675 fsapfs_test_deflate_initialize_fixed_huffman_tables );
2676
2677 FSAPFS_TEST_RUN(
2678 "libfsapfs_deflate_decode_huffman",
2679 fsapfs_test_deflate_decode_huffman );
2680
2681 FSAPFS_TEST_RUN(
2682 "libfsapfs_deflate_calculate_adler32",
2683 fsapfs_test_deflate_calculate_adler32 );
2684
2685 FSAPFS_TEST_RUN(
2686 "libfsapfs_deflate_read_data_header",
2687 fsapfs_test_deflate_read_data_header );
2688
2689 FSAPFS_TEST_RUN(
2690 "libfsapfs_deflate_read_block",
2691 fsapfs_test_deflate_read_block );
2692
2693 FSAPFS_TEST_RUN(
2694 "libfsapfs_deflate_decompress",
2695 fsapfs_test_deflate_decompress );
2696
2697 FSAPFS_TEST_RUN(
2698 "libfsapfs_deflate_decompress_zlib",
2699 fsapfs_test_deflate_decompress_zlib );
2700
2701 #endif /* defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT ) */
2702
2703 return( EXIT_SUCCESS );
2704
2705 #if defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT )
2706
2707 on_error:
2708 return( EXIT_FAILURE );
2709
2710 #endif /* defined( __GNUC__ ) && !defined( LIBFSAPFS_DLL_IMPORT ) */
2711 }
2712
2713