[U-Boot] QE firmware/microcode handling

Hi everyone,
following up Timur's patch on QE microcode:
http://marc.info/?l=u-boot&m=132197537730440&w=2
I was wondering, would it make any sense to *embed* QE's firmware within u-boot image itself? After all, it should be some ~64KB worth of data, right? Not quite sure whether this has ever been done for similar purposes, but to me it looks way more convenient to have a single image file to be flashed, rather than reserving room (e.g. within the same NOR flash where u-boot lies) for it. Easier upgrading of this microcode from within the application, is perhaps the only reason I could think of for *NOT* doing so. How to actually implement it, well that's another issue, and on that I'm open to suggestions, too.
Looking forward to hearing your thoughts.
Thanks in advance, Gerlando

Dear Gerlando Falauto,
In message 505AE6C3.5080708@keymile.com you wrote:
following up Timur's patch on QE microcode:
http://marc.info/?l=u-boot&m=132197537730440&w=2
I was wondering, would it make any sense to *embed* QE's firmware within u-boot image itself?
It's a matter of taste/requirements/system design.
Not quite sure whether this has ever been done for similar purposes, but to me it looks way more convenient to have a single image file to be flashed, rather than reserving room (e.g. within the same NOR flash where u-boot lies) for it.
A similar situation is with the persistent copy of the environment - it might be "embedded" within the U-Boot image (actually even with U-Boot code before and after it), it may be prepended or appended, or it may be completely separate. All options make sense for certain configurations, and none for others.
Having a single file may be an advantage, or a disadvantage. You cannot tell in advance without knowing the exact specifications of the hardware and the requirements for the software design.
So the most flexible way is actually to make no assumptions about the location, and handle it in a board-specific way if needed (say, through a board specific linker script, or some scripts).
Best regards,
Wolfgang Denk

Gerlando Falauto wrote:
Hi everyone,
following up Timur's patch on QE microcode:
http://marc.info/?l=u-boot&m=132197537730440&w=2
I was wondering, would it make any sense to *embed* QE's firmware within u-boot image itself?
There are three problems:
1) A lot of U-Boot images are already very close to the 512KB limit. We often have to disable features in U-Boot to get it to build properly. An additional 64KB would be prohibitive.
2) The firmware license is not exactly GPL-compatible. The firmware files themselves are freely distributable, but the source code is closed. I'm not sure how that would work in a GPL U-Boot.
3) For Fman, at least, we often update the firmware after the board ships, which means you would need to update U-Boot to get a new firmware. So no one might actually use this feature because they're afraid they won't be able to update the firmware.
If you can do it, go ahead. I would approve a patch that adds the ability to inject a firmware binary into u-boot.bin, provided it's controlled via a build or CONFIG_SYS_xxx option.

On 09/20/2012 10:22:21 AM, Timur Tabi wrote:
Gerlando Falauto wrote:
Hi everyone,
following up Timur's patch on QE microcode:
http://marc.info/?l=u-boot&m=132197537730440&w=2
I was wondering, would it make any sense to *embed* QE's firmware
within
u-boot image itself?
There are three problems:
- A lot of U-Boot images are already very close to the 512KB limit.
We often have to disable features in U-Boot to get it to build properly. An additional 64KB would be prohibitive.
The 512K limit is arbitrary and can be changed. It exists just to provide a stable start address on something that grows from the end of flash.
- The firmware license is not exactly GPL-compatible. The firmware
files themselves are freely distributable, but the source code is closed. I'm not sure how that would work in a GPL U-Boot.
- For Fman, at least, we often update the firmware after the board
ships, which means you would need to update U-Boot to get a new firmware. So no one might actually use this feature because they're afraid they won't be able to update the firmware.
If you can do it, go ahead. I would approve a patch that adds the ability to inject a firmware binary into u-boot.bin, provided it's controlled via a build or CONFIG_SYS_xxx option.
CONFIG_xxx. CONFIG_SYS_xxx options are supposed to describe hardware, and CONFIG_xxx options are supposed to be software config.
-Scott

Scott Wood wrote:
The 512K limit is arbitrary and can be changed. It exists just to provide a stable start address on something that grows from the end of flash.
True, but we haven't actually done changed it. Instead of allowing for a larger u-boot.bin, we have ALWAYS disabled features or rewritten code to make it smaller. If making U-boot larger were so simple, it would have been done by now, I think.

On Thu, Sep 20, 2012 at 4:28 PM, Timur Tabi timur@freescale.com wrote:
Scott Wood wrote:
The 512K limit is arbitrary and can be changed. It exists just to provide a stable start address on something that grows from the end of flash.
True, but we haven't actually done changed it. Instead of allowing for a larger u-boot.bin, we have ALWAYS disabled features or rewritten code to make it smaller. If making U-boot larger were so simple, it would have been done by now, I think.
Hmm, I think it is basically that simple:
$ git diff diff --git a/include/configs/corenet_ds.h b/include/configs/corenet_ds.h index bbfeda5..2fd7aba 100644 --- a/include/configs/corenet_ds.h +++ b/include/configs/corenet_ds.h @@ -52,7 +52,7 @@ #define CONFIG_MP /* support multiple processors */
#ifndef CONFIG_SYS_TEXT_BASE -#define CONFIG_SYS_TEXT_BASE 0xeff80000 +#define CONFIG_SYS_TEXT_BASE 0xeff00000 #endif
#ifndef CONFIG_RESET_VECTOR_ADDRESS $ make P4080DS -j48 [ snip ] $ ls -alh u-boot.bin -rwxrwxr-x 1 mattsm mattsm 1.0M Sep 20 20:54 u-boot.bin
-M

