Commit 071f1bdea14ebc98f4b2c00d4afa44bfd589b9fb

Authored by Ji Luo
1 parent 36a06d13e2

MA-17046-1 Show orange warning for unlocked device

According to the google boot flow, an orange warning should
be displayed on UNLOCKED device to reminder the users of the
potential risks.

This commit will show an orange warning logo and warning text
on the screen, it shall be dismissed after 3 seconds, users
can also skip it by pressing the ON-OFF button.

Config 'CONFIG_AVB_WARNING_LOGO_COLS' and 'CONFIG_AVB_WARNING_LOGO_ROWS'
define the (x, y) position of the warning logo, its default
value is for 1080*720 resolution display and can be overridden.

Test: Orange warning logo show on all imx8m/imx8q platfroms.

Change-Id: I607edb3da039b47ddfac681f855834d8da187af8
Signed-off-by: Ji Luo <ji.luo@nxp.com>

Showing 7 changed files with 1192 additions and 0 deletions Inline Diff

drivers/fastboot/fb_fsl/fastboot_lock_unlock.c
1 // SPDX-License-Identifier: GPL-2.0+ 1 // SPDX-License-Identifier: GPL-2.0+
2 /* 2 /*
3 * Copyright (c) 2016, Freescale Semiconductor, Inc. 3 * Copyright (c) 2016, Freescale Semiconductor, Inc.
4 */ 4 */
5 #include <common.h> 5 #include <common.h>
6 #include <mapmem.h> 6 #include <mapmem.h>
7 #include <linux/types.h> 7 #include <linux/types.h>
8 #include <part.h> 8 #include <part.h>
9 #include <mmc.h> 9 #include <mmc.h>
10 #include <ext_common.h> 10 #include <ext_common.h>
11 #include <stdio_dev.h> 11 #include <stdio_dev.h>
12 #include <stdlib.h> 12 #include <stdlib.h>
13 #include "fastboot_lock_unlock.h" 13 #include "fastboot_lock_unlock.h"
14 #include <fb_fsl.h> 14 #include <fb_fsl.h>
15 #include <memalign.h> 15 #include <memalign.h>
16 #include <asm/mach-imx/sys_proto.h> 16 #include <asm/mach-imx/sys_proto.h>
17 #ifdef CONFIG_IMX_TRUSTY_OS 17 #ifdef CONFIG_IMX_TRUSTY_OS
18 #include <trusty/libtipc.h> 18 #include <trusty/libtipc.h>
19 #include <asm/mach-imx/hab.h> 19 #include <asm/mach-imx/hab.h>
20 #endif 20 #endif
21 21
22 #ifdef FASTBOOT_ENCRYPT_LOCK 22 #ifdef FASTBOOT_ENCRYPT_LOCK
23 23
24 #include <hash.h> 24 #include <hash.h>
25 #include <fsl_caam.h> 25 #include <fsl_caam.h>
26 26
27 //Encrypted data is 80bytes length. 27 //Encrypted data is 80bytes length.
28 #define ENDATA_LEN 80 28 #define ENDATA_LEN 80
29 29
30 #endif 30 #endif
31 31
32 #ifdef CONFIG_AVB_WARNING_LOGO
33 #include "lcd.h"
34 #include "video.h"
35 #include "dm/uclass.h"
36 #include "fsl_avb_logo.h"
37 #include "video_link.h"
38 #include "video_console.h"
39 #include "video_font_data.h"
40 #endif
41
32 int fastboot_flash_find_index(const char *name); 42 int fastboot_flash_find_index(const char *name);
33 43
34 #if defined(CONFIG_IMX_TRUSTY_OS) && !defined(CONFIG_ARM64) 44 #if defined(CONFIG_IMX_TRUSTY_OS) && !defined(CONFIG_ARM64)
35 #define IVT_HEADER_MAGIC 0xD1 45 #define IVT_HEADER_MAGIC 0xD1
36 #define IVT_HDR_LEN 0x20 46 #define IVT_HDR_LEN 0x20
37 #define HAB_MAJ_VER 0x40 47 #define HAB_MAJ_VER 0x40
38 #define HAB_MAJ_MASK 0xF0 48 #define HAB_MAJ_MASK 0xF0
39 49
40 bool tos_flashed; 50 bool tos_flashed;
41 51
42 static bool tos_ivt_check(ulong start_addr, int ivt_offset) { 52 static bool tos_ivt_check(ulong start_addr, int ivt_offset) {
43 const struct ivt *ivt_initial = NULL; 53 const struct ivt *ivt_initial = NULL;
44 const uint8_t *start = (const uint8_t *)start_addr; 54 const uint8_t *start = (const uint8_t *)start_addr;
45 55
46 if (start_addr & 0x3) { 56 if (start_addr & 0x3) {
47 puts("Error: tos's start address is not 4 byte aligned\n"); 57 puts("Error: tos's start address is not 4 byte aligned\n");
48 return false; 58 return false;
49 } 59 }
50 60
51 ivt_initial = (const struct ivt *)(start + ivt_offset); 61 ivt_initial = (const struct ivt *)(start + ivt_offset);
52 62
53 const struct ivt_header *ivt_hdr = &ivt_initial->hdr; 63 const struct ivt_header *ivt_hdr = &ivt_initial->hdr;
54 64
55 if ((ivt_hdr->magic == IVT_HEADER_MAGIC && \ 65 if ((ivt_hdr->magic == IVT_HEADER_MAGIC && \
56 (be16_to_cpu(ivt_hdr->length) == IVT_HDR_LEN) && \ 66 (be16_to_cpu(ivt_hdr->length) == IVT_HDR_LEN) && \
57 (ivt_hdr->version & HAB_MAJ_MASK) == HAB_MAJ_VER) && \ 67 (ivt_hdr->version & HAB_MAJ_MASK) == HAB_MAJ_VER) && \
58 (ivt_initial->entry != 0x0) && \ 68 (ivt_initial->entry != 0x0) && \
59 (ivt_initial->reserved1 == 0x0) && \ 69 (ivt_initial->reserved1 == 0x0) && \
60 (ivt_initial->self == (uint32_t)ivt_initial) && \ 70 (ivt_initial->self == (uint32_t)ivt_initial) && \
61 (ivt_initial->csf != 0x0) && \ 71 (ivt_initial->csf != 0x0) && \
62 (ivt_initial->reserved2 == 0x0)) { 72 (ivt_initial->reserved2 == 0x0)) {
63 if (ivt_initial->dcd != 0x0) 73 if (ivt_initial->dcd != 0x0)
64 return false; 74 return false;
65 else 75 else
66 return true; 76 return true;
67 } 77 }
68 78
69 return false; 79 return false;
70 } 80 }
71 81
72 bool valid_tos() { 82 bool valid_tos() {
73 /* 83 /*
74 * If enabled SECURE_BOOT then use HAB to verify tos. 84 * If enabled SECURE_BOOT then use HAB to verify tos.
75 * Or check the IVT only. 85 * Or check the IVT only.
76 */ 86 */
77 bool valid = false; 87 bool valid = false;
78 #ifdef CONFIG_IMX_HAB 88 #ifdef CONFIG_IMX_HAB
79 if (is_hab_enabled()) { 89 if (is_hab_enabled()) {
80 valid = authenticate_image(TRUSTY_OS_ENTRY, TRUSTY_OS_PADDED_SZ); 90 valid = authenticate_image(TRUSTY_OS_ENTRY, TRUSTY_OS_PADDED_SZ);
81 } else 91 } else
82 #endif 92 #endif
83 valid = tos_ivt_check(TRUSTY_OS_ENTRY, TRUSTY_OS_PADDED_SZ); 93 valid = tos_ivt_check(TRUSTY_OS_ENTRY, TRUSTY_OS_PADDED_SZ);
84 94
85 if (valid) { 95 if (valid) {
86 tos_flashed = true; 96 tos_flashed = true;
87 return true; 97 return true;
88 } else { 98 } else {
89 tos_flashed = false; 99 tos_flashed = false;
90 return false; 100 return false;
91 } 101 }
92 } 102 }
93 103
94 #endif 104 #endif
95 105
96 #if !defined(FASTBOOT_ENCRYPT_LOCK) || defined(NON_SECURE_FASTBOOT) 106 #if !defined(FASTBOOT_ENCRYPT_LOCK) || defined(NON_SECURE_FASTBOOT)
97 107
98 /* 108 /*
99 * This will return FASTBOOT_LOCK, FASTBOOT_UNLOCK or FASTBOOT_ERROR 109 * This will return FASTBOOT_LOCK, FASTBOOT_UNLOCK or FASTBOOT_ERROR
100 */ 110 */
101 #ifndef CONFIG_IMX_TRUSTY_OS 111 #ifndef CONFIG_IMX_TRUSTY_OS
102 static FbLockState decrypt_lock_store(unsigned char* bdata) { 112 static FbLockState decrypt_lock_store(unsigned char* bdata) {
103 if (!strncmp((const char *)bdata, "locked", strlen("locked"))) 113 if (!strncmp((const char *)bdata, "locked", strlen("locked")))
104 return FASTBOOT_LOCK; 114 return FASTBOOT_LOCK;
105 else if (!strncmp((const char *)bdata, "unlocked", strlen("unlocked"))) 115 else if (!strncmp((const char *)bdata, "unlocked", strlen("unlocked")))
106 return FASTBOOT_UNLOCK; 116 return FASTBOOT_UNLOCK;
107 else 117 else
108 return FASTBOOT_LOCK_ERROR; 118 return FASTBOOT_LOCK_ERROR;
109 } 119 }
110 static inline int encrypt_lock_store(FbLockState lock, unsigned char* bdata) { 120 static inline int encrypt_lock_store(FbLockState lock, unsigned char* bdata) {
111 if (FASTBOOT_LOCK == lock) 121 if (FASTBOOT_LOCK == lock)
112 strncpy((char *)bdata, "locked", strlen("locked")); 122 strncpy((char *)bdata, "locked", strlen("locked"));
113 else if (FASTBOOT_UNLOCK == lock) 123 else if (FASTBOOT_UNLOCK == lock)
114 strncpy((char *)bdata, "unlocked", strlen("unlocked")); 124 strncpy((char *)bdata, "unlocked", strlen("unlocked"));
115 else 125 else
116 return -1; 126 return -1;
117 return 0; 127 return 0;
118 } 128 }
119 #endif 129 #endif
120 #else 130 #else
121 131
122 static int sha1sum(unsigned char* data, int len, unsigned char* output) { 132 static int sha1sum(unsigned char* data, int len, unsigned char* output) {
123 struct hash_algo *algo; 133 struct hash_algo *algo;
124 void *buf; 134 void *buf;
125 if (hash_lookup_algo("sha1", &algo)) { 135 if (hash_lookup_algo("sha1", &algo)) {
126 printf("error in lookup sha1 algo!\n"); 136 printf("error in lookup sha1 algo!\n");
127 return -1; 137 return -1;
128 } 138 }
129 buf = map_sysmem((ulong)data, len); 139 buf = map_sysmem((ulong)data, len);
130 algo->hash_func_ws(buf, len, output, algo->chunk_size); 140 algo->hash_func_ws(buf, len, output, algo->chunk_size);
131 unmap_sysmem(buf); 141 unmap_sysmem(buf);
132 142
133 return algo->digest_size; 143 return algo->digest_size;
134 144
135 } 145 }
136 146
137 static int generate_salt(unsigned char* salt) { 147 static int generate_salt(unsigned char* salt) {
138 unsigned long time = get_timer(0); 148 unsigned long time = get_timer(0);
139 return sha1sum((unsigned char *)&time, sizeof(unsigned long), salt); 149 return sha1sum((unsigned char *)&time, sizeof(unsigned long), salt);
140 150
141 } 151 }
142 152
143 static FbLockState decrypt_lock_store(unsigned char *bdata) { 153 static FbLockState decrypt_lock_store(unsigned char *bdata) {
144 int p = 0, ret; 154 int p = 0, ret;
145 ALLOC_CACHE_ALIGN_BUFFER(uint8_t, plain_data, ENDATA_LEN); 155 ALLOC_CACHE_ALIGN_BUFFER(uint8_t, plain_data, ENDATA_LEN);
146 156
147 caam_open(); 157 caam_open();
148 ret = caam_decap_blob((uint32_t)(ulong)plain_data, 158 ret = caam_decap_blob((uint32_t)(ulong)plain_data,
149 (uint32_t)(ulong)bdata + ROUND(ENDATA_LEN, ARCH_DMA_MINALIGN), 159 (uint32_t)(ulong)bdata + ROUND(ENDATA_LEN, ARCH_DMA_MINALIGN),
150 ENDATA_LEN); 160 ENDATA_LEN);
151 if (ret != 0) { 161 if (ret != 0) {
152 printf("Error during blob decap operation: 0x%x\n",ret); 162 printf("Error during blob decap operation: 0x%x\n",ret);
153 return FASTBOOT_LOCK_ERROR; 163 return FASTBOOT_LOCK_ERROR;
154 } 164 }
155 #ifdef FASTBOOT_LOCK_DEBUG 165 #ifdef FASTBOOT_LOCK_DEBUG
156 FB_DEBUG("Decrypt data block are:\n \t=======\t\n"); 166 FB_DEBUG("Decrypt data block are:\n \t=======\t\n");
157 for (p = 0; p < ENDATA_LEN; p++) { 167 for (p = 0; p < ENDATA_LEN; p++) {
158 FB_DEBUG("0x%2x ", *(bdata + p)); 168 FB_DEBUG("0x%2x ", *(bdata + p));
159 if (p % 16 == 0) 169 if (p % 16 == 0)
160 FB_DEBUG("\n"); 170 FB_DEBUG("\n");
161 } 171 }
162 FB_DEBUG("\n \t========\t\n"); 172 FB_DEBUG("\n \t========\t\n");
163 for (p = ENDATA_LEN; p < (ENDATA_LEN + ENDATA_LEN + 48 ); p++) { 173 for (p = ENDATA_LEN; p < (ENDATA_LEN + ENDATA_LEN + 48 ); p++) {
164 FB_DEBUG("0x%2x ", *(bdata + p)); 174 FB_DEBUG("0x%2x ", *(bdata + p));
165 if (p % 16 == 0) 175 if (p % 16 == 0)
166 FB_DEBUG("\n"); 176 FB_DEBUG("\n");
167 } 177 }
168 178
169 FB_DEBUG("\n plain text are:\n"); 179 FB_DEBUG("\n plain text are:\n");
170 for (p = 0; p < ENDATA_LEN; p++) { 180 for (p = 0; p < ENDATA_LEN; p++) {
171 FB_DEBUG("0x%2x ", plain_data[p]); 181 FB_DEBUG("0x%2x ", plain_data[p]);
172 if (p % 16 == 0) 182 if (p % 16 == 0)
173 FB_DEBUG("\n"); 183 FB_DEBUG("\n");
174 } 184 }
175 FB_DEBUG("\n"); 185 FB_DEBUG("\n");
176 #endif 186 #endif
177 187
178 for (p = 0; p < ENDATA_LEN-1; p++) { 188 for (p = 0; p < ENDATA_LEN-1; p++) {
179 if (*(bdata+p) != plain_data[p]) { 189 if (*(bdata+p) != plain_data[p]) {
180 FB_DEBUG("Verify salt in decrypt error on pointer %d\n", p); 190 FB_DEBUG("Verify salt in decrypt error on pointer %d\n", p);
181 return FASTBOOT_LOCK_ERROR; 191 return FASTBOOT_LOCK_ERROR;
182 } 192 }
183 } 193 }
184 194
185 if (plain_data[ENDATA_LEN - 1] >= FASTBOOT_LOCK_NUM) 195 if (plain_data[ENDATA_LEN - 1] >= FASTBOOT_LOCK_NUM)
186 return FASTBOOT_LOCK_ERROR; 196 return FASTBOOT_LOCK_ERROR;
187 else 197 else
188 return plain_data[ENDATA_LEN-1]; 198 return plain_data[ENDATA_LEN-1];
189 } 199 }
190 200
191 static int encrypt_lock_store(FbLockState lock, unsigned char* bdata) { 201 static int encrypt_lock_store(FbLockState lock, unsigned char* bdata) {
192 unsigned int p = 0; 202 unsigned int p = 0;
193 int ret; 203 int ret;
194 int salt_len = generate_salt(bdata); 204 int salt_len = generate_salt(bdata);
195 if (salt_len < 0) 205 if (salt_len < 0)
196 return -1; 206 return -1;
197 207
198 //salt_len cannot be longer than endata block size. 208 //salt_len cannot be longer than endata block size.
199 if (salt_len >= ENDATA_LEN) 209 if (salt_len >= ENDATA_LEN)
200 salt_len = ENDATA_LEN - 1; 210 salt_len = ENDATA_LEN - 1;
201 211
202 p = ENDATA_LEN - 1; 212 p = ENDATA_LEN - 1;
203 213
204 //Set lock value 214 //Set lock value
205 *(bdata + p) = lock; 215 *(bdata + p) = lock;
206 216
207 caam_open(); 217 caam_open();
208 ret = caam_gen_blob((uint32_t)(ulong)bdata, 218 ret = caam_gen_blob((uint32_t)(ulong)bdata,
209 (uint32_t)(ulong)bdata + ROUND(ENDATA_LEN, ARCH_DMA_MINALIGN), 219 (uint32_t)(ulong)bdata + ROUND(ENDATA_LEN, ARCH_DMA_MINALIGN),
210 ENDATA_LEN); 220 ENDATA_LEN);
211 if (ret != 0) { 221 if (ret != 0) {
212 printf("error in caam_gen_blob:0x%x\n", ret); 222 printf("error in caam_gen_blob:0x%x\n", ret);
213 return -1; 223 return -1;
214 } 224 }
215 225
216 226
217 #ifdef FASTBOOT_LOCK_DEBUG 227 #ifdef FASTBOOT_LOCK_DEBUG
218 int i = 0; 228 int i = 0;
219 FB_DEBUG("encrypt plain_text:\n"); 229 FB_DEBUG("encrypt plain_text:\n");
220 for (i = 0; i < ENDATA_LEN; i++) { 230 for (i = 0; i < ENDATA_LEN; i++) {
221 FB_DEBUG("0x%2x\t", *(bdata+i)); 231 FB_DEBUG("0x%2x\t", *(bdata+i));
222 if (i % 16 == 0) 232 if (i % 16 == 0)
223 printf("\n"); 233 printf("\n");
224 } 234 }
225 printf("\nto:\n"); 235 printf("\nto:\n");
226 for (i=0; i < ENDATA_LEN + 48; i++) { 236 for (i=0; i < ENDATA_LEN + 48; i++) {
227 FB_DEBUG("0x%2x\t", *(bdata + ENDATA_LEN + i)); 237 FB_DEBUG("0x%2x\t", *(bdata + ENDATA_LEN + i));
228 if (i % 16 == 0) 238 if (i % 16 == 0)
229 printf("\n"); 239 printf("\n");
230 } 240 }
231 printf("\n"); 241 printf("\n");
232 242
233 #endif 243 #endif
234 //protect value 244 //protect value
235 *(bdata + p) = 0xff; 245 *(bdata + p) = 0xff;
236 return 0; 246 return 0;
237 } 247 }
238 248
239 #endif 249 #endif
240 250
241 static char mmc_dev_part[16]; 251 static char mmc_dev_part[16];
242 static char* get_mmc_part(int part) { 252 static char* get_mmc_part(int part) {
243 u32 dev_no = mmc_get_env_dev(); 253 u32 dev_no = mmc_get_env_dev();
244 sprintf(mmc_dev_part,"%x:%x",dev_no, part); 254 sprintf(mmc_dev_part,"%x:%x",dev_no, part);
245 return mmc_dev_part; 255 return mmc_dev_part;
246 } 256 }
247 257
248 static inline void set_lock_disable_data(unsigned char* bdata) { 258 static inline void set_lock_disable_data(unsigned char* bdata) {
249 *(bdata + SECTOR_SIZE -1) = 0; 259 *(bdata + SECTOR_SIZE -1) = 0;
250 } 260 }
251 261
252 /* 262 /*
253 * The enabling value is stored in the last byte of target partition. 263 * The enabling value is stored in the last byte of target partition.
254 */ 264 */
255 static inline unsigned char lock_enable_parse(unsigned char* bdata) { 265 static inline unsigned char lock_enable_parse(unsigned char* bdata) {
256 FB_DEBUG("lock_enable_parse: 0x%x\n", *(bdata + SECTOR_SIZE -1)); 266 FB_DEBUG("lock_enable_parse: 0x%x\n", *(bdata + SECTOR_SIZE -1));
257 if (*(bdata + SECTOR_SIZE -1) >= FASTBOOT_UL_NUM) 267 if (*(bdata + SECTOR_SIZE -1) >= FASTBOOT_UL_NUM)
258 return FASTBOOT_UL_ERROR; 268 return FASTBOOT_UL_ERROR;
259 else 269 else
260 return *(bdata + SECTOR_SIZE -1); 270 return *(bdata + SECTOR_SIZE -1);
261 } 271 }
262 272
263 static FbLockState g_lockstat = FASTBOOT_UNLOCK; 273 static FbLockState g_lockstat = FASTBOOT_UNLOCK;
264 274
265 #ifdef CONFIG_IMX_TRUSTY_OS 275 #ifdef CONFIG_IMX_TRUSTY_OS
266 FbLockState fastboot_get_lock_stat(void) { 276 FbLockState fastboot_get_lock_stat(void) {
267 uint8_t l_status; 277 uint8_t l_status;
268 int ret; 278 int ret;
269 /* 279 /*
270 * If Trusty OS not flashed, then must return 280 * If Trusty OS not flashed, then must return
271 * unlock status to make device been able 281 * unlock status to make device been able
272 * to flash Trusty OS binary. 282 * to flash Trusty OS binary.
273 */ 283 */
274 #ifndef CONFIG_ARM64 284 #ifndef CONFIG_ARM64
275 if (!tos_flashed) 285 if (!tos_flashed)
276 return FASTBOOT_UNLOCK; 286 return FASTBOOT_UNLOCK;
277 #endif 287 #endif
278 ret = trusty_read_lock_state(&l_status); 288 ret = trusty_read_lock_state(&l_status);
279 if (ret < 0) 289 if (ret < 0)
280 return g_lockstat; 290 return g_lockstat;
281 else 291 else
282 return l_status; 292 return l_status;
283 293
284 } 294 }
285 295
286 int fastboot_set_lock_stat(FbLockState lock) { 296 int fastboot_set_lock_stat(FbLockState lock) {
287 int ret; 297 int ret;
288 /* 298 /*
289 * If Trusty OS not flashed, we must prevent set lock 299 * If Trusty OS not flashed, we must prevent set lock
290 * status. Due the Trusty IPC won't work here. 300 * status. Due the Trusty IPC won't work here.
291 */ 301 */
292 #ifndef CONFIG_ARM64 302 #ifndef CONFIG_ARM64
293 if (!tos_flashed) 303 if (!tos_flashed)
294 return 0; 304 return 0;
295 #endif 305 #endif
296 ret = trusty_write_lock_state(lock); 306 ret = trusty_write_lock_state(lock);
297 if (ret < 0) { 307 if (ret < 0) {
298 printf("cannot set lock status due Trusty return %d\n", ret); 308 printf("cannot set lock status due Trusty return %d\n", ret);
299 return ret; 309 return ret;
300 } 310 }
301 return 0; 311 return 0;
302 } 312 }
303 #else 313 #else
304 314
305 /* 315 /*
306 * Set status of the lock&unlock to FSL_FASTBOOT_FB_PART 316 * Set status of the lock&unlock to FSL_FASTBOOT_FB_PART
307 * Currently use the very first Byte of FSL_FASTBOOT_FB_PART 317 * Currently use the very first Byte of FSL_FASTBOOT_FB_PART
308 * to store the fastboot lock&unlock status 318 * to store the fastboot lock&unlock status
309 */ 319 */
310 int fastboot_set_lock_stat(FbLockState lock) { 320 int fastboot_set_lock_stat(FbLockState lock) {
311 struct blk_desc *fs_dev_desc; 321 struct blk_desc *fs_dev_desc;
312 disk_partition_t fs_partition; 322 disk_partition_t fs_partition;
313 unsigned char *bdata; 323 unsigned char *bdata;
314 int mmc_id; 324 int mmc_id;
315 int status, ret; 325 int status, ret;
316 326
317 bdata = (unsigned char *)memalign(ARCH_DMA_MINALIGN, SECTOR_SIZE); 327 bdata = (unsigned char *)memalign(ARCH_DMA_MINALIGN, SECTOR_SIZE);
318 if (bdata == NULL) 328 if (bdata == NULL)
319 goto fail2; 329 goto fail2;
320 memset(bdata, 0, SECTOR_SIZE); 330 memset(bdata, 0, SECTOR_SIZE);
321 331
322 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_FBMISC); 332 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_FBMISC);
323 if (mmc_id < 0) { 333 if (mmc_id < 0) {
324 printf("%s: error in get mmc part\n", __FUNCTION__); 334 printf("%s: error in get mmc part\n", __FUNCTION__);
325 ret = -1; 335 ret = -1;
326 goto fail; 336 goto fail;
327 } 337 }
328 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV, 338 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV,
329 get_mmc_part(mmc_id), 339 get_mmc_part(mmc_id),
330 &fs_dev_desc, &fs_partition, 1); 340 &fs_dev_desc, &fs_partition, 1);
331 if (status < 0) { 341 if (status < 0) {
332 printf("%s:error in getdevice partition.\n", __FUNCTION__); 342 printf("%s:error in getdevice partition.\n", __FUNCTION__);
333 ret = -1; 343 ret = -1;
334 goto fail; 344 goto fail;
335 } 345 }
336 346
337 status = encrypt_lock_store(lock, bdata); 347 status = encrypt_lock_store(lock, bdata);
338 if (status < 0) { 348 if (status < 0) {
339 ret = -1; 349 ret = -1;
340 goto fail; 350 goto fail;
341 } 351 }
342 status = blk_dwrite(fs_dev_desc, fs_partition.start, 1, bdata); 352 status = blk_dwrite(fs_dev_desc, fs_partition.start, 1, bdata);
343 if (!status) { 353 if (!status) {
344 printf("%s:error in block write.\n", __FUNCTION__); 354 printf("%s:error in block write.\n", __FUNCTION__);
345 ret = -1; 355 ret = -1;
346 goto fail; 356 goto fail;
347 } 357 }
348 ret = 0; 358 ret = 0;
349 fail: 359 fail:
350 free(bdata); 360 free(bdata);
351 return ret; 361 return ret;
352 fail2: 362 fail2:
353 g_lockstat = lock; 363 g_lockstat = lock;
354 return 0; 364 return 0;
355 } 365 }
356 366
357 FbLockState fastboot_get_lock_stat(void) { 367 FbLockState fastboot_get_lock_stat(void) {
358 struct blk_desc *fs_dev_desc; 368 struct blk_desc *fs_dev_desc;
359 disk_partition_t fs_partition; 369 disk_partition_t fs_partition;
360 unsigned char *bdata; 370 unsigned char *bdata;
361 int mmc_id; 371 int mmc_id;
362 FbLockState ret; 372 FbLockState ret;
363 /* uboot used by uuu will boot from USB, always return UNLOCK state */ 373 /* uboot used by uuu will boot from USB, always return UNLOCK state */
364 if (is_boot_from_usb()) 374 if (is_boot_from_usb())
365 return g_lockstat; 375 return g_lockstat;
366 376
367 bdata = (unsigned char *)memalign(ARCH_DMA_MINALIGN, SECTOR_SIZE); 377 bdata = (unsigned char *)memalign(ARCH_DMA_MINALIGN, SECTOR_SIZE);
368 if (bdata == NULL) 378 if (bdata == NULL)
369 return g_lockstat; 379 return g_lockstat;
370 380
371 int status; 381 int status;
372 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_FBMISC); 382 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_FBMISC);
373 if (mmc_id < 0) { 383 if (mmc_id < 0) {
374 printf("%s: error in get mmc part\n", __FUNCTION__); 384 printf("%s: error in get mmc part\n", __FUNCTION__);
375 ret = g_lockstat; 385 ret = g_lockstat;
376 goto fail; 386 goto fail;
377 } 387 }
378 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV, 388 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV,
379 get_mmc_part(mmc_id), 389 get_mmc_part(mmc_id),
380 &fs_dev_desc, &fs_partition, 1); 390 &fs_dev_desc, &fs_partition, 1);
381 391
382 if (status < 0) { 392 if (status < 0) {
383 printf("%s:error in getdevice partition.\n", __FUNCTION__); 393 printf("%s:error in getdevice partition.\n", __FUNCTION__);
384 ret = g_lockstat; 394 ret = g_lockstat;
385 goto fail; 395 goto fail;
386 } 396 }
387 397
388 status = blk_dread(fs_dev_desc, fs_partition.start, 1, bdata); 398 status = blk_dread(fs_dev_desc, fs_partition.start, 1, bdata);
389 if (!status) { 399 if (!status) {
390 printf("%s:error in block read.\n", __FUNCTION__); 400 printf("%s:error in block read.\n", __FUNCTION__);
391 ret = FASTBOOT_LOCK_ERROR; 401 ret = FASTBOOT_LOCK_ERROR;
392 goto fail; 402 goto fail;
393 } 403 }
394 404
395 ret = decrypt_lock_store(bdata); 405 ret = decrypt_lock_store(bdata);
396 fail: 406 fail:
397 free(bdata); 407 free(bdata);
398 return ret; 408 return ret;
399 } 409 }
400 #endif 410 #endif
401 411
402 412
403 /* Return the last byte of of FSL_FASTBOOT_PR_DATA 413 /* Return the last byte of of FSL_FASTBOOT_PR_DATA
404 * which is managed by PresistDataService 414 * which is managed by PresistDataService
405 */ 415 */
406 416
407 #ifdef CONFIG_ENABLE_LOCKSTATUS_SUPPORT 417 #ifdef CONFIG_ENABLE_LOCKSTATUS_SUPPORT
408 //Brillo has no presist data partition 418 //Brillo has no presist data partition
409 FbLockEnableResult fastboot_lock_enable(void) { 419 FbLockEnableResult fastboot_lock_enable(void) {
410 return FASTBOOT_UL_ENABLE; 420 return FASTBOOT_UL_ENABLE;
411 } 421 }
412 void set_fastboot_lock_disable(void) { 422 void set_fastboot_lock_disable(void) {
413 } 423 }
414 #else 424 #else
415 void set_fastboot_lock_disable(void) { 425 void set_fastboot_lock_disable(void) {
416 struct blk_desc *fs_dev_desc; 426 struct blk_desc *fs_dev_desc;
417 disk_partition_t fs_partition; 427 disk_partition_t fs_partition;
418 unsigned char *bdata; 428 unsigned char *bdata;
419 int mmc_id; 429 int mmc_id;
420 430
421 bdata = (unsigned char *)memalign(ALIGN_BYTES, SECTOR_SIZE); 431 bdata = (unsigned char *)memalign(ALIGN_BYTES, SECTOR_SIZE);
422 if (bdata == NULL) 432 if (bdata == NULL)
423 return; 433 return;
424 set_lock_disable_data(bdata); 434 set_lock_disable_data(bdata);
425 int status; 435 int status;
426 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_PRDATA); 436 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_PRDATA);
427 if (mmc_id < 0) { 437 if (mmc_id < 0) {
428 printf("%s: error in get mmc part\n", __FUNCTION__); 438 printf("%s: error in get mmc part\n", __FUNCTION__);
429 goto fail; 439 goto fail;
430 } 440 }
431 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV, 441 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV,
432 get_mmc_part(mmc_id), 442 get_mmc_part(mmc_id),
433 &fs_dev_desc, &fs_partition, 1); 443 &fs_dev_desc, &fs_partition, 1);
434 if (status < 0) { 444 if (status < 0) {
435 printf("%s:error in getdevice partition.\n", __FUNCTION__); 445 printf("%s:error in getdevice partition.\n", __FUNCTION__);
436 goto fail; 446 goto fail;
437 } 447 }
438 448
439 lbaint_t target_block = fs_partition.start + fs_partition.size - 1; 449 lbaint_t target_block = fs_partition.start + fs_partition.size - 1;
440 status = blk_dwrite(fs_dev_desc, target_block, 1, bdata); 450 status = blk_dwrite(fs_dev_desc, target_block, 1, bdata);
441 if (!status) { 451 if (!status) {
442 printf("%s: error in block read\n", __FUNCTION__); 452 printf("%s: error in block read\n", __FUNCTION__);
443 goto fail; 453 goto fail;
444 } 454 }
445 455
446 fail: 456 fail:
447 free(bdata); 457 free(bdata);
448 return; 458 return;
449 459
450 } 460 }
451 FbLockEnableResult fastboot_lock_enable() { 461 FbLockEnableResult fastboot_lock_enable() {
452 #ifdef CONFIG_DUAL_BOOTLOADER 462 #ifdef CONFIG_DUAL_BOOTLOADER
453 /* Always allow unlock device in spl recovery mode. */ 463 /* Always allow unlock device in spl recovery mode. */
454 if (is_spl_recovery()) 464 if (is_spl_recovery())
455 return FASTBOOT_UL_ENABLE; 465 return FASTBOOT_UL_ENABLE;
456 #endif 466 #endif
457 467
458 #if defined(CONFIG_IMX_TRUSTY_OS) || defined(CONFIG_TRUSTY_UNLOCK_PERMISSION) 468 #if defined(CONFIG_IMX_TRUSTY_OS) || defined(CONFIG_TRUSTY_UNLOCK_PERMISSION)
459 int ret; 469 int ret;
460 uint8_t oem_device_unlock; 470 uint8_t oem_device_unlock;
461 471
462 ret = trusty_read_oem_unlock_device_permission(&oem_device_unlock); 472 ret = trusty_read_oem_unlock_device_permission(&oem_device_unlock);
463 if (ret < 0) 473 if (ret < 0)
464 return FASTBOOT_UL_ERROR; 474 return FASTBOOT_UL_ERROR;
465 else 475 else
466 return oem_device_unlock; 476 return oem_device_unlock;
467 #else /* CONFIG_IMX_TRUSTY_OS */ 477 #else /* CONFIG_IMX_TRUSTY_OS */
468 FbLockEnableResult ret; 478 FbLockEnableResult ret;
469 struct blk_desc *fs_dev_desc; 479 struct blk_desc *fs_dev_desc;
470 disk_partition_t fs_partition; 480 disk_partition_t fs_partition;
471 unsigned char *bdata; 481 unsigned char *bdata;
472 int mmc_id; 482 int mmc_id;
473 483
474 bdata = (unsigned char *)memalign(ALIGN_BYTES, SECTOR_SIZE); 484 bdata = (unsigned char *)memalign(ALIGN_BYTES, SECTOR_SIZE);
475 if (bdata == NULL) 485 if (bdata == NULL)
476 return FASTBOOT_UL_ERROR; 486 return FASTBOOT_UL_ERROR;
477 int status; 487 int status;
478 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_PRDATA); 488 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_PRDATA);
479 if (mmc_id < 0) { 489 if (mmc_id < 0) {
480 printf("%s: error in get mmc part\n", __FUNCTION__); 490 printf("%s: error in get mmc part\n", __FUNCTION__);
481 ret = FASTBOOT_UL_ERROR; 491 ret = FASTBOOT_UL_ERROR;
482 goto fail; 492 goto fail;
483 } 493 }
484 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV, 494 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV,
485 get_mmc_part(mmc_id), 495 get_mmc_part(mmc_id),
486 &fs_dev_desc, &fs_partition, 1); 496 &fs_dev_desc, &fs_partition, 1);
487 if (status < 0) { 497 if (status < 0) {
488 printf("%s:error in getdevice partition.\n", __FUNCTION__); 498 printf("%s:error in getdevice partition.\n", __FUNCTION__);
489 ret = FASTBOOT_UL_ERROR; 499 ret = FASTBOOT_UL_ERROR;
490 goto fail; 500 goto fail;
491 } 501 }
492 502
493 //The data is stored in the last blcok of this partition. 503 //The data is stored in the last blcok of this partition.
494 lbaint_t target_block = fs_partition.start + fs_partition.size - 1; 504 lbaint_t target_block = fs_partition.start + fs_partition.size - 1;
495 status = blk_dread(fs_dev_desc, target_block, 1, bdata); 505 status = blk_dread(fs_dev_desc, target_block, 1, bdata);
496 if (!status) { 506 if (!status) {
497 printf("%s: error in block read\n", __FUNCTION__); 507 printf("%s: error in block read\n", __FUNCTION__);
498 ret = FASTBOOT_UL_ERROR; 508 ret = FASTBOOT_UL_ERROR;
499 goto fail; 509 goto fail;
500 } 510 }
501 int i = 0; 511 int i = 0;
502 FB_DEBUG("\n PRIST last sector is:\n"); 512 FB_DEBUG("\n PRIST last sector is:\n");
503 for (i = 0; i < SECTOR_SIZE; i++) { 513 for (i = 0; i < SECTOR_SIZE; i++) {
504 FB_DEBUG("0x%x ", *(bdata + i)); 514 FB_DEBUG("0x%x ", *(bdata + i));
505 if (i % 32 == 0) 515 if (i % 32 == 0)
506 FB_DEBUG("\n"); 516 FB_DEBUG("\n");
507 } 517 }
508 FB_DEBUG("\n"); 518 FB_DEBUG("\n");
509 ret = lock_enable_parse(bdata); 519 ret = lock_enable_parse(bdata);
510 fail: 520 fail:
511 free(bdata); 521 free(bdata);
512 return ret; 522 return ret;
513 #endif /* CONFIG_IMX_TRUSTY_OS */ 523 #endif /* CONFIG_IMX_TRUSTY_OS */
514 524
515 } 525 }
516 #endif 526 #endif
517 527
518 int display_lock(FbLockState lock, int verify) { 528 int display_lock(FbLockState lock, int verify) {
519 struct stdio_dev *disp; 529 struct stdio_dev *disp;
520 disp = stdio_get_by_name("vga"); 530 disp = stdio_get_by_name("vga");
521 if (disp != NULL) { 531 if (disp != NULL) {
522 if (lock == FASTBOOT_UNLOCK) { 532 if (lock == FASTBOOT_UNLOCK) {
523 disp->puts(disp, "\n============= NOTICE ============\n"); 533 disp->puts(disp, "\n============= NOTICE ============\n");
524 disp->puts(disp, "| |\n"); 534 disp->puts(disp, "| |\n");
525 disp->puts(disp, "| Your device is NOT locked. |\n"); 535 disp->puts(disp, "| Your device is NOT locked. |\n");
526 disp->puts(disp, "| |\n"); 536 disp->puts(disp, "| |\n");
527 disp->puts(disp, "=================================\n"); 537 disp->puts(disp, "=================================\n");
528 } else { 538 } else {
529 if (verify == -1) { 539 if (verify == -1) {
530 disp->puts(disp, "\n============= NOTICE ============\n"); 540 disp->puts(disp, "\n============= NOTICE ============\n");
531 disp->puts(disp, "| |\n"); 541 disp->puts(disp, "| |\n");
532 disp->puts(disp, "| Your device is NOT protected. |\n"); 542 disp->puts(disp, "| Your device is NOT protected. |\n");
533 disp->puts(disp, "| |\n"); 543 disp->puts(disp, "| |\n");
534 disp->puts(disp, "=================================\n"); 544 disp->puts(disp, "=================================\n");
535 } else if (verify == 1) { 545 } else if (verify == 1) {
536 disp->puts(disp, "\n============= NOTICE ============\n"); 546 disp->puts(disp, "\n============= NOTICE ============\n");
537 disp->puts(disp, "| |\n"); 547 disp->puts(disp, "| |\n");
538 disp->puts(disp, "| Boot verify failed! |\n"); 548 disp->puts(disp, "| Boot verify failed! |\n");
539 disp->puts(disp, "| |\n"); 549 disp->puts(disp, "| |\n");
540 disp->puts(disp, "=================================\n"); 550 disp->puts(disp, "=================================\n");
541 } 551 }
542 } 552 }
543 return 0; 553 return 0;
544 } else 554 } else
545 printf("not found VGA disp console.\n"); 555 printf("not found VGA disp console.\n");
546 556
547 return -1; 557 return -1;
548 558
549 } 559 }
560
561 #ifdef CONFIG_AVB_WARNING_LOGO
562 int display_unlock_warning(void) {
563 int ret;
564 struct udevice *dev;
565
566 ret = uclass_first_device_err(UCLASS_VIDEO, &dev);
567 if (!ret) {
568 /* clear screen first */
569 video_clear(dev);
570 /* Draw the orange warning bmp logo */
571 ret = bmp_display((ulong)orange_warning_bmp_bitmap,
572 CONFIG_AVB_WARNING_LOGO_COLS, CONFIG_AVB_WARNING_LOGO_ROWS);
573
574 /* Show warning text. */
575 if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev)) {
576 printf("no text console device found!\n");
577 return -1;
578 }
579 /* Adjust the cursor postion, the (x, y) are hard-coded here. */
580 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
581 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 6);
582 vidconsole_put_string(dev, "The bootloader is unlocked and software");
583 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
584 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 7);
585 vidconsole_put_string(dev, "integrity cannot be guaranteed. Any data");
586 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
587 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 8);
588 vidconsole_put_string(dev, "stored on the device may be available to");
589 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
590 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 9);
591 vidconsole_put_string(dev, "attackers. Do not store any sensitive data");
592 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
593 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 10);
594 vidconsole_put_string(dev, "on the device.");
595 /* Jump one line to show the link */
596 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
597 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 13);
598 vidconsole_put_string(dev, "Visit this link on another device:");
599 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
600 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 14);
601 vidconsole_put_string(dev, "g.co/ABH");
602
603 vidconsole_position_cursor(dev, CONFIG_AVB_WARNING_LOGO_COLS/VIDEO_FONT_WIDTH,
604 CONFIG_AVB_WARNING_LOGO_ROWS/VIDEO_FONT_HEIGHT + 20);
605 vidconsole_put_string(dev, "PRESS POWER BUTTON TO CONTINUE...");
606 /* sync frame buffer */
607 video_sync_all();
608
609 return 0;
610 } else {
611 printf("no video device found!\n");
612 return -1;
613 }
614 }
615 #endif
550 616
551 int fastboot_wipe_data_partition(void) 617 int fastboot_wipe_data_partition(void)
552 { 618 {
553 struct blk_desc *fs_dev_desc; 619 struct blk_desc *fs_dev_desc;
554 disk_partition_t fs_partition; 620 disk_partition_t fs_partition;
555 int status; 621 int status;
556 int mmc_id; 622 int mmc_id;
557 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_DATA); 623 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_DATA);
558 if (mmc_id < 0) { 624 if (mmc_id < 0) {
559 printf("%s: error in get mmc part\n", __FUNCTION__); 625 printf("%s: error in get mmc part\n", __FUNCTION__);
560 return -1; 626 return -1;
561 } 627 }
562 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV, 628 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV,
563 get_mmc_part(mmc_id), &fs_dev_desc, &fs_partition, 1); 629 get_mmc_part(mmc_id), &fs_dev_desc, &fs_partition, 1);
564 if (status < 0) { 630 if (status < 0) {
565 printf("error in get device partition for wipe /data\n"); 631 printf("error in get device partition for wipe /data\n");
566 return -1; 632 return -1;
567 } 633 }
568 status = blk_derase(fs_dev_desc, fs_partition.start , fs_partition.size ); 634 status = blk_derase(fs_dev_desc, fs_partition.start , fs_partition.size );
569 if (status != fs_partition.size ) { 635 if (status != fs_partition.size ) {
570 printf("erase not complete\n"); 636 printf("erase not complete\n");
571 return -1; 637 return -1;
572 } 638 }
573 mdelay(2000); 639 mdelay(2000);
574 640
575 return 0; 641 return 0;
576 } 642 }
577 643
578 void fastboot_wipe_all(void) { 644 void fastboot_wipe_all(void) {
579 struct blk_desc *fs_dev_desc; 645 struct blk_desc *fs_dev_desc;
580 disk_partition_t fs_partition; 646 disk_partition_t fs_partition;
581 int status; 647 int status;
582 int mmc_id; 648 int mmc_id;
583 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_GPT); 649 mmc_id = fastboot_flash_find_index(FASTBOOT_PARTITION_GPT);
584 if (mmc_id < 0) { 650 if (mmc_id < 0) {
585 printf("%s: error in get mmc part\n", __FUNCTION__); 651 printf("%s: error in get mmc part\n", __FUNCTION__);
586 return; 652 return;
587 } 653 }
588 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV, 654 status = blk_get_device_part_str(FSL_FASTBOOT_FB_DEV,
589 get_mmc_part(mmc_id), &fs_dev_desc, &fs_partition, 1); 655 get_mmc_part(mmc_id), &fs_dev_desc, &fs_partition, 1);
590 if (status < 0) { 656 if (status < 0) {
591 printf("error in get device partition for wipe user partition\n"); 657 printf("error in get device partition for wipe user partition\n");
592 return; 658 return;
593 } 659 }
594 status = blk_derase(fs_dev_desc, fs_partition.start , fs_partition.size ); 660 status = blk_derase(fs_dev_desc, fs_partition.start , fs_partition.size );
595 if (status != fs_partition.size ) { 661 if (status != fs_partition.size ) {
596 printf("erase not complete\n"); 662 printf("erase not complete\n");
597 return; 663 return;
598 } 664 }
599 printf("fastboot wiped all.\n"); 665 printf("fastboot wiped all.\n");
600 } 666 }
601 667
drivers/fastboot/fb_fsl/fastboot_lock_unlock.h
1 /* 1 /*
2 * Copyright (c) 2016, Freescale Semiconductor, Inc. 2 * Copyright (c) 2016, Freescale Semiconductor, Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * o Redistributions of source code must retain the above copyright notice, this list 8 * o Redistributions of source code must retain the above copyright notice, this list
9 * of conditions and the following disclaimer. 9 * of conditions and the following disclaimer.
10 * 10 *
11 * o Redistributions in binary form must reproduce the above copyright notice, this 11 * o Redistributions in binary form must reproduce the above copyright notice, this
12 * list of conditions and the following disclaimer in the documentation and/or 12 * list of conditions and the following disclaimer in the documentation and/or
13 * other materials provided with the distribution. 13 * other materials provided with the distribution.
14 * 14 *
15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from this 16 * contributors may be used to endorse or promote products derived from this
17 * software without specific prior written permission. 17 * software without specific prior written permission.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #ifndef FASTBOOT_LOCK_UNLOCK_H 31 #ifndef FASTBOOT_LOCK_UNLOCK_H
32 #define FASTBOOT_LOCK_UNLOCK_H 32 #define FASTBOOT_LOCK_UNLOCK_H
33 33
34 #define ALIGN_BYTES 64 /*armv7 cache line need 64 bytes aligned */ 34 #define ALIGN_BYTES 64 /*armv7 cache line need 64 bytes aligned */
35 35
36 //#define FASTBOOT_LOCK_DEBUG 36 //#define FASTBOOT_LOCK_DEBUG
37 #ifdef CONFIG_FSL_CAAM_KB 37 #ifdef CONFIG_FSL_CAAM_KB
38 #define FASTBOOT_ENCRYPT_LOCK 38 #define FASTBOOT_ENCRYPT_LOCK
39 #endif 39 #endif
40 40
41 #ifdef FASTBOOT_LOCK_DEBUG 41 #ifdef FASTBOOT_LOCK_DEBUG
42 #define FB_DEBUG(format, ...) printf(format, ##__VA_ARGS__) 42 #define FB_DEBUG(format, ...) printf(format, ##__VA_ARGS__)
43 #else 43 #else
44 #define FB_DEBUG(format, ...) 44 #define FB_DEBUG(format, ...)
45 #endif 45 #endif
46 46
47 typedef enum { 47 typedef enum {
48 FASTBOOT_UNLOCK, 48 FASTBOOT_UNLOCK,
49 FASTBOOT_LOCK, 49 FASTBOOT_LOCK,
50 FASTBOOT_LOCK_ERROR, 50 FASTBOOT_LOCK_ERROR,
51 FASTBOOT_LOCK_NUM 51 FASTBOOT_LOCK_NUM
52 }FbLockState; 52 }FbLockState;
53 53
54 typedef enum { 54 typedef enum {
55 FASTBOOT_UL_DISABLE, 55 FASTBOOT_UL_DISABLE,
56 FASTBOOT_UL_ENABLE, 56 FASTBOOT_UL_ENABLE,
57 FASTBOOT_UL_ERROR, 57 FASTBOOT_UL_ERROR,
58 FASTBOOT_UL_NUM 58 FASTBOOT_UL_NUM
59 }FbLockEnableResult; 59 }FbLockEnableResult;
60 60
61 FbLockState fastboot_get_lock_stat(void); 61 FbLockState fastboot_get_lock_stat(void);
62 62
63 int fastboot_set_lock_stat(FbLockState lock); 63 int fastboot_set_lock_stat(FbLockState lock);
64 64
65 int fastboot_wipe_data_partition(void); 65 int fastboot_wipe_data_partition(void);
66 void fastboot_wipe_all(void); 66 void fastboot_wipe_all(void);
67 67
68 FbLockEnableResult fastboot_lock_enable(void); 68 FbLockEnableResult fastboot_lock_enable(void);
69 void set_fastboot_lock_disable(void); 69 void set_fastboot_lock_disable(void);
70 70
71 int display_lock(FbLockState lock, int verify); 71 int display_lock(FbLockState lock, int verify);
72 72
73 int display_unlock_warning(void);
74
73 bool valid_tos(void); 75 bool valid_tos(void);
74 #endif 76 #endif
75 77
drivers/fastboot/fb_fsl/fb_fsl_boot.c
1 // SPDX-License-Identifier: GPL-2.0+ 1 // SPDX-License-Identifier: GPL-2.0+
2 /* 2 /*
3 * Copyright 2019 NXP 3 * Copyright 2019 NXP
4 */ 4 */
5 5
6 #include <asm/mach-imx/sys_proto.h> 6 #include <asm/mach-imx/sys_proto.h>
7 #include <fb_fsl.h> 7 #include <fb_fsl.h>
8 #include <fastboot.h> 8 #include <fastboot.h>
9 #include <mmc.h> 9 #include <mmc.h>
10 #include <android_image.h> 10 #include <android_image.h>
11 #include <asm/bootm.h> 11 #include <asm/bootm.h>
12 #include <nand.h> 12 #include <nand.h>
13 #include <part.h> 13 #include <part.h>
14 #include <sparse_format.h> 14 #include <sparse_format.h>
15 #include <image-sparse.h> 15 #include <image-sparse.h>
16 #include <image.h> 16 #include <image.h>
17 #include <asm/mach-imx/boot_mode.h> 17 #include <asm/mach-imx/boot_mode.h>
18 #include <asm/arch/sys_proto.h> 18 #include <asm/arch/sys_proto.h>
19 #include <asm/setup.h> 19 #include <asm/setup.h>
20 #include <env.h> 20 #include <env.h>
21 #include "../lib/avb/fsl/utils.h" 21 #include "../lib/avb/fsl/utils.h"
22 22
23 #ifdef CONFIG_AVB_SUPPORT 23 #ifdef CONFIG_AVB_SUPPORT
24 #include <dt_table.h> 24 #include <dt_table.h>
25 #include <fsl_avb.h> 25 #include <fsl_avb.h>
26 #endif 26 #endif
27 27
28 #ifdef CONFIG_ANDROID_THINGS_SUPPORT 28 #ifdef CONFIG_ANDROID_THINGS_SUPPORT
29 #include <asm-generic/gpio.h> 29 #include <asm-generic/gpio.h>
30 #include <asm/mach-imx/gpio.h> 30 #include <asm/mach-imx/gpio.h>
31 #include "../lib/avb/fsl/fsl_avbkey.h" 31 #include "../lib/avb/fsl/fsl_avbkey.h"
32 #include "../arch/arm/include/asm/mach-imx/hab.h" 32 #include "../arch/arm/include/asm/mach-imx/hab.h"
33 #endif 33 #endif
34 34
35 #if defined(CONFIG_FASTBOOT_LOCK) 35 #if defined(CONFIG_FASTBOOT_LOCK)
36 #include "fastboot_lock_unlock.h" 36 #include "fastboot_lock_unlock.h"
37 #endif 37 #endif
38 38
39 #ifdef CONFIG_IMX_TRUSTY_OS 39 #ifdef CONFIG_IMX_TRUSTY_OS
40 #include "u-boot/sha256.h" 40 #include "u-boot/sha256.h"
41 #include <trusty/libtipc.h> 41 #include <trusty/libtipc.h>
42 #endif 42 #endif
43 43
44 #include "fb_fsl_common.h" 44 #include "fb_fsl_common.h"
45 45
46 /* max kernel image size */ 46 /* max kernel image size */
47 #ifdef CONFIG_ARCH_IMX8 47 #ifdef CONFIG_ARCH_IMX8
48 /* imx8q has more limitation so we assign less memory here. */ 48 /* imx8q has more limitation so we assign less memory here. */
49 #define MAX_KERNEL_LEN (60 * 1024 * 1024) 49 #define MAX_KERNEL_LEN (60 * 1024 * 1024)
50 #else 50 #else
51 #define MAX_KERNEL_LEN (64 * 1024 * 1024) 51 #define MAX_KERNEL_LEN (64 * 1024 * 1024)
52 #endif 52 #endif
53 53
54 #ifdef CONFIG_ANDROID_THINGS_SUPPORT 54 #ifdef CONFIG_ANDROID_THINGS_SUPPORT
55 #define FDT_PART_NAME "oem_bootloader" 55 #define FDT_PART_NAME "oem_bootloader"
56 #else 56 #else
57 #define FDT_PART_NAME "dtbo" 57 #define FDT_PART_NAME "dtbo"
58 #endif 58 #endif
59 59
60 /* Offset (in u32's) of start and end fields in the zImage header. */ 60 /* Offset (in u32's) of start and end fields in the zImage header. */
61 #define ZIMAGE_START_ADDR 10 61 #define ZIMAGE_START_ADDR 10
62 #define ZIMAGE_END_ADDR 11 62 #define ZIMAGE_END_ADDR 11
63 63
64 /* Boot metric variables */ 64 /* Boot metric variables */
65 boot_metric metrics = { 65 boot_metric metrics = {
66 .bll_1 = 0, 66 .bll_1 = 0,
67 .ble_1 = 0, 67 .ble_1 = 0,
68 .kl = 0, 68 .kl = 0,
69 .kd = 0, 69 .kd = 0,
70 .avb = 0, 70 .avb = 0,
71 .odt = 0, 71 .odt = 0,
72 .sw = 0 72 .sw = 0
73 }; 73 };
74 74
75 int read_from_partition_multi(const char* partition, 75 int read_from_partition_multi(const char* partition,
76 int64_t offset, size_t num_bytes, void* buffer, size_t* out_num_read) 76 int64_t offset, size_t num_bytes, void* buffer, size_t* out_num_read)
77 { 77 {
78 struct fastboot_ptentry *pte; 78 struct fastboot_ptentry *pte;
79 unsigned char *bdata; 79 unsigned char *bdata;
80 unsigned char *out_buf = (unsigned char *)buffer; 80 unsigned char *out_buf = (unsigned char *)buffer;
81 unsigned char *dst, *dst64 = NULL; 81 unsigned char *dst, *dst64 = NULL;
82 unsigned long blksz; 82 unsigned long blksz;
83 unsigned long s, cnt; 83 unsigned long s, cnt;
84 size_t num_read = 0; 84 size_t num_read = 0;
85 lbaint_t part_start, part_end, bs, be, bm, blk_num; 85 lbaint_t part_start, part_end, bs, be, bm, blk_num;
86 margin_pos_t margin; 86 margin_pos_t margin;
87 struct blk_desc *fs_dev_desc = NULL; 87 struct blk_desc *fs_dev_desc = NULL;
88 int dev_no; 88 int dev_no;
89 int ret; 89 int ret;
90 90
91 assert(buffer != NULL && out_num_read != NULL); 91 assert(buffer != NULL && out_num_read != NULL);
92 92
93 dev_no = mmc_get_env_dev(); 93 dev_no = mmc_get_env_dev();
94 if ((fs_dev_desc = blk_get_dev("mmc", dev_no)) == NULL) { 94 if ((fs_dev_desc = blk_get_dev("mmc", dev_no)) == NULL) {
95 printf("mmc device not found\n"); 95 printf("mmc device not found\n");
96 return -1; 96 return -1;
97 } 97 }
98 98
99 pte = fastboot_flash_find_ptn(partition); 99 pte = fastboot_flash_find_ptn(partition);
100 if (!pte) { 100 if (!pte) {
101 printf("no %s partition\n", partition); 101 printf("no %s partition\n", partition);
102 fastboot_flash_dump_ptn(); 102 fastboot_flash_dump_ptn();
103 return -1; 103 return -1;
104 } 104 }
105 105
106 blksz = fs_dev_desc->blksz; 106 blksz = fs_dev_desc->blksz;
107 part_start = pte->start; 107 part_start = pte->start;
108 part_end = pte->start + pte->length - 1; 108 part_end = pte->start + pte->length - 1;
109 109
110 if (get_margin_pos((uint64_t)part_start, (uint64_t)part_end, blksz, 110 if (get_margin_pos((uint64_t)part_start, (uint64_t)part_end, blksz,
111 &margin, offset, num_bytes, true)) 111 &margin, offset, num_bytes, true))
112 return -1; 112 return -1;
113 113
114 bs = (lbaint_t)margin.blk_start; 114 bs = (lbaint_t)margin.blk_start;
115 be = (lbaint_t)margin.blk_end; 115 be = (lbaint_t)margin.blk_end;
116 s = margin.start; 116 s = margin.start;
117 bm = margin.multi; 117 bm = margin.multi;
118 118
119 /* alloc a blksz mem */ 119 /* alloc a blksz mem */
120 bdata = (unsigned char *)memalign(ALIGN_BYTES, blksz); 120 bdata = (unsigned char *)memalign(ALIGN_BYTES, blksz);
121 if (bdata == NULL) { 121 if (bdata == NULL) {
122 printf("Failed to allocate memory!\n"); 122 printf("Failed to allocate memory!\n");
123 return -1; 123 return -1;
124 } 124 }
125 125
126 /* support multi blk read */ 126 /* support multi blk read */
127 while (bs <= be) { 127 while (bs <= be) {
128 if (!s && bm > 1) { 128 if (!s && bm > 1) {
129 dst = out_buf; 129 dst = out_buf;
130 dst64 = PTR_ALIGN(out_buf, 64); /* for mmc blk read alignment */ 130 dst64 = PTR_ALIGN(out_buf, 64); /* for mmc blk read alignment */
131 if (dst64 != dst) { 131 if (dst64 != dst) {
132 dst = dst64; 132 dst = dst64;
133 bm--; 133 bm--;
134 } 134 }
135 blk_num = bm; 135 blk_num = bm;
136 cnt = bm * blksz; 136 cnt = bm * blksz;
137 bm = 0; /* no more multi blk */ 137 bm = 0; /* no more multi blk */
138 } else { 138 } else {
139 blk_num = 1; 139 blk_num = 1;
140 cnt = blksz - s; 140 cnt = blksz - s;
141 if (num_read + cnt > num_bytes) 141 if (num_read + cnt > num_bytes)
142 cnt = num_bytes - num_read; 142 cnt = num_bytes - num_read;
143 dst = bdata; 143 dst = bdata;
144 } 144 }
145 if (blk_dread(fs_dev_desc, bs, blk_num, dst) != blk_num) { 145 if (blk_dread(fs_dev_desc, bs, blk_num, dst) != blk_num) {
146 ret = -1; 146 ret = -1;
147 goto fail; 147 goto fail;
148 } 148 }
149 149
150 if (dst == bdata) 150 if (dst == bdata)
151 memcpy(out_buf, bdata + s, cnt); 151 memcpy(out_buf, bdata + s, cnt);
152 else if (dst == dst64) 152 else if (dst == dst64)
153 memcpy(out_buf, dst, cnt); /* internal copy */ 153 memcpy(out_buf, dst, cnt); /* internal copy */
154 154
155 s = 0; 155 s = 0;
156 bs += blk_num; 156 bs += blk_num;
157 num_read += cnt; 157 num_read += cnt;
158 out_buf += cnt; 158 out_buf += cnt;
159 } 159 }
160 *out_num_read = num_read; 160 *out_num_read = num_read;
161 ret = 0; 161 ret = 0;
162 162
163 fail: 163 fail:
164 free(bdata); 164 free(bdata);
165 return ret; 165 return ret;
166 } 166 }
167 167
168 168
169 #if defined(CONFIG_FASTBOOT_LOCK) 169 #if defined(CONFIG_FASTBOOT_LOCK)
170 int do_lock_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { 170 int do_lock_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
171 FbLockState status = fastboot_get_lock_stat(); 171 FbLockState status = fastboot_get_lock_stat();
172 if (status != FASTBOOT_LOCK_ERROR) { 172 if (status != FASTBOOT_LOCK_ERROR) {
173 if (status == FASTBOOT_LOCK) 173 if (status == FASTBOOT_LOCK)
174 printf("fastboot lock status: locked.\n"); 174 printf("fastboot lock status: locked.\n");
175 else 175 else
176 printf("fastboot lock status: unlocked.\n"); 176 printf("fastboot lock status: unlocked.\n");
177 } else 177 } else
178 printf("fastboot lock status error!\n"); 178 printf("fastboot lock status error!\n");
179 179
180 display_lock(status, -1); 180 display_lock(status, -1);
181 181
182 return 0; 182 return 0;
183 183
184 } 184 }
185 185
186 U_BOOT_CMD( 186 U_BOOT_CMD(
187 lock_status, 2, 1, do_lock_status, 187 lock_status, 2, 1, do_lock_status,
188 "lock_status", 188 "lock_status",
189 "lock_status"); 189 "lock_status");
190 #endif 190 #endif
191 191
192 #if defined(CONFIG_FLASH_MCUFIRMWARE_SUPPORT) && defined(CONFIG_ARCH_IMX8M) 192 #if defined(CONFIG_FLASH_MCUFIRMWARE_SUPPORT) && defined(CONFIG_ARCH_IMX8M)
193 static int do_bootmcu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 193 static int do_bootmcu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
194 { 194 {
195 int ret; 195 int ret;
196 size_t out_num_read; 196 size_t out_num_read;
197 void *mcu_base_addr = (void *)MCU_BOOTROM_BASE_ADDR; 197 void *mcu_base_addr = (void *)MCU_BOOTROM_BASE_ADDR;
198 char command[32]; 198 char command[32];
199 199
200 ret = read_from_partition_multi(FASTBOOT_MCU_FIRMWARE_PARTITION, 200 ret = read_from_partition_multi(FASTBOOT_MCU_FIRMWARE_PARTITION,
201 0, ANDROID_MCU_FIRMWARE_SIZE, (void *)mcu_base_addr, &out_num_read); 201 0, ANDROID_MCU_FIRMWARE_SIZE, (void *)mcu_base_addr, &out_num_read);
202 if ((ret != 0) || (out_num_read != ANDROID_MCU_FIRMWARE_SIZE)) { 202 if ((ret != 0) || (out_num_read != ANDROID_MCU_FIRMWARE_SIZE)) {
203 printf("Read MCU images failed!\n"); 203 printf("Read MCU images failed!\n");
204 return 1; 204 return 1;
205 } else { 205 } else {
206 printf("run command: 'bootaux 0x%x'\n",(unsigned int)(ulong)mcu_base_addr); 206 printf("run command: 'bootaux 0x%x'\n",(unsigned int)(ulong)mcu_base_addr);
207 207
208 sprintf(command, "bootaux 0x%x", (unsigned int)(ulong)mcu_base_addr); 208 sprintf(command, "bootaux 0x%x", (unsigned int)(ulong)mcu_base_addr);
209 ret = run_command(command, 0); 209 ret = run_command(command, 0);
210 if (ret) { 210 if (ret) {
211 printf("run 'bootaux' command failed!\n"); 211 printf("run 'bootaux' command failed!\n");
212 return 1; 212 return 1;
213 } 213 }
214 } 214 }
215 return 0; 215 return 0;
216 } 216 }
217 217
218 U_BOOT_CMD( 218 U_BOOT_CMD(
219 bootmcu, 1, 0, do_bootmcu, 219 bootmcu, 1, 0, do_bootmcu,
220 "boot mcu images\n", 220 "boot mcu images\n",
221 "boot mcu images from 'mcu_os' partition, only support images run from TCM" 221 "boot mcu images from 'mcu_os' partition, only support images run from TCM"
222 ); 222 );
223 #endif 223 #endif
224 224
225 #if defined CONFIG_SYSTEM_RAMDISK_SUPPORT && defined CONFIG_ANDROID_AUTO_SUPPORT 225 #if defined CONFIG_SYSTEM_RAMDISK_SUPPORT && defined CONFIG_ANDROID_AUTO_SUPPORT
226 /* Setup booargs for taking the system parition as ramdisk */ 226 /* Setup booargs for taking the system parition as ramdisk */
227 static void fastboot_setup_system_boot_args(const char *slot, bool append_root) 227 static void fastboot_setup_system_boot_args(const char *slot, bool append_root)
228 { 228 {
229 const char *system_part_name = NULL; 229 const char *system_part_name = NULL;
230 #ifdef CONFIG_ANDROID_AB_SUPPORT 230 #ifdef CONFIG_ANDROID_AB_SUPPORT
231 if(slot == NULL) 231 if(slot == NULL)
232 return; 232 return;
233 if(!strncmp(slot, "_a", strlen("_a")) || !strncmp(slot, "boot_a", strlen("boot_a"))) { 233 if(!strncmp(slot, "_a", strlen("_a")) || !strncmp(slot, "boot_a", strlen("boot_a"))) {
234 system_part_name = FASTBOOT_PARTITION_SYSTEM_A; 234 system_part_name = FASTBOOT_PARTITION_SYSTEM_A;
235 } 235 }
236 else if(!strncmp(slot, "_b", strlen("_b")) || !strncmp(slot, "boot_b", strlen("boot_b"))) { 236 else if(!strncmp(slot, "_b", strlen("_b")) || !strncmp(slot, "boot_b", strlen("boot_b"))) {
237 system_part_name = FASTBOOT_PARTITION_SYSTEM_B; 237 system_part_name = FASTBOOT_PARTITION_SYSTEM_B;
238 } else { 238 } else {
239 printf("slot invalid!\n"); 239 printf("slot invalid!\n");
240 return; 240 return;
241 } 241 }
242 #else 242 #else
243 system_part_name = FASTBOOT_PARTITION_SYSTEM; 243 system_part_name = FASTBOOT_PARTITION_SYSTEM;
244 #endif 244 #endif
245 245
246 struct fastboot_ptentry *ptentry = fastboot_flash_find_ptn(system_part_name); 246 struct fastboot_ptentry *ptentry = fastboot_flash_find_ptn(system_part_name);
247 if(ptentry != NULL) { 247 if(ptentry != NULL) {
248 char bootargs_3rd[ANDR_BOOT_ARGS_SIZE] = {'\0'}; 248 char bootargs_3rd[ANDR_BOOT_ARGS_SIZE] = {'\0'};
249 if (append_root) { 249 if (append_root) {
250 u32 dev_no = mmc_map_to_kernel_blk(mmc_get_env_dev()); 250 u32 dev_no = mmc_map_to_kernel_blk(mmc_get_env_dev());
251 sprintf(bootargs_3rd, "root=/dev/mmcblk%dp%d ", 251 sprintf(bootargs_3rd, "root=/dev/mmcblk%dp%d ",
252 dev_no, 252 dev_no,
253 ptentry->partition_index); 253 ptentry->partition_index);
254 } 254 }
255 strcat(bootargs_3rd, "rootwait"); 255 strcat(bootargs_3rd, "rootwait");
256 256
257 env_set("bootargs_3rd", bootargs_3rd); 257 env_set("bootargs_3rd", bootargs_3rd);
258 } else { 258 } else {
259 printf("Can't find partition: %s\n", system_part_name); 259 printf("Can't find partition: %s\n", system_part_name);
260 fastboot_flash_dump_ptn(); 260 fastboot_flash_dump_ptn();
261 } 261 }
262 } 262 }
263 #endif 263 #endif
264 264
265 #ifdef CONFIG_CMD_BOOTA 265 #ifdef CONFIG_CMD_BOOTA
266 266
267 /* Section for Android bootimage format support 267 /* Section for Android bootimage format support
268 * Refer: 268 * Refer:
269 * http://android.git.kernel.org/?p=platform/system/core.git;a=blob; 269 * http://android.git.kernel.org/?p=platform/system/core.git;a=blob;
270 * f=mkbootimg/bootimg.h 270 * f=mkbootimg/bootimg.h
271 */ 271 */
272 272
273 void 273 void
274 bootimg_print_image_hdr(struct andr_img_hdr *hdr) 274 bootimg_print_image_hdr(struct andr_img_hdr *hdr)
275 { 275 {
276 #ifdef DEBUG 276 #ifdef DEBUG
277 int i; 277 int i;
278 printf(" Image magic: %s\n", hdr->magic); 278 printf(" Image magic: %s\n", hdr->magic);
279 279
280 printf(" kernel_size: 0x%x\n", hdr->kernel_size); 280 printf(" kernel_size: 0x%x\n", hdr->kernel_size);
281 printf(" kernel_addr: 0x%x\n", hdr->kernel_addr); 281 printf(" kernel_addr: 0x%x\n", hdr->kernel_addr);
282 282
283 printf(" rdisk_size: 0x%x\n", hdr->ramdisk_size); 283 printf(" rdisk_size: 0x%x\n", hdr->ramdisk_size);
284 printf(" rdisk_addr: 0x%x\n", hdr->ramdisk_addr); 284 printf(" rdisk_addr: 0x%x\n", hdr->ramdisk_addr);
285 285
286 printf(" second_size: 0x%x\n", hdr->second_size); 286 printf(" second_size: 0x%x\n", hdr->second_size);
287 printf(" second_addr: 0x%x\n", hdr->second_addr); 287 printf(" second_addr: 0x%x\n", hdr->second_addr);
288 288
289 printf(" tags_addr: 0x%x\n", hdr->tags_addr); 289 printf(" tags_addr: 0x%x\n", hdr->tags_addr);
290 printf(" page_size: 0x%x\n", hdr->page_size); 290 printf(" page_size: 0x%x\n", hdr->page_size);
291 291
292 printf(" name: %s\n", hdr->name); 292 printf(" name: %s\n", hdr->name);
293 printf(" cmdline: %s\n", hdr->cmdline); 293 printf(" cmdline: %s\n", hdr->cmdline);
294 294
295 for (i = 0; i < 8; i++) 295 for (i = 0; i < 8; i++)
296 printf(" id[%d]: 0x%x\n", i, hdr->id[i]); 296 printf(" id[%d]: 0x%x\n", i, hdr->id[i]);
297 #endif 297 #endif
298 } 298 }
299 299
300 #if !defined(CONFIG_AVB_SUPPORT) || !defined(CONFIG_MMC) 300 #if !defined(CONFIG_AVB_SUPPORT) || !defined(CONFIG_MMC)
301 static struct andr_img_hdr boothdr __aligned(ARCH_DMA_MINALIGN); 301 static struct andr_img_hdr boothdr __aligned(ARCH_DMA_MINALIGN);
302 #endif 302 #endif
303 303
304 #ifdef CONFIG_IMX_TRUSTY_OS 304 #ifdef CONFIG_IMX_TRUSTY_OS
305 #if defined(CONFIG_DUAL_BOOTLOADER) && defined(CONFIG_AVB_ATX) 305 #if defined(CONFIG_DUAL_BOOTLOADER) && defined(CONFIG_AVB_ATX)
306 static int sha256_concatenation(uint8_t *hash_buf, uint8_t *vbh, uint8_t *image_hash) 306 static int sha256_concatenation(uint8_t *hash_buf, uint8_t *vbh, uint8_t *image_hash)
307 { 307 {
308 if ((hash_buf == NULL) || (vbh == NULL) || (image_hash == NULL)) { 308 if ((hash_buf == NULL) || (vbh == NULL) || (image_hash == NULL)) {
309 printf("sha256_concatenation: null buffer found!\n"); 309 printf("sha256_concatenation: null buffer found!\n");
310 return -1; 310 return -1;
311 } 311 }
312 312
313 memcpy(hash_buf, vbh, AVB_SHA256_DIGEST_SIZE); 313 memcpy(hash_buf, vbh, AVB_SHA256_DIGEST_SIZE);
314 memcpy(hash_buf + AVB_SHA256_DIGEST_SIZE, 314 memcpy(hash_buf + AVB_SHA256_DIGEST_SIZE,
315 image_hash, AVB_SHA256_DIGEST_SIZE); 315 image_hash, AVB_SHA256_DIGEST_SIZE);
316 sha256_csum_wd((unsigned char *)hash_buf, 2 * AVB_SHA256_DIGEST_SIZE, 316 sha256_csum_wd((unsigned char *)hash_buf, 2 * AVB_SHA256_DIGEST_SIZE,
317 (unsigned char *)vbh, CHUNKSZ_SHA256); 317 (unsigned char *)vbh, CHUNKSZ_SHA256);
318 318
319 return 0; 319 return 0;
320 } 320 }
321 321
322 /* Since we use fit format to organize the atf, tee, u-boot and u-boot dtb, 322 /* Since we use fit format to organize the atf, tee, u-boot and u-boot dtb,
323 * so calculate the hash of fit is enough. 323 * so calculate the hash of fit is enough.
324 */ 324 */
325 static int vbh_bootloader(uint8_t *image_hash) 325 static int vbh_bootloader(uint8_t *image_hash)
326 { 326 {
327 char* slot_suffixes[2] = {"_a", "_b"}; 327 char* slot_suffixes[2] = {"_a", "_b"};
328 char partition_name[20]; 328 char partition_name[20];
329 AvbABData ab_data; 329 AvbABData ab_data;
330 uint8_t *image_buf = NULL; 330 uint8_t *image_buf = NULL;
331 uint32_t image_size; 331 uint32_t image_size;
332 size_t image_num_read; 332 size_t image_num_read;
333 int target_slot; 333 int target_slot;
334 int ret = 0; 334 int ret = 0;
335 335
336 /* Load A/B metadata and decide which slot we are going to load */ 336 /* Load A/B metadata and decide which slot we are going to load */
337 if (fsl_avb_ab_ops.read_ab_metadata(&fsl_avb_ab_ops, &ab_data) != 337 if (fsl_avb_ab_ops.read_ab_metadata(&fsl_avb_ab_ops, &ab_data) !=
338 AVB_IO_RESULT_OK) { 338 AVB_IO_RESULT_OK) {
339 ret = -1; 339 ret = -1;
340 goto fail ; 340 goto fail ;
341 } 341 }
342 target_slot = get_curr_slot(&ab_data); 342 target_slot = get_curr_slot(&ab_data);
343 sprintf(partition_name, "bootloader%s", slot_suffixes[target_slot]); 343 sprintf(partition_name, "bootloader%s", slot_suffixes[target_slot]);
344 344
345 /* Read image header to find the image size */ 345 /* Read image header to find the image size */
346 image_buf = (uint8_t *)malloc(MMC_SATA_BLOCK_SIZE); 346 image_buf = (uint8_t *)malloc(MMC_SATA_BLOCK_SIZE);
347 if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, partition_name, 347 if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, partition_name,
348 0, MMC_SATA_BLOCK_SIZE, 348 0, MMC_SATA_BLOCK_SIZE,
349 image_buf, &image_num_read)) { 349 image_buf, &image_num_read)) {
350 printf("bootloader image load error!\n"); 350 printf("bootloader image load error!\n");
351 ret = -1; 351 ret = -1;
352 goto fail; 352 goto fail;
353 } 353 }
354 image_size = fdt_totalsize((struct image_header *)image_buf); 354 image_size = fdt_totalsize((struct image_header *)image_buf);
355 image_size = (image_size + 3) & ~3; 355 image_size = (image_size + 3) & ~3;
356 free(image_buf); 356 free(image_buf);
357 357
358 /* Load full fit image */ 358 /* Load full fit image */
359 image_buf = (uint8_t *)malloc(image_size); 359 image_buf = (uint8_t *)malloc(image_size);
360 if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, partition_name, 360 if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, partition_name,
361 0, image_size, 361 0, image_size,
362 image_buf, &image_num_read)) { 362 image_buf, &image_num_read)) {
363 printf("bootloader image load error!\n"); 363 printf("bootloader image load error!\n");
364 ret = -1; 364 ret = -1;
365 goto fail; 365 goto fail;
366 } 366 }
367 /* Calculate hash */ 367 /* Calculate hash */
368 sha256_csum_wd((unsigned char *)image_buf, image_size, 368 sha256_csum_wd((unsigned char *)image_buf, image_size,
369 (unsigned char *)image_hash, CHUNKSZ_SHA256); 369 (unsigned char *)image_hash, CHUNKSZ_SHA256);
370 370
371 fail: 371 fail:
372 if (image_buf != NULL) 372 if (image_buf != NULL)
373 free(image_buf); 373 free(image_buf);
374 return ret; 374 return ret;
375 } 375 }
376 376
377 int vbh_calculate(uint8_t *vbh, AvbSlotVerifyData *avb_out_data) 377 int vbh_calculate(uint8_t *vbh, AvbSlotVerifyData *avb_out_data)
378 { 378 {
379 uint8_t image_hash[AVB_SHA256_DIGEST_SIZE]; 379 uint8_t image_hash[AVB_SHA256_DIGEST_SIZE];
380 uint8_t hash_buf[2 * AVB_SHA256_DIGEST_SIZE]; 380 uint8_t hash_buf[2 * AVB_SHA256_DIGEST_SIZE];
381 uint8_t* image_buf = NULL; 381 uint8_t* image_buf = NULL;
382 uint32_t image_size; 382 uint32_t image_size;
383 size_t image_num_read; 383 size_t image_num_read;
384 int ret = 0; 384 int ret = 0;
385 385
386 if (vbh == NULL) 386 if (vbh == NULL)
387 return -1; 387 return -1;
388 388
389 /* Initial VBH (VBH0) should be 32 bytes 0 */ 389 /* Initial VBH (VBH0) should be 32 bytes 0 */
390 memset(vbh, 0, AVB_SHA256_DIGEST_SIZE); 390 memset(vbh, 0, AVB_SHA256_DIGEST_SIZE);
391 /* Load and calculate the sha256 hash of spl.bin */ 391 /* Load and calculate the sha256 hash of spl.bin */
392 image_size = (ANDROID_SPL_SIZE + MMC_SATA_BLOCK_SIZE -1) / 392 image_size = (ANDROID_SPL_SIZE + MMC_SATA_BLOCK_SIZE -1) /
393 MMC_SATA_BLOCK_SIZE; 393 MMC_SATA_BLOCK_SIZE;
394 image_buf = (uint8_t *)malloc(image_size); 394 image_buf = (uint8_t *)malloc(image_size);
395 if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, 395 if (fsl_avb_ops.read_from_partition(&fsl_avb_ops,
396 FASTBOOT_PARTITION_BOOTLOADER, 396 FASTBOOT_PARTITION_BOOTLOADER,
397 0, image_size, 397 0, image_size,
398 image_buf, &image_num_read)) { 398 image_buf, &image_num_read)) {
399 printf("spl image load error!\n"); 399 printf("spl image load error!\n");
400 ret = -1; 400 ret = -1;
401 goto fail; 401 goto fail;
402 } 402 }
403 sha256_csum_wd((unsigned char *)image_buf, image_size, 403 sha256_csum_wd((unsigned char *)image_buf, image_size,
404 (unsigned char *)image_hash, CHUNKSZ_SHA256); 404 (unsigned char *)image_hash, CHUNKSZ_SHA256);
405 /* Calculate VBH1 */ 405 /* Calculate VBH1 */
406 if (sha256_concatenation(hash_buf, vbh, image_hash)) { 406 if (sha256_concatenation(hash_buf, vbh, image_hash)) {
407 ret = -1; 407 ret = -1;
408 goto fail; 408 goto fail;
409 } 409 }
410 free(image_buf); 410 free(image_buf);
411 411
412 /* Load and calculate hash of bootloader.img */ 412 /* Load and calculate hash of bootloader.img */
413 if (vbh_bootloader(image_hash)) { 413 if (vbh_bootloader(image_hash)) {
414 ret = -1; 414 ret = -1;
415 goto fail; 415 goto fail;
416 } 416 }
417 417
418 /* Calculate VBH2 */ 418 /* Calculate VBH2 */
419 if (sha256_concatenation(hash_buf, vbh, image_hash)) { 419 if (sha256_concatenation(hash_buf, vbh, image_hash)) {
420 ret = -1; 420 ret = -1;
421 goto fail; 421 goto fail;
422 } 422 }
423 423
424 /* Calculate the hash of vbmeta.img */ 424 /* Calculate the hash of vbmeta.img */
425 avb_slot_verify_data_calculate_vbmeta_digest(avb_out_data, 425 avb_slot_verify_data_calculate_vbmeta_digest(avb_out_data,
426 AVB_DIGEST_TYPE_SHA256, 426 AVB_DIGEST_TYPE_SHA256,
427 image_hash); 427 image_hash);
428 /* Calculate VBH3 */ 428 /* Calculate VBH3 */
429 if (sha256_concatenation(hash_buf, vbh, image_hash)) { 429 if (sha256_concatenation(hash_buf, vbh, image_hash)) {
430 ret = -1; 430 ret = -1;
431 goto fail; 431 goto fail;
432 } 432 }
433 433
434 fail: 434 fail:
435 if (image_buf != NULL) 435 if (image_buf != NULL)
436 free(image_buf); 436 free(image_buf);
437 return ret; 437 return ret;
438 } 438 }
439 #endif /* CONFIG_DUAL_BOOTLOADER && CONFIG_AVB_ATX */ 439 #endif /* CONFIG_DUAL_BOOTLOADER && CONFIG_AVB_ATX */
440 440
441 int trusty_setbootparameter(struct andr_img_hdr *hdr, AvbABFlowResult avb_result, 441 int trusty_setbootparameter(struct andr_img_hdr *hdr, AvbABFlowResult avb_result,
442 AvbSlotVerifyData *avb_out_data) { 442 AvbSlotVerifyData *avb_out_data) {
443 #if defined(CONFIG_DUAL_BOOTLOADER) && defined(CONFIG_AVB_ATX) 443 #if defined(CONFIG_DUAL_BOOTLOADER) && defined(CONFIG_AVB_ATX)
444 uint8_t vbh[AVB_SHA256_DIGEST_SIZE]; 444 uint8_t vbh[AVB_SHA256_DIGEST_SIZE];
445 #endif 445 #endif
446 int ret = 0; 446 int ret = 0;
447 u32 os_ver = hdr->os_version >> 11; 447 u32 os_ver = hdr->os_version >> 11;
448 u32 os_ver_km = (((os_ver >> 14) & 0x7F) * 100 + ((os_ver >> 7) & 0x7F)) * 100 448 u32 os_ver_km = (((os_ver >> 14) & 0x7F) * 100 + ((os_ver >> 7) & 0x7F)) * 100
449 + (os_ver & 0x7F); 449 + (os_ver & 0x7F);
450 u32 os_lvl = hdr->os_version & ((1U << 11) - 1); 450 u32 os_lvl = hdr->os_version & ((1U << 11) - 1);
451 u32 os_lvl_km = ((os_lvl >> 4) + 2000) * 100 + (os_lvl & 0x0F); 451 u32 os_lvl_km = ((os_lvl >> 4) + 2000) * 100 + (os_lvl & 0x0F);
452 keymaster_verified_boot_t vbstatus; 452 keymaster_verified_boot_t vbstatus;
453 FbLockState lock_status = fastboot_get_lock_stat(); 453 FbLockState lock_status = fastboot_get_lock_stat();
454 454
455 uint8_t boot_key_hash[AVB_SHA256_DIGEST_SIZE]; 455 uint8_t boot_key_hash[AVB_SHA256_DIGEST_SIZE];
456 #ifdef CONFIG_AVB_ATX 456 #ifdef CONFIG_AVB_ATX
457 if (fsl_read_permanent_attributes_hash(&fsl_avb_atx_ops, boot_key_hash)) { 457 if (fsl_read_permanent_attributes_hash(&fsl_avb_atx_ops, boot_key_hash)) {
458 printf("ERROR - failed to read permanent attributes hash for keymaster\n"); 458 printf("ERROR - failed to read permanent attributes hash for keymaster\n");
459 memset(boot_key_hash, 0, AVB_SHA256_DIGEST_SIZE); 459 memset(boot_key_hash, 0, AVB_SHA256_DIGEST_SIZE);
460 } 460 }
461 #else 461 #else
462 uint8_t public_key_buf[AVB_MAX_BUFFER_LENGTH]; 462 uint8_t public_key_buf[AVB_MAX_BUFFER_LENGTH];
463 if (trusty_read_vbmeta_public_key(public_key_buf, 463 if (trusty_read_vbmeta_public_key(public_key_buf,
464 AVB_MAX_BUFFER_LENGTH) != 0) { 464 AVB_MAX_BUFFER_LENGTH) != 0) {
465 printf("ERROR - failed to read public key for keymaster\n"); 465 printf("ERROR - failed to read public key for keymaster\n");
466 memset(boot_key_hash, 0, AVB_SHA256_DIGEST_SIZE); 466 memset(boot_key_hash, 0, AVB_SHA256_DIGEST_SIZE);
467 } else 467 } else
468 sha256_csum_wd((unsigned char *)public_key_buf, AVB_SHA256_DIGEST_SIZE, 468 sha256_csum_wd((unsigned char *)public_key_buf, AVB_SHA256_DIGEST_SIZE,
469 (unsigned char *)boot_key_hash, CHUNKSZ_SHA256); 469 (unsigned char *)boot_key_hash, CHUNKSZ_SHA256);
470 #endif 470 #endif
471 471
472 bool lock = (lock_status == FASTBOOT_LOCK)? true: false; 472 bool lock = (lock_status == FASTBOOT_LOCK)? true: false;
473 if (avb_result == AVB_AB_FLOW_RESULT_OK) 473 if (avb_result == AVB_AB_FLOW_RESULT_OK)
474 vbstatus = KM_VERIFIED_BOOT_VERIFIED; 474 vbstatus = KM_VERIFIED_BOOT_VERIFIED;
475 else 475 else
476 vbstatus = KM_VERIFIED_BOOT_FAILED; 476 vbstatus = KM_VERIFIED_BOOT_FAILED;
477 477
478 /* Calculate VBH */ 478 /* Calculate VBH */
479 #if defined(CONFIG_DUAL_BOOTLOADER) && defined(CONFIG_AVB_ATX) 479 #if defined(CONFIG_DUAL_BOOTLOADER) && defined(CONFIG_AVB_ATX)
480 if (vbh_calculate(vbh, avb_out_data)) { 480 if (vbh_calculate(vbh, avb_out_data)) {
481 ret = -1; 481 ret = -1;
482 goto fail; 482 goto fail;
483 } 483 }
484 484
485 trusty_set_boot_params(os_ver_km, os_lvl_km, vbstatus, lock, 485 trusty_set_boot_params(os_ver_km, os_lvl_km, vbstatus, lock,
486 boot_key_hash, AVB_SHA256_DIGEST_SIZE, 486 boot_key_hash, AVB_SHA256_DIGEST_SIZE,
487 vbh, AVB_SHA256_DIGEST_SIZE); 487 vbh, AVB_SHA256_DIGEST_SIZE);
488 #else 488 #else
489 trusty_set_boot_params(os_ver_km, os_lvl_km, vbstatus, lock, 489 trusty_set_boot_params(os_ver_km, os_lvl_km, vbstatus, lock,
490 boot_key_hash, AVB_SHA256_DIGEST_SIZE, 490 boot_key_hash, AVB_SHA256_DIGEST_SIZE,
491 NULL, 0); 491 NULL, 0);
492 #endif 492 #endif
493 493
494 fail: 494 fail:
495 return ret; 495 return ret;
496 } 496 }
497 #endif 497 #endif
498 498
499 #if defined(CONFIG_AVB_SUPPORT) && defined(CONFIG_MMC) 499 #if defined(CONFIG_AVB_SUPPORT) && defined(CONFIG_MMC)
500 /* we can use avb to verify Trusty if we want */ 500 /* we can use avb to verify Trusty if we want */
501 const char *requested_partitions_boot[] = {"boot", FDT_PART_NAME, NULL}; 501 const char *requested_partitions_boot[] = {"boot", FDT_PART_NAME, NULL};
502 const char *requested_partitions_recovery[] = {"recovery", FDT_PART_NAME, NULL}; 502 const char *requested_partitions_recovery[] = {"recovery", FDT_PART_NAME, NULL};
503 503
504 static bool is_load_fdt_from_part(void) 504 static bool is_load_fdt_from_part(void)
505 { 505 {
506 bool ptn_find; 506 bool ptn_find;
507 507
508 #if defined(CONFIG_ANDROID_THINGS_SUPPORT) 508 #if defined(CONFIG_ANDROID_THINGS_SUPPORT)
509 ptn_find = fastboot_flash_find_ptn("oem_bootloader_a") && 509 ptn_find = fastboot_flash_find_ptn("oem_bootloader_a") &&
510 fastboot_flash_find_ptn("oem_bootloader_b"); 510 fastboot_flash_find_ptn("oem_bootloader_b");
511 #elif defined(CONFIG_ANDROID_AB_SUPPORT) 511 #elif defined(CONFIG_ANDROID_AB_SUPPORT)
512 ptn_find = fastboot_flash_find_ptn("dtbo_a") && 512 ptn_find = fastboot_flash_find_ptn("dtbo_a") &&
513 fastboot_flash_find_ptn("dtbo_b"); 513 fastboot_flash_find_ptn("dtbo_b");
514 #else 514 #else
515 ptn_find = fastboot_flash_find_ptn("dtbo"); 515 ptn_find = fastboot_flash_find_ptn("dtbo");
516 #endif 516 #endif
517 517
518 if (ptn_find) 518 if (ptn_find)
519 return true; 519 return true;
520 else 520 else
521 return false; 521 return false;
522 } 522 }
523 523
524 static int find_partition_data_by_name(char* part_name, 524 static int find_partition_data_by_name(char* part_name,
525 AvbSlotVerifyData* avb_out_data, AvbPartitionData** avb_loadpart) 525 AvbSlotVerifyData* avb_out_data, AvbPartitionData** avb_loadpart)
526 { 526 {
527 int num = 0; 527 int num = 0;
528 AvbPartitionData* loadpart = NULL; 528 AvbPartitionData* loadpart = NULL;
529 529
530 for (num = 0; num < avb_out_data->num_loaded_partitions; num++) { 530 for (num = 0; num < avb_out_data->num_loaded_partitions; num++) {
531 loadpart = &(avb_out_data->loaded_partitions[num]); 531 loadpart = &(avb_out_data->loaded_partitions[num]);
532 if (!(strncmp(loadpart->partition_name, 532 if (!(strncmp(loadpart->partition_name,
533 part_name, strlen(part_name)))) { 533 part_name, strlen(part_name)))) {
534 *avb_loadpart = loadpart; 534 *avb_loadpart = loadpart;
535 break; 535 break;
536 } 536 }
537 } 537 }
538 if (num == avb_out_data->num_loaded_partitions) { 538 if (num == avb_out_data->num_loaded_partitions) {
539 printf("Error! Can't find %s partition from avb partition data!\n", 539 printf("Error! Can't find %s partition from avb partition data!\n",
540 part_name); 540 part_name);
541 return -1; 541 return -1;
542 } 542 }
543 else 543 else
544 return 0; 544 return 0;
545 } 545 }
546 546
547 bool __weak is_power_key_pressed(void) {
548 return false;
549 }
550
547 int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { 551 int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
548 552
549 ulong addr = 0; 553 ulong addr = 0;
550 struct andr_img_hdr *hdr = NULL; 554 struct andr_img_hdr *hdr = NULL;
551 ulong image_size; 555 ulong image_size;
552 u32 avb_metric; 556 u32 avb_metric;
553 bool check_image_arm64 = false; 557 bool check_image_arm64 = false;
554 bool is_recovery_mode = false; 558 bool is_recovery_mode = false;
555 559
556 AvbABFlowResult avb_result; 560 AvbABFlowResult avb_result;
557 AvbSlotVerifyData *avb_out_data = NULL; 561 AvbSlotVerifyData *avb_out_data = NULL;
558 AvbPartitionData *avb_loadpart = NULL; 562 AvbPartitionData *avb_loadpart = NULL;
559 563
560 /* get bootmode, default to boot "boot" */ 564 /* get bootmode, default to boot "boot" */
561 if (argc > 1) { 565 if (argc > 1) {
562 is_recovery_mode = 566 is_recovery_mode =
563 (strncmp(argv[1], "recovery", sizeof("recovery")) != 0) ? false: true; 567 (strncmp(argv[1], "recovery", sizeof("recovery")) != 0) ? false: true;
564 if (is_recovery_mode) 568 if (is_recovery_mode)
565 printf("Will boot from recovery!\n"); 569 printf("Will boot from recovery!\n");
566 } 570 }
567 571
568 /* check lock state */ 572 /* check lock state */
569 FbLockState lock_status = fastboot_get_lock_stat(); 573 FbLockState lock_status = fastboot_get_lock_stat();
570 if (lock_status == FASTBOOT_LOCK_ERROR) { 574 if (lock_status == FASTBOOT_LOCK_ERROR) {
571 #ifdef CONFIG_AVB_ATX 575 #ifdef CONFIG_AVB_ATX
572 printf("In boota get fastboot lock status error, enter fastboot mode.\n"); 576 printf("In boota get fastboot lock status error, enter fastboot mode.\n");
573 goto fail; 577 goto fail;
574 #else 578 #else
575 printf("In boota get fastboot lock status error. Set lock status\n"); 579 printf("In boota get fastboot lock status error. Set lock status\n");
576 fastboot_set_lock_stat(FASTBOOT_LOCK); 580 fastboot_set_lock_stat(FASTBOOT_LOCK);
577 lock_status = FASTBOOT_LOCK; 581 lock_status = FASTBOOT_LOCK;
578 #endif 582 #endif
579 } 583 }
580 bool allow_fail = (lock_status == FASTBOOT_UNLOCK ? true : false); 584 bool allow_fail = (lock_status == FASTBOOT_UNLOCK ? true : false);
581 avb_metric = get_timer(0); 585 avb_metric = get_timer(0);
582 /* we don't need to verify fdt partition if we don't have it. */ 586 /* we don't need to verify fdt partition if we don't have it. */
583 if (!is_load_fdt_from_part()) { 587 if (!is_load_fdt_from_part()) {
584 requested_partitions_boot[1] = NULL; 588 requested_partitions_boot[1] = NULL;
585 requested_partitions_recovery[1] = NULL; 589 requested_partitions_recovery[1] = NULL;
586 } 590 }
587 #ifndef CONFIG_SYSTEM_RAMDISK_SUPPORT 591 #ifndef CONFIG_SYSTEM_RAMDISK_SUPPORT
588 else if (is_recovery_mode){ 592 else if (is_recovery_mode){
589 requested_partitions_recovery[1] = NULL; 593 requested_partitions_recovery[1] = NULL;
590 } 594 }
591 #endif 595 #endif
592 596
593 /* if in lock state, do avb verify */ 597 /* if in lock state, do avb verify */
594 #ifndef CONFIG_DUAL_BOOTLOADER 598 #ifndef CONFIG_DUAL_BOOTLOADER
595 /* For imx6 on Android, we don't have a/b slot and we want to verify 599 /* For imx6 on Android, we don't have a/b slot and we want to verify
596 * boot/recovery with AVB. For imx8 and Android Things we don't have 600 * boot/recovery with AVB. For imx8 and Android Things we don't have
597 * recovery and support a/b slot for boot */ 601 * recovery and support a/b slot for boot */
598 #ifdef CONFIG_ANDROID_AB_SUPPORT 602 #ifdef CONFIG_ANDROID_AB_SUPPORT
599 /* we can use avb to verify Trusty if we want */ 603 /* we can use avb to verify Trusty if we want */
600 avb_result = avb_ab_flow_fast(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail, 604 avb_result = avb_ab_flow_fast(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail,
601 AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE, &avb_out_data); 605 AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE, &avb_out_data);
602 #else 606 #else
603 #ifndef CONFIG_SYSTEM_RAMDISK_SUPPORT 607 #ifndef CONFIG_SYSTEM_RAMDISK_SUPPORT
604 if (!is_recovery_mode) { 608 if (!is_recovery_mode) {
605 avb_result = avb_single_flow(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail, 609 avb_result = avb_single_flow(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail,
606 AVB_HASHTREE_ERROR_MODE_RESTART, &avb_out_data); 610 AVB_HASHTREE_ERROR_MODE_RESTART, &avb_out_data);
607 } else { 611 } else {
608 avb_result = avb_single_flow(&fsl_avb_ab_ops, requested_partitions_recovery, allow_fail, 612 avb_result = avb_single_flow(&fsl_avb_ab_ops, requested_partitions_recovery, allow_fail,
609 AVB_HASHTREE_ERROR_MODE_RESTART, &avb_out_data); 613 AVB_HASHTREE_ERROR_MODE_RESTART, &avb_out_data);
610 } 614 }
611 #else /* CONFIG_SYSTEM_RAMDISK_SUPPORT defined */ 615 #else /* CONFIG_SYSTEM_RAMDISK_SUPPORT defined */
612 avb_result = avb_single_flow(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail, 616 avb_result = avb_single_flow(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail,
613 AVB_HASHTREE_ERROR_MODE_RESTART, &avb_out_data); 617 AVB_HASHTREE_ERROR_MODE_RESTART, &avb_out_data);
614 #endif /*CONFIG_SYSTEM_RAMDISK_SUPPORT*/ 618 #endif /*CONFIG_SYSTEM_RAMDISK_SUPPORT*/
615 #endif 619 #endif
616 #else /* !CONFIG_DUAL_BOOTLOADER */ 620 #else /* !CONFIG_DUAL_BOOTLOADER */
617 /* We will only verify single one slot which has been selected in SPL */ 621 /* We will only verify single one slot which has been selected in SPL */
618 avb_result = avb_flow_dual_uboot(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail, 622 avb_result = avb_flow_dual_uboot(&fsl_avb_ab_ops, requested_partitions_boot, allow_fail,
619 AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE, &avb_out_data); 623 AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE, &avb_out_data);
620 624
621 /* Reboot if current slot is not bootable. */ 625 /* Reboot if current slot is not bootable. */
622 if (avb_result == AVB_AB_FLOW_RESULT_ERROR_NO_BOOTABLE_SLOTS) { 626 if (avb_result == AVB_AB_FLOW_RESULT_ERROR_NO_BOOTABLE_SLOTS) {
623 printf("boota: slot verify fail!\n"); 627 printf("boota: slot verify fail!\n");
624 do_reset(NULL, 0, 0, NULL); 628 do_reset(NULL, 0, 0, NULL);
625 } 629 }
626 #endif /* !CONFIG_DUAL_BOOTLOADER */ 630 #endif /* !CONFIG_DUAL_BOOTLOADER */
627 631
628 /* get the duration of avb */ 632 /* get the duration of avb */
629 metrics.avb = get_timer(avb_metric); 633 metrics.avb = get_timer(avb_metric);
630 634
631 if ((avb_result == AVB_AB_FLOW_RESULT_OK) || 635 if ((avb_result == AVB_AB_FLOW_RESULT_OK) ||
632 (avb_result == AVB_AB_FLOW_RESULT_OK_WITH_VERIFICATION_ERROR)) { 636 (avb_result == AVB_AB_FLOW_RESULT_OK_WITH_VERIFICATION_ERROR)) {
633 assert(avb_out_data != NULL); 637 assert(avb_out_data != NULL);
634 /* We may have more than one partition loaded by AVB, find the boot 638 /* We may have more than one partition loaded by AVB, find the boot
635 * partition first. 639 * partition first.
636 */ 640 */
637 #ifdef CONFIG_SYSTEM_RAMDISK_SUPPORT 641 #ifdef CONFIG_SYSTEM_RAMDISK_SUPPORT
638 if (find_partition_data_by_name("boot", avb_out_data, &avb_loadpart)) 642 if (find_partition_data_by_name("boot", avb_out_data, &avb_loadpart))
639 goto fail; 643 goto fail;
640 #else 644 #else
641 if (!is_recovery_mode) { 645 if (!is_recovery_mode) {
642 if (find_partition_data_by_name("boot", avb_out_data, &avb_loadpart)) 646 if (find_partition_data_by_name("boot", avb_out_data, &avb_loadpart))
643 goto fail; 647 goto fail;
644 } else { 648 } else {
645 if (find_partition_data_by_name("recovery", avb_out_data, &avb_loadpart)) 649 if (find_partition_data_by_name("recovery", avb_out_data, &avb_loadpart))
646 goto fail; 650 goto fail;
647 } 651 }
648 #endif 652 #endif
649 assert(avb_loadpart != NULL); 653 assert(avb_loadpart != NULL);
650 /* we should use avb_part_data->data as boot image */ 654 /* we should use avb_part_data->data as boot image */
651 /* boot image is already read by avb */ 655 /* boot image is already read by avb */
652 hdr = (struct andr_img_hdr *)avb_loadpart->data; 656 hdr = (struct andr_img_hdr *)avb_loadpart->data;
653 if (android_image_check_header(hdr)) { 657 if (android_image_check_header(hdr)) {
654 printf("boota: bad boot image magic\n"); 658 printf("boota: bad boot image magic\n");
655 goto fail; 659 goto fail;
656 } 660 }
657 if (avb_result == AVB_AB_FLOW_RESULT_OK) 661 if (avb_result == AVB_AB_FLOW_RESULT_OK)
658 printf(" verify OK, boot '%s%s'\n", 662 printf(" verify OK, boot '%s%s'\n",
659 avb_loadpart->partition_name, avb_out_data->ab_suffix); 663 avb_loadpart->partition_name, avb_out_data->ab_suffix);
660 else { 664 else {
661 printf(" verify FAIL, state: UNLOCK\n"); 665 printf(" verify FAIL, state: UNLOCK\n");
662 printf(" boot '%s%s' still\n", 666 printf(" boot '%s%s' still\n",
663 avb_loadpart->partition_name, avb_out_data->ab_suffix); 667 avb_loadpart->partition_name, avb_out_data->ab_suffix);
664 } 668 }
665 char bootargs_sec[ANDR_BOOT_EXTRA_ARGS_SIZE]; 669 char bootargs_sec[ANDR_BOOT_EXTRA_ARGS_SIZE];
666 if (lock_status == FASTBOOT_LOCK) { 670 if (lock_status == FASTBOOT_LOCK) {
667 snprintf(bootargs_sec, sizeof(bootargs_sec), 671 snprintf(bootargs_sec, sizeof(bootargs_sec),
668 "androidboot.verifiedbootstate=green androidboot.flash.locked=1 androidboot.slot_suffix=%s ", 672 "androidboot.verifiedbootstate=green androidboot.flash.locked=1 androidboot.slot_suffix=%s ",
669 avb_out_data->ab_suffix); 673 avb_out_data->ab_suffix);
670 } else { 674 } else {
671 snprintf(bootargs_sec, sizeof(bootargs_sec), 675 snprintf(bootargs_sec, sizeof(bootargs_sec),
672 "androidboot.verifiedbootstate=orange androidboot.flash.locked=0 androidboot.slot_suffix=%s ", 676 "androidboot.verifiedbootstate=orange androidboot.flash.locked=0 androidboot.slot_suffix=%s ",
673 avb_out_data->ab_suffix); 677 avb_out_data->ab_suffix);
674 } 678 }
675 strcat(bootargs_sec, avb_out_data->cmdline); 679 strcat(bootargs_sec, avb_out_data->cmdline);
676 #ifndef CONFIG_ANDROID_AUTO_SUPPORT 680 #ifndef CONFIG_ANDROID_AUTO_SUPPORT
677 /* for standard android, recovery ramdisk will be used anyway, to 681 /* for standard android, recovery ramdisk will be used anyway, to
678 * boot up Android, "androidboot.force_normal_boot=1" is needed */ 682 * boot up Android, "androidboot.force_normal_boot=1" is needed */
679 if(!is_recovery_mode) { 683 if(!is_recovery_mode) {
680 strcat(bootargs_sec, " androidboot.force_normal_boot=1"); 684 strcat(bootargs_sec, " androidboot.force_normal_boot=1");
681 } 685 }
682 #endif 686 #endif
683 env_set("bootargs_sec", bootargs_sec); 687 env_set("bootargs_sec", bootargs_sec);
684 #if defined CONFIG_SYSTEM_RAMDISK_SUPPORT && defined CONFIG_ANDROID_AUTO_SUPPORT 688 #if defined CONFIG_SYSTEM_RAMDISK_SUPPORT && defined CONFIG_ANDROID_AUTO_SUPPORT
685 if(!is_recovery_mode) { 689 if(!is_recovery_mode) {
686 if(avb_out_data->cmdline != NULL && strstr(avb_out_data->cmdline, "root=")) 690 if(avb_out_data->cmdline != NULL && strstr(avb_out_data->cmdline, "root="))
687 fastboot_setup_system_boot_args(avb_out_data->ab_suffix, false); 691 fastboot_setup_system_boot_args(avb_out_data->ab_suffix, false);
688 else 692 else
689 fastboot_setup_system_boot_args(avb_out_data->ab_suffix, true); 693 fastboot_setup_system_boot_args(avb_out_data->ab_suffix, true);
690 } 694 }
691 #endif /* CONFIG_SYSTEM_RAMDISK_SUPPORT */ 695 #endif /* CONFIG_SYSTEM_RAMDISK_SUPPORT */
692 image_size = avb_loadpart->data_size; 696 image_size = avb_loadpart->data_size;
693 #if defined (CONFIG_ARCH_IMX8) || defined (CONFIG_ARCH_IMX8M) 697 #if defined (CONFIG_ARCH_IMX8) || defined (CONFIG_ARCH_IMX8M)
694 /* If we are using uncompressed kernel image, copy it directly to 698 /* If we are using uncompressed kernel image, copy it directly to
695 * hdr->kernel_addr, if we are using compressed lz4 kernel image, 699 * hdr->kernel_addr, if we are using compressed lz4 kernel image,
696 * we need to decompress the kernel image first. */ 700 * we need to decompress the kernel image first. */
697 if (image_arm64((void *)((ulong)hdr + hdr->page_size))) { 701 if (image_arm64((void *)((ulong)hdr + hdr->page_size))) {
698 memcpy((void *)(long)hdr->kernel_addr, 702 memcpy((void *)(long)hdr->kernel_addr,
699 (void *)((ulong)hdr + hdr->page_size), hdr->kernel_size); 703 (void *)((ulong)hdr + hdr->page_size), hdr->kernel_size);
700 } else { 704 } else {
701 #ifdef CONFIG_LZ4 705 #ifdef CONFIG_LZ4
702 size_t lz4_len = MAX_KERNEL_LEN; 706 size_t lz4_len = MAX_KERNEL_LEN;
703 if (ulz4fn((void *)((ulong)hdr + hdr->page_size), 707 if (ulz4fn((void *)((ulong)hdr + hdr->page_size),
704 hdr->kernel_size, (void *)(ulong)hdr->kernel_addr, &lz4_len) != 0) { 708 hdr->kernel_size, (void *)(ulong)hdr->kernel_addr, &lz4_len) != 0) {
705 printf("Decompress kernel fail!\n"); 709 printf("Decompress kernel fail!\n");
706 goto fail; 710 goto fail;
707 } 711 }
708 #else /* CONFIG_LZ4 */ 712 #else /* CONFIG_LZ4 */
709 printf("please enable CONFIG_LZ4 if we're using compressed lz4 kernel image!\n"); 713 printf("please enable CONFIG_LZ4 if we're using compressed lz4 kernel image!\n");
710 goto fail; 714 goto fail;
711 #endif /* CONFIG_LZ4 */ 715 #endif /* CONFIG_LZ4 */
712 } 716 }
713 #else /* CONFIG_ARCH_IMX8 || CONFIG_ARCH_IMX8M */ 717 #else /* CONFIG_ARCH_IMX8 || CONFIG_ARCH_IMX8M */
714 /* copy kernel image and boot header to hdr->kernel_addr - hdr->page_size */ 718 /* copy kernel image and boot header to hdr->kernel_addr - hdr->page_size */
715 memcpy((void *)(ulong)(hdr->kernel_addr - hdr->page_size), (void *)hdr, 719 memcpy((void *)(ulong)(hdr->kernel_addr - hdr->page_size), (void *)hdr,
716 hdr->page_size + ALIGN(hdr->kernel_size, hdr->page_size)); 720 hdr->page_size + ALIGN(hdr->kernel_size, hdr->page_size));
717 #endif /* CONFIG_ARCH_IMX8 || CONFIG_ARCH_IMX8M */ 721 #endif /* CONFIG_ARCH_IMX8 || CONFIG_ARCH_IMX8M */
718 } else { 722 } else {
719 /* Fall into fastboot mode if get unacceptable error from avb 723 /* Fall into fastboot mode if get unacceptable error from avb
720 * or verify fail in lock state. 724 * or verify fail in lock state.
721 */ 725 */
722 if (lock_status == FASTBOOT_LOCK) 726 if (lock_status == FASTBOOT_LOCK)
723 printf(" verify FAIL, state: LOCK\n"); 727 printf(" verify FAIL, state: LOCK\n");
724 728
725 goto fail; 729 goto fail;
726 } 730 }
731
732 /* Show orange warning for unlocked device, press power button to skip. */
733 #ifdef CONFIG_AVB_WARNING_LOGO
734 if (fastboot_get_lock_stat() == FASTBOOT_UNLOCK) {
735 int count = 0;
736
737 printf("Device is unlocked, press power key to skip warning logo... \n");
738 if (display_unlock_warning())
739 printf("can't show unlock warning.\n");
740 while ( (count < 10 * CONFIG_AVB_WARNING_TIME_LAST) && !is_power_key_pressed()) {
741 mdelay(100);
742 count++;
743 }
744 }
745 #endif
727 746
728 flush_cache((ulong)image_load_addr, image_size); 747 flush_cache((ulong)image_load_addr, image_size);
729 check_image_arm64 = image_arm64((void *)(ulong)hdr->kernel_addr); 748 check_image_arm64 = image_arm64((void *)(ulong)hdr->kernel_addr);
730 #if !defined(CONFIG_SYSTEM_RAMDISK_SUPPORT) || !defined(CONFIG_ANDROID_AUTO_SUPPORT) 749 #if !defined(CONFIG_SYSTEM_RAMDISK_SUPPORT) || !defined(CONFIG_ANDROID_AUTO_SUPPORT)
731 memcpy((void *)(ulong)hdr->ramdisk_addr, (void *)(ulong)hdr + hdr->page_size 750 memcpy((void *)(ulong)hdr->ramdisk_addr, (void *)(ulong)hdr + hdr->page_size
732 + ALIGN(hdr->kernel_size, hdr->page_size), hdr->ramdisk_size); 751 + ALIGN(hdr->kernel_size, hdr->page_size), hdr->ramdisk_size);
733 #else 752 #else
734 if (is_recovery_mode) 753 if (is_recovery_mode)
735 memcpy((void *)(ulong)hdr->ramdisk_addr, (void *)(ulong)hdr + hdr->page_size 754 memcpy((void *)(ulong)hdr->ramdisk_addr, (void *)(ulong)hdr + hdr->page_size
736 + ALIGN(hdr->kernel_size, hdr->page_size), hdr->ramdisk_size); 755 + ALIGN(hdr->kernel_size, hdr->page_size), hdr->ramdisk_size);
737 #endif 756 #endif
738 757
739 #ifdef CONFIG_OF_LIBFDT 758 #ifdef CONFIG_OF_LIBFDT
740 /* load the dtb file */ 759 /* load the dtb file */
741 u32 fdt_addr = 0; 760 u32 fdt_addr = 0;
742 u32 fdt_size = 0; 761 u32 fdt_size = 0;
743 struct dt_table_header *dt_img = NULL; 762 struct dt_table_header *dt_img = NULL;
744 763
745 if (is_load_fdt_from_part()) { 764 if (is_load_fdt_from_part()) {
746 fdt_addr = (ulong)((ulong)(hdr->kernel_addr) + MAX_KERNEL_LEN); 765 fdt_addr = (ulong)((ulong)(hdr->kernel_addr) + MAX_KERNEL_LEN);
747 #ifdef CONFIG_ANDROID_THINGS_SUPPORT 766 #ifdef CONFIG_ANDROID_THINGS_SUPPORT
748 if (find_partition_data_by_name("oem_bootloader", 767 if (find_partition_data_by_name("oem_bootloader",
749 avb_out_data, &avb_loadpart)) { 768 avb_out_data, &avb_loadpart)) {
750 goto fail; 769 goto fail;
751 } else 770 } else
752 dt_img = (struct dt_table_header *)avb_loadpart->data; 771 dt_img = (struct dt_table_header *)avb_loadpart->data;
753 #elif defined(CONFIG_SYSTEM_RAMDISK_SUPPORT) /* It means boot.img(recovery) do not include dtb, it need load dtb from partition */ 772 #elif defined(CONFIG_SYSTEM_RAMDISK_SUPPORT) /* It means boot.img(recovery) do not include dtb, it need load dtb from partition */
754 if (find_partition_data_by_name("dtbo", 773 if (find_partition_data_by_name("dtbo",
755 avb_out_data, &avb_loadpart)) { 774 avb_out_data, &avb_loadpart)) {
756 goto fail; 775 goto fail;
757 } else 776 } else
758 dt_img = (struct dt_table_header *)avb_loadpart->data; 777 dt_img = (struct dt_table_header *)avb_loadpart->data;
759 #else /* recovery.img include dts while boot.img use dtbo */ 778 #else /* recovery.img include dts while boot.img use dtbo */
760 if (is_recovery_mode) { 779 if (is_recovery_mode) {
761 if (hdr->header_version != 1) { 780 if (hdr->header_version != 1) {
762 printf("boota: boot image header version error!\n"); 781 printf("boota: boot image header version error!\n");
763 goto fail; 782 goto fail;
764 } 783 }
765 784
766 dt_img = (struct dt_table_header *)((void *)(ulong)hdr + 785 dt_img = (struct dt_table_header *)((void *)(ulong)hdr +
767 hdr->page_size + 786 hdr->page_size +
768 ALIGN(hdr->kernel_size, hdr->page_size) + 787 ALIGN(hdr->kernel_size, hdr->page_size) +
769 ALIGN(hdr->ramdisk_size, hdr->page_size) + 788 ALIGN(hdr->ramdisk_size, hdr->page_size) +
770 ALIGN(hdr->second_size, hdr->page_size)); 789 ALIGN(hdr->second_size, hdr->page_size));
771 } else if (find_partition_data_by_name("dtbo", 790 } else if (find_partition_data_by_name("dtbo",
772 avb_out_data, &avb_loadpart)) { 791 avb_out_data, &avb_loadpart)) {
773 goto fail; 792 goto fail;
774 } else 793 } else
775 dt_img = (struct dt_table_header *)avb_loadpart->data; 794 dt_img = (struct dt_table_header *)avb_loadpart->data;
776 #endif 795 #endif
777 796
778 if (be32_to_cpu(dt_img->magic) != DT_TABLE_MAGIC) { 797 if (be32_to_cpu(dt_img->magic) != DT_TABLE_MAGIC) {
779 printf("boota: bad dt table magic %08x\n", 798 printf("boota: bad dt table magic %08x\n",
780 be32_to_cpu(dt_img->magic)); 799 be32_to_cpu(dt_img->magic));
781 goto fail; 800 goto fail;
782 } else if (!be32_to_cpu(dt_img->dt_entry_count)) { 801 } else if (!be32_to_cpu(dt_img->dt_entry_count)) {
783 printf("boota: no dt entries\n"); 802 printf("boota: no dt entries\n");
784 goto fail; 803 goto fail;
785 } 804 }
786 805
787 struct dt_table_entry *dt_entry; 806 struct dt_table_entry *dt_entry;
788 dt_entry = (struct dt_table_entry *)((ulong)dt_img + 807 dt_entry = (struct dt_table_entry *)((ulong)dt_img +
789 be32_to_cpu(dt_img->dt_entries_offset)); 808 be32_to_cpu(dt_img->dt_entries_offset));
790 fdt_size = be32_to_cpu(dt_entry->dt_size); 809 fdt_size = be32_to_cpu(dt_entry->dt_size);
791 memcpy((void *)fdt_addr, (void *)((ulong)dt_img + 810 memcpy((void *)fdt_addr, (void *)((ulong)dt_img +
792 be32_to_cpu(dt_entry->dt_offset)), fdt_size); 811 be32_to_cpu(dt_entry->dt_offset)), fdt_size);
793 } else { 812 } else {
794 fdt_addr = (ulong)(hdr->second_addr); 813 fdt_addr = (ulong)(hdr->second_addr);
795 fdt_size = (ulong)(hdr->second_size); 814 fdt_size = (ulong)(hdr->second_size);
796 if (fdt_size && fdt_addr) { 815 if (fdt_size && fdt_addr) {
797 memcpy((void *)(ulong)fdt_addr, 816 memcpy((void *)(ulong)fdt_addr,
798 (void *)(ulong)hdr + hdr->page_size 817 (void *)(ulong)hdr + hdr->page_size
799 + ALIGN(hdr->kernel_size, hdr->page_size) 818 + ALIGN(hdr->kernel_size, hdr->page_size)
800 + ALIGN(hdr->ramdisk_size, hdr->page_size), 819 + ALIGN(hdr->ramdisk_size, hdr->page_size),
801 fdt_size); 820 fdt_size);
802 } 821 }
803 } 822 }
804 #endif /*CONFIG_OF_LIBFDT*/ 823 #endif /*CONFIG_OF_LIBFDT*/
805 824
806 if (check_image_arm64) { 825 if (check_image_arm64) {
807 android_image_get_kernel(hdr, 0, NULL, NULL); 826 android_image_get_kernel(hdr, 0, NULL, NULL);
808 addr = hdr->kernel_addr; 827 addr = hdr->kernel_addr;
809 } else { 828 } else {
810 addr = (ulong)(hdr->kernel_addr - hdr->page_size); 829 addr = (ulong)(hdr->kernel_addr - hdr->page_size);
811 } 830 }
812 printf("kernel @ %08x (%d)\n", hdr->kernel_addr, hdr->kernel_size); 831 printf("kernel @ %08x (%d)\n", hdr->kernel_addr, hdr->kernel_size);
813 printf("ramdisk @ %08x (%d)\n", hdr->ramdisk_addr, hdr->ramdisk_size); 832 printf("ramdisk @ %08x (%d)\n", hdr->ramdisk_addr, hdr->ramdisk_size);
814 #ifdef CONFIG_OF_LIBFDT 833 #ifdef CONFIG_OF_LIBFDT
815 if (fdt_size) 834 if (fdt_size)
816 printf("fdt @ %08x (%d)\n", fdt_addr, fdt_size); 835 printf("fdt @ %08x (%d)\n", fdt_addr, fdt_size);
817 #endif /*CONFIG_OF_LIBFDT*/ 836 #endif /*CONFIG_OF_LIBFDT*/
818 837
819 char boot_addr_start[12]; 838 char boot_addr_start[12];
820 char ramdisk_addr[25]; 839 char ramdisk_addr[25];
821 char fdt_addr_start[12]; 840 char fdt_addr_start[12];
822 841
823 char *boot_args[] = { NULL, boot_addr_start, ramdisk_addr, fdt_addr_start}; 842 char *boot_args[] = { NULL, boot_addr_start, ramdisk_addr, fdt_addr_start};
824 if (check_image_arm64) 843 if (check_image_arm64)
825 boot_args[0] = "booti"; 844 boot_args[0] = "booti";
826 else 845 else
827 boot_args[0] = "bootm"; 846 boot_args[0] = "bootm";
828 847
829 sprintf(boot_addr_start, "0x%lx", addr); 848 sprintf(boot_addr_start, "0x%lx", addr);
830 sprintf(ramdisk_addr, "0x%x:0x%x", hdr->ramdisk_addr, hdr->ramdisk_size); 849 sprintf(ramdisk_addr, "0x%x:0x%x", hdr->ramdisk_addr, hdr->ramdisk_size);
831 sprintf(fdt_addr_start, "0x%x", fdt_addr); 850 sprintf(fdt_addr_start, "0x%x", fdt_addr);
832 851
833 /* when CONFIG_SYSTEM_RAMDISK_SUPPORT is enabled and it's for Android Auto, if it's not recovery mode 852 /* when CONFIG_SYSTEM_RAMDISK_SUPPORT is enabled and it's for Android Auto, if it's not recovery mode
834 * do not pass ramdisk addr*/ 853 * do not pass ramdisk addr*/
835 #if defined(CONFIG_SYSTEM_RAMDISK_SUPPORT) && defined(CONFIG_ANDROID_AUTO_SUPPORT) 854 #if defined(CONFIG_SYSTEM_RAMDISK_SUPPORT) && defined(CONFIG_ANDROID_AUTO_SUPPORT)
836 if (!is_recovery_mode) 855 if (!is_recovery_mode)
837 boot_args[2] = NULL; 856 boot_args[2] = NULL;
838 #endif 857 #endif
839 858
840 #ifdef CONFIG_IMX_TRUSTY_OS 859 #ifdef CONFIG_IMX_TRUSTY_OS
841 /* Trusty keymaster needs some parameters before it work */ 860 /* Trusty keymaster needs some parameters before it work */
842 if (trusty_setbootparameter(hdr, avb_result, avb_out_data)) 861 if (trusty_setbootparameter(hdr, avb_result, avb_out_data))
843 goto fail; 862 goto fail;
844 /* lock the boot status and rollback_idx preventing Linux modify it */ 863 /* lock the boot status and rollback_idx preventing Linux modify it */
845 trusty_lock_boot_state(); 864 trusty_lock_boot_state();
846 /* lock the boot state so linux can't use some hwcrypto commands. */ 865 /* lock the boot state so linux can't use some hwcrypto commands. */
847 hwcrypto_lock_boot_state(); 866 hwcrypto_lock_boot_state();
848 /* put ql-tipc to release resource for Linux */ 867 /* put ql-tipc to release resource for Linux */
849 trusty_ipc_shutdown(); 868 trusty_ipc_shutdown();
850 #endif 869 #endif
851 870
852 if (avb_out_data != NULL) 871 if (avb_out_data != NULL)
853 avb_slot_verify_data_free(avb_out_data); 872 avb_slot_verify_data_free(avb_out_data);
854 873
855 if (check_image_arm64) { 874 if (check_image_arm64) {
856 #ifdef CONFIG_CMD_BOOTI 875 #ifdef CONFIG_CMD_BOOTI
857 do_booti(NULL, 0, 4, boot_args); 876 do_booti(NULL, 0, 4, boot_args);
858 #else 877 #else
859 debug("please enable CONFIG_CMD_BOOTI when kernel are Image"); 878 debug("please enable CONFIG_CMD_BOOTI when kernel are Image");
860 #endif 879 #endif
861 } else { 880 } else {
862 do_bootm(NULL, 0, 4, boot_args); 881 do_bootm(NULL, 0, 4, boot_args);
863 } 882 }
864 883
865 /* This only happens if image is somehow faulty so we start over */ 884 /* This only happens if image is somehow faulty so we start over */
866 do_reset(NULL, 0, 0, NULL); 885 do_reset(NULL, 0, 0, NULL);
867 886
868 return 1; 887 return 1;
869 888
870 fail: 889 fail:
871 /* avb has no recovery */ 890 /* avb has no recovery */
872 if (avb_out_data != NULL) 891 if (avb_out_data != NULL)
873 avb_slot_verify_data_free(avb_out_data); 892 avb_slot_verify_data_free(avb_out_data);
874 893
875 return run_command("fastboot 0", 0); 894 return run_command("fastboot 0", 0);
876 } 895 }
877 896
878 U_BOOT_CMD( 897 U_BOOT_CMD(
879 boota, 2, 1, do_boota, 898 boota, 2, 1, do_boota,
880 "boota - boot android bootimg \n", 899 "boota - boot android bootimg \n",
881 "boot from current mmc with avb verify\n" 900 "boot from current mmc with avb verify\n"
882 ); 901 );
883 902
884 #else /* CONFIG_AVB_SUPPORT */ 903 #else /* CONFIG_AVB_SUPPORT */
885 /* boota <addr> [ mmc0 | mmc1 [ <partition> ] ] */ 904 /* boota <addr> [ mmc0 | mmc1 [ <partition> ] ] */
886 int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 905 int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
887 { 906 {
888 ulong addr = 0; 907 ulong addr = 0;
889 char *ptn = "boot"; 908 char *ptn = "boot";
890 int mmcc = -1; 909 int mmcc = -1;
891 struct andr_img_hdr *hdr = &boothdr; 910 struct andr_img_hdr *hdr = &boothdr;
892 ulong image_size; 911 ulong image_size;
893 bool check_image_arm64 = false; 912 bool check_image_arm64 = false;
894 int i = 0; 913 int i = 0;
895 914
896 for (i = 0; i < argc; i++) 915 for (i = 0; i < argc; i++)
897 printf("%s ", argv[i]); 916 printf("%s ", argv[i]);
898 printf("\n"); 917 printf("\n");
899 918
900 if (argc < 2) 919 if (argc < 2)
901 return -1; 920 return -1;
902 921
903 mmcc = simple_strtoul(argv[1]+3, NULL, 10); 922 mmcc = simple_strtoul(argv[1]+3, NULL, 10);
904 923
905 if (argc > 2) 924 if (argc > 2)
906 ptn = argv[2]; 925 ptn = argv[2];
907 926
908 if (mmcc != -1) { 927 if (mmcc != -1) {
909 #ifdef CONFIG_MMC 928 #ifdef CONFIG_MMC
910 struct fastboot_ptentry *pte; 929 struct fastboot_ptentry *pte;
911 struct mmc *mmc; 930 struct mmc *mmc;
912 disk_partition_t info; 931 disk_partition_t info;
913 struct blk_desc *dev_desc = NULL; 932 struct blk_desc *dev_desc = NULL;
914 unsigned bootimg_sectors; 933 unsigned bootimg_sectors;
915 934
916 memset((void *)&info, 0 , sizeof(disk_partition_t)); 935 memset((void *)&info, 0 , sizeof(disk_partition_t));
917 /* i.MX use MBR as partition table, so this will have 936 /* i.MX use MBR as partition table, so this will have
918 to find the start block and length for the 937 to find the start block and length for the
919 partition name and register the fastboot pte we 938 partition name and register the fastboot pte we
920 define the partition number of each partition in 939 define the partition number of each partition in
921 config file 940 config file
922 */ 941 */
923 mmc = find_mmc_device(mmcc); 942 mmc = find_mmc_device(mmcc);
924 if (!mmc) { 943 if (!mmc) {
925 printf("boota: cannot find '%d' mmc device\n", mmcc); 944 printf("boota: cannot find '%d' mmc device\n", mmcc);
926 goto fail; 945 goto fail;
927 } 946 }
928 dev_desc = blk_get_dev("mmc", mmcc); 947 dev_desc = blk_get_dev("mmc", mmcc);
929 if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) { 948 if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
930 printf("** Block device MMC %d not supported\n", mmcc); 949 printf("** Block device MMC %d not supported\n", mmcc);
931 goto fail; 950 goto fail;
932 } 951 }
933 952
934 /* below was i.MX mmc operation code */ 953 /* below was i.MX mmc operation code */
935 if (mmc_init(mmc)) { 954 if (mmc_init(mmc)) {
936 printf("mmc%d init failed\n", mmcc); 955 printf("mmc%d init failed\n", mmcc);
937 goto fail; 956 goto fail;
938 } 957 }
939 958
940 pte = fastboot_flash_find_ptn(ptn); 959 pte = fastboot_flash_find_ptn(ptn);
941 if (!pte) { 960 if (!pte) {
942 printf("boota: cannot find '%s' partition\n", ptn); 961 printf("boota: cannot find '%s' partition\n", ptn);
943 fastboot_flash_dump_ptn(); 962 fastboot_flash_dump_ptn();
944 goto fail; 963 goto fail;
945 } 964 }
946 965
947 if (blk_dread(dev_desc, pte->start, 966 if (blk_dread(dev_desc, pte->start,
948 1, (void *)hdr) < 0) { 967 1, (void *)hdr) < 0) {
949 printf("boota: mmc failed to read bootimg header\n"); 968 printf("boota: mmc failed to read bootimg header\n");
950 goto fail; 969 goto fail;
951 } 970 }
952 971
953 if (android_image_check_header(hdr)) { 972 if (android_image_check_header(hdr)) {
954 printf("boota: bad boot image magic\n"); 973 printf("boota: bad boot image magic\n");
955 goto fail; 974 goto fail;
956 } 975 }
957 976
958 image_size = android_image_get_end(hdr) - (ulong)hdr; 977 image_size = android_image_get_end(hdr) - (ulong)hdr;
959 bootimg_sectors = image_size/512; 978 bootimg_sectors = image_size/512;
960 979
961 if (blk_dread(dev_desc, pte->start, 980 if (blk_dread(dev_desc, pte->start,
962 bootimg_sectors, 981 bootimg_sectors,
963 (void *)(hdr->kernel_addr - hdr->page_size)) < 0) { 982 (void *)(hdr->kernel_addr - hdr->page_size)) < 0) {
964 printf("boota: mmc failed to read bootimage\n"); 983 printf("boota: mmc failed to read bootimage\n");
965 goto fail; 984 goto fail;
966 } 985 }
967 check_image_arm64 = image_arm64((void *)hdr->kernel_addr); 986 check_image_arm64 = image_arm64((void *)hdr->kernel_addr);
968 #if defined(CONFIG_FASTBOOT_LOCK) 987 #if defined(CONFIG_FASTBOOT_LOCK)
969 int verifyresult = -1; 988 int verifyresult = -1;
970 #endif 989 #endif
971 990
972 #if defined(CONFIG_FASTBOOT_LOCK) 991 #if defined(CONFIG_FASTBOOT_LOCK)
973 int lock_status = fastboot_get_lock_stat(); 992 int lock_status = fastboot_get_lock_stat();
974 if (lock_status == FASTBOOT_LOCK_ERROR) { 993 if (lock_status == FASTBOOT_LOCK_ERROR) {
975 printf("In boota get fastboot lock status error. Set lock status\n"); 994 printf("In boota get fastboot lock status error. Set lock status\n");
976 fastboot_set_lock_stat(FASTBOOT_LOCK); 995 fastboot_set_lock_stat(FASTBOOT_LOCK);
977 } 996 }
978 display_lock(fastboot_get_lock_stat(), verifyresult); 997 display_lock(fastboot_get_lock_stat(), verifyresult);
979 #endif 998 #endif
980 /* load the ramdisk file */ 999 /* load the ramdisk file */
981 memcpy((void *)hdr->ramdisk_addr, (void *)hdr->kernel_addr 1000 memcpy((void *)hdr->ramdisk_addr, (void *)hdr->kernel_addr
982 + ALIGN(hdr->kernel_size, hdr->page_size), hdr->ramdisk_size); 1001 + ALIGN(hdr->kernel_size, hdr->page_size), hdr->ramdisk_size);
983 1002
984 #ifdef CONFIG_OF_LIBFDT 1003 #ifdef CONFIG_OF_LIBFDT
985 u32 fdt_size = 0; 1004 u32 fdt_size = 0;
986 /* load the dtb file */ 1005 /* load the dtb file */
987 if (hdr->second_addr) { 1006 if (hdr->second_addr) {
988 u32 zimage_size = ((u32 *)hdrload->kernel_addr)[ZIMAGE_END_ADDR] 1007 u32 zimage_size = ((u32 *)hdrload->kernel_addr)[ZIMAGE_END_ADDR]
989 - ((u32 *)hdrload->kernel_addr)[ZIMAGE_START_ADDR]; 1008 - ((u32 *)hdrload->kernel_addr)[ZIMAGE_START_ADDR];
990 fdt_size = hdrload->kernel_size - zimage_size; 1009 fdt_size = hdrload->kernel_size - zimage_size;
991 memcpy((void *)(ulong)hdrload->second_addr, 1010 memcpy((void *)(ulong)hdrload->second_addr,
992 (void*)(ulong)hdrload->kernel_addr + zimage_size, fdt_size); 1011 (void*)(ulong)hdrload->kernel_addr + zimage_size, fdt_size);
993 } 1012 }
994 #endif /*CONFIG_OF_LIBFDT*/ 1013 #endif /*CONFIG_OF_LIBFDT*/
995 1014
996 #else /*! CONFIG_MMC*/ 1015 #else /*! CONFIG_MMC*/
997 return -1; 1016 return -1;
998 #endif /*! CONFIG_MMC*/ 1017 #endif /*! CONFIG_MMC*/
999 } else { 1018 } else {
1000 printf("boota: parameters is invalid. only support mmcX device\n"); 1019 printf("boota: parameters is invalid. only support mmcX device\n");
1001 return -1; 1020 return -1;
1002 } 1021 }
1003 1022
1004 printf("kernel @ %08x (%d)\n", hdr->kernel_addr, hdr->kernel_size); 1023 printf("kernel @ %08x (%d)\n", hdr->kernel_addr, hdr->kernel_size);
1005 printf("ramdisk @ %08x (%d)\n", hdr->ramdisk_addr, hdr->ramdisk_size); 1024 printf("ramdisk @ %08x (%d)\n", hdr->ramdisk_addr, hdr->ramdisk_size);
1006 #ifdef CONFIG_OF_LIBFDT 1025 #ifdef CONFIG_OF_LIBFDT
1007 if (fdt_size) 1026 if (fdt_size)
1008 printf("fdt @ %08x (%d)\n", hdr->second_addr, fdt_size); 1027 printf("fdt @ %08x (%d)\n", hdr->second_addr, fdt_size);
1009 #endif /*CONFIG_OF_LIBFDT*/ 1028 #endif /*CONFIG_OF_LIBFDT*/
1010 1029
1011 1030
1012 char boot_addr_start[12]; 1031 char boot_addr_start[12];
1013 char ramdisk_addr[25]; 1032 char ramdisk_addr[25];
1014 char fdt_addr[12]; 1033 char fdt_addr[12];
1015 char *boot_args[] = { NULL, boot_addr_start, ramdisk_addr, fdt_addr}; 1034 char *boot_args[] = { NULL, boot_addr_start, ramdisk_addr, fdt_addr};
1016 if (check_image_arm64 ) { 1035 if (check_image_arm64 ) {
1017 addr = hdr->kernel_addr; 1036 addr = hdr->kernel_addr;
1018 boot_args[0] = "booti"; 1037 boot_args[0] = "booti";
1019 } else { 1038 } else {
1020 addr = hdr->kernel_addr - hdr->page_size; 1039 addr = hdr->kernel_addr - hdr->page_size;
1021 boot_args[0] = "bootm"; 1040 boot_args[0] = "bootm";
1022 } 1041 }
1023 1042
1024 sprintf(boot_addr_start, "0x%lx", addr); 1043 sprintf(boot_addr_start, "0x%lx", addr);
1025 sprintf(ramdisk_addr, "0x%x:0x%x", hdr->ramdisk_addr, hdr->ramdisk_size); 1044 sprintf(ramdisk_addr, "0x%x:0x%x", hdr->ramdisk_addr, hdr->ramdisk_size);
1026 sprintf(fdt_addr, "0x%x", hdr->second_addr); 1045 sprintf(fdt_addr, "0x%x", hdr->second_addr);
1027 if (check_image_arm64) { 1046 if (check_image_arm64) {
1028 android_image_get_kernel(hdr, 0, NULL, NULL); 1047 android_image_get_kernel(hdr, 0, NULL, NULL);
1029 #ifdef CONFIG_CMD_BOOTI 1048 #ifdef CONFIG_CMD_BOOTI
1030 do_booti(NULL, 0, 4, boot_args); 1049 do_booti(NULL, 0, 4, boot_args);
1031 #else 1050 #else
1032 debug("please enable CONFIG_CMD_BOOTI when kernel are Image"); 1051 debug("please enable CONFIG_CMD_BOOTI when kernel are Image");
1033 #endif 1052 #endif
1034 } else { 1053 } else {
1035 do_bootm(NULL, 0, 4, boot_args); 1054 do_bootm(NULL, 0, 4, boot_args);
1036 } 1055 }
1037 /* This only happens if image is somehow faulty so we start over */ 1056 /* This only happens if image is somehow faulty so we start over */
1038 do_reset(NULL, 0, 0, NULL); 1057 do_reset(NULL, 0, 0, NULL);
1039 1058
1040 return 1; 1059 return 1;
1041 1060
1042 fail: 1061 fail:
1043 #if defined(CONFIG_FSL_FASTBOOT) 1062 #if defined(CONFIG_FSL_FASTBOOT)
1044 return run_command("fastboot 0", 0); 1063 return run_command("fastboot 0", 0);
1045 #else /*! CONFIG_FSL_FASTBOOT*/ 1064 #else /*! CONFIG_FSL_FASTBOOT*/
1046 return -1; 1065 return -1;
1047 #endif /*! CONFIG_FSL_FASTBOOT*/ 1066 #endif /*! CONFIG_FSL_FASTBOOT*/
1048 } 1067 }
1049 1068
1050 U_BOOT_CMD( 1069 U_BOOT_CMD(
1051 boota, 3, 1, do_boota, 1070 boota, 3, 1, do_boota,
1052 "boota - boot android bootimg from memory\n", 1071 "boota - boot android bootimg from memory\n",
1053 "[<addr> | mmc0 | mmc1 | mmc2 | mmcX] [<partition>]\n " 1072 "[<addr> | mmc0 | mmc1 | mmc2 | mmcX] [<partition>]\n "
1054 "- boot application image stored in memory or mmc\n" 1073 "- boot application image stored in memory or mmc\n"
1055 "\t'addr' should be the address of boot image " 1074 "\t'addr' should be the address of boot image "
1056 "which is zImage+ramdisk.img\n" 1075 "which is zImage+ramdisk.img\n"
1057 "\t'mmcX' is the mmc device you store your boot.img, " 1076 "\t'mmcX' is the mmc device you store your boot.img, "
1058 "which will read the boot.img from 1M offset('/boot' partition)\n" 1077 "which will read the boot.img from 1M offset('/boot' partition)\n"
1059 "\t 'partition' (optional) is the partition id of your device, " 1078 "\t 'partition' (optional) is the partition id of your device, "
1060 "if no partition give, will going to 'boot' partition\n" 1079 "if no partition give, will going to 'boot' partition\n"
1061 ); 1080 );
1062 #endif /* CONFIG_AVB_SUPPORT */ 1081 #endif /* CONFIG_AVB_SUPPORT */
1063 #endif /* CONFIG_CMD_BOOTA */ 1082 #endif /* CONFIG_CMD_BOOTA */
1064 1083
include/fsl_avb_logo.h
File was created 1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright NXP 2020
4 *
5 */
6
7 #ifndef __FSL_AVB_LOGO_H__
8 #define __FSL_AVB_LOGO_H__
9
10 extern unsigned short orange_warning_bmp_palette[];
11 extern unsigned char orange_warning_bmp_bitmap[];
12
13 #endif /* __FSL_AVB_LOGO_H__ */
14
1 menu "Library routines" 1 menu "Library routines"
2 2
3 config BCH 3 config BCH
4 bool "Enable Software based BCH ECC" 4 bool "Enable Software based BCH ECC"
5 help 5 help
6 Enables software based BCH ECC algorithm present in lib/bch.c 6 Enables software based BCH ECC algorithm present in lib/bch.c
7 This is used by SoC platforms which do not have built-in ELM 7 This is used by SoC platforms which do not have built-in ELM
8 hardware engine required for BCH ECC correction. 8 hardware engine required for BCH ECC correction.
9 9
10 config BINMAN_FDT 10 config BINMAN_FDT
11 bool "Allow access to binman information in the device tree" 11 bool "Allow access to binman information in the device tree"
12 depends on BINMAN && OF_CONTROL 12 depends on BINMAN && OF_CONTROL
13 default y 13 default y
14 help 14 help
15 This enables U-Boot to access information about binman entries, 15 This enables U-Boot to access information about binman entries,
16 stored in the device tree in a binman node. Typical uses are to 16 stored in the device tree in a binman node. Typical uses are to
17 locate entries in the firmware image. See binman.h for the available 17 locate entries in the firmware image. See binman.h for the available
18 functionality. 18 functionality.
19 19
20 config CC_OPTIMIZE_LIBS_FOR_SPEED 20 config CC_OPTIMIZE_LIBS_FOR_SPEED
21 bool "Optimize libraries for speed" 21 bool "Optimize libraries for speed"
22 help 22 help
23 Enabling this option will pass "-O2" to gcc when compiling 23 Enabling this option will pass "-O2" to gcc when compiling
24 under "lib" directory. 24 under "lib" directory.
25 25
26 If unsure, say N. 26 If unsure, say N.
27 27
28 config DYNAMIC_CRC_TABLE 28 config DYNAMIC_CRC_TABLE
29 bool "Enable Dynamic tables for CRC" 29 bool "Enable Dynamic tables for CRC"
30 help 30 help
31 Enable this option to calculate entries for CRC tables at runtime. 31 Enable this option to calculate entries for CRC tables at runtime.
32 This can be helpful when reducing the size of the build image 32 This can be helpful when reducing the size of the build image
33 33
34 config HAVE_ARCH_IOMAP 34 config HAVE_ARCH_IOMAP
35 bool 35 bool
36 help 36 help
37 Enable this option if architecture provides io{read,write}{8,16,32} 37 Enable this option if architecture provides io{read,write}{8,16,32}
38 I/O accessor functions. 38 I/O accessor functions.
39 39
40 config HAVE_PRIVATE_LIBGCC 40 config HAVE_PRIVATE_LIBGCC
41 bool 41 bool
42 42
43 config LIB_UUID 43 config LIB_UUID
44 bool 44 bool
45 45
46 config PRINTF 46 config PRINTF
47 bool 47 bool
48 default y 48 default y
49 49
50 config SPL_PRINTF 50 config SPL_PRINTF
51 bool 51 bool
52 select SPL_SPRINTF 52 select SPL_SPRINTF
53 select SPL_STRTO if !SPL_USE_TINY_PRINTF 53 select SPL_STRTO if !SPL_USE_TINY_PRINTF
54 54
55 config TPL_PRINTF 55 config TPL_PRINTF
56 bool 56 bool
57 select TPL_SPRINTF 57 select TPL_SPRINTF
58 select TPL_STRTO if !TPL_USE_TINY_PRINTF 58 select TPL_STRTO if !TPL_USE_TINY_PRINTF
59 59
60 config SPRINTF 60 config SPRINTF
61 bool 61 bool
62 default y 62 default y
63 63
64 config SPL_SPRINTF 64 config SPL_SPRINTF
65 bool 65 bool
66 66
67 config TPL_SPRINTF 67 config TPL_SPRINTF
68 bool 68 bool
69 69
70 config STRTO 70 config STRTO
71 bool 71 bool
72 default y 72 default y
73 73
74 config SPL_STRTO 74 config SPL_STRTO
75 bool 75 bool
76 76
77 config TPL_STRTO 77 config TPL_STRTO
78 bool 78 bool
79 79
80 config IMAGE_SPARSE 80 config IMAGE_SPARSE
81 bool 81 bool
82 82
83 config IMAGE_SPARSE_FILLBUF_SIZE 83 config IMAGE_SPARSE_FILLBUF_SIZE
84 hex "Android sparse image CHUNK_TYPE_FILL buffer size" 84 hex "Android sparse image CHUNK_TYPE_FILL buffer size"
85 default 0x80000 85 default 0x80000
86 depends on IMAGE_SPARSE 86 depends on IMAGE_SPARSE
87 help 87 help
88 Set the size of the fill buffer used when processing CHUNK_TYPE_FILL 88 Set the size of the fill buffer used when processing CHUNK_TYPE_FILL
89 chunks. 89 chunks.
90 90
91 config USE_PRIVATE_LIBGCC 91 config USE_PRIVATE_LIBGCC
92 bool "Use private libgcc" 92 bool "Use private libgcc"
93 depends on HAVE_PRIVATE_LIBGCC 93 depends on HAVE_PRIVATE_LIBGCC
94 default y if HAVE_PRIVATE_LIBGCC && ((ARM && !ARM64) || MIPS) 94 default y if HAVE_PRIVATE_LIBGCC && ((ARM && !ARM64) || MIPS)
95 help 95 help
96 This option allows you to use the built-in libgcc implementation 96 This option allows you to use the built-in libgcc implementation
97 of U-Boot instead of the one provided by the compiler. 97 of U-Boot instead of the one provided by the compiler.
98 If unsure, say N. 98 If unsure, say N.
99 99
100 config SYS_HZ 100 config SYS_HZ
101 int 101 int
102 default 1000 102 default 1000
103 help 103 help
104 The frequency of the timer returned by get_timer(). 104 The frequency of the timer returned by get_timer().
105 get_timer() must operate in milliseconds and this option must be 105 get_timer() must operate in milliseconds and this option must be
106 set to 1000. 106 set to 1000.
107 107
108 config SPL_USE_TINY_PRINTF 108 config SPL_USE_TINY_PRINTF
109 bool "Enable tiny printf() version in SPL" 109 bool "Enable tiny printf() version in SPL"
110 depends on SPL 110 depends on SPL
111 default y 111 default y
112 help 112 help
113 This option enables a tiny, stripped down printf version. 113 This option enables a tiny, stripped down printf version.
114 This should only be used in space limited environments, 114 This should only be used in space limited environments,
115 like SPL versions with hard memory limits. This version 115 like SPL versions with hard memory limits. This version
116 reduces the code size by about 2.5KiB on armv7. 116 reduces the code size by about 2.5KiB on armv7.
117 117
118 The supported format specifiers are %c, %s, %u/%d and %x. 118 The supported format specifiers are %c, %s, %u/%d and %x.
119 119
120 config TPL_USE_TINY_PRINTF 120 config TPL_USE_TINY_PRINTF
121 bool "Enable tiny printf() version in TPL" 121 bool "Enable tiny printf() version in TPL"
122 depends on TPL 122 depends on TPL
123 default y if SPL_USE_TINY_PRINTF 123 default y if SPL_USE_TINY_PRINTF
124 help 124 help
125 This option enables a tiny, stripped down printf version. 125 This option enables a tiny, stripped down printf version.
126 This should only be used in space limited environments, 126 This should only be used in space limited environments,
127 like SPL versions with hard memory limits. This version 127 like SPL versions with hard memory limits. This version
128 reduces the code size by about 2.5KiB on armv7. 128 reduces the code size by about 2.5KiB on armv7.
129 129
130 The supported format specifiers are %c, %s, %u/%d and %x. 130 The supported format specifiers are %c, %s, %u/%d and %x.
131 131
132 config PANIC_HANG 132 config PANIC_HANG
133 bool "Do not reset the system on fatal error" 133 bool "Do not reset the system on fatal error"
134 help 134 help
135 Define this option to stop the system in case of a fatal error, 135 Define this option to stop the system in case of a fatal error,
136 so that you have to reset it manually. This is probably NOT a good 136 so that you have to reset it manually. This is probably NOT a good
137 idea for an embedded system where you want the system to reboot 137 idea for an embedded system where you want the system to reboot
138 automatically as fast as possible, but it may be useful during 138 automatically as fast as possible, but it may be useful during
139 development since you can try to debug the conditions that lead to 139 development since you can try to debug the conditions that lead to
140 the situation. 140 the situation.
141 141
142 config REGEX 142 config REGEX
143 bool "Enable regular expression support" 143 bool "Enable regular expression support"
144 default y if NET 144 default y if NET
145 help 145 help
146 If this variable is defined, U-Boot is linked against the 146 If this variable is defined, U-Boot is linked against the
147 SLRE (Super Light Regular Expression) library, which adds 147 SLRE (Super Light Regular Expression) library, which adds
148 regex support to some commands, for example "env grep" and 148 regex support to some commands, for example "env grep" and
149 "setexpr". 149 "setexpr".
150 150
151 choice 151 choice
152 prompt "Pseudo-random library support type" 152 prompt "Pseudo-random library support type"
153 depends on NET_RANDOM_ETHADDR || RANDOM_UUID || CMD_UUID || \ 153 depends on NET_RANDOM_ETHADDR || RANDOM_UUID || CMD_UUID || \
154 RNG_SANDBOX || UT_LIB && AES 154 RNG_SANDBOX || UT_LIB && AES
155 default LIB_RAND 155 default LIB_RAND
156 help 156 help
157 Select the library to provide pseudo-random number generator 157 Select the library to provide pseudo-random number generator
158 functions. LIB_HW_RAND supports certain hardware engines that 158 functions. LIB_HW_RAND supports certain hardware engines that
159 provide this functionality. If in doubt, select LIB_RAND. 159 provide this functionality. If in doubt, select LIB_RAND.
160 160
161 config LIB_RAND 161 config LIB_RAND
162 bool "Pseudo-random library support" 162 bool "Pseudo-random library support"
163 163
164 config LIB_HW_RAND 164 config LIB_HW_RAND
165 bool "HW Engine for random libray support" 165 bool "HW Engine for random libray support"
166 166
167 endchoice 167 endchoice
168 168
169 config SPL_TINY_MEMSET 169 config SPL_TINY_MEMSET
170 bool "Use a very small memset() in SPL" 170 bool "Use a very small memset() in SPL"
171 help 171 help
172 The faster memset() is the arch-specific one (if available) enabled 172 The faster memset() is the arch-specific one (if available) enabled
173 by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get 173 by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get
174 better performance by writing a word at a time. But in very 174 better performance by writing a word at a time. But in very
175 size-constrained environments even this may be too big. Enable this 175 size-constrained environments even this may be too big. Enable this
176 option to reduce code size slightly at the cost of some speed. 176 option to reduce code size slightly at the cost of some speed.
177 177
178 config TPL_TINY_MEMSET 178 config TPL_TINY_MEMSET
179 bool "Use a very small memset() in TPL" 179 bool "Use a very small memset() in TPL"
180 help 180 help
181 The faster memset() is the arch-specific one (if available) enabled 181 The faster memset() is the arch-specific one (if available) enabled
182 by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get 182 by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get
183 better performance by writing a word at a time. But in very 183 better performance by writing a word at a time. But in very
184 size-constrained environments even this may be too big. Enable this 184 size-constrained environments even this may be too big. Enable this
185 option to reduce code size slightly at the cost of some speed. 185 option to reduce code size slightly at the cost of some speed.
186 186
187 config RBTREE 187 config RBTREE
188 bool 188 bool
189 189
190 config BITREVERSE 190 config BITREVERSE
191 bool "Bit reverse library from Linux" 191 bool "Bit reverse library from Linux"
192 192
193 config TRACE 193 config TRACE
194 bool "Support for tracing of function calls and timing" 194 bool "Support for tracing of function calls and timing"
195 imply CMD_TRACE 195 imply CMD_TRACE
196 help 196 help
197 Enables function tracing within U-Boot. This allows recording of call 197 Enables function tracing within U-Boot. This allows recording of call
198 traces including timing information. The command can write data to 198 traces including timing information. The command can write data to
199 memory for exporting for analysis (e.g. using bootchart). 199 memory for exporting for analysis (e.g. using bootchart).
200 See doc/README.trace for full details. 200 See doc/README.trace for full details.
201 201
202 config TRACE_BUFFER_SIZE 202 config TRACE_BUFFER_SIZE
203 hex "Size of trace buffer in U-Boot" 203 hex "Size of trace buffer in U-Boot"
204 depends on TRACE 204 depends on TRACE
205 default 0x01000000 205 default 0x01000000
206 help 206 help
207 Sets the size of the trace buffer in U-Boot. This is allocated from 207 Sets the size of the trace buffer in U-Boot. This is allocated from
208 memory during relocation. If this buffer is too small, the trace 208 memory during relocation. If this buffer is too small, the trace
209 history will be truncated, with later records omitted. 209 history will be truncated, with later records omitted.
210 210
211 If early trace is enabled (i.e. before relocation), this buffer must 211 If early trace is enabled (i.e. before relocation), this buffer must
212 be large enough to include all the data from the early trace buffer as 212 be large enough to include all the data from the early trace buffer as
213 well, since this is copied over to the main buffer during relocation. 213 well, since this is copied over to the main buffer during relocation.
214 214
215 A trace record is emitted for each function call and each record is 215 A trace record is emitted for each function call and each record is
216 12 bytes (see struct trace_call). A suggested minimum size is 1MB. If 216 12 bytes (see struct trace_call). A suggested minimum size is 1MB. If
217 the size is too small then 'trace stats' will show a message saying 217 the size is too small then 'trace stats' will show a message saying
218 how many records were dropped due to buffer overflow. 218 how many records were dropped due to buffer overflow.
219 219
220 config TRACE_CALL_DEPTH_LIMIT 220 config TRACE_CALL_DEPTH_LIMIT
221 int "Trace call depth limit" 221 int "Trace call depth limit"
222 depends on TRACE 222 depends on TRACE
223 default 15 223 default 15
224 help 224 help
225 Sets the maximum call depth up to which function calls are recorded. 225 Sets the maximum call depth up to which function calls are recorded.
226 226
227 config TRACE_EARLY 227 config TRACE_EARLY
228 bool "Enable tracing before relocation" 228 bool "Enable tracing before relocation"
229 depends on TRACE 229 depends on TRACE
230 help 230 help
231 Sometimes it is helpful to trace execution of U-Boot before 231 Sometimes it is helpful to trace execution of U-Boot before
232 relocation. This is possible by using a arch-specific, fixed buffer 232 relocation. This is possible by using a arch-specific, fixed buffer
233 position in memory. Enable this option to start tracing as early as 233 position in memory. Enable this option to start tracing as early as
234 possible after U-Boot starts. 234 possible after U-Boot starts.
235 235
236 config TRACE_EARLY_SIZE 236 config TRACE_EARLY_SIZE
237 hex "Size of early trace buffer in U-Boot" 237 hex "Size of early trace buffer in U-Boot"
238 depends on TRACE_EARLY 238 depends on TRACE_EARLY
239 default 0x00100000 239 default 0x00100000
240 help 240 help
241 Sets the size of the early trace buffer in bytes. This is used to hold 241 Sets the size of the early trace buffer in bytes. This is used to hold
242 tracing information before relocation. 242 tracing information before relocation.
243 243
244 config TRACE_EARLY_CALL_DEPTH_LIMIT 244 config TRACE_EARLY_CALL_DEPTH_LIMIT
245 int "Early trace call depth limit" 245 int "Early trace call depth limit"
246 depends on TRACE_EARLY 246 depends on TRACE_EARLY
247 default 200 247 default 200
248 help 248 help
249 Sets the maximum call depth up to which function calls are recorded 249 Sets the maximum call depth up to which function calls are recorded
250 during early tracing. 250 during early tracing.
251 251
252 config TRACE_EARLY_ADDR 252 config TRACE_EARLY_ADDR
253 hex "Address of early trace buffer in U-Boot" 253 hex "Address of early trace buffer in U-Boot"
254 depends on TRACE_EARLY 254 depends on TRACE_EARLY
255 default 0x00100000 255 default 0x00100000
256 help 256 help
257 Sets the address of the early trace buffer in U-Boot. This memory 257 Sets the address of the early trace buffer in U-Boot. This memory
258 must be accessible before relocation. 258 must be accessible before relocation.
259 259
260 A trace record is emitted for each function call and each record is 260 A trace record is emitted for each function call and each record is
261 12 bytes (see struct trace_call). A suggested minimum size is 1MB. If 261 12 bytes (see struct trace_call). A suggested minimum size is 1MB. If
262 the size is too small then the message which says the amount of early 262 the size is too small then the message which says the amount of early
263 data being coped will the the same as the 263 data being coped will the the same as the
264 264
265 source lib/dhry/Kconfig 265 source lib/dhry/Kconfig
266 266
267 menu "Security support" 267 menu "Security support"
268 268
269 config AES 269 config AES
270 bool "Support the AES algorithm" 270 bool "Support the AES algorithm"
271 help 271 help
272 This provides a means to encrypt and decrypt data using the AES 272 This provides a means to encrypt and decrypt data using the AES
273 (Advanced Encryption Standard). This algorithm uses a symetric key 273 (Advanced Encryption Standard). This algorithm uses a symetric key
274 and is widely used as a streaming cipher. Different key lengths are 274 and is widely used as a streaming cipher. Different key lengths are
275 supported by the algorithm but only a 128-bit key is supported at 275 supported by the algorithm but only a 128-bit key is supported at
276 present. 276 present.
277 277
278 source lib/rsa/Kconfig 278 source lib/rsa/Kconfig
279 source lib/crypto/Kconfig 279 source lib/crypto/Kconfig
280 280
281 config TPM 281 config TPM
282 bool "Trusted Platform Module (TPM) Support" 282 bool "Trusted Platform Module (TPM) Support"
283 depends on DM 283 depends on DM
284 help 284 help
285 This enables support for TPMs which can be used to provide security 285 This enables support for TPMs which can be used to provide security
286 features for your board. The TPM can be connected via LPC or I2C 286 features for your board. The TPM can be connected via LPC or I2C
287 and a sandbox TPM is provided for testing purposes. Use the 'tpm' 287 and a sandbox TPM is provided for testing purposes. Use the 'tpm'
288 command to interactive the TPM. Driver model support is provided 288 command to interactive the TPM. Driver model support is provided
289 for the low-level TPM interface, but only one TPM is supported at 289 for the low-level TPM interface, but only one TPM is supported at
290 a time by the TPM library. 290 a time by the TPM library.
291 291
292 config SPL_TPM 292 config SPL_TPM
293 bool "Trusted Platform Module (TPM) Support in SPL" 293 bool "Trusted Platform Module (TPM) Support in SPL"
294 depends on SPL_DM 294 depends on SPL_DM
295 help 295 help
296 This enables support for TPMs which can be used to provide security 296 This enables support for TPMs which can be used to provide security
297 features for your board. The TPM can be connected via LPC or I2C 297 features for your board. The TPM can be connected via LPC or I2C
298 and a sandbox TPM is provided for testing purposes. Use the 'tpm' 298 and a sandbox TPM is provided for testing purposes. Use the 'tpm'
299 command to interactive the TPM. Driver model support is provided 299 command to interactive the TPM. Driver model support is provided
300 for the low-level TPM interface, but only one TPM is supported at 300 for the low-level TPM interface, but only one TPM is supported at
301 a time by the TPM library. 301 a time by the TPM library.
302 302
303 config TPL_TPM 303 config TPL_TPM
304 bool "Trusted Platform Module (TPM) Support in TPL" 304 bool "Trusted Platform Module (TPM) Support in TPL"
305 depends on TPL_DM 305 depends on TPL_DM
306 help 306 help
307 This enables support for TPMs which can be used to provide security 307 This enables support for TPMs which can be used to provide security
308 features for your board. The TPM can be connected via LPC or I2C 308 features for your board. The TPM can be connected via LPC or I2C
309 and a sandbox TPM is provided for testing purposes. Use the 'tpm' 309 and a sandbox TPM is provided for testing purposes. Use the 'tpm'
310 command to interactive the TPM. Driver model support is provided 310 command to interactive the TPM. Driver model support is provided
311 for the low-level TPM interface, but only one TPM is supported at 311 for the low-level TPM interface, but only one TPM is supported at
312 a time by the TPM library. 312 a time by the TPM library.
313 313
314 endmenu 314 endmenu
315 315
316 menu "Android Verified Boot" 316 menu "Android Verified Boot"
317 317
318 config LIBAVB 318 config LIBAVB
319 bool "Android Verified Boot 2.0 support" 319 bool "Android Verified Boot 2.0 support"
320 depends on ANDROID_BOOT_IMAGE 320 depends on ANDROID_BOOT_IMAGE
321 default n 321 default n
322 help 322 help
323 This enables support of Android Verified Boot 2.0 which can be used 323 This enables support of Android Verified Boot 2.0 which can be used
324 to assure the end user of the integrity of the software running on a 324 to assure the end user of the integrity of the software running on a
325 device. Introduces such features as boot chain of trust, rollback 325 device. Introduces such features as boot chain of trust, rollback
326 protection etc. 326 protection etc.
327 327
328 config AVB_SUPPORT 328 config AVB_SUPPORT
329 bool "Enable Android AVB lib support" 329 bool "Enable Android AVB lib support"
330 select LIBAVB 330 select LIBAVB
331 331
332 config AVB_ATX 332 config AVB_ATX
333 bool "Enable AVB_ATX support" 333 bool "Enable AVB_ATX support"
334 depends on AVB_SUPPORT 334 depends on AVB_SUPPORT
335 335
336 config AVB_WARNING_LOGO
337 bool "Enable avb warning show logo on screen"
338 help
339 Enable avb warning show logo on screen
340
341 config AVB_WARNING_LOGO_COLS
342 hex "x resolution on the screen"
343 default 0x1E0
344 depends on AVB_WARNING_LOGO
345 help
346 The x resolution on the screen.
347
348 config AVB_WARNING_LOGO_ROWS
349 hex "y resolution on the screen"
350 default 0x60
351 depends on AVB_WARNING_LOGO
352 help
353 The y resolution on the screen.
354
355 config AVB_WARNING_TIME_LAST
356 hex "the time of avb warning logo will last"
357 default 0x3
358 help
359 The time of avb warning logo will last (s).
360
336 config APPEND_BOOTARGS 361 config APPEND_BOOTARGS
337 bool "Append bootargs support" 362 bool "Append bootargs support"
338 363
339 config DUAL_BOOTLOADER 364 config DUAL_BOOTLOADER
340 bool "Enable dual bootloader support" 365 bool "Enable dual bootloader support"
341 help 366 help
342 Enable A/B bootloader select in SPL. 367 Enable A/B bootloader select in SPL.
343 368
344 config AT_AUTHENTICATE_UNLOCK 369 config AT_AUTHENTICATE_UNLOCK
345 bool "Enable authenticate unlock for Android Things devices" 370 bool "Enable authenticate unlock for Android Things devices"
346 371
347 config SECURE_UNLOCK 372 config SECURE_UNLOCK
348 bool "Enable secure unlock for Android devices, it can only be enabled on HAB closed board" 373 bool "Enable secure unlock for Android devices, it can only be enabled on HAB closed board"
349 374
350 config TRUSTY_UNLOCK_PERMISSION 375 config TRUSTY_UNLOCK_PERMISSION
351 bool "Support unlock permission protection in trusty" 376 bool "Support unlock permission protection in trusty"
352 depends on IMX_TRUSTY_OS 377 depends on IMX_TRUSTY_OS
353 378
354 endmenu 379 endmenu
355 380
356 menu "Hashing Support" 381 menu "Hashing Support"
357 382
358 config SHA1 383 config SHA1
359 bool "Enable SHA1 support" 384 bool "Enable SHA1 support"
360 help 385 help
361 This option enables support of hashing using SHA1 algorithm. 386 This option enables support of hashing using SHA1 algorithm.
362 The hash is calculated in software. 387 The hash is calculated in software.
363 The SHA1 algorithm produces a 160-bit (20-byte) hash value 388 The SHA1 algorithm produces a 160-bit (20-byte) hash value
364 (digest). 389 (digest).
365 390
366 config SHA256 391 config SHA256
367 bool "Enable SHA256 support" 392 bool "Enable SHA256 support"
368 help 393 help
369 This option enables support of hashing using SHA256 algorithm. 394 This option enables support of hashing using SHA256 algorithm.
370 The hash is calculated in software. 395 The hash is calculated in software.
371 The SHA256 algorithm produces a 256-bit (32-byte) hash value 396 The SHA256 algorithm produces a 256-bit (32-byte) hash value
372 (digest). 397 (digest).
373 398
374 config SHA_HW_ACCEL 399 config SHA_HW_ACCEL
375 bool "Enable hashing using hardware" 400 bool "Enable hashing using hardware"
376 help 401 help
377 This option enables hardware acceleration 402 This option enables hardware acceleration
378 for SHA1/SHA256 hashing. 403 for SHA1/SHA256 hashing.
379 This affects the 'hash' command and also the 404 This affects the 'hash' command and also the
380 hash_lookup_algo() function. 405 hash_lookup_algo() function.
381 406
382 config SHA_PROG_HW_ACCEL 407 config SHA_PROG_HW_ACCEL
383 bool "Enable Progressive hashing support using hardware" 408 bool "Enable Progressive hashing support using hardware"
384 depends on SHA_HW_ACCEL 409 depends on SHA_HW_ACCEL
385 help 410 help
386 This option enables hardware-acceleration for 411 This option enables hardware-acceleration for
387 SHA1/SHA256 progressive hashing. 412 SHA1/SHA256 progressive hashing.
388 Data can be streamed in a block at a time and the hashing 413 Data can be streamed in a block at a time and the hashing
389 is performed in hardware. 414 is performed in hardware.
390 415
391 config MD5 416 config MD5
392 bool 417 bool
393 418
394 config CRC32C 419 config CRC32C
395 bool 420 bool
396 421
397 config XXHASH 422 config XXHASH
398 bool 423 bool
399 424
400 endmenu 425 endmenu
401 426
402 menu "Compression Support" 427 menu "Compression Support"
403 428
404 config LZ4 429 config LZ4
405 bool "Enable LZ4 decompression support" 430 bool "Enable LZ4 decompression support"
406 help 431 help
407 If this option is set, support for LZ4 compressed images 432 If this option is set, support for LZ4 compressed images
408 is included. The LZ4 algorithm can run in-place as long as the 433 is included. The LZ4 algorithm can run in-place as long as the
409 compressed image is loaded to the end of the output buffer, and 434 compressed image is loaded to the end of the output buffer, and
410 trades lower compression ratios for much faster decompression. 435 trades lower compression ratios for much faster decompression.
411 436
412 NOTE: This implements the release version of the LZ4 frame 437 NOTE: This implements the release version of the LZ4 frame
413 format as generated by default by the 'lz4' command line tool. 438 format as generated by default by the 'lz4' command line tool.
414 This is not the same as the outdated, less efficient legacy 439 This is not the same as the outdated, less efficient legacy
415 frame format currently (2015) implemented in the Linux kernel 440 frame format currently (2015) implemented in the Linux kernel
416 (generated by 'lz4 -l'). The two formats are incompatible. 441 (generated by 'lz4 -l'). The two formats are incompatible.
417 442
418 config LZMA 443 config LZMA
419 bool "Enable LZMA decompression support" 444 bool "Enable LZMA decompression support"
420 help 445 help
421 This enables support for LZMA (Lempel-Ziv-Markov chain algorithm), 446 This enables support for LZMA (Lempel-Ziv-Markov chain algorithm),
422 a dictionary compression algorithm that provides a high compression 447 a dictionary compression algorithm that provides a high compression
423 ratio and fairly fast decompression speed. See also 448 ratio and fairly fast decompression speed. See also
424 CONFIG_CMD_LZMADEC which provides a decode command. 449 CONFIG_CMD_LZMADEC which provides a decode command.
425 450
426 config LZO 451 config LZO
427 bool "Enable LZO decompression support" 452 bool "Enable LZO decompression support"
428 help 453 help
429 This enables support for LZO compression algorithm.r 454 This enables support for LZO compression algorithm.r
430 455
431 config GZIP 456 config GZIP
432 bool "Enable gzip decompression support" 457 bool "Enable gzip decompression support"
433 select ZLIB 458 select ZLIB
434 default y 459 default y
435 help 460 help
436 This enables support for GZIP compression algorithm. 461 This enables support for GZIP compression algorithm.
437 462
438 config ZLIB 463 config ZLIB
439 bool 464 bool
440 default y 465 default y
441 help 466 help
442 This enables ZLIB compression lib. 467 This enables ZLIB compression lib.
443 468
444 config ZSTD 469 config ZSTD
445 bool "Enable Zstandard decompression support" 470 bool "Enable Zstandard decompression support"
446 select XXHASH 471 select XXHASH
447 help 472 help
448 This enables Zstandard decompression library. 473 This enables Zstandard decompression library.
449 474
450 config SPL_LZ4 475 config SPL_LZ4
451 bool "Enable LZ4 decompression support in SPL" 476 bool "Enable LZ4 decompression support in SPL"
452 help 477 help
453 This enables support for tge LZ4 decompression algorithm in SPL. LZ4 478 This enables support for tge LZ4 decompression algorithm in SPL. LZ4
454 is a lossless data compression algorithm that is focused on 479 is a lossless data compression algorithm that is focused on
455 fast compression and decompression speed. It belongs to the LZ77 480 fast compression and decompression speed. It belongs to the LZ77
456 family of byte-oriented compression schemes. 481 family of byte-oriented compression schemes.
457 482
458 config SPL_LZO 483 config SPL_LZO
459 bool "Enable LZO decompression support in SPL" 484 bool "Enable LZO decompression support in SPL"
460 help 485 help
461 This enables support for LZO compression algorithm in the SPL. 486 This enables support for LZO compression algorithm in the SPL.
462 487
463 config SPL_GZIP 488 config SPL_GZIP
464 bool "Enable gzip decompression support for SPL build" 489 bool "Enable gzip decompression support for SPL build"
465 select SPL_ZLIB 490 select SPL_ZLIB
466 help 491 help
467 This enables support for GZIP compression altorithm for SPL boot. 492 This enables support for GZIP compression altorithm for SPL boot.
468 493
469 config SPL_ZLIB 494 config SPL_ZLIB
470 bool 495 bool
471 help 496 help
472 This enables compression lib for SPL boot. 497 This enables compression lib for SPL boot.
473 498
474 config SPL_ZSTD 499 config SPL_ZSTD
475 bool "Enable Zstandard decompression support in SPL" 500 bool "Enable Zstandard decompression support in SPL"
476 select XXHASH 501 select XXHASH
477 help 502 help
478 This enables Zstandard decompression library in the SPL. 503 This enables Zstandard decompression library in the SPL.
479 504
480 endmenu 505 endmenu
481 506
482 config ERRNO_STR 507 config ERRNO_STR
483 bool "Enable function for getting errno-related string message" 508 bool "Enable function for getting errno-related string message"
484 help 509 help
485 The function errno_str(int errno), returns a pointer to the errno 510 The function errno_str(int errno), returns a pointer to the errno
486 corresponding text message: 511 corresponding text message:
487 - if errno is null or positive number - a pointer to "Success" message 512 - if errno is null or positive number - a pointer to "Success" message
488 - if errno is negative - a pointer to errno related message 513 - if errno is negative - a pointer to errno related message
489 514
490 config HEXDUMP 515 config HEXDUMP
491 bool "Enable hexdump" 516 bool "Enable hexdump"
492 help 517 help
493 This enables functions for printing dumps of binary data. 518 This enables functions for printing dumps of binary data.
494 519
495 config OF_LIBFDT 520 config OF_LIBFDT
496 bool "Enable the FDT library" 521 bool "Enable the FDT library"
497 default y if OF_CONTROL 522 default y if OF_CONTROL
498 help 523 help
499 This enables the FDT library (libfdt). It provides functions for 524 This enables the FDT library (libfdt). It provides functions for
500 accessing binary device tree images in memory, such as adding and 525 accessing binary device tree images in memory, such as adding and
501 removing nodes and properties, scanning through the tree and finding 526 removing nodes and properties, scanning through the tree and finding
502 particular compatible nodes. The library operates on a flattened 527 particular compatible nodes. The library operates on a flattened
503 version of the device tree. 528 version of the device tree.
504 529
505 config OF_LIBFDT_ASSUME_MASK 530 config OF_LIBFDT_ASSUME_MASK
506 hex "Mask of conditions to assume for libfdt" 531 hex "Mask of conditions to assume for libfdt"
507 depends on OF_LIBFDT || FIT 532 depends on OF_LIBFDT || FIT
508 default 0 533 default 0
509 help 534 help
510 Use this to change the assumptions made by libfdt about the 535 Use this to change the assumptions made by libfdt about the
511 device tree it is working with. A value of 0 means that no assumptions 536 device tree it is working with. A value of 0 means that no assumptions
512 are made, and libfdt is able to deal with malicious data. A value of 537 are made, and libfdt is able to deal with malicious data. A value of
513 0xff means all assumptions are made and any invalid data may cause 538 0xff means all assumptions are made and any invalid data may cause
514 unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h 539 unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
515 540
516 config OF_LIBFDT_OVERLAY 541 config OF_LIBFDT_OVERLAY
517 bool "Enable the FDT library overlay support" 542 bool "Enable the FDT library overlay support"
518 depends on OF_LIBFDT 543 depends on OF_LIBFDT
519 default y if ARCH_OMAP2PLUS || ARCH_KEYSTONE 544 default y if ARCH_OMAP2PLUS || ARCH_KEYSTONE
520 help 545 help
521 This enables the FDT library (libfdt) overlay support. 546 This enables the FDT library (libfdt) overlay support.
522 547
523 config SPL_OF_LIBFDT 548 config SPL_OF_LIBFDT
524 bool "Enable the FDT library for SPL" 549 bool "Enable the FDT library for SPL"
525 default y if SPL_OF_CONTROL 550 default y if SPL_OF_CONTROL
526 help 551 help
527 This enables the FDT library (libfdt). It provides functions for 552 This enables the FDT library (libfdt). It provides functions for
528 accessing binary device tree images in memory, such as adding and 553 accessing binary device tree images in memory, such as adding and
529 removing nodes and properties, scanning through the tree and finding 554 removing nodes and properties, scanning through the tree and finding
530 particular compatible nodes. The library operates on a flattened 555 particular compatible nodes. The library operates on a flattened
531 version of the device tree. 556 version of the device tree.
532 557
533 config SPL_OF_LIBFDT_ASSUME_MASK 558 config SPL_OF_LIBFDT_ASSUME_MASK
534 hex "Mask of conditions to assume for libfdt" 559 hex "Mask of conditions to assume for libfdt"
535 depends on SPL_OF_LIBFDT || FIT 560 depends on SPL_OF_LIBFDT || FIT
536 default 0xff 561 default 0xff
537 help 562 help
538 Use this to change the assumptions made by libfdt in SPL about the 563 Use this to change the assumptions made by libfdt in SPL about the
539 device tree it is working with. A value of 0 means that no assumptions 564 device tree it is working with. A value of 0 means that no assumptions
540 are made, and libfdt is able to deal with malicious data. A value of 565 are made, and libfdt is able to deal with malicious data. A value of
541 0xff means all assumptions are made and any invalid data may cause 566 0xff means all assumptions are made and any invalid data may cause
542 unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h 567 unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
543 568
544 config TPL_OF_LIBFDT 569 config TPL_OF_LIBFDT
545 bool "Enable the FDT library for TPL" 570 bool "Enable the FDT library for TPL"
546 default y if TPL_OF_CONTROL 571 default y if TPL_OF_CONTROL
547 help 572 help
548 This enables the FDT library (libfdt). It provides functions for 573 This enables the FDT library (libfdt). It provides functions for
549 accessing binary device tree images in memory, such as adding and 574 accessing binary device tree images in memory, such as adding and
550 removing nodes and properties, scanning through the tree and finding 575 removing nodes and properties, scanning through the tree and finding
551 particular compatible nodes. The library operates on a flattened 576 particular compatible nodes. The library operates on a flattened
552 version of the device tree. 577 version of the device tree.
553 578
554 config TPL_OF_LIBFDT_ASSUME_MASK 579 config TPL_OF_LIBFDT_ASSUME_MASK
555 hex "Mask of conditions to assume for libfdt" 580 hex "Mask of conditions to assume for libfdt"
556 depends on TPL_OF_LIBFDT || FIT 581 depends on TPL_OF_LIBFDT || FIT
557 default 0xff 582 default 0xff
558 help 583 help
559 Use this to change the assumptions made by libfdt in TPL about the 584 Use this to change the assumptions made by libfdt in TPL about the
560 device tree it is working with. A value of 0 means that no assumptions 585 device tree it is working with. A value of 0 means that no assumptions
561 are made, and libfdt is able to deal with malicious data. A value of 586 are made, and libfdt is able to deal with malicious data. A value of
562 0xff means all assumptions are made and any invalid data may cause 587 0xff means all assumptions are made and any invalid data may cause
563 unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h 588 unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
564 589
565 config FDT_FIXUP_PARTITIONS 590 config FDT_FIXUP_PARTITIONS
566 bool "overwrite MTD partitions in DTS through defined in 'mtdparts'" 591 bool "overwrite MTD partitions in DTS through defined in 'mtdparts'"
567 depends on OF_LIBFDT 592 depends on OF_LIBFDT
568 depends on CMD_MTDPARTS 593 depends on CMD_MTDPARTS
569 help 594 help
570 Allow overwriting defined partitions in the device tree blob 595 Allow overwriting defined partitions in the device tree blob
571 using partition info defined in the 'mtdparts' environment 596 using partition info defined in the 'mtdparts' environment
572 variable. 597 variable.
573 598
574 menu "System tables" 599 menu "System tables"
575 depends on (!EFI && !SYS_COREBOOT) || (ARM && EFI_LOADER) 600 depends on (!EFI && !SYS_COREBOOT) || (ARM && EFI_LOADER)
576 601
577 config GENERATE_SMBIOS_TABLE 602 config GENERATE_SMBIOS_TABLE
578 bool "Generate an SMBIOS (System Management BIOS) table" 603 bool "Generate an SMBIOS (System Management BIOS) table"
579 default y 604 default y
580 depends on X86 || EFI_LOADER 605 depends on X86 || EFI_LOADER
581 help 606 help
582 The System Management BIOS (SMBIOS) specification addresses how 607 The System Management BIOS (SMBIOS) specification addresses how
583 motherboard and system vendors present management information about 608 motherboard and system vendors present management information about
584 their products in a standard format by extending the BIOS interface 609 their products in a standard format by extending the BIOS interface
585 on Intel architecture systems. 610 on Intel architecture systems.
586 611
587 Check http://www.dmtf.org/standards/smbios for details. 612 Check http://www.dmtf.org/standards/smbios for details.
588 613
589 config SMBIOS_MANUFACTURER 614 config SMBIOS_MANUFACTURER
590 string "SMBIOS Manufacturer" 615 string "SMBIOS Manufacturer"
591 depends on GENERATE_SMBIOS_TABLE 616 depends on GENERATE_SMBIOS_TABLE
592 default SYS_VENDOR 617 default SYS_VENDOR
593 help 618 help
594 The board manufacturer to store in SMBIOS structures. 619 The board manufacturer to store in SMBIOS structures.
595 Change this to override the default one (CONFIG_SYS_VENDOR). 620 Change this to override the default one (CONFIG_SYS_VENDOR).
596 621
597 config SMBIOS_PRODUCT_NAME 622 config SMBIOS_PRODUCT_NAME
598 string "SMBIOS Product Name" 623 string "SMBIOS Product Name"
599 depends on GENERATE_SMBIOS_TABLE 624 depends on GENERATE_SMBIOS_TABLE
600 default SYS_BOARD 625 default SYS_BOARD
601 help 626 help
602 The product name to store in SMBIOS structures. 627 The product name to store in SMBIOS structures.
603 Change this to override the default one (CONFIG_SYS_BOARD). 628 Change this to override the default one (CONFIG_SYS_BOARD).
604 629
605 endmenu 630 endmenu
606 631
607 config ASN1_COMPILER 632 config ASN1_COMPILER
608 bool 633 bool
609 634
610 config ASN1_DECODER 635 config ASN1_DECODER
611 bool 636 bool
612 help 637 help
613 Enable asn1 decoder library. 638 Enable asn1 decoder library.
614 639
615 config OID_REGISTRY 640 config OID_REGISTRY
616 bool 641 bool
617 help 642 help
618 Enable fast lookup object identifier registry. 643 Enable fast lookup object identifier registry.
619 644
620 source lib/efi/Kconfig 645 source lib/efi/Kconfig
621 source lib/efi_loader/Kconfig 646 source lib/efi_loader/Kconfig
622 source lib/optee/Kconfig 647 source lib/optee/Kconfig
623 648
624 config TEST_FDTDEC 649 config TEST_FDTDEC
625 bool "enable fdtdec test" 650 bool "enable fdtdec test"
626 depends on OF_LIBFDT 651 depends on OF_LIBFDT
627 652
628 config LIB_DATE 653 config LIB_DATE
629 bool 654 bool
630 655
631 endmenu 656 endmenu
632 657
lib/avb/fsl/Makefile
1 ifndef CONFIG_SPL_BUILD 1 ifndef CONFIG_SPL_BUILD
2 obj-y += fsl_avb.o 2 obj-y += fsl_avb.o
3 obj-y += fsl_bootctl.o 3 obj-y += fsl_bootctl.o
4 endif 4 endif
5 5
6 obj-y += fsl_avbkey.o 6 obj-y += fsl_avbkey.o
7 obj-y += utils.o 7 obj-y += utils.o
8 obj-y += fsl_avb_ab_flow.o 8 obj-y += fsl_avb_ab_flow.o
9 obj-$(CONFIG_AVB_ATX) += fsl_atx_attributes.o 9 obj-$(CONFIG_AVB_ATX) += fsl_atx_attributes.o
10 obj-$(CONFIG_AVB_WARNING_LOGO) += orange_warning_bmp_data.o
10 11
lib/avb/fsl/orange_warning_bmp_data.c
File was created 1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright NXP 2020
4 *
5 */
6
7 /*
8 * Note: The orange_warning_bmp_palette[] and orange_warning_bmp_bitmap
9 * data are generated by "tools/bmp_logo", command:
10 * "./bmp_logo --gen-bmp source.bmp > bmp_data.c"
11 * */
12
13 #include "fsl_avb_logo.h"
14
15 unsigned short orange_warning_bmp_palette[] = {
16 0x0000, 0x0233, 0x072E, 0x0E72, 0x02E7, 0x072E, 0x0E72, 0x02E7,
17 0x072E, 0x0E72, 0x02E7, 0x072E, 0x0E72, 0x02E7, 0x072E, 0x0E72,
18 0x02E7, 0x072E, 0x0E72, 0x02E7, 0x072E, 0x0E72, 0x02E7, 0x072E,
19 0x0E72, 0x02E7, 0x072E, 0x0E72, 0x02E7, 0x072E, 0x0E72, 0x02E7,
20 0x072E, 0x0E72, 0x02E7, 0x072E, 0x0E72, 0x02E7, 0x072E, 0x0E72,
21 0x01E7, 0x0207, 0x0000, 0x02C6, 0x072F, 0x0F72, 0x02F7, 0x072F,
22 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7,
23 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72,
24 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F,
25 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7,
26 0x072F, 0x0F72, 0x02F7, 0x030F, 0x0000, 0x0211, 0x072F, 0x0F72,
27 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F,
28 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7,
29 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72,
30 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F,
31 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x000E, 0x0000, 0x0000,
32 0x0824, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72,
33 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F,
34 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7,
35 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72,
36 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x00F8, 0x0002,
37 0x0000, 0x0000, 0x0720, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7,
38 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72,
39 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F,
40 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7,
41 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72,
42 0x00D7, 0x0000, 0x0000, 0x0000, 0x0100, 0x0F82, 0x02F7, 0x072F,
43 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7,
44 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72,
45 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F, 0x0F72, 0x02F7, 0x072F,
46
47 };
48
49 unsigned char orange_warning_bmp_bitmap[] = {
50 0x42, 0x4D, 0xB6, 0x1F, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
52 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x30, 0x00,
53 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x0E,
55 0x00, 0x00, 0xC4, 0x0E, 0x00, 0x00, 0x00, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05,
57 0x05, 0x0C, 0x30, 0x34, 0x24, 0x7A, 0xE3, 0x25,
58 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA,
59 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D,
60 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25,
61 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA,
62 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D,
63 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25,
64 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA,
65 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D,
66 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25,
67 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA,
68 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D,
69 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25,
70 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA,
71 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D,
72 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25,
73 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA,
74 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D,
75 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25,
76 0x7D, 0xEA, 0x25, 0x7D, 0xEA, 0x25, 0x7D, 0xEA,
77 0x1B, 0x6C, 0x75, 0x0C, 0x2E, 0x33, 0x01, 0x05,
78 0x06, 0x20, 0x6E, 0xC7, 0x27, 0x7F, 0xFF, 0x27,
79 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
80 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
81 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
82 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
83 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
84 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
85 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
86 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
87 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
88 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
89 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
90 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
91 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
92 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
93 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
94 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
95 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
96 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
97 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
98 0x27, 0x80, 0xFE, 0x0E, 0x36, 0x3A, 0x00, 0x00,
99 0x00, 0x06, 0x16, 0x18, 0x26, 0x7F, 0xF1, 0x27,
100 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
101 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
102 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
103 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
104 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
105 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
106 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
107 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
108 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
109 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
110 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
111 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
112 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
113 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
114 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
115 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
116 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
117 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
118 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
119 0x25, 0x7B, 0xE6, 0x03, 0x0D, 0x0E, 0x00, 0x00,
120 0x00, 0x01, 0x03, 0x03, 0x0F, 0x3E, 0x43, 0x27,
121 0x80, 0xFE, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
122 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
123 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
124 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
125 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
126 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
127 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
128 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
129 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
130 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
131 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
132 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
133 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
134 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
135 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
136 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
137 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
138 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
139 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x80, 0xFD,
140 0x0A, 0x26, 0x2A, 0x00, 0x01, 0x01, 0x00, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x0D, 0x24,
142 0x79, 0xDF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
143 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
144 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
145 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
146 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
147 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
148 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
149 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
150 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
151 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
152 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
153 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
154 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
155 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
156 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
157 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
158 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
159 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
160 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x22, 0x73, 0xD2,
161 0x02, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x08,
163 0x1E, 0x20, 0x27, 0x81, 0xFC, 0x27, 0x7F, 0xFF,
164 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
165 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
166 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
167 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
168 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
169 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
170 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
171 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
172 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
173 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
174 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
175 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
176 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
177 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
178 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
179 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
180 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
181 0x7F, 0xFF, 0x27, 0x80, 0xF6, 0x07, 0x1D, 0x1F,
182 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
184 0x06, 0x06, 0x22, 0x73, 0xD3, 0x27, 0x7F, 0xFF,
185 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
186 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
187 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
188 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
189 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
190 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
191 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
192 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
193 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
194 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
195 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
196 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
197 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
198 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
199 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
200 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
201 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
202 0x7F, 0xFF, 0x1D, 0x64, 0xB5, 0x01, 0x04, 0x04,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
205 0x00, 0x00, 0x08, 0x20, 0x23, 0x26, 0x80, 0xF3,
206 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
207 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
208 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
209 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
210 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
211 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
212 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
213 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
214 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
215 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
216 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
217 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
218 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
219 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
220 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
221 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
222 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x26,
223 0x80, 0xF2, 0x03, 0x0C, 0x0C, 0x00, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x01, 0x06, 0x07, 0x11, 0x42, 0x47,
227 0x27, 0x80, 0xFE, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
228 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
229 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
230 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
231 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
232 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
233 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
234 0xFF, 0x27, 0x7F, 0xFF, 0x1E, 0x67, 0xBA, 0x13,
235 0x3E, 0x75, 0x12, 0x3E, 0x74, 0x13, 0x3F, 0x76,
236 0x21, 0x70, 0xCD, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
237 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
238 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
239 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
240 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
241 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
242 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
243 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x80, 0xFD, 0x0C,
244 0x30, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x16, 0x17,
248 0x26, 0x7E, 0xEC, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
249 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
250 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
251 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
252 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
253 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
254 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
255 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
256 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
257 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
258 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
259 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
260 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
261 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
262 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
263 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
264 0xFF, 0x27, 0x7F, 0xFF, 0x24, 0x79, 0xE0, 0x03,
265 0x0D, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x05,
269 0x0D, 0x34, 0x38, 0x27, 0x81, 0xFC, 0x27, 0x7F,
270 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
271 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
272 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
273 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
274 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
275 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
276 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
277 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
278 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
279 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
280 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
281 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
282 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
283 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
284 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
285 0xFF, 0x27, 0x81, 0xFB, 0x09, 0x25, 0x28, 0x00,
286 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
287 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290 0x04, 0x0F, 0x10, 0x23, 0x77, 0xDA, 0x27, 0x7F,
291 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
292 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
293 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
294 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
295 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
296 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
297 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
298 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
299 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
300 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
301 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
302 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
303 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
304 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
305 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
306 0xFF, 0x22, 0x74, 0xD4, 0x01, 0x05, 0x05, 0x00,
307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
308 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
309 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
311 0x00, 0x00, 0x00, 0x06, 0x17, 0x19, 0x27, 0x81,
312 0xFA, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
313 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
314 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
315 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
316 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
317 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
318 0xFF, 0x27, 0x7F, 0xFF, 0x25, 0x7B, 0xE5, 0x22,
319 0x72, 0xCF, 0x22, 0x71, 0xCF, 0x22, 0x72, 0xCF,
320 0x26, 0x7F, 0xF1, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
321 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
322 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
323 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
324 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
325 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
326 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x26, 0x7E,
327 0xED, 0x05, 0x12, 0x13, 0x00, 0x00, 0x00, 0x00,
328 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
330 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
331 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
332 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x14, 0x4F,
333 0x56, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
334 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
335 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
336 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
337 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
338 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
339 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
340 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
341 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
342 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
343 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
344 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
345 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
346 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
347 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x0C, 0x30,
348 0x34, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
349 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
352 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19,
354 0x1C, 0x26, 0x7F, 0xEF, 0x27, 0x7F, 0xFF, 0x27,
355 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
356 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
357 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
358 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
359 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
360 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
361 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
362 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
363 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
364 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
365 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
366 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
367 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
368 0x27, 0x7F, 0xFF, 0x26, 0x7D, 0xEB, 0x02, 0x06,
369 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
370 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05,
375 0x05, 0x0F, 0x3C, 0x42, 0x27, 0x80, 0xFE, 0x27,
376 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
377 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
378 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
379 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
380 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
381 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
382 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
383 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
384 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
385 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
386 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
387 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
388 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
389 0x27, 0x80, 0xFD, 0x0B, 0x2A, 0x2E, 0x00, 0x00,
390 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
391 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
392 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
393 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
394 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
395 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
396 0x00, 0x04, 0x10, 0x12, 0x25, 0x7B, 0xE6, 0x27,
397 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
398 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
399 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
400 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
401 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
402 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
403 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
404 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
405 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
406 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
407 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
408 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
409 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
410 0x22, 0x73, 0xD1, 0x01, 0x07, 0x08, 0x00, 0x00,
411 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
414 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
415 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
416 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
417 0x00, 0x00, 0x01, 0x01, 0x0A, 0x2A, 0x2D, 0x27,
418 0x81, 0xFA, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
419 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
420 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
421 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
422 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
423 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x81, 0xFC, 0x27,
424 0x81, 0xF7, 0x27, 0x81, 0xF7, 0x27, 0x81, 0xF7,
425 0x27, 0x80, 0xFD, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
426 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
427 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
428 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
429 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
430 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x81, 0xF8,
431 0x08, 0x21, 0x23, 0x00, 0x01, 0x01, 0x00, 0x00,
432 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
433 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
434 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
435 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
436 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
437 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
438 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x08, 0x22,
439 0x73, 0xD1, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
440 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
441 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
442 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
443 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
444 0xFF, 0x27, 0x7F, 0xFF, 0x12, 0x46, 0x4C, 0x07,
445 0x1C, 0x1F, 0x07, 0x1B, 0x1E, 0x07, 0x1D, 0x1F,
446 0x23, 0x75, 0xD6, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
447 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
448 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
449 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
450 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
451 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x12, 0x46, 0x4B,
452 0x01, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
453 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
455 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
456 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
458 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
459 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06,
460 0x16, 0x18, 0x27, 0x81, 0xF9, 0x27, 0x7F, 0xFF,
461 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
462 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
463 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
464 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
465 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x30, 0x35, 0x00,
466 0x02, 0x02, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02,
467 0x12, 0x45, 0x4B, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
468 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
469 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
470 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
471 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
472 0x7F, 0xFF, 0x26, 0x7F, 0xEF, 0x04, 0x10, 0x11,
473 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
474 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
475 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
477 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
479 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
480 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
481 0x02, 0x02, 0x10, 0x3F, 0x45, 0x27, 0x80, 0xFE,
482 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
483 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
484 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
485 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
486 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
487 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
488 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
489 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
490 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
491 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
492 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
493 0x80, 0xFE, 0x0A, 0x26, 0x29, 0x00, 0x01, 0x02,
494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
499 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
501 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
502 0x00, 0x00, 0x04, 0x13, 0x15, 0x26, 0x7E, 0xEB,
503 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
504 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
505 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
506 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
507 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
508 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
509 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
510 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
511 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
512 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
513 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x24,
514 0x7B, 0xE3, 0x02, 0x08, 0x09, 0x00, 0x00, 0x00,
515 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
516 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
517 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
518 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
519 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
520 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
521 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
522 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523 0x00, 0x00, 0x01, 0x05, 0x05, 0x0D, 0x34, 0x38,
524 0x27, 0x80, 0xFD, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
525 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
526 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
527 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
528 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
529 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
530 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
531 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
532 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
533 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
534 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x81, 0xFA, 0x0A,
535 0x25, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
537 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
538 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
539 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
540 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
541 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
542 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
543 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
544 0x00, 0x00, 0x00, 0x01, 0x01, 0x04, 0x0F, 0x10,
545 0x24, 0x7B, 0xE4, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
546 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
547 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
548 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
549 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
550 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
551 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
552 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
553 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
554 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
555 0xFF, 0x27, 0x7F, 0xFF, 0x22, 0x73, 0xD2, 0x02,
556 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
557 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
558 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
559 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
560 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
561 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
562 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
563 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
564 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
565 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
566 0x08, 0x1F, 0x22, 0x27, 0x81, 0xF9, 0x27, 0x7F,
567 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
568 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
569 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
570 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
571 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
572 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
573 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
574 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
575 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
576 0xFF, 0x26, 0x7F, 0xF2, 0x05, 0x13, 0x14, 0x00,
577 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
578 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
579 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
580 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
581 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
582 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
583 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
584 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
585 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
586 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
587 0x01, 0x06, 0x06, 0x20, 0x6B, 0xC2, 0x27, 0x7F,
588 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
589 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
590 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
591 0xFF, 0x27, 0x80, 0xFE, 0x0C, 0x2F, 0x34, 0x00,
592 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
593 0x12, 0x45, 0x4A, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
594 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
595 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
596 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
597 0xFF, 0x0F, 0x3B, 0x40, 0x01, 0x04, 0x04, 0x00,
598 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
599 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
600 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
601 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
602 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
603 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
604 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
605 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
606 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
607 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
608 0x00, 0x00, 0x00, 0x04, 0x11, 0x12, 0x26, 0x80,
609 0xF2, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
610 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
611 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
612 0xFF, 0x27, 0x80, 0xFE, 0x0E, 0x3A, 0x3F, 0x03,
613 0x0E, 0x0F, 0x03, 0x0D, 0x0E, 0x03, 0x0E, 0x0F,
614 0x21, 0x71, 0xCE, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
615 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
616 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
617 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x24, 0x7A,
618 0xE3, 0x04, 0x0D, 0x0E, 0x00, 0x00, 0x00, 0x00,
619 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
620 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
621 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
622 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
623 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
624 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
626 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
627 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
629 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x10, 0x3F,
630 0x45, 0x27, 0x80, 0xFE, 0x27, 0x7F, 0xFF, 0x27,
631 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
632 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
633 0xFF, 0x27, 0x7F, 0xFF, 0x26, 0x7F, 0xF0, 0x25,
634 0x7B, 0xE4, 0x25, 0x7B, 0xE4, 0x25, 0x7B, 0xE4,
635 0x27, 0x81, 0xF8, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
636 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
637 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
638 0x27, 0x7F, 0xFF, 0x27, 0x80, 0xFE, 0x09, 0x23,
639 0x26, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
640 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
643 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
644 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
645 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
646 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
647 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
648 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
649 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10,
651 0x11, 0x25, 0x7B, 0xE4, 0x27, 0x7F, 0xFF, 0x27,
652 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
653 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
654 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
655 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
656 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
657 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
658 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
659 0x27, 0x7F, 0xFF, 0x23, 0x75, 0xD6, 0x01, 0x02,
660 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
661 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
662 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
663 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
664 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
665 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
666 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
667 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
668 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
669 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
671 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
672 0x03, 0x0B, 0x2B, 0x2E, 0x27, 0x81, 0xFB, 0x27,
673 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
674 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
675 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
676 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
677 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
678 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
679 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
680 0x27, 0x81, 0xF7, 0x08, 0x20, 0x23, 0x00, 0x00,
681 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
682 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
683 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
684 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
685 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
687 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
688 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
689 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
690 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
691 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
692 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
693 0x00, 0x03, 0x0C, 0x0C, 0x23, 0x76, 0xD9, 0x27,
694 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
695 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
696 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
697 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
698 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
699 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
700 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
701 0x20, 0x6D, 0xC6, 0x01, 0x06, 0x07, 0x00, 0x00,
702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
703 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
704 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
705 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
706 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
707 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
708 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
709 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
710 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
711 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
712 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
714 0x00, 0x00, 0x01, 0x02, 0x09, 0x25, 0x29, 0x27,
715 0x80, 0xF5, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
716 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
717 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
718 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
719 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
720 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
721 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x26, 0x80, 0xF2,
722 0x04, 0x12, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
723 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
724 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
725 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
726 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
727 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
728 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
729 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
730 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
731 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
732 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
733 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
734 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
735 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x0F,
736 0x3D, 0x42, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
737 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
738 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
739 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
740 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
741 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
742 0x7F, 0xFF, 0x27, 0x80, 0xFD, 0x0D, 0x33, 0x37,
743 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
744 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
745 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
747 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
748 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
749 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
751 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
752 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
753 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
754 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
755 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
756 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
757 0x0D, 0x0E, 0x26, 0x7F, 0xF1, 0x27, 0x7F, 0xFF,
758 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
759 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
760 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
761 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
762 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
763 0x7F, 0xFF, 0x24, 0x7A, 0xE1, 0x03, 0x0D, 0x0E,
764 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
765 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
766 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
767 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
768 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
769 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
770 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
771 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
772 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
773 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
775 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
776 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
777 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
778 0x02, 0x02, 0x0E, 0x38, 0x3C, 0x27, 0x80, 0xFC,
779 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
780 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
781 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
782 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
783 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
784 0x80, 0xFD, 0x07, 0x1C, 0x1E, 0x00, 0x01, 0x01,
785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
786 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
787 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
788 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
789 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
790 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
791 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
792 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
793 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
794 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
795 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
796 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
797 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
798 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
799 0x00, 0x00, 0x04, 0x11, 0x12, 0x24, 0x79, 0xE0,
800 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
801 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
802 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
803 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
804 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x23,
805 0x77, 0xDA, 0x01, 0x04, 0x04, 0x00, 0x00, 0x00,
806 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
807 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
808 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
809 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
811 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
813 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
814 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
816 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
818 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
819 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x27, 0x2A,
821 0x27, 0x81, 0xF9, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
822 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
823 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
824 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
825 0xFF, 0x27, 0x7F, 0xFF, 0x26, 0x80, 0xF3, 0x06,
826 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
827 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
828 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
829 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
830 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
832 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
834 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
836 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
838 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
839 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
840 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
841 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x08,
842 0x22, 0x73, 0xD2, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
843 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
844 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
845 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
846 0xFF, 0x27, 0x7F, 0xFF, 0x10, 0x3F, 0x44, 0x01,
847 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
849 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
850 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
851 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
852 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
855 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
856 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
857 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
858 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
859 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
860 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
861 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
863 0x06, 0x19, 0x1B, 0x26, 0x7F, 0xF2, 0x27, 0x7F,
864 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
865 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
866 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F,
867 0xFF, 0x26, 0x7E, 0xEC, 0x04, 0x10, 0x11, 0x00,
868 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
869 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
872 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
873 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
874 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
875 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
876 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
877 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
878 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
879 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
880 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
881 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
883 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
884 0x01, 0x05, 0x05, 0x1E, 0x65, 0xB6, 0x27, 0x7F,
885 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
886 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
887 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x80,
888 0xFE, 0x0A, 0x2A, 0x2D, 0x00, 0x01, 0x01, 0x00,
889 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
890 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
891 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
892 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
893 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
894 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
895 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
896 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
897 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
898 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
899 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
900 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
901 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
902 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
903 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
904 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
905 0x00, 0x00, 0x00, 0x03, 0x0B, 0x0D, 0x25, 0x7C,
906 0xE7, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27,
907 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
908 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x22, 0x72,
909 0xD0, 0x01, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00,
910 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
911 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
912 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
913 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
914 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
915 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
916 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
917 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
919 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
920 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
921 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
922 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
923 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
924 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
925 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
926 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x2E,
927 0x32, 0x27, 0x81, 0xFB, 0x27, 0x7F, 0xFF, 0x27,
928 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
929 0x27, 0x7F, 0xFF, 0x27, 0x81, 0xFA, 0x06, 0x18,
930 0x1B, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
931 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
932 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
933 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
934 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
935 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
936 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
938 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
939 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
940 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
942 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
943 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
944 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
945 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
946 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
947 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0D,
948 0x0E, 0x23, 0x75, 0xD7, 0x27, 0x7F, 0xFF, 0x27,
949 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
950 0x27, 0x7F, 0xFF, 0x21, 0x6F, 0xCA, 0x01, 0x02,
951 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
952 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
953 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
954 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
955 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
956 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
957 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
958 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
959 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
960 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
961 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
962 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
963 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
964 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
965 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
966 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
967 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
968 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
969 0x02, 0x09, 0x23, 0x26, 0x27, 0x81, 0xF7, 0x27,
970 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x7F, 0xFF,
971 0x26, 0x80, 0xF2, 0x05, 0x15, 0x16, 0x00, 0x00,
972 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
973 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
974 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
975 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
976 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
977 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
978 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
979 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
980 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
981 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
982 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
983 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
984 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
985 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
986 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
987 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
988 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
989 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
990 0x00, 0x01, 0x07, 0x07, 0x11, 0x43, 0x48, 0x27,
991 0x7F, 0xFF, 0x27, 0x7F, 0xFF, 0x27, 0x80, 0xFE,
992 0x0D, 0x32, 0x36, 0x01, 0x02, 0x02, 0x00, 0x00,
993 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
994 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
995 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
996 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
997 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
998 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
999 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1000 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1001 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1002 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1003 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1004 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1005 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1006 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1007 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1008 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1009 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1010 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1011 0x00, 0x00, 0x00, 0x00, 0x05, 0x13, 0x14, 0x26,
1012 0x7E, 0xED, 0x27, 0x7F, 0xFF, 0x25, 0x7C, 0xE6,
1013 0x04, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
1014 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1015 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1016 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1017 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1018 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1019 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1020 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1021 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1022 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1023 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1024 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1025 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1026 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1027 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1028 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1029 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1030 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1031 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1032 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0C,
1033 0x2F, 0x32, 0x25, 0x7C, 0xE8, 0x0A, 0x27, 0x2B,
1034 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
1035 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1036 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1037 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1038 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1039 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1040 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1041 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1042 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1043 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1044 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1045 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1046 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1047 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1048 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1049 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1050 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1051 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1052 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1053 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
1054 0x08, 0x09, 0x05, 0x13, 0x14, 0x01, 0x04, 0x04,
1055 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1058 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1059 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1060 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1061 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1062 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1063 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1064 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1065 };
1066
1067