From owner-freebsd-arm@FreeBSD.ORG Sun Jun 20 13:03:10 2010 Return-Path: Delivered-To: freebsd-arm@FreeBSD.org Received: from hub.freebsd.org (localhost [127.0.0.1]) by hub.freebsd.org (Postfix) with SMTP id DA2EA106566C; Sun, 20 Jun 2010 13:03:08 +0000 (UTC) (envelope-from nork@FreeBSD.org) Date: Sun, 20 Jun 2010 22:03:02 +0900 From: Norikatsu Shigemura To: Rafal Jaworowski , Warner Losh , Alexander Motin Message-Id: <20100620220302.8eb84547.nork@FreeBSD.org> X-Mailer: Sylpheed 3.0.2 (GTK+ 2.20.1; i386-portbld-freebsd8.1) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Sun__20_Jun_2010_22_03_02_+0900_vgXKlSxC7UaEVq/+" Cc: freebsd-arm@FreeBSD.org, Norikatsu, Shigemura Subject: OpenRD-Client/Ultimate support X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Jun 2010 13:03:10 -0000 This is a multi-part message in MIME format. --Multipart=_Sun__20_Jun_2010_22_03_02_+0900_vgXKlSxC7UaEVq/+ Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi raj, imp and mav. I made some patches for OpenRD Client and Ultimate. By my patches, I confirmed that I can use OpenRD Ultimate (Sorry, I don't have OpenRD Client). If you OKed, I'll commit attached patches. My modifications: mge(4): 1. Change how to get PHY numbers if not defined `phy-handle' on a dts file. OpenRD already set it on FreeBSD booting. Suggested by: hrs@ 2. Change how to set PHY numbers. Suggested by: Kristof Provost 3. Remove waiting link-up codes. Reported by: nyan@ 4. Don't count-up watchdog timer if link downed. Pointed out by: yongari@ mvs(4): 5. FDT-ish Kernel Configuration: 6. Generated by DB-88F6XXX, and added some my flavour, mvs(4). Device Tree Source: 7. Generated by db88f6281.dts. 8. Add second NIC. 9. Setup MPP for OpenRD Client/Ultimate. Obtained from: u-boot-1.1.4_2010.5.5.tar.bz2 on http://code.google.com/p/openrd/downloads/list 10. Change PCI address range. TODO: a. OpenRD base support (some different MPP) b. uart(4) is storange, maybe s/1066/115200/: uart0: console (1066,n,8,1) c. PCI mem address range 0xf4000000 to 0xe8000000 (max 128MB) In this time, I can get following results, so I set following parameter to openrd-cl.dts. If PCIe device require 128MB, maybe, can't allocate. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - map[10]: type Prefetchable Memory, range 32, base 0xf4000000, size 26, enabled map[14]: type Memory, range 32, base 0xf8000000, size 18, enabled map[18]: type I/O Port, range 32, base 0xf1100000, size 7, enabled - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - But I can't understand how to describe pci0: related parameters. So I don't have any idea to change address window. d. Fix MII PHY initialization issue: 88E1116R, 88E1121 (88E1249) Result of /var/run/dmesg.boot - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KDB: debugger backends: ddb KDB: current backend: ddb Copyright (c) 1992-2010 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 9.0-CURRENT #61: Thu Jan 1 09:00:00 JST 1970 nork@dummy:/usr/obj/arm/usr/src/sys/OPENRD-CL arm Preloaded elf kernel "elf kernel" at 0xc0c07e84. CPU: Feroceon 88FR131 rev 1 (Marvell core) DC enabled IC enabled WB enabled EABT branch prediction enabled 16KB/32B 4-way Instruction cache 16KB/32B 4-way write-back-locking-C Data cache real memory = 536870912 (512 MB) Physical memory chunk(s): 00000000 - 0x8fffff, 9437184 bytes (2304 pages) 0xcfb000 - 0x1f64bfff, 513085440 bytes (125265 pages) avail memory = 520273920 (496 MB) SOC: (0x6281:0x03) Marvell 88F6281 rev A1, TClock 200MHz random: null: mem: openfirm: nfslock: pseudo-device fdtbus0: on motherboard simplebus0: on fdtbus0 ic0: mem 0xf1020200-0xf102023b on simplebus0 timer0: mem 0xf1020300-0xf102032f irq 1 on simplebus0 timer0: [FILTER] gpio0: mem 0xf1010100-0xf101011f irq 35,36,37,38,39,40,41 on simplebus0 gpio0: [FILTER] gpio0: [FILTER] gpio0: [FILTER] gpio0: [FILTER] gpio0: [FILTER] gpio0: [FILTER] gpio0: [FILTER] rtc0: mem 0xf1010300-0xf1010307 on simplebus0 rtc0: registered as a time-of-day clock (resolution 1000000us) twsi0: mem 0xf1011000-0xf101101f irq 43 on simplebus0 iicbus0: on twsi0 iic0: on iicbus0 mge0: mem 0xf1072000-0xf1073fff irq 12,13,14,11,46 on simplebus0 mge0: bpf attached mge0: Ethernet address: 00:50:43:01:55:18 miibus0: on mge0 e1000phy0: PHY 0 on miibus0 e1000phy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto mge0: [MPSAFE] mge0: [ITHREAD] mge0: [MPSAFE] mge0: [ITHREAD] mge1: mem 0xf1076000-0xf1077fff irq 16,17,18,15,47 on simplebus0 mge1: bpf attached mge1: Ethernet address: 00:50:43:01:55:19 miibus1: on mge1 e1000phy1: PHY 1 on miibus1 e1000phy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto mge1: [MPSAFE] mge1: [ITHREAD] mge1: [MPSAFE] mge1: [ITHREAD] uart0: <16550 or compatible> mem 0xf1012000-0xf101201f irq 33 on simplebus0 uart0: [FILTER] uart0: fast interrupt uart0: console (1066,n,8,1) uart1: <16550 or compatible> mem 0xf1012100-0xf101211f irq 34 on simplebus0 uart1: [FILTER] uart1: fast interrupt ehci0: mem 0xf1050000-0xf1050fff irq 48,19 on simplebus0 ehci0: [FILTER] ehci0: [MPSAFE] ehci0: [ITHREAD] ehci0: 5.24 GL USB-2 workaround enabled usbus0: EHCI version 1.0 usbus0: set host controller mode usbus0: on ehci0 sata0: mem 0xf1080000-0xf1085fff irq 21 on simplebus0 sata0: Gen-IIe, 2 3Gbps ports, Port Multiplier supported with FBS sata0: [MPSAFE] sata0: [ITHREAD] mvsch0: at channel 0 on sata0 mvsch0: [MPSAFE] mvsch0: [ITHREAD] mvsch1: at channel 1 on sata0 mvsch1: [MPSAFE] mvsch1: [ITHREAD] pcib0: mem 0xf1040000-0xf1041fff irq 44 on fdtbus0 PCI 0:1:0: reg 10: size=04000000: addr=f4000000 PCI 0:1:0: reg 14: size=00040000: addr=f8000000 PCI 0:1:0: reg 18: size=00000080: addr=f1100000 pci0: on pcib0 pci0: domain=0, physical bus=0 found-> vendor=0x18ca, dev=0x0027, revid=0x00 domain=0, bus=0, slot=1, func=0 class=03-00-00, hdrtype=0x00, mfdev=0 cmdreg=0x0007, statreg=0x0010, cachelnsz=8 (dwords) lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns) powerspec 2 supports D0 D1 D2 D3 current D0 MSI supports 1 message map[10]: type Prefetchable Memory, range 32, base 0xf4000000, size 26, enabled map[14]: type Memory, range 32, base 0xf8000000, size 18, enabled map[18]: type I/O Port, range 32, base 0xf1100000, size 7, enabled vgapci0: port 0xf1100000-0xf110007f mem 0xf4000000-0xf7ffffff,0xf8000000-0xf803ffff at device 1.0 on pci0 Timecounter "CPU Timer" frequency 200000000 Hz quality 1000 Timecounters tick every 1.000 msec vlan: initialized, using hash tables with chaining lo0: bpf attached usbus0: 480Mbps High Speed USB v2.0 mvsch0: MVS reset... mvsch0: SATA connect timeout status=00000000 mvsch0: MVS reset done: phy reset found no device mvsch1: MVS reset... mvsch1: SATA connect timeout status=00000000 mvsch1: MVS reset done: phy reset found no device ugen0.1: at usbus0 uhub0: on usbus0 bootpc_init: wired to interface 'mge0' Sending DHCP Discover packet from interface mge0 (00:50:43:01:55:18) uhub0: 1 port with 1 removable, self powered ugen0.2: at usbus0 uhub1: on usbus0 uhub1: 4 ports with 4 removable, self powered ugen0.3: at usbus0 uhub2: on usbus0 Received DHCP Offer packet on mge0 from 192.168.36.249 (accepted) (no root path) Received DHCP Offer packet on mge0 from 192.168.36.249 (ignored) (no root path) Received DHCP Offer packet on mge0 from 192.168.36.249 (ignored) (no root path) uhub2: 4 ports with 4 removable, self powered Sending DHCP Request packet from interface mge0 (00:50:43:01:55:18) Received DHCP Ack packet on mge0 from 192.168.36.249 (accepted) (got root path) mge0 at 192.168.36.32 server 192.168.36.249 boot file kernel.bin subnet mask 255.255.255.0 router 192.168.36.1 rootfs 192.168.36.249:/sandbox/mv88f6281 rootopts nolockd Adjusted interface mge0 Trying to mount root from nfs:. Press CTRL+C to abort. NFS ROOT: 192.168.36.249:/sandbox/mv88f6281 ct_to_ts([2010-06-20 12:26:32]) = 1277036792.000000000 ct_to_ts([2010-06-20 12:26:32]) = 1277036792.000000000 start_init: trying /sbin/init bridge0: bpf attached bridge0: Ethernet address: ea:f1:41:17:54:1b - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Result of devinfo -rv - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nexus0 fdtbus0 unknown unknown simplebus0 ic0 I/O memory: 0xf1020200-0xf102023b timer0 Interrupt request lines: 1 I/O memory: 0xf1020300-0xf102032f unknown gpio0 Interrupt request lines: 35 36 37 38 39 40 41 I/O memory: 0xf1010100-0xf101011f rtc0 I/O memory: 0xf1010300-0xf1010307 twsi0 I/O memory: 0xf1011000-0xf101101f iicbus0 iic0 at addr=0 mge0 Interrupt request lines: 11 12 13 14 46 I/O memory: 0xf1072000-0xf1073fff miibus0 e1000phy0 pnpinfo oui=0x5043 model=0xb rev=0x3 at phyno=0 mge1 Interrupt request lines: 15 16 17 18 47 I/O memory: 0xf1076000-0xf1077fff miibus1 e1000phy1 pnpinfo oui=0x5043 model=0xb rev=0x3 at phyno=1 uart0 Interrupt request lines: 33 I/O memory: 0xf1012000-0xf101201f uart1 Interrupt request lines: 34 I/O memory: 0xf1012100-0xf101211f unknown ehci0 Interrupt request lines: 19 48 I/O memory: 0xf1050000-0xf1050fff usbus0 uhub0 uhub1 pnpinfo vendor=0x05e3 product=0x0610 devclass=0x09 devsubclass=0x00 sernum="" release=0x7732 intclass=0x09 intsubclass=0x00 at bus=1 hubaddr=1 port=0 devaddr=2 interface=0 uhub2 pnpinfo vendor=0x05e3 product=0x0610 devclass=0x09 devsubclass=0x00 sernum="" release=0x7732 intclass=0x09 intsubclass=0x00 at bus=2 hubaddr=1 port=0 devaddr=3 interface=0 unknown sata0 Interrupt request lines: 21 I/O memory: 0xf1080000-0xf1085fff mvsch0 at channel=0 I/O memory addresses: 0xf1082000-0xf1083fff mvsch1 at channel=1 I/O memory addresses: 0xf1084000-0xf1085fff unknown pcib0 I/O memory: 0xf1040000-0xf1041fff pci0 vgapci0 pnpinfo vendor=0x18ca device=0x0027 subvendor=0x0000 subdevice=0x0000 class=0x030000 at slot=1 function=0 : 4093640704-4160749567 4160749568-4161011711 : 4044357632-4044357759 drm0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- Norikatsu Shigemura --Multipart=_Sun__20_Jun_2010_22_03_02_+0900_vgXKlSxC7UaEVq/+ Content-Type: text/plain; name="if_mge.c.diff" Content-Disposition: attachment; filename="if_mge.c.diff" Content-Transfer-Encoding: 7bit --- sys/dev/mge/if_mge.c.orig 2010-06-13 22:28:53.000000000 +0900 +++ sys/dev/mge/if_mge.c 2010-06-19 15:34:22.787728912 +0900 @@ -626,7 +626,6 @@ mge_attach(device_t dev) { struct mge_softc *sc; - struct mii_softc *miisc; struct ifnet *ifp; uint8_t hwaddr[ETHER_ADDR_LEN]; int i, error ; @@ -643,7 +642,7 @@ /* Get phy address from fdt */ if (fdt_get_phyaddr(sc->node, &sc->phyaddr) != 0) - return (ENXIO); + sc->phyaddr = -1; /* Initialize mutexes */ mtx_init(&sc->transmit_lock, device_get_nameunit(dev), "mge TX lock", MTX_DEF); @@ -674,6 +673,9 @@ sc->tx_ic_time = 768; mge_add_sysctls(sc); + if (sc->phyaddr == -1) + sc->phyaddr = MGE_READ(sc, MGE_REG_PHYDEV); + /* Allocate network interface */ ifp = sc->ifp = if_alloc(IFT_ETHER); if (ifp == NULL) { @@ -716,8 +718,7 @@ sc->mii = device_get_softc(sc->miibus); /* Tell the MAC where to find the PHY so autoneg works */ - miisc = LIST_FIRST(&sc->mii->mii_phys); - MGE_WRITE(sc, MGE_REG_PHYDEV, miisc->mii_phy); + MGE_WRITE(sc, MGE_REG_PHYDEV, sc->phyaddr); /* Attach interrupt handlers */ for (i = 0; i < 2; ++i) { @@ -867,8 +868,7 @@ struct mge_softc *sc = arg; struct mge_desc_wrapper *dw; volatile uint32_t reg_val; - int i, count; - + int i; MGE_GLOBAL_LOCK_ASSERT(sc); @@ -948,17 +948,6 @@ reg_val = MGE_READ(sc, MGE_PORT_SERIAL_CTRL); reg_val |= PORT_SERIAL_ENABLE; MGE_WRITE(sc, MGE_PORT_SERIAL_CTRL, reg_val); - count = 0x100000; - for (;;) { - reg_val = MGE_READ(sc, MGE_PORT_STATUS); - if (reg_val & MGE_STATUS_LINKUP) - break; - DELAY(100); - if (--count == 0) { - if_printf(sc->ifp, "Timeout on link-up\n"); - break; - } - } /* Setup interrupts coalescing */ mge_set_rxic(sc); @@ -1489,8 +1478,8 @@ MGE_TRANSMIT_LOCK_ASSERT(sc); - if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != - IFF_DRV_RUNNING) + if (IFM_SUBTYPE(sc->mii->mii_media_active) == IFM_NONE || + (ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING) return; for (;;) { --Multipart=_Sun__20_Jun_2010_22_03_02_+0900_vgXKlSxC7UaEVq/+ Content-Type: text/plain; name="mvs_soc.c.diff" Content-Disposition: attachment; filename="mvs_soc.c.diff" Content-Transfer-Encoding: 7bit --- sys/dev/mvs/mvs_soc.c.orig 2010-05-22 23:16:43.239261000 +0900 +++ sys/dev/mvs/mvs_soc.c 2010-06-19 16:15:28.024566573 +0900 @@ -43,6 +43,8 @@ #include #include #include +#include +#include #include "mvs.h" /* local prototypes */ @@ -73,6 +75,9 @@ int i; uint32_t devid, revid; + if (!ofw_bus_is_compatible(dev, "mrvl,sata")) + return (ENXIO); + soc_id(&devid, &revid); for (i = 0; mvs_ids[i].id != 0; i++) { if (mvs_ids[i].id == devid && @@ -445,6 +450,6 @@ mvs_methods, sizeof(struct mvs_controller) }; -DRIVER_MODULE(sata, mbus, mvs_driver, mvs_devclass, 0, 0); +DRIVER_MODULE(sata, simplebus, mvs_driver, mvs_devclass, 0, 0); MODULE_VERSION(sata, 1); --Multipart=_Sun__20_Jun_2010_22_03_02_+0900_vgXKlSxC7UaEVq/+ Content-Type: text/plain; name="OPENRD-CL" Content-Disposition: attachment; filename="OPENRD-CL" Content-Transfer-Encoding: base64 Iw0KIyBDdXN0b20ga2VybmVsIGZvciBPcGVuUkQgQ2xpZW50L1VsdGltYXRlIGRldmljZXMuDQoj DQojICRGcmVlQlNEJA0KIw0KDQppZGVudAkJT1BFTlJELUNMDQppbmNsdWRlCQkiLi4vbXYva2ly a3dvb2Qvc3RkLmRiODhmNnh4eCINCg0Kb3B0aW9ucyAJU09DX01WX0tJUktXT09EDQptYWtlb3B0 aW9ucwlNT0RVTEVTX09WRVJSSURFPSIiDQoNCm1ha2VvcHRpb25zCURFQlVHPS1nCQkjQnVpbGQg a2VybmVsIHdpdGggZ2RiKDEpIGRlYnVnIHN5bWJvbHMNCm1ha2VvcHRpb25zCVdFUlJPUj0iLVdl cnJvciINCg0Kb3B0aW9ucyAJU0NIRURfNEJTRAkJIzRCU0Qgc2NoZWR1bGVyDQpvcHRpb25zIAlJ TkVUCQkJI0ludGVyTkVUd29ya2luZw0Kb3B0aW9ucyAJSU5FVDYJCQkjSVB2NiBjb21tdW5pY2F0 aW9ucyBwcm90b2NvbHMNCm9wdGlvbnMgCUZGUwkJCSNCZXJrZWxleSBGYXN0IEZpbGVzeXN0ZW0N Cm9wdGlvbnMgCU5GU0NMSUVOVAkJI05ldHdvcmsgRmlsZXN5c3RlbSBDbGllbnQNCm9wdGlvbnMg CU5GU0xPQ0tECQkjTmV0d29yayBMb2NrIE1hbmFnZXINCm9wdGlvbnMgCU5GU19ST09UCQkjTkZT IHVzYWJsZSBhcyAvLCByZXF1aXJlcyBORlNDTElFTlQNCm9wdGlvbnMgCUJPT1RQDQpvcHRpb25z IAlCT09UUF9ORlNST09UDQpvcHRpb25zIAlCT09UUF9ORlNWMw0Kb3B0aW9ucyAJQk9PVFBfV0lS RURfVE89bWdlMA0KDQojIFJvb3QgZnMgb24gVVNCIGRldmljZQ0KI29wdGlvbnMgCVJPT1RERVZO QU1FPVwidWZzOi9kZXYvZGEwYVwiDQoNCm9wdGlvbnMgCVNZU1ZTSE0JCQkjU1lTVi1zdHlsZSBz aGFyZWQgbWVtb3J5DQpvcHRpb25zIAlTWVNWTVNHCQkJI1NZU1Ytc3R5bGUgbWVzc2FnZSBxdWV1 ZXMNCm9wdGlvbnMgCVNZU1ZTRU0JCQkjU1lTVi1zdHlsZSBzZW1hcGhvcmVzDQpvcHRpb25zIAlf S1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcgI1Bvc2l4IFAxMDAzXzFCIHJlYWwtdGltZSBleHRl bnNpb25zDQpvcHRpb25zIAlNVVRFWF9OT0lOTElORQ0Kb3B0aW9ucyAJUldMT0NLX05PSU5MSU5F DQpvcHRpb25zIAlOT19GRlNfU05BUFNIT1QNCm9wdGlvbnMgCU5PX1NXQVBQSU5HDQoNCiMgRGVi dWdnaW5nDQpvcHRpb25zIAlBTFRfQlJFQUtfVE9fREVCVUdHRVINCm9wdGlvbnMgCUREQg0Kb3B0 aW9ucyAJS0RCDQoNCiMgUHNldWRvIGRldmljZXMNCmRldmljZQkJbG9vcA0KZGV2aWNlCQltZA0K ZGV2aWNlCQlwdHkNCmRldmljZQkJcmFuZG9tDQoNCiMgUENJIEV4cHJlc3MNCmRldmljZQkJcGNp DQoNCiMgU2VyaWFsIHBvcnRzDQpkZXZpY2UJCXVhcnQNCg0KIyBOZXR3b3JraW5nDQpkZXZpY2UJ CWV0aGVyDQpkZXZpY2UJCW1nZQkJCSMgTWFydmVsbCBHaWdhYml0IEV0aGVybmV0IGNvbnRyb2xs ZXINCmRldmljZQkJbWlpDQpkZXZpY2UJCWUxMDAwcGh5DQpkZXZpY2UJCWJwZg0KDQojIFVTQg0K b3B0aW9ucyAJVVNCX0RFQlVHCQkjIGVuYWJsZSBkZWJ1ZyBtc2dzDQpkZXZpY2UJCXVzYg0KZGV2 aWNlCQllaGNpDQpkZXZpY2UJCXVtYXNzDQoNCiMgU0FUQQ0KZGV2aWNlCQltdnMNCg0KIyBDQU0N CmRldmljZQkJc2NidXMNCmRldmljZQkJZGENCmRldmljZQkJY2QNCmRldmljZQkJcGFzcw0KDQoj IEkyQyAoVFdTSSkNCmRldmljZQkJaWljDQpkZXZpY2UJCWlpY2J1cw0KDQojIEVuYWJsZSBGbGF0 dGVuZWQgRGV2aWNlIFRyZWUgc3VwcG9ydA0Kb3B0aW9ucyAJRkRUDQpvcHRpb25zCQlGRFRfRFRC X1NUQVRJQw0KbWFrZW9wdGlvbnMJRkRUX0RUU19GSUxFPW9wZW5yZC1jbC5kdHMNCg== --Multipart=_Sun__20_Jun_2010_22_03_02_+0900_vgXKlSxC7UaEVq/+ Content-Type: text/plain; name="openrd-cl.dts" Content-Disposition: attachment; filename="openrd-cl.dts" Content-Transfer-Encoding: base64 LyoNCiAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFRoZSBGcmVlQlNEIEZvdW5kYXRpb24NCiAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVk IGJ5IFNlbWloYWxmIHVuZGVyIHNwb25zb3JzaGlwIGZyb20NCiAqIHRoZSBGcmVlQlNEIEZvdW5k YXRpb24uDQogKg0KICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFyZSBtZXQ6DQogKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodA0KICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLg0KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uDQogKg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQog KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQ0KICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICogRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTDQogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUDQogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZDQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQogKiBTVUNIIERBTUFH RS4NCiAqDQogKiBPcGVuUkQtQ2xpZW50L1VsdGltYXRlIERldmljZSBUcmVlIFNvdXJjZS4NCiAq DQogKiAkRnJlZUJTRCQNCiAqLw0KDQovZHRzLXYxLzsNCg0KLyB7DQoJbW9kZWwgPSAibXJ2bCxP cGVuUkQtQ0wiOw0KCWNvbXBhdGlibGUgPSAiT3BlblJELUNMIjsNCgkjYWRkcmVzcy1jZWxscyA9 IDwxPjsNCgkjc2l6ZS1jZWxscyA9IDwxPjsNCg0KCWFsaWFzZXMgew0KCQlldGhlcm5ldDAgPSAm ZW5ldDA7DQoJCWV0aGVybmV0MSA9ICZlbmV0MTsNCgkJbXBwID0gJk1QUDsNCgkJcGNpMCA9ICZw Y2kwOw0KCQlzZXJpYWwwID0gJnNlcmlhbDA7DQoJCXNlcmlhbDEgPSAmc2VyaWFsMTsNCgkJc29j ID0gJlNPQzsNCgkJc3JhbSA9ICZTUkFNOw0KCX07DQoNCgljcHVzIHsNCgkJI2FkZHJlc3MtY2Vs bHMgPSA8MT47DQoJCSNzaXplLWNlbGxzID0gPDA+Ow0KDQoJCWNwdUAwIHsNCgkJCWRldmljZV90 eXBlID0gImNwdSI7DQoJCQljb21wYXRpYmxlID0gIkFSTSw4OEZSMTMxIjsNCgkJCXJlZyA9IDww eDA+Ow0KCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcw0KCQkJaS1jYWNo ZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcw0KCQkJZC1jYWNoZS1zaXplID0gPDB4NDAw MD47CS8vIEwxLCAxNksNCgkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLDQoJ CQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47DQoJCQlidXMtZnJlcXVlbmN5ID0gPDA+Ow0KCQkJ Y2xvY2stZnJlcXVlbmN5ID0gPDA+Ow0KCQl9Ow0KCX07DQoNCgltZW1vcnkgew0KCQlkZXZpY2Vf dHlwZSA9ICJtZW1vcnkiOw0KCQlyZWcgPSA8MHgwIDB4MjAwMDAwMDA+OwkJLy8gNTEyTSBhdCAw eDANCgl9Ow0KDQoJbG9jYWxidXNAZjEwMDAwMDAgew0KCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsN CgkJI3NpemUtY2VsbHMgPSA8MT47DQoJCWNvbXBhdGlibGUgPSAibXJ2bCxsYmMiOw0KDQoJCS8q IFRoaXMgcmVmbGVjdHMgQ1BVIGRlY29kZSB3aW5kb3dzIHNldHVwLiAqLw0KCQlyYW5nZXMgPSA8 MHgwIDB4MGYgMHhmOTMwMDAwMCAweDAwMTAwMDAwDQoJCQkgIDB4MSAweDFlIDB4ZmEwMDAwMDAg MHgwMDEwMDAwMA0KCQkJICAweDIgMHgxZCAweGZhMTAwMDAwIDB4MDIwMDAwMDANCgkJCSAgMHgz IDB4MWIgMHhmYzEwMDAwMCAweDAwMDAwNDAwPjsNCg0KCQlub3JAMCwwIHsNCgkJCSNhZGRyZXNz LWNlbGxzID0gPDE+Ow0KCQkJI3NpemUtY2VsbHMgPSA8MT47DQoJCQljb21wYXRpYmxlID0gImNm aS1mbGFzaCI7DQoJCQlyZWcgPSA8MHgwIDB4MCAweDAwMTAwMDAwPjsNCgkJCWJhbmstd2lkdGgg PSA8Mj47DQoJCQlkZXZpY2Utd2lkdGggPSA8MT47DQoJCX07DQoNCgkJbGVkQDEsMCB7DQoJCQkj YWRkcmVzcy1jZWxscyA9IDwxPjsNCgkJCSNzaXplLWNlbGxzID0gPDE+Ow0KCQkJY29tcGF0aWJs ZSA9ICJsZWQiOw0KCQkJcmVnID0gPDB4MSAweDAgMHgwMDEwMDAwMD47DQoJCX07DQoNCgkJbm9y QDIsMCB7DQoJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsNCgkJCSNzaXplLWNlbGxzID0gPDE+Ow0K CQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOw0KCQkJcmVnID0gPDB4MiAweDAgMHgwMjAwMDAw MD47DQoJCQliYW5rLXdpZHRoID0gPDI+Ow0KCQkJZGV2aWNlLXdpZHRoID0gPDE+Ow0KCQl9Ow0K DQoJCW5hbmRAMywwIHsNCgkJCSNhZGRyZXNzLWNlbGxzID0gPDE+Ow0KCQkJI3NpemUtY2VsbHMg PSA8MT47DQoJCQlyZWcgPSA8MHgzIDB4MCAweDAwMTAwMDAwPjsNCgkJCWJhbmstd2lkdGggPSA8 Mj47DQoJCQlkZXZpY2Utd2lkdGggPSA8MT47DQoJCX07DQoJfTsNCg0KCVNPQzogc29jODhmNjI4 MUBmMTAwMDAwMCB7DQoJCSNhZGRyZXNzLWNlbGxzID0gPDE+Ow0KCQkjc2l6ZS1jZWxscyA9IDwx PjsNCgkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsNCgkJcmFuZ2VzID0gPDB4MCAweGYxMDAw MDAwIDB4MDAxMDAwMDA+Ow0KCQlidXMtZnJlcXVlbmN5ID0gPDA+Ow0KDQoJCVBJQzogcGljQDIw MjAwIHsNCgkJCWludGVycnVwdC1jb250cm9sbGVyOw0KCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47 DQoJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+Ow0KCQkJcmVnID0gPDB4MjAyMDAgMHgzYz47DQoJ CQljb21wYXRpYmxlID0gIm1ydmwscGljIjsNCgkJfTsNCg0KCQl0aW1lckAyMDMwMCB7DQoJCQlj b21wYXRpYmxlID0gIm1ydmwsdGltZXIiOw0KCQkJcmVnID0gPDB4MjAzMDAgMHgzMD47DQoJCQlp bnRlcnJ1cHRzID0gPDE+Ow0KCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsNCgkJCW1ydmws aGFzLXdkdDsNCgkJfTsNCg0KCQlNUFA6IG1wcEAxMDAwMCB7DQoJCQkjcGluLWNlbGxzID0gPDI+ Ow0KCQkJY29tcGF0aWJsZSA9ICJtcnZsLG1wcCI7DQoJCQlyZWcgPSA8MHgxMDAwMCAweDM0PjsN CgkJCXBpbi1jb3VudCA9IDw1MD47DQoJCQlwaW4tbWFwID0gPA0KCQkJCTAgIDEJCS8qIE1QUFsw XTogIE5GX0lPWzJdICovDQoJCQkJMSAgMQkJLyogTVBQWzFdOiAgTkZfSU9bM10gKi8NCgkJCQky ICAxCQkvKiBNUFBbMl06ICBORl9JT1s0XSAqLw0KCQkJCTMgIDEJCS8qIE1QUFszXTogIE5GX0lP WzVdICovDQoJCQkJNCAgMQkJLyogTVBQWzRdOiAgTkZfSU9bNl0gKi8NCgkJCQk1ICAxCQkvKiBN UFBbNV06ICBORl9JT1s3XSAqLw0KCQkJCTYgIDEJCS8qIE1QUFs2XTogIFNZU1JTVF9PVVRuICov DQoJCQkJNyAgMAkJLyogTVBQWzddOiAgR1BPWzddICovDQoJCQkJOCAgMQkJLyogTVBQWzhdOiAg VFdfU0RBICovDQoJCQkJOSAgMQkJLyogTVBQWzldOiAgVFdfU0NLICovDQoJCQkJMTAgMwkJLyog TVBQWzEwXTogVUEwX1RYRCAqLw0KCQkJCTExIDMJCS8qIE1QUFsxMV06IFVBMF9SWEQgKi8NCgkJ CQkxMiAxCQkvKiBNUFBbMTJdOiBTRF9DTEsgKi8NCgkJCQkxMyAxCQkvKiBNUFBbMTNdOiBTRF9D TUQgKi8NCgkJCQkxNCAxCQkvKiBNUFBbMTRdOiBTRF9EWzBdICovDQoJCQkJMTUgMQkJLyogTVBQ WzE1XTogU0RfRFsxXSAqLw0KCQkJCTE2IDEJCS8qIE1QUFsxNl06IFNEX0RbMl0gKi8NCgkJCQkx NyAxCQkvKiBNUFBbMTddOiBTRF9EWzNdICovDQoJCQkJMTggMQkJLyogTVBQWzE4XTogTkZfSU9b MF0gKi8NCgkJCQkxOSAxCQkvKiBNUFBbMTldOiBORl9JT1sxXSAqLw0KCQkJCTIwIDMJCS8qIE1Q UFsyMF06IEdFMVswXSAqLw0KCQkJCTIxIDMJCS8qIE1QUFsyMV06IEdFMVsxXSAqLw0KCQkJCTIy IDMJCS8qIE1QUFsyMl06IEdFMVsyXSAqLw0KCQkJCTIzIDMJCS8qIE1QUFsyM106IEdFMVszXSAq Lw0KCQkJCTI0IDMJCS8qIE1QUFsyNF06IEdFMVs0XSAqLw0KCQkJCTI1IDMJCS8qIE1QUFsyNV06 IEdFMVs1XSAqLw0KCQkJCTI2IDMJCS8qIE1QUFsyNl06IEdFMVs2XSAqLw0KCQkJCTI3IDMJCS8q IE1QUFsyN106IEdFMVs3XSAqLw0KCQkJCTI4IDAJCS8qIE1QUFsyOF06IEdQSU9bMjhdICovDQoJ CQkJMjkgMQkJLyogTVBQWzI5XTogVFNNUFs5XSAqLw0KCQkJCTMwIDMJCS8qIE1QUFszMF06IEdF MVsxMF0gKi8NCgkJCQkzMSAzCQkvKiBNUFBbMzFdOiBHRTFbMTFdICovDQoJCQkJMzIgMwkJLyog TVBQWzMyXTogR0UxWzEyXSAqLw0KCQkJCTMzIDMJCS8qIE1QUFszM106IEdFMVsxM10gKi8NCgkJ CQkzNCAwCQkvKiBNUFBbMzRdOiBHUElPWzM0XSAqLw0KCQkJCTM1IDIJCS8qIE1QUFszNV06IFRE TV9DSDBfVFhfUUwgKi8NCgkJCQkzNiAyCQkvKiBNUFBbMzZdOiBURE1fU1BJX0NTMSAqLw0KCQkJ CTM3IDIJCS8qIE1QUFszN106IFRETV9DSDJfVFhfUUwgKi8NCgkJCQkzOCAyCQkvKiBNUFBbMzhd OiBURE1fQ0gyX1JYX1FMICovDQoJCQkJMzkgNAkJLyogTVBQWzM5XTogQVVfSTJTQkNMSyAqLw0K CQkJCTQwIDQJCS8qIE1QUFs0MF06IEFVX0kyU0RPICovDQoJCQkJNDEgNAkJLyogTVBQWzQxXTog QVVfSTJTTFJDTEsgKi8NCgkJCQk0MiA0CQkvKiBNUFBbNDJdOiBBVV9JMlNNQ0xLICovDQoJCQkJ NDMgNAkJLyogTVBQWzQzXTogQVVfSTJTREkgKi8NCgkJCQk0NCA0CQkvKiBNUFBbNDRdOiBBVV9F WFRDTEsgKi8NCgkJCQk0NSAyCQkvKiBNUFBbNDVdOiBURE1fUENMSyAqLw0KCQkJCTQ2IDIJCS8q IE1QUFs0Nl06IFRETV9GUyAqLw0KCQkJCTQ3IDIJCS8qIE1QUFs0N106IFRETV9EUlggKi8NCgkJ CQk0OCAyCQkvKiBNUFBbNDhdOiBURE1fRFRYICovDQoJCQkJNDkgMj47CQkvKiBNUFBbNDldOiBU RE1fQ0gwX1RYX1FMICovDQoJCX07DQoNCgkJR1BJTzogZ3Bpb0AxMDEwMCB7DQoJCQkjZ3Bpby1j ZWxscyA9IDwzPjsNCgkJCWNvbXBhdGlibGUgPSAibXJ2bCxncGlvIjsNCgkJCXJlZyA9IDwweDEw MTAwIDB4MjA+Ow0KCQkJZ3Bpby1jb250cm9sbGVyOw0KCQkJaW50ZXJydXB0cyA9IDwzNSAzNiAz NyAzOCAzOSA0MCA0MT47DQoJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+Ow0KCQl9Ow0KDQoJ CXJ0Y0AxMDMwMCB7DQoJCQljb21wYXRpYmxlID0gIm1ydmwscnRjIjsNCgkJCXJlZyA9IDwweDEw MzAwIDB4MDg+Ow0KCQl9Ow0KDQoJCXR3c2lAMTEwMDAgew0KCQkJI2FkZHJlc3MtY2VsbHMgPSA8 MT47DQoJCQkjc2l6ZS1jZWxscyA9IDwwPjsNCgkJCWNvbXBhdGlibGUgPSAibXJ2bCx0d3NpIjsN CgkJCXJlZyA9IDwweDExMDAwIDB4MjA+Ow0KCQkJaW50ZXJydXB0cyA9IDw0Mz47DQoJCQlpbnRl cnJ1cHQtcGFyZW50ID0gPCZQSUM+Ow0KCQl9Ow0KDQoJCWVuZXQwOiBldGhlcm5ldEA3MjAwMCB7 DQoJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsNCgkJCSNzaXplLWNlbGxzID0gPDE+Ow0KCQkJbW9k ZWwgPSAiVjIiOw0KCQkJY29tcGF0aWJsZSA9ICJtcnZsLGdlIjsNCgkJCXJlZyA9IDwweDcyMDAw IDB4MjAwMD47DQoJCQlyYW5nZXMgPSA8MHgwIDB4NzIwMDAgMHgyMDAwPjsNCgkJCWxvY2FsLW1h Yy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOw0KCQkJaW50ZXJydXB0cyA9IDwxMiAx MyAxNCAxMSA0Nj47DQoJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+Ow0KDQoJCQltZGlvQDAg ew0KCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+Ow0KCQkJCSNzaXplLWNlbGxzID0gPDA+Ow0KCQkJ CWNvbXBhdGlibGUgPSAibXJ2bCxtZGlvIjsNCgkJCX07DQoJCX07DQoNCgkJZW5ldDE6IGV0aGVy bmV0QDc2MDAwIHsNCgkJCSNhZGRyZXNzLWNlbGxzID0gPDE+Ow0KCQkJI3NpemUtY2VsbHMgPSA8 MT47DQoJCQltb2RlbCA9ICJWMiI7DQoJCQljb21wYXRpYmxlID0gIm1ydmwsZ2UiOw0KCQkJcmVn ID0gPDB4NzYwMDAgMHgyMDAwPjsNCgkJCXJhbmdlcyA9IDwweDAgMHg3NjAwMCAweDIwMDA+Ow0K CQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07DQoJCQlpbnRlcnJ1 cHRzID0gPDE2IDE3IDE4IDE1IDQ3PjsNCgkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47DQoN CgkJCW1kaW9AMSB7DQoJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47DQoJCQkJI3NpemUtY2VsbHMg PSA8MD47DQoJCQkJY29tcGF0aWJsZSA9ICJtcnZsLG1kaW8iOw0KCQkJfTsNCgkJfTsNCg0KCQlz ZXJpYWwwOiBzZXJpYWxAMTIwMDAgew0KCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsNCgkJCXJl ZyA9IDwweDEyMDAwIDB4MjA+Ow0KCQkJcmVnLXNoaWZ0ID0gPDI+Ow0KCQkJY2xvY2stZnJlcXVl bmN5ID0gPDA+Ow0KCQkJaW50ZXJydXB0cyA9IDwzMz47DQoJCQlpbnRlcnJ1cHQtcGFyZW50ID0g PCZQSUM+Ow0KCQl9Ow0KDQoJCXNlcmlhbDE6IHNlcmlhbEAxMjEwMCB7DQoJCQljb21wYXRpYmxl ID0gIm5zMTY1NTAiOw0KCQkJcmVnID0gPDB4MTIxMDAgMHgyMD47DQoJCQlyZWctc2hpZnQgPSA8 Mj47DQoJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47DQoJCQlpbnRlcnJ1cHRzID0gPDM0PjsNCgkJ CWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47DQoJCX07DQoNCgkJY3J5cHRvQDMwMDAwIHsNCgkJ CWNvbXBhdGlibGUgPSAibXJ2bCxjZXNhIjsNCgkJCXJlZyA9IDwweDMwMDAwIDB4MTAwMDA+Ow0K CQkJaW50ZXJydXB0cyA9IDwyMj47DQoJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+Ow0KCQl9 Ow0KDQoJCXVzYkA1MDAwMCB7DQoJCQljb21wYXRpYmxlID0gIm1ydmwsdXNiLWVoY2kiLCAidXNi LWVoY2kiOw0KCQkJcmVnID0gPDB4NTAwMDAgMHgxMDAwPjsNCgkJCWludGVycnVwdHMgPSA8NDgg MTk+Ow0KCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsNCgkJfTsNCg0KCQl4b3JANjAwMDAg ew0KCQkJY29tcGF0aWJsZSA9ICJtcnZsLHhvciI7DQoJCQlyZWcgPSA8MHg2MDAwMCAweDEwMDA+ Ow0KCQkJaW50ZXJydXB0cyA9IDw1IDYgNyA4PjsNCgkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJ Qz47DQoJCX07DQoNCgkJc2F0YUA4MDAwMCB7DQoJCQljb21wYXRpYmxlID0gIm1ydmwsc2F0YSI7 DQoJCQlyZWcgPSA8MHg4MDAwMCAweDYwMDA+Ow0KCQkJaW50ZXJydXB0cyA9IDwyMT47DQoJCQlp bnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+Ow0KCQl9Ow0KCX07DQoNCglTUkFNOiBzcmFtQGZkMDAw MDAwIHsNCgkJY29tcGF0aWJsZSA9ICJtcnZsLGNlc2Etc3JhbSI7DQoJCXJlZyA9IDwweGZkMDAw MDAwIDB4MDAxMDAwMDA+Ow0KCX07DQoNCgljaG9zZW4gew0KCQlzdGRpbiAgPSAic2VyaWFsMCI7 DQoJCXN0ZG91dCA9ICJzZXJpYWwwIjsNCgl9Ow0KDQoJcGNpMDogcGNpZUBmMTA0MDAwMCB7DQoJ CWNvbXBhdGlibGUgPSAibXJ2bCxwY2llIjsNCgkJZGV2aWNlX3R5cGUgPSAicGNpIjsNCgkJI2lu dGVycnVwdC1jZWxscyA9IDwxPjsNCgkJI3NpemUtY2VsbHMgPSA8Mj47DQoJCSNhZGRyZXNzLWNl bGxzID0gPDM+Ow0KCQlyZWcgPSA8MHhmMTA0MDAwMCAweDIwMDA+Ow0KCQlidXMtcmFuZ2UgPSA8 MCAyNTU+Ow0KCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhmNDAwMDAwMCAweGY0MDAwMDAw IDB4MCAweDA0MDAwMDAwDQoJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmMTEwMDAw MCAweDAgMHgwMDEwMDAwMD47DQoJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47DQoJCWlu dGVycnVwdC1wYXJlbnQgPSA8JlBJQz47DQoJCWludGVycnVwdHMgPSA8NDQ+Ow0KCQlpbnRlcnJ1 cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsNCgkJaW50ZXJydXB0LW1hcCA9IDwN CgkJCS8qIElEU0VMIDB4MSAqLw0KCQkJMHgwODAwIDB4MCAweDAgMHgxICZQSUMgMHg5DQoJCQkw eDA4MDAgMHgwIDB4MCAweDIgJlBJQyAweDkNCgkJCTB4MDgwMCAweDAgMHgwIDB4MyAmUElDIDB4 OQ0KCQkJMHgwODAwIDB4MCAweDAgMHg0ICZQSUMgMHg5DQoJCQk+Ow0KCQlwY2llQDAgew0KCQkJ cmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+Ow0KCQkJI3NpemUtY2VsbHMgPSA8Mj47DQoJCQkj YWRkcmVzcy1jZWxscyA9IDwzPjsNCgkJCWRldmljZV90eXBlID0gInBjaSI7DQoJCQlyYW5nZXMg PSA8MHgwMjAwMDAwMCAweDAgMHhmNDAwMDAwMA0KCQkJCSAgMHgwMjAwMDAwMCAweDAgMHhmNDAw MDAwMA0KCQkJCSAgMHgwIDB4MDQwNDAwMDANCg0KCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwDQoJ CQkJICAweDAxMDAwMDAwIDB4MCAweDANCgkJCQkgIDB4MCAweDAwMTAwMDAwPjsNCgkJfTsNCgl9 Ow0KfTsNCg== --Multipart=_Sun__20_Jun_2010_22_03_02_+0900_vgXKlSxC7UaEVq/+--