From: Chris Packham judge.packham@gmail.com
Instead of storing the mircocode in a separate flash block simply embed the image as C code array of bytes.
Cc: Wolfgang Denk wd@denx.de Cc: Timur Tabi timur@freescale.com Cc: Gerlando Falauto gerlando.falauto@keymile.com Signed-off-by: Chris Packham chris.packham@alliedtelesis.co.nz --- So here's a patch that embeds the Fman firmware in a board specific way for one of our out of tree boards (based on the P2041RDB) if anyone feels like picking it up and generalising it. One thing that I haven't done yet is added code to figure out the offset from the bootloader base and pass that in the device tree for linux.
board/alliedtelesis/SBx81CFC960/Makefile | 12 +- .../SBx81CFC960/fsl_fman_ucode_P2041_101_8.bin | Bin 0 -> 7240 bytes .../SBx81CFC960/fsl_fman_ucode_P2041_101_8.c | 607 ++++++++++++++++++++ drivers/net/fm/fm.c | 2 + include/configs/SBx81CFC960.h | 27 +- 5 files changed, 625 insertions(+), 23 deletions(-) create mode 100644 board/alliedtelesis/SBx81CFC960/fsl_fman_ucode_P2041_101_8.bin create mode 100644 board/alliedtelesis/SBx81CFC960/fsl_fman_ucode_P2041_101_8.c
diff --git a/board/alliedtelesis/SBx81CFC960/Makefile b/board/alliedtelesis/SBx81CFC960/Makefile index b606873..f1e1d7c 100644 --- a/board/alliedtelesis/SBx81CFC960/Makefile +++ b/board/alliedtelesis/SBx81CFC960/Makefile @@ -26,6 +26,16 @@ include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).o
+ifeq ($(CONFIG_FMAN_ENET),y) +FMAN_UCODE = fsl_fman_ucode_P2041_101_8.bin +FMAN_UCODE_C = $(patsubst %.bin,%.c,$(FMAN_UCODE)) +FMAN_UCODE_OBJ = $(patsubst %.bin,%.o,$(FMAN_UCODE)) + +# xxd not in chroot. +#$(FMAN_UCODE_C): $(FMAN_UCODE) +# xxd -i $< $@ +endif + COBJS-y += $(BOARD).o COBJS-y += ddr.o COBJS-y += ddr_param.o @@ -33,7 +43,7 @@ COBJS-y += eth.o COBJS-y += law.o COBJS-$(CONFIG_PCI) += pci.o COBJS-y += tlb.o -COBJS-$(CONFIG_FMAN_ENET) += fman.o +COBJS-$(CONFIG_FMAN_ENET) += fman.o $(FMAN_UCODE_OBJ)
SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c) OBJS := $(addprefix $(obj),$(COBJS-y)) diff --git a/board/alliedtelesis/SBx81CFC960/fsl_fman_ucode_P2041_101_8.bin b/board/alliedtelesis/SBx81CFC960/fsl_fman_ucode_P2041_101_8.bin new file mode 100644 index 0000000000000000000000000000000000000000..db4477f6f5276431664c752f60ad37a504082795 GIT binary patch literal 7240 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
literal 0 HcmV?d00001
diff --git a/board/alliedtelesis/SBx81CFC960/fsl_fman_ucode_P2041_101_8.c b/board/alliedtelesis/SBx81CFC960/fsl_fman_ucode_P2041_101_8.c new file mode 100644 index 0000000..4ed322f --- /dev/null +++ b/board/alliedtelesis/SBx81CFC960/fsl_fman_ucode_P2041_101_8.c @@ -0,0 +1,607 @@ +unsigned char fsl_fman_ucode_P2041_101_8_bin[] = { + 0x00, 0x00, 0x1c, 0x48, 0x51, 0x45, 0x46, 0x01, 0x4d, 0x69, 0x63, 0x72, + 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x31, 0x30, 0x31, 0x2e, 0x38, 0x2e, 0x30, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x50, 0x34, 0x30, 0x38, 0x30, 0x20, 0x72, 0x32, 0x2e, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x0f, 0xf0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, + 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x50, 0x34, 0x30, 0x38, 0x30, 0x20, + 0x72, 0x32, 0x2e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0xd4, 0x00, 0x00, 0x00, 0xf4, 0x65, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb7, 0xff, 0x00, 0x0e, 0x00, 0x65, 0x00, 0x08, + 0xb7, 0xff, 0x00, 0x21, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x00, 0x1f, + 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x00, 0x3a, 0xff, 0xff, 0xff, 0xff, + 0xb7, 0xff, 0x03, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x02, 0xf3, + 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x06, 0x21, 0xff, 0xff, 0xff, 0xff, + 0x79, 0x02, 0xf8, 0x00, 0x79, 0x04, 0xf8, 0x00, 0x79, 0x06, 0xf8, 0x00, + 0x79, 0x08, 0xf8, 0x00, 0x79, 0x0a, 0xf8, 0x00, 0x79, 0x0c, 0xf8, 0x00, + 0x79, 0x0e, 0xf8, 0x00, 0x79, 0x10, 0xf8, 0x00, 0x79, 0x12, 0xf8, 0x00, + 0x79, 0x14, 0xf8, 0x00, 0x79, 0x16, 0xf8, 0x00, 0x79, 0x18, 0xf8, 0x00, + 0x79, 0x1a, 0xf8, 0x00, 0x79, 0x1c, 0xf8, 0x00, 0x79, 0x1e, 0xf8, 0x00, + 0x77, 0x7f, 0xf8, 0x02, 0x77, 0x7f, 0xf8, 0x03, 0x77, 0x7f, 0xf8, 0x04, + 0x77, 0x7f, 0xf8, 0x06, 0xb2, 0x1f, 0x00, 0x04, 0x79, 0x00, 0xf8, 0x00, + 0x28, 0x1f, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xb3, 0xff, 0x06, 0x98, + 0xc2, 0x00, 0x00, 0x01, 0x78, 0x00, 0xf9, 0x00, 0xbc, 0x00, 0xff, 0xff, + 0xdb, 0xc0, 0xc0, 0xbd, 0xc6, 0x0c, 0x30, 0x78, 0x77, 0x7e, 0xf3, 0x00, + 0x78, 0x09, 0xfb, 0x00, 0xc8, 0x02, 0x4a, 0x70, 0x73, 0x69, 0xf3, 0x00, + 0x77, 0x00, 0x00, 0x01, 0xc6, 0x0c, 0x30, 0x00, 0xe9, 0xc2, 0x02, 0x03, + 0x73, 0x62, 0xf3, 0x00, 0x77, 0x7e, 0xf3, 0x00, 0x78, 0x00, 0xfb, 0x00, + 0x2e, 0x1f, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xc0, 0x00, 0x01, + 0x70, 0xe0, 0x01, 0x01, 0x2e, 0x3f, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, + 0xc6, 0x0c, 0x30, 0x74, 0xe3, 0xc2, 0x00, 0x80, 0x73, 0x62, 0xf3, 0x00, + 0x2e, 0x1f, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0xd0, 0x18, + 0x06, 0x14, 0xd0, 0x30, 0x06, 0x16, 0xd0, 0x38, 0x06, 0x04, 0x00, 0x08, + 0x06, 0x18, 0x00, 0x00, 0xdb, 0xc4, 0x11, 0xbd, 0xbc, 0x38, 0x00, 0x06, + 0x93, 0xe6, 0x00, 0x11, 0xb4, 0x18, 0x00, 0x01, 0x06, 0x04, 0xc0, 0x08, + 0xb3, 0xff, 0xff, 0xfb, 0x06, 0x18, 0xc0, 0x00, 0xbc, 0x18, 0x00, 0x08, + 0x06, 0x10, 0xd0, 0x10, 0xb4, 0x58, 0x00, 0x02, 0xfb, 0x11, 0x24, 0x00, + 0x2c, 0x3f, 0x20, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x16, 0x18, 0xd0, 0x10, 0x2c, 0x38, 0x20, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x14, 0xe0, 0x00, + 0x06, 0x08, 0xe0, 0x00, 0x73, 0xf8, 0xc4, 0x20, 0x4d, 0x48, 0xc8, 0x00, + 0x2e, 0x5f, 0x01, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x14, 0xe0, 0x00, 0x06, 0x08, 0xe0, 0x06, + 0x73, 0xf8, 0xc4, 0x20, 0x4d, 0x48, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x78, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x15, 0xe0, 0x00, 0x04, 0x08, 0xe0, 0x00, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0x48, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x70, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x15, 0xe4, 0x00, + 0x04, 0x04, 0xe0, 0x00, 0x73, 0xf8, 0xc4, 0x20, 0x4e, 0x44, 0xc8, 0x00, + 0x2e, 0x5f, 0x01, 0x68, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x15, 0xe6, 0x00, 0x04, 0x04, 0xe0, 0x00, + 0x73, 0xf8, 0xc4, 0x20, 0x4e, 0x44, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x60, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x16, 0xe2, 0x00, 0x04, 0x08, 0xe0, 0x06, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0x48, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x58, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe4, 0x00, + 0x04, 0x04, 0xe0, 0x00, 0x73, 0xf8, 0xc4, 0x20, 0x4e, 0xc4, 0xc8, 0x00, + 0x2e, 0x5f, 0x01, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe6, 0x00, 0x04, 0x04, 0xe0, 0x00, + 0x73, 0xf8, 0xc4, 0x20, 0x4e, 0xc4, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x48, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x16, 0xe0, 0x00, 0x04, 0x08, 0xe0, 0x10, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0xc8, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x40, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe0, 0x00, + 0x04, 0x04, 0xe0, 0x01, 0x73, 0xf8, 0xc4, 0x20, 0x4e, 0x04, 0xc8, 0x00, + 0x2e, 0x5f, 0x01, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe0, 0x00, 0x04, 0x08, 0xe0, 0x09, + 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x30, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x16, 0xe0, 0x00, 0x04, 0x08, 0xe0, 0x0c, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0xc8, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x28, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe0, 0x00, + 0x06, 0x08, 0xe0, 0x0c, 0x73, 0xf8, 0xc4, 0x20, 0x4d, 0xc8, 0xc8, 0x00, + 0x2e, 0x5f, 0x01, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe0, 0x00, 0x04, 0x04, 0xe0, 0x00, + 0x73, 0xf8, 0xc4, 0x20, 0x4e, 0xc4, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x18, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x16, 0xe0, 0x00, 0x04, 0x08, 0xe0, 0x06, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x10, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe0, 0x00, + 0xeb, 0xc4, 0x00, 0x0f, 0xf0, 0x5c, 0x43, 0x18, 0xf8, 0x04, 0x46, 0x30, + 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x01, 0x06, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe0, 0x00, 0xeb, 0xc4, 0x00, 0x0f, + 0xf0, 0x5c, 0x43, 0x08, 0xf8, 0x04, 0x46, 0x30, 0x73, 0xf8, 0xc4, 0x20, + 0x48, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x17, 0xe4, 0x00, 0x04, 0x08, 0xe0, 0x02, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0x48, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, + 0x04, 0x08, 0xe0, 0x00, 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0x08, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, 0x04, 0x08, 0xe0, 0x04, + 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0xc8, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xe8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x17, 0xe2, 0x00, 0x04, 0x08, 0xe0, 0x08, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0xc8, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, + 0x06, 0x08, 0xe0, 0x04, 0x73, 0xf8, 0xc4, 0x20, 0x4d, 0xc8, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0xd8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, 0x04, 0x08, 0xe0, 0x10, + 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0xc8, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xd0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x17, 0xe2, 0x00, 0x04, 0x04, 0xe0, 0x01, 0x73, 0xf8, 0xc4, 0x20, + 0x4e, 0x04, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xc8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, + 0x04, 0x08, 0xe0, 0x09, 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0x08, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, 0x04, 0x08, 0xe0, 0x0c, + 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0xc8, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xb8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x17, 0xe2, 0x00, 0x06, 0x08, 0xe0, 0x0c, 0x73, 0xf8, 0xc4, 0x20, + 0x4d, 0xc8, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xb0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, + 0x04, 0x04, 0xe0, 0x00, 0x73, 0xf8, 0xc4, 0x20, 0x4e, 0xc4, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, 0x04, 0x08, 0xe0, 0x06, + 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0xa0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x17, 0xe2, 0x00, 0xeb, 0xc4, 0x00, 0x0f, 0xf0, 0x5c, 0x43, 0x18, + 0xf8, 0x04, 0x46, 0x30, 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0x96, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe2, 0x00, + 0xeb, 0xc4, 0x00, 0x0f, 0xf0, 0x5c, 0x43, 0x08, 0xf8, 0x04, 0x46, 0x30, + 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0x8e, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe6, 0x00, 0x04, 0x08, 0xe0, 0x00, + 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0x48, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0x88, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x17, 0xe6, 0x00, 0x04, 0x08, 0xe0, 0x02, 0x73, 0xf8, 0xc4, 0x20, + 0x4c, 0x48, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x17, 0xe6, 0x00, + 0x04, 0x08, 0xe0, 0x00, 0x73, 0xf8, 0xc4, 0x20, 0x4c, 0xc8, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe5, 0x5c, 0xff, 0x00, 0xfb, 0x14, 0xe2, 0x00, + 0xc8, 0x58, 0xe2, 0x30, 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe5, 0x5c, 0xff, 0x00, 0xfb, 0x14, 0xe4, 0x00, 0xc8, 0x58, 0xe2, 0x30, + 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0x67, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x5c, 0xff, 0x00, + 0xfb, 0x14, 0xe6, 0x00, 0xc8, 0x58, 0xe2, 0x30, 0x73, 0xf8, 0xc4, 0x20, + 0x48, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0x5f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0x64, 0x43, 0xc1, 0xd8, 0x4f, 0xd3, 0xf8, + 0x73, 0xe5, 0x2c, 0x14, 0x00, 0x08, 0x78, 0x20, 0xfb, 0x04, 0xe4, 0x3c, + 0xd8, 0x48, 0xe2, 0x78, 0xb3, 0xff, 0x00, 0x42, 0xc8, 0x58, 0x4a, 0x30, + 0xcf, 0x64, 0x43, 0xc1, 0xd8, 0x4f, 0xd3, 0xf8, 0x73, 0xe5, 0x2c, 0x14, + 0x00, 0x08, 0x78, 0x20, 0xb3, 0xff, 0x00, 0x40, 0xcb, 0x08, 0xe2, 0x7c, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x04, 0xe4, 0x3c, + 0xc8, 0x58, 0xe2, 0x30, 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0x48, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x04, 0xe4, 0x3c, 0x73, 0xe5, 0x2c, 0x14, + 0xc8, 0x58, 0xe2, 0x30, 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x16, 0xe0, 0x00, 0x00, 0x04, 0xe0, 0x08, 0xeb, 0xcb, 0x00, 0x10, + 0xec, 0x24, 0x00, 0x01, 0xd0, 0x78, 0x58, 0x03, 0xb3, 0xff, 0xfe, 0x9f, + 0x06, 0x04, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x16, 0xe0, 0x00, + 0x00, 0x04, 0xe0, 0x07, 0xeb, 0xcb, 0x00, 0x10, 0xec, 0x24, 0x00, 0x01, + 0xd0, 0x78, 0x58, 0x03, 0xb3, 0xff, 0xfe, 0x97, 0x06, 0x04, 0x00, 0x08, + 0xff, 0xff, 0xff, 0xff, 0xd9, 0xdf, 0xd2, 0xf8, 0xfb, 0x04, 0x5c, 0x3c, + 0x73, 0xe5, 0x2c, 0x14, 0xc8, 0x58, 0x5a, 0x30, 0x73, 0xf8, 0xc4, 0x20, + 0x48, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0x26, 0xff, 0xff, 0xff, 0xff, + 0xd9, 0xdf, 0xd2, 0xf8, 0xfb, 0x04, 0x5c, 0x00, 0x02, 0x00, 0x58, 0x00, + 0xd9, 0x40, 0x28, 0x38, 0xb3, 0xff, 0x00, 0x20, 0xd8, 0x58, 0x00, 0x38, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0xdf, 0xd2, 0xf8, + 0xfb, 0x04, 0x5c, 0x3c, 0xc8, 0x58, 0x5a, 0x30, 0x73, 0xf8, 0xc4, 0x20, + 0x48, 0x08, 0xc8, 0x00, 0xd9, 0xdf, 0x04, 0xf8, 0x2e, 0x5f, 0x00, 0x11, + 0xff, 0xff, 0xff, 0xff, 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, + 0x2e, 0x5f, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xc8, 0x58, 0x4a, 0x30, + 0x73, 0xf8, 0xc4, 0x20, 0x48, 0x08, 0xc8, 0x00, 0x2e, 0x5f, 0x00, 0x0d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x78, 0x09, 0xfc, 0x10, 0x04, 0x99, 0x98, 0x0c, + 0xb7, 0xdf, 0xff, 0xff, 0xdf, 0x59, 0x4e, 0x78, 0x14, 0x99, 0x98, 0x0c, + 0x06, 0x04, 0x00, 0x08, 0x06, 0x18, 0x00, 0x00, 0xdb, 0xc4, 0x11, 0xbd, + 0xbc, 0x38, 0xfe, 0x6d, 0x93, 0xe6, 0xfe, 0x78, 0xb4, 0x18, 0xfe, 0x68, + 0x02, 0x03, 0x08, 0xd8, 0x02, 0x04, 0x00, 0x0c, 0xeb, 0xc2, 0x00, 0x01, + 0xf4, 0x43, 0x03, 0x01, 0xdb, 0xc0, 0x20, 0xd4, 0xf4, 0x44, 0x03, 0x08, + 0xdb, 0xc2, 0x00, 0x3c, 0xf0, 0x43, 0x1b, 0x01, 0x12, 0x00, 0x08, 0xda, + 0xca, 0x03, 0xf8, 0x00, 0x9f, 0xff, 0xf4, 0x00, 0x02, 0x06, 0x10, 0xd2, + 0x02, 0x87, 0x08, 0x00, 0xb7, 0xdf, 0xff, 0xff, 0x02, 0x05, 0x00, 0x0a, + 0x02, 0x04, 0x00, 0x0c, 0xdc, 0x25, 0x21, 0x78, 0xb4, 0x1f, 0x00, 0x07, + 0x02, 0x03, 0x00, 0x08, 0xdc, 0x43, 0x28, 0xf8, 0xd8, 0x44, 0x18, 0xf8, + 0xdb, 0xc3, 0x20, 0xd5, 0xb3, 0xff, 0x00, 0x05, 0xca, 0x03, 0xf8, 0xc0, + 0xdc, 0x44, 0x28, 0xf8, 0xdb, 0xc3, 0x20, 0xd5, 0xca, 0x03, 0xf8, 0xc0, + 0xdc, 0x26, 0x19, 0xb8, 0xbc, 0x1f, 0x00, 0x05, 0x02, 0x01, 0x00, 0x0a, + 0xeb, 0xc0, 0x00, 0x00, 0xb3, 0xff, 0x00, 0x04, 0x12, 0x01, 0x10, 0xd0, + 0x12, 0x87, 0x08, 0x00, 0xeb, 0xc0, 0x00, 0x01, 0x9f, 0xff, 0xf4, 0x00, + 0x02, 0x02, 0x00, 0x0a, 0xdb, 0xc1, 0x20, 0x7d, 0xca, 0x01, 0xf8, 0xc0, + 0x02, 0x00, 0x00, 0x08, 0xd8, 0x42, 0x18, 0x78, 0xdc, 0x21, 0x00, 0x78, + 0xb5, 0x7f, 0x00, 0x09, 0xdc, 0x20, 0x08, 0x38, 0xbc, 0x3f, 0x00, 0x03, + 0xb3, 0xff, 0x00, 0x05, 0xeb, 0xc0, 0x00, 0x00, 0xdc, 0x40, 0x10, 0x38, + 0xdc, 0x43, 0x00, 0x38, 0xca, 0x00, 0xf8, 0x00, 0xb7, 0xff, 0x00, 0x02, + 0xca, 0x01, 0xf8, 0x00, 0x9f, 0xff, 0xf4, 0x00, 0xeb, 0xc3, 0x00, 0xc0, + 0xe1, 0xc3, 0x00, 0x50, 0x02, 0x82, 0x08, 0x0e, 0xb7, 0xdf, 0xff, 0xff, + 0xf0, 0x42, 0x13, 0x01, 0xca, 0x02, 0xf8, 0x80, 0x12, 0x82, 0x08, 0x0e, + 0x02, 0x01, 0x00, 0x00, 0xbf, 0x81, 0x00, 0x07, 0xeb, 0xc0, 0x30, 0x20, + 0xcf, 0x81, 0x10, 0x45, 0xe1, 0xc0, 0x00, 0x0c, 0xd8, 0x41, 0x00, 0x78, + 0xe3, 0xc0, 0x40, 0x00, 0x73, 0x60, 0x0b, 0x00, 0x2c, 0x3f, 0x18, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x02, 0x06, 0x00, 0xd2, 0xeb, 0xc3, 0x00, 0x04, + 0xdc, 0x23, 0x30, 0xf8, 0xb8, 0x1f, 0x00, 0x03, 0x06, 0x04, 0x00, 0x00, + 0xf0, 0x43, 0x33, 0x00, 0x12, 0x06, 0x00, 0xd6, 0x02, 0x09, 0x00, 0xd0, + 0xdb, 0xc6, 0x22, 0x3d, 0xd8, 0x49, 0x40, 0xf8, 0xca, 0x03, 0xf8, 0xc0, + 0x04, 0x1b, 0x08, 0x00, 0x06, 0x06, 0x10, 0x00, 0xdb, 0xc9, 0xf8, 0x55, + 0xd8, 0x67, 0x49, 0xf8, 0xd8, 0xc6, 0x09, 0xb8, 0xf0, 0x40, 0x03, 0x90, + 0xca, 0x86, 0x21, 0x80, 0x02, 0x01, 0x10, 0x08, 0xdc, 0x21, 0x18, 0x78, + 0xbc, 0x1f, 0x00, 0x0e, 0xdc, 0x43, 0x08, 0xf8, 0xdc, 0x48, 0x18, 0x79, + 0xca, 0x01, 0xf8, 0x40, 0x71, 0xe1, 0x0d, 0x00, 0x55, 0x06, 0x00, 0x00, + 0x06, 0x06, 0x10, 0x00, 0xd8, 0x40, 0x08, 0x39, 0xca, 0x86, 0x21, 0x80, + 0xf4, 0x43, 0x0b, 0x01, 0xca, 0x01, 0xf8, 0x40, 0x71, 0xe1, 0x0d, 0x00, + 0xb3, 0xff, 0x00, 0x06, 0x55, 0x06, 0x00, 0x00, 0xf4, 0x48, 0x0b, 0x01, + 0xca, 0x01, 0xf8, 0x40, 0x71, 0xe1, 0x0d, 0x00, 0x55, 0x06, 0x00, 0x00, + 0x2e, 0x3f, 0x00, 0x59, 0xff, 0xff, 0xff, 0xff, 0x02, 0x07, 0x00, 0xd2, + 0xeb, 0xc3, 0x00, 0x04, 0xdc, 0x23, 0x38, 0xf8, 0xb8, 0x1f, 0x00, 0x05, + 0x06, 0x04, 0x00, 0x00, 0xf4, 0x47, 0x33, 0x04, 0xf0, 0x43, 0x3b, 0x00, + 0x12, 0x06, 0x00, 0xd2, 0x12, 0x07, 0x00, 0xd6, 0x02, 0x09, 0x00, 0xd0, + 0xdb, 0xc7, 0x22, 0x3d, 0xd8, 0x49, 0x40, 0xf8, 0xca, 0x03, 0xf8, 0xc0, + 0x04, 0x1b, 0x08, 0x00, 0x06, 0x06, 0x10, 0x00, 0xdb, 0xc9, 0xf8, 0x55, + 0xd8, 0x67, 0x49, 0xf8, 0xd8, 0xc6, 0x09, 0xb8, 0xf0, 0x40, 0x0b, 0x90, + 0xca, 0x86, 0x21, 0x80, 0x02, 0x0a, 0x10, 0x08, 0xdc, 0x2a, 0x1a, 0xb8, + 0xbc, 0x1f, 0x00, 0x10, 0xdc, 0x43, 0x52, 0x78, 0xdc, 0x48, 0x48, 0xf9, + 0xca, 0x03, 0xf8, 0xc0, 0x71, 0xe3, 0x1d, 0x00, 0x55, 0x26, 0x08, 0x00, + 0x06, 0x06, 0x10, 0x00, 0xd8, 0x41, 0x18, 0x79, 0xca, 0x86, 0x21, 0x80, + 0xf4, 0x49, 0x13, 0x01, 0xca, 0x02, 0xf8, 0x80, 0x71, 0xe2, 0x15, 0x00, + 0x55, 0x26, 0x08, 0x00, 0xf0, 0x42, 0x0b, 0x01, 0xb3, 0xff, 0x00, 0x0d, + 0x12, 0x01, 0x00, 0xd0, 0xf4, 0x48, 0x13, 0x01, 0xca, 0x02, 0xf8, 0x80, + 0x71, 0xe2, 0x15, 0x00, 0x55, 0x26, 0x08, 0x00, 0xdc, 0x23, 0x50, 0xf8, + 0xbc, 0x3f, 0x00, 0x03, 0xb3, 0xff, 0x00, 0x05, 0x12, 0x1f, 0x00, 0xd0, + 0xf0, 0x42, 0x0b, 0x01, 0xd8, 0x49, 0x08, 0x78, 0x12, 0x01, 0x00, 0xd0, + 0x9f, 0xff, 0xf4, 0x00, 0xeb, 0xc1, 0x03, 0x8c, 0xdb, 0xc0, 0x40, 0xfd, + 0xf0, 0x41, 0x11, 0x08, 0xdb, 0xc0, 0x40, 0x1d, 0x7c, 0x01, 0xf9, 0x05, + 0xdb, 0xc1, 0x60, 0x7d, 0xd8, 0x42, 0x08, 0x78, 0x73, 0x63, 0x0b, 0x00, + 0x7c, 0x01, 0xf9, 0x05, 0xdb, 0xc1, 0x60, 0x7d, 0xd8, 0x42, 0x08, 0x78, + 0x77, 0x61, 0x0b, 0x00, 0x78, 0x04, 0xfb, 0x00, 0xdb, 0xc4, 0x80, 0x5d, + 0xdc, 0x21, 0x00, 0x78, 0xbc, 0x3f, 0xff, 0xf5, 0xcd, 0xc4, 0x40, 0x11, + 0x9f, 0xff, 0xf4, 0x00, 0x04, 0x00, 0xd0, 0x10, 0xeb, 0xc2, 0x00, 0xc0, + 0x04, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0xbb, 0x61, 0x00, 0x08, + 0xe1, 0xc2, 0x00, 0x50, 0xeb, 0xc0, 0x30, 0x20, 0xcf, 0x81, 0x10, 0x45, + 0xe1, 0xc0, 0x00, 0x0c, 0xd8, 0x41, 0x00, 0x78, 0xe3, 0xc0, 0x80, 0x00, + 0x73, 0x60, 0x0b, 0x00, 0x2c, 0x3f, 0x10, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x06, 0x18, 0xd0, 0x00, 0x04, 0x01, 0xd0, 0x10, 0xf0, 0x5a, 0x03, 0x00, + 0xa3, 0xff, 0xff, 0x83, 0x04, 0x02, 0x08, 0x04, 0x06, 0x18, 0xd0, 0x00, + 0x02, 0x00, 0xd0, 0xd4, 0x04, 0x0c, 0xd0, 0x10, 0x06, 0x10, 0xd0, 0x00, + 0xbb, 0xe0, 0x00, 0x08, 0xf0, 0x5a, 0x6b, 0x90, 0xeb, 0xc0, 0x04, 0x00, + 0x12, 0x00, 0xd0, 0x90, 0x02, 0x00, 0xd0, 0xd4, 0xf5, 0x40, 0x03, 0x01, + 0xb3, 0xff, 0x00, 0x03, 0x12, 0x00, 0xd0, 0xd4, 0x12, 0x1f, 0xd0, 0x90, + 0x06, 0x0a, 0x68, 0x08, 0x04, 0x0e, 0x60, 0x04, 0xca, 0x8a, 0x82, 0x80, + 0x02, 0x00, 0xd0, 0xda, 0x12, 0x00, 0xd0, 0xdc, 0x12, 0x1f, 0x68, 0x02, + 0x04, 0x1b, 0x60, 0x00, 0x02, 0x02, 0xd0, 0xd8, 0xeb, 0xc1, 0x01, 0x00, + 0xdc, 0x21, 0x10, 0x78, 0xb0, 0x1f, 0x00, 0x15, 0x04, 0x00, 0xd0, 0xe4, + 0x04, 0x01, 0xd0, 0x08, 0x12, 0x01, 0x68, 0x02, 0x04, 0x01, 0xd0, 0x0c, + 0x02, 0x02, 0x68, 0x00, 0xcf, 0x81, 0x80, 0x43, 0xf1, 0xc1, 0x0a, 0x08, + 0xd9, 0xc2, 0x08, 0x78, 0x12, 0x01, 0x68, 0x00, 0x02, 0x01, 0xd0, 0xd8, + 0xf4, 0x41, 0x0b, 0x01, 0xca, 0x01, 0xf8, 0x40, 0x71, 0xe1, 0x0d, 0x00, + 0x55, 0x2a, 0x00, 0x00, 0xf0, 0x5a, 0x03, 0x00, 0xf0, 0x4c, 0x0b, 0x00, + 0xa3, 0xff, 0xff, 0x81, 0xf0, 0x4e, 0x13, 0x00, 0x2e, 0x3f, 0xff, 0xc3, + 0xff, 0xff, 0xff, 0xff, 0x02, 0x02, 0x68, 0x02, 0xf0, 0x42, 0x12, 0x01, + 0x12, 0x02, 0x68, 0x02, 0x6b, 0xff, 0xfd, 0x00, 0x55, 0x2a, 0x00, 0x00, + 0x02, 0x02, 0xd0, 0xd8, 0xf4, 0x42, 0x12, 0x01, 0x12, 0x02, 0xd0, 0xd8, + 0x02, 0x02, 0xd0, 0xdc, 0xf4, 0x42, 0x13, 0x01, 0x12, 0x02, 0xd0, 0xdc, + 0x02, 0x22, 0xd0, 0xdc, 0xbc, 0x3f, 0x00, 0x19, 0x02, 0x01, 0xd0, 0xd6, + 0xf4, 0x41, 0x0b, 0x01, 0x12, 0x01, 0xd0, 0xd6, 0x02, 0x21, 0xd0, 0xd6, + 0xbc, 0x3f, 0x00, 0x0a, 0xa7, 0xff, 0xff, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0x14, 0x00, 0xd0, 0xe4, 0xf0, 0x5a, 0x03, 0x00, 0xf0, 0x4c, 0x0b, 0x00, + 0xa3, 0xff, 0xff, 0x66, 0xf0, 0x4e, 0x13, 0x00, 0x2e, 0x3f, 0xff, 0xb6, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x4d, 0x6b, 0x10, 0x12, 0x1f, 0x68, 0x02, + 0x12, 0x1f, 0x68, 0x00, 0x06, 0x0a, 0x68, 0x08, 0xa3, 0xff, 0xff, 0x90, + 0xca, 0x8a, 0x82, 0x80, 0x14, 0x00, 0xd0, 0xe4, 0x02, 0x00, 0xd0, 0xda, + 0xb3, 0xff, 0xff, 0xc5, 0x12, 0x00, 0xd0, 0xdc, 0xd8, 0x6b, 0x0a, 0xf8, + 0xa3, 0xff, 0xff, 0x89, 0xd8, 0xca, 0xfa, 0xb8, 0xb3, 0xff, 0xff, 0xc0, + 0x14, 0x00, 0xd0, 0xe4, 0x06, 0x18, 0xd0, 0x00, 0x04, 0x0d, 0xd0, 0x10, + 0x04, 0x02, 0xd0, 0x08, 0xf0, 0x5a, 0x0b, 0x00, 0xf0, 0x4d, 0x03, 0x00, + 0x12, 0x02, 0xd0, 0xd8, 0x04, 0x0e, 0x68, 0x04, 0xf0, 0x5a, 0x83, 0x00, + 0x14, 0x1c, 0xd0, 0xe4, 0xa3, 0xff, 0xfe, 0xdc, 0xf0, 0x4e, 0x7b, 0x0a, + 0x12, 0x00, 0xd0, 0xd2, 0xf0, 0x4e, 0x03, 0x00, 0xf0, 0x4f, 0x0b, 0x00, + 0xa3, 0xff, 0xfe, 0xe2, 0xf0, 0x5a, 0x13, 0x00, 0xdc, 0x20, 0xf8, 0x38, + 0xb4, 0x3f, 0x00, 0x05, 0xf0, 0x4e, 0x03, 0x00, 0xa3, 0xff, 0xff, 0x07, + 0xf0, 0x4d, 0x0b, 0x00, 0xb7, 0xff, 0x00, 0x06, 0x02, 0x01, 0x80, 0xd2, + 0xa3, 0xff, 0xfe, 0xf2, 0xf0, 0x4e, 0x03, 0x00, 0x12, 0x00, 0x70, 0x0a, + 0x12, 0x80, 0x78, 0x00, 0xeb, 0xc1, 0x30, 0x00, 0xe1, 0xc1, 0x00, 0x0c, + 0x7c, 0x00, 0xf8, 0x01, 0xdb, 0xc0, 0xc0, 0x3d, 0xf1, 0xc0, 0x03, 0x03, + 0x73, 0x60, 0x0b, 0x00, 0xeb, 0xc3, 0x00, 0x01, 0xf0, 0x50, 0x03, 0x00, + 0xf0, 0x4d, 0x0b, 0x00, 0xf0, 0x4e, 0x13, 0x00, 0xa3, 0xff, 0xff, 0x06, + 0x12, 0x03, 0x80, 0xd4, 0x00, 0x06, 0x00, 0xa4, 0x00, 0x03, 0x00, 0xa5, + 0x02, 0x08, 0x08, 0x98, 0x06, 0x04, 0x08, 0x00, 0xdc, 0x26, 0x19, 0xb8, + 0xf0, 0x40, 0x53, 0x60, 0xb8, 0x3f, 0x00, 0x3d, 0xeb, 0xcb, 0x00, 0x00, + 0x10, 0x1f, 0x00, 0xa4, 0xeb, 0xcb, 0x00, 0x01, 0x04, 0x1b, 0x00, 0x00, + 0x06, 0x06, 0x10, 0x00, 0xd8, 0x67, 0x41, 0xf8, 0xd8, 0xc6, 0xf9, 0xb8, + 0xca, 0x86, 0x21, 0x80, 0x02, 0x01, 0x10, 0x0a, 0xdc, 0x28, 0x0a, 0x38, + 0xbc, 0x1f, 0x00, 0x0e, 0xdc, 0x41, 0x40, 0xb8, 0xf4, 0x22, 0x13, 0x40, + 0xb0, 0x1f, 0x00, 0x06, 0xeb, 0xc1, 0x00, 0x40, 0x6b, 0x3f, 0xfd, 0x00, + 0x55, 0x06, 0x50, 0x00, 0xb3, 0xff, 0x00, 0x2b, 0x10, 0x01, 0x00, 0xa5, + 0xf4, 0x42, 0x23, 0x01, 0x10, 0x02, 0x00, 0xa5, 0x71, 0xe4, 0x25, 0x00, + 0xb3, 0xff, 0x00, 0x26, 0x55, 0x06, 0x50, 0x00, 0x02, 0x01, 0x10, 0x08, + 0xdc, 0x41, 0x43, 0x38, 0xf4, 0x2c, 0x63, 0x40, 0xb0, 0x1f, 0x00, 0x06, + 0xeb, 0xc3, 0x00, 0x40, 0x6b, 0x3f, 0xfd, 0x00, 0x55, 0x06, 0x50, 0x00, + 0xb3, 0xff, 0x00, 0x1d, 0x10, 0x03, 0x00, 0xa5, 0x10, 0x0c, 0x00, 0xa5, + 0x06, 0x08, 0x10, 0x00, 0xdc, 0x43, 0x60, 0x78, 0xca, 0x01, 0xf8, 0x40, + 0xca, 0x88, 0x22, 0x00, 0xdb, 0xcc, 0x21, 0x1d, 0xdb, 0xc4, 0x21, 0x7d, + 0xf4, 0x4c, 0x23, 0x01, 0xd8, 0x4a, 0x29, 0x78, 0x71, 0xe4, 0x25, 0x00, + 0x55, 0x06, 0x50, 0x00, 0x02, 0x22, 0x10, 0x0a, 0xb4, 0x3f, 0x00, 0x0f, + 0xdc, 0x22, 0x08, 0xb8, 0xb4, 0x1f, 0x00, 0x07, 0xf4, 0x41, 0x0b, 0x01, + 0xca, 0x01, 0xf8, 0x40, 0x71, 0xe1, 0x0d, 0x00, 0x55, 0x08, 0x28, 0x00, + 0xb3, 0xff, 0x00, 0x08, 0x10, 0x03, 0x00, 0xa5, 0x00, 0x01, 0x00, 0xa5, + 0xf4, 0x42, 0x23, 0x01, 0xd8, 0x41, 0x10, 0x78, 0x10, 0x01, 0x00, 0xa5, + 0x71, 0xe4, 0x25, 0x00, 0x55, 0x08, 0x28, 0x00, 0xf0, 0x4b, 0x03, 0x00, + 0x9f, 0xff, 0xf4, 0x00, 0xdc, 0x20, 0xf8, 0x38, 0xb0, 0x3f, 0x00, 0x04, + 0x06, 0x08, 0x20, 0x00, 0xb3, 0xff, 0x00, 0x03, 0xeb, 0xca, 0x00, 0x00, + 0x04, 0x0a, 0x20, 0x94, 0x14, 0x01, 0x20, 0x94, 0x00, 0x05, 0x20, 0x9a, + 0x06, 0x06, 0x10, 0x08, 0xeb, 0xcb, 0x01, 0x00, 0xdc, 0x4b, 0x2a, 0xf8, + 0xca, 0x0b, 0xfa, 0xc0, 0xca, 0x86, 0x41, 0x80, 0x02, 0x09, 0x10, 0x02, + 0x04, 0x1b, 0x18, 0x00, 0xdc, 0x69, 0x5a, 0x38, 0xb1, 0x7f, 0x00, 0x0c, + 0xd8, 0x41, 0x2b, 0x38, 0xf4, 0x4b, 0x1b, 0x01, 0xca, 0x03, 0xf8, 0xc0, + 0x71, 0xe3, 0x1d, 0x00, 0x55, 0x06, 0x60, 0x00, 0xd8, 0x67, 0x59, 0xf8, + 0xd8, 0xc6, 0xf9, 0xb8, 0x16, 0x06, 0x10, 0x08, 0x12, 0x08, 0x10, 0x02, + 0xb3, 0xff, 0x00, 0x0a, 0x10, 0x1f, 0x20, 0x9a, 0xf4, 0x49, 0x1b, 0x01, + 0xca, 0x03, 0xf8, 0xc0, 0x71, 0xe3, 0x1d, 0x00, 0x55, 0x06, 0x60, 0x00, + 0xf0, 0x43, 0x1b, 0x01, 0x12, 0x1f, 0x10, 0x02, 0xd8, 0x45, 0x18, 0xb8, + 0x10, 0x02, 0x20, 0x9a, 0xdc, 0x20, 0xf8, 0x38, 0xbc, 0x3f, 0x00, 0x0c, + 0xdc, 0x2a, 0x0a, 0xb8, 0xb4, 0x3f, 0x00, 0x0a, 0xcc, 0xca, 0x40, 0xa1, + 0xdb, 0xc1, 0x40, 0x1d, 0xd9, 0xc2, 0x00, 0xb8, 0xeb, 0xc0, 0x03, 0x88, + 0x7c, 0x03, 0xf9, 0x05, 0xf0, 0x40, 0x09, 0x08, 0xdb, 0xc3, 0x60, 0x3d, + 0xd8, 0x41, 0x00, 0x38, 0x73, 0x62, 0x03, 0x00, 0x9f, 0xff, 0xf4, 0x00, + 0x04, 0x04, 0x08, 0x08, 0xdc, 0x20, 0xf8, 0x38, 0xf0, 0x41, 0x3b, 0xa0, + 0xb0, 0x3f, 0x00, 0x13, 0xe3, 0xc5, 0x80, 0x00, 0xcc, 0xc0, 0x40, 0x61, + 0xdb, 0xc0, 0x40, 0x1d, 0xd9, 0xc1, 0x00, 0xf8, 0xeb, 0xc0, 0x03, 0x88, + 0x7c, 0x06, 0xf9, 0x05, 0xf0, 0x40, 0x09, 0x08, 0xdb, 0xc6, 0x60, 0x3d, + 0xd8, 0x41, 0x00, 0x38, 0x73, 0x63, 0x03, 0x00, 0x02, 0x01, 0x10, 0x98, + 0x02, 0x00, 0x20, 0x08, 0xf0, 0x41, 0x0b, 0x10, 0xdc, 0x21, 0x00, 0x78, + 0xbc, 0x3f, 0x00, 0x03, 0xb3, 0xff, 0x00, 0x03, 0x12, 0x1f, 0x20, 0x0c, + 0x12, 0x01, 0x20, 0x0c, 0x04, 0x81, 0x38, 0x00, 0xb7, 0xdf, 0xff, 0xff, + 0x04, 0x20, 0x10, 0x90, 0xb4, 0x3f, 0x00, 0x09, 0x14, 0x81, 0x38, 0x00, + 0x7c, 0x01, 0xf8, 0x01, 0xdb, 0xc0, 0xc0, 0x1d, 0x77, 0x00, 0x00, 0x01, + 0x73, 0xe5, 0x29, 0x01, 0x26, 0x3f, 0x00, 0x3c, 0xb3, 0xff, 0x00, 0x03, + 0x77, 0x01, 0x08, 0x01, 0x14, 0x80, 0x38, 0x00, 0x9f, 0xff, 0xf4, 0x00, + 0x06, 0x18, 0xd0, 0x00, 0xcc, 0xda, 0x40, 0xe1, 0xdb, 0xda, 0x40, 0x9d, + 0xd9, 0xc3, 0x11, 0x38, 0x04, 0x00, 0xd0, 0x10, 0xf0, 0x5a, 0x0b, 0x00, + 0xe3, 0xc5, 0x80, 0x00, 0xeb, 0xc2, 0x03, 0x88, 0x7c, 0x06, 0xf9, 0x05, + 0xf0, 0x42, 0x19, 0x08, 0xdb, 0xc6, 0x60, 0xbd, 0xd8, 0x43, 0x10, 0xb8, + 0x73, 0x64, 0x13, 0x00, 0x7c, 0x02, 0xf8, 0x01, 0xeb, 0xc3, 0x30, 0x00, + 0xe1, 0xc3, 0x00, 0x0c, 0xdb, 0xc2, 0xc1, 0x3d, 0xd9, 0xc4, 0xd0, 0xb8, + 0x04, 0x86, 0x00, 0xa0, 0xb7, 0xdf, 0xff, 0xff, 0xdc, 0x26, 0xf9, 0xb8, + 0xbc, 0x3f, 0x00, 0x06, 0x14, 0x1f, 0xd0, 0x90, 0x14, 0x82, 0x00, 0xa0, + 0xf1, 0xc4, 0x13, 0x03, 0xb3, 0xff, 0x00, 0x0c, 0x73, 0x62, 0x1b, 0x00, + 0x14, 0x1f, 0xd0, 0x90, 0x14, 0x02, 0x30, 0x90, 0x14, 0x82, 0x00, 0xa0, + 0xeb, 0xc0, 0x02, 0x03, 0xd9, 0xc4, 0x00, 0x38, 0x73, 0x60, 0x1b, 0x00, + 0x77, 0x63, 0x1b, 0x00, 0x78, 0x00, 0xfb, 0x00, 0x28, 0x1f, 0xf8, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x73, 0xe5, 0x29, 0x01, 0x04, 0x02, 0x00, 0x08, + 0x02, 0x03, 0x10, 0x0a, 0x02, 0x04, 0x10, 0x0c, 0xdc, 0x63, 0x20, 0xf8, + 0xb4, 0x3f, 0x00, 0x03, 0x04, 0x03, 0x00, 0x00, 0xbd, 0x03, 0x00, 0x03, + 0x2e, 0x3f, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xa3, 0xff, 0xff, 0x36, + 0x12, 0x04, 0xd0, 0x98, 0xdc, 0x20, 0xf8, 0x38, 0xb4, 0x3f, 0x00, 0x03, + 0x2e, 0x3f, 0x00, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xa7, 0xff, 0x00, 0x28, + 0xff, 0xff, 0xff, 0xff, 0x06, 0x18, 0xd0, 0x00, 0x04, 0x01, 0xd0, 0x10, + 0xeb, 0xc9, 0x02, 0x74, 0xf0, 0x5a, 0x43, 0x00, 0xe1, 0xc9, 0x00, 0xd0, + 0x04, 0x02, 0x08, 0x08, 0x7c, 0x03, 0xf8, 0x01, 0xeb, 0xc0, 0x30, 0x00, + 0xe1, 0xc0, 0x00, 0x0c, 0xdb, 0xc3, 0xc0, 0xfd, 0xf1, 0xc3, 0x1a, 0x01, + 0x73, 0x63, 0x03, 0x00, 0x04, 0x00, 0x08, 0x00, 0xbd, 0x00, 0x00, 0x09, + 0xf0, 0x48, 0x13, 0x00, 0xa3, 0xff, 0xff, 0x96, 0xeb, 0xc0, 0x00, 0x00, + 0x16, 0x1f, 0x40, 0x00, 0xf0, 0x48, 0x43, 0x08, 0x16, 0x1f, 0x40, 0x00, + 0x2c, 0x3f, 0x48, 0x00, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x10, 0x0a, + 0x02, 0x03, 0x10, 0x0c, 0xdc, 0x60, 0x18, 0x38, 0xbc, 0x3f, 0x00, 0x03, + 0x2e, 0x3f, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x41, 0x03, 0x00, + 0xf0, 0x48, 0x0b, 0x00, 0xa3, 0xff, 0xff, 0x10, 0x12, 0x03, 0xd0, 0x98, + 0xdc, 0x20, 0xf8, 0x38, 0xb4, 0x3f, 0x00, 0x03, 0x2e, 0x3f, 0x00, 0x04, + 0xff, 0xff, 0xff, 0xff, 0xa7, 0xff, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, + 0x06, 0x18, 0xd0, 0x00, 0x04, 0x0e, 0xd0, 0x10, 0xeb, 0xc0, 0x03, 0x80, + 0xf0, 0x4e, 0x13, 0x60, 0x7c, 0x03, 0xf9, 0x05, 0xf0, 0x40, 0x09, 0x08, + 0xdb, 0xc3, 0x60, 0x3d, 0xd8, 0x41, 0x00, 0x38, 0x77, 0x60, 0x03, 0x00, + 0x78, 0x0d, 0xfb, 0x00, 0xbc, 0x0d, 0x00, 0x03, 0x2e, 0x3f, 0xff, 0xf5, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x70, 0xa4, 0xf0, 0x4d, 0x0b, 0x00, + 0xf0, 0x4e, 0x1b, 0x00, 0xdb, 0xc0, 0x20, 0x15, 0xdb, 0xc0, 0x20, 0x3d, + 0xd8, 0x42, 0x03, 0xf8, 0x02, 0x00, 0x78, 0x02, 0xf0, 0x4f, 0x13, 0x00, + 0xf0, 0x5a, 0x23, 0x00, 0x14, 0x00, 0xd0, 0x08, 0xeb, 0xc0, 0x00, 0x01, + 0xa3, 0xff, 0xff, 0x35, 0x10, 0x1f, 0xd0, 0x9a, 0x77, 0x6d, 0x69, 0x03, + 0xeb, 0xc0, 0x03, 0x80, 0xb3, 0xff, 0x00, 0x10, 0xf0, 0x40, 0x89, 0x08, + 0x7c, 0x00, 0xf9, 0x05, 0xdb, 0xc0, 0x60, 0x3d, 0xd8, 0x51, 0x00, 0x38, + 0x77, 0x60, 0x03, 0x00, 0x78, 0x0d, 0xfb, 0x00, 0xbc, 0x0d, 0x00, 0x03, + 0x2e, 0x3f, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x4d, 0x0b, 0x00, + 0xf0, 0x4f, 0x13, 0x00, 0xf0, 0x4e, 0x1b, 0x00, 0xf0, 0x5a, 0x23, 0x00, + 0xa3, 0xff, 0xff, 0x23, 0xeb, 0xc0, 0x00, 0x00, 0x02, 0x20, 0x78, 0x02, + 0xbc, 0x3f, 0xff, 0xf1, 0x02, 0x00, 0x78, 0x00, 0xf5, 0x40, 0x02, 0x80, + 0x12, 0x00, 0xd0, 0x9c, 0x00, 0x00, 0x70, 0xa4, 0xf0, 0x40, 0x03, 0x10, + 0x10, 0x00, 0x70, 0xa4, 0x02, 0x00, 0x78, 0x00, 0xbe, 0x80, 0x00, 0x05, + 0xf0, 0x4d, 0x03, 0x00, 0xf0, 0x4e, 0x0b, 0x00, 0xa3, 0xff, 0xff, 0x47, + 0xf0, 0x5a, 0x13, 0x00, 0x2e, 0x3f, 0x00, 0x33, 0xff, 0xff, 0xff, 0xff, + 0x06, 0x18, 0xd0, 0x00, 0x04, 0x0e, 0xd0, 0x10, 0x00, 0x00, 0x70, 0xa4, + 0xf0, 0x4e, 0x0b, 0x60, 0xdb, 0xc0, 0x20, 0x15, 0xdb, 0xc0, 0x20, 0x3d, + 0xd8, 0x41, 0x03, 0xf8, 0xeb, 0xc0, 0x03, 0x80, 0xf0, 0x40, 0x89, 0x08, + 0x00, 0x20, 0xd0, 0x9a, 0xb4, 0x3f, 0x00, 0x09, 0x04, 0x0d, 0xd0, 0x94, + 0xf0, 0x4f, 0x13, 0x00, 0xf0, 0x4e, 0x1b, 0x00, 0xf0, 0x4d, 0x0b, 0x00, + 0xf0, 0x5a, 0x23, 0x00, 0xa3, 0xff, 0xff, 0x01, 0xeb, 0xc0, 0x00, 0x00, + 0xb7, 0xff, 0x00, 0x0f, 0x7c, 0x00, 0xf9, 0x05, 0xdb, 0xc0, 0x60, 0x3d, + 0xd8, 0x51, 0x00, 0x38, 0x77, 0x60, 0x03, 0x00, 0x78, 0x0d, 0xfb, 0x00, + 0xbc, 0x0d, 0x00, 0x03, 0x2e, 0x3f, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0x4d, 0x0b, 0x00, 0xf0, 0x4f, 0x13, 0x00, 0xf0, 0x4e, 0x1b, 0x00, + 0xf0, 0x5a, 0x23, 0x00, 0xa3, 0xff, 0xfe, 0xf2, 0xeb, 0xc0, 0x00, 0x00, + 0x02, 0x20, 0x78, 0x02, 0xbc, 0x3f, 0xff, 0xe7, 0x02, 0x00, 0x78, 0x00, + 0xf5, 0x40, 0x02, 0x80, 0x12, 0x00, 0xd0, 0x9c, 0x00, 0x00, 0x70, 0xa4, + 0xf0, 0x40, 0x03, 0x10, 0x10, 0x00, 0x70, 0xa4, 0x02, 0x00, 0x78, 0x00, + 0xbe, 0x80, 0x00, 0x05, 0xf0, 0x4d, 0x03, 0x00, 0xf0, 0x4e, 0x0b, 0x00, + 0xa3, 0xff, 0xff, 0x16, 0xf0, 0x5a, 0x13, 0x00, 0x2e, 0x3f, 0x00, 0x02, + 0xff, 0xff, 0xff, 0xff, 0x06, 0x18, 0xd0, 0x00, 0x04, 0x00, 0xd0, 0x10, + 0xeb, 0xc9, 0x00, 0xd0, 0x02, 0x08, 0xd0, 0x98, 0x04, 0x02, 0x00, 0x08, + 0x06, 0x06, 0xd0, 0x00, 0xf0, 0x5a, 0x0b, 0x00, 0x06, 0x04, 0x10, 0x00, + 0xd8, 0x65, 0x41, 0x78, 0xe1, 0xc9, 0x00, 0xd0, 0xd8, 0xc4, 0xf9, 0x38, + 0xca, 0x84, 0x31, 0x00, 0x04, 0x1b, 0x00, 0x00, 0x52, 0x24, 0x08, 0x9c, + 0x02, 0x03, 0x08, 0x9c, 0xbe, 0x83, 0x00, 0x04, 0x14, 0x1f, 0x08, 0x0c, + 0x2c, 0x3f, 0x48, 0x00, 0xff, 0xff, 0xff, 0xff, 0x02, 0x03, 0x10, 0x08, + 0xf0, 0x48, 0x23, 0x10, 0xdc, 0x24, 0x19, 0x38, 0xbc, 0x3f, 0x00, 0x03, + 0xb3, 0xff, 0x00, 0x03, 0x12, 0x1f, 0x08, 0x98, 0x12, 0x04, 0x08, 0x98, + 0xa7, 0xff, 0xfe, 0x81, 0xff, 0xff, 0xff, 0xff, 0xdc, 0x20, 0xf8, 0x38, + 0xb4, 0x3f, 0x00, 0x03, 0x2e, 0x3f, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, + 0xa7, 0xff, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0x04, 0x02, 0xd0, 0x10, + 0x04, 0x01, 0xd0, 0x08, 0x00, 0x00, 0x10, 0xa4, 0xf0, 0x42, 0x13, 0x60, + 0xf5, 0x40, 0x03, 0x0f, 0xd8, 0x42, 0x00, 0x38, 0x02, 0x00, 0x00, 0x02, + 0xd8, 0x41, 0x00, 0x38, 0xa3, 0xff, 0xff, 0xa5, 0x14, 0x00, 0xd0, 0x08, + 0x04, 0x03, 0x08, 0x04, 0x04, 0x02, 0x08, 0x08, 0xeb, 0xc6, 0x00, 0x0f, + 0x04, 0x84, 0x18, 0x0c, 0xb7, 0xdf, 0xff, 0xff, 0x14, 0x04, 0x08, 0x08, + 0xd9, 0xc4, 0x10, 0xb8, 0x14, 0x82, 0x18, 0x0c, 0x04, 0x1b, 0x08, 0x00, + 0xf4, 0x26, 0x33, 0x07, 0xb4, 0x3f, 0x00, 0x06, 0x04, 0x04, 0x00, 0x08, + 0xf0, 0x46, 0x1b, 0x01, 0xcc, 0x04, 0x00, 0xa9, 0xd9, 0xc2, 0x18, 0xb8, + 0x14, 0x02, 0x00, 0x08, 0x04, 0x02, 0x00, 0x08, 0x06, 0x04, 0x00, 0x00, + 0xce, 0xe2, 0x60, 0x01, 0xd8, 0x65, 0x00, 0xf8, 0xd8, 0xc4, 0xf8, 0xb8, + 0x71, 0xe6, 0x35, 0x00, 0x55, 0x22, 0x08, 0x00, 0xe3, 0xc0, 0x00, 0x54, + 0x2c, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x04, 0x03, 0x08, 0x08, + 0xb6, 0x03, 0x00, 0x1b, 0xeb, 0xc2, 0x02, 0x00, 0xcf, 0x03, 0x10, 0xc5, + 0xe1, 0xc2, 0x00, 0x0c, 0xd8, 0x43, 0x10, 0xb8, 0x77, 0x62, 0x13, 0x00, + 0x78, 0x04, 0xfb, 0x00, 0xb4, 0x04, 0x00, 0x05, 0xeb, 0xc2, 0x02, 0x00, + 0xe1, 0xc2, 0x00, 0x0c, 0x77, 0x62, 0x13, 0x00, 0x78, 0x04, 0xfb, 0x00, + 0x04, 0x06, 0x08, 0x04, 0xcf, 0x84, 0x80, 0x81, 0xcb, 0x02, 0xf8, 0xc0, + 0xeb, 0xc2, 0x00, 0xff, 0xdb, 0xc2, 0x18, 0xfc, 0xcf, 0x06, 0x80, 0x81, + 0xcb, 0x04, 0xf9, 0x40, 0xcb, 0x03, 0xf9, 0x00, 0xcb, 0x02, 0xf8, 0x80, + 0xd9, 0x44, 0x28, 0xf8, 0xdd, 0x42, 0x20, 0xb8, 0xd9, 0xc3, 0x10, 0xb8, + 0xcb, 0x02, 0xf8, 0x80, 0xf9, 0x02, 0x34, 0x20, 0x14, 0x06, 0x08, 0x04, + 0x04, 0x04, 0x08, 0x04, 0xeb, 0xc2, 0x00, 0x90, 0xb8, 0x24, 0x00, 0x21, + 0xe1, 0xc2, 0x00, 0x0c, 0xeb, 0xc3, 0x00, 0x8c, 0xe1, 0xc3, 0x00, 0x0c, + 0x73, 0x64, 0x1b, 0x00, 0xb3, 0xff, 0x00, 0x09, 0xeb, 0xc4, 0x00, 0x00, + 0x77, 0x62, 0x13, 0x00, 0x78, 0x05, 0xfb, 0x00, 0xdb, 0xc4, 0x10, 0xfd, + 0xd8, 0x41, 0x18, 0xf8, 0x14, 0x05, 0x18, 0x10, 0xf0, 0x42, 0x13, 0x04, + 0xf0, 0x44, 0x23, 0x01, 0xf4, 0x24, 0x23, 0x10, 0xb5, 0x7f, 0xff, 0xf8, + 0xeb, 0xc6, 0x00, 0x4f, 0x04, 0x1b, 0x08, 0x00, 0xf4, 0x26, 0x33, 0x07, + 0xb4, 0x3f, 0x00, 0x06, 0x04, 0x04, 0x00, 0x08, 0xf0, 0x46, 0x1b, 0x01, + 0xcc, 0x04, 0x00, 0xa9, 0xd9, 0xc2, 0x18, 0xb8, 0x14, 0x02, 0x00, 0x08, + 0x04, 0x02, 0x00, 0x08, 0x06, 0x04, 0x00, 0x00, 0xce, 0xe2, 0x60, 0x01, + 0xd8, 0x65, 0x00, 0xf8, 0xd8, 0xc4, 0xf8, 0xb8, 0x71, 0xe6, 0x35, 0x00, + 0xb3, 0xff, 0x00, 0x2a, 0x55, 0x22, 0x08, 0x00, 0xeb, 0xc6, 0x00, 0x8c, + 0xce, 0x04, 0x01, 0x41, 0xe1, 0xc6, 0x00, 0x0c, 0xb3, 0xff, 0x00, 0x0f, + 0xeb, 0xc7, 0x00, 0x00, 0xdb, 0x5f, 0x29, 0x3d, 0xeb, 0xc3, 0x00, 0x1f, + 0xdc, 0x43, 0x20, 0xf8, 0xcb, 0x03, 0xf8, 0xc0, 0xdb, 0x45, 0x19, 0x78, + 0xdb, 0xc7, 0x10, 0xfd, 0xd8, 0x41, 0x18, 0xf8, 0xf4, 0x44, 0x23, 0x10, + 0xdb, 0xc4, 0x11, 0x3d, 0x04, 0x03, 0x18, 0x10, 0xd8, 0x42, 0x21, 0x38, + 0x73, 0x63, 0x23, 0x00, 0xf0, 0x47, 0x3b, 0x01, 0xdc, 0x25, 0xf9, 0x78, + 0xbc, 0x3f, 0xff, 0xf2, 0x04, 0x02, 0x08, 0x04, 0x73, 0x62, 0x33, 0x00, + 0x04, 0x02, 0x08, 0x08, 0xb6, 0x02, 0x00, 0x11, 0xeb, 0xc6, 0x00, 0x07, + 0x04, 0x1b, 0x08, 0x00, 0xf4, 0x26, 0x33, 0x07, 0xb4, 0x3f, 0x00, 0x06, + 0x04, 0x04, 0x00, 0x08, 0xf0, 0x46, 0x1b, 0x01, 0xcc, 0x04, 0x00, 0xa9, + 0xd9, 0xc2, 0x18, 0xb8, 0x14, 0x02, 0x00, 0x08, 0x04, 0x02, 0x00, 0x08, + 0x06, 0x04, 0x00, 0x00, 0xce, 0xe2, 0x60, 0x01, 0xd8, 0x65, 0x00, 0xf8, + 0xd8, 0xc4, 0xf8, 0xb8, 0x71, 0xe6, 0x35, 0x00, 0x55, 0x22, 0x08, 0x00, + 0x9f, 0xff, 0xf4, 0x00, 0x04, 0x04, 0x08, 0x04, 0xeb, 0xc3, 0x11, 0x00, + 0xf1, 0x44, 0x10, 0x03, 0xdb, 0xe2, 0xc0, 0x9d, 0xb8, 0x3f, 0x00, 0x69, + 0xe1, 0xc3, 0x00, 0x0c, 0xbc, 0x24, 0x00, 0x36, 0xeb, 0xc2, 0x11, 0xfc, + 0xe1, 0xc2, 0x00, 0x0c, 0x73, 0x64, 0x13, 0x00, 0x77, 0x62, 0x13, 0x00, + 0x78, 0x02, 0xfb, 0x00, 0xbc, 0x42, 0x00, 0x14, 0xf1, 0xc4, 0x10, 0x20, + 0x14, 0x02, 0x08, 0x04, 0xeb, 0xc6, 0x00, 0x07, 0x04, 0x1b, 0x08, 0x00, + 0xf4, 0x26, 0x33, 0x07, 0xb4, 0x3f, 0x00, 0x06, 0x04, 0x04, 0x00, 0x08, + 0xf0, 0x46, 0x1b, 0x01, 0xcc, 0x04, 0x00, 0xa9, 0xd9, 0xc2, 0x18, 0xb8, + 0x14, 0x02, 0x00, 0x08, 0x04, 0x02, 0x00, 0x08, 0x06, 0x04, 0x00, 0x00, + 0xce, 0xe2, 0x60, 0x01, 0xd8, 0x65, 0x00, 0xf8, 0xd8, 0xc4, 0xf8, 0xb8, + 0x71, 0xe6, 0x35, 0x00, 0xb3, 0xff, 0x00, 0xc0, 0x55, 0x22, 0x08, 0x00, + 0xb3, 0xff, 0x00, 0x09, 0xeb, 0xc2, 0x00, 0x00, 0x77, 0x63, 0x1b, 0x00, + 0x78, 0x05, 0xfb, 0x00, 0xdb, 0xc2, 0x11, 0x3d, 0xd8, 0x41, 0x21, 0x38, + 0x14, 0x05, 0x20, 0x10, 0xf0, 0x43, 0x1b, 0x04, 0xf0, 0x42, 0x13, 0x01, + 0xf4, 0x22, 0x13, 0x15, 0xb5, 0x7f, 0xff, 0xf8, 0xeb, 0xc6, 0x00, 0x63, + 0x04, 0x1b, 0x08, 0x00, 0xf4, 0x26, 0x33, 0x07, 0xb4, 0x3f, 0x00, 0x06, + 0x04, 0x04, 0x00, 0x08, 0xf0, 0x46, 0x1b, 0x01, 0xcc, 0x04, 0x00, 0xa9, + 0xd9, 0xc2, 0x18, 0xb8, 0x14, 0x02, 0x00, 0x08, 0x04, 0x02, 0x00, 0x08, + 0x06, 0x04, 0x00, 0x00, 0xce, 0xe2, 0x60, 0x01, 0xd8, 0x65, 0x00, 0xf8, + 0xd8, 0xc4, 0xf8, 0xb8, 0x71, 0xe6, 0x35, 0x00, 0xb3, 0xff, 0x00, 0xa4, + 0x55, 0x22, 0x08, 0x00, 0xeb, 0xc2, 0x11, 0xfc, 0xf1, 0xc4, 0x18, 0x40, + 0xe1, 0xc2, 0x00, 0x0c, 0x73, 0x63, 0x13, 0x00, 0x04, 0x06, 0x08, 0x08, + 0xb3, 0xff, 0x00, 0x10, 0xeb, 0xc2, 0x00, 0x00, 0xdb, 0x5f, 0x31, 0x7d, + 0xeb, 0xc3, 0x00, 0x1f, 0xdc, 0x43, 0x28, 0xf8, 0xcb, 0x03, 0xf8, 0xc0, + 0xdb, 0x46, 0x19, 0xb8, 0xdb, 0xc2, 0x10, 0xfd, 0xd8, 0x41, 0x19, 0x38, + 0xeb, 0xc3, 0x11, 0x00, 0x04, 0x04, 0x20, 0x10, 0xdb, 0xc5, 0x11, 0x7d, + 0xe1, 0xc3, 0x00, 0x0c, 0xd8, 0x45, 0x18, 0xf8, 0x73, 0x64, 0x1b, 0x00, + 0xf0, 0x42, 0x13, 0x01, 0xdc, 0x26, 0xf9, 0xb8, 0xbc, 0x3f, 0xff, 0xf1, + 0x04, 0x03, 0x08, 0x04, 0xeb, 0xc2, 0x11, 0xfc, 0xe1, 0xc2, 0x00, 0x0c, + 0x73, 0x63, 0x13, 0x00, 0x77, 0x62, 0x13, 0x00, 0x78, 0x02, 0xfb, 0x00, + 0xbc, 0x42, 0x00, 0x85, 0xf1, 0xc3, 0x10, 0x20, 0x14, 0x02, 0x08, 0x04, + 0xeb, 0xc6, 0x00, 0x07, 0x04, 0x1b, 0x08, 0x00, 0xf4, 0x26, 0x33, 0x07, + 0xb4, 0x3f, 0x00, 0x06, 0x04, 0x04, 0x00, 0x08, 0xf0, 0x46, 0x1b, 0x01, + 0xcc, 0x04, 0x00, 0xa9, 0xd9, 0xc2, 0x18, 0xb8, 0x14, 0x02, 0x00, 0x08, + 0x04, 0x02, 0x00, 0x08, 0x06, 0x04, 0x00, 0x00, 0xce, 0xe2, 0x60, 0x01, + 0xd8, 0x65, 0x00, 0xf8, 0xd8, 0xc4, 0xf8, 0xb8, 0x71, 0xe6, 0x35, 0x00, + 0xb3, 0xff, 0x00, 0x73, 0x55, 0x22, 0x08, 0x00, 0xf4, 0x22, 0x13, 0x01, + 0xbc, 0x3f, 0x00, 0x38, 0xbc, 0x24, 0x00, 0x20, 0xeb, 0xc2, 0x11, 0xfc, + 0xe1, 0xc2, 0x00, 0x0c, 0x73, 0x64, 0x13, 0x00, 0xb3, 0xff, 0x00, 0x09, + 0xeb, 0xc2, 0x00, 0x00, 0x77, 0x63, 0x1b, 0x00, 0x78, 0x05, 0xfb, 0x00, + 0xdb, 0xc2, 0x11, 0x3d, 0xd8, 0x41, 0x21, 0x38, 0x14, 0x05, 0x20, 0x10, + 0xf0, 0x43, 0x1b, 0x04, 0xf0, 0x42, 0x13, 0x01, 0xf4, 0x22, 0x13, 0x08, + 0xb5, 0x7f, 0xff, 0xf8, 0xeb, 0xc6, 0x00, 0x2f, 0x04, 0x1b, 0x08, 0x00, + 0xf4, 0x26, 0x33, 0x07, 0xb4, 0x3f, 0x00, 0x06, 0x04, 0x04, 0x00, 0x08, + 0xf0, 0x46, 0x1b, 0x01, 0xcc, 0x04, 0x00, 0xa9, 0xd9, 0xc2, 0x18, 0xb8, + 0x14, 0x02, 0x00, 0x08, 0x04, 0x02, 0x00, 0x08, 0x06, 0x04, 0x00, 0x00, + 0xce, 0xe2, 0x60, 0x01, 0xd8, 0x65, 0x00, 0xf8, 0xd8, 0xc4, 0xf8, 0xb8, + 0x71, 0xe6, 0x35, 0x00, 0xb3, 0xff, 0x00, 0x51, 0x55, 0x22, 0x08, 0x00, + 0xeb, 0xc5, 0x11, 0xfc, 0xf1, 0x44, 0x22, 0xff, 0xe1, 0xc5, 0x00, 0x0c, + 0xb3, 0xff, 0x00, 0x0f, 0xeb, 0xc6, 0x00, 0x00, 0xdb, 0x5f, 0x20, 0xbd, + 0xeb, 0xc0, 0x00, 0x1f, 0xdc, 0x40, 0x10, 0x38, 0xcb, 0x00, 0xf8, 0x00, + 0xdb, 0x44, 0x01, 0x38, 0xdb, 0xc6, 0x10, 0x3d, 0xd8, 0x41, 0x00, 0x38, + 0xf4, 0x42, 0x13, 0x10, 0xdb, 0xc2, 0x10, 0xbd, 0x04, 0x00, 0x00, 0x10, + 0xd8, 0x43, 0x10, 0xb8, 0x73, 0x60, 0x13, 0x00, 0xf0, 0x46, 0x33, 0x01, + 0xdc, 0x24, 0xf9, 0x38, 0xbc, 0x3f, 0xff, 0xf2, 0x04, 0x00, 0x08, 0x04, + 0xb3, 0xff, 0x00, 0x3a, 0x73, 0x60, 0x2b, 0x00, 0xf4, 0x22, 0x13, 0x02, + 0xbc, 0x3f, 0x00, 0x37, 0xbc, 0x24, 0x00, 0x20, 0xeb, 0xc2, 0x11, 0xfc, + 0xe1, 0xc2, 0x00, 0x0c, 0x73, 0x64, 0x13, 0x00, 0xb3, 0xff, 0x00, 0x09, + 0xeb, 0xc2, 0x00, 0x00, 0x77, 0x63, 0x1b, 0x00, 0x78, 0x05, 0xfb, 0x00, + 0xdb, 0xc2, 0x11, 0x3d, 0xd8, 0x41, 0x21, 0x38, 0x14, 0x05, 0x20, 0x10, + 0xf0, 0x43, 0x1b, 0x04, 0xf0, 0x42, 0x13, 0x01, 0xf4, 0x22, 0x13, 0x02, + 0xb5, 0x7f, 0xff, 0xf8, 0xeb, 0xc6, 0x00, 0x17, 0x04, 0x1b, 0x08, 0x00, + 0xf4, 0x26, 0x33, 0x07, 0xb4, 0x3f, 0x00, 0x06, 0x04, 0x04, 0x00, 0x08, + 0xf0, 0x46, 0x1b, 0x01, 0xcc, 0x04, 0x00, 0xa9, 0xd9, 0xc2, 0x18, 0xb8, + 0x14, 0x02, 0x00, 0x08, 0x04, 0x02, 0x00, 0x08, 0x06, 0x04, 0x00, 0x00, + 0xce, 0xe2, 0x60, 0x01, 0xd8, 0x65, 0x00, 0xf8, 0xd8, 0xc4, 0xf8, 0xb8, + 0x71, 0xe6, 0x35, 0x00, 0xb3, 0xff, 0x00, 0x18, 0x55, 0x22, 0x08, 0x00, + 0xeb, 0xc5, 0x11, 0xfc, 0xf1, 0x44, 0x22, 0xff, 0xe1, 0xc5, 0x00, 0x0c, + 0xb3, 0xff, 0x00, 0x0f, 0xeb, 0xc6, 0x00, 0x00, 0xdb, 0x5f, 0x20, 0xbd, + 0xeb, 0xc0, 0x00, 0x1f, 0xdc, 0x40, 0x10, 0x38, 0xcb, 0x00, 0xf8, 0x00, + 0xdb, 0x44, 0x01, 0x38, 0xdb, 0xc6, 0x10, 0x3d, 0xd8, 0x41, 0x00, 0x38, + 0xf4, 0x42, 0x13, 0x10, 0xdb, 0xc2, 0x10, 0xbd, 0x04, 0x00, 0x00, 0x10, + 0xd8, 0x43, 0x10, 0xb8, 0x73, 0x60, 0x13, 0x00, 0xf0, 0x46, 0x33, 0x01, + 0xdc, 0x24, 0xf9, 0x38, 0xbc, 0x3f, 0xff, 0xf2, 0x04, 0x00, 0x08, 0x04, + 0x73, 0x60, 0x2b, 0x00, 0x9f, 0xff, 0xf4, 0x00, 0xe3, 0xc0, 0x00, 0x54, + 0x2c, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xc0, 0x00, 0x01, + 0x70, 0xe0, 0x01, 0x01, 0x2e, 0x3f, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0x06, 0x18, 0xd0, 0x00, 0xec, 0x59, 0x00, 0x08, 0x04, 0x01, 0xe0, 0x04, + 0x04, 0x00, 0xe0, 0x08, 0x06, 0x02, 0x08, 0x08, 0x16, 0x02, 0x00, 0x08, + 0x06, 0x02, 0x08, 0x00, 0xa3, 0xff, 0xff, 0xf5, 0x16, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x08, 0x04, 0x01, 0x00, 0x04, 0xeb, 0xc0, 0x00, 0x01, + 0x14, 0x01, 0x10, 0x00, 0x70, 0xe0, 0x01, 0x01, 0x2e, 0x3f, 0xff, 0xf2, + 0xff, 0xff, 0xff, 0xff, 0x06, 0x18, 0xd0, 0x00, 0x00, 0x03, 0xe0, 0x03, + 0xf0, 0x5a, 0x03, 0x00, 0xec, 0x23, 0x00, 0x05, 0xb8, 0x1f, 0x00, 0x1b, + 0xf0, 0x5c, 0x0b, 0x00, 0x97, 0x43, 0x00, 0x01, 0xb7, 0xff, 0x00, 0x0a, + 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, + 0xb7, 0xff, 0x00, 0x0c, 0xff, 0xff, 0xff, 0xff, 0xb3, 0xff, 0x00, 0x0d, + 0xf0, 0x41, 0x03, 0x00, 0xb7, 0xff, 0x00, 0x0e, 0xff, 0xff, 0xff, 0xff, + 0xa7, 0xff, 0xfe, 0x91, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x00, 0x0c, + 0xa7, 0xff, 0xfe, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x00, 0x09, + 0xa7, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x00, 0x06, + 0xa7, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x00, 0x03, + 0xa7, 0xff, 0xfe, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xc0, 0x00, 0x54, + 0x2c, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xc2, 0x30, 0x70, + 0xe1, 0xc2, 0x00, 0x0c, 0x77, 0x62, 0x13, 0x00, 0x78, 0x03, 0xfb, 0x00, + 0x77, 0x63, 0x19, 0x03, 0xeb, 0xc1, 0x06, 0xa7, 0xeb, 0xc0, 0x00, 0x18, + 0xe9, 0xc1, 0x00, 0x00, 0xe1, 0xc0, 0x00, 0x0b, 0x73, 0x61, 0x03, 0x00, + 0xeb, 0xc0, 0x02, 0x00, 0xe1, 0xc0, 0x00, 0x0b, 0xe3, 0xc1, 0x80, 0x00, + 0x73, 0x61, 0x03, 0x00, 0xeb, 0xc0, 0x02, 0x04, 0xe1, 0xc0, 0x00, 0x0b, + 0x73, 0x7f, 0x03, 0x00, 0xeb, 0xc1, 0x02, 0xc0, 0xeb, 0xc0, 0x00, 0x28, + 0xe1, 0xc1, 0x00, 0x50, 0xe1, 0xc0, 0x00, 0x0b, 0x73, 0x61, 0x03, 0x00, + 0xf5, 0x43, 0x00, 0x80, 0x73, 0x60, 0x13, 0x00, 0xeb, 0xc1, 0x00, 0x08, + 0xe1, 0xc1, 0x00, 0x0f, 0x77, 0x61, 0x0b, 0x00, 0x78, 0x00, 0xfb, 0x00, + 0xf1, 0xc0, 0x02, 0x14, 0x73, 0x60, 0x0b, 0x00, 0xe3, 0xc1, 0x81, 0x00, + 0xe3, 0xc0, 0x00, 0x0b, 0x73, 0x61, 0x03, 0x00, 0xc6, 0x00, 0x06, 0x73, + 0x2c, 0x3f, 0xf0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xc2, 0x02, 0x04, + 0xe1, 0xc2, 0x00, 0x0b, 0x77, 0x62, 0x13, 0x00, 0x78, 0x01, 0xfb, 0x00, + 0xec, 0x21, 0x00, 0x1f, 0xb4, 0x1f, 0x00, 0x2d, 0xe3, 0xc1, 0x01, 0x00, + 0xe3, 0xc0, 0x00, 0x0b, 0x73, 0x61, 0x03, 0x00, 0xeb, 0xc0, 0x00, 0x04, + 0xe1, 0xc0, 0x00, 0x0b, 0x77, 0x60, 0x03, 0x00, 0x78, 0x00, 0xfb, 0x00, + 0xb4, 0x00, 0x00, 0x25, 0x77, 0x62, 0x13, 0x00, 0x78, 0x01, 0xfb, 0x00, + 0xeb, 0xc0, 0x00, 0x84, 0xe1, 0xc0, 0x00, 0x0f, 0x77, 0x60, 0x03, 0x00, + 0x78, 0x00, 0xfb, 0x00, 0xdc, 0x21, 0x00, 0x78, 0xbc, 0x3f, 0x00, 0x1d, + 0xeb, 0xc0, 0x00, 0x8c, 0xe1, 0xc0, 0x00, 0x0f, 0x77, 0x60, 0x03, 0x00, + 0x78, 0x00, 0xfb, 0x00, 0xdc, 0x21, 0x00, 0x78, 0xbc, 0x3f, 0x00, 0x17, + 0xeb, 0xc0, 0x00, 0x64, 0xe1, 0xc0, 0x00, 0x0f, 0xef, 0xc1, 0x00, 0x00, + 0x73, 0x61, 0x03, 0x00, 0xeb, 0xc1, 0x00, 0x08, 0xe1, 0xc1, 0x00, 0x0f, + 0x77, 0x61, 0x0b, 0x00, 0x78, 0x00, 0xfb, 0x00, 0xf1, 0xc0, 0x02, 0x04, + 0xf5, 0x40, 0x02, 0x10, 0x73, 0x60, 0x0b, 0x00, 0xeb, 0xc0, 0x30, 0x70, + 0xe1, 0xc0, 0x00, 0x0c, 0x73, 0x7c, 0x03, 0x00, 0xeb, 0xc0, 0x02, 0x00, + 0xe1, 0xc0, 0x00, 0x0b, 0x73, 0x7f, 0x03, 0x00, 0xe3, 0xc0, 0x00, 0x40, + 0xc6, 0x0c, 0x30, 0x74, 0x73, 0x60, 0xf3, 0x00, 0x28, 0x1f, 0xf8, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x28, 0x3f, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xeb, 0xc0, 0x03, 0x88, 0xdb, 0xda, 0x40, 0x9d, 0xdb, 0xda, 0x40, 0x7d, + 0xd9, 0xc2, 0x08, 0x78, 0xe1, 0xc0, 0x00, 0x0b, 0xf0, 0x5a, 0x13, 0x00, + 0x73, 0x61, 0x03, 0x00, 0x77, 0x7a, 0xd1, 0x03, 0xb3, 0xff, 0x00, 0x06, + 0xeb, 0xc1, 0x00, 0x00, 0xdb, 0xc1, 0x10, 0x3d, 0xd8, 0x42, 0x00, 0x38, + 0x14, 0x1f, 0x00, 0x00, 0xf0, 0x41, 0x0b, 0x01, 0xf4, 0x21, 0x0b, 0x40, + 0xb5, 0x7f, 0xff, 0xfb, 0xeb, 0xc0, 0x01, 0x00, 0x14, 0x00, 0x10, 0x08, + 0x14, 0x1f, 0x10, 0x0c, 0xc6, 0x50, 0x00, 0x10, 0x2c, 0x3f, 0xf0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xb3, 0xff, 0x00, 0x03, 0xeb, 0xc3, 0x00, 0x00, + 0x78, 0x03, 0xf9, 0x00, 0xbc, 0x03, 0xff, 0xff, 0xeb, 0xc1, 0x30, 0x00, + 0xdb, 0xc3, 0xc0, 0xbd, 0xeb, 0xc0, 0x02, 0x03, 0xd9, 0xc2, 0x00, 0x38, + 0xe1, 0xc1, 0x00, 0x0c, 0x73, 0x60, 0x0b, 0x00, 0xeb, 0xc2, 0x30, 0x78, + 0xe1, 0xc2, 0x00, 0x0c, 0x77, 0x62, 0x13, 0x00, 0x78, 0x01, 0xfb, 0x00, + 0xdb, 0xc3, 0x80, 0x3d, 0xf5, 0x41, 0x09, 0xff, 0xd9, 0xc1, 0x00, 0x38, + 0x73, 0x60, 0x13, 0x00, 0x7c, 0x00, 0xf8, 0x01, 0x77, 0x03, 0x18, 0x01, + 0x26, 0x1f, 0xff, 0x7e, 0x77, 0x60, 0x00, 0x01, 0x9f, 0xff, 0xf4, 0x00, + 0x4d, 0xdc, 0x86, 0x9f +}; +unsigned int fsl_fman_ucode_P2041_101_8_bin_len = 7240; diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c index 0b8c33f..6eb6c2a 100644 --- a/drivers/net/fm/fm.c +++ b/drivers/net/fm/fm.c @@ -408,6 +408,8 @@ int fm_init_common(int index, struct ccsr_fman *reg) /* flush cache after read */ flush_cache((ulong)addr, cnt * 512); } +#elif defined (CONFIG_SYS_QE_FMAN_FW_IN_IMAGE) + void *addr = CONFIG_SYS_QE_FMAN_FW_IMAGE; #endif
/* Upload the Fman microcode if it's present */ diff --git a/include/configs/SBx81CFC960.h b/include/configs/SBx81CFC960.h index 7e1728a..fff5e5f 100644 --- a/include/configs/SBx81CFC960.h +++ b/include/configs/SBx81CFC960.h @@ -374,28 +374,11 @@ unsigned long get_board_sys_clk(unsigned long dummy);
#define CONFIG_SYS_DPAA_FMAN #define CONFIG_SYS_DPAA_PME -/* Default address of microcode for the Linux Fman driver */ -#if defined(CONFIG_SPIFLASH) -/* - * env is stored at 0x100000, sector size is 0x10000, ucode is stored after - * env, so we got 0x110000. - */ -#define CONFIG_SYS_QE_FW_IN_SPIFLASH -#define CONFIG_SYS_QE_FMAN_FW_ADDR 0x110000 -#elif defined(CONFIG_SDCARD) -/* - * PBL SD boot image should stored at 0x1000(8 blocks), the size of the image is - * about 545KB (1089 blocks), Env is stored after the image, and the env size is - * 0x2000 (16 blocks), 8 + 1089 + 16 = 1113, enlarge it to 1130. - */ -#define CONFIG_SYS_QE_FMAN_FW_IN_MMC -#define CONFIG_SYS_QE_FMAN_FW_ADDR (512 * 1130) -#elif defined(CONFIG_NAND) -#define CONFIG_SYS_QE_FMAN_FW_IN_NAND -#define CONFIG_SYS_QE_FMAN_FW_ADDR (6 * CONFIG_SYS_NAND_BLOCK_SIZE) -#else -#define CONFIG_SYS_QE_FMAN_FW_IN_NOR -#define CONFIG_SYS_QE_FMAN_FW_ADDR 0xEF000000 +/* Fman microcode */ +#define CONFIG_SYS_QE_FMAN_FW_IN_IMAGE +#ifndef __ASSEMBLY__ +extern unsigned char fsl_fman_ucode_P2041_101_8_bin[]; +#define CONFIG_SYS_QE_FMAN_FW_IMAGE &fsl_fman_ucode_P2041_101_8_bin[0] #endif #define CONFIG_SYS_QE_FMAN_FW_LENGTH 0x10000 #define CONFIG_SYS_FDT_PAD (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)

