2 * $Id: prom.c,v 1.73 1999/09/05 11:56:32 paulus Exp $
4 * Procedures for interfacing to the Open Firmware PROM on
5 * Power Macintosh computers.
7 * In particular, we are interested in the device tree
8 * and in using some of its services (exit, write to stdout).
10 * Paul Mackerras August 1996.
11 * Copyright (C) 1996 Paul Mackerras.
14 #include <linux/config.h>
15 #include <linux/kernel.h>
16 #include <linux/string.h>
17 #include <linux/init.h>
18 #include <linux/version.h>
19 #include <linux/threads.h>
20 #include <linux/spinlock.h>
25 #include <asm/processor.h>
29 #include <asm/bootx.h>
30 #include <asm/system.h>
31 #include <asm/gemini.h>
34 * Properties whose value is longer than this get excluded from our
35 * copy of the device tree. This way we don't waste space storing
36 * things like "driver,AAPL,MacOS,PowerPC" properties.
38 #define MAX_PROPERTY_LENGTH 1024
53 struct pci_reg_property
{
54 struct pci_address addr
;
60 struct pci_address addr
;
66 struct isa_reg_property
{
73 struct pci_address addr
;
79 typedef unsigned long interpret_func(struct device_node
*, unsigned long);
80 static interpret_func interpret_pci_props
;
81 static interpret_func interpret_dbdma_props
;
82 static interpret_func interpret_isa_props
;
83 static interpret_func interpret_macio_props
;
84 static interpret_func interpret_root_props
;
86 #ifndef FB_MAX /* avoid pulling in all of the fb stuff */
89 char *prom_display_paths
[FB_MAX
] __initdata
= { 0, };
90 unsigned int prom_num_displays
= 0;
91 char *of_stdout_device
= 0;
94 ihandle prom_chosen
= 0, prom_stdout
= 0;
100 unsigned int rtas_data
= 0; /* virtual pointer */
101 unsigned int rtas_entry
= 0; /* physical pointer */
102 unsigned int rtas_size
= 0;
103 unsigned int old_rtas
= 0;
105 static struct device_node
*allnodes
= 0;
107 static void clearscreen(void);
108 static void flushscreen(void);
110 #ifdef CONFIG_BOOTX_TEXT
112 static void drawchar(char c
);
113 static void drawhex(unsigned long v
);
114 static void drawstring(const char *c
);
115 static void scrollscreen(void);
117 static void draw_byte(unsigned char c
, long locX
, long locY
);
118 static void draw_byte_32(unsigned char *bits
, unsigned long *base
);
119 static void draw_byte_16(unsigned char *bits
, unsigned long *base
);
120 static void draw_byte_8(unsigned char *bits
, unsigned long *base
);
124 static long g_max_loc_X
;
125 static long g_max_loc_Y
;
127 #define cmapsz (16*256)
129 static unsigned char vga_font
[cmapsz
];
134 static void *call_prom(const char *service
, int nargs
, int nret
, ...);
135 static void prom_exit(void);
136 static unsigned long copy_device_tree(unsigned long, unsigned long);
137 static unsigned long inspect_node(phandle
, struct device_node
*, unsigned long,
138 unsigned long, struct device_node
***);
139 static unsigned long finish_node(struct device_node
*, unsigned long,
141 static void relocate_nodes(void);
142 static unsigned long check_display(unsigned long);
143 static int prom_next_node(phandle
*);
144 static void *early_get_property(unsigned long, unsigned long, char *);
146 extern void enter_rtas(void *);
147 extern unsigned long reloc_offset(void);
149 extern char cmd_line
[512]; /* XXX */
150 boot_infos_t
*boot_infos
= 0; /* init it so it's in data segment not bss */
153 * prom_init() is called very early on, before the kernel text
154 * and data have been mapped to KERNELBASE. At this point the code
155 * is running at whatever address it has been loaded at, so
156 * references to extern and static variables must be relocated
157 * explicitly. The procedure reloc_offset() returns the address
158 * we're currently running at minus the address we were linked at.
159 * (Note that strings count as static variables.)
161 * Because OF may have mapped I/O devices into the area starting at
162 * KERNELBASE, particularly on CHRP machines, we can't safely call
163 * OF once the kernel has been mapped to KERNELBASE. Therefore all
164 * OF calls should be done within prom_init(), and prom_init()
165 * and all routines called within it must be careful to relocate
166 * references as necessary.
168 * Note that the bss is cleared *after* prom_init runs, so we have
169 * to make sure that any static or extern variables it accesses
170 * are put in the data segment.
172 #define PTRRELOC(x) ((typeof(x))((unsigned long)(x) + offset))
173 #define PTRUNRELOC(x) ((typeof(x))((unsigned long)(x) - offset))
174 #define RELOC(x) (*PTRRELOC(&(x)))
176 #define ALIGN(x) (((x) + sizeof(unsigned long)-1) & -sizeof(unsigned long))
178 /* Is boot-info compatible ? */
179 #define BOOT_INFO_IS_COMPATIBLE(bi) ((bi)->compatible_version <= BOOT_INFO_VERSION)
180 #define BOOT_INFO_IS_V2_COMPATIBLE(bi) ((bi)->version >= 2)
181 #define BOOT_INFO_IS_V4_COMPATIBLE(bi) ((bi)->version >= 4)
187 struct prom_args args
;
188 unsigned long offset
= reloc_offset();
190 args
.service
= "exit";
194 for (;;) /* should never get here */
202 struct prom_args args
;
203 unsigned long offset
= reloc_offset();
205 args
.service
= RELOC("enter");
213 call_prom(const char *service
, int nargs
, int nret
, ...)
217 unsigned long offset
= reloc_offset();
218 struct prom_args prom_args
;
220 prom_args
.service
= service
;
221 prom_args
.nargs
= nargs
;
222 prom_args
.nret
= nret
;
223 va_start(list
, nret
);
224 for (i
= 0; i
< nargs
; ++i
)
225 prom_args
.args
[i
] = va_arg(list
, void *);
227 for (i
= 0; i
< nret
; ++i
)
228 prom_args
.args
[i
+ nargs
] = 0;
229 RELOC(prom
)(&prom_args
);
230 return prom_args
.args
[nargs
];
235 prom_print(const char *msg
)
238 unsigned long offset
= reloc_offset();
240 if (RELOC(prom_stdout
) == 0)
242 #ifdef CONFIG_BOOTX_TEXT
243 if (RELOC(boot_infos
) != 0)
250 for (p
= msg
; *p
!= 0; p
= q
) {
251 for (q
= p
; *q
!= 0 && *q
!= '\n'; ++q
)
254 call_prom(RELOC("write"), 3, 1, RELOC(prom_stdout
),
258 call_prom(RELOC("write"), 3, 1, RELOC(prom_stdout
),
264 unsigned long smp_ibm_chrp_hack __initdata
= 0;
265 unsigned long smp_chrp_cpu_nr __initdata
= 1;
268 * We enter here early on, when the Open Firmware prom is still
269 * handling exceptions and the MMU hash table for us.
273 prom_init(int r3
, int r4
, prom_entry pp
)
278 char type
[16], *path
;
282 unsigned long offset
= reloc_offset();
289 #endif /* CONFIG_GEMINI */
291 /* check if we're apus, return if we are */
292 if ( r3
== 0x61707573 )
295 /* If we came here from BootX, clear the screen,
296 * set up some pointers and return. */
297 if (r3
== 0x426f6f58 && pp
== NULL
) {
298 boot_infos_t
*bi
= (boot_infos_t
*) r4
;
300 unsigned long ptr
, x
;
302 #ifdef CONFIG_BOOTX_TEXT
306 RELOC(boot_infos
) = PTRUNRELOC(bi
);
310 #ifdef CONFIG_BOOTX_TEXT
313 RELOC(g_max_loc_X
) = (bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) / 8;
314 RELOC(g_max_loc_Y
) = (bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1]) / 16;
316 /* Test if boot-info is compatible. Done only in config CONFIG_BOOTX_TEXT since
317 there is nothing much we can do with an incompatible version, except display
318 a message and eventually hang the processor...
320 I'll try to keep enough of boot-info compatible in the future to always allow
321 display of this message;
323 if (!BOOT_INFO_IS_COMPATIBLE(bi
))
324 prom_print(RELOC(" !!! WARNING - Incompatible version of BootX !!!\n\n\n"));
326 prom_print(RELOC("Welcome to Linux, kernel " UTS_RELEASE
"\n"));
327 prom_print(RELOC("\nstarted at : 0x"));
328 drawhex(reloc_offset() + KERNELBASE
);
329 prom_print(RELOC("\nlinked at : 0x"));
331 prom_print(RELOC("\nframe buffer at : 0x"));
332 drawhex((unsigned long)bi
->dispDeviceBase
);
333 prom_print(RELOC(" (phys), 0x"));
334 drawhex((unsigned long)bi
->logicalDisplayBase
);
335 prom_print(RELOC(" (log)"));
336 prom_print(RELOC("\nMSR : 0x"));
337 __asm__
__volatile__ ("mfmsr %0" : "=r" ((flags
)) : : "memory");
339 prom_print(RELOC("\n\n"));
341 /* Out of the #if/#endif since it flushes the clearscreen too */
344 /* New BootX enters kernel with MMU off, i/os are not allowed
345 here. This hack will have been done by the boostrap anyway.
347 if (bi
->version
< 4) {
349 * XXX If this is an iMac, turn off the USB controller.
351 model
= (char *) early_get_property
352 (r4
+ bi
->deviceTreeOffset
, 4, RELOC("model"));
354 && (strcmp(model
, RELOC("iMac,1")) == 0
355 || strcmp(model
, RELOC("PowerMac1,1")) == 0)) {
356 out_le32((unsigned *)0x80880008, 1); /* XXX */
360 space
= bi
->deviceTreeOffset
+ bi
->deviceTreeSize
;
362 space
= bi
->ramDisk
+ bi
->ramDiskSize
;
363 RELOC(klimit
) = PTRUNRELOC((char *) bi
+ space
);
365 /* New BootX will have flushed all TLBs and enters kernel with
366 MMU switched OFF, so this should not be useful anymore.
368 if (bi
->version
< 4) {
370 * Touch each page to make sure the PTEs for them
371 * are in the hash table - the aim is to try to avoid
372 * getting DSI exceptions while copying the kernel image.
374 for (ptr
= (KERNELBASE
+ offset
) & PAGE_MASK
;
375 ptr
< (unsigned long)bi
+ space
; ptr
+= PAGE_SIZE
)
376 x
= *(volatile unsigned long *)ptr
;
379 #ifdef CONFIG_BOOTX_TEXT
380 prom_print(RELOC("booting...\n"));
386 /* check if we're prep, return if we are */
387 if ( *(unsigned long *)(0) == 0xdeadc0de )
390 /* First get a handle for the stdout device */
392 RELOC(prom_chosen
) = call_prom(RELOC("finddevice"), 1, 1,
394 if (RELOC(prom_chosen
) == (void *)-1)
396 if ((int) call_prom(RELOC("getprop"), 4, 1, RELOC(prom_chosen
),
397 RELOC("stdout"), &RELOC(prom_stdout
),
398 sizeof(prom_stdout
)) <= 0)
401 /* Get the full OF pathname of the stdout device */
402 mem
= (unsigned long) RELOC(klimit
) + offset
;
405 call_prom(RELOC("instance-to-path"), 3, 1, RELOC(prom_stdout
), p
, 255);
406 RELOC(of_stdout_device
) = PTRUNRELOC(p
);
407 mem
+= strlen(p
) + 1;
409 /* Get the boot device and translate it to a full OF pathname. */
411 l
= (int) call_prom(RELOC("getprop"), 4, 1, RELOC(prom_chosen
),
412 RELOC("bootpath"), p
, 1<<20);
414 p
[l
] = 0; /* should already be null-terminated */
415 RELOC(bootpath
) = PTRUNRELOC(p
);
419 call_prom(RELOC("canon"), 3, 1, p
, d
, 1<<20);
420 RELOC(bootdevice
) = PTRUNRELOC(d
);
421 mem
= ALIGN(mem
+ strlen(d
) + 1);
424 mem
= check_display(mem
);
426 prom_print(RELOC("copying OF device tree..."));
427 mem
= copy_device_tree(mem
, mem
+ (1<<20));
428 prom_print(RELOC("done\n"));
431 RELOC(klimit
) = (char *) (mem
- offset
);
433 prom_rtas
= call_prom(RELOC("finddevice"), 1, 1, RELOC("/rtas"));
434 if (prom_rtas
!= (void *) -1) {
435 RELOC(rtas_size
) = 0;
436 call_prom(RELOC("getprop"), 4, 1, prom_rtas
,
437 RELOC("rtas-size"), &RELOC(rtas_size
), sizeof(rtas_size
));
438 prom_print(RELOC("instantiating rtas..."));
439 if (RELOC(rtas_size
) == 0) {
440 RELOC(rtas_data
) = 0;
443 * We do _not_ want the rtas_data inside the klimit
444 * boundry since it'll be squashed when we do the
445 * relocate of the kernel on chrp right after prom_init()
446 * in head.S. So, we just pick a spot in memory.
450 mem
= (mem
+ 4095) & -4096;
451 RELOC(rtas_data
) = mem
+ KERNELBASE
;
452 mem
+= RELOC(rtas_size
);
454 RELOC(rtas_data
) = (6<<20) + KERNELBASE
;
456 prom_rtas
= call_prom(RELOC("open"), 1, 1, RELOC("/rtas"));
459 struct prom_args prom_args
;
461 prom_args
.service
= RELOC("call-method");
462 prom_args
.nargs
= nargs
;
464 prom_args
.args
[0] = RELOC("instantiate-rtas");
465 prom_args
.args
[1] = prom_rtas
;
466 prom_args
.args
[2] = ((void *)(RELOC(rtas_data
)-KERNELBASE
));
467 RELOC(prom
)(&prom_args
);
468 if (prom_args
.args
[nargs
] != 0)
471 i
= (int)prom_args
.args
[nargs
+1];
472 RELOC(rtas_entry
) = i
;
474 if ((RELOC(rtas_entry
) == -1) || (RELOC(rtas_entry
) == 0))
475 prom_print(RELOC(" failed\n"));
477 prom_print(RELOC(" done\n"));
482 * With CHRP SMP we need to use the OF to start the other
483 * processors so we can't wait until smp_boot_cpus (the OF is
484 * trashed by then) so we have to put the processors into
485 * a holding pattern controlled by the kernel (not OF) before
488 * This uses a chunk of high memory, puts some holding pattern
489 * code there and sends the other processors off to there until
490 * smp_boot_cpus tells them to do something. We do that by using
491 * physical address 0x0. The holding pattern checks that address
492 * until its cpu # is there, when it is that cpu jumps to
493 * __secondary_start(). smp_boot_cpus() takes care of setting those
496 * We also use physical address 0x4 here to tell when a cpu
497 * is in its holding pattern code.
502 extern void __secondary_hold(void);
508 * XXX: hack to make sure we're chrp, assume that if we're
509 * chrp we have a device_type property -- Cort
511 node
= call_prom(RELOC("finddevice"), 1, 1, RELOC("/"));
512 if ( (int)call_prom(RELOC("getprop"), 4, 1, node
,
513 RELOC("device_type"),type
, sizeof(type
)) <= 0)
516 /* copy the holding pattern code to someplace safe (8M) */
517 memcpy( (void *)(8<<20), RELOC(__secondary_hold
), 0x100 );
518 for (i
= 8<<20; i
< ((8<<20)+0x100); i
+= 32)
520 asm volatile("dcbf 0,%0" : : "r" (i
) : "memory");
521 asm volatile("icbi 0,%0" : : "r" (i
) : "memory");
526 for (node
= 0; prom_next_node(&node
);)
529 call_prom(RELOC("getprop"), 4, 1, node
, RELOC("device_type"),
531 if (strcmp(type
, RELOC("cpu")) != 0)
534 memset(path
, 0, 256);
535 if ((int) call_prom(RELOC("package-to-path"), 3, 1,
536 node
, path
, 255) < 0)
538 /* XXX: hack - don't start cpu 0, this cpu -- Cort */
539 if ( smp_chrp_cpu_nr
++ == 0 )
541 RELOC(smp_ibm_chrp_hack
) = 1;
542 prom_print(RELOC("starting cpu "));
544 *(unsigned long *)(0x4) = 0;
545 asm volatile("dcbf 0,%0": : "r" (0x4) : "memory");
546 call_prom(RELOC("start-cpu"), 3, 0, node
, 8<<20, smp_chrp_cpu_nr
-1);
547 for ( i
= 0 ; (i
< 10000) &&
548 (*(ulong
*)(0x4) == (ulong
)0); i
++ )
550 if (*(ulong
*)(0x4) == (ulong
)smp_chrp_cpu_nr
-1 )
551 prom_print(RELOC("...ok\n"));
553 prom_print(RELOC("...failed\n"));
559 * If we have a display that we don't know how to drive,
560 * we will want to try to execute OF's open method for it
561 * later. However, OF will probably fall over if we do that
562 * we've taken over the MMU.
563 * So we check whether we will need to open the display,
564 * and if so, open it now.
568 check_display(unsigned long mem
)
573 unsigned long offset
= reloc_offset();
574 char type
[16], *path
;
576 for (node
= 0; prom_next_node(&node
); ) {
578 call_prom(RELOC("getprop"), 4, 1, node
, RELOC("device_type"),
580 if (strcmp(type
, RELOC("display")) != 0)
582 /* It seems OF doesn't null-terminate the path :-( */
584 memset(path
, 0, 256);
585 if ((int) call_prom(RELOC("package-to-path"), 3, 1,
586 node
, path
, 255) < 0)
588 prom_print(RELOC("opening display "));
590 ih
= call_prom(RELOC("open"), 1, 1, path
);
591 if (ih
== 0 || ih
== (ihandle
) -1) {
592 prom_print(RELOC("... failed\n"));
595 prom_print(RELOC("... ok\n"));
598 * If this display is the device that OF is using for stdout,
599 * move it to the front of the list.
601 mem
+= strlen(path
) + 1;
602 i
= RELOC(prom_num_displays
)++;
603 if (RELOC(of_stdout_device
) != 0 && i
> 0
604 && strcmp(PTRRELOC(RELOC(of_stdout_device
)), path
) == 0) {
606 RELOC(prom_display_paths
[i
])
607 = RELOC(prom_display_paths
[i
-1]);
609 RELOC(prom_display_paths
[i
]) = PTRUNRELOC(path
);
610 if (RELOC(prom_num_displays
) >= FB_MAX
)
618 prom_next_node(phandle
*nodep
)
621 unsigned long offset
= reloc_offset();
623 if ((node
= *nodep
) != 0
624 && (*nodep
= call_prom(RELOC("child"), 1, 1, node
)) != 0)
626 if ((*nodep
= call_prom(RELOC("peer"), 1, 1, node
)) != 0)
629 if ((node
= call_prom(RELOC("parent"), 1, 1, node
)) == 0)
631 if ((*nodep
= call_prom(RELOC("peer"), 1, 1, node
)) != 0)
637 * Make a copy of the device tree from the PROM.
641 copy_device_tree(unsigned long mem_start
, unsigned long mem_end
)
644 unsigned long new_start
;
645 struct device_node
**allnextp
;
646 unsigned long offset
= reloc_offset();
648 root
= call_prom(RELOC("peer"), 1, 1, (phandle
)0);
649 if (root
== (phandle
)0) {
650 prom_print(RELOC("couldn't get device tree root\n"));
653 allnextp
= &RELOC(allnodes
);
654 mem_start
= ALIGN(mem_start
);
655 new_start
= inspect_node(root
, 0, mem_start
, mem_end
, &allnextp
);
662 inspect_node(phandle node
, struct device_node
*dad
,
663 unsigned long mem_start
, unsigned long mem_end
,
664 struct device_node
***allnextpp
)
668 struct device_node
*np
;
669 struct property
*pp
, **prev_propp
;
670 char *prev_name
, *namep
;
672 unsigned long offset
= reloc_offset();
674 np
= (struct device_node
*) mem_start
;
675 mem_start
+= sizeof(struct device_node
);
676 memset(np
, 0, sizeof(*np
));
678 **allnextpp
= PTRUNRELOC(np
);
679 *allnextpp
= &np
->allnext
;
681 np
->parent
= PTRUNRELOC(dad
);
682 /* we temporarily use the `next' field as `last_child'. */
684 dad
->child
= PTRUNRELOC(np
);
686 dad
->next
->sibling
= PTRUNRELOC(np
);
690 /* get and store all properties */
691 prev_propp
= &np
->properties
;
692 prev_name
= RELOC("");
694 pp
= (struct property
*) mem_start
;
695 namep
= (char *) (pp
+ 1);
696 pp
->name
= PTRUNRELOC(namep
);
697 if ((int) call_prom(RELOC("nextprop"), 3, 1, node
, prev_name
,
700 mem_start
= ALIGN((unsigned long)namep
+ strlen(namep
) + 1);
702 valp
= (unsigned char *) mem_start
;
703 pp
->value
= PTRUNRELOC(valp
);
705 call_prom(RELOC("getprop"), 4, 1, node
, namep
,
706 valp
, mem_end
- mem_start
);
709 #ifdef MAX_PROPERTY_LENGTH
710 if (pp
->length
> MAX_PROPERTY_LENGTH
)
711 continue; /* ignore this property */
713 mem_start
= ALIGN(mem_start
+ pp
->length
);
714 *prev_propp
= PTRUNRELOC(pp
);
715 prev_propp
= &pp
->next
;
719 /* get the node's full name */
720 l
= (int) call_prom(RELOC("package-to-path"), 3, 1, node
,
721 (char *) mem_start
, mem_end
- mem_start
);
723 np
->full_name
= PTRUNRELOC((char *) mem_start
);
724 *(char *)(mem_start
+ l
) = 0;
725 mem_start
= ALIGN(mem_start
+ l
+ 1);
728 /* do all our children */
729 child
= call_prom(RELOC("child"), 1, 1, node
);
730 while (child
!= (void *)0) {
731 mem_start
= inspect_node(child
, np
, mem_start
, mem_end
,
733 child
= call_prom(RELOC("peer"), 1, 1, child
);
740 * finish_device_tree is called once things are running normally
741 * (i.e. with text and data mapped to the address they were linked at).
742 * It traverses the device tree and fills in the name, type,
743 * {n_}addrs and {n_}intrs fields of each node.
747 finish_device_tree(void)
749 unsigned long mem
= (unsigned long) klimit
;
753 mem
= finish_node(allnodes
, mem
, NULL
);
754 printk(KERN_INFO
"device tree used %lu bytes\n",
755 mem
- (unsigned long) allnodes
);
756 klimit
= (char *) mem
;
760 * early_get_property is used to access the device tree image prepared
761 * by BootX very early on, before the pointers in it have been relocated.
764 early_get_property(unsigned long base
, unsigned long node
, char *prop
)
766 struct device_node
*np
= (struct device_node
*)(base
+ node
);
769 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
) {
770 pp
= (struct property
*) (base
+ (unsigned long)pp
);
771 if (strcmp((char *)((unsigned long)pp
->name
+ base
),
773 return (void *)((unsigned long)pp
->value
+ base
);
781 finish_node(struct device_node
*np
, unsigned long mem_start
,
782 interpret_func
*ifunc
)
784 struct device_node
*child
;
786 np
->name
= get_property(np
, "name", 0);
787 np
->type
= get_property(np
, "device_type", 0);
789 /* get the device addresses and interrupts */
791 mem_start
= ifunc(np
, mem_start
);
794 /* the f50 sets the name to 'display' and 'compatible' to what we
795 * expect for the name -- Cort
797 if (!strcmp(np
->name
, "display"))
798 np
->name
= get_property(np
, "compatible", 0);
800 if (!strcmp(np
->name
, "device-tree"))
801 ifunc
= interpret_root_props
;
802 else if (np
->type
== 0)
804 else if (!strcmp(np
->type
, "pci") || !strcmp(np
->type
, "vci"))
805 ifunc
= interpret_pci_props
;
806 else if (!strcmp(np
->type
, "dbdma"))
807 ifunc
= interpret_dbdma_props
;
808 else if (!strcmp(np
->type
, "mac-io")
809 || ifunc
== interpret_macio_props
)
810 ifunc
= interpret_macio_props
;
811 else if (!strcmp(np
->type
, "isa"))
812 ifunc
= interpret_isa_props
;
813 else if (!((ifunc
== interpret_dbdma_props
814 || ifunc
== interpret_macio_props
)
815 && (!strcmp(np
->type
, "escc")
816 || !strcmp(np
->type
, "media-bay"))))
819 /* if we were booted from BootX, convert the full name */
821 && strncmp(np
->full_name
, "Devices:device-tree", 19) == 0) {
822 if (np
->full_name
[19] == 0) {
823 strcpy(np
->full_name
, "/");
824 } else if (np
->full_name
[19] == ':') {
825 char *p
= np
->full_name
+ 19;
833 for (child
= np
->child
; child
!= NULL
; child
= child
->sibling
)
834 mem_start
= finish_node(child
, mem_start
, ifunc
);
840 * When BootX makes a copy of the device tree from the MacOS
841 * Name Registry, it is in the format we use but all of the pointers
842 * are offsets from the start of the tree.
843 * This procedure updates the pointers.
846 static void relocate_nodes(void)
849 struct device_node
*np
;
852 #define ADDBASE(x) (x = (x)? ((typeof (x))((unsigned long)(x) + base)): 0)
854 base
= (unsigned long) boot_infos
+ boot_infos
->deviceTreeOffset
;
855 allnodes
= (struct device_node
*)(base
+ 4);
856 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
857 ADDBASE(np
->full_name
);
858 ADDBASE(np
->properties
);
861 ADDBASE(np
->sibling
);
862 ADDBASE(np
->allnext
);
863 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
) {
873 interpret_pci_props(struct device_node
*np
, unsigned long mem_start
)
875 struct address_range
*adr
;
876 struct pci_reg_property
*pci_addrs
;
878 struct pci_intr_map
*imp
;
880 pci_addrs
= (struct pci_reg_property
*)
881 get_property(np
, "assigned-addresses", &l
);
882 if (pci_addrs
!= 0 && l
>= sizeof(struct pci_reg_property
)) {
884 adr
= (struct address_range
*) mem_start
;
885 while ((l
-= sizeof(struct pci_reg_property
)) >= 0) {
886 /* XXX assumes PCI addresses mapped 1-1 to physical */
887 adr
[i
].space
= pci_addrs
[i
].addr
.a_hi
;
888 adr
[i
].address
= pci_addrs
[i
].addr
.a_lo
;
889 adr
[i
].size
= pci_addrs
[i
].size_lo
;
894 mem_start
+= i
* sizeof(struct address_range
);
898 * If the pci host bridge has an interrupt-map property,
899 * look for our node in it.
901 if (np
->parent
!= 0 && pci_addrs
!= 0
902 && (imp
= (struct pci_intr_map
*)
903 get_property(np
->parent
, "interrupt-map", &ml
)) != 0
904 && (ip
= (int *) get_property(np
, "interrupts", &l
)) != 0) {
905 unsigned int devfn
= pci_addrs
[0].addr
.a_hi
& 0xff00;
907 np
->intrs
= (struct interrupt_info
*) mem_start
;
908 for (i
= 0; (ml
-= sizeof(struct pci_intr_map
)) >= 0; ++i
) {
909 if (imp
[i
].addr
.a_hi
== devfn
) {
910 np
->intrs
[np
->n_intrs
].line
= imp
[i
].intr
;
911 np
->intrs
[np
->n_intrs
].sense
= 0;
915 if (np
->n_intrs
== 0)
917 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
921 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
923 ip
= (int *) get_property(np
, "interrupts", &l
);
925 np
->intrs
= (struct interrupt_info
*) mem_start
;
926 np
->n_intrs
= l
/ sizeof(int);
927 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
928 for (i
= 0; i
< np
->n_intrs
; ++i
) {
929 np
->intrs
[i
].line
= *ip
++;
930 np
->intrs
[i
].sense
= 0;
939 interpret_dbdma_props(struct device_node
*np
, unsigned long mem_start
)
941 struct reg_property
*rp
;
942 struct address_range
*adr
;
943 unsigned long base_address
;
945 struct device_node
*db
;
948 for (db
= np
->parent
; db
!= NULL
; db
= db
->parent
) {
949 if (!strcmp(db
->type
, "dbdma") && db
->n_addrs
!= 0) {
950 base_address
= db
->addrs
[0].address
;
955 rp
= (struct reg_property
*) get_property(np
, "reg", &l
);
956 if (rp
!= 0 && l
>= sizeof(struct reg_property
)) {
958 adr
= (struct address_range
*) mem_start
;
959 while ((l
-= sizeof(struct reg_property
)) >= 0) {
961 adr
[i
].address
= rp
[i
].address
+ base_address
;
962 adr
[i
].size
= rp
[i
].size
;
967 mem_start
+= i
* sizeof(struct address_range
);
970 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
972 ip
= (int *) get_property(np
, "interrupts", &l
);
974 np
->intrs
= (struct interrupt_info
*) mem_start
;
975 np
->n_intrs
= l
/ sizeof(int);
976 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
977 for (i
= 0; i
< np
->n_intrs
; ++i
) {
978 np
->intrs
[i
].line
= *ip
++;
979 np
->intrs
[i
].sense
= 0;
988 interpret_macio_props(struct device_node
*np
, unsigned long mem_start
)
990 struct reg_property
*rp
;
991 struct address_range
*adr
;
992 unsigned long base_address
;
994 struct device_node
*db
;
997 for (db
= np
->parent
; db
!= NULL
; db
= db
->parent
) {
998 if (!strcmp(db
->type
, "mac-io") && db
->n_addrs
!= 0) {
999 base_address
= db
->addrs
[0].address
;
1004 rp
= (struct reg_property
*) get_property(np
, "reg", &l
);
1005 if (rp
!= 0 && l
>= sizeof(struct reg_property
)) {
1007 adr
= (struct address_range
*) mem_start
;
1008 while ((l
-= sizeof(struct reg_property
)) >= 0) {
1010 adr
[i
].address
= rp
[i
].address
+ base_address
;
1011 adr
[i
].size
= rp
[i
].size
;
1016 mem_start
+= i
* sizeof(struct address_range
);
1019 ip
= (int *) get_property(np
, "interrupts", &l
);
1021 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
1023 np
->intrs
= (struct interrupt_info
*) mem_start
;
1024 if (_machine
== _MACH_Pmac
) {
1026 np
->n_intrs
= l
/ sizeof(int);
1027 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1028 np
->intrs
[i
].line
= *ip
++;
1029 np
->intrs
[i
].sense
= 0;
1033 np
->n_intrs
= l
/ (2 * sizeof(int));
1034 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1035 np
->intrs
[i
].line
= openpic_to_irq(*ip
++);
1036 np
->intrs
[i
].sense
= *ip
++;
1039 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
1046 static unsigned long
1047 interpret_isa_props(struct device_node
*np
, unsigned long mem_start
)
1049 struct isa_reg_property
*rp
;
1050 struct address_range
*adr
;
1053 rp
= (struct isa_reg_property
*) get_property(np
, "reg", &l
);
1054 if (rp
!= 0 && l
>= sizeof(struct isa_reg_property
)) {
1056 adr
= (struct address_range
*) mem_start
;
1057 while ((l
-= sizeof(struct reg_property
)) >= 0) {
1058 adr
[i
].space
= rp
[i
].space
;
1059 adr
[i
].address
= rp
[i
].address
1060 + (adr
[i
].space
? 0: _ISA_MEM_BASE
);
1061 adr
[i
].size
= rp
[i
].size
;
1066 mem_start
+= i
* sizeof(struct address_range
);
1069 ip
= (int *) get_property(np
, "interrupts", &l
);
1071 np
->intrs
= (struct interrupt_info
*) mem_start
;
1072 np
->n_intrs
= l
/ (2 * sizeof(int));
1073 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
1074 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1075 np
->intrs
[i
].line
= *ip
++;
1076 np
->intrs
[i
].sense
= *ip
++;
1084 static unsigned long
1085 interpret_root_props(struct device_node
*np
, unsigned long mem_start
)
1087 struct reg_property
*rp
;
1088 struct address_range
*adr
;
1091 rp
= (struct reg_property
*) get_property(np
, "reg", &l
);
1092 if (rp
!= 0 && l
>= sizeof(struct reg_property
)) {
1094 adr
= (struct address_range
*) mem_start
;
1095 while ((l
-= sizeof(struct reg_property
)) >= 0) {
1097 adr
[i
].address
= rp
[i
].address
;
1098 adr
[i
].size
= rp
[i
].size
;
1103 mem_start
+= i
* sizeof(struct address_range
);
1106 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
1108 ip
= (int *) get_property(np
, "interrupts", &l
);
1110 np
->intrs
= (struct interrupt_info
*) mem_start
;
1111 np
->n_intrs
= l
/ sizeof(int);
1112 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
1113 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1114 np
->intrs
[i
].line
= *ip
++;
1115 np
->intrs
[i
].sense
= 0;
1123 * Construct and return a list of the device_nodes with a given name.
1126 struct device_node
*
1127 find_devices(const char *name
)
1129 struct device_node
*head
, **prevp
, *np
;
1132 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
1133 if (np
->name
!= 0 && strcasecmp(np
->name
, name
) == 0) {
1143 * Construct and return a list of the device_nodes with a given type.
1146 struct device_node
*
1147 find_type_devices(const char *type
)
1149 struct device_node
*head
, **prevp
, *np
;
1152 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
1153 if (np
->type
!= 0 && strcasecmp(np
->type
, type
) == 0) {
1162 /* Checks if the given "compat" string matches one of the strings in
1163 * the device's "compatible" property
1167 device_is_compatible(struct device_node
*device
, const char *compat
)
1172 cp
= (char *) get_property(device
, "compatible", &cplen
);
1176 if (strncasecmp(cp
, compat
, strlen(compat
)) == 0)
1187 * Construct and return a list of the device_nodes with a given type
1188 * and compatible property.
1191 struct device_node
*
1192 find_compatible_devices(const char *type
, const char *compat
)
1194 struct device_node
*head
, **prevp
, *np
;
1197 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
1199 && !(np
->type
!= 0 && strcasecmp(np
->type
, type
) == 0))
1201 if (device_is_compatible(np
, compat
)) {
1211 * Find the device_node with a given full_name.
1214 struct device_node
*
1215 find_path_device(const char *path
)
1217 struct device_node
*np
;
1219 for (np
= allnodes
; np
!= 0; np
= np
->allnext
)
1220 if (np
->full_name
!= 0 && strcasecmp(np
->full_name
, path
) == 0)
1226 * Find the device_node with a given phandle.
1229 struct device_node
*
1230 find_phandle(phandle ph
)
1232 struct device_node
*np
;
1234 for (np
= allnodes
; np
!= 0; np
= np
->allnext
)
1241 * Find a property with a given name for a given node
1242 * and return the value.
1246 get_property(struct device_node
*np
, const char *name
, int *lenp
)
1248 struct property
*pp
;
1250 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
)
1251 if (strcmp(pp
->name
, name
) == 0) {
1262 print_properties(struct device_node
*np
)
1264 struct property
*pp
;
1268 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
) {
1269 printk(KERN_INFO
"%s", pp
->name
);
1270 for (i
= strlen(pp
->name
); i
< 16; ++i
)
1272 cp
= (char *) pp
->value
;
1273 for (i
= pp
->length
; i
> 0; --i
, ++cp
)
1274 if ((i
> 1 && (*cp
< 0x20 || *cp
> 0x7e))
1275 || (i
== 1 && *cp
!= 0))
1277 if (i
== 0 && pp
->length
> 1) {
1278 /* looks like a string */
1279 printk(" %s\n", (char *) pp
->value
);
1281 /* dump it in hex */
1285 if (pp
->length
% 4 == 0) {
1286 unsigned int *p
= (unsigned int *) pp
->value
;
1289 for (i
= 0; i
< n
; ++i
) {
1290 if (i
!= 0 && (i
% 4) == 0)
1292 printk(" %08x", *p
++);
1295 unsigned char *bp
= pp
->value
;
1297 for (i
= 0; i
< n
; ++i
) {
1298 if (i
!= 0 && (i
% 16) == 0)
1300 printk(" %02x", *bp
++);
1304 if (pp
->length
> 64)
1305 printk(" ... (length = %d)\n",
1312 /* this can be called after setup -- Cort */
1315 call_rtas(const char *service
, int nargs
, int nret
,
1316 unsigned long *outputs
, ...)
1320 struct device_node
*rtas
;
1323 unsigned long words
[16];
1327 rtas
= find_devices("rtas");
1330 tokp
= (int *) get_property(rtas
, service
, NULL
);
1332 printk(KERN_ERR
"No RTAS service called %s\n", service
);
1338 va_start(list
, outputs
);
1339 for (i
= 0; i
< nargs
; ++i
)
1340 u
.words
[i
+3] = va_arg(list
, unsigned long);
1346 enter_rtas((void *)__pa(&u
));
1348 if (nret
> 1 && outputs
!= NULL
)
1349 for (i
= 0; i
< nret
-1; ++i
)
1350 outputs
[i
] = u
.words
[i
+nargs
+4];
1351 return u
.words
[nargs
+3];
1364 /* Calc the base address of a given point (x,y) */
1365 #define CALC_BASE(x,y) ((BOOT_INFO_IS_V2_COMPATIBLE(bi) ? bi->logicalDisplayBase : \
1366 bi->dispDeviceBase) + (bi->dispDeviceRect[0] + (x)) * \
1367 (bi->dispDeviceDepth >> 3) + bi->dispDeviceRowBytes * \
1368 ((y) + bi->dispDeviceRect[1]))
1374 unsigned long offset
= reloc_offset();
1375 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1376 unsigned long *base
= (unsigned long *)CALC_BASE(0,0);
1377 unsigned long width
= ((bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) *
1378 (bi
->dispDeviceDepth
>> 3)) >> 2;
1381 for (i
=0; i
<(bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1]); i
++)
1383 unsigned long *ptr
= base
;
1384 for(j
=width
; j
; --j
)
1386 base
+= (bi
->dispDeviceRowBytes
>> 2);
1390 __inline__
void dcbst(const void* addr
)
1392 __asm__
__volatile__ ("dcbst 0,%0" :: "r" (addr
));
1399 unsigned long offset
= reloc_offset();
1400 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1401 unsigned long *base
= (unsigned long *)CALC_BASE(0,0);
1402 unsigned long width
= ((bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) *
1403 (bi
->dispDeviceDepth
>> 3)) >> 2;
1406 for (i
=0; i
<(bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1]); i
++)
1408 unsigned long *ptr
= base
;
1409 for(j
=width
; j
>0; j
-=8) {
1413 base
+= (bi
->dispDeviceRowBytes
>> 2);
1417 #ifdef CONFIG_BOOTX_TEXT
1423 unsigned long offset
= reloc_offset();
1424 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1425 unsigned long *src
= (unsigned long *)CALC_BASE(0,16);
1426 unsigned long *dst
= (unsigned long *)CALC_BASE(0,0);
1427 unsigned long width
= ((bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) *
1428 (bi
->dispDeviceDepth
>> 3)) >> 2;
1431 for (i
=0; i
<(bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1] - 16); i
++)
1433 unsigned long *src_ptr
= src
;
1434 unsigned long *dst_ptr
= dst
;
1435 for(j
=width
; j
; --j
)
1436 *(dst_ptr
++) = *(src_ptr
++);
1437 src
+= (bi
->dispDeviceRowBytes
>> 2);
1438 dst
+= (bi
->dispDeviceRowBytes
>> 2);
1440 for (i
=0; i
<16; i
++)
1442 unsigned long *dst_ptr
= dst
;
1443 for(j
=width
; j
; --j
)
1445 dst
+= (bi
->dispDeviceRowBytes
>> 2);
1453 unsigned long offset
= reloc_offset();
1456 case '\r': RELOC(g_loc_X
) = 0; break;
1457 case '\n': RELOC(g_loc_X
) = 0; RELOC(g_loc_Y
)++; break;
1459 draw_byte(c
, RELOC(g_loc_X
)++, RELOC(g_loc_Y
));
1460 if (RELOC(g_loc_X
) >= RELOC(g_max_loc_X
)) {
1465 while (RELOC(g_loc_Y
) >= RELOC(g_max_loc_Y
)) {
1473 drawstring(const char *c
)
1481 drawhex(unsigned long v
)
1483 static char hex_table
[] = "0123456789abcdef";
1484 unsigned long offset
= reloc_offset();
1486 drawchar(RELOC(hex_table
)[(v
>> 28) & 0x0000000FUL
]);
1487 drawchar(RELOC(hex_table
)[(v
>> 24) & 0x0000000FUL
]);
1488 drawchar(RELOC(hex_table
)[(v
>> 20) & 0x0000000FUL
]);
1489 drawchar(RELOC(hex_table
)[(v
>> 16) & 0x0000000FUL
]);
1490 drawchar(RELOC(hex_table
)[(v
>> 12) & 0x0000000FUL
]);
1491 drawchar(RELOC(hex_table
)[(v
>> 8) & 0x0000000FUL
]);
1492 drawchar(RELOC(hex_table
)[(v
>> 4) & 0x0000000FUL
]);
1493 drawchar(RELOC(hex_table
)[(v
>> 0) & 0x0000000FUL
]);
1499 draw_byte(unsigned char c
, long locX
, long locY
)
1501 unsigned long offset
= reloc_offset();
1502 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1503 unsigned char *base
= CALC_BASE(locX
<< 3, locY
<< 4);
1504 unsigned char *font
= &RELOC(vga_font
)[((unsigned long)c
) * 16];
1506 switch(bi
->dispDeviceDepth
) {
1508 draw_byte_32(font
, (unsigned long *)base
);
1511 draw_byte_16(font
, (unsigned long *)base
);
1514 draw_byte_8(font
, (unsigned long *)base
);
1522 static unsigned long expand_bits_8
[16] = {
1542 static unsigned long expand_bits_16
[4] = {
1552 draw_byte_32(unsigned char *font
, unsigned long *base
)
1554 unsigned long offset
= reloc_offset();
1555 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1557 int fg
= 0xFFFFFFFFUL
;
1558 int bg
= 0x00000000UL
;
1561 for (l
= 0; l
< 16; ++l
)
1564 base
[0] = (-(bits
>> 7) & fg
) ^ bg
;
1565 base
[1] = (-((bits
>> 6) & 1) & fg
) ^ bg
;
1566 base
[2] = (-((bits
>> 5) & 1) & fg
) ^ bg
;
1567 base
[3] = (-((bits
>> 4) & 1) & fg
) ^ bg
;
1568 base
[4] = (-((bits
>> 3) & 1) & fg
) ^ bg
;
1569 base
[5] = (-((bits
>> 2) & 1) & fg
) ^ bg
;
1570 base
[6] = (-((bits
>> 1) & 1) & fg
) ^ bg
;
1571 base
[7] = (-(bits
& 1) & fg
) ^ bg
;
1572 base
= (unsigned long *) ((char *)base
+ bi
->dispDeviceRowBytes
);
1578 draw_byte_16(unsigned char *font
, unsigned long *base
)
1580 unsigned long offset
= reloc_offset();
1581 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1583 int fg
= 0xFFFFFFFFUL
;
1584 int bg
= 0x00000000UL
;
1585 unsigned long *eb
= RELOC(expand_bits_16
);
1587 for (l
= 0; l
< 16; ++l
)
1590 base
[0] = (eb
[bits
>> 6] & fg
) ^ bg
;
1591 base
[1] = (eb
[(bits
>> 4) & 3] & fg
) ^ bg
;
1592 base
[2] = (eb
[(bits
>> 2) & 3] & fg
) ^ bg
;
1593 base
[3] = (eb
[bits
& 3] & fg
) ^ bg
;
1594 base
= (unsigned long *) ((char *)base
+ bi
->dispDeviceRowBytes
);
1600 draw_byte_8(unsigned char *font
, unsigned long *base
)
1602 unsigned long offset
= reloc_offset();
1603 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1605 int fg
= 0x0F0F0F0FUL
;
1606 int bg
= 0x00000000UL
;
1607 unsigned long *eb
= RELOC(expand_bits_8
);
1609 for (l
= 0; l
< 16; ++l
)
1612 base
[0] = (eb
[bits
>> 4] & fg
) ^ bg
;
1613 base
[1] = (eb
[bits
& 0xf] & fg
) ^ bg
;
1614 base
= (unsigned long *) ((char *)base
+ bi
->dispDeviceRowBytes
);
1619 static unsigned char vga_font
[cmapsz
] = {
1620 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1621 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd,
1622 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff,
1623 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
1624 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10,
1625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe,
1626 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
1627 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1628 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c,
1629 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
1630 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
1631 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1632 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
1633 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd,
1634 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x0e,
1635 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
1636 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18,
1637 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30,
1638 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63,
1639 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00,
1640 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18,
1641 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8,
1642 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0e,
1643 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
1644 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
1645 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
1646 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xdb,
1647 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00,
1648 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6,
1649 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1650 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
1651 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
1652 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1653 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1654 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1655 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1656 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00,
1657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
1658 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1659 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1660 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00,
1661 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c,
1662 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1663 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1664 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18,
1665 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00,
1666 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c,
1667 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
1668 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c,
1669 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18,
1670 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c,
1671 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
1672 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
1674 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
1675 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
1676 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
1677 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
1678 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1679 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
1680 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
1681 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1682 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1683 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
1684 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c,
1685 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18,
1686 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
1687 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
1688 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c,
1689 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe,
1690 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
1691 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1692 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1693 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18,
1694 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
1695 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1696 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78,
1697 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
1698 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1699 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
1700 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06,
1701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
1702 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
1703 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
1704 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18,
1705 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xde, 0xde,
1706 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38,
1707 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
1708 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc,
1709 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0,
1710 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c,
1711 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00,
1712 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe,
1713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68,
1714 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66,
1715 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00,
1716 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1717 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18,
1718 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c,
1719 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
1720 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6,
1721 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60,
1722 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xe7,
1723 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
1724 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6,
1725 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1726 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66,
1727 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
1728 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c,
1729 0x0c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c,
1730 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
1731 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1732 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1733 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1734 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3,
1735 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
1736 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66,
1737 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18,
1738 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3,
1739 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1740 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff,
1741 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30,
1742 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
1743 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
1744 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c,
1745 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
1746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1747 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
1748 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1749 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c,
1750 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60,
1751 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
1752 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c,
1753 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc,
1754 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1755 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1756 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0,
1757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc,
1758 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x60,
1759 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
1760 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1761 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06,
1762 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0xe0, 0x60,
1763 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
1764 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1765 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb,
1766 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1767 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
1768 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1769 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66,
1770 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
1771 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
1772 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0,
1773 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60,
1774 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30,
1775 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00,
1776 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
1777 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3,
1778 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1779 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
1780 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3,
1781 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
1782 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
1783 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
1784 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e,
1785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18,
1786 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18,
1787 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
1788 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1789 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6,
1790 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66,
1791 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00,
1792 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
1793 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe,
1794 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c,
1795 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
1796 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76,
1797 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c,
1798 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38,
1799 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
1800 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06,
1801 0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe,
1802 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
1803 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1804 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c,
1805 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18,
1806 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66,
1807 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1808 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1809 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6,
1810 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00,
1811 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
1812 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe,
1813 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b,
1814 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x6c,
1815 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00,
1816 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1817 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
1818 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18,
1819 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1820 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
1821 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc,
1822 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
1823 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
1824 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1825 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1826 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
1827 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1828 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc,
1829 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18,
1830 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66,
1831 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
1832 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18,
1833 0xd8, 0x70, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c,
1834 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30,
1835 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1836 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1837 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc,
1838 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc,
1839 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
1840 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6,
1841 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00,
1842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c,
1843 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1844 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c,
1845 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
1846 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1847 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
1848 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06,
1849 0x0c, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30,
1850 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
1851 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
1852 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00,
1853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36,
1854 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0x11, 0x44,
1855 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
1856 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
1857 0x55, 0xaa, 0x55, 0xaa, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
1858 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0x18, 0x18, 0x18, 0x18,
1859 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1860 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18,
1861 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
1862 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36,
1863 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1864 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36,
1865 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8,
1866 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36,
1867 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1868 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1869 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6,
1870 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1871 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1872 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00,
1873 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
1874 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1875 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1876 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
1877 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
1878 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1879 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1880 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
1881 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
1882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
1883 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1884 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
1885 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37,
1886 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1887 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1888 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36,
1889 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff,
1890 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1891 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1892 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36,
1893 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
1894 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36,
1895 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1896 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
1897 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff,
1898 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1899 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1900 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36,
1901 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f,
1902 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
1903 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1904 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
1905 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
1906 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1907 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1908 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18,
1909 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
1910 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1911 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1912 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1913 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
1914 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0,
1915 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
1916 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
1917 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
1918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1919 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00,
1920 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc,
1921 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0,
1922 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1923 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
1924 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe,
1925 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8,
1926 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1927 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00,
1928 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1929 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66,
1930 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
1931 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
1932 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee,
1933 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66,
1934 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1935 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1936 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0,
1937 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60,
1938 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
1939 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
1940 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00,
1941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18,
1942 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
1943 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
1944 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e,
1945 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x1b, 0x18, 0x18,
1946 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1947 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
1948 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00,
1949 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00,
1950 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c,
1951 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1952 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
1953 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1954 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c,
1955 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00,
1956 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
1957 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00,
1958 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1959 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
1960 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1961 0x00, 0x00, 0x00, 0x00,
1964 #endif /* CONFIG_BOOTX_TEXT */