From 9ff828b70b9cc107c77cf59176c6526544cc3f0d Mon Sep 17 00:00:00 2001 From: Byungho Min Date: Thu, 21 Jan 2010 17:28:01 +0900 Subject: [PATCH] Revert "p1p2: separate.patch & relation.patch" This reverts commit 468bf8aff858d05230b27642075904ef0fd4e3c9. --- board/samsung/p1p2/Makefile | 53 - board/samsung/p1p2/config.mk | 16 - board/samsung/p1p2/csa-build.sh | 36 - board/samsung/p1p2/lowlevel_init.S | 516 -------- board/samsung/p1p2/mem_setup.S | 334 ----- board/samsung/p1p2/modem_boot.c | 397 ------ board/samsung/p1p2/onenand.c | 102 -- board/samsung/p1p2/p1p2.c | 2408 ----------------------------------- board/samsung/p1p2/psi_ram.h | 941 -------------- board/samsung/p1p2/psi_ram.hex | 938 -------------- board/samsung/universal/universal.c | 291 ++++- drivers/video/Makefile | 4 - drivers/video/ams701ka.c | 74 +- lib_arm/Makefile | 4 - lib_arm/board.c | 1 - lib_arm/board_p1p2.c | 450 ------- 16 files changed, 249 insertions(+), 6316 deletions(-) delete mode 100644 board/samsung/p1p2/Makefile delete mode 100644 board/samsung/p1p2/config.mk delete mode 100644 board/samsung/p1p2/csa-build.sh delete mode 100644 board/samsung/p1p2/lowlevel_init.S delete mode 100644 board/samsung/p1p2/mem_setup.S delete mode 100644 board/samsung/p1p2/modem_boot.c delete mode 100644 board/samsung/p1p2/onenand.c delete mode 100644 board/samsung/p1p2/p1p2.c delete mode 100644 board/samsung/p1p2/psi_ram.h delete mode 100644 board/samsung/p1p2/psi_ram.hex delete mode 100644 lib_arm/board_p1p2.c diff --git a/board/samsung/p1p2/Makefile b/board/samsung/p1p2/Makefile deleted file mode 100644 index 515e80e..0000000 --- a/board/samsung/p1p2/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# -# (C) Copyright 2009 -# Kyungmin Park, Samsung Electronics -# -# See file CREDITS for list of people who contributed to this -# project. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, -# MA 02111-1307 USA -# - -include $(TOPDIR)/config.mk - -LIB = $(obj)lib$(BOARD).a - -COBJS-y := p1p2.o onenand.o -SOBJS := lowlevel_init.o - -COBJS-$(CONFIG_S5PC110_MODEM) += modem_boot.o - -SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c) -OBJS := $(addprefix $(obj),$(COBJS-y)) -SOBJS := $(addprefix $(obj),$(SOBJS)) - -$(LIB): $(obj).depend $(SOBJS) $(OBJS) - $(AR) $(ARFLAGS) $@ $(SOBJS) $(OBJS) - -clean: - rm -f $(SOBJS) $(OBJS) - -distclean: clean - rm -f $(LIB) core *.bak $(obj).depend - -######################################################################### - -# defines $(obj).depend target -include $(SRCTREE)/rules.mk - -sinclude $(obj).depend - -######################################################################### diff --git a/board/samsung/p1p2/config.mk b/board/samsung/p1p2/config.mk deleted file mode 100644 index ebab420..0000000 --- a/board/samsung/p1p2/config.mk +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2008 # Samsung Elecgtronics -# Kyungmin Park -# - -# On S5PC100 we use the 128 MiB OneDRAM bank at -# -# 0x30000000 to 0x35000000 (80MiB) -# 0x38000000 to 0x40000000 (128MiB) -# -# On S5PC110 we use the 128 MiB OneDRAM bank at -# -# 0x30000000 to 0x35000000 (80MiB) -# 0x40000000 to 0x48000000 (128MiB) -# -TEXT_BASE = 0x34800000 diff --git a/board/samsung/p1p2/csa-build.sh b/board/samsung/p1p2/csa-build.sh deleted file mode 100644 index 7956a6f..0000000 --- a/board/samsung/p1p2/csa-build.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -CSA_UBIFS_IMG=csa.ubifs.img -CSA_UBI_IMG=csa.ubi.img -CSA_CFG=csa-cfg.ini -CSA_TAR=csa.tar - -build() -{ - mkdir -p csa - rm -f $CSA_CFG - echo "[csa-volume]" > $CSA_CFG - echo "mode=ubi" >> $CSA_CFG - echo "image=$CSA_UBIFS_IMG" >> $CSA_CFG - echo "vol_id=5" >> $CSA_CFG - echo "vol_size=8MiB" >> $CSA_CFG - echo "vol_type=dynamic" >> $CSA_CFG - echo "vol_name=csa" >> $CSA_CFG - echo "vol_flags=autoresize" >> $CSA_CFG - echo "vol_alignment=1" >> $CSA_CFG - mkfs.ubifs -d csa -m 4096 -e 256KiB -c 100 -o $CSA_UBIFS_IMG -v - ubinize -o $CSA_UBI_IMG -p 256KiB -m 4KiB -s 4KiB -v $CSA_CFG - - tar cf $CSA_TAR $CSA_UBI_IMG -} - -clean() -{ - rm -rf $CSA_UBIFS_IMG $CSA_UBI_IMG $CSA_CFG $CSA_TAR csa -} - -if [ "$1" = "clean" ]; then - clean -else - build -fi diff --git a/board/samsung/p1p2/lowlevel_init.S b/board/samsung/p1p2/lowlevel_init.S deleted file mode 100644 index c914261..0000000 --- a/board/samsung/p1p2/lowlevel_init.S +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Memory Setup stuff - taken from blob memsetup.S - * - * Copyright (C) 2009 Samsung Electronics - * Kyungmin Park - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#define DEBUG_PM_C110 -#undef DEBUG_PM_C110 - -/* - * Register usages: - * - * r5 has zero always - * r7 has S5PC100 GPIO base, 0xE0300000 - * r8 has real GPIO base, 0xE0300000, 0xE0200000 at S5PC100, S5PC110 repectively - * r9 has Mobile DDR size, 1 means 1GiB, 2 means 2GiB and so on - */ - -_TEXT_BASE: - .word TEXT_BASE - - .globl lowlevel_init -lowlevel_init: - mov r11, lr - - /* r5 has always zero */ - mov r5, #0 - - ldr r7, =S5PC100_GPIO_BASE - ldr r8, =S5PC100_GPIO_BASE - /* Read CPU ID */ - ldr r2, =S5PC1XX_PRO_ID - ldr r0, [r2] - mov r1, #0x00010000 - and r0, r0, r1 - cmp r0, r5 - beq 100f - ldr r8, =S5PC110_GPIO_BASE -100: - /* Turn on KEY_LED_ON [GPJ4(1)] XMSMWEN */ - cmp r7, r8 -#ifndef DEBUG_PM_C110 - addeq r0, r8, #0x280 @S5PC100_GPIO_J4_OFFSET - addne r0, r8, #0x2C0 @S5PC110_GPIO_J4_OFFSET - ldr r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - bic r1, r1, #(0xf << 4) @ 1 * 4-bit - orr r1, r1, #(0x1 << 4) - str r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - - ldr r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET -#ifdef CONFIG_ONENAND_IPL - orr r1, r1, #(1 << 1) @ 1 * 1-bit -#else - bic r1, r1, #(1 << 1) -#endif - str r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET -#endif - - /* IO retension release */ - ldreq r0, =S5PC100_OTHERS @0xE0108200 - ldrne r0, =S5PC110_OTHERS @0xE010E000 - ldr r1, [r0] - ldreq r2, =(1 << 31) @IO_RET_REL - ldrne r2, =((1 << 31) | (1 << 30) | (1 << 29) | (1 << 28)) @ GPIO, UART_IO - orr r1, r1, r2 - str r1, [r0] - -#ifndef CONFIG_ONENAND_IPL - /* Disable Watchdog */ - ldreq r0, =S5PC100_WATCHDOG_BASE @0xEA200000 - ldrne r0, =S5PC110_WATCHDOG_BASE @0xE2700000 - str r5, [r0] - - /* setting SRAM */ - ldreq r0, =S5PC100_SROMC_BASE - ldrne r0, =S5PC110_SROMC_BASE - ldr r1, =0x9 - str r1, [r0] -#endif - - /* S5PC100 has 3 groups of interrupt sources */ - ldreq r0, =S5PC100_VIC0_BASE @0xE4000000 - ldrne r0, =S5PC110_VIC0_BASE @0xF2000000 - add r1, r0, #0x00100000 - add r2, r0, #0x00200000 - - /* Disable all interrupts (VIC0, VIC1 and VIC2) */ - mvn r3, #0x0 - str r3, [r0, #0x14] @INTENCLEAR - str r3, [r1, #0x14] @INTENCLEAR - str r3, [r2, #0x14] @INTENCLEAR - -#ifndef CONFIG_ONENAND_IPL - /* Set all interrupts as IRQ */ - str r5, [r0, #0xc] @INTSELECT - str r5, [r1, #0xc] @INTSELECT - str r5, [r2, #0xc] @INTSELECT - - /* Pending Interrupt Clear */ - str r5, [r0, #0xf00] @INTADDRESS - str r5, [r1, #0xf00] @INTADDRESS - str r5, [r2, #0xf00] @INTADDRESS -#endif - -#ifndef CONFIG_ONENAND_IPL - /* for UART */ - bl uart_asm_init - - bl internal_ram_init -#endif - -#ifdef CONFIG_ONENAND_IPL - /* init system clock */ - bl system_clock_init - - /* Board detection to set proper memory configuration */ - cmp r7, r8 - moveq r9, #1 /* r9 has 1Gib default at s5pc100 */ - movne r9, #2 /* r9 has 2Gib default at s5pc110 */ - /* FIXME 1Gib detection: Limo Universal */ - /* Check Limo Real board - * LR (suspend) LU J1B2 - * 0x04 0x01 (0x01) 0x01 (0x01) 0x01 (0x01) - * 0x24 0x28 (0xA8) 0x28 (0x6A) 0x1C (0x1C) - * 0x44 0x00 (0xC7) 0x00 (0x47) 0x00 (0x47) - * 0x64 0x03 (0x1F) 0x07 (0x1F) 0x0f (0x0F) - * - * Check (0 << 3) at 0x64 at boot - * Check 0x47 at 0x44 at suspend - */ - ldrne r2, =0xE0200C00 - ldrne r1, [r2, #0x64] - and r1, r1, #(1 << 2) - cmp r1, #(1 << 2) - moveq r9, #1 - ldr r1, [r2, #0x44] - cmp r1, #0x47 - moveq r9, #1 - /* - * Aquila Rev 0.5 : 4G3G1G x16 for Infineon ES3.1 - * Aquila Rev 0.6 : 4G1G1G x32 for MSM6290 - * Aquila Rev 0.7 : 4G2G1G x16 for Infineon ES3.1 - * Aquila Rev 0.8 : 4G3G1G x16 for Infineon ES3.1 - */ - ldr r2, =0xE0200200 - ldr r4, [r2, #0x48] - bic r1, r4, #(0xFF << 2) /* PULLUP_DISABLE: 4 * 2-bit */ - str r1, [r2, #0x48] - /* For write completion */ - nop - nop - - ldr r3, [r2, #0x44] - and r1, r3, #(0xf << 1) - cmp r1, #(0x5 << 2) - moveq r9, #3 - cmp r1, #(0x6 << 2) - moveq r9, #1 - cmp r1, #(0x7 << 2) - moveq r9, #2 - cmp r1, #(0x1 << 1) - moveq r9, #3 - str r4, [r2, #0x48] /* Restore PULLUP configuration */ - - bl mem_ctrl_asm_init - - /* OneNAND Sync Read Support at S5PC110 only - * RM[15] : Sync Read - * BRWL[14:12] : 7 CLK - * BL[11:9] : Continuous - * VHF[3] : Very High Frequency Enable (Over 83MHz) - * HF[2] : High Frequency Enable (Over 66MHz) - */ - cmp r7, r8 - ldrne r1, =0xE00C - - ldrne r0, =0xB001E442 - strneh r1, [r0] - - ldrne r0, =0xB0600000 - strne r1, [r0, #0x100] @ ONENAND_IF_CTRL - - /* Wakeup support. Don't know if it's going to be used, untested. */ - ldreq r0, =S5PC100_RST_STAT - ldrne r0, =S5PC110_RST_STAT - ldr r1, [r0] - biceq r1, r1, #0xfffffff7 - moveq r2, #(1 << 3) - bicne r1, r1, #0xfffeffff - movne r2, #(1 << 16) - cmp r1, r2 - bne 1f -wakeup: -#ifdef DEBUG_PM_C110 - mov r0, r8 - ldr r1, =0x22222222 - str r1, [r0, #0x0] @S5PC100_GPIO_A0_OFFSET - ldr r1, =0x00002222 - str r1, [r0, #0x20] @S5PC100_GPIO_A1_OFFSET - - /* UART_SEL MP0_5[7] at S5PC110 */ - add r0, r8, #0x360 @S5PC110_GPIO_MP0_5_OFFSET - ldr r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - bic r1, r1, #(0xf << 28) @ 28 = 7 * 4-bit - orr r1, r1, #(0x1 << 28) @ Output - str r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - - ldr r1, [r0, #0x8] @S5PC1XX_GPIO_PULL_OFFSET - bic r1, r1, #(0x3 << 14) @ 14 = 7 * 2-bit - orr r1, r1, #(0x2 << 14) @ Pull-up enabled - str r1, [r0, #0x8] @S5PC1XX_GPIO_PULL_OFFSET - - ldr r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET - orr r1, r1, #(1 << 7) @ 7 = 7 * 1-bit - str r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET - - ldr r0, =0xE2900000 @ S5PC110_PA_UART - orr r0, r0, #0x800 - mov r1, #0x3 - str r1, [r0, #0x000] @ ULCON - ldr r1, =0x245 - str r1, [r0, #0x004] @ UCON - mov r1, #0x23 - str r1, [r0, #0x028] @ UBRDIV - mov r1, #0x3 - str r1, [r0, #0x02C] @ UDIVSLOT - - mov r2, #'W' - strb r2, [r0, #0x020] @ UTXH -1001: - ldrb r3, [r0, #0x010] @ UTRSTAT - tst r3, #(1 << 2) - beq 1001b -#endif - - /* turn off L2 cache */ - bl l2_cache_disable - - cmp r7, r8 - ldreq r0, =0xC100 - ldrne r0, =0xC110 - - /* invalidate L2 cache also */ - bl invalidate_dcache - - /* turn on L2 cache */ - bl l2_cache_enable - - cmp r7, r8 - /* Load return address and jump to kernel */ - ldreq r0, =S5PC100_INFORM0 - ldrne r0, =S5PC110_INFORM0 - - /* r1 = physical address of s5pc1xx_cpu_resume function */ - ldr r1, [r0] - - /* Jump to kernel (sleep-s5pc1xx.S) */ - mov pc, r1 - nop - nop -#else - cmp r7, r8 - /* Clear wakeup status register */ - ldreq r0, =S5PC100_WAKEUP_STAT - ldrne r0, =S5PC110_WAKEUP_STAT - ldr r1, [r0] - str r1, [r0] -#endif -1: - mov lr, r11 - mov pc, lr - -/* - * system_clock_init: Initialize core clock and bus clock. - * void system_clock_init(void) - */ -system_clock_init: - ldr r0, =S5PC1XX_CLOCK_BASE @ 0xE0100000 - - /* Check S5PC100 */ - cmp r7, r8 - bne 110f -100: -#ifndef DEBUG_PM_C110 - /* Set Lock Time */ - ldr r1, =0xe10 @ Locktime : 0xe10 = 3600 - str r1, [r0, #0x000] @ S5PC100_APLL_LOCK - str r1, [r0, #0x004] @ S5PC100_MPLL_LOCK - str r1, [r0, #0x008] @ S5PC100_EPLL_LOCK - str r1, [r0, #0x00C] @ S5PC100_HPLL_LOCK - - /* S5P_APLL_CON */ -#ifdef CONFIG_CLK_667_166_83 - ldr r1, =0x81bc0400 @ SDIV 0, PDIV 4, MDIV 444 (1333MHz) -#elif defined(CONFIG_CLK_666_166_66) - ldr r1, =0x814d0301 @ SDIV 1, PDIV 3, MDIV 333 (1333MHz) -#elif defined(CONFIG_CLK_600_150_75) - ldr r1, =0x812C0300 @ SDIV 0, PDIV 3, MDIV 300 (1200MHz) -#elif defined(CONFIG_CLK_533_133_66) - ldr r1, =0x810b0300 @ SDIV 0, PDIV 3, MDIV 267 (1066MHz) -#elif defined(CONFIG_CLK_500_166_66) - ldr r1, =0x81f40301 @ SDIV 1, PDIV 3, MDIV 500 (1000MHz) -#elif defined(CONFIG_CLK_467_117_59) - ldr r1, =0x826E0401 @ SDIV 1, PDIV 4, MDIV 622 (933MHz) -#elif defined(CONFIG_CLK_400_100_50) - ldr r1, =0x81900301 @ SDIV 1, PDIV 3, MDIV 400 (800MHz) -#else -#error you should set the correct clock configuration -#endif - str r1, [r0, #0x100] - /* S5P_MPLL_CON */ - ldr r1, =0x80590201 @ SDIV 1, PDIV 2, MDIV 89 (267MHz) - str r1, [r0, #0x104] - /* S5P_EPLL_CON */ - ldr r1, =0x80870303 @ SDIV 3, PDIV 3, MDIV 135 (67.5MHz) - str r1, [r0, #0x108] - /* S5P_HPLL_CON */ - ldr r1, =0x80600603 @ SDIV 3, PDIV 6, MDIV 96 - str r1, [r0, #0x10C] - - ldr r1, [r0, #0x300] - ldr r2, =0x00003fff - bic r1, r1, r2 -#ifdef CONFIG_CLK_800_166_66 - ldr r2, =0x00011401 -#elif defined(CONFIG_CLK_500_166_66) - ldr r2, =0x00011201 -#elif defined(CONFIG_CLK_666_166_66) - ldr r2, =0x00011300 -#else - ldr r2, =0x00011301 -#endif - orr r1, r1, r2 - str r1, [r0, #0x300] - ldr r1, [r0, #0x304] - ldr r2, =0x00011110 - orr r1, r1, r2 - str r1, [r0, #0x304] - ldr r1, =0x00000001 - str r1, [r0, #0x308] - - /* Set Source Clock */ - ldr r1, =0x00001111 @ A, M, E, HPLL Muxing - str r1, [r0, #0x200] @ S5PC1XX_CLK_SRC0 -#endif - b 200f -110: - /* Set Clock divider */ - ldr r1, =0x14131330 @ 1:1:4:4, 1:4:5 - str r1, [r0, #0x300] - ldr r1, =0x11110111 @ UART[3210]: MMC[3210] - str r1, [r0, #0x310] - - /* Set Lock Time */ - ldr r1, =0xe10 @ Locktime : 0xe10 = 3600 - str r1, [r0, #0x000] @ S5PC110_APLL_LOCK - str r1, [r0, #0x008] @ S5PC110_MPLL_LOCK - str r1, [r0, #0x010] @ S5PC110_EPLL_LOCK - str r1, [r0, #0x020] @ S5PC110_VPLL_LOCK - - /* S5PC110_APLL_CON */ - ldr r1, =0x80C80601 @ 800MHz - str r1, [r0, #0x100] - /* S5PC110_MPLL_CON */ - ldr r1, =0x829B0C01 @ 667MHz - str r1, [r0, #0x108] - /* S5PC110_EPLL_CON */ - ldr r1, =0x80600602 @ 96MHz VSEL 0 P 6 M 96 S 2 - str r1, [r0, #0x110] - /* S5PC110_VPLL_CON */ - ldr r1, =0x806C0603 @ 54MHz - str r1, [r0, #0x120] - - /* Set Source Clock */ - ldr r1, =0x10001111 @ A, M, E, VPLL Muxing - str r1, [r0, #0x200] @ S5PC1XX_CLK_SRC0 - - /* OneDRAM(DMC0) clock setting */ - ldr r1, =0x01000000 @ ONEDRAM_SEL[25:24] 1 SCLKMPLL - str r1, [r0, #0x218] @ S5PC110_CLK_SRC6 - ldr r1, =0x30000000 @ ONEDRAM_RATIO[31:28] 3 + 1 - str r1, [r0, #0x318] @ S5PC110_CLK_DIV6 - - /* XCLKOUT = XUSBXTI 24MHz */ - add r2, r0, #0xE000 @ S5PC110_OTHERS - ldr r1, [r2] - orr r1, r1, #(0x3 << 8) @ CLKOUT[9:8] 3 XUSBXTI - str r1, [r2] - - /* CLK_IP0 */ - ldr r1, =0x8fefeeb @ DMC[1:0] PDMA0[3] IMEM[5] - str r1, [r0, #0x460] @ S5PC110_CLK_IP0 - - /* CLK_IP1 */ - ldr r1, =0xe9fdf0f9 @ FIMD[0] USBOTG[16] - @ NANDXL[24] - str r1, [r0, #0x464] @ S5PC110_CLK_IP1 - - /* CLK_IP2 */ - ldr r1, =0xf75f7fc @ CORESIGHT[8] MODEM[9] - @ HOSTIF[10] HSMMC0[16] - @ HSMMC2[18] VIC[27:24] - str r1, [r0, #0x468] @ S5PC110_CLK_IP2 - - /* CLK_IP3 */ - ldr r1, =0x8edf038c @ I2C[8:6] - @ SYSTIMER[16] UART0[17] - @ UART1[18] UART2[19] - @ UART3[20] WDT[22] - @ PWM[23] GPIO[26] SYSCON[27] - str r1, [r0, #0x46c] @ S5PC110_CLK_IP3 - - /* CLK_IP4 */ - ldr r1, =0xfffffff1 @ CHIP_ID[0] TZPC[8:5] - str r1, [r0, #0x470] @ S5PC110_CLK_IP3 - -200: - /* wait at least 200us to stablize all clock */ - mov r2, #0x10000 -1: subs r2, r2, #1 - bne 1b - - mov pc, lr - -#ifndef CONFIG_ONENAND_IPL -internal_ram_init: - ldreq r0, =0xE3800000 - ldrne r0, =0xF1500000 - ldr r1, =0x0 - str r1, [r0] - - mov pc, lr -#endif - -#ifndef CONFIG_ONENAND_IPL -/* - * uart_asm_init: Initialize UART's pins - */ -uart_asm_init: - /* set GPIO to enable UART0-UART4 */ - mov r0, r8 - ldr r1, =0x22222222 - str r1, [r0, #0x0] @S5PC100_GPIO_A0_OFFSET - ldr r1, =0x00002222 - str r1, [r0, #0x20] @S5PC100_GPIO_A1_OFFSET - - /* Check S5PC100 */ - cmp r7, r8 - bne 110f - -#ifndef DEBUG_PM_C110 - /* UART_SEL GPK0[5] at S5PC100 */ - add r0, r8, #0x2A0 @S5PC100_GPIO_K0_OFFSET - ldr r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - bic r1, r1, #(0xf << 20) @ 20 = 5 * 4-bit - orr r1, r1, #(0x1 << 20) @ Output - str r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - - ldr r1, [r0, #0x8] @S5PC1XX_GPIO_PULL_OFFSET - bic r1, r1, #(0x3 << 10) @ 10 = 5 * 2-bit - orr r1, r1, #(0x2 << 10) @ Pull-up enabled - str r1, [r0, #0x8] @S5PC1XX_GPIO_PULL_OFFSET - - ldr r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET - orr r1, r1, #(1 << 5) @ 5 = 5 * 1-bit - str r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET -#endif - b 200f -110: - /* - * Note that the following address - * 0xE020'0360 is reserved address at S5PC100 - */ - /* UART_SEL MP0_5[7] at S5PC110 */ - add r0, r8, #0x360 @S5PC110_GPIO_MP0_5_OFFSET - ldr r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - bic r1, r1, #(0xf << 28) @ 28 = 7 * 4-bit - orr r1, r1, #(0x1 << 28) @ Output - str r1, [r0, #0x0] @S5PC1XX_GPIO_CON_OFFSET - - ldr r1, [r0, #0x8] @S5PC1XX_GPIO_PULL_OFFSET - bic r1, r1, #(0x3 << 14) @ 14 = 7 * 2-bit - orr r1, r1, #(0x2 << 14) @ Pull-up enabled - str r1, [r0, #0x8] @S5PC1XX_GPIO_PULL_OFFSET - - ldr r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET - orr r1, r1, #(1 << 7) @ 7 = 7 * 1-bit - str r1, [r0, #0x4] @S5PC1XX_GPIO_DAT_OFFSET -200: - mov pc, lr -#endif diff --git a/board/samsung/p1p2/mem_setup.S b/board/samsung/p1p2/mem_setup.S deleted file mode 100644 index 8fa61df..0000000 --- a/board/samsung/p1p2/mem_setup.S +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (C) 2009 Samsung Electrnoics - * Minkyu Kang - * Kyungmin Park - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include - -#define NEW_MEMORY_TIMING -#undef NEW_MEMORY_TIMING - - .globl mem_ctrl_asm_init -mem_ctrl_asm_init: - cmp r7, r8 - -#ifdef NEW_MEMORY_TIMING - /* CLOCK_POWER_BASE */ - ldrne r0, =0xE0100000 - orrne r0, r0, #0x6200 - orrne r0, r0, #0x0008 - ldrne r1, =0x00000000 @ 0 : SCLK_ONEDRAM, 1 : HCLK200 - strne r1, [r0] - - /* ASYNC_MSYS_DMC0_BASE */ - ldrne r0, =0xF1E00000 - ldrne r1, =0x0 - strne r1, [r0, #0x0] - ldrne r1, =0x0 - str r1, [r0, #0xC] -#endif - - ldreq r0, =S5PC100_DMC_BASE @ 0xE6000000 - ldrne r0, =S5PC110_DMC0_BASE @ 0xF0000000 - ldrne r6, =S5PC110_DMC1_BASE @ 0xF1400000 - - /* DLL parameter setting */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x003B3B00 -#else - ldr r1, =0x50101000 -#endif - str r1, [r0, #0x018] @ PHYCONTROL0_OFFSET - strne r1, [r6, #0x018] @ PHYCONTROL0_OFFSET -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x00000004 -#else - ldr r1, =0x000000f4 -#endif - str r1, [r0, #0x01C] @ PHYCONTROL1_OFFSET - strne r1, [r6, #0x01C] @ PHYCONTROL1_OFFSET - ldreq r1, =0x0 - streq r1, [r0, #0x020] @ PHYCONTROL2_OFFSET - - /* DLL on */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x003B3B02 -#else - ldr r1, =0x50101002 -#endif - str r1, [r0, #0x018] @ PHYCONTROL0_OFFSET - strne r1, [r6, #0x018] @ PHYCONTROL0_OFFSET - - /* DLL start */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x003B3B03 -#else - ldr r1, =0x50101003 -#endif - str r1, [r0, #0x018] @ PHYCONTROL0_OFFSET - strne r1, [r6, #0x018] @ PHYCONTROL0_OFFSET - - mov r2, #0x4000 -wait: subs r2, r2, #0x1 - cmp r2, #0x0 - bne wait - - cmp r7, r8 - /* Force value locking for DLL off */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x6A3B3B01 -#endif - str r1, [r0, #0x018] @ PHYCONTROL0_OFFSET - strne r1, [r6, #0x018] @ PHYCONTROL0_OFFSET - -#ifndef NEW_MEMORY_TIMING - /* DLL off */ - ldr r1, =0x50101009 - str r1, [r0, #0x018] @ PHYCONTROL0_OFFSET - strne r1, [r6, #0x018] @ PHYCONTROL0_OFFSET -#endif - - /* auto refresh off */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x0FFF1010 - ldr r2, =0x0FFF10B0 -#else - ldr r1, =0xff001010 | (1 << 7) - ldr r2, =0xff001010 | (1 << 7) -#endif - str r1, [r0, #0x000] @ CONCONTROL_OFFSET - strne r2, [r6, #0x000] @ CONCONTROL_OFFSET - - /* - * Burst Length 4, 2 chips, 32-bit, LPDDR - * OFF: dynamic self refresh, force precharge, dynamic power down off - */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x00202100 - ldr r2, =0x00212100 -#else - ldr r1, =0x00212100 - ldr r2, =0x00212100 -#endif - str r1, [r0, #0x004] @ MEMCONTROL_OFFSET - strne r2, [r6, #0x004] @ MEMCONTROL_OFFSET - - /* - * Note: - * If Bank0 has Mobile RAM we place it at 0x3800'0000 (s5pc100 only) - * So finally Bank1 OneDRAM should address start at at 0x3000'0000 - */ - - /* - * DMC0: CS0 : S5PC100/S5PC110 - * 0x30 -> 0x30000000 - * 0xf8 -> 0x37FFFFFF - * [15:12] 0: Linear - * [11:8 ] 2: 9 bits - * [ 7:4 ] 2: 14 bits - * [ 3:0 ] 2: 4 banks - */ - ldr r3, =0x30f80222 -swap_memory: - str r3, [r0, #0x008] @ MEMCONFIG0_OFFSET - - /* - * DMC1: CS0 : S5PC110 - * 0x40 -> 0x40000000 - * 0xf8 -> 0x47FFFFFF (1Gib) - * 0x40 -> 0x40000000 - * 0xf0 -> 0x4FFFFFFF (2Gib) - * [15:12] 0: Linear - * [11:8 ] 2: 9 bits - Col (1Gib) - * [11:8 ] 3: 10 bits - Col (2Gib) - * [ 7:4 ] 2: 14 bits - Row - * [ 3:0 ] 2: 4 banks - */ - /* Default : 2GiB */ - ldr r4, =0x40f00322 @ 2Gib - ldr r5, =0x50f80222 - cmp r9, #1 - ldreq r4, =0x40f80222 @ 1Gib - cmp r9, #3 - ldreq r5, =0x50f80222 @ 2Gib + 1Gib - cmp r9, #4 - ldreq r5, =0x50f00322 @ 2Gib + 2Gib - - cmp r7, r8 - strne r4, [r6, #0x008] @ MEMCONFIG0_OFFSET - strne r5, [r6, #0x00C] @ MEMCONFIG1_OFFSET - - /* - * DMC0: CS1: S5PC100 - * 0x38 -> 0x38000000 - * 0xf8 -> 0x3fFFFFFF - * [15:12] 0: Linear - * [11:8 ] 2: 9 bits - * [ 7:4 ] 2: 14 bits - * [ 3:0 ] 2: 4 banks - */ - eoreq r3, r3, #0x08000000 - streq r3, [r0, #0xc] @ MEMCONFIG1_OFFSET - -#ifdef NEW_MEMORY_TIMING - ldr r1, =0xFF000000 -#else - ldr r1, =0x20000000 -#endif - str r1, [r0, #0x014] @ PRECHCONFIG_OFFSET - strne r1, [r0, #0x014] @ PRECHCONFIG_OFFSET - strne r1, [r6, #0x014] @ PRECHCONFIG_OFFSET - - /* - * S5PC100: - * DMC: CS0: 166MHz - * CS1: 166MHz - * S5PC110: - * DMC0: CS0: 166MHz - * DMC1: CS0: 200MHz - * - * 7.8us * 200MHz %LE %LONG1560(0x618) - * 7.8us * 166MHz %LE %LONG1294(0x50E) - * 7.8us * 133MHz %LE %LONG1038(0x40E), - * 7.8us * 100MHz %LE %LONG780(0x30C), - */ - ldr r1, =0x0000050E - str r1, [r0, #0x030] @ TIMINGAREF_OFFSET - ldrne r1, =0x00000618 - strne r1, [r6, #0x030] @ TIMINGAREF_OFFSET - -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x14233287 -#else - ldr r1, =0x0c233287 -#endif - str r1, [r0, #0x034] @ TIMINGROW_OFFSET - ldrne r1, =0x11344309 - strne r1, [r6, #0x034] @ TIMINGROW_OFFSET - -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x12130005 -#else - ldr r1, =0x32330303 -#endif - str r1, [r0, #0x038] @ TIMINGDATA_OFFSET - ldrne r1, =0x12130005 - strne r1, [r6, #0x038] @ TIMINGDATA_OFFSET - - /* tfaw=4 sxsr=0x14 txp=0x14 tcke=3 tmrd=3 */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x0E140222 -#else - ldr r1, =0x04141433 -#endif - str r1, [r0, #0x03C] @ TIMINGPOWER_OFFSET - ldrne r1, =0x0E190222 - strne r1, [r6, #0x03C] @ TIMINGPOWER_OFFSET - - /* chip0 Deselect */ - ldr r1, =0x07000000 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* chip0 PALL */ - ldr r1, =0x01000000 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* chip0 REFA */ - ldr r1, =0x05000000 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - /* chip0 REFA */ - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* chip0 MRS, CL%LE %LONG3, BL%LE %LONG4 */ - ldr r1, =0x00000032 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* chip1 Deselect */ - ldr r1, =0x07100000 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* chip1 PALL */ - ldr r1, =0x01100000 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* chip1 REFA */ - ldr r1, =0x05100000 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - /* chip1 REFA */ - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* chip1 MRS, CL%LE %LONG3, BL%LE %LONG4 */ - ldr r1, =0x00100032 - str r1, [r0, #0x010] @ DIRECTCMD_OFFSET - strne r1, [r6, #0x010] @ DIRECTCMD_OFFSET - - /* auto refresh on */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0x0FFF10B0 -#else - ldr r1, =0xFF002030 | (1 << 7) -#endif - str r1, [r0, #0x000] @ CONCONTROL_OFFSET - strne r1, [r6, #0x000] @ CONCONTROL_OFFSET - - /* PwrdnConfig */ -#ifdef NEW_MEMORY_TIMING - ldr r1, =0xFFFF00FF -#else - ldr r1, =0x00100002 -#endif - str r1, [r0, #0x028] @ PWRDNCONFIG_OFFSET - strne r1, [r6, #0x028] @ PWRDNCONFIG_OFFSET - -#ifdef NEW_MEMORY_TIMING - /* DMC0: 1 chip, DMC1: 2 chips */ - ldr r1, =0x00202113 - ldr r2, =0x00212113 -#else - ldr r1, =0xff212100 -#endif - str r1, [r0, #0x004] @ MEMCONTROL_OFFSET - strne r2, [r6, #0x004] @ MEMCONTROL_OFFSET - - /* Skip when S5PC110 */ - bne 1f - - /* Check OneDRAM access area at s5pc100 */ - ldreq r3, =0x38f80222 - ldreq r1, =0x37ffff00 - str r3, [r1] - ldr r2, [r1] - cmp r2, r3 - beq swap_memory -1: - mov pc, lr - - .ltorg diff --git a/board/samsung/p1p2/modem_boot.c b/board/samsung/p1p2/modem_boot.c deleted file mode 100644 index 3ee35c1..0000000 --- a/board/samsung/p1p2/modem_boot.c +++ /dev/null @@ -1,397 +0,0 @@ -/* - * need copyright - */ - -#include -#include -#include -#include -#include -#include "psi_ram.h" - -#define OneDRAM_B_BANK_BASEADDR 0x35000000 - -#define MODEM_OS_BASEADDR OneDRAM_B_BANK_BASEADDR -#define MODEM_EEP_STATIC_BASEADDR (MODEM_OS_BASEADDR + 0x870000) -#define MODEM_EEP_CAL_BAK_BASEADDR (MODEM_OS_BASEADDR + 0x880000) -#define MODEM_EEP_DYNAMIC_BASEADDR (MODEM_OS_BASEADDR + 0x890000) -#define MODEM_EEP_SECURITY_BASEADDR (MODEM_OS_BASEADDR + 0x8A0000) - -#define OneDRAMREG_BASEADDR (OneDRAM_B_BANK_BASEADDR + 0xFFF800) - -#define rOneDRAM_SEMAPHORE (*(volatile int*)(OneDRAMREG_BASEADDR)) -#define rOneDRAM_MAILBOX_AB (*(volatile int*)(OneDRAMREG_BASEADDR + 0x20)) -#define rOneDRAM_MAILBOX_BA (*(volatile int*)(OneDRAMREG_BASEADDR + 0x40)) - -/* primitive IPC on OneDRAM */ -#define IPC_CP_READY_FOR_LOADING 0x12341234 -#define IPC_CP_IMG_LOADED 0x45674567 -#define IPC_CP_READY 0x23 -#define IPC_BOOT_DONE 0x89EF89EF - -#define CP_BOOT_MODE_NORMAL 0x0a -#define CP_BOOT_MODE_PTEST 0x0b - -#define CP_HAS_SEM 0x0 -#define AP_HAS_SEM 0x1 - -#define RETRY 3 - -#define IND 0x30 -#define VERS 0xf0 -#define CRC_OK 0x01 -#define CRC_ERR 0xff - -extern struct serial_device s5pc1xx_serial3_device; -static struct s5pc110_gpio *gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE; - -int uart_serial_pollc(struct serial_device *uart, int retry) -{ - int i = 0; - - for (i = 0; i < retry; i++) { - if (uart->tstc()) - return uart->getc(); - udelay(1000); - } - - return -1; -} - -enum { - MACH_UNIVERSAL, - MACH_TICKERTAPE, - MACH_AQUILA, -}; - -DECLARE_GLOBAL_DATA_PTR; - -static int get_machine_id(void) -{ - if (cpu_is_s5pc100()) - return -1; - - return gd->bd->bi_arch_number - 3100; -} - -static int machine_is_aquila(void) -{ - return get_machine_id() == MACH_AQUILA; -} - -static int machine_is_tickertape(void) -{ - return get_machine_id() == MACH_TICKERTAPE; -} - -static int aquila_infineon_modem_on(void) -{ - unsigned int dat, exit = 0; - unsigned int nInfoSize; - unsigned char *pDataPSI; - int nCnt; - int nCoreVer, nSizePSI, nCRC; - int ack; - int i, tmp; - - /* Infineon modem */ - /* 1. Modem gpio init */ - /* Phone_on */ - gpio_direction_output(&gpio->gpio_j1, 0, 1); - gpio_set_pull(&gpio->gpio_j1, 0, GPIO_PULL_NONE); - - /* CP_Reset */ - gpio_direction_output(&gpio->gpio_h3, 7, 1); - gpio_set_pull(&gpio->gpio_h3, 7, GPIO_PULL_NONE); - - /* nINT_ONEDRAN_AP */ - gpio_direction_output(&gpio->gpio_h1, 3, 1); - gpio_set_pull(&gpio->gpio_h1, 3, GPIO_PULL_NONE); - - /* 2. Uart3 init */ - gpio_cfg_pin(&gpio->gpio_a1, 2, 0x2); - gpio_cfg_pin(&gpio->gpio_a1, 3, 0x2); - gpio_set_pull(&gpio->gpio_a1, 2, GPIO_PULL_NONE); - gpio_set_pull(&gpio->gpio_a1, 3, GPIO_PULL_NONE); - - /* reset and enable FIFOs, set triggers to the maximum */ - writel(0x0, 0xE2900C08); - writel(0x0, 0xE2900C0C); - /* 8N1 */ - writel(0x3, 0xE2900C00); - /* No interrupts, no DMA, pure polling */ - writel(0x245, 0xE2900C04); - s5pc1xx_serial3_device.setbrg(); - - /* 3. Modem reset */ - while (1) { - /* PHONE_ON -> low */ - gpio_set_value(&gpio->gpio_j1, 0, 0); - - /* CP_RESET -> low */ - gpio_set_value(&gpio->gpio_h3, 7, 0); - - udelay(200*1000); /* 200ms */ - - /* CP_RESET -> high */ - gpio_set_value(&gpio->gpio_h3, 7, 1); - - /* PHONE_ON -> high */ - gpio_set_value(&gpio->gpio_j1, 0, 1); - - udelay(27*1000); /* > 26.6ms */ - - udelay(40*1000); /* Power stabilization */ - - if (++exit > RETRY) - break; - - printf("********************************\n"); - printf(" Reset and try to send PSI : #%d\n", exit); - - /* Drain Rx Serial */ - tmp = 0; - while (tmp != -1) - tmp = uart_serial_pollc(&s5pc1xx_serial3_device, 5); - - /* Sending "AT" in ASCII */ - for (nCnt = 0; nCnt < 20; nCnt++) { - s5pc1xx_serial3_device.puts("AT"); - nCoreVer = - uart_serial_pollc(&s5pc1xx_serial3_device, 5); - - if (nCoreVer == VERS) - break; - - /* - * Send "AT" at 50ms internals till the bootcore - * version is received - */ - udelay(50*1000); /* 50mec */ - } - - /* if fail to receive Modem core version restart all process */ - if (nCnt == 20) - continue; - - nInfoSize = uart_serial_pollc(&s5pc1xx_serial3_device, 5); - printf("Got Bootcore version and related info!!!\n" - " - nCoreVer = 0x%x \n - nInfoSize = 0x%x\n", - nCoreVer, nInfoSize); - - /* Drain Rx Serial */ - tmp = 0; - while (tmp != -1) - tmp = uart_serial_pollc(&s5pc1xx_serial3_device, 5); - - /* INDICATION BYTE */ - s5pc1xx_serial3_device.putc(IND); - - /* 16 bit length in little endian format */ - nSizePSI = sizeof(g_tblBin); - s5pc1xx_serial3_device.putc(nSizePSI & 0xff); - s5pc1xx_serial3_device.putc(nSizePSI >> 8); - - printf("Sending PSI data!!!\n - Len = %d\n", nSizePSI); - - /* Data bytes of PSI */ - pDataPSI = g_tblBin; - nCRC = 0; - for (nCnt = 0; nCnt < nSizePSI ; nCnt++) { - s5pc1xx_serial3_device.putc(*pDataPSI); - nCRC ^= *pDataPSI++; - } - - /* CRC of PSI */ - s5pc1xx_serial3_device.putc(nCRC); - - udelay(10*1000); /* 10mec */ - - /* Getting ACK */ - ack = uart_serial_pollc(&s5pc1xx_serial3_device, 5); - - if (ack == CRC_OK) { - printf("PSI sending was sucessful\n"); - } else { - printf("PSI sending was NOT sucessful\n" - " - ack(0x%x)\n - nCRC(0x%x)\n", ack, nCRC); - continue; - } - - /* check Modem reaction */ - while (gpio_get_value(&gpio->gpio_h1, 3)) - ; - - if (rOneDRAM_MAILBOX_AB != IPC_CP_READY_FOR_LOADING) { - printf("OneDRAM is NOT initialized for Modem\n"); - printf("Modem downloading is failed!!!\n"); - return 1; - } - - printf("Modem is ready for loading\n"); - - /* - * Do not support full-booting sequence, - * Full support will be done by Kernel - */ - return 0; - - printf("OneDRAM is mailbox(expecting 0x21), " - "rOneDRAM_MAILBOX_AB=%x\n", - rOneDRAM_MAILBOX_AB); - while (rOneDRAM_SEMAPHORE == CP_HAS_SEM) { - printf("OneDRAM semaphore is NOT available"); - udelay(100*1000); - } - - /* load cp image */ - printf("Now, load CP image and static EEP at B-bank of OneDRAM\n"); - printf("By pausing and load .fls[0x51000000] and .eep[0x51870000]\n"); - printf("images to memory through EJTAG\n"); - - for (i = 0; i < 60; i++) { - udelay(100 * 1000); - printf("*"); - } - printf("\n"); - -/* - break; - LoadCPImage(); -*/ - - printf("Thank you for loading\n"); - - rOneDRAM_SEMAPHORE = CP_HAS_SEM; - rOneDRAM_MAILBOX_BA = IPC_CP_IMG_LOADED; - - /* check Modem reaction */ - while (gpio_get_value(&gpio->gpio_h1, 3)) - ; - - if (rOneDRAM_MAILBOX_AB != IPC_CP_READY) { - printf("Modem is NOT ready to boot\n"); - printf("Modem booting is failed!!!\n"); - return 1; - } - - printf("Modem is done copying CP images\n"); - printf("OneDRAM is mailbox message(expecting 0x23), " - "rOneDRAM_MAILBOX_AB=%x\n", - rOneDRAM_MAILBOX_AB); - while (rOneDRAM_SEMAPHORE == CP_HAS_SEM) { - printf("OneDRAM semaphore is NOT available"); - udelay(100*1000); - } - - rOneDRAM_SEMAPHORE = CP_HAS_SEM; - - rOneDRAM_MAILBOX_BA = IPC_BOOT_DONE; - printf("Modem is now running\n"); - - for (i = 0; i < 50; i++) { - udelay(100 * 1000); - if (rOneDRAM_SEMAPHORE == AP_HAS_SEM) - printf("S"); - else - printf("*"); - } - printf("\n"); - - rOneDRAM_MAILBOX_BA = 0x05; /* FIXME */ - - for (i = 0; i < 50; i++) { - udelay(100*1000); - if (rOneDRAM_SEMAPHORE == AP_HAS_SEM) - printf("S"); - else - printf("*"); - } - printf("\n"); - printf("Waiting for 5 secs for modem to respond\n"); - - for (i = 0; i < 50000; i++) { - dat = gpio_get_value(&gpio->gpio_h1, 3); - if (dat == 0) - break; - udelay(100); - } - - if (tmp == 1) - printf("No response from Modem!!!\n"); - - break; - } - - return 0; -} - -static void mdelay(int msec) -{ - int i; - for (i = 0; i < msec; i++) - udelay(1000); -} - -static void tickertape_modem_on(void) -{ - int gpio_phone_on, gpio_cp_rst; - - printf("Tickertape phone on\n"); - - gpio_phone_on = 0; - gpio_cp_rst = 7; - - gpio_direction_output(&gpio->gpio_j1, gpio_phone_on, 0); - gpio_direction_output(&gpio->gpio_h3, gpio_cp_rst, 0); - - gpio_set_value(&gpio->gpio_h3, gpio_cp_rst, 0); - gpio_set_value(&gpio->gpio_j1, gpio_phone_on, 1); - mdelay(100); - gpio_set_value(&gpio->gpio_h3, gpio_cp_rst, 1); - mdelay(900); - gpio_set_value(&gpio->gpio_j1, gpio_phone_on, 0); -} - -int do_modem(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ - char *cmd; - - cmd = argv[1]; - - switch (argc) { - case 0: - case 1: - goto usage; - - case 2: - if (strncmp(cmd, "on", 2) == 0) { - if (machine_is_aquila()) - aquila_infineon_modem_on(); - if (machine_is_tickertape()) - tickertape_modem_on(); - return 0; - } - break; - } - - return 0; -usage: - cmd_usage(cmdtp); - return 1; -} - -void LoadCPImage(void) -{ -#if 0 - /* load CP image */ - LoadPartition(PARTITION_ID_MODEM_OS , (UINT8 *)MODEM_OS_BASEADDR, 0); - /* load CP EEP data */ - LoadValidEEP(); -#endif -} - -U_BOOT_CMD(modem, CONFIG_SYS_MAXARGS, 1, do_modem, - "initialize the Modem", - "on" -); diff --git a/board/samsung/p1p2/onenand.c b/board/samsung/p1p2/onenand.c deleted file mode 100644 index 057bc6a..0000000 --- a/board/samsung/p1p2/onenand.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2008-2009 Samsung Electronics - * Kyungmin Park - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include - -#include - -#include -#include - -void onenand_board_init(struct mtd_info *mtd) -{ - struct onenand_chip *this = mtd->priv; - int value; - - if (cpu_is_s5pc110()) { - this->base = (void *) 0xB0000000; - this->options |= ONENAND_RUNTIME_BADBLOCK_CHECK; - } else { - struct s5pc100_clock *clk = - (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE; - struct samsung_onenand *onenand; - - this->base = (void *) S5PC100_ONENAND_BASE; - onenand = (struct samsung_onenand *)this->base; - - /* D0 Domain system 1 clock gating */ - value = readl(&clk->gate_d00); - value &= ~(1 << 2); /* CFCON */ - value |= (1 << 2); - writel(value, &clk->gate_d00); - - /* D0 Domain memory clock gating */ - value = readl(&clk->gate_d01); - value &= ~(1 << 2); /* CLK_ONENANDC */ - value |= (1 << 2); - writel(value, &clk->gate_d01); - - /* System Special clock gating */ - value = readl(&clk->gate_sclk0); - value &= ~(1 << 2); /* OneNAND */ - value |= (1 << 2); - writel(value, &clk->gate_sclk0); - - value = readl(&clk->src0); - value &= ~(1 << 24); /* MUX_1nand: 0 from HCLKD0 */ - value &= ~(1 << 20); /* MUX_HREF: 0 from FIN_27M */ - writel(value, &clk->src0); - - value = readl(&clk->div1); - value &= ~(3 << 16); - value |= (1 << 16); - writel(value, &clk->div1); - - writel(ONENAND_MEM_RESET_COLD, &onenand->mem_reset); - - while (!(readl(&onenand->int_err_stat) & RST_CMP)) - continue; - - writel(RST_CMP, &onenand->int_err_ack); - - /* - * Access_Clock [2:0] - * 166 MHz, 134 Mhz : 3 - * 100 Mhz, 60 Mhz : 2 - */ - writel(0x3, &onenand->acc_clock); - - writel(INT_ERR_ALL, &onenand->int_err_mask); - writel(1 << 0, &onenand->int_pin_en); /* Enable */ - - value = readl(&onenand->int_err_mask); - value &= ~RDY_ACT; - writel(value, &onenand->int_err_mask); - - s3c_onenand_init(mtd); - } -} diff --git a/board/samsung/p1p2/p1p2.c b/board/samsung/p1p2/p1p2.c deleted file mode 100644 index e498b03..0000000 --- a/board/samsung/p1p2/p1p2.c +++ /dev/null @@ -1,2408 +0,0 @@ -/* - * Copyright (C) 2009 Samsung Electronics - * Kyungmin Park - * Minkyu Kang - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -DECLARE_GLOBAL_DATA_PTR; - -#define C100_MACH_START 3000 -#define C110_MACH_START 3100 - -static unsigned int board_rev; -static unsigned int battery_soc; -static struct s5pc110_gpio *s5pc110_gpio; - -enum { - I2C_2, - I2C_GPIO3, - I2C_PMIC, - I2C_GPIO5, - I2C_GPIO6, - I2C_GPIO7, -}; - -/* - * i2c 2 - * SDA: GPD1[4] - * SCL: GPD1[5] - */ -static struct i2c_gpio_bus_data i2c_2 = { - .sda_pin = 4, - .scl_pin = 5, -}; - -/* - * i2c gpio3 - * SDA: GPJ3[6] - * SCL: GPJ3[7] - */ -static struct i2c_gpio_bus_data i2c_gpio3 = { - .sda_pin = 6, - .scl_pin = 7, -}; - -/* - * i2c pmic - * SDA: GPJ4[0] - * SCL: GPJ4[3] - */ -static struct i2c_gpio_bus_data i2c_pmic = { - .sda_pin = 0, - .scl_pin = 3, -}; - -/* - * i2c gpio5 - * SDA: MP05[3] - * SCL: MP05[2] - */ -static struct i2c_gpio_bus_data i2c_gpio5 = { - .sda_pin = 3, - .scl_pin = 2, -}; - -/* - * i2c gpio6 - * SDA: GPJ3[0] - * SCL: GPJ3[1] - */ -static struct i2c_gpio_bus_data i2c_gpio6 = { - .sda_pin = 0, - .scl_pin = 1, -}; - -/* - * i2c gpio6 - cypress - * SDA: GPJ3[4] - * SCL: GPJ3[5] - */ -static struct i2c_gpio_bus_data i2c_cypress_gpio6 = { - .sda_pin = 4, - .scl_pin = 5, -}; - -/* - * i2c gpio7 - cypress - * SDA: MP05[6] - * SCL: MP05[4] - */ -static struct i2c_gpio_bus_data i2c_cypress_gpio7 = { - .sda_pin = 6, - .scl_pin = 4, -}; - -static struct i2c_gpio_bus i2c_gpio[] = { - { - .bus = &i2c_2, - }, { - .bus = &i2c_gpio3, - }, { - .bus = &i2c_pmic, - }, { - .bus = &i2c_gpio5, - }, { - .bus = &i2c_gpio6, - }, { - .bus = NULL, - } -}; - -u32 get_board_rev(void) -{ - return board_rev; -} - -static int hwrevision(int rev) -{ - return (board_rev & 0xf) == rev; -} - -enum { - MACH_UNIVERSAL, - MACH_TICKERTAPE, - MACH_AQUILA, - MACH_P1P2, - MACH_GEMINUS, - MACH_CYPRESS, -}; -#ifdef CONFIG_LCD -typedef enum { - LCD_NONE, - LCD_AMOLED, - LCD_TFT, -} lcd_type_t; - -static lcd_type_t lcd_type; -#endif - -#define SPLIT_SCREEN_FEATURE 0x100 - -/* board is MACH_AQUILA and board is like below. */ -#define J1_B2_BOARD 0x200 -#define LIMO_UNIVERSAL_BOARD 0x400 -#define LIMO_REAL_BOARD 0x800 -#define MEDIA_BOARD 0x1000 -#define BAMBOO_BOARD 0x2000 -/* board is MACH_P1P2 and board is like below. */ -#define P1_REAL_BOARD 0x200 -#define P2_REAL_BOARD 0x400 - -#define BOARD_MASK 0xF00 - -static int c110_machine_id(void) -{ - return gd->bd->bi_arch_number - C110_MACH_START; -} - -static int machine_is_aquila(void) -{ - return c110_machine_id() == MACH_AQUILA; -} - -static int machine_is_p1p2(void) -{ - return c110_machine_id() == MACH_P1P2; -} - -static int machine_is_tickertape(void) -{ - return c110_machine_id() == MACH_TICKERTAPE; -} - -static int machine_is_geminus(void) -{ - return c110_machine_id() == MACH_GEMINUS; -} - -static int machine_is_cypress(void) -{ - return c110_machine_id() == MACH_CYPRESS; -} - -static int board_is_limo_universal(void) -{ - return machine_is_aquila() && (board_rev & LIMO_UNIVERSAL_BOARD); -} - -static int board_is_limo_real(void) -{ - return machine_is_aquila() && (board_rev & LIMO_REAL_BOARD); -} - -static int board_is_media(void) -{ - return machine_is_aquila() && (board_rev & MEDIA_BOARD); -} - -static int board_is_bamboo(void) -{ - return machine_is_aquila() && (board_rev & BAMBOO_BOARD); -} - -static int board_is_j1b2(void) -{ - return machine_is_aquila() && (board_rev & J1_B2_BOARD); -} - -static int board_is_p2_real(void) -{ - return machine_is_p1p2() && (board_rev & P2_REAL_BOARD); -} -#ifdef CONFIG_LCD -static int lcd_is_amoled(void) -{ - return lcd_type == LCD_AMOLED; -} - -static int lcd_is_tft(void) -{ - return lcd_type == LCD_TFT; -} -#endif -static void enable_battery(void); - -void i2c_init_board(void) -{ - struct s5pc110_gpio *gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE; - int num_bus; - - if (cpu_is_s5pc100()) - return; - - num_bus = ARRAY_SIZE(i2c_gpio); - - if (machine_is_cypress()) { - i2c_gpio[I2C_GPIO6].bus = &i2c_cypress_gpio6; - i2c_gpio[I2C_GPIO7].bus = &i2c_cypress_gpio7; - i2c_gpio[I2C_GPIO7].bus->gpio_base = - (unsigned int)&gpio->gpio_mp0_5; - } else { - num_bus--; - } - - i2c_gpio[I2C_2].bus->gpio_base = (unsigned int)&gpio->gpio_d1; - i2c_gpio[I2C_GPIO3].bus->gpio_base = (unsigned int)&gpio->gpio_j3; - i2c_gpio[I2C_PMIC].bus->gpio_base = (unsigned int)&gpio->gpio_j4; - i2c_gpio[I2C_GPIO5].bus->gpio_base = (unsigned int)&gpio->gpio_mp0_5; - i2c_gpio[I2C_GPIO6].bus->gpio_base = (unsigned int)&gpio->gpio_j3; - - i2c_gpio_init(i2c_gpio, num_bus, I2C_PMIC); - - /* Reset on max17040 early */ - if (battery_soc == 0) - enable_battery(); -} - -#ifdef CONFIG_MISC_INIT_R -#define DEV_INFO_LEN 512 -static char device_info[DEV_INFO_LEN]; -static int display_info; - -static void dprintf(const char *fmt, ...) -{ - va_list args; - uint i; - char buf[128]; - - va_start(args, fmt); - i = vsprintf(buf, fmt, args); - va_end(args); - - buf[127] = 0; - - if ((strlen(device_info) + strlen(buf)) > (DEV_INFO_LEN - 1)) { - puts("Flushing device info...\n"); - puts(device_info); - device_info[0] = 0; - } - strcat(device_info, buf); - puts(buf); -} - -#ifdef CONFIG_S5PC1XXFB -static void display_device_info(void) -{ - if (!display_info) - return; - - init_font(); - set_font_xy(0, 450); - set_font_color(FONT_WHITE); - fb_printf(device_info); - exit_font(); - - memset(device_info, 0x0, DEV_INFO_LEN); - - udelay(5 * 1000 * 1000); -} -#endif - -static const char *board_name[] = { - "Universal", - "TickerTape", - "Aquila", - "P1P2", - "Geminus", - "Cypress", -}; - -enum { - MEM_4G1G1G, - MEM_4G2G1G, - MEM_4G3G1G, - MEM_4G4G1G, -}; - -static char feature_buffer[32]; - -static char *display_features(int board, int board_rev) -{ - int count = 0; - char *buf = feature_buffer; - - if (board == MACH_AQUILA) { - if (board_rev & SPLIT_SCREEN_FEATURE) - count += sprintf(buf + count, " - SplitScreen"); - if (board_rev & J1_B2_BOARD) - count += sprintf(buf + count, " - J1 B2 board"); - /* Limo Real or Universal */ - if (board_rev & LIMO_REAL_BOARD) - count += sprintf(buf + count, " - Limo Real"); - else if (board_rev & LIMO_UNIVERSAL_BOARD) - count += sprintf(buf + count, " - Limo Universal"); - if (board_rev & MEDIA_BOARD) - count += sprintf(buf + count, " - Media"); - if (board_rev & BAMBOO_BOARD) - count += sprintf(buf + count, " - Bamboo"); - } else if (board == MACH_P1P2) { - /* P1P2 */ - if (board_rev & P1_REAL_BOARD) - count += sprintf(buf + count, " - P1 Real"); - else if (board_rev & P2_REAL_BOARD) - count += sprintf(buf + count, " - P2 Real"); - else - count += sprintf(buf + count, " - Universal"); - } - - return buf; -} - -static void check_board_revision(int board, int rev) -{ - switch (board) { - case MACH_AQUILA: - /* Limo Real or Universal */ - if (rev & LIMO_UNIVERSAL_BOARD) - board_rev &= ~J1_B2_BOARD; - if (rev & LIMO_REAL_BOARD) { - board_rev &= ~(J1_B2_BOARD | - LIMO_UNIVERSAL_BOARD); - } - if (rev & MEDIA_BOARD) - board_rev &= ~(J1_B2_BOARD | - LIMO_UNIVERSAL_BOARD); - if (rev & BAMBOO_BOARD) - board_rev &= ~(J1_B2_BOARD | - LIMO_UNIVERSAL_BOARD | - LIMO_REAL_BOARD | - MEDIA_BOARD); - break; - case MACH_P1P2: - break; - case MACH_CYPRESS: - /* There's no HWREV_MODE3 */ - board_rev &= ~(1 << 3); - /* Fall through */ - case MACH_TICKERTAPE: - case MACH_GEMINUS: - board_rev &= ~BOARD_MASK; - break; - default: - break; - } -} - -static unsigned int get_hw_revision(struct s5pc1xx_gpio_bank *bank) -{ - unsigned int rev; - - gpio_direction_input(bank, 1); - gpio_direction_input(bank, 2); - gpio_direction_input(bank, 3); - gpio_direction_input(bank, 4); - - gpio_set_pull(bank, 1, GPIO_PULL_NONE); /* HWREV_MODE3 */ - gpio_set_pull(bank, 2, GPIO_PULL_NONE); /* HWREV_MODE0 */ - gpio_set_pull(bank, 3, GPIO_PULL_NONE); /* HWREV_MODE1 */ - gpio_set_pull(bank, 4, GPIO_PULL_NONE); /* HWREV_MODE2 */ - - rev = gpio_get_value(bank, 2); - rev |= (gpio_get_value(bank, 3) << 1); - rev |= (gpio_get_value(bank, 4) << 2); - rev |= (gpio_get_value(bank, 1) << 3); - - return rev; -} - -static void check_hw_revision(void) -{ - unsigned int board = MACH_UNIVERSAL; /* Default is Universal */ - - if (cpu_is_s5pc100()) { - struct s5pc100_gpio *gpio = - (struct s5pc100_gpio *)S5PC100_GPIO_BASE; - - board_rev = get_hw_revision(&gpio->gpio_j0); - - /* C100 TickerTape */ - if (board_rev == 3) - board = MACH_TICKERTAPE; - } else { - struct s5pc110_gpio *gpio = - (struct s5pc110_gpio *)S5PC110_GPIO_BASE; - - board_rev = get_hw_revision(&gpio->gpio_j0); - - /* - * Note Check 'Aquila' board first - * - * TT: TickerTape - * SS: SplitScreen - * LRA: Limo Real Aquila - * LUA: Limo Universal Aquila - * OA: Old Aquila - * P1P2: Smart Book - * CYP: Cypress - * BB: Bamboo - * - * ADDR = 0xE0200000 + OFF - * - * OFF Universal BB LRA LUA OA TT SS P1P2 CYP - * J1: 0x0264 0x10 0x10 0x00 0x00 0x00 0x00 0x00 0x00 - * J2: 0x0284 0x01 0x10 0x00 - * H1: 0x0C24 W 0x28 0xA8 0x1C 0x18 0x0F - * H3: 0x0C64 0x03 0x07 0x0F 0xff - * D1: 0x00C4 0x0F 0x3F 0x3F 0x0F 0xXC 0x3F - * I: 0x0224 0x02 0x00 0x08 - * MP03: 0x0324 0x9x 0xbx 0x9x - * MP05: 0x0364 0x80 0x88 - */ - - /* C110 Aquila */ - if (gpio_get_value(&gpio->gpio_j1, 4) == 0) { - board = MACH_AQUILA; - board_rev |= J1_B2_BOARD; - - gpio_set_pull(&gpio->gpio_j2, 6, GPIO_PULL_NONE); - gpio_direction_input(&gpio->gpio_j2, 6); - - /* Check board */ - if (gpio_get_value(&gpio->gpio_h1, 2) == 0) - board_rev |= LIMO_UNIVERSAL_BOARD; - - if (gpio_get_value(&gpio->gpio_h3, 2) == 0) - board_rev |= LIMO_REAL_BOARD; - - if (gpio_get_value(&gpio->gpio_j2, 6) == 1) - board_rev |= MEDIA_BOARD; - - /* set gpio to default value. */ - gpio_set_pull(&gpio->gpio_j2, 6, GPIO_PULL_DOWN); - gpio_direction_output(&gpio->gpio_j2, 6, 0); - } - /* Workaround: C110 Aquila Rev0.6 */ - if (board_rev == 6) { - board = MACH_AQUILA; - board_rev |= LIMO_REAL_BOARD; - } - /* C110 Aquila Bamboo */ - if (gpio_get_value(&gpio->gpio_j2, 0) == 1) { - board = MACH_AQUILA; - board_rev |= BAMBOO_BOARD; - } - - /* C110 TickerTape */ - if (gpio_get_value(&gpio->gpio_d1, 0) == 0 && - gpio_get_value(&gpio->gpio_d1, 1) == 0) - board = MACH_TICKERTAPE; - - /* C110 Cypress: Do first this than P1P2 */ - gpio_set_pull(&gpio->gpio_j2, 2, GPIO_PULL_NONE); - gpio_direction_input(&gpio->gpio_j2, 2); - if (gpio_get_value(&gpio->gpio_j2, 2) == 1) - board = MACH_CYPRESS; - gpio_set_pull(&gpio->gpio_j2, 2, GPIO_PULL_DOWN); - - /* C110 P1P2 */ - if (gpio_get_value(&gpio->gpio_h3, 7) == 1) { - board = MACH_P1P2; - board_rev &= ~BOARD_MASK; - } - - /* set gpio configuration for P1P2. */ - gpio_direction_input(&gpio->gpio_j0, 6); - gpio_direction_input(&gpio->gpio_j0, 7); - - /* - * do not change order below - * because it needs delay to get gpio value. - */ - /* HWREV_MODE4 */ - gpio_set_pull(&gpio->gpio_j0, 7, GPIO_PULL_NONE); - /* HWREV_MODE5 */ - gpio_set_pull(&gpio->gpio_j0, 6, GPIO_PULL_NONE); - - if (gpio_get_value(&gpio->gpio_j0, 7) == 1) { - board = MACH_P1P2; - board_rev &= ~BOARD_MASK; - if (gpio_get_value(&gpio->gpio_j0, 6) == 1) { - board_rev |= P1_REAL_BOARD; - #ifdef CONFIG_LCD - lcd_type = LCD_TFT; - #endif - } - if (gpio_get_value(&gpio->gpio_j0, 6) == 0) - board_rev |= P2_REAL_BOARD; - } - #ifdef CONFIG_LCD - else { - if (gpio_get_value(&gpio->gpio_j0, 6) == 1) { - lcd_type = LCD_AMOLED; - } - } - #endif - - /* set gpio to default value. */ - /* HWREV_MODE4 */ - gpio_set_pull(&gpio->gpio_j0, 6, GPIO_PULL_DOWN); - /* HWREV_MODE5 */ - gpio_set_pull(&gpio->gpio_j0, 7, GPIO_PULL_DOWN); - - if(board != MACH_P1P2) - { - /* C110 Geminus for rev0.0 */ - gpio_set_pull(&gpio->gpio_j1, 2, GPIO_PULL_NONE); - gpio_direction_input(&gpio->gpio_j1, 2); - if (gpio_get_value(&gpio->gpio_j1, 2) == 1) { - board = MACH_GEMINUS; - if ((board_rev & ~BOARD_MASK) == 3) - board_rev &= ~0xff; - } - gpio_set_pull(&gpio->gpio_j1, 2, GPIO_PULL_DOWN); - gpio_direction_output(&gpio->gpio_j1, 2, 0); - - /* C110 Geminus for rev0.1 ~ */ - gpio_set_pull(&gpio->gpio_j0, 6, GPIO_PULL_NONE); - gpio_direction_input(&gpio->gpio_j0, 6); - if (gpio_get_value(&gpio->gpio_j0, 6) == 1) - board = MACH_GEMINUS; - gpio_set_pull(&gpio->gpio_j0, 6, GPIO_PULL_DOWN); - #ifdef CONFIG_LCD - lcd_type = LCD_NONE; /* TODO: if the board is not p1p2, this code should be modified */ - #endif - } - } - - /* Set machine id */ - if (cpu_is_s5pc110()) - gd->bd->bi_arch_number = C110_MACH_START + board; - else - gd->bd->bi_arch_number = C100_MACH_START + board; - - /* Architecture Common settings */ - if (cpu_is_s5pc110()) { - setenv("mtdparts", MTDPARTS_DEFAULT_4KB); - } else { - setenv("bootk", "onenand read 0x30007FC0 0x60000 0x300000; " - "bootm 0x30007FC0"); - setenv("updatek", "onenand erase 0x60000 0x300000; " - "onenand write 0x31008000 0x60000 0x300000"); - } -} - -static void show_hw_revision(void) -{ - int board; - - /* - * Workaround for Rev 0.3 + CP Ver ES 3.1 - * it's Rev 0.4 - */ - if (board_is_limo_real()) { - if (hwrevision(0)) { - /* default is Rev 0.4 */ - board_rev &= ~0xf; - board_rev |= 0x4; - } - } - - if (cpu_is_s5pc110()) - board = gd->bd->bi_arch_number - C110_MACH_START; - else - board = gd->bd->bi_arch_number - C100_MACH_START; - - check_board_revision(board, board_rev); - - /* Set CPU Revision */ - if (board_is_limo_real()) { - if ((board_rev & 0xf) < 8) - s5pc1xx_set_cpu_rev(0); - } else { - s5pc1xx_set_cpu_rev(0); - } - - dprintf("HW Revision:\t%x (%s%s)\n", board_rev, board_name[board], - display_features(board, board_rev)); -} - -static void check_auto_burn(void) -{ - unsigned long magic_base = CONFIG_SYS_SDRAM_BASE + 0x02000000; - unsigned int count = 0; - char buf[64]; - - if (readl(magic_base) == 0x426f6f74) { /* ASICC: Boot */ - printf("Auto burning bootloader\n"); - count += sprintf(buf + count, "run updateb; "); - } - if (readl(magic_base + 0x04) == 0x4b65726e) { /* ASICC: Kern */ - printf("Auto burning kernel\n"); - count += sprintf(buf + count, "run updatek; "); - } - - if (count) { - count += sprintf(buf + count, "reset"); - setenv("bootcmd", buf); - } - - /* Clear the magic value */ - writel(0xa5a55a5a, magic_base); - writel(0xa5a55a5a, magic_base + 0x4); -} - -static void pmic_pin_init(void) -{ - unsigned int reg, value; - - if (cpu_is_s5pc100()) - return; - - /* AP_PS_HOLD: XEINT_0: GPH0[0] - * Note: Don't use GPIO PS_HOLD it doesn't work - */ - reg = S5PC110_PS_HOLD_CONTROL; - value = readl(reg); - value |= S5PC110_PS_HOLD_DIR_OUTPUT | - S5PC110_PS_HOLD_DATA_HIGH | - S5PC110_PS_HOLD_OUT_EN; - writel(value, reg); - - /* nPOWER: XEINT_22: GPH2[6] interrupt mode */ - gpio_cfg_pin(&s5pc110_gpio->gpio_h2, 6, GPIO_IRQ); - gpio_set_pull(&s5pc110_gpio->gpio_h2, 6, GPIO_PULL_UP); -} - -static void enable_ldos(void) -{ - if (cpu_is_s5pc100()) - return; - - if (machine_is_p1p2()) - return; - - /* TOUCH_EN: XMMC3DATA_3: GPG3[6] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_g3, 6, 1); -} - -static void enable_t_flash(void) -{ - if (!(board_is_limo_universal() || board_is_limo_real())) - return; - - /* T_FLASH_EN : XM0ADDR_13: MP0_5[4] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_5, 4, 1); -} - -static void setup_limo_real_gpios(void) -{ - if (!board_is_limo_real()) - return; - - /* - * Note: Please write GPIO alphabet order - */ - /* CODEC_LDO_EN: XVVSYNC_LDI: GPF3[4] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_f3, 4, 1); - - if (hwrevision(0)) - /* RESET_REQ_N: XM0BEN_1: MP0_2[1] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_2, 1, 1); - else - /* RESET_REQ_N: XM0CSn_2: MP0_1[2] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_1, 2, 1); - - /* T_FLASH_DETECT: EINT28: GPH3[4] interrupt mode */ - gpio_cfg_pin(&s5pc110_gpio->gpio_h3, 4, GPIO_IRQ); - gpio_set_pull(&s5pc110_gpio->gpio_h3, 4, GPIO_PULL_UP); -} - -static void setup_media_gpios(void) -{ - if (!board_is_media()) - return; - - /* - * Note: Please write GPIO alphabet order - */ - /* RESET_REQ_N: XM0CSn_2: MP0_1[2] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_1, 2, 1); - - /* T_FLASH_DETECT: EINT28: GPH3[4] interrupt mode */ - gpio_cfg_pin(&s5pc110_gpio->gpio_h3, 4, GPIO_IRQ); - gpio_set_pull(&s5pc110_gpio->gpio_h3, 4, GPIO_PULL_UP); -} - -static void setup_p1p2_gpios(void) -{ - if (!machine_is_p1p2()) - return; - - /* - * Note: Please write GPIO alphabet order - */ - /* RESET_REQ_N: XM0FRnB[1]: MP0_3[5] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_3, 5, 1); - /* CODEC_LDO_EN: XM0FRnB[2]: MP0_3[6] output high */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_3, 6, 1); -} - -#define KBR3 (1 << 3) -#define KBR2 (1 << 2) -#define KBR1 (1 << 1) -#define KBR0 (1 << 0) - -static void check_p2_keypad(void) -{ - unsigned int auto_download = 0; - unsigned char addr = 0x34, val[2]; /* adp5587 key controller */ - int i, ret; - i2c_set_bus_num(I2C_2); - - if (i2c_probe(addr)) { - printf("Can't found adp5587 key controller\n"); - return; - } - /* Row 8, Column 10 */ - val[0] = 0xf; - ret = i2c_write(addr, 0x1D, 1, val, 1); /* Set KP_GPIO1 */ - val[0] = 0xf; - ret |= i2c_write(addr, 0x1E, 1, val, 1); /* Set KP_GPIO2 */ - val[0] = 0x3; - ret |= i2c_write(addr, 0x1F, 1, val, 1); /* Set KP_GPIO3 */ - val[0] = 0x3f; /* CMP2_INT | CMP1_INT | OVR_FLOW_INT | - K_LCK_INT | GPI_INT | KE_INT */ - ret |= i2c_write(addr, 0x02, 1, val, 1); /* Status is W1C */ - val[0] = 0x19; /* INT_CFG | OVR_FLOW_IEN | KE_IEN */ - ret |= i2c_write(addr, 0x01, 1, val, 1); - for (i = 0; i < 10; i++) { - udelay(1000); /* FIXME */ - i2c_read(addr, 0x04 + i, 1, val, 1); - if (val[0] == 0x94) - auto_download = 1; - } - - if (auto_download == 1) - setenv("bootcmd", "usbdown"); -} - -static void check_keypad(void) -{ - unsigned int reg, value; - unsigned int col_mask, row_mask; - unsigned int auto_download = 0; - unsigned int col_value[4], i; - - if (cpu_is_s5pc100()) { - struct s5pc100_gpio *gpio = - (struct s5pc100_gpio *)S5PC100_GPIO_BASE; - - /* Set GPH2[2:0] to KP_COL[2:0] */ - gpio_cfg_pin(&gpio->gpio_h2, 0, 0x3); - gpio_cfg_pin(&gpio->gpio_h2, 1, 0x3); - gpio_cfg_pin(&gpio->gpio_h2, 2, 0x3); - - /* Set GPH3[2:0] to KP_ROW[2:0] */ - gpio_cfg_pin(&gpio->gpio_h3, 0, 0x3); - gpio_cfg_pin(&gpio->gpio_h3, 1, 0x3); - gpio_cfg_pin(&gpio->gpio_h3, 2, 0x3); - - reg = S5PC100_KEYPAD_BASE; - } else { - if (board_is_limo_real() || board_is_limo_universal()) { - row_mask = 0x00FF; - col_mask = 0x0FFF; - } else { - row_mask = 0xFFFF; - col_mask = 0xFFFF; - } - - for (i = 0; i < 4; i++) { - /* Set GPH3[3:0] to KP_ROW[3:0] */ - if (row_mask & (0xF << (i << 2))) { - gpio_cfg_pin(&s5pc110_gpio->gpio_h3, i, 0x3); - if (!machine_is_p1p2()) - gpio_set_pull(&s5pc110_gpio->gpio_h3, - i, GPIO_PULL_UP); - } - - /* Set GPH2[3:0] to KP_COL[3:0] */ - if (col_mask & (0xF << (i << 2))) - gpio_cfg_pin(&s5pc110_gpio->gpio_h2, i, 0x3); - if (machine_is_p1p2()) - gpio_set_pull(&s5pc110_gpio->gpio_h2, i, GPIO_PULL_UP); - } - - reg = S5PC110_KEYPAD_BASE; - } - /* init col */ - value = 0x00; - writel(value, reg + S5PC1XX_KEYIFCOL_OFFSET); - value = readl(reg + S5PC1XX_KEYIFROW_OFFSET); - /* VOLUMEDOWN and CAM(Half shot) Button */ - if ((value & KBR1) == 0) { - i = 0; - while (i < 4) { - value = readl(reg + S5PC1XX_KEYIFCOL_OFFSET); - value |= 0xff; - value &= ~(1 << i); - writel(value, reg + S5PC1XX_KEYIFCOL_OFFSET); - udelay(10*1000); - col_value[i++] = readl(reg + S5PC1XX_KEYIFROW_OFFSET); - } - writel(0x00, reg + S5PC1XX_KEYIFCOL_OFFSET); - - /* expected value is row_value[0] = 0x00 row_value[1] = 0x01 */ - /* workaround */ - if ((col_value[0] & 0x3) == 0x3 && (col_value[1] & 0x3) == 0x3) - auto_download = 1; - - if ((col_value[0] & 0x3) == 0x3 && (col_value[1] & 0x3) != 0x3) - display_info = 1; - if (machine_is_p1p2()) { - if ((col_value[0] & 0xd) == 0xd) - auto_download = 1; - } - } - - if (auto_download) - setenv("bootcmd", "usbdown"); -} - -static void enable_battery(void) -{ - unsigned char val[2]; - unsigned char addr = 0x36; /* max17040 fuel gauge */ - - if (machine_is_aquila()) { - if (board_is_j1b2()) - return; - } - - if (machine_is_tickertape()) - return; - - if (machine_is_cypress()) - i2c_set_bus_num(I2C_GPIO7); - else - i2c_set_bus_num(I2C_GPIO3); - - if(machine_is_p1p2()) - { - return; - } - - if (i2c_probe(addr)) { - printf("Can't found max17040 fuel gauge\n"); - return; - } - - val[0] = 0x54; - val[1] = 0x00; - i2c_write(addr, 0xfe, 1, val, 2); -} - -static void check_battery(void) -{ - unsigned char val[2]; - unsigned char addr = 0x36; /* max17040 fuel gauge */ - - if(machine_is_p1p2()) - { - return; - } - - if (machine_is_aquila()) { - if (board_is_j1b2()) - return; - } - - if (machine_is_tickertape()) - return; - - if (machine_is_cypress()) - i2c_set_bus_num(I2C_GPIO7); - else - i2c_set_bus_num(I2C_GPIO3); - - if (i2c_probe(addr)) { - printf("Can't found max17040 fuel gauge\n"); - return; - } - - i2c_read(addr, 0x04, 1, val, 1); - - dprintf("battery:\t%d%%\n", val[0]); - - battery_soc = val[0]; -} - -static void check_mhl(void) -{ - unsigned char val[2]; - unsigned char addr = 0x39; /* SIL9230 */ - - /* MHL Power enable */ - /* HDMI_EN : GPJ2[2] XMSMDATA_2 output mode */ - gpio_direction_output(&s5pc110_gpio->gpio_j2, 2, 1); - - /* MHL_RST : MP0_4[7] XM0ADDR_7 output mode */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_4, 7, 0); - - /* 10ms required after reset */ - udelay(10000); - - /* output enable */ - gpio_set_value(&s5pc110_gpio->gpio_mp0_4, 7, 1); - - i2c_set_bus_num(I2C_GPIO5); - - /* set usb path */ - if (i2c_probe(addr)) { - printf("Can't found MHL Chip\n"); - return; - } - - /* - * System Control #1 - * set to Normal operation - */ - val[0] = 0x35; - i2c_write((0x72 >> 1), 0x08, 1, val, 1); - i2c_read((0x72 >> 1), 0x08, 1, val, 1); - - /* - * MHL TX Control #1 - * TERM_MODE [7:6] - * 00 = MHL termination ON - * 11 = MHL termination OFF - */ - val[0] = 0xd0; - i2c_write((0x72 >> 1), 0xa0, 1, val, 1); - i2c_read((0x72 >> 1), 0xa0, 1, val, 1); -} - -static void into_charge_mode(void) -{ - unsigned char addr = 0xCC >> 1; /* max8998 */; - unsigned char val[2]; - unsigned int level; - int i, j; - - i2c_set_bus_num(I2C_PMIC); - - if (i2c_probe(addr)) { - printf("Can't found max8998\n"); - return; - } - - printf("Charge Mode\n"); - - i2c_read(addr, 0x0C, 1, val, 1); - val[0] &= ~(0x7 << 0); - val[0] |= 5; /* 600mA */ - i2c_write(addr, 0x0C, 1, val, 1); - -#ifdef CONFIG_S5PC1XXFB - /* TODO: change to Image animation */ - init_font(); - set_font_xy(0, 0); - set_font_color(FONT_WHITE); - fb_printf("charging"); - - level = battery_soc / 25; - - for (i = 0; i < 3; i++) { - if (level == 0) - udelay(1 * 1000 * 1000); - - for (j = 0; j < 4; j++) { - fb_printf(".."); - - if (j >= level) - udelay(1 * 1000 * 1000); - } - - if (level <= 4) - udelay(1 * 1000 * 1000); - - set_font_xy(0, 0); - set_font_color(FONT_XOR); - fb_printf("charging........"); - - set_font_xy(0, 0); - set_font_color(FONT_WHITE); - fb_printf("charging"); - } - - exit_font(); -#endif - - /* EVT0: sleep 1, EVT1: sleep */ - if (s5pc1xx_get_cpu_rev() == 0) { - run_command("sleep 1", 0); - return; - } - - run_command("sleep", 0); -} - -static void check_micro_usb(int intr) -{ - unsigned char addr; - unsigned char val[2]; - - if (cpu_is_s5pc100()) - return; - - if (board_is_limo_real()) { - if (hwrevision(0) || hwrevision(1)) - return; - } - - if (machine_is_cypress()) - i2c_set_bus_num(I2C_GPIO6); - else - i2c_set_bus_num(I2C_PMIC); - - addr = 0x25; /* fsa9480 */ - if (i2c_probe(addr)) { - printf("Can't found fsa9480\n"); - return; - } - - /* Clear Interrupt */ - if (intr) { - i2c_read(addr, 0x03, 1, val, 2); - udelay(500 * 1000); - } - - /* Read Device Type 1 */ - i2c_read(addr, 0x0a, 1, val, 1); - -#define FSA_DEDICATED_CHARGER (1 << 6) -#define FSA_UART (1 << 3) -#define FSA_USB (1 << 2) - - /* - * If USB, use default 475mA - * If Charger, use 600mA and go to charge mode - */ - if (val[0] & FSA_DEDICATED_CHARGER) - into_charge_mode(); - - /* If Factory Mode is Boot ON-USB, go to download mode */ - i2c_read(addr, 0x07, 1, val, 1); - -#define FSA_ADC_FAC_USB 0x19 -#define FSA_ADC_FAC_UART 0x1d - - if (val[0] == FSA_ADC_FAC_USB) - setenv("bootcmd", "usbdown"); -} - -#define MAX8998_REG_ONOFF1 0x11 -#define MAX8998_REG_ONOFF2 0x12 -#define MAX8998_REG_ONOFF3 0x13 -#define MAX8998_LDO3 (1 << 2) -#define MAX8998_LDO10 (1 << 3) -#define MAX8998_LDO11 (1 << 2) -#define MAX8998_LDO12 (1 << 1) -#define MAX8998_LDO13 (1 << 0) -#define MAX8998_LDO14 (1 << 7) -#define MAX8998_LDO15 (1 << 6) -#define MAX8998_LDO16 (1 << 5) -#define MAX8998_LDO17 (1 << 4) - -static void init_pmic(void) -{ - unsigned char addr; - unsigned char val[2]; - - if (cpu_is_s5pc100()) - return; - - i2c_set_bus_num(I2C_PMIC); - - addr = 0xCC >> 1; /* max8998 */ - if (i2c_probe(addr)) { - printf("Can't found max8998\n"); - return; - } - - /* ONOFF1 */ - i2c_read(addr, MAX8998_REG_ONOFF1, 1, val, 1); - val[0] &= ~MAX8998_LDO3; - i2c_write(addr, MAX8998_REG_ONOFF1, 1, val, 1); - - /* ONOFF2 */ - i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); - /* - * Disable LDO10(VPLL_1.1V), LDO11(CAM_IO_2.8V), - * LDO12(CAM_ISP_1.2V), LDO13(CAM_A_2.8V) - */ - val[0] &= ~(MAX8998_LDO10 | MAX8998_LDO11 | - MAX8998_LDO12 | MAX8998_LDO13); - val[0] |= (1 << 7); - i2c_write(addr, MAX8998_REG_ONOFF2, 1, val, 1); - i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); - /* ONOFF3 */ - i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); - /* - * Disable LDO14(CAM_CIF_1.8), LDO15(CAM_AF_3.3V), - * LDO16(VMIPI_1.8V), LDO17(CAM_8M_1.8V) - */ - val[0] &= ~(MAX8998_LDO14 | MAX8998_LDO15 | - MAX8998_LDO16 | MAX8998_LDO17); - i2c_write(addr, MAX8998_REG_ONOFF3, 1, val, 1); - i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); -} - -#define PDN_MASK(x) (0x3 << ((x) << 1)) - -#define CON_INPUT(x) (0x0 << ((x) << 2)) -#define CON_OUTPUT(x) (0x1 << ((x) << 2)) -#define CON_IRQ(x) (0xf << ((x) << 2)) - -#define DAT_SET(x) (0x1 << (x)) -#define DAT_CLEAR(x) (0x0 << (x)) - -#define OUTPUT0(x) (0x0 << ((x) << 1)) -#define OUTPUT1(x) (0x1 << ((x) << 1)) -#define INPUT(x) (0x2 << ((x) << 1)) - -#define PULL_DIS(x) (0x0 << ((x) << 1)) -#define PULL_DOWN(x) (0x1 << ((x) << 1)) -#define PULL_UP(x) (0x2 << ((x) << 1)) - -#define PREVIOUS(x) (0x3 << ((x) << 1)) - -struct gpio_powermode { - unsigned int conpdn; - unsigned int pudpdn; -}; - -struct gpio_external { - unsigned int con; - unsigned int dat; - unsigned int pud; -}; - -static struct gpio_powermode powerdown_modes[] = { - { /* S5PC110_GPIO_A0_OFFSET */ - INPUT(0) | OUTPUT0(1) | INPUT(2) | OUTPUT0(3) | - INPUT(4) | OUTPUT0(5) | INPUT(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_A1_OFFSET */ - INPUT(0) | OUTPUT0(1) | INPUT(2) | INPUT(3), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3), - }, { /* S5PC110_GPIO_B_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - INPUT(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_C0_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | INPUT(3) | - OUTPUT0(4), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4), - }, { /* S5PC110_GPIO_C1_OFFSET */ - /* OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4), */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | INPUT(3) | - OUTPUT0(4), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4), - }, { /* S5PC110_GPIO_D0_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3), - }, { /* S5PC110_GPIO_D1_OFFSET */ - INPUT(0) | INPUT(1) | INPUT(2) | INPUT(3) | - INPUT(4) | INPUT(5), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5), - }, { /* S5PC110_GPIO_E0_OFFSET */ - INPUT(0) | INPUT(1) | INPUT(2) | INPUT(3) | - INPUT(4) | INPUT(5) | INPUT(6) | INPUT(7), - PULL_DOWN(0) | PULL_DOWN(1) | PULL_DOWN(2) | PULL_DOWN(3) | - PULL_DOWN(4) | PULL_DOWN(5) | PULL_DOWN(6) | PULL_DOWN(7), - }, { /* S5PC110_GPIO_E1_OFFSET */ - INPUT(0) | INPUT(1) | INPUT(2) | OUTPUT0(3) | - OUTPUT0(4), - PULL_DOWN(0) | PULL_DOWN(1) | PULL_DOWN(2) | PULL_DIS(3) | - PULL_DIS(4), - }, { /* S5PC110_GPIO_F0_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_F1_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_F2_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_F3_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5), - }, { /* S5PC110_GPIO_G0_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6), - }, { /* S5PC110_GPIO_G1_OFFSET */ - OUTPUT0(0) | INPUT(1) | OUTPUT0(2) | INPUT(3) | - INPUT(4) | INPUT(5) | INPUT(6), - PULL_DIS(0) | PULL_UP(1) | PULL_DIS(2) | PULL_UP(3) | - PULL_UP(4) | PULL_UP(5) | PULL_UP(6), - }, { /* S5PC110_GPIO_G2_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6), - }, { /* S5PC110_GPIO_G3_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT1(2) | INPUT(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6), - }, { /* S5PC110_GPIO_I_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | INPUT(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6), - }, { /* S5PC110_GPIO_J0_OFFSET */ - INPUT(0) | OUTPUT0(1) | INPUT(2) | INPUT(3) | - INPUT(4) | INPUT(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DOWN(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_J1_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_J2_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - INPUT(4) | OUTPUT0(5) | INPUT(6) | INPUT(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DOWN(6) | PULL_DOWN(7), - }, { /* S5PC110_GPIO_J3_OFFSET */ - INPUT(0) | INPUT(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT1(4) | OUTPUT0(5) | INPUT(6) | INPUT(7), - PULL_DOWN(0) | PULL_DOWN(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_GPIO_J4_OFFSET */ - INPUT(0) | OUTPUT0(1) | OUTPUT0(2) | INPUT(3) | - OUTPUT0(4), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4), - }, { /* S5PC110_MP0_1_OFFSET */ - /* XM0CSN[4]: MP0_1[4] -> output high */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT1(2) | OUTPUT0(3) | - OUTPUT1(4) | OUTPUT0(5) | OUTPUT1(6) | OUTPUT1(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_MP0_2_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | INPUT(2) | OUTPUT0(3), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3), - }, { /* S5PC110_MP0_3_OFFSET */ - /* XM0FWEN: MP0_3[2] -> output high */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT1(2) | OUTPUT0(3) | - INPUT(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_MP0_4_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | INPUT(3) | - INPUT(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DOWN(3) | - PULL_DOWN(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_MP0_5_OFFSET */ - INPUT(0) | OUTPUT0(1) | INPUT(2) | INPUT(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DOWN(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_MP0_6_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, { /* S5PC110_MP0_7_OFFSET */ - OUTPUT0(0) | OUTPUT0(1) | OUTPUT0(2) | OUTPUT0(3) | - OUTPUT0(4) | OUTPUT0(5) | OUTPUT0(6) | OUTPUT0(7), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5) | PULL_DIS(6) | PULL_DIS(7), - }, -}; - -static struct gpio_external external_powerdown_modes[] = { - { /* S5PC110_GPIO_H0_OFFSET */ - CON_OUTPUT(0) | CON_INPUT(1) | CON_OUTPUT(2) | CON_OUTPUT(3) | - CON_OUTPUT(4) | CON_OUTPUT(5) | CON_INPUT(6) | CON_INPUT(7), - DAT_SET(0) | DAT_CLEAR(2) | DAT_CLEAR(3) | - DAT_CLEAR(4) | DAT_CLEAR(5), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DIS(4) | PULL_DIS(5), - }, { /* S5PC110_GPIO_H1_OFFSET */ - /* CON_INPUT(0) | CON_INPUT(1) | CON_OUTPUT(2) | CON_IRQ(3) | - CON_IRQ(4) | CON_INPUT(5) | CON_INPUT(6) | CON_INPUT(7), - DAT_CLEAR(2), - PULL_DOWN(0) | PULL_DOWN(1) | - PULL_DOWN(6), */ - CON_INPUT(0) | CON_INPUT(1) | CON_OUTPUT(2) | CON_IRQ(3) | - CON_INPUT(4) | CON_INPUT(5) | CON_OUTPUT(6) | CON_INPUT(7), - DAT_SET(0), - PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) | - PULL_DOWN(4), - }, { /* S5PC110_GPIO_H2_OFFSET */ - CON_OUTPUT(0) | CON_OUTPUT(1) | CON_OUTPUT(2) | CON_OUTPUT(3) | - CON_IRQ(4) | CON_IRQ(5) | CON_IRQ(6) | CON_IRQ(7), - DAT_CLEAR(0) | DAT_CLEAR(1) | DAT_CLEAR(2) | DAT_CLEAR(3), - 0, - }, { /* S5PC110_GPIO_H3_OFFSET */ - CON_IRQ(0) | CON_IRQ(1) | CON_IRQ(2) | CON_OUTPUT(3) | - CON_IRQ(4) | CON_INPUT(5) | CON_IRQ(6) | CON_OUTPUT(7), - DAT_CLEAR(3) | DAT_CLEAR(7), - 0, - }, -}; - -static void setup_power_down_mode_registers(void) -{ - struct s5pc110_gpio *gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE; - struct s5pc1xx_gpio_bank *bank; - struct gpio_powermode *p; - struct gpio_external *ge; - int i; - - if (cpu_is_s5pc100()) - return; - - if (!(machine_is_aquila() && board_is_limo_real())) - return; - - bank = &gpio->gpio_a0; - p = powerdown_modes; - - for (i = 0; i < ARRAY_SIZE(powerdown_modes); i++, p++, bank++) { - writel(p->conpdn, &bank->pdn_con); - writel(p->pudpdn, &bank->pdn_pull); - } - /* M299 */ - writel(0xff0022b0, (unsigned int *)0xF0000000); - writel(0xff0022b0, (unsigned int *)0xF1400000); - - - bank = &gpio->gpio_h0; - ge = external_powerdown_modes; - - for (i = 0; i < ARRAY_SIZE(external_powerdown_modes); i++) { - writel(ge->con, &bank->con); - writel(ge->dat, &bank->dat); - writel(ge->pud, &bank->pull); - - bank++; - ge++; - } -} - -#ifdef CONFIG_LCD -struct s6e63m0_platform_data { - struct s5pc1xx_gpio_bank *bank; - unsigned int num; -}; - -extern void s6e63m0_set_spi_interface(struct s6e63m0_platform_data *cs, - struct s6e63m0_platform_data *clk, struct s6e63m0_platform_data *si, - struct s6e63m0_platform_data *so); - -struct s6e63m0_platform_data pd_cs, pd_clk, pd_si, pd_so; -struct s5pc110_gpio *gpio_base = (struct s5pc110_gpio *) S5PC110_GPIO_BASE; - -void lcd_cfg_gpio(void) -{ - unsigned int i, f3_end = 4; - - for (i = 0; i < 8; i++) { - /* set GPF0,1,2[0:7] for RGB Interface and Data lines (32bit) */ - gpio_cfg_pin(&gpio_base->gpio_f0, i, GPIO_FUNC(2)); - gpio_cfg_pin(&gpio_base->gpio_f1, i, GPIO_FUNC(2)); - gpio_cfg_pin(&gpio_base->gpio_f2, i, GPIO_FUNC(2)); - /* pull-up/down disable */ - gpio_set_pull(&gpio_base->gpio_f0, i, GPIO_PULL_NONE); - gpio_set_pull(&gpio_base->gpio_f1, i, GPIO_PULL_NONE); - gpio_set_pull(&gpio_base->gpio_f2, i, GPIO_PULL_NONE); - - /* drive strength to max (24bit) */ - gpio_set_drv(&gpio_base->gpio_f0, i, GPIO_DRV_4x); - gpio_set_rate(&gpio_base->gpio_f0, i, GPIO_DRV_SLOW); - gpio_set_drv(&gpio_base->gpio_f1, i, GPIO_DRV_4x); - gpio_set_rate(&gpio_base->gpio_f1, i, GPIO_DRV_SLOW); - gpio_set_drv(&gpio_base->gpio_f2, i, GPIO_DRV_4x); - gpio_set_rate(&gpio_base->gpio_f2, i, GPIO_DRV_SLOW); - } - - /* set DISPLAY_DE_B pin for dual rgb mode. */ - if (board_is_media()) - f3_end = 5; - - for (i = 0; i < f3_end; i++) { - /* set GPF3[0:3] for RGB Interface and Data lines (32bit) */ - gpio_cfg_pin(&gpio_base->gpio_f3, i, GPIO_PULL_UP); - /* pull-up/down disable */ - gpio_set_pull(&gpio_base->gpio_f3, i, GPIO_PULL_NONE); - /* drive strength to max (24bit) */ - gpio_set_drv(&gpio_base->gpio_f3, i, GPIO_DRV_4x); - gpio_set_rate(&gpio_base->gpio_f3, i, GPIO_DRV_SLOW); - } - /* display output path selection (only [1:0] valid) */ - writel(0x2, 0xE0107008); - - /* gpio pad configuration for LCD reset. */ - gpio_cfg_pin(&gpio_base->gpio_mp0_5, 5, GPIO_OUTPUT); - - /* gpio pad configuration for LCD ON. */ - gpio_cfg_pin(&gpio_base->gpio_j1, 3, GPIO_OUTPUT); - - /* MLCD_ON2 */ - - if (board_is_p2_real()) - gpio_cfg_pin(&gpio_base->gpio_j1, 4, GPIO_OUTPUT); - else - gpio_cfg_pin(&gpio_base->gpio_j2, 6, GPIO_OUTPUT); - - /* LCD_BACKLIGHT_EN */ - if (machine_is_geminus()) - gpio_cfg_pin(&gpio_base->gpio_mp0_5, 0, GPIO_OUTPUT); - - /* - * gpio pad configuration for - * DISPLAY_CS, DISPLAY_CLK, DISPLAY_SO, DISPLAY_SI. - */ - gpio_cfg_pin(&gpio_base->gpio_mp0_1, 1, GPIO_OUTPUT); - gpio_cfg_pin(&gpio_base->gpio_mp0_4, 1, GPIO_OUTPUT); - gpio_cfg_pin(&gpio_base->gpio_mp0_4, 2, GPIO_INPUT); - gpio_cfg_pin(&gpio_base->gpio_mp0_4, 3, GPIO_OUTPUT); - - if (machine_is_aquila()) { - pd_cs.bank = &gpio_base->gpio_mp0_1; - pd_cs.num = 1; - pd_clk.bank = &gpio_base->gpio_mp0_4; - pd_clk.num = 1; - pd_si.bank = &gpio_base->gpio_mp0_4; - pd_si.num = 3; - pd_so.bank = &gpio_base->gpio_mp0_4; - pd_so.num = 2; - - /* these data would be sent to s6e63m0 lcd panel driver. */ - //s6e63m0_set_spi_interface(&pd_cs, &pd_clk, &pd_si, &pd_so); - } - - if (machine_is_cypress()) { - /* FLCD_CS */ - gpio_cfg_pin(&gpio_base->gpio_mp0_1, 0, GPIO_OUTPUT); - /* FLCD_CLK */ - gpio_cfg_pin(&gpio_base->gpio_mp0_4, 0, GPIO_OUTPUT); - /* FLCD_SDI */ - gpio_cfg_pin(&gpio_base->gpio_mp0_4, 2, GPIO_OUTPUT); - /* FLCD_RST_S */ - gpio_cfg_pin(&gpio_base->gpio_mp0_4, 5, GPIO_OUTPUT); - /* FLCD_ON_S */ - gpio_cfg_pin(&gpio_base->gpio_g2, 2, GPIO_OUTPUT); - - pd_cs.bank = &gpio_base->gpio_mp0_1; - pd_cs.num = 0; - pd_clk.bank = &gpio_base->gpio_mp0_4; - pd_clk.num = 0; - pd_si.bank = &gpio_base->gpio_mp0_4; - pd_si.num = 2; - - /* these data would be sent to s6e63m0 lcd panel driver. */ - //s6e63m0_set_spi_interface(&pd_cs, &pd_clk, &pd_si, NULL); - } - - return; -} - -void backlight_on(unsigned int onoff) -{ - struct s5pc110_gpio *gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE; - - if (onoff) { - if (machine_is_geminus()) - gpio_set_value(&gpio->gpio_mp0_5, 0, 1); - } else { - if (machine_is_geminus()) - gpio_set_value(&gpio->gpio_mp0_5, 0, 0); - } -} - -void reset_lcd(void) -{ - struct s5pc110_gpio *gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE; - - if (machine_is_aquila() || machine_is_geminus()) - gpio_set_value(&gpio->gpio_mp0_5, 5, 1); - if (machine_is_cypress()) - gpio_set_value(&gpio->gpio_mp0_4, 5, 1); -} - -void lcd_power_on(unsigned int onoff) -{ - struct s5pc110_gpio *gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE; - - if (onoff) { - if (machine_is_aquila() || machine_is_geminus()) - gpio_set_value(&gpio->gpio_j1, 3, 1); - - if (machine_is_cypress()) - gpio_set_value(&gpio->gpio_g2, 2, 1); - - if (board_is_p2_real()) - gpio_set_value(&gpio->gpio_j1, 4, 1); - else - gpio_set_value(&gpio->gpio_j2, 6, 1); - - } else { - if (machine_is_aquila() || machine_is_geminus()) - gpio_set_value(&gpio->gpio_j1, 3, 0); - - if (machine_is_cypress()) - gpio_set_value(&gpio->gpio_g2, 2, 0); - - if (board_is_p2_real()) - gpio_set_value(&gpio->gpio_j1, 4, 0); - else - gpio_set_value(&gpio->gpio_j2, 6, 0); - } -} - -extern void ams701ka_cfg_ldo(void); -extern void ams701ka_enable_ldo(unsigned int onoff); - -void init_panel_info(vidinfo_t *vid) -{ - vid->cfg_gpio = NULL; - vid->reset_lcd = NULL; - vid->backlight_on = NULL; - vid->lcd_power_on = NULL; - - vid->cfg_ldo = NULL; - vid->enable_ldo = NULL; - - vid->init_delay = 0; - vid->reset_delay = 0; - vid->power_on_delay = 0; - - vid->dual_lcd_enabled = 0; - - vid->vl_freq = 60; - vid->vl_col = 1024, - vid->vl_row = 600, - vid->vl_width = 1024, - vid->vl_height = 600, - vid->vl_clkp = CONFIG_SYS_HIGH, - vid->vl_hsp = CONFIG_SYS_HIGH, - vid->vl_vsp = CONFIG_SYS_HIGH, - vid->vl_dp = CONFIG_SYS_LOW, - vid->vl_bpix = 32, - - /* AMS701KA AMOLED Panel. */ - vid->vl_hspw = 30, - vid->vl_hbpd = 114, - vid->vl_hfpd = 48, - - vid->vl_vspw = 2, - vid->vl_vbpd = 6, - vid->vl_vfpd = 8, - - vid->cfg_gpio = lcd_cfg_gpio; - vid->reset_lcd = reset_lcd; - vid->backlight_on = backlight_on; - vid->lcd_power_on = lcd_power_on; - - vid->cfg_ldo = ams701ka_cfg_ldo; - vid->enable_ldo = ams701ka_enable_ldo; - - vid->init_delay = 25000; - vid->reset_delay = 120000; - -#if 0 - vid->vl_freq = 60; - vid->vl_col = 480, - vid->vl_row = 800, - vid->vl_width = 480, - vid->vl_height = 800, - vid->vl_clkp = CONFIG_SYS_HIGH, - vid->vl_hsp = CONFIG_SYS_LOW, - vid->vl_vsp = CONFIG_SYS_LOW, - vid->vl_dp = CONFIG_SYS_HIGH, - vid->vl_bpix = 32, - - /* tl2796 panel. */ - vid->vl_hpw = 4, - vid->vl_blw = 8, - vid->vl_elw = 8, - - vid->vl_vpw = 4, - vid->vl_bfw = 8, - vid->vl_efw = 8, -#endif -#if 0 - vid->vl_freq = 60; - vid->vl_col = 1024, - vid->vl_row = 600, - vid->vl_width = 1024, - vid->vl_height = 600, - vid->vl_clkp = CONFIG_SYS_HIGH, - vid->vl_hsp = CONFIG_SYS_HIGH, - vid->vl_vsp = CONFIG_SYS_HIGH, - vid->vl_dp = CONFIG_SYS_LOW, - vid->vl_bpix = 32, - - /* AMS701KA AMOLED Panel. */ - vid->vl_hpw = 30, - vid->vl_blw = 114, - vid->vl_elw = 48, - - vid->vl_vpw = 2, - vid->vl_bfw = 6, - vid->vl_efw = 8, -#endif -} -#endif - -static void setup_meminfo(void) -{ - char meminfo[64] = {0, }; - int count = 0, size, real; - - size = gd->bd->bi_dram[0].size >> 20; - count += sprintf(meminfo + count, "mem=%dM", size); - - /* Each Chip Select can't exceed the 256MiB */ - size = gd->bd->bi_dram[1].size >> 20; - real = min(size, 256); - count += sprintf(meminfo + count, " mem=%dM@0x%x", - real, (unsigned int)gd->bd->bi_dram[1].start); - - size -= real; - if (size > 0) { - count += sprintf(meminfo + count, " mem=%dM@0x%x", size, - (unsigned int)gd->bd->bi_dram[1].start + (real << 20)); - } - - setenv("meminfo", meminfo); -} - -int misc_init_r(void) -{ -#ifdef CONFIG_LCD - /* It should be located at first */ - lcd_is_enabled = 0; - - if (board_is_limo_real() || - board_is_limo_universal() || - board_is_j1b2()) - setenv("lcdinfo", "lcd=s6e63m0"); - /* it can't classify tl2796 with single-lcd and dual-lcd. - else - setenv("lcdinfo", "lcd=tl2796-dual"); - */ - - /* - * env values below should be added in case that lcd panel of geminus, - * p1 and p2 are enabled at u-boot. - * setenv means that lcd panel has been turned on at u-boot. - */ - if (machine_is_geminus()) - setenv("lcdinfo", "lcd=lms480jc01"); - - if (board_is_p2_real()) { - setenv("lcdinfo", "lcd=ams701"); - } else if(lcd_is_amoled()) { - setenv("lcdinfo", "lcd=ams701"); - } - -#endif - setup_meminfo(); - - show_hw_revision(); - - /* Set proper PMIC pins */ - pmic_pin_init(); - - /* Check auto burning */ - check_auto_burn(); - - /* To power up I2C2 */ - enable_ldos(); - - /* Enable T-Flash at Limo Real or Limo Universal */ - enable_t_flash(); - - /* Setup Limo Real board GPIOs */ - setup_limo_real_gpios(); - - /* Setup Media board GPIOs */ - setup_media_gpios(); - - /* Setup P1P2 board GPIOS */ - setup_p1p2_gpios(); - - /* To usbdown automatically */ - if (board_is_p2_real()) - check_p2_keypad(); - else - check_keypad(); - - /* check max8998 */ - init_pmic(); - -#ifdef CONFIG_S5PC1XXFB - display_device_info(); -#endif - - setup_power_down_mode_registers(); - - /* check max17040 */ - check_battery(); - - /* check fsa9480 */ - check_micro_usb(0); - - return 0; -} -#endif - -int board_init(void) -{ - /* Set Initial global variables */ - s5pc110_gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE; - - gd->bd->bi_arch_number = MACH_TYPE; - gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; - - /* Check H/W Revision */ - check_hw_revision(); - - return 0; -} - -int dram_init(void) -{ - unsigned int base, memconfig0, size; - unsigned int memconfig1, sz = 0; - - if (cpu_is_s5pc100()) { - /* In mem setup, we swap the bank. So below size is correct */ - gd->bd->bi_dram[0].start = PHYS_SDRAM_1; - gd->bd->bi_dram[0].size = PHYS_SDRAM_2_SIZE; - gd->bd->bi_dram[1].start = S5PC100_PHYS_SDRAM_2; - size = 128; - } else { - /* In S5PC110, we can't swap the DMC0/1 */ - gd->bd->bi_dram[0].start = PHYS_SDRAM_1; - gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; - - base = S5PC110_DMC1_BASE; - /* DMC configuration */ - memconfig0 = readl(base + MEMCONFIG0_OFFSET); - gd->bd->bi_dram[1].start = memconfig0 & 0xFF000000; - - size = (memconfig0 >> 16) & 0xFF; - size = ((unsigned char) ~size) + 1; - - /* - * (0x07 + 1) * 16 = 128 MiB - * (0x0f + 1) * 16 = 256 MiB - */ - size = size << 4; - - /* - * Aquila Rev0.5 4G3G1G - * Aquila Rev0.8 4G3G1G - */ - if (machine_is_aquila() && (hwrevision(5) || hwrevision(8))) { - memconfig1 = readl(base + MEMCONFIG1_OFFSET); - - sz = (memconfig1 >> 16) & 0xFF; - sz = ((unsigned char) ~sz) + 1; - sz = sz << 4; - } - - } - /* - * bi_dram[1].size contains all DMC1 memory size - */ - gd->bd->bi_dram[1].size = (size + sz) << 20; - - return 0; -} - -/* Used for sleep test */ -static unsigned char saved_val[4][2]; -void board_sleep_init_late(void) -{ - /* CODEC_LDO_EN: GPF3[4] */ - gpio_direction_output(&s5pc110_gpio->gpio_f3, 4, 0); - /* CODEC_XTAL_EN: GPH3[2] */ - gpio_direction_output(&s5pc110_gpio->gpio_h3, 2, 0); - - /* MMC T_FLASH off */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_5, 4, 0); - /* MHL off */ - gpio_direction_output(&s5pc110_gpio->gpio_j2, 2, 0); - gpio_direction_output(&s5pc110_gpio->gpio_mp0_4, 7, 0); - gpio_direction_output(&s5pc110_gpio->gpio_j2, 3, 0); /* MHL_ON for REV02 or higher */ - - -} -void board_sleep_init(void) -{ - unsigned char addr; - unsigned char val[2]; - - i2c_set_bus_num(I2C_PMIC); - addr = 0xCC >> 1; - if (i2c_probe(addr)) { - printf("Can't find max8998\n"); - return; - } - - /* Set ONOFF1 */ - i2c_read(addr, MAX8998_REG_ONOFF1, 1, val, 1); - saved_val[0][0] = val[0]; - saved_val[0][1] = val[1]; - val[0] &= ~((1 << 7) | (1 << 6) | (1 << 4) | (1 << 2) | - (1 << 1) | (1 << 0)); - i2c_write(addr, MAX8998_REG_ONOFF1, 1, val, 1); - i2c_read(addr, MAX8998_REG_ONOFF1, 1, val, 1); - /* Set ONOFF2 */ - i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); - saved_val[1][0] = val[0]; - saved_val[1][1] = val[1]; - val[0] &= ~((1 << 7) | (1 << 6) | (1 << 5) | (1 << 3) | - (1 << 2) | (1 << 1) | (1 << 0)); - val[0] |= (1 << 7); - i2c_write(addr, MAX8998_REG_ONOFF2, 1, val, 1); - i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); - /* Set ONOFF3 */ - i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); - saved_val[2][0] = val[0]; - saved_val[2][1] = val[1]; - val[0] &= ~((1 << 7) | (1 << 6) | (1 << 5) | (1 << 4)); - i2c_write(addr, MAX8998_REG_ONOFF3, 1, val, 1); - i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); - /* Set ONOFF4 */ - i2c_read(addr, MAX8998_REG_ONOFF3+1, 1, val, 1); - saved_val[3][0] = val[0]; - saved_val[3][1] = val[1]; - val[0] &= ~((1 << 7) | (1 << 6) | (1 << 4)); - i2c_write(addr, MAX8998_REG_ONOFF3+1, 1, val, 1); - i2c_read(addr, MAX8998_REG_ONOFF3+1, 1, val, 1); - printf("Turned off regulators. Preparing to sleep. [%s:%d]\n", - __FILE__, __LINE__); -} - -void board_sleep_resume(void) -{ - unsigned char addr; - unsigned char val[2]; - - show_hw_revision(); - - i2c_set_bus_num(I2C_PMIC); - addr = 0xCC >> 1; - if (i2c_probe(addr)) { - printf("Can't find max8998\n"); - return; - } - - /* Set ONOFF1 */ - i2c_write(addr, MAX8998_REG_ONOFF1, 1, saved_val[0], 1); - i2c_read(addr, MAX8998_REG_ONOFF1, 1, val, 1); - /* Set ONOFF2 */ - i2c_write(addr, MAX8998_REG_ONOFF2, 1, saved_val[1], 1); - i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); - /* Set ONOFF3 */ - i2c_write(addr, MAX8998_REG_ONOFF3, 1, saved_val[2], 1); - i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); - /* Set ONOFF4 */ - i2c_write(addr, MAX8998_REG_ONOFF3+1, 1, saved_val[3], 1); - i2c_read(addr, MAX8998_REG_ONOFF3+1, 1, val, 1); - printf("Waked up.\n"); - - /* check max17040 */ - check_battery(); - - /* check fsa9480 */ - check_micro_usb(1); -} - -#ifdef CONFIG_CMD_USBDOWN -int usb_board_init(void) -{ -#ifdef CONFIG_CMD_PMIC - run_command("pmic ldo 3 on", 0); -#endif - - if (cpu_is_s5pc100()) { -#ifdef CONFIG_HARD_I2C - uchar val[2] = {0,}; - - /* PMIC */ - if (i2c_read(0x66, 0, 1, val, 2)) { - printf("i2c_read error\n"); - return 1; - } - - val[0] |= (1 << 3); - val[1] |= (1 << 5); - - if (i2c_write(0x66, 0, 1, val, 2)) { - printf("i2c_write error\n"); - return 1; - } - i2c_read(0x66, 0, 1, val, 2); -#endif - return 0; - } - - /* S5PC110 */ - if (board_is_limo_universal() || - board_is_limo_real() || - board_is_media()) { - /* check usb path */ - if (board_is_limo_real() && !hwrevision(6)) - check_mhl(); - } - - if (machine_is_tickertape()) - /* USB_SEL: XM0ADDR_0: MP04[0] output mode */ - gpio_direction_output(&s5pc110_gpio->gpio_mp0_4, 0, 0); - - return 0; -} -#endif - -#ifdef CONFIG_GENERIC_MMC -int board_mmc_init(bd_t *bis) -{ - unsigned int reg; - unsigned int clock; - struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE; - int i; - - /* MMC0 Clock source = SCLKMPLL */ - reg = readl(&clk->src4); - reg &= ~0xf; - reg |= 0x6; - writel(reg, &clk->src4); - - reg = readl(&clk->div4); - reg &= ~0xf; - - /* set div value near 50MHz */ - clock = get_pll_clk(MPLL) / 1000000; - for (i = 0; i < 0xf; i++) { - if ((clock / (i + 1)) <= 50) { - reg |= i << 0; - break; - } - } - - writel(reg, &clk->div4); - - /* - * MMC0 GPIO - * GPG0[0] SD_0_CLK - * GPG0[1] SD_0_CMD - * GPG0[2] SD_0_CDn -> Not used - * GPG0[3:6] SD_0_DATA[0:3] - */ - for (i = 0; i < 7; i++) { - if (i == 2) - continue; - /* GPG0[0:6] special function 2 */ - gpio_cfg_pin(&s5pc110_gpio->gpio_g0, i, 0x2); - /* GPG0[0:6] pull disable */ - gpio_set_pull(&s5pc110_gpio->gpio_g0, i, GPIO_PULL_NONE); - /* GPG0[0:6] drv 4x */ - gpio_set_drv(&s5pc110_gpio->gpio_g0, i, GPIO_DRV_4x); - } - - return s5pc1xx_mmc_init(0); -} -#endif - -#ifdef CONFIG_CMD_PMIC -static int pmic_status(void) -{ - unsigned char addr, val[2]; - int reg, i; - - i2c_set_bus_num(I2C_PMIC); - addr = 0xCC >> 1; - if (i2c_probe(addr)) { - printf("Can't found max8998\n"); - return -1; - } - - reg = 0x11; - i2c_read(addr, reg, 1, val, 1); - for (i = 7; i >= 4; i--) - printf("BUCK%d %s\n", 7 - i + 1, - val[0] & (1 << i) ? "on" : "off"); - for (; i >= 0; i--) - printf("LDO%d %s\n", 5 - i, - val[0] & (1 << i) ? "on" : "off"); - reg = 0x12; - i2c_read(addr, reg, 1, val, 1); - for (i = 7; i >= 0; i--) - printf("LDO%d %s\n", 7 - i + 6, - val[0] & (1 << i) ? "on" : "off"); - reg = 0x13; - i2c_read(addr, reg, 1, val, 1); - for (i = 7; i >= 4; i--) - printf("LDO%d %s\n", 7 - i + 14, - val[0] & (1 << i) ? "on" : "off"); - return 0; -} - -static int pmic_ldo_control(int buck, int ldo, int on) -{ - unsigned char addr, val[2]; - unsigned int reg, shift; - - if (ldo) { - if (ldo < 2) - return -1; - if (ldo <= 5) { - reg = 0x11; - shift = 5 - ldo; - } else if (ldo <= 13) { - reg = 0x12; - shift = 13 - ldo; - } else if (ldo <= 17) { - reg = 0x13; - shift = 17 - ldo + 4; - } else - return -1; - } else if (buck) { - if (buck > 4) - return -1; - reg = 0x11; - shift = 4 - buck + 4; - } else - return -1; - - i2c_set_bus_num(I2C_PMIC); - addr = 0xCC >> 1; - if (i2c_probe(addr)) { - printf("Can't found max8998\n"); - return -1; - } - - i2c_read(addr, reg, 1, val, 1); - if (on) - val[0] |= (1 << shift); - else - val[0] &= ~(1 << shift); - i2c_write(addr, reg, 1, val, 1); - i2c_read(addr, reg, 1, val, 1); - printf("%s %d value 0x%x, %s\n", buck ? "buck" : "ldo", buck ? : ldo, - val[0], val[0] & (1 << shift) ? "on" : "off"); - - return 0; -} - -static int do_pmic(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ - int buck = 0, ldo = 0, on = -1; - - switch (argc) { - case 2: - if (strncmp(argv[1], "status", 6) == 0) - return pmic_status(); - break; - case 4: - if (strncmp(argv[1], "ldo", 3) == 0) { - ldo = simple_strtoul(argv[2], NULL, 10); - if (strncmp(argv[3], "on", 2) == 0) - on = 1; - else if (strncmp(argv[3], "off", 3) == 0) - on = 0; - else - break; - return pmic_ldo_control(buck, ldo, on); - } - if (strncmp(argv[1], "buck", 4) == 0) { - buck = simple_strtoul(argv[2], NULL, 10); - if (strncmp(argv[3], "on", 2) == 0) - on = 1; - else if (strncmp(argv[3], "off", 3) == 0) - on = 0; - else - break; - return pmic_ldo_control(buck, ldo, on); - } - - default: - break; - } - - cmd_usage(cmdtp); - return 1; -} - -U_BOOT_CMD( - pmic, CONFIG_SYS_MAXARGS, 1, do_pmic, - "PMIC LDO & BUCK control", - "status - Display PMIC LDO & BUCK status\n" - "pmic ldo num on/off - Turn on/off the LDO\n" - "pmic buck num on/off - Turn on/off the BUCK\n" -); -#endif - -#ifdef CONFIG_CMD_DEVICE_POWER - -enum { - POWER_NONE, - POWER_TOUCH, - POWER_3_TOUCHKEY, - POWER_LCD, - POWER_HAPTIC, - POWER_AUDIO_CODEC, - POWER_FM_RADIO, - POWER_BT_WIFI, - POWER_HDMI, -}; - -static void power_display_devices(void) -{ - printf("devices:\n"); - printf("\t%d - touch\n", POWER_TOUCH); - printf("\t%d - 3 touchkey\n", POWER_3_TOUCHKEY); - printf("\t%d - LCD\n", POWER_LCD); - printf("\t%d - Haptic\n", POWER_HAPTIC); - printf("\t%d - Audio Codec\n", POWER_AUDIO_CODEC); - printf("\t%d - FM Radio\n", POWER_FM_RADIO); - printf("\t%d - BT/WiFi\n", POWER_BT_WIFI); - printf("\t%d - HDMI\n", POWER_HDMI); -} - -static int power_hdmi(int on) -{ - /* HDMI_EN1: GPJ2[2] */ - gpio_direction_output(&s5pc110_gpio->gpio_j2, 2, on); - /* MHL_ON: GPJ2[3] */ - gpio_direction_output(&s5pc110_gpio->gpio_j2, 3, on); - return 0; -} - -static int power_bt_wifi(int on) -{ - /* WLAN_BT_EN: GPB[5] */ - gpio_direction_output(&s5pc110_gpio->gpio_b, 5, on); - return 0; -} - -static int power_fm_radio(int on) -{ - /* FM_BUS_nRST: GPJ2[5] */ - gpio_direction_output(&s5pc110_gpio->gpio_j2, 5, !on); - return 0; -} - -static int power_audio_codec(int on) -{ - /* CODEC_LDO_EN: GPF3[4] */ - gpio_direction_output(&s5pc110_gpio->gpio_f3, 4, on); - /* CODEC_XTAL_EN: GPH3[2] */ - gpio_direction_output(&s5pc110_gpio->gpio_h3, 2, on); - return 0; -} - -static int power_haptic(int on) -{ - /* HAPTIC_ON: GPJ1[1] */ - gpio_direction_output(&s5pc110_gpio->gpio_j1, 1, on); - return 0; -} - -static int power_lcd(int on) -{ - /* MLCD_ON: GPJ1[3] */ - gpio_direction_output(&s5pc110_gpio->gpio_j1, 3, on); - return 0; -} - -static int power_touch(int on) -{ - /* TOUCH_EN: GPG3[6] */ - gpio_direction_output(&s5pc110_gpio->gpio_g3, 6, on); - return 0; -} - -static int power_3_touchkey(int on) -{ - if (on) { - /* 3_TOUCH_EN - GPJ3[0] : (J1B2) */ - /* 3_TOUCH_EN - GPJ3[5] : (not J1B2) */ - if (board_rev & J1_B2_BOARD) - gpio_direction_output(&s5pc110_gpio->gpio_j3, 0, on); - else - gpio_direction_output(&s5pc110_gpio->gpio_j3, 5, on); - - /* 3_TOUCH_CE - GPJ2[6] */ - gpio_direction_output(&s5pc110_gpio->gpio_j2, 6, on); /* TOUCH_CE */ - } else { - /* 3_TOUCH_CE - GPJ2[6] */ - gpio_direction_output(&s5pc110_gpio->gpio_j2, 6, on); /* TOUCH_CE */ - } - - if (on) { - unsigned int reg; - unsigned char val[2]; - unsigned char addr = 0x20; /* mcs5000 3-touchkey */ - - /* Require 100ms */ - udelay(80 * 1000); - - /* 3 touchkey */ - i2c_set_bus_num(I2C_GPIO6); - - /* Workaround to probe */ - if (i2c_probe(addr)) { - if (i2c_probe(addr)) { - printf("Can't found 3 touchkey\n"); - return -ENODEV; - } - } - -#define MCS5000_TK_HW_VERSION 0x06 -#define MCS5000_TK_FW_VERSION 0x0A -#define MCS5000_TK_MI_VERSION 0x0B - - reg = MCS5000_TK_MI_VERSION; - i2c_read(addr, reg, 1, val, 1); - printf("3-touchkey:\tM/I 0x%x, ", val[0]); - reg = MCS5000_TK_HW_VERSION; - i2c_read(addr, reg, 1, val, 1); - printf("H/W 0x%x, ", val[0]); - reg = MCS5000_TK_FW_VERSION; - i2c_read(addr, reg, 1, val, 1); - printf("F/W 0x%x\n", val[0]); - } - return 0; -} - -static int power_control(int device, int on) -{ - switch (device) { - case POWER_TOUCH: - return power_touch(on); - case POWER_3_TOUCHKEY: - return power_3_touchkey(on); - case POWER_LCD: - return power_lcd(on); - case POWER_HAPTIC: - return power_haptic(on); - case POWER_AUDIO_CODEC: - return power_audio_codec(on); - case POWER_FM_RADIO: - return power_fm_radio(on); - case POWER_BT_WIFI: - return power_bt_wifi(on); - case POWER_HDMI: - return power_hdmi(on); - default: - printf("I don't know device %d\n", device); - break; - } - return 0; -} - -static int power_on(int on) -{ - power_touch(on); - power_3_touchkey(on); - power_lcd(on); - power_haptic(on); - power_audio_codec(on); - power_fm_radio(on); - power_bt_wifi(on); - power_hdmi(on); - - return 0; -} - -static int do_power(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ - int device, on; - - if (!machine_is_aquila()) - goto out; - - switch (argc) { - case 2: - if (strncmp(argv[1], "on", 2) == 0) - return power_on(1); - if (strncmp(argv[1], "off", 3) == 0) - return power_on(0); - break; - case 3: - device = simple_strtoul(argv[1], NULL, 10); - if (device < 0) - break; - - if (strncmp(argv[2], "on", 2) == 0) - on = 1; - else if (strncmp(argv[2], "off", 3) == 0) - on = 0; - else - break; - return power_control(device, on); - default: - break; - } -out: - cmd_usage(cmdtp); - power_display_devices(); - return 1; -} - -U_BOOT_CMD( - power, CONFIG_SYS_MAXARGS, 1, do_power, - "Device Power Management control", - "device on/off - Turn on/off the device\n" -); -#endif diff --git a/board/samsung/p1p2/psi_ram.h b/board/samsung/p1p2/psi_ram.h deleted file mode 100644 index a9da4a0..0000000 --- a/board/samsung/p1p2/psi_ram.h +++ /dev/null @@ -1,941 +0,0 @@ -unsigned char g_tblBin[] = -{ - 0x87, 0x0d, 0x00, 0xea, 0x6c, 0x69, 0x48, 0x55, 0x01, 0xa0, 0xfe, 0xfd, 0x07, 0x00, 0x01, 0x00, - 0x00, 0xff, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x08, 0x00, 0xff, 0xff, 0xf7, 0xff, 0x00, 0x02, 0x08, 0x00, 0x43, 0x4a, 0x4b, 0x54, - 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, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 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, 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, 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, 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, - 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, 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, 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, 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, - 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, 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, 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, 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, - 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, 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, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xda, 0xfe, 0x02, - 0x0b, 0x04, 0x00, 0xea, 0x06, 0x0d, 0x00, 0xea, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 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, 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, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xea, 0x65, 0x06, 0x00, 0xea, 0x28, 0x00, 0x8f, 0xe2, 0x00, 0x0c, 0x90, 0xe8, - 0x00, 0xa0, 0x8a, 0xe0, 0x01, 0x70, 0x4a, 0xe2, 0x00, 0xb0, 0x8b, 0xe0, 0x0b, 0x00, 0x5a, 0xe1, - 0x5e, 0x06, 0x00, 0x0a, 0x0f, 0x00, 0xba, 0xe8, 0x14, 0xe0, 0x4f, 0xe2, 0x01, 0x00, 0x13, 0xe3, - 0x03, 0xf0, 0x47, 0x10, 0x03, 0xf0, 0xa0, 0xe1, 0xac, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x01, 0x20, 0x82, 0xe0, 0x01, 0x40, 0xd0, 0xe4, 0x0f, 0x50, 0x14, 0xe2, 0x01, 0x50, 0xd0, 0x04, - 0x24, 0x42, 0xb0, 0xe1, 0x01, 0x40, 0xd0, 0x04, 0x01, 0x50, 0x55, 0xe2, 0x03, 0x00, 0x00, 0x0a, - 0x01, 0x30, 0xd0, 0xe4, 0x01, 0x50, 0x55, 0xe2, 0x01, 0x30, 0xc1, 0xe4, 0xfb, 0xff, 0xff, 0x1a, - 0x01, 0x40, 0x54, 0xe2, 0x02, 0x00, 0x00, 0x0a, 0x01, 0x40, 0x54, 0xe2, 0x01, 0x50, 0xc1, 0xe4, - 0xfc, 0xff, 0xff, 0x1a, 0x02, 0x00, 0x51, 0xe1, 0xed, 0xff, 0xff, 0x3a, 0x0e, 0xf0, 0xa0, 0xe1, - 0x10, 0x20, 0x52, 0xe2, 0x78, 0x00, 0xb0, 0x28, 0x78, 0x00, 0xa1, 0x28, 0xfb, 0xff, 0xff, 0x8a, - 0x82, 0x2e, 0xb0, 0xe1, 0x30, 0x00, 0xb0, 0x28, 0x30, 0x00, 0xa1, 0x28, 0x00, 0x40, 0x90, 0x45, - 0x00, 0x40, 0x81, 0x45, 0x0e, 0xf0, 0xa0, 0xe1, 0x00, 0x30, 0xa0, 0xe3, 0x00, 0x40, 0xa0, 0xe3, - 0x00, 0x50, 0xa0, 0xe3, 0x00, 0x60, 0xa0, 0xe3, 0x10, 0x20, 0x52, 0xe2, 0x78, 0x00, 0xa1, 0x28, - 0xfc, 0xff, 0xff, 0x8a, 0x82, 0x2e, 0xb0, 0xe1, 0x30, 0x00, 0xa1, 0x28, 0x00, 0x30, 0x81, 0x45, - 0x0e, 0xf0, 0xa0, 0xe1, 0x3c, 0x39, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x90, 0x11, 0x08, 0x00, 0xb0, 0x39, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x00, 0x00, 0x00, - 0x90, 0x11, 0x08, 0x00, 0x80, 0x3a, 0x08, 0x00, 0x00, 0x30, 0xff, 0xff, 0x38, 0x06, 0x00, 0x00, - 0x40, 0x11, 0x08, 0x00, 0x3c, 0x39, 0x08, 0x00, 0x3c, 0x39, 0x08, 0x00, 0x40, 0x01, 0x00, 0x00, - 0xb8, 0x11, 0x08, 0x00, 0x9c, 0x3a, 0x08, 0x00, 0x38, 0x36, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, - 0xb8, 0x11, 0x08, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x00, 0xf0, 0x20, 0xe3, 0x1c, 0x10, 0x9f, 0xe5, - 0x78, 0x10, 0x91, 0xe5, 0x02, 0x11, 0x01, 0xe2, 0x02, 0x21, 0xa0, 0xe3, 0xa1, 0x0f, 0x82, 0xe1, - 0x08, 0x10, 0x9f, 0xe5, 0x78, 0x00, 0x81, 0xe5, 0x1d, 0x00, 0x00, 0xeb, 0x10, 0x80, 0xbd, 0xe8, - 0x00, 0x00, 0x90, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0xa0, 0xe3, - 0x00, 0x10, 0x80, 0xe5, 0x1a, 0x00, 0x00, 0xeb, 0x08, 0x00, 0x00, 0xeb, 0x10, 0x0f, 0x11, 0xee, - 0x01, 0x0a, 0xc0, 0xe3, 0x10, 0x0f, 0x01, 0xee, 0x00, 0x00, 0x0f, 0xe1, 0x80, 0x00, 0xc0, 0xe3, - 0x00, 0xf0, 0x21, 0xe1, 0x99, 0xff, 0xff, 0xea, 0xfe, 0xff, 0xff, 0xea, 0x7c, 0x00, 0x90, 0xe4, - 0x11, 0x0f, 0x19, 0xee, 0x20, 0x10, 0x9f, 0xe5, 0x01, 0x00, 0x80, 0xe1, 0x01, 0x00, 0x80, 0xe3, - 0x11, 0x0f, 0x09, 0xee, 0x31, 0x0f, 0x19, 0xee, 0x10, 0x10, 0x9f, 0xe5, 0x01, 0x00, 0x80, 0xe1, - 0x01, 0x00, 0x80, 0xe3, 0x31, 0x0f, 0x09, 0xee, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x30, 0xff, 0xff, - 0x00, 0x00, 0xff, 0xff, 0x10, 0x40, 0x2d, 0xe9, 0xb7, 0x01, 0x00, 0xeb, 0xe1, 0xff, 0xff, 0xeb, - 0x10, 0x80, 0xbd, 0xe8, 0x00, 0x10, 0x0f, 0xe1, 0xa4, 0x00, 0x9f, 0xe5, 0x07, 0x00, 0xc0, 0xe3, - 0x00, 0x20, 0x0f, 0xe1, 0x1f, 0x20, 0xc2, 0xe3, 0x12, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, - 0x00, 0xd0, 0xa0, 0xe1, 0x88, 0x00, 0x9f, 0xe5, 0x07, 0x00, 0xc0, 0xe3, 0x00, 0x20, 0x0f, 0xe1, - 0x1f, 0x20, 0xc2, 0xe3, 0x11, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, 0x00, 0xd0, 0xa0, 0xe1, - 0x70, 0x00, 0x9f, 0xe5, 0x07, 0x00, 0xc0, 0xe3, 0x00, 0x20, 0x0f, 0xe1, 0x1f, 0x20, 0xc2, 0xe3, - 0x1b, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, 0x00, 0xd0, 0xa0, 0xe1, 0x58, 0x00, 0x9f, 0xe5, - 0x00, 0x20, 0x0f, 0xe1, 0x1f, 0x20, 0xc2, 0xe3, 0x17, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, - 0x00, 0xd0, 0xa0, 0xe1, 0x44, 0x00, 0x9f, 0xe5, 0x07, 0x00, 0xc0, 0xe3, 0x00, 0x20, 0x0f, 0xe1, - 0x1f, 0x20, 0xc2, 0xe3, 0x13, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, 0x00, 0xd0, 0xa0, 0xe1, - 0x2c, 0x00, 0x9f, 0xe5, 0x07, 0x00, 0xc0, 0xe3, 0x00, 0x20, 0x0f, 0xe1, 0x1f, 0x20, 0xc2, 0xe3, - 0x1f, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, 0x00, 0xd0, 0xa0, 0xe1, 0x01, 0xf0, 0x2f, 0xe1, - 0x1e, 0xff, 0x2f, 0xe1, 0x80, 0xd2, 0x09, 0x00, 0x00, 0xe4, 0x09, 0x00, 0x00, 0xd1, 0x09, 0x00, - 0x80, 0xe2, 0x09, 0x00, 0x00, 0xe3, 0x09, 0x00, 0x04, 0x30, 0x9f, 0xe5, 0x03, 0x30, 0x8f, 0xe0, - 0x03, 0xf0, 0xa0, 0xe1, 0x7c, 0x22, 0x00, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x77, 0x02, 0x00, 0xeb, - 0xb0, 0x04, 0x00, 0xeb, 0x10, 0x80, 0xbd, 0xe8, 0x77, 0x40, 0x2d, 0xe9, 0x04, 0xd0, 0x4d, 0xe2, - 0x01, 0x50, 0xa0, 0xe1, 0x02, 0x40, 0xa0, 0xe1, 0x04, 0x00, 0xdd, 0xe5, 0x04, 0x00, 0x50, 0xe3, - 0x04, 0x00, 0x00, 0xba, 0x04, 0x00, 0xdd, 0xe5, 0xc6, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x00, 0xca, - 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x50, 0xe3, - 0x09, 0x00, 0x00, 0x1a, 0x97, 0x3f, 0x8f, 0xe2, 0x00, 0x30, 0x8d, 0xe5, 0x81, 0x30, 0xa0, 0xe3, - 0x04, 0x20, 0x8d, 0xe2, 0x01, 0x10, 0xa0, 0xe3, 0x74, 0x02, 0x9f, 0xe5, 0xad, 0x03, 0x00, 0xeb, - 0x01, 0x00, 0xe0, 0xe3, 0x10, 0xd0, 0x8d, 0xe2, 0x70, 0x80, 0xbd, 0xe8, 0x00, 0x00, 0x54, 0xe3, - 0x03, 0x00, 0x00, 0x0a, 0x5c, 0x02, 0x9f, 0xe5, 0x04, 0x10, 0xdd, 0xe5, 0x81, 0x01, 0x90, 0xe7, - 0x00, 0x00, 0x84, 0xe5, 0x4c, 0x02, 0x9f, 0xe5, 0x04, 0x10, 0xdd, 0xe5, 0x81, 0x51, 0x80, 0xe7, - 0x00, 0x00, 0xa0, 0xe3, 0xf2, 0xff, 0xff, 0xea, 0x11, 0x40, 0x2d, 0xe9, 0x04, 0xd0, 0x4d, 0xe2, - 0x04, 0x00, 0xdd, 0xe5, 0x04, 0x00, 0x50, 0xe3, 0x04, 0x00, 0x00, 0xba, 0x04, 0x00, 0xdd, 0xe5, - 0xc6, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x00, 0xca, 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, - 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x50, 0xe3, 0x08, 0x00, 0x00, 0x1a, 0x75, 0x3f, 0x8f, 0xe2, - 0x00, 0x30, 0x8d, 0xe5, 0xc4, 0x30, 0xa0, 0xe3, 0x04, 0x20, 0x8d, 0xe2, 0x01, 0x10, 0xa0, 0xe3, - 0xec, 0x01, 0x9f, 0xe5, 0x8b, 0x03, 0x00, 0xeb, 0x01, 0x00, 0xe0, 0xe3, 0x1c, 0x80, 0xbd, 0xe8, - 0x01, 0x00, 0xa0, 0xe3, 0xdc, 0x11, 0x9f, 0xe5, 0x04, 0x20, 0xdd, 0xe5, 0x82, 0x11, 0x81, 0xe0, - 0x04, 0x00, 0xc1, 0xe5, 0x04, 0x00, 0xdd, 0xe5, 0xc8, 0x21, 0x9f, 0xe5, 0x80, 0x21, 0x82, 0xe0, - 0x05, 0x10, 0xd2, 0xe5, 0xc0, 0x21, 0x9f, 0xe5, 0x00, 0x11, 0x82, 0xe7, 0x00, 0xf0, 0x20, 0xe3, - 0xb8, 0x01, 0x9f, 0xe5, 0x00, 0x00, 0x90, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0x08, 0x00, 0x00, 0x1a, - 0x00, 0xf0, 0x20, 0xe3, 0x50, 0x00, 0x42, 0xe2, 0x80, 0x04, 0x90, 0xe5, 0x01, 0x00, 0x80, 0xe3, - 0x50, 0x10, 0x42, 0xe2, 0x80, 0x04, 0x81, 0xe5, 0x01, 0x00, 0xa0, 0xe3, 0x8c, 0x11, 0x9f, 0xe5, - 0x00, 0x00, 0x81, 0xe5, 0x00, 0x00, 0xa0, 0xe3, 0xe3, 0xff, 0xff, 0xea, 0x11, 0x40, 0x2d, 0xe9, - 0x04, 0xd0, 0x4d, 0xe2, 0x04, 0x00, 0xdd, 0xe5, 0x04, 0x00, 0x50, 0xe3, 0x04, 0x00, 0x00, 0xba, - 0x04, 0x00, 0xdd, 0xe5, 0xc6, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x00, 0xca, 0x01, 0x00, 0xa0, 0xe3, - 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x50, 0xe3, 0x08, 0x00, 0x00, 0x1a, - 0x11, 0x3e, 0x8f, 0xe2, 0x00, 0x30, 0x8d, 0xe5, 0xde, 0x30, 0xa0, 0xe3, 0x04, 0x20, 0x8d, 0xe2, - 0x01, 0x10, 0xa0, 0xe3, 0x28, 0x01, 0x9f, 0xe5, 0x5a, 0x03, 0x00, 0xeb, 0x01, 0x00, 0xe0, 0xe3, - 0x1c, 0x80, 0xbd, 0xe8, 0x00, 0x00, 0xa0, 0xe3, 0x18, 0x11, 0x9f, 0xe5, 0x04, 0x20, 0xdd, 0xe5, - 0x82, 0x11, 0x81, 0xe0, 0x04, 0x00, 0xc1, 0xe5, 0x04, 0x00, 0xdd, 0xe5, 0x08, 0x11, 0x9f, 0xe5, - 0x00, 0x20, 0xa0, 0xe3, 0x00, 0x21, 0x81, 0xe7, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0xa0, 0xe3, - 0xf2, 0xff, 0xff, 0xea, 0x77, 0x40, 0x2d, 0xe9, 0x04, 0xd0, 0x4d, 0xe2, 0x01, 0x40, 0xa0, 0xe1, - 0x02, 0x50, 0xa0, 0xe1, 0x04, 0x00, 0xdd, 0xe5, 0x04, 0x00, 0x50, 0xe3, 0x04, 0x00, 0x00, 0xba, - 0x04, 0x00, 0xdd, 0xe5, 0xc6, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x00, 0xca, 0x01, 0x00, 0xa0, 0xe3, - 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x50, 0xe3, 0x08, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x54, 0xe3, 0x03, 0x00, 0x00, 0xba, 0x0f, 0x00, 0x54, 0xe3, 0x01, 0x00, 0x00, 0xca, - 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x50, 0xe3, - 0x09, 0x00, 0x00, 0x1a, 0x5c, 0x30, 0x8f, 0xe2, 0x00, 0x30, 0x8d, 0xe5, 0xa7, 0x30, 0xa0, 0xe3, - 0x04, 0x20, 0x8d, 0xe2, 0x01, 0x10, 0xa0, 0xe3, 0x74, 0x00, 0x9f, 0xe5, 0x2d, 0x03, 0x00, 0xeb, - 0x01, 0x00, 0xe0, 0xe3, 0x10, 0xd0, 0x8d, 0xe2, 0x70, 0x80, 0xbd, 0xe8, 0x00, 0x00, 0x55, 0xe3, - 0x04, 0x00, 0x00, 0x0a, 0x5c, 0x00, 0x9f, 0xe5, 0x04, 0x10, 0xdd, 0xe5, 0x81, 0x01, 0x80, 0xe0, - 0x05, 0x00, 0xd0, 0xe5, 0x00, 0x00, 0x85, 0xe5, 0x00, 0x00, 0x54, 0xe3, 0x02, 0x00, 0x00, 0x1a, - 0x04, 0x00, 0xdd, 0xe5, 0xb0, 0xff, 0xff, 0xeb, 0xf1, 0xff, 0xff, 0xea, 0x04, 0x00, 0xdd, 0xe5, - 0x7c, 0xff, 0xff, 0xeb, 0xee, 0xff, 0xff, 0xea, 0x64, 0x77, 0x64, 0x74, 0x6f, 0x6f, 0x6c, 0x73, - 0x72, 0x63, 0x5c, 0x62, 0x6f, 0x6f, 0x74, 0x63, 0x6f, 0x72, 0x65, 0x5c, 0x64, 0x72, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x5c, 0x49, 0x63, 0x75, 0x5c, 0x73, 0x72, 0x63, 0x5c, 0x69, 0x63, 0x75, 0x2e, - 0x63, 0x00, 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0x50, 0x00, 0x00, 0xe0, - 0x38, 0x36, 0xff, 0xff, 0x00, 0xf0, 0x20, 0xe3, 0x28, 0x02, 0x9f, 0xe5, 0x88, 0x04, 0x90, 0xe5, - 0x0f, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0xa0, 0xe3, - 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0xa0, 0xe3, - 0x1e, 0xff, 0x2f, 0xe1, 0xf3, 0x40, 0x2d, 0xe9, 0x04, 0xd0, 0x4d, 0xe2, 0x01, 0x40, 0xa0, 0xe1, - 0x04, 0x00, 0xdd, 0xe5, 0x04, 0x00, 0x50, 0xe3, 0x04, 0x00, 0x00, 0xba, 0x04, 0x00, 0xdd, 0xe5, - 0xc6, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x00, 0xca, 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, - 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x50, 0xe3, 0x08, 0x00, 0x00, 0x1a, 0xac, 0x30, 0x4f, 0xe2, - 0x00, 0x30, 0x8d, 0xe5, 0x45, 0x3f, 0xa0, 0xe3, 0x04, 0x20, 0x8d, 0xe2, 0x01, 0x10, 0xa0, 0xe3, - 0x94, 0x00, 0x1f, 0xe5, 0xeb, 0x02, 0x00, 0xeb, 0x01, 0x00, 0xe0, 0xe3, 0xfe, 0x80, 0xbd, 0xe8, - 0x04, 0x20, 0xdd, 0xe5, 0x00, 0x00, 0x54, 0xe3, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0xa0, 0xe3, - 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0xc0, 0xa0, 0xe1, 0x84, 0x01, 0x9f, 0xe5, - 0xa2, 0x12, 0xa0, 0xe1, 0x1f, 0x30, 0x02, 0xe2, 0x00, 0x00, 0x5c, 0xe3, 0x04, 0x00, 0x00, 0x0a, - 0x01, 0xe1, 0x90, 0xe7, 0x01, 0x50, 0xa0, 0xe3, 0x15, 0xe3, 0x8e, 0xe1, 0x01, 0xe1, 0x80, 0xe7, - 0x04, 0x00, 0x00, 0xea, 0x01, 0xe1, 0x90, 0xe7, 0x01, 0x50, 0xa0, 0xe3, 0x15, 0x53, 0xe0, 0xe1, - 0x05, 0xe0, 0x0e, 0xe0, 0x01, 0xe1, 0x80, 0xe7, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0xa0, 0xe3, 0xe4, 0xff, 0xff, 0xea, 0x00, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, - 0x10, 0x40, 0x2d, 0xe9, 0x04, 0x40, 0xa0, 0xe3, 0x08, 0x00, 0x00, 0xea, 0x1c, 0x01, 0x1f, 0xe5, - 0x84, 0x01, 0x80, 0xe0, 0x04, 0x00, 0xd0, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x00, 0x0a, - 0x04, 0x00, 0xa0, 0xe1, 0x23, 0xff, 0xff, 0xeb, 0x01, 0x00, 0x84, 0xe2, 0xff, 0x40, 0x00, 0xe2, - 0xc6, 0x00, 0x54, 0xe3, 0xf4, 0xff, 0xff, 0xda, 0x40, 0x01, 0x1f, 0xe5, 0x00, 0x00, 0x90, 0xe5, - 0x00, 0x00, 0x50, 0xe3, 0x06, 0x00, 0x00, 0x0a, 0x00, 0xf0, 0x20, 0xe3, 0xe4, 0x00, 0x9f, 0xe5, - 0x80, 0x04, 0x90, 0xe5, 0x01, 0x00, 0x80, 0xe3, 0xd8, 0x10, 0x9f, 0xe5, 0x80, 0x04, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0xa0, 0xe3, 0x10, 0x80, 0xbd, 0xe8, 0x00, 0x10, 0xa0, 0xe1, - 0x00, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, 0x71, 0x40, 0x2d, 0xe9, 0x04, 0xd0, 0x4d, 0xe2, - 0x00, 0x40, 0xa0, 0xe3, 0x04, 0x00, 0xdd, 0xe5, 0x0f, 0x00, 0x50, 0xe3, 0x07, 0x00, 0x00, 0xda, - 0x1d, 0x3e, 0x4f, 0xe2, 0x00, 0x30, 0x8d, 0xe5, 0x9c, 0x30, 0x9f, 0xe5, 0x04, 0x20, 0x8d, 0xe2, - 0x01, 0x10, 0xa0, 0xe3, 0xb8, 0x01, 0x1f, 0xe5, 0xa2, 0x02, 0x00, 0xeb, 0x10, 0x00, 0x00, 0xea, - 0x34, 0x03, 0x00, 0xeb, 0x00, 0x50, 0xa0, 0xe1, 0x00, 0xf0, 0x20, 0xe3, 0x74, 0x00, 0x9f, 0xe5, - 0x70, 0x04, 0x90, 0xe5, 0x0f, 0x00, 0x00, 0xe2, 0x00, 0x40, 0xa0, 0xe1, 0x04, 0x00, 0xdd, 0xe5, - 0x60, 0x10, 0x9f, 0xe5, 0x70, 0x14, 0x91, 0xe5, 0x0f, 0x10, 0xc1, 0xe3, 0x0f, 0x20, 0x00, 0xe2, - 0x02, 0x10, 0x81, 0xe1, 0x4c, 0x20, 0x9f, 0xe5, 0x70, 0x14, 0x82, 0xe5, 0x05, 0x00, 0xa0, 0xe1, - 0x30, 0x03, 0x00, 0xeb, 0x04, 0x00, 0xa0, 0xe1, 0x7c, 0x80, 0xbd, 0xe8, 0x00, 0x00, 0xa0, 0xe3, - 0x00, 0x00, 0x0f, 0xe1, 0xa0, 0x03, 0xe0, 0xe1, 0x01, 0x00, 0x00, 0xe2, 0x1e, 0xff, 0x2f, 0xe1, - 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0x0f, 0xe1, 0x80, 0x10, 0x80, 0xe3, - 0x01, 0xf0, 0x21, 0xe1, 0xa0, 0x03, 0xe0, 0xe1, 0x01, 0x00, 0x00, 0xe2, 0x00, 0x10, 0xa0, 0xe1, - 0x01, 0x00, 0xa0, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x00, 0xe0, 0x7b, 0x01, 0x00, 0x00, - 0x00, 0xf0, 0x20, 0xe3, 0x80, 0x32, 0x9f, 0xe5, 0x24, 0x30, 0x93, 0xe5, 0x03, 0x10, 0xa0, 0xe1, - 0x00, 0xf0, 0x20, 0xe3, 0x70, 0x32, 0x9f, 0xe5, 0x24, 0x30, 0x93, 0xe5, 0x01, 0x30, 0x03, 0xe2, - 0x00, 0x00, 0x53, 0xe3, 0x03, 0x00, 0x00, 0x0a, 0x00, 0xf0, 0x20, 0xe3, 0x58, 0x32, 0x9f, 0xe5, - 0x2c, 0x00, 0x93, 0xe5, 0x03, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x48, 0x32, 0x9f, 0xe5, - 0x28, 0x00, 0x93, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0xff, 0x3c, 0xc1, 0xe3, 0xfe, 0x30, 0xc3, 0xe3, - 0x0c, 0xc0, 0x00, 0xe2, 0x0c, 0x30, 0x83, 0xe1, 0xf0, 0x20, 0x83, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x24, 0x32, 0x9f, 0xe5, 0x24, 0x20, 0x83, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, 0x10, 0x40, 0x2d, 0xe9, - 0xe2, 0xff, 0xff, 0xeb, 0x00, 0xf0, 0x20, 0xe3, 0x0c, 0x02, 0x9f, 0xe5, 0x24, 0x00, 0x90, 0xe5, - 0x00, 0x40, 0xa0, 0xe1, 0x74, 0x40, 0xff, 0xe6, 0xf0, 0x40, 0x84, 0xe3, 0x02, 0x40, 0x84, 0xe3, - 0x01, 0x40, 0xc4, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0xec, 0x01, 0x9f, 0xe5, 0x24, 0x40, 0x80, 0xe5, - 0x10, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0x2d, 0xe9, 0xd4, 0xff, 0xff, 0xeb, 0x00, 0xf0, 0x20, 0xe3, - 0xd4, 0x01, 0x9f, 0xe5, 0x24, 0x00, 0x90, 0xe5, 0x00, 0x40, 0xa0, 0xe1, 0x74, 0x40, 0xff, 0xe6, - 0xf0, 0x40, 0x84, 0xe3, 0x02, 0x40, 0x84, 0xe3, 0x01, 0x40, 0x84, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0xb4, 0x01, 0x9f, 0xe5, 0x24, 0x40, 0x80, 0xe5, 0x10, 0x80, 0xbd, 0xe8, 0x04, 0xe0, 0x2d, 0xe5, - 0xe1, 0xff, 0xff, 0xeb, 0x00, 0xf0, 0x20, 0xe3, 0x9c, 0x01, 0x9f, 0xe5, 0x28, 0x00, 0x90, 0xe5, - 0x04, 0x00, 0xc0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x04, 0x20, 0xa0, 0xe3, 0x01, 0x11, 0x02, 0xe0, - 0x01, 0x00, 0x80, 0xe1, 0x80, 0x11, 0x9f, 0xe5, 0x28, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x81, 0xe2, 0x28, 0x00, 0x90, 0xe5, 0x08, 0x00, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, - 0x08, 0x20, 0xa0, 0xe3, 0x81, 0x11, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x58, 0x11, 0x9f, 0xe5, - 0x28, 0x00, 0x81, 0xe5, 0xda, 0xff, 0xff, 0xeb, 0x04, 0xf0, 0x9d, 0xe4, 0x00, 0xf0, 0x20, 0xe3, - 0x44, 0x01, 0x9f, 0xe5, 0x60, 0x00, 0x90, 0xe5, 0x00, 0x08, 0xa0, 0xe1, 0x20, 0x0c, 0xa0, 0xe1, - 0x1e, 0xff, 0x2f, 0xe1, 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x50, 0xa0, 0xe1, 0x01, 0x40, 0xa0, 0xe1, - 0x00, 0x60, 0xa0, 0xe3, 0x01, 0x00, 0x55, 0xe3, 0x04, 0x00, 0x00, 0x0a, 0x02, 0x00, 0x55, 0xe3, - 0x05, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x55, 0xe3, 0x09, 0x00, 0x00, 0x1a, 0x05, 0x00, 0x00, 0xea, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x07, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, - 0x02, 0x62, 0x86, 0xe3, 0x04, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x03, 0x62, 0x86, 0xe3, - 0x01, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x01, 0x00, 0x14, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x60, 0x86, 0xe3, 0x02, 0x00, 0x14, 0xe3, - 0x00, 0x00, 0x00, 0x0a, 0x08, 0x60, 0x86, 0xe3, 0x04, 0x00, 0x14, 0xe3, 0x00, 0x00, 0x00, 0x0a, - 0x04, 0x60, 0x86, 0xe3, 0x08, 0x00, 0x14, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x60, 0x86, 0xe3, - 0x98, 0x02, 0x00, 0xeb, 0xa0, 0xff, 0xff, 0xeb, 0x00, 0xf0, 0x20, 0xe3, 0x98, 0x00, 0x9f, 0xe5, - 0x14, 0x60, 0x80, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0xfe, 0xff, 0xff, 0xea, 0x10, 0x40, 0x2d, 0xe9, - 0x0f, 0x40, 0xa0, 0xe3, 0x04, 0x10, 0xa0, 0xe1, 0x01, 0x00, 0xa0, 0xe3, 0xd0, 0xff, 0xff, 0xeb, - 0x10, 0x80, 0xbd, 0xe8, 0x00, 0xf0, 0x20, 0xe3, 0x6c, 0x00, 0x9f, 0xe5, 0x18, 0x07, 0x90, 0xe5, - 0x03, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x50, 0xe3, 0x05, 0x00, 0x00, 0x0a, 0x00, 0xf0, 0x20, 0xe3, - 0x54, 0x00, 0x9f, 0xe5, 0x18, 0x07, 0x90, 0xe5, 0x03, 0x00, 0x00, 0xe2, 0x03, 0x00, 0x50, 0xe3, - 0x01, 0x00, 0x00, 0x1a, 0x01, 0x00, 0xa0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0xa0, 0xe3, - 0xfc, 0xff, 0xff, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x2c, 0x00, 0x9f, 0xe5, 0x78, 0x00, 0x90, 0xe5, - 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0xf0, 0x20, 0xe3, 0x1c, 0x10, 0x9f, 0xe5, 0x78, 0x00, 0x81, 0xe5, - 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0xf0, 0x20, 0xe3, 0x0c, 0x00, 0x9f, 0xe5, 0x10, 0x00, 0x90, 0xe5, - 0x00, 0x06, 0xa0, 0xe1, 0x20, 0x0e, 0xa0, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x90, 0xe4, - 0x00, 0xf0, 0x20, 0xe3, 0x48, 0x01, 0x9f, 0xe5, 0x00, 0x00, 0x90, 0xe5, 0x01, 0x0c, 0x50, 0xe3, - 0x04, 0x00, 0x00, 0x0a, 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x0c, 0xa0, 0xe3, 0x30, 0x11, 0x9f, 0xe5, - 0x00, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0xf0, 0x20, 0xe3, - 0x03, 0x00, 0xa0, 0xe3, 0x18, 0x11, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, - 0x70, 0x40, 0x2d, 0xe9, 0x00, 0xf0, 0x20, 0xe3, 0x04, 0x01, 0x9f, 0xe5, 0x24, 0x00, 0x90, 0xe5, - 0x00, 0x50, 0xa0, 0xe1, 0xfc, 0x10, 0x9f, 0xe5, 0xf3, 0x04, 0x00, 0xeb, 0x00, 0x40, 0xa0, 0xe1, - 0xf4, 0x00, 0x9f, 0xe5, 0x08, 0x00, 0x90, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0x0b, 0x00, 0x00, 0x0a, - 0xe4, 0x00, 0x9f, 0xe5, 0x04, 0x00, 0x90, 0xe5, 0x04, 0x00, 0x50, 0xe1, 0x03, 0x00, 0x00, 0x8a, - 0xd4, 0x00, 0x9f, 0xe5, 0x00, 0x00, 0x90, 0xe5, 0x04, 0x00, 0x50, 0xe1, 0x01, 0x00, 0x00, 0x8a, - 0x00, 0x00, 0xa0, 0xe3, 0x70, 0x80, 0xbd, 0xe8, 0x01, 0x00, 0xa0, 0xe3, 0xfc, 0xff, 0xff, 0xea, - 0xb4, 0x00, 0x9f, 0xe5, 0x04, 0x00, 0x90, 0xe5, 0x04, 0x00, 0x50, 0xe1, 0x01, 0x00, 0x00, 0x9a, - 0x00, 0x00, 0xa0, 0xe3, 0xf6, 0xff, 0xff, 0xea, 0x01, 0x00, 0xa0, 0xe3, 0xf4, 0xff, 0xff, 0xea, - 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0xcc, 0xff, 0xff, 0xeb, 0x00, 0xf0, 0x20, 0xe3, - 0x7c, 0x00, 0x9f, 0xe5, 0x24, 0x00, 0x90, 0xe5, 0x00, 0x50, 0xa0, 0xe1, 0x74, 0x10, 0x9f, 0xe5, - 0xd1, 0x04, 0x00, 0xeb, 0x70, 0x10, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x00, 0x00, 0x81, 0xe2, - 0x00, 0x00, 0x90, 0xe5, 0x04, 0x00, 0x80, 0xe0, 0x04, 0x00, 0x81, 0xe5, 0x00, 0x00, 0x81, 0xe2, - 0x04, 0x00, 0x90, 0xe5, 0x00, 0x10, 0x91, 0xe5, 0x01, 0x00, 0x50, 0xe1, 0x03, 0x00, 0x00, 0x9a, - 0x00, 0x00, 0xa0, 0xe3, 0x40, 0x10, 0x9f, 0xe5, 0x08, 0x00, 0x81, 0xe5, 0x02, 0x00, 0x00, 0xea, - 0x01, 0x00, 0xa0, 0xe3, 0x30, 0x10, 0x9f, 0xe5, 0x08, 0x00, 0x81, 0xe5, 0x70, 0x80, 0xbd, 0xe8, - 0x10, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x04, 0x00, 0xa0, 0xe1, 0xdf, 0xff, 0xff, 0xeb, - 0x00, 0xf0, 0x20, 0xe3, 0xbd, 0xff, 0xff, 0xeb, 0x00, 0x00, 0x50, 0xe3, 0xfc, 0xff, 0xff, 0x0a, - 0x10, 0x80, 0xbd, 0xe8, 0x00, 0x00, 0x50, 0xe4, 0x59, 0x06, 0x00, 0x00, 0x3c, 0x39, 0x08, 0x00, - 0x10, 0x40, 0x2d, 0xe9, 0x86, 0xff, 0xff, 0xeb, 0x10, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0x2d, 0xe9, - 0x93, 0xff, 0xff, 0xeb, 0x00, 0x40, 0xa0, 0xe1, 0x07, 0x00, 0xa0, 0xe3, 0x24, 0x0e, 0x00, 0xe0, - 0x10, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe3, 0x8c, 0xff, 0xff, 0xeb, - 0x00, 0x40, 0xa0, 0xe1, 0x0e, 0x46, 0xc4, 0xe3, 0x04, 0x00, 0xa0, 0xe1, 0x8c, 0xff, 0xff, 0xeb, - 0x10, 0x80, 0xbd, 0xe8, 0xf0, 0x41, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x50, 0xa0, 0xe3, - 0x00, 0x70, 0xa0, 0xe3, 0x04, 0x60, 0xa0, 0xe1, 0x06, 0x40, 0xa0, 0xe1, 0x07, 0x60, 0x06, 0xe2, - 0x7f, 0xff, 0xff, 0xeb, 0x00, 0x50, 0xa0, 0xe1, 0x0e, 0x56, 0xc5, 0xe3, 0x86, 0x7a, 0x85, 0xe1, - 0x07, 0x00, 0xa0, 0xe1, 0x7e, 0xff, 0xff, 0xeb, 0xf0, 0x81, 0xbd, 0xe8, 0x70, 0x40, 0x2d, 0xe9, - 0x00, 0x50, 0xa0, 0xe3, 0x00, 0x40, 0xa0, 0xe3, 0x75, 0xff, 0xff, 0xeb, 0x00, 0x50, 0xa0, 0xe1, - 0x07, 0x00, 0xa0, 0xe3, 0xa5, 0x4a, 0x00, 0xe0, 0x04, 0x00, 0xa0, 0xe1, 0x70, 0x80, 0xbd, 0xe8, - 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x50, 0xa0, 0xe3, 0x00, 0x40, 0xa0, 0xe3, 0x6c, 0xff, 0xff, 0xeb, - 0x00, 0x50, 0xa0, 0xe1, 0x07, 0x00, 0xa0, 0xe3, 0x25, 0x4e, 0x00, 0xe0, 0x04, 0x00, 0xa0, 0xe1, - 0x70, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0x2d, 0xe9, 0x4f, 0xff, 0xff, 0xeb, 0x10, 0x80, 0xbd, 0xe8, - 0x10, 0x40, 0x2d, 0xe9, 0x25, 0x05, 0x00, 0xeb, 0xa1, 0x04, 0x00, 0xeb, 0x10, 0x80, 0xbd, 0xe8, - 0x10, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe3, 0x65, 0xff, 0xff, 0xeb, 0x01, 0x00, 0x50, 0xe3, - 0x04, 0x00, 0x00, 0x0a, 0x02, 0x00, 0x50, 0xe3, 0x0c, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x50, 0xe3, - 0x1e, 0x00, 0x00, 0x1a, 0x13, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x8c, 0x00, 0x9f, 0xe5, 0x10, 0x00, 0x90, 0xe5, 0x00, 0x09, 0xa0, 0xe1, 0xa0, 0x0f, 0xa0, 0xe1, - 0x00, 0x00, 0x50, 0xe3, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x40, 0xa0, 0xe3, 0x16, 0x00, 0x00, 0xea, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x64, 0x00, 0x9f, 0xe5, 0x10, 0x00, 0x90, 0xe5, - 0x00, 0x09, 0xa0, 0xe1, 0xa0, 0x0f, 0xa0, 0xe1, 0x01, 0x00, 0x50, 0xe3, 0x00, 0x00, 0x00, 0x1a, - 0x02, 0x40, 0xa0, 0xe3, 0x0c, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x3c, 0x00, 0x9f, 0xe5, 0x10, 0x00, 0x90, 0xe5, 0x00, 0x09, 0xa0, 0xe1, 0xa0, 0x0f, 0xa0, 0xe1, - 0x00, 0x00, 0x50, 0xe3, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x40, 0xa0, 0xe3, 0x02, 0x00, 0x00, 0xea, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x40, 0xa0, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x04, 0x00, 0xa0, 0xe1, 0x10, 0x80, 0xbd, 0xe8, 0x00, 0x20, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe3, - 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x00, 0xe8, 0x00, 0xf0, 0x20, 0xe3, 0xfe, 0xff, 0xff, 0xea, - 0x00, 0xf0, 0x20, 0xe3, 0xfe, 0xff, 0xff, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0xfe, 0xff, 0xff, 0xea, - 0x00, 0xf0, 0x20, 0xe3, 0xfe, 0xff, 0xff, 0xea, 0xff, 0x20, 0xa0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, - 0x00, 0x00, 0x50, 0xe3, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xea, 0x01, 0x10, 0x81, 0xe2, - 0x00, 0x00, 0x52, 0xe3, 0xfc, 0xff, 0xff, 0xca, 0x01, 0x20, 0xa0, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, - 0x10, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x04, 0x00, 0xa0, 0xe1, 0xf1, 0xff, 0xff, 0xeb, - 0x10, 0x80, 0xbd, 0xe8, 0x3f, 0x40, 0x2d, 0xe9, 0x00, 0xe0, 0xa0, 0xe1, 0x01, 0xc0, 0xa0, 0xe1, - 0x02, 0x40, 0xa0, 0xe1, 0x03, 0x50, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x8d, 0xe5, - 0x04, 0xc0, 0x8d, 0xe5, 0x08, 0x00, 0x8d, 0xe5, 0x0c, 0x00, 0x8d, 0xe5, 0x0f, 0x00, 0x9d, 0xe8, - 0x10, 0xd0, 0x8d, 0xe2, 0x30, 0x80, 0xbd, 0xe8, 0x04, 0xe0, 0x2d, 0xe5, 0x00, 0xc0, 0xa0, 0xe1, - 0x00, 0x00, 0xe0, 0xe3, 0x05, 0x00, 0x51, 0xe3, 0x01, 0xf1, 0x8f, 0x90, 0x17, 0x00, 0x00, 0xea, - 0x04, 0x00, 0x00, 0xea, 0x06, 0x00, 0x00, 0xea, 0x08, 0x00, 0x00, 0xea, 0x0d, 0x00, 0x00, 0xea, - 0x0f, 0x00, 0x00, 0xea, 0x08, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0xe0, 0xe3, - 0x10, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0xe0, 0xe3, 0x0d, 0x00, 0x00, 0xea, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0xe0, 0xe3, 0x0a, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0xe0, 0xe3, 0x07, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0xe0, 0xe3, - 0x04, 0x00, 0x00, 0xea, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0xe0, 0xe3, 0x01, 0x00, 0x00, 0xea, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x04, 0xf0, 0x9d, 0xe4, - 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x50, 0xe0, 0xe3, 0x0c, 0x00, 0x94, 0xe5, - 0x00, 0x00, 0x50, 0xe3, 0x02, 0x00, 0x00, 0x0a, 0x0c, 0x00, 0x94, 0xe5, 0x30, 0xff, 0x2f, 0xe1, - 0x00, 0x50, 0xa0, 0xe1, 0x05, 0x00, 0xa0, 0xe1, 0x70, 0x80, 0xbd, 0xe8, 0xf0, 0x41, 0x2d, 0xe9, - 0x00, 0x40, 0xa0, 0xe1, 0x01, 0x60, 0xa0, 0xe1, 0x02, 0x70, 0xa0, 0xe1, 0x03, 0x80, 0xa0, 0xe1, - 0x00, 0x50, 0xe0, 0xe3, 0x10, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0x05, 0x00, 0x00, 0x0a, - 0x08, 0x20, 0xa0, 0xe1, 0x07, 0x10, 0xa0, 0xe1, 0x06, 0x00, 0xa0, 0xe1, 0x10, 0x30, 0x94, 0xe5, - 0x33, 0xff, 0x2f, 0xe1, 0x00, 0x50, 0xa0, 0xe1, 0x05, 0x00, 0xa0, 0xe1, 0xf0, 0x81, 0xbd, 0xe8, - 0xf0, 0x41, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x01, 0x60, 0xa0, 0xe1, 0x02, 0x70, 0xa0, 0xe1, - 0x03, 0x80, 0xa0, 0xe1, 0x00, 0x50, 0xe0, 0xe3, 0x14, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, - 0x05, 0x00, 0x00, 0x0a, 0x08, 0x20, 0xa0, 0xe1, 0x07, 0x10, 0xa0, 0xe1, 0x06, 0x00, 0xa0, 0xe1, - 0x14, 0x30, 0x94, 0xe5, 0x33, 0xff, 0x2f, 0xe1, 0x00, 0x50, 0xa0, 0xe1, 0x05, 0x00, 0xa0, 0xe1, - 0xf0, 0x81, 0xbd, 0xe8, 0xf0, 0x41, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x01, 0x60, 0xa0, 0xe1, - 0x02, 0x70, 0xa0, 0xe1, 0x00, 0x50, 0xe0, 0xe3, 0x18, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, - 0x04, 0x00, 0x00, 0x0a, 0x07, 0x10, 0xa0, 0xe1, 0x06, 0x00, 0xa0, 0xe1, 0x18, 0x20, 0x94, 0xe5, - 0x32, 0xff, 0x2f, 0xe1, 0x00, 0x50, 0xa0, 0xe1, 0x05, 0x00, 0xa0, 0xe1, 0xf0, 0x81, 0xbd, 0xe8, - 0x10, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x1c, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, - 0x01, 0x00, 0x00, 0x0a, 0x1c, 0x00, 0x94, 0xe5, 0x30, 0xff, 0x2f, 0xe1, 0x10, 0x80, 0xbd, 0xe8, - 0x10, 0x40, 0x2d, 0xe9, 0x70, 0x10, 0xa0, 0xe3, 0xc8, 0x01, 0x9f, 0xe5, 0xa4, 0x01, 0x00, 0xeb, - 0x00, 0x00, 0xa0, 0xe3, 0x10, 0x80, 0xbd, 0xe8, 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x20, 0xa0, 0xe1, - 0x00, 0xc0, 0xa0, 0xe3, 0x00, 0x30, 0xa0, 0xe3, 0x00, 0xe0, 0xa0, 0xe3, 0x00, 0x00, 0xe0, 0xe3, - 0xff, 0x40, 0xa0, 0xe3, 0x04, 0x50, 0x92, 0xe5, 0x01, 0x00, 0x55, 0xe1, 0x20, 0x00, 0x00, 0x3a, - 0x04, 0xe0, 0x92, 0xe5, 0x8c, 0x51, 0x9f, 0xe5, 0x00, 0x20, 0x85, 0xe5, 0x00, 0xc0, 0x92, 0xe5, - 0x01, 0x30, 0xa0, 0xe3, 0x12, 0x00, 0x00, 0xea, 0x01, 0x00, 0x5e, 0xe1, 0x0f, 0x00, 0x00, 0x3a, - 0x74, 0x51, 0x9f, 0xe5, 0x03, 0x52, 0x85, 0xe0, 0x0c, 0xc0, 0x85, 0xe5, 0x68, 0x51, 0x9f, 0xe5, - 0x03, 0x52, 0x85, 0xe0, 0x04, 0x10, 0x85, 0xe5, 0x00, 0x50, 0xa0, 0xe3, 0x58, 0x61, 0x9f, 0xe5, - 0x03, 0x62, 0x86, 0xe0, 0x08, 0x50, 0x86, 0xe5, 0x4c, 0x61, 0x9f, 0xe5, 0x03, 0x52, 0x86, 0xe7, - 0x01, 0xc0, 0x8c, 0xe0, 0x01, 0xe0, 0x4e, 0xe0, 0x01, 0x30, 0x83, 0xe2, 0x00, 0x00, 0x00, 0xea, - 0x00, 0x40, 0xa0, 0xe3, 0x00, 0x00, 0x54, 0xe3, 0x01, 0x00, 0x00, 0x0a, 0x04, 0x00, 0x53, 0xe3, - 0xe8, 0xff, 0xff, 0x3a, 0x01, 0x50, 0x43, 0xe2, 0x18, 0x61, 0x9f, 0xe5, 0x44, 0x50, 0x86, 0xe5, - 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x50, 0xa0, 0xe3, 0x08, 0x61, 0x9f, 0xe5, 0x48, 0x50, 0x86, 0xe5, - 0xff, 0x50, 0xa0, 0xe3, 0x4c, 0x50, 0x86, 0xe5, 0x70, 0x80, 0xbd, 0xe8, 0x00, 0x00, 0xa0, 0xe3, - 0x00, 0x10, 0xa0, 0xe3, 0xec, 0x20, 0x9f, 0xe5, 0x4c, 0x20, 0x92, 0xe5, 0xff, 0x00, 0x52, 0xe3, - 0x19, 0x00, 0x00, 0x1a, 0x01, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, 0x01, 0x10, 0x81, 0xe2, - 0xd4, 0x20, 0x9f, 0xe5, 0x01, 0x22, 0x82, 0xe0, 0x08, 0x20, 0x92, 0xe5, 0xff, 0x00, 0x52, 0xe3, - 0xf9, 0xff, 0xff, 0x0a, 0xbc, 0x20, 0x9f, 0xe5, 0x44, 0x20, 0x92, 0xe5, 0x01, 0x00, 0x52, 0xe1, - 0x0a, 0x00, 0x00, 0x3a, 0xb0, 0x20, 0x9f, 0xe5, 0x01, 0x02, 0x82, 0xe0, 0x00, 0x10, 0x80, 0xe5, - 0xff, 0x20, 0xa0, 0xe3, 0x08, 0x20, 0x80, 0xe5, 0xa0, 0x20, 0x9f, 0xe5, 0x01, 0x21, 0x92, 0xe7, - 0x01, 0x20, 0x82, 0xe2, 0x94, 0x30, 0x9f, 0xe5, 0x01, 0x21, 0x83, 0xe7, 0x02, 0x00, 0x00, 0xea, - 0xff, 0x20, 0xa0, 0xe3, 0x7c, 0x30, 0x9f, 0xe5, 0x48, 0x20, 0x83, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, - 0x00, 0x10, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe3, 0x68, 0x20, 0x9f, 0xe5, 0x4c, 0x20, 0x92, 0xe5, - 0xff, 0x00, 0x52, 0xe3, 0x15, 0x00, 0x00, 0x1a, 0x58, 0x30, 0x9f, 0xe5, 0x00, 0x20, 0x91, 0xe5, - 0x44, 0x30, 0x93, 0xe5, 0x03, 0x00, 0x52, 0xe1, 0x01, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe0, 0xe3, - 0x0f, 0x00, 0x00, 0xea, 0x48, 0x30, 0x9f, 0xe5, 0x00, 0x20, 0x91, 0xe5, 0x02, 0x21, 0x93, 0xe7, - 0x01, 0x20, 0x82, 0xe2, 0x00, 0xc0, 0x83, 0xe2, 0x00, 0x30, 0x91, 0xe5, 0x03, 0x21, 0x8c, 0xe7, - 0x00, 0x20, 0xa0, 0xe3, 0x5c, 0xc0, 0x4c, 0xe2, 0x00, 0x30, 0x91, 0xe5, 0x03, 0x32, 0x8c, 0xe0, - 0x08, 0x20, 0x83, 0xe5, 0x00, 0x30, 0x91, 0xe5, 0x03, 0x22, 0x8c, 0xe7, 0x00, 0x00, 0x00, 0xea, - 0x00, 0x00, 0xe0, 0xe3, 0x1e, 0xff, 0x2f, 0xe1, 0x48, 0x39, 0x08, 0x00, 0x4c, 0x39, 0x08, 0x00, - 0x98, 0x39, 0x08, 0x00, 0xa8, 0x39, 0x08, 0x00, 0xff, 0x30, 0xa0, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x53, 0xe3, 0xfd, 0xff, 0xff, 0xca, 0x1e, 0xff, 0x2f, 0xe1, 0xff, 0x20, 0xa0, 0xe3, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x52, 0xe3, 0xfd, 0xff, 0xff, 0xca, 0x1e, 0xff, 0x2f, 0xe1, - 0x1e, 0xff, 0x2f, 0xe1, 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x01, 0x50, 0xa0, 0xe1, - 0x02, 0x60, 0xa0, 0xe1, 0x06, 0x20, 0xa0, 0xe1, 0x05, 0x10, 0xa0, 0xe1, 0x04, 0x00, 0xa0, 0xe1, - 0xec, 0xff, 0xff, 0xeb, 0x70, 0x80, 0xbd, 0xe8, 0xf0, 0x47, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, - 0x01, 0x50, 0xa0, 0xe1, 0x02, 0x60, 0xa0, 0xe1, 0x03, 0x90, 0xa0, 0xe1, 0x20, 0x70, 0x9d, 0xe5, - 0xff, 0x80, 0xa0, 0xe3, 0x00, 0x00, 0x57, 0xe3, 0x03, 0x00, 0x00, 0x1a, 0x78, 0x10, 0x8f, 0xe2, - 0x7c, 0x00, 0x9f, 0xe5, 0x3e, 0x01, 0x00, 0xeb, 0x0b, 0x00, 0x00, 0xea, 0x07, 0x00, 0xa0, 0xe1, - 0x70, 0x01, 0x00, 0xeb, 0x16, 0x00, 0x50, 0xe3, 0x03, 0x00, 0x00, 0x9a, 0x07, 0x00, 0xa0, 0xe1, - 0x6c, 0x01, 0x00, 0xeb, 0x15, 0x00, 0x40, 0xe2, 0x07, 0x70, 0x80, 0xe0, 0x16, 0x20, 0xa0, 0xe3, - 0x07, 0x10, 0xa0, 0xe1, 0x48, 0x00, 0x9f, 0xe5, 0x4b, 0x01, 0x00, 0xeb, 0x06, 0x10, 0xa0, 0xe1, - 0x05, 0x00, 0xa0, 0xe1, 0xd4, 0xff, 0xff, 0xeb, 0x38, 0x00, 0x9f, 0xe5, 0xb0, 0x40, 0xc0, 0xe1, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x58, 0xe3, 0xfd, 0xff, 0xff, 0xca, 0xf0, 0x87, 0xbd, 0xe8, - 0x10, 0x40, 0x2d, 0xe9, 0x08, 0xc0, 0x9d, 0xe5, 0xff, 0xe0, 0xa0, 0xe3, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x5e, 0xe3, 0xfd, 0xff, 0xff, 0xca, 0x10, 0x80, 0xbd, 0xe8, 0x4e, 0x55, 0x4c, 0x4c, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x39, 0x08, 0x00, 0x38, 0x39, 0x08, 0x00, 0x00, 0x00, 0xa0, 0xe3, - 0x1e, 0xff, 0x2f, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x10, 0xa0, 0xe1, - 0x04, 0x00, 0x51, 0xe3, 0x03, 0x00, 0x00, 0xba, 0xc6, 0x00, 0x51, 0xe3, 0x01, 0x00, 0x00, 0xca, - 0x01, 0x20, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, 0x00, 0x20, 0xa0, 0xe3, 0x02, 0x00, 0xa0, 0xe1, - 0x1e, 0xff, 0x2f, 0xe1, 0xf0, 0x47, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x01, 0x50, 0xa0, 0xe1, - 0x02, 0x60, 0xa0, 0xe1, 0x03, 0x70, 0xa0, 0xe1, 0x20, 0xa0, 0x9d, 0xe5, 0x04, 0x80, 0xa0, 0xe1, - 0x00, 0x90, 0xa0, 0xe3, 0x08, 0x40, 0xb0, 0xe1, 0x01, 0x00, 0x00, 0x1a, 0x64, 0x00, 0xe0, 0xe3, - 0xf0, 0x87, 0xbd, 0xe8, 0x00, 0x00, 0x55, 0xe3, 0x05, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x57, 0xe3, - 0x03, 0x00, 0x00, 0x0a, 0x06, 0x00, 0xa0, 0xe1, 0xe3, 0xff, 0xff, 0xeb, 0x00, 0x00, 0x50, 0xe3, - 0x01, 0x00, 0x00, 0x1a, 0x04, 0x00, 0xe0, 0xe3, 0xf4, 0xff, 0xff, 0xea, 0x08, 0x20, 0x88, 0xe2, - 0x07, 0x10, 0xa0, 0xe1, 0x06, 0x00, 0xa0, 0xe1, 0xe6, 0xfb, 0xff, 0xeb, 0x00, 0x00, 0x50, 0xe3, - 0x05, 0x00, 0x00, 0x1a, 0x08, 0x20, 0xa0, 0xe3, 0x05, 0x10, 0xa0, 0xe1, 0x08, 0x00, 0xa0, 0xe1, - 0xd5, 0x00, 0x00, 0xeb, 0x0c, 0x60, 0xc8, 0xe5, 0x00, 0x00, 0x00, 0xea, 0x00, 0x90, 0xe0, 0xe3, - 0x09, 0x00, 0xa0, 0xe1, 0xe5, 0xff, 0xff, 0xea, 0xf8, 0x43, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, - 0x04, 0x50, 0xa0, 0xe1, 0x00, 0x60, 0xa0, 0xe3, 0x05, 0x40, 0xb0, 0xe1, 0x01, 0x00, 0x00, 0x1a, - 0x64, 0x00, 0xe0, 0xe3, 0xf8, 0x83, 0xbd, 0xe8, 0x0c, 0x80, 0xd5, 0xe5, 0x08, 0x70, 0x95, 0xe5, - 0x0d, 0x20, 0xa0, 0xe1, 0x07, 0x10, 0xa0, 0xe1, 0x08, 0x00, 0xa0, 0xe1, 0xcd, 0xfb, 0xff, 0xeb, - 0x00, 0x00, 0x50, 0xe3, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0x85, 0xe5, - 0x00, 0x00, 0x00, 0xea, 0x00, 0x60, 0xe0, 0xe3, 0x06, 0x00, 0xa0, 0xe1, 0xf0, 0xff, 0xff, 0xea, - 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x04, 0x50, 0xa0, 0xe1, 0x00, 0x60, 0xa0, 0xe3, - 0x05, 0x40, 0xb0, 0xe1, 0x01, 0x00, 0x00, 0x1a, 0x64, 0x00, 0xe0, 0xe3, 0x70, 0x80, 0xbd, 0xe8, - 0x0c, 0x00, 0xd5, 0xe5, 0x10, 0xfc, 0xff, 0xeb, 0x00, 0x00, 0x50, 0xe3, 0x00, 0x00, 0x00, 0x0a, - 0x00, 0x60, 0xe0, 0xe3, 0x06, 0x00, 0xa0, 0xe1, 0xf7, 0xff, 0xff, 0xea, 0x70, 0x40, 0x2d, 0xe9, - 0x00, 0x40, 0xa0, 0xe1, 0x04, 0x50, 0xa0, 0xe1, 0x00, 0x60, 0xa0, 0xe3, 0x05, 0x40, 0xb0, 0xe1, - 0x01, 0x00, 0x00, 0x1a, 0x64, 0x00, 0xe0, 0xe3, 0x70, 0x80, 0xbd, 0xe8, 0x0c, 0x00, 0xd5, 0xe5, - 0xd0, 0xfb, 0xff, 0xeb, 0x00, 0x00, 0x50, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x60, 0xe0, 0xe3, - 0x06, 0x00, 0xa0, 0xe1, 0xf7, 0xff, 0xff, 0xea, 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x50, 0xa0, 0xe3, - 0x00, 0x40, 0xa0, 0xe3, 0xdd, 0xfc, 0xff, 0xeb, 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x00, 0x54, 0xe3, - 0x01, 0x00, 0x00, 0x0a, 0x01, 0x50, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, 0x00, 0x50, 0xa0, 0xe3, - 0x05, 0x00, 0xa0, 0xe1, 0x70, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, - 0x00, 0x00, 0x54, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0xcb, 0xfc, 0xff, 0xeb, 0x10, 0x80, 0xbd, 0xe8, - 0x00, 0xf0, 0x20, 0xe3, 0x94, 0x01, 0x9f, 0xe5, 0x1c, 0x02, 0x90, 0xe5, 0x02, 0x09, 0xc0, 0xe3, - 0x00, 0x10, 0xa0, 0xe3, 0x02, 0x29, 0xa0, 0xe3, 0x81, 0x17, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x78, 0x11, 0x9f, 0xe5, 0x1c, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x1c, 0x02, 0x90, 0xe5, 0x01, 0x0b, 0xc0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x01, 0x2b, 0xa0, 0xe3, - 0x01, 0x15, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x50, 0x11, 0x9f, 0xe5, 0x1c, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x1c, 0x02, 0x90, 0xe5, 0x06, 0x0a, 0xc0, 0xe3, - 0x00, 0x10, 0xa0, 0xe3, 0x06, 0x2a, 0xa0, 0xe3, 0x81, 0x16, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x28, 0x11, 0x9f, 0xe5, 0x1c, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x1c, 0x02, 0x90, 0xe5, 0x01, 0x0c, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x01, 0x2c, 0xa0, 0xe3, - 0x01, 0x14, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x00, 0x11, 0x9f, 0xe5, 0x1c, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x1c, 0x02, 0x90, 0xe5, 0x08, 0x00, 0xc0, 0xe3, - 0x00, 0x10, 0xa0, 0xe3, 0x08, 0x20, 0xa0, 0xe3, 0x81, 0x11, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0xd8, 0x10, 0x9f, 0xe5, 0x1c, 0x02, 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0xf0, 0x20, 0xe3, - 0xc8, 0x00, 0x9f, 0xe5, 0x1c, 0x06, 0x90, 0xe5, 0x00, 0x0b, 0xa0, 0xe1, 0xa0, 0x0f, 0xa0, 0xe1, - 0x1e, 0xff, 0x2f, 0xe1, 0x04, 0xe0, 0x2d, 0xe5, 0x00, 0x10, 0xa0, 0xe1, 0x00, 0xf0, 0x20, 0xe3, - 0xf5, 0xff, 0xff, 0xeb, 0x00, 0x00, 0x50, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0xa0, 0x00, 0x9f, 0xe5, - 0x40, 0x08, 0x90, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x04, 0xf0, 0x9d, 0xe4, 0x90, 0x10, 0x9f, 0xe5, - 0x20, 0x08, 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, 0xf8, 0x40, 0x2d, 0xe9, 0xb7, 0xff, 0xff, 0xeb, - 0x80, 0x00, 0x9f, 0xe5, 0xf8, 0xff, 0xff, 0xeb, 0x0d, 0x00, 0xa0, 0xe1, 0xec, 0xff, 0xff, 0xeb, - 0x00, 0x00, 0x9d, 0xe5, 0x70, 0x10, 0x9f, 0xe5, 0x01, 0x00, 0x50, 0xe1, 0x01, 0x00, 0x00, 0x0a, - 0x01, 0x00, 0xa0, 0xe3, 0x1c, 0x00, 0x00, 0xeb, 0x62, 0x54, 0xa0, 0xe3, 0x06, 0x42, 0xa0, 0xe3, - 0x3f, 0x67, 0x84, 0xe2, 0xfe, 0x6b, 0x86, 0xe2, 0x01, 0x00, 0x00, 0xea, 0x04, 0x00, 0x95, 0xe4, - 0x04, 0x00, 0x84, 0xe4, 0x06, 0x00, 0x54, 0xe1, 0xfb, 0xff, 0xff, 0x3a, 0x0d, 0x00, 0xa0, 0xe1, - 0xdb, 0xff, 0xff, 0xeb, 0x00, 0x00, 0x9d, 0xe5, 0x30, 0x10, 0x9f, 0xe5, 0x01, 0x00, 0x50, 0xe1, - 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0xa0, 0xe3, 0x0b, 0x00, 0x00, 0xeb, 0x6b, 0xfc, 0xff, 0xeb, - 0x1c, 0x70, 0x9f, 0xe5, 0x37, 0xff, 0x2f, 0xe1, 0x00, 0xf0, 0x20, 0xe3, 0xfe, 0xff, 0xff, 0xea, - 0x00, 0x00, 0x80, 0xe4, 0x00, 0xf0, 0xff, 0x62, 0x34, 0x12, 0x34, 0x12, 0x67, 0x45, 0x67, 0x45, - 0xef, 0x89, 0xef, 0x89, 0x00, 0x00, 0x10, 0x60, 0x0e, 0xf0, 0xa0, 0xe1, 0x10, 0x40, 0x2d, 0xe9, - 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, 0x04, 0x00, 0xa0, 0xe1, 0x10, 0x40, 0xbd, 0xe8, - 0xe1, 0x00, 0x00, 0xea, 0x00, 0x20, 0xa0, 0xe3, 0x20, 0x10, 0x51, 0xe2, 0x00, 0x40, 0x2d, 0xe9, - 0x02, 0xe0, 0xa0, 0xe1, 0x02, 0x30, 0xa0, 0xe1, 0x02, 0xc0, 0xa0, 0xe1, 0x0c, 0x50, 0xa0, 0x28, - 0x0c, 0x50, 0xa0, 0x28, 0x20, 0x10, 0x51, 0x22, 0xfb, 0xff, 0xff, 0x2a, 0x01, 0x1e, 0xb0, 0xe1, - 0x0c, 0x50, 0xa0, 0x28, 0x0c, 0x00, 0xa0, 0x48, 0x01, 0x11, 0xb0, 0xe1, 0x00, 0x40, 0xbd, 0xe8, - 0x04, 0x20, 0x80, 0x24, 0x0e, 0xf0, 0xa0, 0x01, 0x01, 0x20, 0xc0, 0x44, 0x01, 0x20, 0xc0, 0x44, - 0x01, 0x01, 0x11, 0xe3, 0x01, 0x20, 0xc0, 0x14, 0x0e, 0xf0, 0xa0, 0xe1, 0x03, 0x00, 0x52, 0xe3, - 0xe4, 0x00, 0x00, 0x9a, 0x03, 0xc0, 0x10, 0xe2, 0x08, 0x00, 0x00, 0x0a, 0x01, 0x30, 0xd1, 0xe4, - 0x02, 0x00, 0x5c, 0xe3, 0x0c, 0x20, 0x82, 0xe0, 0x01, 0xc0, 0xd1, 0x94, 0x01, 0x30, 0xc0, 0xe4, - 0x01, 0x30, 0xd1, 0x34, 0x01, 0xc0, 0xc0, 0x94, 0x04, 0x20, 0x42, 0xe2, 0x01, 0x30, 0xc0, 0x34, - 0x03, 0x30, 0x11, 0xe2, 0xc4, 0x00, 0x00, 0x0a, 0x08, 0x20, 0x52, 0xe2, 0x04, 0x00, 0x00, 0x3a, - 0x04, 0x30, 0x91, 0xe4, 0x04, 0xc0, 0x91, 0xe4, 0x04, 0x30, 0x80, 0xe4, 0x04, 0xc0, 0x80, 0xe4, - 0xf8, 0xff, 0xff, 0xea, 0x04, 0x20, 0x92, 0xe2, 0x04, 0x30, 0x91, 0x54, 0x04, 0x30, 0x80, 0x54, - 0xcc, 0x00, 0x00, 0xea, 0x01, 0x30, 0x80, 0xe1, 0x03, 0x00, 0x13, 0xe3, 0x00, 0x20, 0xa0, 0xe1, - 0x04, 0xe0, 0x2d, 0xe5, 0x0b, 0x00, 0x00, 0x1a, 0x48, 0xc0, 0x9f, 0xe5, 0x04, 0x30, 0x91, 0xe4, - 0x0c, 0xe0, 0x43, 0xe0, 0x03, 0xe0, 0xce, 0xe1, 0x8c, 0x03, 0x1e, 0xe1, 0x04, 0x30, 0x82, 0x04, - 0xf9, 0xff, 0xff, 0x0a, 0xff, 0x10, 0x13, 0xe2, 0x23, 0x34, 0xa0, 0x11, 0x01, 0x10, 0xc2, 0xe4, - 0xfb, 0xff, 0xff, 0x1a, 0x04, 0xf0, 0x9d, 0xe4, 0x01, 0x30, 0xd1, 0xe4, 0x00, 0x00, 0x53, 0xe3, - 0x01, 0x30, 0xc2, 0xe4, 0x01, 0x30, 0xd1, 0x14, 0x01, 0x30, 0xc2, 0x14, 0x00, 0x00, 0x53, 0x13, - 0xf8, 0xff, 0xff, 0x1a, 0x04, 0xf0, 0x9d, 0xe4, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x10, 0xe3, - 0x10, 0x40, 0x2d, 0xe9, 0x03, 0x00, 0x11, 0x03, 0x00, 0x40, 0xa0, 0xe1, 0x0a, 0x00, 0x00, 0x1a, - 0x4c, 0xe0, 0x9f, 0xe5, 0x04, 0x20, 0x52, 0xe2, 0x06, 0x00, 0x00, 0xba, 0x04, 0x30, 0x91, 0xe4, - 0x0e, 0xc0, 0x43, 0xe0, 0x03, 0xc0, 0xcc, 0xe1, 0x8e, 0xc3, 0x1c, 0xe0, 0x04, 0x30, 0x80, 0x04, - 0xf7, 0xff, 0xff, 0x0a, 0x04, 0x10, 0x41, 0xe2, 0x04, 0x20, 0x82, 0xe2, 0x01, 0x20, 0x52, 0xe2, - 0x05, 0x00, 0x00, 0xba, 0x01, 0x30, 0xd1, 0xe4, 0x00, 0x00, 0x53, 0xe3, 0x01, 0x30, 0xc0, 0xe4, - 0xf9, 0xff, 0xff, 0x1a, 0x02, 0x10, 0xa0, 0xe1, 0xa2, 0x00, 0x00, 0xeb, 0x04, 0x00, 0xa0, 0xe1, - 0x10, 0x80, 0xbd, 0xe8, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc0, 0x80, 0xe2, 0x03, 0x00, 0x00, 0xea, - 0x01, 0x10, 0xd0, 0xe4, 0x00, 0x00, 0x51, 0xe3, 0x0c, 0x00, 0x40, 0x00, 0x0e, 0xf0, 0xa0, 0x01, - 0x03, 0x00, 0x10, 0xe3, 0xf9, 0xff, 0xff, 0x1a, 0x38, 0x20, 0x9f, 0xe5, 0x04, 0x10, 0x90, 0xe4, - 0x02, 0x30, 0x41, 0xe0, 0x01, 0x30, 0xc3, 0xe1, 0x82, 0x03, 0x13, 0xe1, 0xfa, 0xff, 0xff, 0x0a, - 0xff, 0x00, 0x11, 0xe3, 0x0c, 0x00, 0x40, 0xe0, 0x03, 0x00, 0x40, 0x02, 0x0e, 0xf0, 0xa0, 0x01, - 0xff, 0x0c, 0x11, 0xe3, 0x02, 0x00, 0x40, 0x02, 0x0e, 0xf0, 0xa0, 0x01, 0xff, 0x08, 0x11, 0xe3, - 0x01, 0x00, 0x40, 0x02, 0x0e, 0xf0, 0xa0, 0xe1, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc0, 0x90, 0xe1, - 0x21, 0x00, 0x00, 0x4a, 0xa0, 0xc0, 0x71, 0xe0, 0x00, 0x20, 0xa0, 0xe3, 0x1a, 0x00, 0x00, 0x3a, - 0x20, 0xc2, 0x71, 0xe0, 0x0f, 0x00, 0x00, 0x3a, 0x20, 0xc4, 0x71, 0xe0, 0x01, 0x00, 0x00, 0x3a, - 0x00, 0x30, 0xa0, 0xe3, 0x20, 0x00, 0x00, 0xea, 0xa0, 0xc3, 0x71, 0xe0, 0x81, 0x03, 0x40, 0x20, - 0x02, 0x20, 0xa2, 0xe0, 0x20, 0xc3, 0x71, 0xe0, 0x01, 0x03, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, - 0xa0, 0xc2, 0x71, 0xe0, 0x81, 0x02, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x20, 0xc2, 0x71, 0xe0, - 0x01, 0x02, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa0, 0xc1, 0x71, 0xe0, 0x81, 0x01, 0x40, 0x20, - 0x02, 0x20, 0xa2, 0xe0, 0x20, 0xc1, 0x71, 0xe0, 0x01, 0x01, 0x40, 0x20, 0x02, 0x20, 0xb2, 0xe0, - 0xa0, 0xc0, 0x71, 0xe0, 0x81, 0x00, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x01, 0x10, 0x50, 0xe0, - 0x00, 0x10, 0xa0, 0x31, 0x02, 0x00, 0xa2, 0xe0, 0x0e, 0xf0, 0xa0, 0xe1, 0x02, 0x21, 0x11, 0xe2, - 0x00, 0x10, 0x61, 0x42, 0x40, 0x30, 0x32, 0xe0, 0x00, 0x00, 0x60, 0x22, 0x20, 0xc2, 0x71, 0xe0, - 0x1d, 0x00, 0x00, 0x3a, 0x20, 0xc4, 0x71, 0xe0, 0x0f, 0x00, 0x00, 0x3a, 0x01, 0x13, 0xa0, 0xe1, - 0x20, 0xc4, 0x71, 0xe0, 0x3f, 0x23, 0x82, 0xe3, 0x0b, 0x00, 0x00, 0x3a, 0x01, 0x13, 0xa0, 0xe1, - 0x20, 0xc4, 0x71, 0xe0, 0x3f, 0x26, 0x82, 0xe3, 0x07, 0x00, 0x00, 0x3a, 0x01, 0x13, 0xa0, 0xe1, - 0x20, 0xc4, 0x71, 0xe0, 0x3f, 0x29, 0x82, 0xe3, 0x3f, 0x2c, 0x82, 0x23, 0x01, 0x13, 0xa0, 0x21, - 0x00, 0xc0, 0x71, 0xe2, 0x2f, 0x00, 0x00, 0x2a, 0x21, 0x13, 0xa0, 0x21, 0xa0, 0xc3, 0x71, 0xe0, - 0x81, 0x03, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x20, 0xc3, 0x71, 0xe0, 0x01, 0x03, 0x40, 0x20, - 0x02, 0x20, 0xa2, 0xe0, 0xa0, 0xc2, 0x71, 0xe0, 0x81, 0x02, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, - 0x20, 0xc2, 0x71, 0xe0, 0x01, 0x02, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa0, 0xc1, 0x71, 0xe0, - 0x81, 0x01, 0x40, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x20, 0xc1, 0x71, 0xe0, 0x01, 0x01, 0x40, 0x20, - 0x02, 0x20, 0xb2, 0xe0, 0xeb, 0xff, 0xff, 0x2a, 0xa0, 0xc0, 0x71, 0xe0, 0x81, 0x00, 0x40, 0x20, - 0x02, 0x20, 0xa2, 0xe0, 0x01, 0x10, 0x50, 0xe0, 0x00, 0x10, 0xa0, 0x31, 0x02, 0x00, 0xa2, 0xe0, - 0xc3, 0x3f, 0xb0, 0xe1, 0x00, 0x00, 0x60, 0x42, 0x00, 0x10, 0x61, 0x22, 0x0e, 0xf0, 0xa0, 0xe1, - 0xc1, 0x00, 0x00, 0xeb, 0x3f, 0x00, 0x00, 0xeb, 0x03, 0x00, 0x2d, 0xe9, 0xbf, 0x00, 0x00, 0xeb, - 0x03, 0x00, 0xbd, 0xe8, 0x7a, 0x00, 0x00, 0xeb, 0x0f, 0x00, 0x2d, 0xe9, 0xbe, 0x00, 0x00, 0xeb, - 0x0f, 0x00, 0xbd, 0xe8, 0x3b, 0xfa, 0xff, 0xeb, 0x17, 0xff, 0xff, 0xea, 0x01, 0x40, 0x2d, 0xe9, - 0xbc, 0x00, 0x00, 0xeb, 0xae, 0x00, 0x00, 0xeb, 0x01, 0x40, 0xbd, 0xe8, 0x00, 0x00, 0x00, 0xea, - 0x00, 0x00, 0xe0, 0xe3, 0xe7, 0xfc, 0xff, 0xea, 0x2b, 0x00, 0x00, 0xea, 0x20, 0x20, 0x52, 0xe2, - 0x10, 0x40, 0x2d, 0xe9, 0x05, 0x00, 0x00, 0x3a, 0x18, 0x50, 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, - 0x18, 0x50, 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x20, 0x20, 0x52, 0x22, 0xf9, 0xff, 0xff, 0x2a, - 0x02, 0xce, 0xb0, 0xe1, 0x18, 0x50, 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x18, 0x00, 0xb1, 0x48, - 0x18, 0x00, 0xa0, 0x48, 0x02, 0xcf, 0xb0, 0xe1, 0x10, 0x40, 0xbd, 0xe8, 0x04, 0x30, 0x91, 0x24, - 0x04, 0x30, 0x80, 0x24, 0x0e, 0xf0, 0xa0, 0x01, 0x82, 0x2f, 0xb0, 0xe1, 0x01, 0x20, 0xd1, 0x44, - 0x01, 0x30, 0xd1, 0x24, 0x01, 0xc0, 0xd1, 0x24, 0x01, 0x20, 0xc0, 0x44, 0x01, 0x30, 0xc0, 0x24, - 0x01, 0xc0, 0xc0, 0x24, 0x0e, 0xf0, 0xa0, 0xe1, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, 0x51, 0xe3, - 0x08, 0x00, 0x00, 0x3a, 0x03, 0xc0, 0x10, 0xe2, 0xf6, 0xfe, 0xff, 0x0a, 0x04, 0xc0, 0x6c, 0xe2, - 0x01, 0x20, 0xc0, 0xe4, 0x02, 0x00, 0x5c, 0xe3, 0x01, 0x20, 0xc0, 0xa4, 0x0c, 0x10, 0x41, 0xe0, - 0x01, 0x20, 0xc0, 0xc4, 0xef, 0xfe, 0xff, 0xea, 0x81, 0xcf, 0xb0, 0xe1, 0x01, 0x20, 0xc0, 0x24, - 0x01, 0x20, 0xc0, 0x24, 0x01, 0x20, 0xc0, 0x44, 0x0e, 0xf0, 0xa0, 0xe1, 0x02, 0x00, 0xa0, 0xe3, - 0x02, 0x10, 0xa0, 0xe3, 0x8b, 0x00, 0x00, 0xea, 0x0e, 0x50, 0xa0, 0xe1, 0x86, 0x00, 0x00, 0xeb, - 0x00, 0x40, 0xa0, 0xe1, 0x07, 0x00, 0xc0, 0xe3, 0x0d, 0x10, 0xa0, 0xe1, 0x60, 0xd0, 0x80, 0xe2, - 0x05, 0xe0, 0xa0, 0xe1, 0x10, 0x40, 0x2d, 0xe9, 0x0a, 0x30, 0xa0, 0xe1, 0xc0, 0xfc, 0xff, 0xeb, - 0x00, 0x60, 0xa0, 0xe3, 0x00, 0x70, 0xa0, 0xe3, 0x00, 0x80, 0xa0, 0xe3, 0x00, 0xb0, 0xa0, 0xe3, - 0x10, 0x40, 0xbd, 0xe8, 0x07, 0xd0, 0xc1, 0xe3, 0x04, 0xc0, 0xa0, 0xe1, 0xc0, 0x09, 0xac, 0xe8, - 0xc0, 0x09, 0xac, 0xe8, 0xc0, 0x09, 0xac, 0xe8, 0xc0, 0x09, 0xac, 0xe8, 0x13, 0x40, 0x2d, 0xe9, - 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, 0x40, 0x10, 0x81, 0xe2, - 0x01, 0x20, 0x80, 0xe0, 0x11, 0x2e, 0x82, 0xe2, 0x1c, 0x20, 0x84, 0xe5, 0x01, 0x00, 0xa0, 0xe3, - 0x18, 0x10, 0x84, 0xe5, 0x10, 0x00, 0x84, 0xe5, 0x13, 0x40, 0xbd, 0xe8, 0x00, 0x10, 0xa0, 0xe1, - 0x14, 0x00, 0x84, 0xe5, 0x0e, 0xf0, 0xa0, 0xe1, 0x10, 0x40, 0x2d, 0xe9, 0x03, 0x00, 0x2d, 0xe9, - 0x61, 0x00, 0x00, 0xeb, 0x00, 0x40, 0xa0, 0xe1, 0x03, 0x00, 0xbd, 0xe8, 0x14, 0x20, 0x94, 0xe5, - 0x1c, 0x30, 0x94, 0xe5, 0x00, 0xe0, 0x82, 0xe0, 0x03, 0x30, 0x4d, 0xe0, 0x03, 0x00, 0x5e, 0xe1, - 0x00, 0x20, 0x81, 0xe5, 0x0a, 0x00, 0x00, 0x8a, 0x0e, 0x30, 0x93, 0xe0, 0x01, 0x1a, 0x8e, 0xe2, - 0x07, 0x10, 0x81, 0xe2, 0x63, 0x30, 0xa0, 0xe1, 0x07, 0x30, 0xc3, 0xe3, 0x07, 0x10, 0xc1, 0xe3, - 0x03, 0x00, 0x51, 0xe1, 0x03, 0x10, 0xa0, 0x81, 0x02, 0x00, 0x41, 0xe0, 0x14, 0x10, 0x84, 0xe5, - 0x10, 0x80, 0xbd, 0xe8, 0x00, 0x20, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, - 0x10, 0x80, 0xbd, 0xe8, 0xc0, 0x43, 0x2d, 0xe9, 0x3e, 0x00, 0x2d, 0xe9, 0x01, 0x50, 0xa0, 0xe1, - 0x00, 0x40, 0xa0, 0xe1, 0xc3, 0x02, 0x00, 0xeb, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x40, 0x8d, 0xe5, - 0x04, 0x50, 0x8d, 0xe5, 0x00, 0x00, 0xa0, 0xe1, 0x08, 0x00, 0x8d, 0xe5, 0x0d, 0x00, 0xa0, 0xe1, - 0xb4, 0xf9, 0xff, 0xeb, 0x00, 0x40, 0xa0, 0xe1, 0x01, 0x50, 0xa0, 0xe1, 0x03, 0x00, 0x9d, 0xe8, - 0x02, 0x60, 0xa0, 0xe1, 0x03, 0x70, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, - 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, - 0x00, 0x80, 0xa0, 0xe1, 0x30, 0x00, 0x00, 0xeb, 0x00, 0x90, 0xa0, 0xe1, 0x20, 0x80, 0x80, 0xe5, - 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, 0x01, 0x10, 0x80, 0xe2, - 0x24, 0x10, 0x89, 0xe5, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, - 0x28, 0x00, 0x89, 0xe5, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, - 0x2c, 0x00, 0x89, 0xe5, 0x00, 0x00, 0xa0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, - 0x30, 0x00, 0x89, 0xe5, 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, - 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, - 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, 0x0c, 0xd0, 0x8d, 0xe2, 0x04, 0x00, 0xa0, 0xe1, - 0x05, 0x10, 0xa0, 0xe1, 0x06, 0x20, 0xa0, 0xe1, 0x07, 0x30, 0xa0, 0xe1, 0xf0, 0x01, 0xbd, 0xe8, - 0x00, 0x82, 0xbd, 0xe8, 0x00, 0x00, 0xa0, 0xe3, 0x10, 0x40, 0x2d, 0xe9, 0x00, 0x00, 0xa0, 0xe1, - 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, 0xa0, 0xe1, 0x10, 0x80, 0xbd, 0xe8, 0x0e, 0xf0, 0xa0, 0xe1, - 0x00, 0x00, 0xe0, 0xe3, 0x02, 0x10, 0xe0, 0xe3, 0x0e, 0xf0, 0xa0, 0xe1, 0x10, 0x40, 0x2d, 0xe9, - 0x0a, 0x00, 0x00, 0xeb, 0x10, 0x80, 0xbd, 0xe8, 0x0e, 0xf0, 0xa0, 0xe1, 0x00, 0x00, 0x9f, 0xe5, - 0x0e, 0xf0, 0xa0, 0xe1, 0x1c, 0x3a, 0x08, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x08, 0x00, 0x00, 0xeb, - 0x00, 0x00, 0x50, 0xe3, 0x10, 0x80, 0xbd, 0x08, 0x10, 0x40, 0xbd, 0xe8, 0x25, 0xfc, 0xff, 0xea, - 0x0e, 0xf0, 0xa0, 0xe1, 0x10, 0x40, 0x2d, 0xe9, 0xf3, 0xff, 0xff, 0xeb, 0x04, 0x00, 0x80, 0xe2, - 0x10, 0x80, 0xbd, 0xe8, 0x70, 0x40, 0x2d, 0xe9, 0x01, 0x50, 0xa0, 0xe1, 0x00, 0x10, 0xa0, 0xe1, - 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x00, 0xe0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, 0x01, 0x00, 0x70, 0xe3, - 0x00, 0x20, 0xa0, 0xe1, 0x04, 0x00, 0xa0, 0x01, 0x05, 0x10, 0xa0, 0x01, 0x70, 0x40, 0xbd, 0x08, - 0x06, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x72, 0xe3, 0x05, 0x10, 0xa0, 0x11, 0x04, 0x00, 0xa0, 0x11, - 0x0f, 0xe0, 0xa0, 0x11, 0x02, 0xf0, 0xa0, 0x11, 0x00, 0x00, 0xa0, 0xe3, 0x70, 0x80, 0xbd, 0xe8, - 0x01, 0x20, 0x40, 0xe2, 0x70, 0x40, 0x2d, 0xe9, 0x0e, 0x00, 0x52, 0xe3, 0xc0, 0x50, 0x8f, 0x22, - 0xb8, 0x40, 0x8f, 0xe2, 0x1c, 0x00, 0x00, 0x2a, 0x17, 0x20, 0xa0, 0xe3, 0xc0, 0x30, 0x9f, 0xe5, - 0x90, 0x02, 0x02, 0xe0, 0x03, 0x30, 0x8f, 0xe0, 0x02, 0x00, 0x50, 0xe3, 0x03, 0x20, 0x82, 0xe0, - 0x17, 0x50, 0x42, 0xe2, 0x0e, 0x00, 0x00, 0x1a, 0x01, 0x03, 0x11, 0xe3, 0xa4, 0x40, 0x8f, 0x12, - 0x11, 0x00, 0x00, 0x1a, 0x82, 0x03, 0x11, 0xe3, 0xac, 0x40, 0x8f, 0x12, 0x0e, 0x00, 0x00, 0x1a, - 0x01, 0x02, 0x11, 0xe3, 0xb0, 0x40, 0x8f, 0x12, 0x0b, 0x00, 0x00, 0x1a, 0x02, 0x02, 0x11, 0xe3, - 0xb0, 0x40, 0x8f, 0x12, 0x08, 0x00, 0x00, 0x1a, 0x01, 0x01, 0x11, 0xe3, 0xb0, 0x40, 0x8f, 0x12, - 0x05, 0x00, 0x00, 0xea, 0x08, 0x00, 0x50, 0xe3, 0x01, 0x40, 0xa0, 0x01, 0x02, 0x00, 0x00, 0x0a, - 0x09, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x51, 0x03, 0xa4, 0x50, 0x8f, 0x02, 0x0a, 0x00, 0xa0, 0xe3, - 0x00, 0x00, 0x00, 0xea, 0x01, 0x50, 0x85, 0xe2, 0xe8, 0xfb, 0xff, 0xeb, 0x00, 0x00, 0xd5, 0xe5, - 0x00, 0x00, 0x50, 0xe3, 0xfa, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x00, 0xea, 0x01, 0x40, 0x84, 0xe2, - 0xe2, 0xfb, 0xff, 0xeb, 0x00, 0x00, 0xd4, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0xfa, 0xff, 0xff, 0x1a, - 0x0a, 0x00, 0xa0, 0xe3, 0xdd, 0xfb, 0xff, 0xeb, 0x01, 0x00, 0xa0, 0xe3, 0x70, 0x80, 0xbd, 0xe8, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x00, 0x00, 0x60, 0x09, 0x00, 0x00, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x44, 0x69, 0x76, 0x69, - 0x64, 0x65, 0x20, 0x42, 0x79, 0x20, 0x5a, 0x65, 0x72, 0x6f, 0x00, 0x00, 0x4f, 0x76, 0x65, 0x72, - 0x66, 0x6c, 0x6f, 0x77, 0x00, 0x00, 0x00, 0x00, 0x55, 0x6e, 0x64, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x00, 0x00, 0x00, 0x49, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x00, 0x00, 0x3a, 0x20, 0x48, 0x65, 0x61, 0x70, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x00, 0x20, 0xc2, 0x71, 0xe0, - 0x00, 0x20, 0xa0, 0xe3, 0x7b, 0xfe, 0xff, 0x3a, 0x20, 0xc4, 0x71, 0xe0, 0x6d, 0xfe, 0xff, 0x3a, - 0x00, 0x30, 0xa0, 0xe3, 0x8c, 0xfe, 0xff, 0xea, 0x00, 0x30, 0xa0, 0xe3, 0x02, 0x00, 0x00, 0xea, - 0x00, 0xc0, 0xa0, 0xe3, 0x03, 0xc0, 0xc0, 0xe7, 0x01, 0x30, 0x83, 0xe2, 0x01, 0x00, 0x53, 0xe1, - 0xfa, 0xff, 0xff, 0x3a, 0x00, 0x20, 0xa0, 0xe1, 0x00, 0xf0, 0x20, 0xe3, 0x30, 0xc0, 0x9f, 0xe5, - 0x6c, 0xc0, 0x9c, 0xe5, 0x00, 0xc0, 0x82, 0xe5, 0x02, 0x00, 0xa0, 0xe1, 0x04, 0x20, 0x82, 0xe2, - 0x00, 0xf0, 0x20, 0xe3, 0x18, 0xc0, 0x9f, 0xe5, 0x70, 0xc0, 0x9c, 0xe5, 0x04, 0xc0, 0x82, 0xe4, - 0x00, 0xf0, 0x20, 0xe3, 0x08, 0xc0, 0x9f, 0xe5, 0x74, 0xc0, 0x9c, 0xe5, 0x04, 0xc0, 0x82, 0xe4, - 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x90, 0xe4, 0x70, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, - 0x01, 0x50, 0xa0, 0xe1, 0x05, 0x10, 0xa0, 0xe1, 0x04, 0x00, 0xa0, 0xe1, 0xe1, 0xff, 0xff, 0xeb, - 0x70, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0x2d, 0xe9, 0x00, 0xf0, 0x20, 0xe3, 0xc0, 0x05, 0x9f, 0xe5, - 0xc0, 0x15, 0x9f, 0xe5, 0x60, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x70, 0x00, 0x90, 0xe5, 0x07, 0x04, 0xc0, 0xe3, 0x03, 0x10, 0xa0, 0xe3, 0x07, 0x24, 0xa0, 0xe3, - 0x01, 0x1c, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x98, 0x15, 0x9f, 0xe5, 0x70, 0x00, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x70, 0x00, 0x90, 0xe5, 0x01, 0x09, 0xc0, 0xe3, - 0x00, 0x10, 0xa0, 0xe3, 0x01, 0x29, 0xa0, 0xe3, 0x01, 0x17, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x70, 0x15, 0x9f, 0xe5, 0x70, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x70, 0x00, 0x90, 0xe5, 0x02, 0x09, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x02, 0x29, 0xa0, 0xe3, - 0x81, 0x17, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x48, 0x15, 0x9f, 0xe5, 0x70, 0x00, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x68, 0x00, 0x90, 0xe5, 0x02, 0x0a, 0xc0, 0xe3, - 0x00, 0x10, 0xa0, 0xe3, 0x02, 0x2a, 0xa0, 0xe3, 0x81, 0x16, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x20, 0x15, 0x9f, 0xe5, 0x68, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x68, 0x00, 0x90, 0xe5, 0x01, 0x0a, 0xc0, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x01, 0x2a, 0xa0, 0xe3, - 0x01, 0x16, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0xf8, 0x14, 0x9f, 0xe5, 0x68, 0x00, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x68, 0x00, 0x90, 0xe5, 0x01, 0x0b, 0xc0, 0xe3, - 0x01, 0x10, 0xa0, 0xe3, 0x01, 0x2b, 0xa0, 0xe3, 0x01, 0x15, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0xd0, 0x14, 0x9f, 0xe5, 0x68, 0x00, 0x81, 0xe5, 0x00, 0x40, 0xa0, 0xe3, 0x00, 0x00, 0x00, 0xea, - 0x01, 0x40, 0x84, 0xe2, 0x06, 0xc9, 0x54, 0xe2, 0x6a, 0xce, 0x5c, 0x22, 0xfb, 0xff, 0xff, 0x3a, - 0x00, 0xf0, 0x20, 0xe3, 0xb0, 0x04, 0x9f, 0xe5, 0x00, 0x00, 0x90, 0xe5, 0x03, 0x10, 0xc0, 0xe3, - 0x02, 0x00, 0x81, 0xe3, 0xa0, 0x14, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x81, 0xe2, 0x00, 0x00, 0x90, 0xe5, 0x0c, 0x00, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, - 0x0c, 0x20, 0xa0, 0xe3, 0x01, 0x11, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x78, 0x14, 0x9f, 0xe5, - 0x00, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x00, 0x00, 0x90, 0xe5, - 0x10, 0x00, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x10, 0x20, 0xa0, 0xe3, 0x01, 0x12, 0x02, 0xe0, - 0x01, 0x00, 0x80, 0xe1, 0x50, 0x14, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0xf0, 0x20, 0xe3, 0x40, 0x04, 0x9f, 0xe5, 0x04, 0x00, 0x90, 0xe5, 0x00, 0x0f, 0xa0, 0xe1, - 0xa0, 0x0f, 0xa0, 0xe1, 0x01, 0x00, 0x50, 0xe3, 0xf8, 0xff, 0xff, 0x1a, 0x00, 0xf0, 0x20, 0xe3, - 0x28, 0x04, 0x9f, 0xe5, 0x1c, 0x14, 0x9f, 0xe5, 0x20, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x28, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x11, 0x00, 0xa0, 0xe3, 0x24, 0x00, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x2c, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x3f, 0x0c, 0xa0, 0xe3, - 0x54, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0xf4, 0x03, 0x9f, 0xe5, 0x64, 0x00, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0xec, 0x03, 0x9f, 0xe5, 0x68, 0x00, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0xe4, 0x03, 0x9f, 0xe5, 0x0c, 0x00, 0x81, 0xe5, 0x4c, 0xfa, 0xff, 0xeb, 0x10, 0x80, 0xbd, 0xe8, - 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x0c, 0xa0, 0xe3, 0xd0, 0x13, 0x9f, 0xe5, 0x04, 0x00, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0xc0, 0x03, 0x9f, 0xe5, 0x04, 0x00, 0x90, 0xe5, - 0x00, 0x0f, 0xa0, 0xe1, 0xa0, 0x0f, 0xa0, 0xe1, 0x00, 0x00, 0x50, 0xe3, 0xf8, 0xff, 0xff, 0x1a, - 0x00, 0xf0, 0x20, 0xe3, 0xa4, 0x03, 0x9f, 0xe5, 0x60, 0x03, 0x90, 0xe5, 0x07, 0x00, 0x80, 0xe3, - 0x98, 0x13, 0x9f, 0xe5, 0x60, 0x03, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x60, 0x03, 0x90, 0xe5, 0x07, 0x0c, 0xc0, 0xe3, 0x07, 0x10, 0xa0, 0xe3, 0x07, 0x2c, 0xa0, 0xe3, - 0x01, 0x14, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x70, 0x13, 0x9f, 0xe5, 0x60, 0x03, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x60, 0x03, 0x90, 0xe5, 0x07, 0x08, 0xc0, 0xe3, - 0x07, 0x10, 0xa0, 0xe3, 0x07, 0x28, 0xa0, 0xe3, 0x01, 0x18, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x48, 0x13, 0x9f, 0xe5, 0x60, 0x03, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x64, 0x03, 0x90, 0xe5, 0x07, 0x10, 0xc0, 0xe3, 0x01, 0x00, 0x81, 0xe3, 0x2c, 0x13, 0x9f, 0xe5, - 0x64, 0x03, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x64, 0x03, 0x90, 0xe5, - 0x07, 0x0c, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x07, 0x2c, 0xa0, 0xe3, 0x01, 0x14, 0x02, 0xe0, - 0x01, 0x00, 0x80, 0xe1, 0x04, 0x13, 0x9f, 0xe5, 0x64, 0x03, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x81, 0xe2, 0x64, 0x03, 0x90, 0xe5, 0x07, 0x08, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, - 0x07, 0x28, 0xa0, 0xe3, 0x01, 0x18, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0xdc, 0x12, 0x9f, 0xe5, - 0x64, 0x03, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x68, 0x03, 0x90, 0xe5, - 0x07, 0x10, 0xc0, 0xe3, 0x03, 0x00, 0x81, 0xe3, 0xc0, 0x12, 0x9f, 0xe5, 0x68, 0x03, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x68, 0x03, 0x90, 0xe5, 0x07, 0x0c, 0xc0, 0xe3, - 0x03, 0x10, 0xa0, 0xe3, 0x07, 0x2c, 0xa0, 0xe3, 0x01, 0x14, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x98, 0x12, 0x9f, 0xe5, 0x68, 0x03, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x68, 0x03, 0x90, 0xe5, 0x07, 0x08, 0xc0, 0xe3, 0x03, 0x10, 0xa0, 0xe3, 0x07, 0x28, 0xa0, 0xe3, - 0x01, 0x18, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x70, 0x12, 0x9f, 0xe5, 0x68, 0x03, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x38, 0x02, 0x90, 0xe5, 0x01, 0x08, 0xc0, 0xe3, - 0x00, 0x10, 0xa0, 0xe3, 0x01, 0x28, 0xa0, 0xe3, 0x01, 0x18, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x48, 0x12, 0x9f, 0xe5, 0x38, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x20, 0x02, 0x90, 0xe5, 0x07, 0x10, 0xc0, 0xe3, 0x02, 0x00, 0x81, 0xe3, 0x2c, 0x12, 0x9f, 0xe5, - 0x20, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x20, 0x02, 0x90, 0xe5, - 0x78, 0x00, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x78, 0x20, 0xa0, 0xe3, 0x81, 0x11, 0x02, 0xe0, - 0x01, 0x00, 0x80, 0xe1, 0x04, 0x12, 0x9f, 0xe5, 0x20, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x81, 0xe2, 0x10, 0x02, 0x90, 0xe5, 0x02, 0x00, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, - 0x02, 0x20, 0xa0, 0xe3, 0x81, 0x10, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0xdc, 0x11, 0x9f, 0xe5, - 0x10, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x10, 0x02, 0x90, 0xe5, - 0x02, 0x0c, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x02, 0x2c, 0xa0, 0xe3, 0x81, 0x14, 0x02, 0xe0, - 0x01, 0x00, 0x80, 0xe1, 0xb4, 0x11, 0x9f, 0xe5, 0x10, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x81, 0xe2, 0x44, 0x02, 0x90, 0xe5, 0xff, 0x10, 0xc0, 0xe3, 0x20, 0x00, 0x81, 0xe3, - 0x98, 0x11, 0x9f, 0xe5, 0x44, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x44, 0x02, 0x90, 0xe5, 0xff, 0x0c, 0xc0, 0xe3, 0x20, 0x10, 0xa0, 0xe3, 0xff, 0x2c, 0xa0, 0xe3, - 0x01, 0x14, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x70, 0x11, 0x9f, 0xe5, 0x44, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x44, 0x02, 0x90, 0xe5, 0xff, 0x08, 0xc0, 0xe3, - 0x20, 0x10, 0xa0, 0xe3, 0xff, 0x28, 0xa0, 0xe3, 0x01, 0x18, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, - 0x48, 0x11, 0x9f, 0xe5, 0x44, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, - 0x78, 0x02, 0x90, 0xe5, 0xff, 0x08, 0xc0, 0xe3, 0x10, 0x10, 0xa0, 0xe3, 0x01, 0x18, 0x02, 0xe0, - 0x01, 0x00, 0x80, 0xe1, 0x24, 0x11, 0x9f, 0xe5, 0x78, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x01, 0x00, 0xa0, 0xe3, 0x80, 0x0a, 0xa0, 0xe1, 0xdc, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x81, 0xe2, 0x04, 0x02, 0x90, 0xe5, 0x02, 0x0b, 0xc0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, - 0x02, 0x2b, 0xa0, 0xe3, 0x81, 0x15, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0xec, 0x10, 0x9f, 0xe5, - 0x04, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x54, 0x02, 0x90, 0xe5, - 0xff, 0x08, 0xc0, 0xe3, 0x08, 0x10, 0xa0, 0xe3, 0xff, 0x28, 0xa0, 0xe3, 0x01, 0x18, 0x02, 0xe0, - 0x01, 0x00, 0x80, 0xe1, 0xc4, 0x10, 0x9f, 0xe5, 0x54, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, - 0x00, 0x00, 0x81, 0xe2, 0x54, 0x02, 0x90, 0xe5, 0xff, 0x0c, 0xc0, 0xe3, 0x08, 0x10, 0xa0, 0xe3, - 0xff, 0x2c, 0xa0, 0xe3, 0x01, 0x14, 0x02, 0xe0, 0x01, 0x00, 0x80, 0xe1, 0x9c, 0x10, 0x9f, 0xe5, - 0x54, 0x02, 0x81, 0xe5, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0x00, 0x81, 0xe2, 0x54, 0x02, 0x90, 0xe5, - 0xff, 0x10, 0xc0, 0xe3, 0x08, 0x00, 0x81, 0xe3, 0x80, 0x10, 0x9f, 0xe5, 0x54, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x06, 0xa0, 0xe1, 0xf8, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x00, 0xa0, 0xe3, 0x80, 0x06, 0xa0, 0xe1, 0xf8, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x07, 0xa0, 0xe1, 0xf8, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x06, 0xa0, 0xe1, 0xdc, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x04, 0xa0, 0xe1, 0xdc, 0x02, 0x81, 0xe5, - 0x00, 0xf0, 0x20, 0xe3, 0x01, 0x00, 0xa0, 0xe3, 0x00, 0x02, 0xa0, 0xe1, 0xe4, 0x02, 0x81, 0xe5, - 0x1e, 0xff, 0x2f, 0xe1, 0x15, 0xf8, 0x41, 0x83, 0x00, 0x00, 0x00, 0xe8, 0xb4, 0x03, 0xd0, 0xe4, - 0x01, 0x00, 0x30, 0x84, 0x33, 0x00, 0x20, 0x80, 0x23, 0x01, 0x14, 0x00, 0x41, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0xd0, 0xe4, 0x10, 0x40, 0x2d, 0xe9, 0x29, 0xf7, 0xff, 0xeb, 0x10, 0x80, 0xbd, 0xe8, - 0x1e, 0xff, 0x2f, 0xe1, 0x50, 0xd0, 0x4d, 0xe2, 0xff, 0x00, 0x8d, 0xe8, 0x00, 0x50, 0x4f, 0xe1, - 0x08, 0xe0, 0x4e, 0xe2, 0x4c, 0xe0, 0x8d, 0xe5, 0x20, 0x00, 0x8d, 0xe2, 0x0f, 0x10, 0x15, 0xe2, - 0x00, 0x7f, 0xc0, 0x08, 0x1c, 0x00, 0x80, 0x02, 0x00, 0x40, 0xa0, 0x08, 0x06, 0x00, 0x00, 0x0a, - 0x00, 0x20, 0x0f, 0xe1, 0x0f, 0x30, 0xc2, 0xe3, 0x01, 0x10, 0x83, 0xe1, 0x01, 0xf0, 0x2f, 0xe1, - 0x00, 0x7f, 0xa0, 0xe8, 0x02, 0xf0, 0x2f, 0xe1, 0x00, 0x40, 0xa0, 0xe8, 0x10, 0x6f, 0x16, 0xee, - 0x10, 0x7f, 0x15, 0xee, 0xe0, 0x00, 0x80, 0xe8, 0x0c, 0x30, 0x40, 0xe2, 0x00, 0x10, 0x93, 0xe5, - 0x0d, 0x00, 0xa0, 0xe1, 0x14, 0x21, 0x9f, 0xe5, 0x14, 0x81, 0x9f, 0xe5, 0xb0, 0x80, 0xd8, 0xe1, - 0x10, 0x91, 0x9f, 0xe5, 0x09, 0x00, 0x58, 0xe1, 0x00, 0x00, 0x00, 0x0a, 0x08, 0x21, 0x9f, 0xe5, - 0xff, 0xfa, 0xff, 0xeb, 0xff, 0x1f, 0xbd, 0xe8, 0x18, 0xd0, 0x8d, 0xe2, 0x00, 0x80, 0xfd, 0xe8, - 0x50, 0xd0, 0x4d, 0xe2, 0xff, 0x00, 0x8d, 0xe8, 0x00, 0x50, 0x4f, 0xe1, 0x04, 0xe0, 0x4e, 0xe2, - 0x4c, 0xe0, 0x8d, 0xe5, 0x20, 0x00, 0x8d, 0xe2, 0x0f, 0x10, 0x15, 0xe2, 0x00, 0x7f, 0xc0, 0x08, - 0x1c, 0x00, 0x80, 0x02, 0x00, 0x40, 0xa0, 0x08, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x20, 0x0f, 0xe1, - 0x0f, 0x30, 0xc2, 0xe3, 0x01, 0x10, 0x83, 0xe1, 0x01, 0xf0, 0x2f, 0xe1, 0x00, 0x7f, 0xa0, 0xe8, - 0x02, 0xf0, 0x2f, 0xe1, 0x00, 0x40, 0xa0, 0xe8, 0x10, 0x6f, 0x16, 0xee, 0x10, 0x7f, 0x15, 0xee, - 0xe0, 0x00, 0x80, 0xe8, 0x0c, 0x30, 0x40, 0xe2, 0x00, 0x10, 0x93, 0xe5, 0x0d, 0x00, 0xa0, 0xe1, - 0x98, 0x20, 0x9f, 0xe5, 0xe2, 0xfa, 0xff, 0xeb, 0xff, 0x1f, 0xbd, 0xe8, 0x18, 0xd0, 0x8d, 0xe2, - 0x00, 0x80, 0xfd, 0xe8, 0x50, 0xd0, 0x4d, 0xe2, 0xff, 0x00, 0x8d, 0xe8, 0x00, 0x50, 0x4f, 0xe1, - 0x04, 0xe0, 0x4e, 0xe2, 0x4c, 0xe0, 0x8d, 0xe5, 0x20, 0x00, 0x8d, 0xe2, 0x0f, 0x10, 0x15, 0xe2, - 0x00, 0x7f, 0xc0, 0x08, 0x1c, 0x00, 0x80, 0x02, 0x00, 0x40, 0xa0, 0x08, 0x06, 0x00, 0x00, 0x0a, - 0x00, 0x20, 0x0f, 0xe1, 0x0f, 0x30, 0xc2, 0xe3, 0x01, 0x10, 0x83, 0xe1, 0x01, 0xf0, 0x2f, 0xe1, - 0x00, 0x7f, 0xa0, 0xe8, 0x02, 0xf0, 0x2f, 0xe1, 0x00, 0x40, 0xa0, 0xe8, 0x10, 0x6f, 0x16, 0xee, - 0x30, 0x7f, 0x15, 0xee, 0xe0, 0x00, 0x80, 0xe8, 0x0c, 0x30, 0x40, 0xe2, 0x00, 0x10, 0x93, 0xe5, - 0x0d, 0x00, 0xa0, 0xe1, 0x28, 0x20, 0x9f, 0xe5, 0xc5, 0xfa, 0xff, 0xeb, 0xff, 0x1f, 0xbd, 0xe8, - 0x18, 0xd0, 0x8d, 0xe2, 0x00, 0x80, 0xfd, 0xe8, 0x70, 0x00, 0x20, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, - 0xaa, 0xaa, 0x00, 0x00, 0x38, 0x39, 0x08, 0x00, 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x88, 0xfd, 0xff, 0xeb, - 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x10, 0x80, 0xe5, 0x10, 0x80, 0xbd, 0xe8, 0x41, 0x62, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x00, 0x00, 0x00, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x20, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x00, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, - 0x6c, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, - 0x66, 0x6c, 0x6f, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x6f, 0x70, 0x65, - 0x6e, 0x3a, 0x20, 0x00, 0x4f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x65, 0x61, 0x70, 0x20, - 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x73, 0x65, 0x72, 0x2d, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x31, - 0x00, 0x00, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x32, 0x00, 0x00, 0x50, 0x75, 0x72, 0x65, 0x20, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x66, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x00, - 0x43, 0x2b, 0x2b, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x65, 0x78, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x65, - 0x61, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x20, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x18, 0xf0, 0x9f, 0xe5, - 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, - 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x68, 0x12, 0x08, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0xff, 0x40, 0x2d, 0xe9, - 0xfe, 0xff, 0xff, 0xea, 0xff, 0x80, 0xfd, 0xe8, 0xfe, 0xff, 0xff, 0xea, 0x04, 0xe0, 0x4e, 0xe2, - 0xff, 0x40, 0x2d, 0xe9, 0xfe, 0xff, 0xff, 0xea, 0xff, 0x80, 0xfd, 0xe8, 0x04, 0xe0, 0x4e, 0xe2, - 0xff, 0x40, 0x2d, 0xe9, 0xfe, 0xff, 0xff, 0xea, 0xff, 0x80, 0xfd, 0xe8, 0xfe, 0xff, 0xff, 0xea, - 0x04, 0xe0, 0x4e, 0xe2, 0x00, 0x40, 0x2d, 0xe9, 0x00, 0xe0, 0x4f, 0xe1, 0x1f, 0x40, 0x2d, 0xe9, - 0x00, 0x00, 0x0f, 0xe1, 0x00, 0x20, 0xa0, 0xe1, 0xe0, 0x00, 0x00, 0xe2, 0x13, 0x00, 0x80, 0xe3, - 0x00, 0xf0, 0x21, 0xe1, 0x04, 0x00, 0x2d, 0xe9, 0x8c, 0x30, 0x9f, 0xe5, 0x00, 0x40, 0x93, 0xe5, - 0xff, 0x40, 0x04, 0xe2, 0x84, 0x30, 0x9f, 0xe5, 0x00, 0x00, 0x93, 0xe5, 0x00, 0x00, 0x10, 0xe1, - 0x13, 0x00, 0x00, 0x0a, 0x78, 0x30, 0x9f, 0xe5, 0x00, 0x20, 0x93, 0xe5, 0x04, 0x00, 0x2d, 0xe9, - 0x0f, 0x00, 0x50, 0xe3, 0x01, 0x00, 0x80, 0x12, 0x00, 0x00, 0x83, 0xe5, 0xff, 0x5f, 0x2d, 0xe9, - 0x60, 0x20, 0x9f, 0xe5, 0x84, 0x11, 0xa0, 0xe1, 0x01, 0x20, 0x82, 0xe0, 0x01, 0x40, 0x2d, 0xe9, - 0x04, 0x00, 0xa0, 0xe1, 0x0f, 0xe0, 0xa0, 0xe1, 0x04, 0xe0, 0x8e, 0xe2, 0x00, 0xf0, 0x92, 0xe5, - 0x01, 0x40, 0xbd, 0xe8, 0xff, 0x5f, 0xbd, 0xe8, 0x04, 0x00, 0xbd, 0xe8, 0x30, 0x30, 0x9f, 0xe5, - 0x00, 0x20, 0x83, 0xe5, 0x04, 0x00, 0xbd, 0xe8, 0x80, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x21, 0xe1, - 0x01, 0x10, 0xa0, 0xe3, 0x20, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x80, 0xe5, 0x1f, 0x40, 0xbd, 0xe8, - 0x0e, 0xf0, 0x69, 0xe1, 0x00, 0x80, 0xfd, 0xe8, 0xfe, 0xff, 0xff, 0xea, 0x84, 0x04, 0x00, 0xe0, - 0x88, 0x04, 0x00, 0xe0, 0x70, 0x04, 0x00, 0xe0, 0x00, 0x30, 0xff, 0xff, 0x14, 0x00, 0x80, 0xf2, - 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0x2e, 0x82, 0x01, 0x82, 0x01, 0x82, 0x01, - 0x82, 0x01, 0x82, 0x01, 0x02, 0xff, 0x01, 0x01, 0xed, 0x00, 0x00, 0x00 -}; \ No newline at end of file diff --git a/board/samsung/p1p2/psi_ram.hex b/board/samsung/p1p2/psi_ram.hex deleted file mode 100644 index c6e66f8..0000000 --- a/board/samsung/p1p2/psi_ram.hex +++ /dev/null @@ -1,938 +0,0 @@ -0000000 0d87 ea00 696c 5548 a001 fdfe 0007 0001 -0000010 ff00 0000 0210 0000 0200 0000 0204 0000 -0000020 ffff ffff ffff ffff fe00 0000 ffff ffff -0000030 0000 0008 ffff fff7 0200 0008 4a43 544b -0000040 ffff ffff ffff ffff ffff ffff ffff ffff -0000050 ffff ffff ffff ffff ffff ffff ffff ffff -0000060 0000 0000 0000 0000 0000 0000 0000 0000 -0000070 ffff ffff ffff ffff ffff ffff ffff ffff -0000080 ffff ffff ffff ffff ffff ffff ffff ffff -0000090 ffff ffff ffff ffff ffff ffff ffff ffff -00000a0 ffff ffff ffff ffff ffff ffff ffff ffff -00000b0 ffff ffff ffff ffff ffff ffff ffff ffff -00000c0 ffff ffff ffff ffff ffff ffff ffff ffff -00000d0 ffff ffff ffff ffff ffff ffff ffff ffff -00000e0 ffff ffff ffff ffff ffff ffff ffff ffff -00000f0 ffff ffff ffff ffff ffff ffff ffff ffff -0000100 ffff ffff ffff ffff ffff ffff ffff ffff -0000110 ffff ffff ffff ffff ffff ffff ffff ffff -0000120 ffff ffff ffff ffff ffff ffff ffff ffff -0000130 ffff ffff ffff ffff ffff ffff ffff ffff -0000140 ffff ffff ffff ffff ffff ffff ffff ffff -0000150 ffff ffff ffff ffff ffff ffff ffff ffff -0000160 ffff ffff ffff ffff ffff ffff ffff ffff -0000170 ffff ffff ffff ffff ffff ffff ffff ffff -0000180 ffff ffff ffff ffff ffff ffff ffff ffff -0000190 ffff ffff ffff ffff ffff ffff ffff ffff -00001a0 ffff ffff ffff ffff ffff ffff ffff ffff -00001b0 ffff ffff ffff ffff ffff ffff ffff ffff -00001c0 ffff ffff ffff ffff ffff ffff ffff ffff -00001d0 ffff ffff ffff ffff ffff ffff ffff ffff -00001e0 ffff ffff ffff ffff ffff ffff ffff ffff -00001f0 ffff ffff ffff ffff ffff ffff dabe 02fe -0000200 040b ea00 0d06 ea00 0000 0000 0000 0000 -0000210 0000 0000 0000 0000 0000 0000 0000 0000 -0000220 0000 0000 0000 0000 0000 0000 0000 0000 -0000230 0000 0000 0000 0000 0000 0000 0000 0000 -0000240 0000 0000 0000 0000 0000 0000 0000 0000 -0000250 0000 0000 0000 0000 0000 0000 0000 0000 -0000260 0000 0000 0000 0000 0000 0000 0000 0000 -0000270 0000 0000 0000 0000 0000 0000 0000 0000 -0000280 0000 0000 0000 0000 0000 0000 0000 0000 -0000290 0000 0000 0000 0000 0000 0000 0000 0000 -00002a0 0000 0000 0000 0000 0000 0000 0000 0000 -00002b0 0000 0000 0000 0000 0000 0000 0000 0000 -00002c0 0000 0000 0000 0000 0000 0000 0000 0000 -00002d0 0000 0000 0000 0000 0000 0000 0000 0000 -00002e0 0000 0000 0000 0000 0000 0000 0000 0000 -00002f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000300 0000 0000 0000 0000 0000 0000 0000 0000 -0000310 0000 0000 0000 0000 0000 0000 0000 0000 -0000320 0000 0000 0000 0000 0000 0000 0000 0000 -0000330 0000 0000 0000 0000 0000 0000 0000 0000 -0000340 0000 0000 0000 0000 0000 0000 0000 0000 -0000350 0000 0000 0000 0000 0000 0000 0000 0000 -0000360 0000 0000 0000 0000 0000 0000 0000 0000 -0000370 0000 0000 0000 0000 0000 0000 0000 0000 -0000380 0000 0000 0000 0000 0000 0000 0000 0000 -0000390 0000 0000 0000 0000 0000 0000 0000 0000 -00003a0 0000 0000 0000 0000 0000 0000 0000 0000 -00003b0 0000 0000 0000 0000 0000 0000 0000 0000 -00003c0 0000 0000 0000 0000 0000 0000 0000 0000 -00003d0 0000 0000 0000 0000 0000 0000 0000 0000 -00003e0 0000 0000 0000 0000 0000 0000 0000 0000 -00003f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000400 0000 0000 0000 0000 0000 0000 0000 0000 -0000410 0000 0000 0000 0000 0000 0000 0000 0000 -0000420 0000 0000 0000 0000 0000 0000 0000 0000 -0000430 0000 0000 0000 0000 0000 0000 0000 0000 -0000440 0000 0000 0000 0000 0000 0000 0000 0000 -0000450 0000 0000 0000 0000 0000 0000 0000 0000 -0000460 0000 0000 0000 0000 0000 0000 0000 0000 -0000470 0000 0000 0000 0000 0000 0000 0000 0000 -0000480 0000 0000 0000 0000 0000 0000 0000 0000 -0000490 0000 0000 0000 0000 0000 0000 0000 0000 -00004a0 0000 0000 0000 0000 0000 0000 0000 0000 -00004b0 0000 0000 0000 0000 0000 0000 0000 0000 -00004c0 0000 0000 0000 0000 0000 0000 0000 0000 -00004d0 0000 0000 0000 0000 0000 0000 0000 0000 -00004e0 0000 0000 0000 0000 0000 0000 0000 0000 -00004f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000500 0000 0000 0000 0000 0000 0000 0000 0000 -0000510 0000 0000 0000 0000 0000 0000 0000 0000 -0000520 0000 0000 0000 0000 0000 0000 0000 0000 -0000530 0000 0000 0000 0000 0000 0000 0000 0000 -0000540 0000 0000 0000 0000 0000 0000 0000 0000 -0000550 0000 0000 0000 0000 0000 0000 0000 0000 -0000560 0000 0000 0000 0000 0000 0000 0000 0000 -0000570 0000 0000 0000 0000 0000 0000 0000 0000 -0000580 0000 0000 0000 0000 0000 0000 0000 0000 -0000590 0000 0000 0000 0000 0000 0000 0000 0000 -00005a0 0000 0000 0000 0000 0000 0000 0000 0000 -00005b0 0000 0000 0000 0000 0000 0000 0000 0000 -00005c0 0000 0000 0000 0000 0000 0000 0000 0000 -00005d0 0000 0000 0000 0000 0000 0000 0000 0000 -00005e0 0000 0000 0000 0000 0000 0000 0000 0000 -00005f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000600 0000 0000 0000 0000 0000 0000 0000 0000 -0000610 0000 0000 0000 0000 0000 0000 0000 0000 -0000620 0000 0000 0000 0000 0000 0000 0000 0000 -0000630 0000 0000 0000 0000 0000 0000 0000 0000 -0000640 0000 0000 0000 0000 0000 0000 0000 0000 -0000650 0000 0000 0000 0000 0000 0000 0000 0000 -0000660 0000 0000 0000 0000 0000 0000 0000 0000 -0000670 0000 0000 0000 0000 0000 0000 0000 0000 -0000680 0000 0000 0000 0000 0000 0000 0000 0000 -0000690 0000 0000 0000 0000 0000 0000 0000 0000 -00006a0 0000 0000 0000 0000 0000 0000 0000 0000 -00006b0 0000 0000 0000 0000 0000 0000 0000 0000 -00006c0 0000 0000 0000 0000 0000 0000 0000 0000 -00006d0 0000 0000 0000 0000 0000 0000 0000 0000 -00006e0 0000 0000 0000 0000 0000 0000 0000 0000 -00006f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000700 0000 0000 0000 0000 0000 0000 0000 0000 -0000710 0000 0000 0000 0000 0000 0000 0000 0000 -0000720 0000 0000 0000 0000 0000 0000 0000 0000 -0000730 0000 0000 0000 0000 0000 0000 0000 0000 -0000740 0000 0000 0000 0000 0000 0000 0000 0000 -0000750 0000 0000 0000 0000 0000 0000 0000 0000 -0000760 0000 0000 0000 0000 0000 0000 0000 0000 -0000770 0000 0000 0000 0000 0000 0000 0000 0000 -0000780 0000 0000 0000 0000 0000 0000 0000 0000 -0000790 0000 0000 0000 0000 0000 0000 0000 0000 -00007a0 0000 0000 0000 0000 0000 0000 0000 0000 -00007b0 0000 0000 0000 0000 0000 0000 0000 0000 -00007c0 0000 0000 0000 0000 0000 0000 0000 0000 -00007d0 0000 0000 0000 0000 0000 0000 0000 0000 -00007e0 0000 0000 0000 0000 0000 0000 0000 0000 -00007f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000800 0000 0000 0000 0000 0000 0000 0000 0000 -0000810 0000 0000 0000 0000 0000 0000 0000 0000 -0000820 0000 0000 0000 0000 0000 0000 0000 0000 -0000830 0000 0000 0000 0000 0000 0000 0000 0000 -0000840 0000 0000 0000 0000 0000 0000 0000 0000 -0000850 0000 0000 0000 0000 0000 0000 0000 0000 -0000860 0000 0000 0000 0000 0000 0000 0000 0000 -0000870 0000 0000 0000 0000 0000 0000 0000 0000 -0000880 0000 0000 0000 0000 0000 0000 0000 0000 -0000890 0000 0000 0000 0000 0000 0000 0000 0000 -00008a0 0000 0000 0000 0000 0000 0000 0000 0000 -00008b0 0000 0000 0000 0000 0000 0000 0000 0000 -00008c0 0000 0000 0000 0000 0000 0000 0000 0000 -00008d0 0000 0000 0000 0000 0000 0000 0000 0000 -00008e0 0000 0000 0000 0000 0000 0000 0000 0000 -00008f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000900 0000 0000 0000 0000 0000 0000 0000 0000 -0000910 0000 0000 0000 0000 0000 0000 0000 0000 -0000920 0000 0000 0000 0000 0000 0000 0000 0000 -0000930 0000 0000 0000 0000 0000 0000 0000 0000 -0000940 0000 0000 0000 0000 0000 0000 0000 0000 -0000950 0000 0000 0000 0000 0000 0000 0000 0000 -0000960 0000 0000 0000 0000 0000 0000 0000 0000 -0000970 0000 0000 0000 0000 0000 0000 0000 0000 -0000980 0000 0000 0000 0000 0000 0000 0000 0000 -0000990 0000 0000 0000 0000 0000 0000 0000 0000 -00009a0 0000 0000 0000 0000 0000 0000 0000 0000 -00009b0 0000 0000 0000 0000 0000 0000 0000 0000 -00009c0 0000 0000 0000 0000 0000 0000 0000 0000 -00009d0 0000 0000 0000 0000 0000 0000 0000 0000 -00009e0 0000 0000 0000 0000 0000 0000 0000 0000 -00009f0 0000 0000 0000 0000 0000 0000 0000 0000 -0000a00 0000 0000 0000 0000 0000 0000 0000 0000 -0000a10 0000 0000 0000 0000 0000 0000 0000 0000 -0000a20 0000 0000 0000 0000 0000 0000 0000 0000 -0000a30 0000 0000 0000 0000 0000 0000 0000 0000 -0000a40 0000 0000 0000 0000 0000 0000 0000 0000 -0000a50 0000 0000 0000 0000 0000 0000 0000 0000 -0000a60 0000 0000 0000 0000 0000 0000 0000 0000 -0000a70 0000 0000 0000 0000 0000 0000 0000 0000 -0000a80 0000 0000 0000 0000 0000 0000 0000 0000 -0000a90 0000 0000 0000 0000 0000 0000 0000 0000 -0000aa0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ab0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ac0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ad0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ae0 0000 0000 0000 0000 0000 0000 0000 0000 -0000af0 0000 0000 0000 0000 0000 0000 0000 0000 -0000b00 0000 0000 0000 0000 0000 0000 0000 0000 -0000b10 0000 0000 0000 0000 0000 0000 0000 0000 -0000b20 0000 0000 0000 0000 0000 0000 0000 0000 -0000b30 0000 0000 0000 0000 0000 0000 0000 0000 -0000b40 0000 0000 0000 0000 0000 0000 0000 0000 -0000b50 0000 0000 0000 0000 0000 0000 0000 0000 -0000b60 0000 0000 0000 0000 0000 0000 0000 0000 -0000b70 0000 0000 0000 0000 0000 0000 0000 0000 -0000b80 0000 0000 0000 0000 0000 0000 0000 0000 -0000b90 0000 0000 0000 0000 0000 0000 0000 0000 -0000ba0 0000 0000 0000 0000 0000 0000 0000 0000 -0000bb0 0000 0000 0000 0000 0000 0000 0000 0000 -0000bc0 0000 0000 0000 0000 0000 0000 0000 0000 -0000bd0 0000 0000 0000 0000 0000 0000 0000 0000 -0000be0 0000 0000 0000 0000 0000 0000 0000 0000 -0000bf0 0000 0000 0000 0000 0000 0000 0000 0000 -0000c00 0000 0000 0000 0000 0000 0000 0000 0000 -0000c10 0000 0000 0000 0000 0000 0000 0000 0000 -0000c20 0000 0000 0000 0000 0000 0000 0000 0000 -0000c30 0000 0000 0000 0000 0000 0000 0000 0000 -0000c40 0000 0000 0000 0000 0000 0000 0000 0000 -0000c50 0000 0000 0000 0000 0000 0000 0000 0000 -0000c60 0000 0000 0000 0000 0000 0000 0000 0000 -0000c70 0000 0000 0000 0000 0000 0000 0000 0000 -0000c80 0000 0000 0000 0000 0000 0000 0000 0000 -0000c90 0000 0000 0000 0000 0000 0000 0000 0000 -0000ca0 0000 0000 0000 0000 0000 0000 0000 0000 -0000cb0 0000 0000 0000 0000 0000 0000 0000 0000 -0000cc0 0000 0000 0000 0000 0000 0000 0000 0000 -0000cd0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ce0 0000 0000 0000 0000 0000 0000 0000 0000 -0000cf0 0000 0000 0000 0000 0000 0000 0000 0000 -0000d00 0000 0000 0000 0000 0000 0000 0000 0000 -0000d10 0000 0000 0000 0000 0000 0000 0000 0000 -0000d20 0000 0000 0000 0000 0000 0000 0000 0000 -0000d30 0000 0000 0000 0000 0000 0000 0000 0000 -0000d40 0000 0000 0000 0000 0000 0000 0000 0000 -0000d50 0000 0000 0000 0000 0000 0000 0000 0000 -0000d60 0000 0000 0000 0000 0000 0000 0000 0000 -0000d70 0000 0000 0000 0000 0000 0000 0000 0000 -0000d80 0000 0000 0000 0000 0000 0000 0000 0000 -0000d90 0000 0000 0000 0000 0000 0000 0000 0000 -0000da0 0000 0000 0000 0000 0000 0000 0000 0000 -0000db0 0000 0000 0000 0000 0000 0000 0000 0000 -0000dc0 0000 0000 0000 0000 0000 0000 0000 0000 -0000dd0 0000 0000 0000 0000 0000 0000 0000 0000 -0000de0 0000 0000 0000 0000 0000 0000 0000 0000 -0000df0 0000 0000 0000 0000 0000 0000 0000 0000 -0000e00 0000 0000 0000 0000 0000 0000 0000 0000 -0000e10 0000 0000 0000 0000 0000 0000 0000 0000 -0000e20 0000 0000 0000 0000 0000 0000 0000 0000 -0000e30 0000 0000 0000 0000 0000 0000 0000 0000 -0000e40 0000 0000 0000 0000 0000 0000 0000 0000 -0000e50 0000 0000 0000 0000 0000 0000 0000 0000 -0000e60 0000 0000 0000 0000 0000 0000 0000 0000 -0000e70 0000 0000 0000 0000 0000 0000 0000 0000 -0000e80 0000 0000 0000 0000 0000 0000 0000 0000 -0000e90 0000 0000 0000 0000 0000 0000 0000 0000 -0000ea0 0000 0000 0000 0000 0000 0000 0000 0000 -0000eb0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ec0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ed0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ee0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ef0 0000 0000 0000 0000 0000 0000 0000 0000 -0000f00 0000 0000 0000 0000 0000 0000 0000 0000 -0000f10 0000 0000 0000 0000 0000 0000 0000 0000 -0000f20 0000 0000 0000 0000 0000 0000 0000 0000 -0000f30 0000 0000 0000 0000 0000 0000 0000 0000 -0000f40 0000 0000 0000 0000 0000 0000 0000 0000 -0000f50 0000 0000 0000 0000 0000 0000 0000 0000 -0000f60 0000 0000 0000 0000 0000 0000 0000 0000 -0000f70 0000 0000 0000 0000 0000 0000 0000 0000 -0000f80 0000 0000 0000 0000 0000 0000 0000 0000 -0000f90 0000 0000 0000 0000 0000 0000 0000 0000 -0000fa0 0000 0000 0000 0000 0000 0000 0000 0000 -0000fb0 0000 0000 0000 0000 0000 0000 0000 0000 -0000fc0 0000 0000 0000 0000 0000 0000 0000 0000 -0000fd0 0000 0000 0000 0000 0000 0000 0000 0000 -0000fe0 0000 0000 0000 0000 0000 0000 0000 0000 -0000ff0 0000 0000 0000 0000 0000 0000 0000 0000 -0001000 0000 0000 0000 0000 0000 0000 0000 0000 -0001010 0000 0000 0000 0000 0000 0000 0000 0000 -0001020 0000 0000 0000 0000 0000 0000 0000 0000 -0001030 0000 0000 0000 0000 0000 0000 0000 0000 -0001040 0000 0000 0000 0000 0000 0000 0000 0000 -0001050 0000 0000 0000 0000 0000 0000 0000 0000 -0001060 0000 0000 0000 0000 0000 0000 0000 0000 -0001070 0000 0000 0000 0000 0000 0000 0000 0000 -0001080 0000 0000 0000 0000 0000 0000 0000 0000 -0001090 0000 0000 0000 0000 0000 0000 0000 0000 -00010a0 0000 0000 0000 0000 0000 0000 0000 0000 -00010b0 0000 0000 0000 0000 0000 0000 0000 0000 -00010c0 0000 0000 0000 0000 0000 0000 0000 0000 -00010d0 0000 0000 0000 0000 0000 0000 0000 0000 -00010e0 0000 0000 0000 0000 0000 0000 0000 0000 -00010f0 0000 0000 0000 0000 0000 0000 0000 0000 -0001100 0000 ea00 0665 ea00 0028 e28f 0c00 e890 -0001110 a000 e08a 7001 e24a b000 e08b 000b e15a -0001120 065e 0a00 000f e8ba e014 e24f 0001 e313 -0001130 f003 1047 f003 e1a0 00ac 0000 00fc 0000 -0001140 2001 e082 4001 e4d0 500f e214 5001 04d0 -0001150 4224 e1b0 4001 04d0 5001 e255 0003 0a00 -0001160 3001 e4d0 5001 e255 3001 e4c1 fffb 1aff -0001170 4001 e254 0002 0a00 4001 e254 5001 e4c1 -0001180 fffc 1aff 0002 e151 ffed 3aff f00e e1a0 -0001190 2010 e252 0078 28b0 0078 28a1 fffb 8aff -00011a0 2e82 e1b0 0030 28b0 0030 28a1 4000 4590 -00011b0 4000 4581 f00e e1a0 3000 e3a0 4000 e3a0 -00011c0 5000 e3a0 6000 e3a0 2010 e252 0078 28a1 -00011d0 fffc 8aff 2e82 e1b0 0030 28a1 3000 4581 -00011e0 f00e e1a0 393c 0008 0000 0000 0074 0000 -00011f0 1190 0008 39b0 0008 0000 ffff 00d0 0000 -0001200 1190 0008 3a80 0008 3000 ffff 0638 0000 -0001210 1140 0008 393c 0008 393c 0008 0140 0000 -0001220 11b8 0008 3a9c 0008 3638 ffff 0004 0000 -0001230 11b8 0008 4010 e92d f000 e320 101c e59f -0001240 1078 e591 1102 e201 2102 e3a0 0fa1 e182 -0001250 1008 e59f 0078 e581 001d eb00 8010 e8bd -0001260 0000 e490 0000 0000 002c e59f 1000 e3a0 -0001270 1000 e580 001a eb00 0008 eb00 0f10 ee11 -0001280 0a01 e3c0 0f10 ee01 0000 e10f 0080 e3c0 -0001290 f000 e121 ff99 eaff fffe eaff 007c e490 -00012a0 0f11 ee19 1020 e59f 0001 e180 0001 e380 -00012b0 0f11 ee09 0f31 ee19 1010 e59f 0001 e180 -00012c0 0001 e380 0f31 ee09 ff1e e12f 3000 ffff -00012d0 0000 ffff 4010 e92d 01b7 eb00 ffe1 ebff -00012e0 8010 e8bd 1000 e10f 00a4 e59f 0007 e3c0 -00012f0 2000 e10f 201f e3c2 2012 e382 f002 e12f -0001300 d000 e1a0 0088 e59f 0007 e3c0 2000 e10f -0001310 201f e3c2 2011 e382 f002 e12f d000 e1a0 -0001320 0070 e59f 0007 e3c0 2000 e10f 201f e3c2 -0001330 201b e382 f002 e12f d000 e1a0 0058 e59f -0001340 2000 e10f 201f e3c2 2017 e382 f002 e12f -0001350 d000 e1a0 0044 e59f 0007 e3c0 2000 e10f -0001360 201f e3c2 2013 e382 f002 e12f d000 e1a0 -0001370 002c e59f 0007 e3c0 2000 e10f 201f e3c2 -0001380 201f e382 f002 e12f d000 e1a0 f001 e12f -0001390 ff1e e12f d280 0009 e400 0009 d100 0009 -00013a0 e280 0009 e300 0009 3004 e59f 3003 e08f -00013b0 f003 e1a0 227c 0000 4010 e92d 0277 eb00 -00013c0 04b0 eb00 8010 e8bd 4077 e92d d004 e24d -00013d0 5001 e1a0 4002 e1a0 0004 e5dd 0004 e350 -00013e0 0004 ba00 0004 e5dd 00c6 e350 0001 ca00 -00013f0 0001 e3a0 0000 ea00 0000 e3a0 0000 e350 -0001400 0009 1a00 3f97 e28f 3000 e58d 3081 e3a0 -0001410 2004 e28d 1001 e3a0 0274 e59f 03ad eb00 -0001420 0001 e3e0 d010 e28d 8070 e8bd 0000 e354 -0001430 0003 0a00 025c e59f 1004 e5dd 0181 e790 -0001440 0000 e584 024c e59f 1004 e5dd 5181 e780 -0001450 0000 e3a0 fff2 eaff 4011 e92d d004 e24d -0001460 0004 e5dd 0004 e350 0004 ba00 0004 e5dd -0001470 00c6 e350 0001 ca00 0001 e3a0 0000 ea00 -0001480 0000 e3a0 0000 e350 0008 1a00 3f75 e28f -0001490 3000 e58d 30c4 e3a0 2004 e28d 1001 e3a0 -00014a0 01ec e59f 038b eb00 0001 e3e0 801c e8bd -00014b0 0001 e3a0 11dc e59f 2004 e5dd 1182 e081 -00014c0 0004 e5c1 0004 e5dd 21c8 e59f 2180 e082 -00014d0 1005 e5d2 21c0 e59f 1100 e782 f000 e320 -00014e0 01b8 e59f 0000 e590 0000 e350 0008 1a00 -00014f0 f000 e320 0050 e242 0480 e590 0001 e380 -0001500 1050 e242 0480 e581 0001 e3a0 118c e59f -0001510 0000 e581 0000 e3a0 ffe3 eaff 4011 e92d -0001520 d004 e24d 0004 e5dd 0004 e350 0004 ba00 -0001530 0004 e5dd 00c6 e350 0001 ca00 0001 e3a0 -0001540 0000 ea00 0000 e3a0 0000 e350 0008 1a00 -0001550 3e11 e28f 3000 e58d 30de e3a0 2004 e28d -0001560 1001 e3a0 0128 e59f 035a eb00 0001 e3e0 -0001570 801c e8bd 0000 e3a0 1118 e59f 2004 e5dd -0001580 1182 e081 0004 e5c1 0004 e5dd 1108 e59f -0001590 2000 e3a0 2100 e781 f000 e320 0000 e3a0 -00015a0 fff2 eaff 4077 e92d d004 e24d 4001 e1a0 -00015b0 5002 e1a0 0004 e5dd 0004 e350 0004 ba00 -00015c0 0004 e5dd 00c6 e350 0001 ca00 0001 e3a0 -00015d0 0000 ea00 0000 e3a0 0000 e350 0008 0a00 -00015e0 0000 e354 0003 ba00 000f e354 0001 ca00 -00015f0 0001 e3a0 0000 ea00 0000 e3a0 0000 e350 -0001600 0009 1a00 305c e28f 3000 e58d 30a7 e3a0 -0001610 2004 e28d 1001 e3a0 0074 e59f 032d eb00 -0001620 0001 e3e0 d010 e28d 8070 e8bd 0000 e355 -0001630 0004 0a00 005c e59f 1004 e5dd 0181 e080 -0001640 0005 e5d0 0000 e585 0000 e354 0002 1a00 -0001650 0004 e5dd ffb0 ebff fff1 eaff 0004 e5dd -0001660 ff7c ebff ffee eaff 7764 7464 6f6f 736c -0001670 6372 625c 6f6f 6374 726f 5c65 7264 7669 -0001680 7265 5c73 6349 5c75 7273 5c63 6369 2e75 -0001690 0063 0000 08fc 0000 3000 ffff 0050 e000 -00016a0 3638 ffff f000 e320 0228 e59f 0488 e590 -00016b0 000f e200 0000 e350 0001 0a00 0001 e3a0 -00016c0 0000 ea00 0000 e3a0 ff1e e12f 0000 e3a0 -00016d0 ff1e e12f 40f3 e92d d004 e24d 4001 e1a0 -00016e0 0004 e5dd 0004 e350 0004 ba00 0004 e5dd -00016f0 00c6 e350 0001 ca00 0001 e3a0 0000 ea00 -0001700 0000 e3a0 0000 e350 0008 1a00 30ac e24f -0001710 3000 e58d 3f45 e3a0 2004 e28d 1001 e3a0 -0001720 0094 e51f 02eb eb00 0001 e3e0 80fe e8bd -0001730 2004 e5dd 0000 e354 0001 0a00 0001 e3a0 -0001740 0000 ea00 0000 e3a0 c000 e1a0 0184 e59f -0001750 12a2 e1a0 301f e202 0000 e35c 0004 0a00 -0001760 e101 e790 5001 e3a0 e315 e18e e101 e780 -0001770 0004 ea00 e101 e790 5001 e3a0 5315 e1e0 -0001780 e005 e00e e101 e780 f000 e320 f000 e320 -0001790 0000 e3a0 ffe4 eaff 0000 e3a0 ff1e e12f -00017a0 4010 e92d 4004 e3a0 0008 ea00 011c e51f -00017b0 0184 e080 0004 e5d0 0000 e350 0001 0a00 -00017c0 0004 e1a0 ff23 ebff 0001 e284 40ff e200 -00017d0 00c6 e354 fff4 daff 0140 e51f 0000 e590 -00017e0 0000 e350 0006 0a00 f000 e320 00e4 e59f -00017f0 0480 e590 0001 e380 10d8 e59f 0480 e581 -0001800 f000 e320 0000 e3a0 8010 e8bd 1000 e1a0 -0001810 0000 e3a0 ff1e e12f 4071 e92d d004 e24d -0001820 4000 e3a0 0004 e5dd 000f e350 0007 da00 -0001830 3e1d e24f 3000 e58d 309c e59f 2004 e28d -0001840 1001 e3a0 01b8 e51f 02a2 eb00 0010 ea00 -0001850 0334 eb00 5000 e1a0 f000 e320 0074 e59f -0001860 0470 e590 000f e200 4000 e1a0 0004 e5dd -0001870 1060 e59f 1470 e591 100f e3c1 200f e200 -0001880 1002 e181 204c e59f 1470 e582 0005 e1a0 -0001890 0330 eb00 0004 e1a0 807c e8bd 0000 e3a0 -00018a0 0000 e10f 03a0 e1e0 0001 e200 ff1e e12f -00018b0 0000 e3a0 1000 e3a0 0000 e10f 1080 e380 -00018c0 f001 e121 03a0 e1e0 0001 e200 1000 e1a0 -00018d0 0001 e1a0 ff1e e12f 0000 e000 017b 0000 -00018e0 f000 e320 3280 e59f 3024 e593 1003 e1a0 -00018f0 f000 e320 3270 e59f 3024 e593 3001 e203 -0001900 0000 e353 0003 0a00 f000 e320 3258 e59f -0001910 002c e593 0003 ea00 f000 e320 3248 e59f -0001920 0028 e593 f000 e320 3cff e3c1 30fe e3c3 -0001930 c00c e200 300c e183 20f0 e383 f000 e320 -0001940 3224 e59f 2024 e583 ff1e e12f 4010 e92d -0001950 ffe2 ebff f000 e320 020c e59f 0024 e590 -0001960 4000 e1a0 4074 e6ff 40f0 e384 4002 e384 -0001970 4001 e3c4 f000 e320 01ec e59f 4024 e580 -0001980 8010 e8bd 4010 e92d ffd4 ebff f000 e320 -0001990 01d4 e59f 0024 e590 4000 e1a0 4074 e6ff -00019a0 40f0 e384 4002 e384 4001 e384 f000 e320 -00019b0 01b4 e59f 4024 e580 8010 e8bd e004 e52d -00019c0 ffe1 ebff f000 e320 019c e59f 0028 e590 -00019d0 0004 e3c0 1000 e3a0 2004 e3a0 1101 e002 -00019e0 0001 e180 1180 e59f 0028 e581 f000 e320 -00019f0 0000 e281 0028 e590 0008 e3c0 1001 e3a0 -0001a00 2008 e3a0 1181 e002 0001 e180 1158 e59f -0001a10 0028 e581 ffda ebff f004 e49d f000 e320 -0001a20 0144 e59f 0060 e590 0800 e1a0 0c20 e1a0 -0001a30 ff1e e12f 4070 e92d 5000 e1a0 4001 e1a0 -0001a40 6000 e3a0 0001 e355 0004 0a00 0002 e355 -0001a50 0005 0a00 0003 e355 0009 1a00 0005 ea00 -0001a60 f000 e320 f000 e320 0007 ea00 f000 e320 -0001a70 6202 e386 0004 ea00 f000 e320 6203 e386 -0001a80 0001 ea00 f000 e320 f000 e320 f000 e320 -0001a90 0001 e314 0000 0a00 6010 e386 0002 e314 -0001aa0 0000 0a00 6008 e386 0004 e314 0000 0a00 -0001ab0 6004 e386 0008 e314 0000 0a00 6001 e386 -0001ac0 0298 eb00 ffa0 ebff f000 e320 0098 e59f -0001ad0 6014 e580 f000 e320 fffe eaff 4010 e92d -0001ae0 400f e3a0 1004 e1a0 0001 e3a0 ffd0 ebff -0001af0 8010 e8bd f000 e320 006c e59f 0718 e590 -0001b00 0003 e200 0001 e350 0005 0a00 f000 e320 -0001b10 0054 e59f 0718 e590 0003 e200 0003 e350 -0001b20 0001 1a00 0001 e3a0 ff1e e12f 0000 e3a0 -0001b30 fffc eaff f000 e320 002c e59f 0078 e590 -0001b40 ff1e e12f f000 e320 101c e59f 0078 e581 -0001b50 ff1e e12f f000 e320 000c e59f 0010 e590 -0001b60 0600 e1a0 0e20 e1a0 ff1e e12f 0000 e490 -0001b70 f000 e320 0148 e59f 0000 e590 0c01 e350 -0001b80 0004 0a00 f000 e320 0c01 e3a0 1130 e59f -0001b90 0000 e581 f000 e320 ff1e e12f f000 e320 -0001ba0 0003 e3a0 1118 e59f 0000 e581 ff1e e12f -0001bb0 4070 e92d f000 e320 0104 e59f 0024 e590 -0001bc0 5000 e1a0 10fc e59f 04f3 eb00 4000 e1a0 -0001bd0 00f4 e59f 0008 e590 0000 e350 000b 0a00 -0001be0 00e4 e59f 0004 e590 0004 e150 0003 8a00 -0001bf0 00d4 e59f 0000 e590 0004 e150 0001 8a00 -0001c00 0000 e3a0 8070 e8bd 0001 e3a0 fffc eaff -0001c10 00b4 e59f 0004 e590 0004 e150 0001 9a00 -0001c20 0000 e3a0 fff6 eaff 0001 e3a0 fff4 eaff -0001c30 4070 e92d 4000 e1a0 ffcc ebff f000 e320 -0001c40 007c e59f 0024 e590 5000 e1a0 1074 e59f -0001c50 04d1 eb00 1070 e59f 0000 e581 0000 e281 -0001c60 0000 e590 0004 e080 0004 e581 0000 e281 -0001c70 0004 e590 1000 e591 0001 e150 0003 9a00 -0001c80 0000 e3a0 1040 e59f 0008 e581 0002 ea00 -0001c90 0001 e3a0 1030 e59f 0008 e581 8070 e8bd -0001ca0 4010 e92d 4000 e1a0 0004 e1a0 ffdf ebff -0001cb0 f000 e320 ffbd ebff 0000 e350 fffc 0aff -0001cc0 8010 e8bd 0000 e450 0659 0000 393c 0008 -0001cd0 4010 e92d ff86 ebff 8010 e8bd 4010 e92d -0001ce0 ff93 ebff 4000 e1a0 0007 e3a0 0e24 e000 -0001cf0 8010 e8bd 4010 e92d 4000 e3a0 ff8c ebff -0001d00 4000 e1a0 460e e3c4 0004 e1a0 ff8c ebff -0001d10 8010 e8bd 41f0 e92d 4000 e1a0 5000 e3a0 -0001d20 7000 e3a0 6004 e1a0 4006 e1a0 6007 e206 -0001d30 ff7f ebff 5000 e1a0 560e e3c5 7a86 e185 -0001d40 0007 e1a0 ff7e ebff 81f0 e8bd 4070 e92d -0001d50 5000 e3a0 4000 e3a0 ff75 ebff 5000 e1a0 -0001d60 0007 e3a0 4aa5 e000 0004 e1a0 8070 e8bd -0001d70 4070 e92d 5000 e3a0 4000 e3a0 ff6c ebff -0001d80 5000 e1a0 0007 e3a0 4e25 e000 0004 e1a0 -0001d90 8070 e8bd 4010 e92d ff4f ebff 8010 e8bd -0001da0 4010 e92d 0525 eb00 04a1 eb00 8010 e8bd -0001db0 4010 e92d 4000 e3a0 ff65 ebff 0001 e350 -0001dc0 0004 0a00 0002 e350 000c 0a00 0003 e350 -0001dd0 001e 1a00 0013 ea00 f000 e320 f000 e320 -0001de0 008c e59f 0010 e590 0900 e1a0 0fa0 e1a0 -0001df0 0000 e350 0000 1a00 4001 e3a0 0016 ea00 -0001e00 f000 e320 f000 e320 0064 e59f 0010 e590 -0001e10 0900 e1a0 0fa0 e1a0 0001 e350 0000 1a00 -0001e20 4002 e3a0 000c ea00 f000 e320 f000 e320 -0001e30 003c e59f 0010 e590 0900 e1a0 0fa0 e1a0 -0001e40 0000 e350 0000 1a00 4003 e3a0 0002 ea00 -0001e50 f000 e320 4000 e3a0 f000 e320 f000 e320 -0001e60 0004 e1a0 8010 e8bd 2000 e1a0 0000 e3a0 -0001e70 ff1e e12f 0000 e800 f000 e320 fffe eaff -0001e80 f000 e320 fffe eaff f000 e320 fffe eaff -0001e90 f000 e320 fffe eaff 20ff e3a0 1000 e3a0 -0001ea0 0000 e350 0003 1a00 0000 ea00 1001 e281 -0001eb0 0000 e352 fffc caff 2001 e1a0 ff1e e12f -0001ec0 4010 e92d 4000 e1a0 0004 e1a0 fff1 ebff -0001ed0 8010 e8bd 403f e92d e000 e1a0 c001 e1a0 -0001ee0 4002 e1a0 5003 e1a0 0000 e3a0 0000 e58d -0001ef0 c004 e58d 0008 e58d 000c e58d 000f e89d -0001f00 d010 e28d 8030 e8bd e004 e52d c000 e1a0 -0001f10 0000 e3e0 0005 e351 f101 908f 0017 ea00 -0001f20 0004 ea00 0006 ea00 0008 ea00 000d ea00 -0001f30 000f ea00 0008 ea00 f000 e320 0000 e3e0 -0001f40 0010 ea00 f000 e320 0000 e3e0 000d ea00 -0001f50 f000 e320 0000 e3e0 000a ea00 f000 e320 -0001f60 0000 e3e0 0007 ea00 f000 e320 0000 e3e0 -0001f70 0004 ea00 f000 e320 0000 e3e0 0001 ea00 -0001f80 f000 e320 f000 e320 f000 e320 f004 e49d -0001f90 4070 e92d 4000 e1a0 5000 e3e0 000c e594 -0001fa0 0000 e350 0002 0a00 000c e594 ff30 e12f -0001fb0 5000 e1a0 0005 e1a0 8070 e8bd 41f0 e92d -0001fc0 4000 e1a0 6001 e1a0 7002 e1a0 8003 e1a0 -0001fd0 5000 e3e0 0010 e594 0000 e350 0005 0a00 -0001fe0 2008 e1a0 1007 e1a0 0006 e1a0 3010 e594 -0001ff0 ff33 e12f 5000 e1a0 0005 e1a0 81f0 e8bd -0002000 41f0 e92d 4000 e1a0 6001 e1a0 7002 e1a0 -0002010 8003 e1a0 5000 e3e0 0014 e594 0000 e350 -0002020 0005 0a00 2008 e1a0 1007 e1a0 0006 e1a0 -0002030 3014 e594 ff33 e12f 5000 e1a0 0005 e1a0 -0002040 81f0 e8bd 41f0 e92d 4000 e1a0 6001 e1a0 -0002050 7002 e1a0 5000 e3e0 0018 e594 0000 e350 -0002060 0004 0a00 1007 e1a0 0006 e1a0 2018 e594 -0002070 ff32 e12f 5000 e1a0 0005 e1a0 81f0 e8bd -0002080 4010 e92d 4000 e1a0 001c e594 0000 e350 -0002090 0001 0a00 001c e594 ff30 e12f 8010 e8bd -00020a0 4010 e92d 1070 e3a0 01c8 e59f 01a4 eb00 -00020b0 0000 e3a0 8010 e8bd 4070 e92d 2000 e1a0 -00020c0 c000 e3a0 3000 e3a0 e000 e3a0 0000 e3e0 -00020d0 40ff e3a0 5004 e592 0001 e155 0020 3a00 -00020e0 e004 e592 518c e59f 2000 e585 c000 e592 -00020f0 3001 e3a0 0012 ea00 0001 e15e 000f 3a00 -0002100 5174 e59f 5203 e085 c00c e585 5168 e59f -0002110 5203 e085 1004 e585 5000 e3a0 6158 e59f -0002120 6203 e086 5008 e586 614c e59f 5203 e786 -0002130 c001 e08c e001 e04e 3001 e283 0000 ea00 -0002140 4000 e3a0 0000 e354 0001 0a00 0004 e353 -0002150 ffe8 3aff 5001 e243 6118 e59f 5044 e586 -0002160 0000 e3a0 5000 e3a0 6108 e59f 5048 e586 -0002170 50ff e3a0 504c e586 8070 e8bd 0000 e3a0 -0002180 1000 e3a0 20ec e59f 204c e592 00ff e352 -0002190 0019 1a00 1001 e3a0 0000 ea00 1001 e281 -00021a0 20d4 e59f 2201 e082 2008 e592 00ff e352 -00021b0 fff9 0aff 20bc e59f 2044 e592 0001 e152 -00021c0 000a 3a00 20b0 e59f 0201 e082 1000 e580 -00021d0 20ff e3a0 2008 e580 20a0 e59f 2101 e792 -00021e0 2001 e282 3094 e59f 2101 e783 0002 ea00 -00021f0 20ff e3a0 307c e59f 2048 e583 ff1e e12f -0002200 1000 e1a0 0000 e3a0 2068 e59f 204c e592 -0002210 00ff e352 0015 1a00 3058 e59f 2000 e591 -0002220 3044 e593 0003 e152 0001 9a00 0000 e3e0 -0002230 000f ea00 3048 e59f 2000 e591 2102 e793 -0002240 2001 e282 c000 e283 3000 e591 2103 e78c -0002250 2000 e3a0 c05c e24c 3000 e591 3203 e08c -0002260 2008 e583 3000 e591 2203 e78c 0000 ea00 -0002270 0000 e3e0 ff1e e12f 3948 0008 394c 0008 -0002280 3998 0008 39a8 0008 30ff e3a0 f000 e320 -0002290 0000 e353 fffd caff ff1e e12f 20ff e3a0 -00022a0 f000 e320 0000 e352 fffd caff ff1e e12f -00022b0 ff1e e12f 4070 e92d 4000 e1a0 5001 e1a0 -00022c0 6002 e1a0 2006 e1a0 1005 e1a0 0004 e1a0 -00022d0 ffec ebff 8070 e8bd 47f0 e92d 4000 e1a0 -00022e0 5001 e1a0 6002 e1a0 9003 e1a0 7020 e59d -00022f0 80ff e3a0 0000 e357 0003 1a00 1078 e28f -0002300 007c e59f 013e eb00 000b ea00 0007 e1a0 -0002310 0170 eb00 0016 e350 0003 9a00 0007 e1a0 -0002320 016c eb00 0015 e240 7007 e080 2016 e3a0 -0002330 1007 e1a0 0048 e59f 014b eb00 1006 e1a0 -0002340 0005 e1a0 ffd4 ebff 0038 e59f 40b0 e1c0 -0002350 f000 e320 0000 e358 fffd caff 87f0 e8bd -0002360 4010 e92d c008 e59d e0ff e3a0 f000 e320 -0002370 0000 e35e fffd caff 8010 e8bd 554e 4c4c -0002380 0000 0000 39b8 0008 3938 0008 0000 e3a0 -0002390 ff1e e12f ff1e e12f ff1e e12f 1000 e1a0 -00023a0 0004 e351 0003 ba00 00c6 e351 0001 ca00 -00023b0 2001 e3a0 0000 ea00 2000 e3a0 0002 e1a0 -00023c0 ff1e e12f 47f0 e92d 4000 e1a0 5001 e1a0 -00023d0 6002 e1a0 7003 e1a0 a020 e59d 8004 e1a0 -00023e0 9000 e3a0 4008 e1b0 0001 1a00 0064 e3e0 -00023f0 87f0 e8bd 0000 e355 0005 0a00 0000 e357 -0002400 0003 0a00 0006 e1a0 ffe3 ebff 0000 e350 -0002410 0001 1a00 0004 e3e0 fff4 eaff 2008 e288 -0002420 1007 e1a0 0006 e1a0 fbe6 ebff 0000 e350 -0002430 0005 1a00 2008 e3a0 1005 e1a0 0008 e1a0 -0002440 00d5 eb00 600c e5c8 0000 ea00 9000 e3e0 -0002450 0009 e1a0 ffe5 eaff 43f8 e92d 4000 e1a0 -0002460 5004 e1a0 6000 e3a0 4005 e1b0 0001 1a00 -0002470 0064 e3e0 83f8 e8bd 800c e5d5 7008 e595 -0002480 200d e1a0 1007 e1a0 0008 e1a0 fbcd ebff -0002490 0000 e350 0002 1a00 0000 e3a0 0000 e585 -00024a0 0000 ea00 6000 e3e0 0006 e1a0 fff0 eaff -00024b0 4070 e92d 4000 e1a0 5004 e1a0 6000 e3a0 -00024c0 4005 e1b0 0001 1a00 0064 e3e0 8070 e8bd -00024d0 000c e5d5 fc10 ebff 0000 e350 0000 0a00 -00024e0 6000 e3e0 0006 e1a0 fff7 eaff 4070 e92d -00024f0 4000 e1a0 5004 e1a0 6000 e3a0 4005 e1b0 -0002500 0001 1a00 0064 e3e0 8070 e8bd 000c e5d5 -0002510 fbd0 ebff 0000 e350 0000 0a00 6000 e3e0 -0002520 0006 e1a0 fff7 eaff 4070 e92d 5000 e3a0 -0002530 4000 e3a0 fcdd ebff 4000 e1a0 0000 e354 -0002540 0001 0a00 5001 e3a0 0000 ea00 5000 e3a0 -0002550 0005 e1a0 8070 e8bd 4010 e92d 4000 e1a0 -0002560 0000 e354 0000 0a00 fccb ebff 8010 e8bd -0002570 f000 e320 0194 e59f 021c e590 0902 e3c0 -0002580 1000 e3a0 2902 e3a0 1781 e002 0001 e180 -0002590 1178 e59f 021c e581 f000 e320 0000 e281 -00025a0 021c e590 0b01 e3c0 1000 e3a0 2b01 e3a0 -00025b0 1501 e002 0001 e180 1150 e59f 021c e581 -00025c0 f000 e320 0000 e281 021c e590 0a06 e3c0 -00025d0 1000 e3a0 2a06 e3a0 1681 e002 0001 e180 -00025e0 1128 e59f 021c e581 f000 e320 0000 e281 -00025f0 021c e590 0c01 e3c0 1001 e3a0 2c01 e3a0 -0002600 1401 e002 0001 e180 1100 e59f 021c e581 -0002610 f000 e320 0000 e281 021c e590 0008 e3c0 -0002620 1000 e3a0 2008 e3a0 1181 e002 0001 e180 -0002630 10d8 e59f 021c e581 ff1e e12f f000 e320 -0002640 00c8 e59f 061c e590 0b00 e1a0 0fa0 e1a0 -0002650 ff1e e12f e004 e52d 1000 e1a0 f000 e320 -0002660 fff5 ebff 0000 e350 fffc 1aff 00a0 e59f -0002670 0840 e590 0000 e581 f004 e49d 1090 e59f -0002680 0820 e581 ff1e e12f 40f8 e92d ffb7 ebff -0002690 0080 e59f fff8 ebff 000d e1a0 ffec ebff -00026a0 0000 e59d 1070 e59f 0001 e150 0001 0a00 -00026b0 0001 e3a0 001c eb00 5462 e3a0 4206 e3a0 -00026c0 673f e284 6bfe e286 0001 ea00 0004 e495 -00026d0 0004 e484 0006 e154 fffb 3aff 000d e1a0 -00026e0 ffdb ebff 0000 e59d 1030 e59f 0001 e150 -00026f0 0001 0a00 0001 e3a0 000b eb00 fc6b ebff -0002700 701c e59f ff37 e12f f000 e320 fffe eaff -0002710 0000 e480 f000 62ff 1234 1234 4567 4567 -0002720 89ef 89ef 0000 6010 f00e e1a0 4010 e92d -0002730 4000 e1a0 0000 e1a0 0004 e1a0 4010 e8bd -0002740 00e1 ea00 2000 e3a0 1020 e251 4000 e92d -0002750 e002 e1a0 3002 e1a0 c002 e1a0 500c 28a0 -0002760 500c 28a0 1020 2251 fffb 2aff 1e01 e1b0 -0002770 500c 28a0 000c 48a0 1101 e1b0 4000 e8bd -0002780 2004 2480 f00e 01a0 2001 44c0 2001 44c0 -0002790 0101 e311 2001 14c0 f00e e1a0 0003 e352 -00027a0 00e4 9a00 c003 e210 0008 0a00 3001 e4d1 -00027b0 0002 e35c 200c e082 c001 94d1 3001 e4c0 -00027c0 3001 34d1 c001 94c0 2004 e242 3001 34c0 -00027d0 3003 e211 00c4 0a00 2008 e252 0004 3a00 -00027e0 3004 e491 c004 e491 3004 e480 c004 e480 -00027f0 fff8 eaff 2004 e292 3004 5491 3004 5480 -0002800 00cc ea00 3001 e180 0003 e313 2000 e1a0 -0002810 e004 e52d 000b 1a00 c048 e59f 3004 e491 -0002820 e00c e043 e003 e1ce 038c e11e 3004 0482 -0002830 fff9 0aff 10ff e213 3423 11a0 1001 e4c2 -0002840 fffb 1aff f004 e49d 3001 e4d1 0000 e353 -0002850 3001 e4c2 3001 14d1 3001 14c2 0000 1353 -0002860 fff8 1aff f004 e49d 0101 0101 0003 e310 -0002870 4010 e92d 0003 0311 4000 e1a0 000a 1a00 -0002880 e04c e59f 2004 e252 0006 ba00 3004 e491 -0002890 c00e e043 c003 e1cc c38e e01c 3004 0480 -00028a0 fff7 0aff 1004 e241 2004 e282 2001 e252 -00028b0 0005 ba00 3001 e4d1 0000 e353 3001 e4c0 -00028c0 fff9 1aff 1002 e1a0 00a2 eb00 0004 e1a0 -00028d0 8010 e8bd 0101 0101 c001 e280 0003 ea00 -00028e0 1001 e4d0 0000 e351 000c 0040 f00e 01a0 -00028f0 0003 e310 fff9 1aff 2038 e59f 1004 e490 -0002900 3002 e041 3001 e1c3 0382 e113 fffa 0aff -0002910 00ff e311 000c e040 0003 0240 f00e 01a0 -0002920 0cff e311 0002 0240 f00e 01a0 08ff e311 -0002930 0001 0240 f00e e1a0 0101 0101 c001 e190 -0002940 0021 4a00 c0a0 e071 2000 e3a0 001a 3a00 -0002950 c220 e071 000f 3a00 c420 e071 0001 3a00 -0002960 3000 e3a0 0020 ea00 c3a0 e071 0381 2040 -0002970 2002 e0a2 c320 e071 0301 2040 2002 e0a2 -0002980 c2a0 e071 0281 2040 2002 e0a2 c220 e071 -0002990 0201 2040 2002 e0a2 c1a0 e071 0181 2040 -00029a0 2002 e0a2 c120 e071 0101 2040 2002 e0b2 -00029b0 c0a0 e071 0081 2040 2002 e0a2 1001 e050 -00029c0 1000 31a0 0002 e0a2 f00e e1a0 2102 e211 -00029d0 1000 4261 3040 e032 0000 2260 c220 e071 -00029e0 001d 3a00 c420 e071 000f 3a00 1301 e1a0 -00029f0 c420 e071 233f e382 000b 3a00 1301 e1a0 -0002a00 c420 e071 263f e382 0007 3a00 1301 e1a0 -0002a10 c420 e071 293f e382 2c3f 2382 1301 21a0 -0002a20 c000 e271 002f 2a00 1321 21a0 c3a0 e071 -0002a30 0381 2040 2002 e0a2 c320 e071 0301 2040 -0002a40 2002 e0a2 c2a0 e071 0281 2040 2002 e0a2 -0002a50 c220 e071 0201 2040 2002 e0a2 c1a0 e071 -0002a60 0181 2040 2002 e0a2 c120 e071 0101 2040 -0002a70 2002 e0b2 ffeb 2aff c0a0 e071 0081 2040 -0002a80 2002 e0a2 1001 e050 1000 31a0 0002 e0a2 -0002a90 3fc3 e1b0 0000 4260 1000 2261 f00e e1a0 -0002aa0 00c1 eb00 003f eb00 0003 e92d 00bf eb00 -0002ab0 0003 e8bd 007a eb00 000f e92d 00be eb00 -0002ac0 000f e8bd fa3b ebff ff17 eaff 4001 e92d -0002ad0 00bc eb00 00ae eb00 4001 e8bd 0000 ea00 -0002ae0 0000 e3e0 fce7 eaff 002b ea00 2020 e252 -0002af0 4010 e92d 0005 3a00 5018 28b1 5018 28a0 -0002b00 5018 28b1 5018 28a0 2020 2252 fff9 2aff -0002b10 ce02 e1b0 5018 28b1 5018 28a0 0018 48b1 -0002b20 0018 48a0 cf02 e1b0 4010 e8bd 3004 2491 -0002b30 3004 2480 f00e 01a0 2f82 e1b0 2001 44d1 -0002b40 3001 24d1 c001 24d1 2001 44c0 3001 24c0 -0002b50 c001 24c0 f00e e1a0 2000 e3a0 0004 e351 -0002b60 0008 3a00 c003 e210 fef6 0aff c004 e26c -0002b70 2001 e4c0 0002 e35c 2001 a4c0 100c e041 -0002b80 2001 c4c0 feef eaff cf81 e1b0 2001 24c0 -0002b90 2001 24c0 2001 44c0 f00e e1a0 0002 e3a0 -0002ba0 1002 e3a0 008b ea00 500e e1a0 0086 eb00 -0002bb0 4000 e1a0 0007 e3c0 100d e1a0 d060 e280 -0002bc0 e005 e1a0 4010 e92d 300a e1a0 fcc0 ebff -0002bd0 6000 e3a0 7000 e3a0 8000 e3a0 b000 e3a0 -0002be0 4010 e8bd d007 e3c1 c004 e1a0 09c0 e8ac -0002bf0 09c0 e8ac 09c0 e8ac 09c0 e8ac 4013 e92d -0002c00 1000 e3a0 0000 e3a0 0000 e1a0 1040 e281 -0002c10 2001 e080 2e11 e282 201c e584 0001 e3a0 -0002c20 1018 e584 0010 e584 4013 e8bd 1000 e1a0 -0002c30 0014 e584 f00e e1a0 4010 e92d 0003 e92d -0002c40 0061 eb00 4000 e1a0 0003 e8bd 2014 e594 -0002c50 301c e594 e000 e082 3003 e04d 0003 e15e -0002c60 2000 e581 000a 8a00 300e e093 1a01 e28e -0002c70 1007 e281 3063 e1a0 3007 e3c3 1007 e3c1 -0002c80 0003 e151 1003 81a0 0002 e041 1014 e584 -0002c90 8010 e8bd 2000 e1a0 0000 e3a0 0000 e1a0 -0002ca0 8010 e8bd 43c0 e92d 003e e92d 5001 e1a0 -0002cb0 4000 e1a0 02c3 eb00 0000 e3a0 4000 e58d -0002cc0 5004 e58d 0000 e1a0 0008 e58d 000d e1a0 -0002cd0 f9b4 ebff 4000 e1a0 5001 e1a0 0003 e89d -0002ce0 6002 e1a0 7003 e1a0 0000 e1a0 0000 e1a0 -0002cf0 0000 e1a0 1000 e3a0 0000 e3a0 0000 e1a0 -0002d00 8000 e1a0 0030 eb00 9000 e1a0 8020 e580 -0002d10 0000 e3a0 1000 e3a0 0000 e1a0 1001 e280 -0002d20 1024 e589 1000 e3a0 0000 e3a0 0000 e1a0 -0002d30 0028 e589 0000 e3a0 1000 e3a0 0000 e1a0 -0002d40 002c e589 0000 e3a0 1000 e3a0 0000 e1a0 -0002d50 0030 e589 0000 e1a0 0000 e1a0 0000 e1a0 -0002d60 0000 e1a0 0000 e1a0 0000 e1a0 0000 e1a0 -0002d70 0000 e1a0 0000 e1a0 d00c e28d 0004 e1a0 -0002d80 1005 e1a0 2006 e1a0 3007 e1a0 01f0 e8bd -0002d90 8200 e8bd 0000 e3a0 4010 e92d 0000 e1a0 -0002da0 0000 e1a0 0000 e1a0 8010 e8bd f00e e1a0 -0002db0 0000 e3e0 1002 e3e0 f00e e1a0 4010 e92d -0002dc0 000a eb00 8010 e8bd f00e e1a0 0000 e59f -0002dd0 f00e e1a0 3a1c 0008 4010 e92d 0008 eb00 -0002de0 0000 e350 8010 08bd 4010 e8bd fc25 eaff -0002df0 f00e e1a0 4010 e92d fff3 ebff 0004 e280 -0002e00 8010 e8bd 4070 e92d 5001 e1a0 1000 e1a0 -0002e10 4000 e1a0 0000 e3e0 0000 e1a0 0001 e370 -0002e20 2000 e1a0 0004 01a0 1005 01a0 4070 08bd -0002e30 0006 0a00 0003 e372 1005 11a0 0004 11a0 -0002e40 e00f 11a0 f002 11a0 0000 e3a0 8070 e8bd -0002e50 2001 e240 4070 e92d 000e e352 50c0 228f -0002e60 40b8 e28f 001c 2a00 2017 e3a0 30c0 e59f -0002e70 0290 e002 3003 e08f 0002 e350 2003 e082 -0002e80 5017 e242 000e 1a00 0301 e311 40a4 128f -0002e90 0011 1a00 0382 e311 40ac 128f 000e 1a00 -0002ea0 0201 e311 40b0 128f 000b 1a00 0202 e311 -0002eb0 40b0 128f 0008 1a00 0101 e311 40b0 128f -0002ec0 0005 ea00 0008 e350 4001 01a0 0002 0a00 -0002ed0 0009 e350 0001 0351 50a4 028f 000a e3a0 -0002ee0 0000 ea00 5001 e285 fbe8 ebff 0000 e5d5 -0002ef0 0000 e350 fffa 1aff 0001 ea00 4001 e284 -0002f00 fbe2 ebff 0000 e5d4 0000 e350 fffa 1aff -0002f10 000a e3a0 fbdd ebff 0001 e3a0 8070 e8bd -0002f20 0000 0000 6e55 6e6b 776f 206e 6973 6e67 -0002f30 6c61 0000 0960 0000 6e49 6176 696c 2064 -0002f40 704f 7265 7461 6f69 006e 0000 6944 6976 -0002f50 6564 4220 2079 655a 6f72 0000 764f 7265 -0002f60 6c66 776f 0000 0000 6e55 6564 6672 6f6c -0002f70 0077 0000 6e49 7865 6361 2074 6552 7573 -0002f80 746c 0000 203a 6548 7061 6d20 6d65 726f -0002f90 2079 6f63 7272 7075 6574 0064 c220 e071 -0002fa0 2000 e3a0 fe7b 3aff c420 e071 fe6d 3aff -0002fb0 3000 e3a0 fe8c eaff 3000 e3a0 0002 ea00 -0002fc0 c000 e3a0 c003 e7c0 3001 e283 0001 e153 -0002fd0 fffa 3aff 2000 e1a0 f000 e320 c030 e59f -0002fe0 c06c e59c c000 e582 0002 e1a0 2004 e282 -0002ff0 f000 e320 c018 e59f c070 e59c c004 e482 -0003000 f000 e320 c008 e59f c074 e59c c004 e482 -0003010 ff1e e12f 0000 e490 4070 e92d 4000 e1a0 -0003020 5001 e1a0 1005 e1a0 0004 e1a0 ffe1 ebff -0003030 8070 e8bd 4010 e92d f000 e320 05c0 e59f -0003040 15c0 e59f 0060 e581 f000 e320 0000 e281 -0003050 0070 e590 0407 e3c0 1003 e3a0 2407 e3a0 -0003060 1c01 e002 0001 e180 1598 e59f 0070 e581 -0003070 f000 e320 0000 e281 0070 e590 0901 e3c0 -0003080 1000 e3a0 2901 e3a0 1701 e002 0001 e180 -0003090 1570 e59f 0070 e581 f000 e320 0000 e281 -00030a0 0070 e590 0902 e3c0 1001 e3a0 2902 e3a0 -00030b0 1781 e002 0001 e180 1548 e59f 0070 e581 -00030c0 f000 e320 0000 e281 0068 e590 0a02 e3c0 -00030d0 1000 e3a0 2a02 e3a0 1681 e002 0001 e180 -00030e0 1520 e59f 0068 e581 f000 e320 0000 e281 -00030f0 0068 e590 0a01 e3c0 1000 e3a0 2a01 e3a0 -0003100 1601 e002 0001 e180 14f8 e59f 0068 e581 -0003110 f000 e320 0000 e281 0068 e590 0b01 e3c0 -0003120 1001 e3a0 2b01 e3a0 1501 e002 0001 e180 -0003130 14d0 e59f 0068 e581 4000 e3a0 0000 ea00 -0003140 4001 e284 c906 e254 ce6a 225c fffb 3aff -0003150 f000 e320 04b0 e59f 0000 e590 1003 e3c0 -0003160 0002 e381 14a0 e59f 0000 e581 f000 e320 -0003170 0000 e281 0000 e590 000c e3c0 1001 e3a0 -0003180 200c e3a0 1101 e002 0001 e180 1478 e59f -0003190 0000 e581 f000 e320 0000 e281 0000 e590 -00031a0 0010 e3c0 1001 e3a0 2010 e3a0 1201 e002 -00031b0 0001 e180 1450 e59f 0000 e581 f000 e320 -00031c0 f000 e320 0440 e59f 0004 e590 0f00 e1a0 -00031d0 0fa0 e1a0 0001 e350 fff8 1aff f000 e320 -00031e0 0428 e59f 141c e59f 0020 e581 f000 e320 -00031f0 0028 e581 f000 e320 0011 e3a0 0024 e581 -0003200 f000 e320 002c e581 f000 e320 0c3f e3a0 -0003210 0054 e581 f000 e320 03f4 e59f 0064 e581 -0003220 f000 e320 03ec e59f 0068 e581 f000 e320 -0003230 03e4 e59f 000c e581 fa4c ebff 8010 e8bd -0003240 f000 e320 0c01 e3a0 13d0 e59f 0004 e581 -0003250 f000 e320 f000 e320 03c0 e59f 0004 e590 -0003260 0f00 e1a0 0fa0 e1a0 0000 e350 fff8 1aff -0003270 f000 e320 03a4 e59f 0360 e590 0007 e380 -0003280 1398 e59f 0360 e581 f000 e320 0000 e281 -0003290 0360 e590 0c07 e3c0 1007 e3a0 2c07 e3a0 -00032a0 1401 e002 0001 e180 1370 e59f 0360 e581 -00032b0 f000 e320 0000 e281 0360 e590 0807 e3c0 -00032c0 1007 e3a0 2807 e3a0 1801 e002 0001 e180 -00032d0 1348 e59f 0360 e581 f000 e320 0000 e281 -00032e0 0364 e590 1007 e3c0 0001 e381 132c e59f -00032f0 0364 e581 f000 e320 0000 e281 0364 e590 -0003300 0c07 e3c0 1001 e3a0 2c07 e3a0 1401 e002 -0003310 0001 e180 1304 e59f 0364 e581 f000 e320 -0003320 0000 e281 0364 e590 0807 e3c0 1001 e3a0 -0003330 2807 e3a0 1801 e002 0001 e180 12dc e59f -0003340 0364 e581 f000 e320 0000 e281 0368 e590 -0003350 1007 e3c0 0003 e381 12c0 e59f 0368 e581 -0003360 f000 e320 0000 e281 0368 e590 0c07 e3c0 -0003370 1003 e3a0 2c07 e3a0 1401 e002 0001 e180 -0003380 1298 e59f 0368 e581 f000 e320 0000 e281 -0003390 0368 e590 0807 e3c0 1003 e3a0 2807 e3a0 -00033a0 1801 e002 0001 e180 1270 e59f 0368 e581 -00033b0 f000 e320 0000 e281 0238 e590 0801 e3c0 -00033c0 1000 e3a0 2801 e3a0 1801 e002 0001 e180 -00033d0 1248 e59f 0238 e581 f000 e320 0000 e281 -00033e0 0220 e590 1007 e3c0 0002 e381 122c e59f -00033f0 0220 e581 f000 e320 0000 e281 0220 e590 -0003400 0078 e3c0 1001 e3a0 2078 e3a0 1181 e002 -0003410 0001 e180 1204 e59f 0220 e581 f000 e320 -0003420 0000 e281 0210 e590 0002 e3c0 1001 e3a0 -0003430 2002 e3a0 1081 e002 0001 e180 11dc e59f -0003440 0210 e581 f000 e320 0000 e281 0210 e590 -0003450 0c02 e3c0 1001 e3a0 2c02 e3a0 1481 e002 -0003460 0001 e180 11b4 e59f 0210 e581 f000 e320 -0003470 0000 e281 0244 e590 10ff e3c0 0020 e381 -0003480 1198 e59f 0244 e581 f000 e320 0000 e281 -0003490 0244 e590 0cff e3c0 1020 e3a0 2cff e3a0 -00034a0 1401 e002 0001 e180 1170 e59f 0244 e581 -00034b0 f000 e320 0000 e281 0244 e590 08ff e3c0 -00034c0 1020 e3a0 28ff e3a0 1801 e002 0001 e180 -00034d0 1148 e59f 0244 e581 f000 e320 0000 e281 -00034e0 0278 e590 08ff e3c0 1010 e3a0 1801 e002 -00034f0 0001 e180 1124 e59f 0278 e581 f000 e320 -0003500 0001 e3a0 0a80 e1a0 02dc e581 f000 e320 -0003510 0000 e281 0204 e590 0b02 e3c0 1001 e3a0 -0003520 2b02 e3a0 1581 e002 0001 e180 10ec e59f -0003530 0204 e581 f000 e320 0000 e281 0254 e590 -0003540 08ff e3c0 1008 e3a0 28ff e3a0 1801 e002 -0003550 0001 e180 10c4 e59f 0254 e581 f000 e320 -0003560 0000 e281 0254 e590 0cff e3c0 1008 e3a0 -0003570 2cff e3a0 1401 e002 0001 e180 109c e59f -0003580 0254 e581 f000 e320 0000 e281 0254 e590 -0003590 10ff e3c0 0008 e381 1080 e59f 0254 e581 -00035a0 f000 e320 0001 e3a0 0600 e1a0 02f8 e581 -00035b0 f000 e320 0001 e3a0 0680 e1a0 02f8 e581 -00035c0 f000 e320 0001 e3a0 0700 e1a0 02f8 e581 -00035d0 f000 e320 0001 e3a0 0600 e1a0 02dc e581 -00035e0 f000 e320 0001 e3a0 0400 e1a0 02dc e581 -00035f0 f000 e320 0001 e3a0 0200 e1a0 02e4 e581 -0003600 ff1e e12f f815 8341 0000 e800 03b4 e4d0 -0003610 0001 8430 0033 8020 0123 0014 f041 0000 -0003620 0000 e4d0 4010 e92d f729 ebff 8010 e8bd -0003630 ff1e e12f d050 e24d 00ff e88d 5000 e14f -0003640 e008 e24e e04c e58d 0020 e28d 100f e215 -0003650 7f00 08c0 001c 0280 4000 08a0 0006 0a00 -0003660 2000 e10f 300f e3c2 1001 e183 f001 e12f -0003670 7f00 e8a0 f002 e12f 4000 e8a0 6f10 ee16 -0003680 7f10 ee15 00e0 e880 300c e240 1000 e593 -0003690 000d e1a0 2114 e59f 8114 e59f 80b0 e1d8 -00036a0 9110 e59f 0009 e158 0000 0a00 2108 e59f -00036b0 faff ebff 1fff e8bd d018 e28d 8000 e8fd -00036c0 d050 e24d 00ff e88d 5000 e14f e004 e24e -00036d0 e04c e58d 0020 e28d 100f e215 7f00 08c0 -00036e0 001c 0280 4000 08a0 0006 0a00 2000 e10f -00036f0 300f e3c2 1001 e183 f001 e12f 7f00 e8a0 -0003700 f002 e12f 4000 e8a0 6f10 ee16 7f10 ee15 -0003710 00e0 e880 300c e240 1000 e593 000d e1a0 -0003720 2098 e59f fae2 ebff 1fff e8bd d018 e28d -0003730 8000 e8fd d050 e24d 00ff e88d 5000 e14f -0003740 e004 e24e e04c e58d 0020 e28d 100f e215 -0003750 7f00 08c0 001c 0280 4000 08a0 0006 0a00 -0003760 2000 e10f 300f e3c2 1001 e183 f001 e12f -0003770 7f00 e8a0 f002 e12f 4000 e8a0 6f10 ee16 -0003780 7f30 ee15 00e0 e880 300c e240 1000 e593 -0003790 000d e1a0 2028 e59f fac5 ebff 1fff e8bd -00037a0 d018 e28d 8000 e8fd 0070 e120 ff1e e12f -00037b0 aaaa 0000 3938 0008 ffff 0000 dddd 0000 -00037c0 cccc 0000 bbbb 0000 4010 e92d fd88 ebff -00037d0 1000 e3a0 1000 e580 8010 e8bd 6241 6f6e -00037e0 6d72 6c61 7420 7265 696d 616e 6974 6e6f -00037f0 0000 4100 6972 6874 656d 6974 2063 7865 -0003800 6563 7470 6f69 3a6e 0020 6c49 656c 6167 -0003810 206c 6e69 7473 7572 7463 6f69 006e 0000 -0003820 4900 746e 7265 7572 7470 7220 6365 6965 -0003830 6576 0064 0000 0000 6c49 656c 6167 206c -0003840 6461 7264 7365 0073 0000 0000 0000 5400 -0003850 7265 696d 616e 6974 6e6f 7220 7165 6575 -0003860 7473 0000 0000 7453 6361 206b 766f 7265 -0003870 6c66 776f 0000 0000 0000 0000 5200 6465 -0003880 7269 6365 3a74 6320 6e61 7427 6f20 6570 -0003890 3a6e 0020 754f 2074 666f 6820 6165 2070 -00038a0 656d 6f6d 7972 0000 0000 5500 6573 2d72 -00038b0 6564 6966 656e 2064 6973 6e67 6c61 3120 -00038c0 0000 7355 7265 642d 6665 6e69 6465 7320 -00038d0 6769 616e 206c 0032 5000 7275 2065 6976 -00038e0 7472 6175 206c 6e66 6320 6c61 656c 0064 -00038f0 2b43 202b 696c 7262 7261 2079 7865 6563 -0003900 7470 6f69 006e 4f00 7475 6f20 2066 6568 -0003910 7061 0000 0000 0000 0000 0000 0000 0000 -0003920 0000 0008 0000 0002 0000 6000 0000 0200 -0003930 2000 ffff 2000 0000 ffff 0000 f018 e59f -0003940 f018 e59f f018 e59f f018 e59f f018 e59f -0003950 f018 e59f f018 e59f f018 e59f 1268 0008 -0003960 0040 0000 004c 0000 0050 0000 0060 0000 -0003970 0070 0000 0000 ffff 0070 0000 40ff e92d -0003980 fffe eaff 80ff e8fd fffe eaff e004 e24e -0003990 40ff e92d fffe eaff 80ff e8fd e004 e24e -00039a0 40ff e92d fffe eaff 80ff e8fd fffe eaff -00039b0 e004 e24e 4000 e92d e000 e14f 401f e92d -00039c0 0000 e10f 2000 e1a0 00e0 e200 0013 e380 -00039d0 f000 e121 0004 e92d 308c e59f 4000 e593 -00039e0 40ff e204 3084 e59f 0000 e593 0000 e110 -00039f0 0013 0a00 3078 e59f 2000 e593 0004 e92d -0003a00 000f e350 0001 1280 0000 e583 5fff e92d -0003a10 2060 e59f 1184 e1a0 2001 e082 4001 e92d -0003a20 0004 e1a0 e00f e1a0 e004 e28e f000 e592 -0003a30 4001 e8bd 5fff e8bd 0004 e8bd 3030 e59f -0003a40 2000 e583 0004 e8bd 2080 e382 f002 e121 -0003a50 1001 e3a0 0020 e59f 1000 e580 401f e8bd -0003a60 f00e e169 8000 e8fd fffe eaff 0484 e000 -0003a70 0488 e000 0470 e000 3000 ffff 0014 f280 -0003a80 ff01 ff01 ff01 ff01 2e01 0182 0182 0182 -0003a90 0182 0182 ff02 0101 00ed 0000 diff --git a/board/samsung/universal/universal.c b/board/samsung/universal/universal.c index daa44a1..ebe2a74 100644 --- a/board/samsung/universal/universal.c +++ b/board/samsung/universal/universal.c @@ -129,6 +129,17 @@ static struct i2c_gpio_bus_data i2c_cypress_gpio7 = { .scl_pin = 4, }; +/* + * i2c gpio7 - kessler rev 09 + * SDA: MP05[1] + * SCL: MP05[0] + */ +static struct i2c_gpio_bus_data i2c_aries_gpio7 = { + .sda_pin = 1, + .scl_pin = 0, +}; + + static struct i2c_gpio_bus i2c_gpio[] = { { .bus = &i2c_2, @@ -164,16 +175,6 @@ enum { MACH_CYPRESS, }; -#ifdef CONFIG_LCD -typedef enum { - LCD_NONE, - LCD_AMOLED, - LCD_TFT, -} lcd_type_t; - -static lcd_type_t lcd_type; -#endif - #define SPLIT_SCREEN_FEATURE 0x100 /* board is MACH_AQUILA and board is like below. */ @@ -183,6 +184,10 @@ static lcd_type_t lcd_type; #define MEDIA_BOARD 0x1000 #define BAMBOO_BOARD 0x2000 +#ifdef ARIES +#define ARIES_BOARD 0x4000 +#endif /* ARIES */ + /* board is MACH_P1P2 and board is like below. */ #define P1_REAL_BOARD 0x200 #define P2_REAL_BOARD 0x400 @@ -244,22 +249,17 @@ static int board_is_j1b2(void) return machine_is_aquila() && (board_rev & J1_B2_BOARD); } -static int board_is_p2_real(void) +#ifdef ARIES +static int board_is_aries(void) { - return machine_is_p1p2() && (board_rev & P2_REAL_BOARD); + return machine_is_aquila() && (board_rev & ARIES_BOARD); } +#endif -#ifdef CONFIG_LCD -static int lcd_is_amoled(void) -{ - return lcd_type == LCD_AMOLED; -} - -static int lcd_is_tft(void) +static int board_is_p2_real(void) { - return lcd_type == LCD_TFT; + return machine_is_p1p2() && (board_rev & P2_REAL_BOARD); } -#endif static void enable_battery(void); @@ -278,7 +278,16 @@ void i2c_init_board(void) i2c_gpio[I2C_GPIO7].bus = &i2c_cypress_gpio7; i2c_gpio[I2C_GPIO7].bus->gpio_base = (unsigned int)&gpio->gpio_mp0_5; - } else { + } +#ifdef ARIES + else if (board_is_aries()) { + i2c_gpio[I2C_GPIO6].bus = &i2c_cypress_gpio6; + i2c_gpio[I2C_GPIO7].bus = &i2c_aries_gpio7; + i2c_gpio[I2C_GPIO7].bus->gpio_base = + (unsigned int)&gpio->gpio_mp0_5; + } +#endif /* ARIES */ + else { num_bus--; } @@ -376,6 +385,10 @@ static char *display_features(int board, int board_rev) count += sprintf(buf + count, " - Media"); if (board_rev & BAMBOO_BOARD) count += sprintf(buf + count, " - Bamboo"); +#ifdef ARIES + if (board_rev & ARIES_BOARD) + count += sprintf(buf + count, " - Aries"); +#endif /* ARIES */ } else if (board == MACH_P1P2) { /* P1P2 */ if (board_rev & P1_REAL_BOARD) @@ -400,6 +413,10 @@ static void check_board_revision(int board, int rev) board_rev &= ~(J1_B2_BOARD | LIMO_UNIVERSAL_BOARD); } +#ifdef ARIES + if (rev & ARIES_BOARD) + board_rev &= ~(J1_B2_BOARD); +#endif /* ARIES */ if (rev & MEDIA_BOARD) board_rev &= ~(J1_B2_BOARD | LIMO_UNIVERSAL_BOARD); @@ -427,7 +444,24 @@ static void check_board_revision(int board, int rev) static unsigned int get_hw_revision(struct s5pc1xx_gpio_bank *bank) { unsigned int rev; - +#ifdef ARIES + gpio_direction_input(bank, 2); + gpio_direction_input(bank, 3); + gpio_direction_input(bank, 4); + gpio_direction_input(bank, 7); + + gpio_set_pull(bank, 2, GPIO_PULL_NONE); /* HWREV_MODE0 */ + gpio_set_pull(bank, 3, GPIO_PULL_NONE); /* HWREV_MODE1 */ + gpio_set_pull(bank, 4, GPIO_PULL_NONE); /* HWREV_MODE2 */ + gpio_set_pull(bank, 7, GPIO_PULL_NONE); /* HWREV_MODE3 */ + + rev = gpio_get_value(bank, 2); + rev |= (gpio_get_value(bank, 3) << 1); + rev |= (gpio_get_value(bank, 4) << 2); + rev |= (gpio_get_value(bank, 7) << 3); + /* test */ + rev = 9; +#else gpio_direction_input(bank, 1); gpio_direction_input(bank, 2); gpio_direction_input(bank, 3); @@ -442,6 +476,7 @@ static unsigned int get_hw_revision(struct s5pc1xx_gpio_bank *bank) rev |= (gpio_get_value(bank, 3) << 1); rev |= (gpio_get_value(bank, 4) << 2); rev |= (gpio_get_value(bank, 1) << 3); +#endif /* ARIES */ return rev; } @@ -499,8 +534,13 @@ static void check_hw_revision(void) gpio_direction_input(&gpio->gpio_j2, 6); /* Check board */ +#ifndef ARIES if (gpio_get_value(&gpio->gpio_h1, 2) == 0) board_rev |= LIMO_UNIVERSAL_BOARD; +#else + if (gpio_get_value(&gpio->gpio_h1, 2) == 0) + board_rev |= ARIES_BOARD; +#endif /* ARIES */ if (gpio_get_value(&gpio->gpio_h3, 2) == 0) board_rev |= LIMO_REAL_BOARD; @@ -570,26 +610,22 @@ static void check_hw_revision(void) gpio_set_pull(&gpio->gpio_j0, 7, GPIO_PULL_DOWN); /* C110 Geminus for rev0.0 */ - if (board != MACH_P1P2) { - gpio_set_pull(&gpio->gpio_j1, 2, GPIO_PULL_NONE); - gpio_direction_input(&gpio->gpio_j1, 2); - if (gpio_get_value(&gpio->gpio_j1, 2) == 1) { - board = MACH_GEMINUS; - if ((board_rev & ~BOARD_MASK) == 3) - board_rev &= ~0xff; - } - gpio_set_pull(&gpio->gpio_j1, 2, GPIO_PULL_DOWN); - gpio_direction_output(&gpio->gpio_j1, 2, 0); + gpio_set_pull(&gpio->gpio_j1, 2, GPIO_PULL_NONE); + gpio_direction_input(&gpio->gpio_j1, 2); + if (gpio_get_value(&gpio->gpio_j1, 2) == 1) { + board = MACH_GEMINUS; + if ((board_rev & ~BOARD_MASK) == 3) + board_rev &= ~0xff; } + gpio_set_pull(&gpio->gpio_j1, 2, GPIO_PULL_DOWN); + gpio_direction_output(&gpio->gpio_j1, 2, 0); + /* C110 Geminus for rev0.1 ~ */ gpio_set_pull(&gpio->gpio_j0, 6, GPIO_PULL_NONE); gpio_direction_input(&gpio->gpio_j0, 6); if (gpio_get_value(&gpio->gpio_j0, 6) == 1) board = MACH_GEMINUS; gpio_set_pull(&gpio->gpio_j0, 6, GPIO_PULL_DOWN); -#ifdef CONFIG_LCD - lcd_type = LCD_NONE; /* TODO: if the board is not p1p2, this code should be modified */ -#endif } /* Set machine id */ @@ -669,7 +705,7 @@ static void check_auto_burn(void) writel(0xa5a55a5a, magic_base + 0x4); } -void pmic_pin_init(void) +static void pmic_pin_init(void) { unsigned int reg, value; @@ -920,9 +956,6 @@ static void check_battery(void) unsigned char val[2]; unsigned char addr = 0x36; /* max17040 fuel gauge */ - if(machine_is_p1p2()) - return; - if (machine_is_aquila()) { if (board_is_j1b2()) return; @@ -936,9 +969,6 @@ static void check_battery(void) else i2c_set_bus_num(I2C_GPIO3); - if(machine_is_p1p2()) - return; - if (i2c_probe(addr)) { printf("Can't found max17040 fuel gauge\n"); return; @@ -996,12 +1026,32 @@ static void check_mhl(void) i2c_read((0x72 >> 1), 0xa0, 1, val, 1); } +#define CHARGER_ANIMATION_FRAME 6 +static int max8998_power_key(void) +{ + unsigned char addr, val[2]; + i2c_set_bus_num(I2C_PMIC); + addr = 0xCC >> 1; + if (i2c_probe(addr)) { + printf("Can't found max8998\n"); + return 0; + } + + /* Accessing IRQ1 register */ + i2c_read(addr, 0x00, 1, val, 1); + printf("MAX8998 IRQ1 = 0x%x\n", val[0]); + if (val[0] & (1 << 6)) + return 1; +} static void into_charge_mode(void) { unsigned char addr = 0xCC >> 1; /* max8998 */; unsigned char val[2]; unsigned int level; int i, j; + bmp_image_t *bmp[CHARGER_ANIMATION_FRAME]; + unsigned long len[CHARGER_ANIMATION_FRAME]; + ulong bmp_addr[CHARGER_ANIMATION_FRAME]; i2c_set_bus_num(I2C_PMIC); @@ -1018,37 +1068,35 @@ static void into_charge_mode(void) i2c_write(addr, 0x0C, 1, val, 1); #ifdef CONFIG_S5PC1XXFB - /* TODO: change to Image animation */ init_font(); - set_font_xy(0, 0); - set_font_color(FONT_WHITE); - fb_printf("charging"); - level = battery_soc / 25; + /* TODO: write the image-text for the charger */ - for (i = 0; i < 3; i++) { - if (level == 0) - udelay(1 * 1000 * 1000); + level = battery_soc * CHARGER_ANIMATION_FRAME / 100; + if (level >= CHARGER_ANIMATION_FRAME) + level = CHARGER_ANIMATION_FRAME - 1; - for (j = 0; j < 4; j++) { - fb_printf(".."); + for (i = 0; i < CHARGER_ANIMATION_FRAME; i++) + bmp_addr[i] = battery_charging_animation[i]; - if (j >= level) - udelay(1 * 1000 * 1000); + lcd_display_clear(); + for (i = 0; i < 3; i++) { + for (j = level; j < CHARGER_ANIMATION_FRAME; j++) { + int k; + + bmp[j] = gunzip_bmp(bmp_addr[j], &len[j]); + lcd_display_bitmap((ulong) bmp[j], 140, 202); + free(bmp[j]); + + for (k = 0; k < 10; k++) + if (max8998_power_key()) + return; + else + udelay(100 * 1000); + if (max8998_power_key()) + return; } - - if (level <= 4) - udelay(1 * 1000 * 1000); - - set_font_xy(0, 0); - set_font_color(FONT_XOR); - fb_printf("charging........"); - - set_font_xy(0, 0); - set_font_color(FONT_WHITE); - fb_printf("charging"); } - exit_font(); #endif @@ -1065,6 +1113,7 @@ static void check_micro_usb(int intr) { unsigned char addr; unsigned char val[2]; + static int started_charging_once = 0; if (cpu_is_s5pc100()) return; @@ -1076,6 +1125,10 @@ static void check_micro_usb(int intr) if (machine_is_cypress()) i2c_set_bus_num(I2C_GPIO6); +#ifdef ARIES + if (board_is_aries()) + i2c_set_bus_num(I2C_GPIO6); +#endif /* ARIES */ else i2c_set_bus_num(I2C_PMIC); @@ -1102,8 +1155,10 @@ static void check_micro_usb(int intr) * If USB, use default 475mA * If Charger, use 600mA and go to charge mode */ - if (val[0] & FSA_DEDICATED_CHARGER) + if ((val[0] & FSA_DEDICATED_CHARGER) && !started_charging_once) { + started_charging_once = 1; into_charge_mode(); + } /* If Factory Mode is Boot ON-USB, go to download mode */ i2c_read(addr, 0x07, 1, val, 1); @@ -1128,10 +1183,18 @@ static void check_micro_usb(int intr) #define MAX8998_LDO16 (1 << 5) #define MAX8998_LDO17 (1 << 4) +#ifdef ARIES +#define MAX8998_REG_LDO7 0x21 +#define MAX8998_REG_LDO17 0x29 +#endif /* ARIES */ + static void init_pmic(void) { unsigned char addr; unsigned char val[2]; +#ifdef ARIES + unsigned char val2[2]; +#endif /* ARIES */ if (cpu_is_s5pc100()) return; @@ -1157,17 +1220,39 @@ static void init_pmic(void) */ val[0] &= ~(MAX8998_LDO10 | MAX8998_LDO11 | MAX8998_LDO12 | MAX8998_LDO13); +#ifndef ARIES val[0] |= (1 << 7); +#else + val[0] |= ((1 << 7)|(1 << 6)); + val2[0] = 0x2; + i2c_write(addr, MAX8998_REG_LDO7, 1, val2, 1); + i2c_read(addr, MAX8998_REG_LDO7, 1, val2, 1); +#endif /* ARIES */ i2c_write(addr, MAX8998_REG_ONOFF2, 1, val, 1); i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); /* ONOFF3 */ i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); +#ifndef ARIES /* * Disable LDO14(CAM_CIF_1.8), LDO15(CAM_AF_3.3V), * LDO16(VMIPI_1.8V), LDO17(CAM_8M_1.8V) */ val[0] &= ~(MAX8998_LDO14 | MAX8998_LDO15 | MAX8998_LDO16 | MAX8998_LDO17); +#else + + /* + * Disable LDO14(CAM_CIF_1.8), LDO15(CAM_AF_3.3V), + * LDO16(VMIPI_1.8V), LDO17(CAM_8M_1.8V) + */ + val[0] &= ~(MAX8998_LDO14 | MAX8998_LDO15 | + MAX8998_LDO16); + + val[0] |= MAX8998_LDO17; + val2[0] = 0xE; + i2c_write(addr, MAX8998_REG_LDO7, 1, val2, 1); + i2c_read(addr, MAX8998_REG_LDO7, 1, val2, 1); +#endif /* ARIES */ i2c_write(addr, MAX8998_REG_ONOFF3, 1, val, 1); i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); } @@ -1517,8 +1602,12 @@ void lcd_cfg_gpio(void) } if (machine_is_cypress()) { +#if 0 /* universal cypress */ /* FLCD_CS */ gpio_cfg_pin(&gpio_base->gpio_mp0_1, 0, GPIO_OUTPUT); +#endif + /* FLCD_CS_S */ + gpio_cfg_pin(&gpio_base->gpio_mp0_5, 1, GPIO_OUTPUT); /* FLCD_CLK */ gpio_cfg_pin(&gpio_base->gpio_mp0_4, 0, GPIO_OUTPUT); /* FLCD_SDI */ @@ -1527,10 +1616,12 @@ void lcd_cfg_gpio(void) gpio_cfg_pin(&gpio_base->gpio_mp0_4, 5, GPIO_OUTPUT); /* FLCD_ON_S */ gpio_cfg_pin(&gpio_base->gpio_g2, 2, GPIO_OUTPUT); - +#if 0 /* universal cypress */ pd_cs.bank = &gpio_base->gpio_mp0_1; pd_cs.num = 0; - +#endif + pd_cs.bank = &gpio_base->gpio_mp0_5; + pd_cs.num = 1; pd_clk.bank = &gpio_base->gpio_mp0_4; pd_clk.num = 0; pd_si.bank = &gpio_base->gpio_mp0_4; @@ -1582,6 +1673,39 @@ void lcd_power_on(unsigned int onoff) gpio_set_value(&gpio->gpio_j1, 4, 1); */ +#ifdef ARIES + if (board_is_aries()) + { + unsigned char addr; + unsigned char val[2]; + unsigned char val2[2]; + + i2c_set_bus_num(I2C_PMIC); + addr = 0xCC >> 1; /* max8998 */ + if (i2c_probe(addr)) { + printf("Can't found max8998\n"); + return; + } + + i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); + val[0] |= (1 << 7); + val2[0] = 0x2; + i2c_write(addr, MAX8998_REG_LDO7, 1, val2, 1); + i2c_read(addr, MAX8998_REG_LDO7, 1, val2, 1); + i2c_write(addr, MAX8998_REG_ONOFF2, 1, val, 1); + i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); + + i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); + val[0] |= MAX8998_LDO17; + val2[0] = 0xE; + i2c_write(addr, MAX8998_REG_LDO7, 1, val2, 1); + i2c_read(addr, MAX8998_REG_LDO7, 1, val2, 1); + i2c_write(addr, MAX8998_REG_ONOFF3, 1, val, 1); + i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); + } +#endif /* ARIES */ + + } else { if (machine_is_aquila() || machine_is_geminus()) gpio_set_value(&gpio->gpio_j1, 3, 0); @@ -1594,6 +1718,31 @@ void lcd_power_on(unsigned int onoff) gpio_set_value(&gpio->gpio_j1, 4, 0); */ +#ifdef ARIES + if (board_is_aries()) + { + unsigned char addr; + unsigned char val[2]; + + i2c_set_bus_num(I2C_PMIC); + addr = 0xCC >> 1; /* max8998 */ + if (i2c_probe(addr)) { + printf("Can't found max8998\n"); + return; + } + + i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); + val[0] &= ~(1 << 7); + i2c_write(addr, MAX8998_REG_ONOFF2, 1, val, 1); + i2c_read(addr, MAX8998_REG_ONOFF2, 1, val, 1); + + i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); + val[0] &= ~MAX8998_LDO17; + i2c_write(addr, MAX8998_REG_ONOFF3, 1, val, 1); + i2c_read(addr, MAX8998_REG_ONOFF3, 1, val, 1); + } +#endif /* ARIES */ + } } @@ -1775,6 +1924,8 @@ int misc_init_r(void) */ if (machine_is_geminus()) setenv("lcdinfo", "lcd=lms480jc01"); + if (board_is_media()) + setenv("lcdinfo", "lcd=media"); /* if (board_is_p2_real()) setenv("lcdinfo", "lcd=ams701"); diff --git a/drivers/video/Makefile b/drivers/video/Makefile index 3ca1aba..f8cb6d1 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -37,11 +37,7 @@ COBJS-$(CONFIG_SED156X) += sed156x.o COBJS-$(CONFIG_VIDEO_SM501) += sm501.o COBJS-$(CONFIG_VIDEO_SMI_LYNXEM) += smiLynxEM.o COBJS-$(CONFIG_VIDEO_VCXK) += bus_vcxk.o -ifneq ("$(BOARD)", "p1p2") COBJS-$(CONFIG_S5PC1XXFB) += s5p-fb.o s5p-fimd.o s6e63m0.o -else -COBJS-$(CONFIG_S5PC1XXFB) += s5p-fb.o s5p-fimd.o ams701ka.o -endif #COBJS-$(CONFIG_S5PC1XXFB) += s5p-fb.o s5p-fimd.o ams701ka.o #COBJS-$(CONFIG_S5PC1XXFB) += s5p-fb.o s5p_fimd_aquila.o tl2796_aquila.o diff --git a/drivers/video/ams701ka.c b/drivers/video/ams701ka.c index 1f46289..8ba553c 100644 --- a/drivers/video/ams701ka.c +++ b/drivers/video/ams701ka.c @@ -60,15 +60,18 @@ const unsigned short SEQ_MANUAL_DISPLAY_ON[] = { SLEEPMSEC, 1, 0x12, 0x0007, SLEEPMSEC, 1, - 0x12, 0x000f, - SLEEPMSEC, 1, - 0x2e, 0x0607, + 0x2e, 0x0605, SLEEPMSEC, 1, - 0x30, 0x090d, - 0x31, 0x0105, + 0x30, 0x2307, + 0x31, 0x161E, SLEEPMSEC, 5, + 0x12, 0x000f, + SLEEPMSEC, 10, 0x12, 0x001f, - + SLEEPMSEC, 10, + + 0xf4, 0x0003, + ENDDEF, 0x0000 }; @@ -119,22 +122,22 @@ const unsigned short GAMMA_SETTING[] = { #endif #if 1 /* 1.0 */ /* High Red Gamma */ - 0x40, 0xc609, - 0x41, 0xdad6, - 0x42, 0xc3b8, - 0x43, 0x009f, + 0x40, 0x0720, + 0x41, 0xCBA7, + 0x42, 0xAB92, + 0x43, 0x0088, /* High Green Gamma */ - 0x44, 0xbc04, - 0x45, 0xdad4, - 0x46, 0xc1b5, - 0x47, 0x00bb, + 0x44, 0x7804, + 0x45, 0xCEBE, + 0x46, 0xB39E, + 0x47, 0x00A4, /* High Blue Gamma */ - 0x48, 0xc009, - 0x49, 0xd4d4, - 0x4a, 0xbbb0, - 0x4b, 0x00dc, + 0x48, 0x0009, + 0x49, 0xC6B9, + 0x4a, 0xA996, + 0x4b, 0x00C7, #endif @@ -146,7 +149,7 @@ const unsigned short MANUAL_POWER_ON_SETTING[] = { SLEEPMSEC, 30, 0x06, 0x0001, SLEEPMSEC, 30, - 0x06, 0x0003, + 0x06, 0x0005, SLEEPMSEC, 30, 0x06, 0x0007, SLEEPMSEC, 30, @@ -165,18 +168,14 @@ const unsigned short MANUAL_POWER_ON_SETTING[] = { 0x03, 0x134A, /* ETC Register setting */ 0x04, 0x86a4, /* LTPS Power on setting VCIR=2.7V Display is not clean */ - 0x13, 0x9610, + 0x14, 0x0808, /* VFP, VBP Register setting */ 0x15, 0x3090, /* HSW,HFP,HBP Register setting */ - 0x32, 0x0002, - 0x3f, 0x0004, ENDDEF, 0x0000 }; const unsigned short SEQ_SLEEP_OUT[] = { - 0x06, 0x4000, - 0x12, 0x0040, 0x02, 0x2300, /* Sleep Out */ SLEEPMSEC, 1, ENDDEF, 0x0000 @@ -184,7 +183,7 @@ const unsigned short SEQ_SLEEP_OUT[] = { const unsigned short ACL_ON_DISPLAY_SETTING[] = { 0x5b, 0x0013, - 0x5c, 0x0200, + 0x5c, 0x0000, 0x5d, 0x03ff, 0x5e, 0x0000, 0x5f, 0x0257, @@ -317,26 +316,17 @@ static void ams701ka_panel_send_sequence(const unsigned short *wbuf) void ams701ka_lcd_panel_power_on(void) { - /* set gpio data for MLCD_ON to HIGH */ - gpio_set_value(&gpio->gpio_j1, 3, 1); - gpio_set_value(&gpio->gpio_j2, 6, 1); - udelay(100000); - /* set gpio data for MLCD_RST to HIGH */ gpio_set_value(&gpio->gpio_mp0_5, 5, 1); gpio_set_value(&gpio->gpio_mp0_5, 5, 0); udelay(100000); gpio_set_value(&gpio->gpio_mp0_5, 5, 1); - ams701ka_panel_send_sequence(GAMMA_SETTING); - ams701ka_panel_send_sequence(SEQ_SLEEP_OUT); - ams701ka_panel_send_sequence(MANUAL_POWER_ON_SETTING); - ams701ka_panel_send_sequence(SEQ_DISPLAY_ON); - ams701ka_panel_send_sequence(ACL_ON_DISPLAY_SETTING); -} + /* set gpio data for MLCD_ON to HIGH */ + gpio_set_value(&gpio->gpio_j1, 3, 1); + gpio_set_value(&gpio->gpio_j1, 4, 1); + udelay(100000); -void ams701ka_cfg_ldo(void) -{ ams701ka_panel_send_sequence(GAMMA_SETTING); ams701ka_panel_send_sequence(SEQ_SLEEP_OUT); ams701ka_panel_send_sequence(MANUAL_POWER_ON_SETTING); @@ -344,14 +334,6 @@ void ams701ka_cfg_ldo(void) ams701ka_panel_send_sequence(ACL_ON_DISPLAY_SETTING); } -void ams701ka_enable_ldo(unsigned int onoff) -{ - if(onoff) { - ams701ka_panel_send_sequence(SEQ_DISPLAY_ON); - } else { - ams701ka_panel_send_sequence(SEQ_DISPLAY_OFF); - } -} static inline void ams701ka_c110_panel_hw_reset(void) { diff --git a/lib_arm/Makefile b/lib_arm/Makefile index 07e5d09..b42112e 100644 --- a/lib_arm/Makefile +++ b/lib_arm/Makefile @@ -38,11 +38,7 @@ GLCOBJS += div0.o SOBJS-y += _memcpy32.o -ifneq ("$(BOARD)", "p1p2") COBJS-y += board.o -else -COBJS-y += board_p1p2.o -endif COBJS-y += bootm.o COBJS-y += cache.o ifndef CONFIG_SYS_NO_CP15_CACHE diff --git a/lib_arm/board.c b/lib_arm/board.c index 0d29ac6..e148739 100644 --- a/lib_arm/board.c +++ b/lib_arm/board.c @@ -334,7 +334,6 @@ void start_armboot (void) puts ("NAND: "); nand_init(); /* go init the NAND */ #endif - pmic_pin_init(); /* for PS_HOLD_CONTROL activation */ #if defined(CONFIG_CMD_ONENAND) onenand_init(); diff --git a/lib_arm/board_p1p2.c b/lib_arm/board_p1p2.c deleted file mode 100644 index 0d29ac6..0000000 --- a/lib_arm/board_p1p2.c +++ /dev/null @@ -1,450 +0,0 @@ -/* - * (C) Copyright 2002-2006 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * (C) Copyright 2002 - * Sysgo Real-Time Solutions, GmbH - * Marius Groeger - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -/* - * To match the U-Boot user interface on ARM platforms to the U-Boot - * standard (as on PPC platforms), some messages with debug character - * are removed from the default U-Boot build. - * - * Define DEBUG here if you want additional info as shown below - * printed upon startup: - * - * U-Boot code: 00F00000 -> 00F3C774 BSS: -> 00FC3274 - * IRQ Stack: 00ebff7c - * FIQ Stack: 00ebef7c - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CONFIG_BITBANGMII -#include -#endif - -#ifdef CONFIG_DRIVER_SMC91111 -#include "../drivers/net/smc91111.h" -#endif -#ifdef CONFIG_DRIVER_LAN91C96 -#include "../drivers/net/lan91c96.h" -#endif - -DECLARE_GLOBAL_DATA_PTR; - -ulong monitor_flash_len; - -#ifdef CONFIG_HAS_DATAFLASH -extern int AT91F_DataflashInit(void); -extern void dataflash_print_info(void); -#endif - -#ifndef CONFIG_IDENT_STRING -#define CONFIG_IDENT_STRING "" -#endif - -const char version_string[] = - U_BOOT_VERSION" (" U_BOOT_DATE " - " U_BOOT_TIME ")"CONFIG_IDENT_STRING; - -#ifdef CONFIG_DRIVER_RTL8019 -extern void rtl8019_get_enetaddr (uchar * addr); -#endif - -#if defined(CONFIG_HARD_I2C) || \ - defined(CONFIG_SOFT_I2C) -#include -#endif - - -/************************************************************************ - * Coloured LED functionality - ************************************************************************ - * May be supplied by boards if desired - */ -void inline __coloured_LED_init (void) {} -void coloured_LED_init (void) __attribute__((weak, alias("__coloured_LED_init"))); -void inline __red_LED_on (void) {} -void red_LED_on (void) __attribute__((weak, alias("__red_LED_on"))); -void inline __red_LED_off(void) {} -void red_LED_off(void) __attribute__((weak, alias("__red_LED_off"))); -void inline __green_LED_on(void) {} -void green_LED_on(void) __attribute__((weak, alias("__green_LED_on"))); -void inline __green_LED_off(void) {} -void green_LED_off(void) __attribute__((weak, alias("__green_LED_off"))); -void inline __yellow_LED_on(void) {} -void yellow_LED_on(void) __attribute__((weak, alias("__yellow_LED_on"))); -void inline __yellow_LED_off(void) {} -void yellow_LED_off(void) __attribute__((weak, alias("__yellow_LED_off"))); -void inline __blue_LED_on(void) {} -void blue_LED_on(void) __attribute__((weak, alias("__blue_LED_on"))); -void inline __blue_LED_off(void) {} -void blue_LED_off(void) __attribute__((weak, alias("__blue_LED_off"))); - -/************************************************************************ - * Init Utilities * - ************************************************************************ - * Some of this code should be moved into the core functions, - * or dropped completely, - * but let's get it working (again) first... - */ - -#if defined(CONFIG_ARM_DCC) && !defined(CONFIG_BAUDRATE) -#define CONFIG_BAUDRATE 115200 -#endif -static int init_baudrate (void) -{ - char tmp[64]; /* long enough for environment variables */ - int i = getenv_r ("baudrate", tmp, sizeof (tmp)); - gd->bd->bi_baudrate = gd->baudrate = (i > 0) - ? (int) simple_strtoul (tmp, NULL, 10) - : CONFIG_BAUDRATE; - - return (0); -} - -static int display_banner (void) -{ - printf ("\n\n%s\n\n", version_string); - debug ("U-Boot code: %08lX -> %08lX BSS: -> %08lX\n", - _armboot_start, _bss_start, _bss_end); -#ifdef CONFIG_MODEM_SUPPORT - debug ("Modem Support enabled\n"); -#endif -#ifdef CONFIG_USE_IRQ - debug ("IRQ Stack: %08lx\n", IRQ_STACK_START); - debug ("FIQ Stack: %08lx\n", FIQ_STACK_START); -#endif - - return (0); -} - -/* - * WARNING: this code looks "cleaner" than the PowerPC version, but - * has the disadvantage that you either get nothing, or everything. - * On PowerPC, you might see "DRAM: " before the system hangs - which - * gives a simple yet clear indication which part of the - * initialization if failing. - */ -static int display_dram_config (void) -{ - int i; - -#ifdef DEBUG - puts ("RAM Configuration:\n"); - - for(i=0; ibd->bi_dram[i].start); - print_size (gd->bd->bi_dram[i].size, "\n"); - } -#else - ulong size = 0; - - for (i=0; ibd->bi_dram[i].size; - } - puts("DRAM: "); - print_size(size, "\n"); -#endif - - return (0); -} - -#ifndef CONFIG_SYS_NO_FLASH -static void display_flash_config (ulong size) -{ - puts ("Flash: "); - print_size (size, "\n"); -} -#endif /* CONFIG_SYS_NO_FLASH */ - -#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C) -static int init_func_i2c (void) -{ - puts ("I2C: "); - i2c_init (CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); - puts ("ready\n"); - return (0); -} -#endif - -#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI) -#include -static int arm_pci_init(void) -{ - pci_init(); - return 0; -} -#endif /* CONFIG_CMD_PCI || CONFIG_PCI */ - -/* - * Breathe some life into the board... - * - * Initialize a serial port as console, and carry out some hardware - * tests. - * - * The first part of initialization is running from Flash memory; - * its main purpose is to initialize the RAM so that we - * can relocate the monitor code to RAM. - */ - -/* - * All attempts to come up with a "common" initialization sequence - * that works for all boards and architectures failed: some of the - * requirements are just _too_ different. To get rid of the resulting - * mess of board dependent #ifdef'ed code we now make the whole - * initialization sequence configurable to the user. - * - * The requirements for any new initalization function is simple: it - * receives a pointer to the "global data" structure as it's only - * argument, and returns an integer return code, where 0 means - * "continue" and != 0 means "fatal error, hang the system". - */ -typedef int (init_fnc_t) (void); - -int print_cpuinfo (void); - -init_fnc_t *init_sequence[] = { -#if defined(CONFIG_ARCH_CPU_INIT) - arch_cpu_init, /* basic arch cpu dependent setup */ -#endif - board_init, /* basic board dependent setup */ -#if defined(CONFIG_USE_IRQ) - interrupt_init, /* set up exceptions */ -#endif - timer_init, /* initialize timer */ - env_init, /* initialize environment */ - init_baudrate, /* initialze baudrate settings */ - serial_init, /* serial communications setup */ - console_init_f, /* stage 1 init of console */ - display_banner, /* say that we are here */ -#if defined(CONFIG_DISPLAY_CPUINFO) - print_cpuinfo, /* display cpu info (and speed) */ -#endif -#if defined(CONFIG_DISPLAY_BOARDINFO) - checkboard, /* display board info */ -#endif -#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C) - init_func_i2c, -#endif - dram_init, /* configure available RAM banks */ -#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI) - arm_pci_init, -#endif - display_dram_config, - NULL, -}; - -void start_armboot (void) -{ - init_fnc_t **init_fnc_ptr; - char *s; -#if defined(CONFIG_VFD) || defined(CONFIG_LCD) - unsigned long addr; -#endif - - /* Pointer is writable since we allocated a register for it */ - gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t)); - /* compiler optimization barrier needed for GCC >= 3.4 */ - __asm__ __volatile__("": : :"memory"); - - memset ((void*)gd, 0, sizeof (gd_t)); - gd->bd = (bd_t*)((char*)gd - sizeof(bd_t)); - memset (gd->bd, 0, sizeof (bd_t)); - - gd->flags |= GD_FLG_RELOC; - - monitor_flash_len = _bss_start - _armboot_start; - - for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { - if ((*init_fnc_ptr)() != 0) { - hang (); - } - } - - /* armboot_start is defined in the board-specific linker script */ - mem_malloc_init (_armboot_start - CONFIG_SYS_MALLOC_LEN, - CONFIG_SYS_MALLOC_LEN); - -#ifndef CONFIG_SYS_NO_FLASH - /* configure available FLASH banks */ - display_flash_config (flash_init ()); -#endif /* CONFIG_SYS_NO_FLASH */ - -#ifdef CONFIG_VFD -# ifndef PAGE_SIZE -# define PAGE_SIZE 4096 -# endif - /* - * reserve memory for VFD display (always full pages) - */ - /* bss_end is defined in the board-specific linker script */ - addr = (_bss_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); - vfd_setmem (addr); - gd->fb_base = addr; -#endif /* CONFIG_VFD */ - -#ifdef CONFIG_LCD - /* board init may have inited fb_base */ - if (!gd->fb_base) { -# ifndef PAGE_SIZE -# define PAGE_SIZE 4096 -# endif - /* - * reserve memory for LCD display (always full pages) - */ - /* bss_end is defined in the board-specific linker script */ - addr = (_bss_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); - lcd_setmem (addr); - gd->fb_base = addr; - } -#endif /* CONFIG_LCD */ - -#if defined(CONFIG_CMD_NAND) - puts ("NAND: "); - nand_init(); /* go init the NAND */ -#endif - pmic_pin_init(); /* for PS_HOLD_CONTROL activation */ - -#if defined(CONFIG_CMD_ONENAND) - onenand_init(); -#endif - -#ifdef CONFIG_HAS_DATAFLASH - AT91F_DataflashInit(); - dataflash_print_info(); -#endif - - /* initialize environment */ - env_relocate (); - -#ifdef CONFIG_VFD - /* must do this after the framebuffer is allocated */ - drv_vfd_init(); -#endif /* CONFIG_VFD */ - -#ifdef CONFIG_SERIAL_MULTI - serial_initialize(); -#endif - - /* IP Address */ - gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); - - stdio_init (); /* get the devices list going. */ - - jumptable_init (); - -#if defined(CONFIG_API) - /* Initialize API */ - api_init (); -#endif - - console_init_r (); /* fully init console as a device */ - -#if defined(CONFIG_ARCH_MISC_INIT) - /* miscellaneous arch dependent initialisations */ - arch_misc_init (); -#endif -#if defined(CONFIG_MISC_INIT_R) - /* miscellaneous platform dependent initialisations */ - misc_init_r (); -#endif - - /* enable exceptions */ - enable_interrupts (); - - /* Perform network card initialisation if necessary */ -#ifdef CONFIG_DRIVER_TI_EMAC - /* XXX: this needs to be moved to board init */ -extern void davinci_eth_set_mac_addr (const u_int8_t *addr); - if (getenv ("ethaddr")) { - uchar enetaddr[6]; - eth_getenv_enetaddr("ethaddr", enetaddr); - davinci_eth_set_mac_addr(enetaddr); - } -#endif - -#if defined(CONFIG_DRIVER_SMC91111) || defined (CONFIG_DRIVER_LAN91C96) - /* XXX: this needs to be moved to board init */ - if (getenv ("ethaddr")) { - uchar enetaddr[6]; - eth_getenv_enetaddr("ethaddr", enetaddr); - smc_set_mac_addr(enetaddr); - } -#endif /* CONFIG_DRIVER_SMC91111 || CONFIG_DRIVER_LAN91C96 */ - - /* Initialize from environment */ - if ((s = getenv ("loadaddr")) != NULL) { - load_addr = simple_strtoul (s, NULL, 16); - } -#if defined(CONFIG_CMD_NET) - if ((s = getenv ("bootfile")) != NULL) { - copy_filename (BootFile, s, sizeof (BootFile)); - } -#endif - -#ifdef BOARD_LATE_INIT - board_late_init (); -#endif - -#ifdef CONFIG_GENERIC_MMC - puts ("MMC: "); - mmc_initialize (gd->bd); -#endif - -#ifdef CONFIG_BITBANGMII - bb_miiphy_init(); -#endif -#if defined(CONFIG_CMD_NET) -#if defined(CONFIG_NET_MULTI) - puts ("Net: "); -#endif - eth_initialize(gd->bd); -#if defined(CONFIG_RESET_PHY_R) - debug ("Reset Ethernet PHY\n"); - reset_phy(); -#endif -#endif - /* main_loop() can return to retry autoboot, if so just run it again. */ - for (;;) { - main_loop (); - } - - /* NOTREACHED - no way out of command loop except booting */ -} - -void hang (void) -{ - puts ("### ERROR ### Please RESET the board ###\n"); - for (;;); -} -- 2.7.4