judge.packham@gmail.com wrote:
.../SBx81CFC960/fsl_fman_ucode_P2041_101_8.bin | Bin 0 -> 7240 bytes .../SBx81CFC960/fsl_fman_ucode_P2041_101_8.c | 607 ++++++++++++++++++++
Including the firmware itself in the patch is a bad idea. I do not want any Freescale firmware to be included in the U-Boot source tree itself.

Dear judge.packham@gmail.com,
In message 1348216335-18105-1-git-send-email-judge.packham@gmail.com you wrote:
From: Chris Packham judge.packham@gmail.com
Instead of storing the mircocode in a separate flash block simply embed the image as C code array of bytes.
What exactly is the licensing of this code?
Would it not have to be GPL compatible to "link" it in such a way, which in turn would require the source code and the tools to build it ?
Best regards,
Wolfgang Denk

Wolfgang Denk wrote:
Dear judge.packham@gmail.com,
In message 1348216335-18105-1-git-send-email-judge.packham@gmail.com you wrote:
From: Chris Packham judge.packham@gmail.com
Instead of storing the mircocode in a separate flash block simply embed the image as C code array of bytes.
What exactly is the licensing of this code?
It's not GPL-compatible, so linking the code with U-boot and shipping the binary as one blob is probably a GPL violation. That's why I created the "QE firmware binary format" and wrote all that code to treat the firmware as a separate binary blob.

On 09/22/2012 03:58 AM, Wolfgang Denk wrote:
Dear judge.packham@gmail.com,
In message 1348216335-18105-1-git-send-email-judge.packham@gmail.com you wrote:
From: Chris Packham judge.packham@gmail.com
Instead of storing the mircocode in a separate flash block simply embed the image as C code array of bytes.
What exactly is the licensing of this code?
Good point. I got the firmware out of the SDK that came with our P2041RDB. I believe the intent was that the Fman microcode is written to a reserved flash block and downloaded to the frame manager by the OS when needed. As a Freescale customer I would actually prefer to have the source released under the GPL and build everything into the u-boot image.
Would it not have to be GPL compatible to "link" it in such a way, which in turn would require the source code and the tools to build it ?
Well I took one law paper at university and quickly decided to major in computer science instead so I am entirely unqualified to comment :). That being said it probably depends on the definition of "link". No code is actually being called directly from u-boot, it's just a convenient transportation mechanism. Still there are statements in the GPL about what constitutes distributing the code, someone more qualified can tackle that.
I can understand why for u-boot this might be a gray area. Writing firmware blobs to a flash block somewhere is a solution that avoids any problems and makes my patch unsuitable/unnecessary.

Chris Packham wrote:
Good point. I got the firmware out of the SDK that came with our P2041RDB. I believe the intent was that the Fman microcode is written to a reserved flash block and downloaded to the frame manager by the OS when needed. As a Freescale customer I would actually prefer to have the source released under the GPL and build everything into the u-boot image.
For the record, Freescale considers embedding Fman or QE microcode into a "GPL binary" (e.g. a compiled U-boot or Linux image) to be a GPL violation. I'm sure there might be some linker or compiler tricks that some people would say are not GPL violations, but I'm not going to debate any of that. I'm just stating what our official position is.
Having said that, I do realize that Freescale still ships some QE firmware binaries as C header/source files that are supposed to be #included into customer code. Unfortunately, not all Freescale developers have gotten the message.
participants (8)
-
Chris Packham
-
Gerlando Falauto
-
judge.packham@gmail.com
-
McClintock Matthew-B29882
-
Scott Wood
-
Tabi Timur-B04825
-
Timur Tabi
-
Wolfgang Denk